|
OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
|
Time dependence that follows a spline. More...
#include <SplineTimeDependence.h>


Public Member Functions | |
| SplineTimeDependence (size_t splineOrder, const std::vector< double > ×, const std::vector< double > &values) | |
| Constructor. More... | |
| SplineTimeDependence (const SplineTimeDependence &rhs) | |
| Copy Constructor. More... | |
| SplineTimeDependence ()=default | |
| Default Constructor makes a dependence of length 2 with values 0. More... | |
| ~SplineTimeDependence () override | |
| Destructor cleans up the GSL spline stuff. More... | |
| double | getValue (double time) override |
| Return the value of the spline at a given time. More... | |
| double | getIntegral (double time) override |
| Return the integral of the spline from 0 to the given time. More... | |
| SplineTimeDependence * | clone () override |
| Inheritable copy constructor. More... | |
| Inform & | print (Inform &os) const |
| Print summary information about the time dependence. More... | |
| void | setSpline (size_t splineOrder, const std::vector< double > ×, const std::vector< double > &values) |
| Set the spline, deleting any existing spline data. More... | |
Static Public Member Functions | |
| static std::shared_ptr< AbstractTimeDependence > | getTimeDependence (std::string name) |
| Look up the time dependence that has a given name. More... | |
| static void | setTimeDependence (std::string name, std::shared_ptr< AbstractTimeDependence > time_dep) |
| Add a value to the lookup table. More... | |
| static std::string | getName (std::shared_ptr< AbstractTimeDependence > time_dep) |
| Get the name corresponding to a given time_dep. More... | |
Private Attributes | |
| gsl_spline * | spline_m {} |
| gsl_interp_accel * | acc_m {} |
| size_t | splineOrder_m {1} |
| std::vector< double > | times_m |
| std::vector< double > | values_m |
Static Private Attributes | |
| static std::map< std::string, std::shared_ptr< AbstractTimeDependence > > | td_map |
Time dependence that follows a spline.
Interpolation is supported at linear or cubic order..
Interpolation is done using gsl_spline routines (1st or 3rd order).
Nb: I tried to use PolynomialPatch, as it is arbitrary order interpolation, but it turns out that only works for regular grids.
Definition at line 50 of file SplineTimeDependence.h.
| SplineTimeDependence::SplineTimeDependence | ( | size_t | splineOrder, |
| const std::vector< double > & | times, | ||
| const std::vector< double > & | values | ||
| ) |
Constructor.
| splineOrder | the order of the spline used to fit the time dependence; either 1 (linear interpolation) or 3 (cubic spline with quadratic smoothing) |
| times | the times of successive elements in the time dependence |
| values | the values at each time step. |
It is an error if times and values are not of equal length, times and values length < splineOrder + 1, or times do not increase strictly monotonically.
Definition at line 33 of file SplineTimeDependence.cpp.
References setSpline(), and Expressions::times.

| SplineTimeDependence::SplineTimeDependence | ( | const SplineTimeDependence & | rhs | ) |
Copy Constructor.
Definition at line 38 of file SplineTimeDependence.cpp.
References setSpline(), splineOrder_m, times_m, and values_m.

|
default |
Default Constructor makes a dependence of length 2 with values 0.
Referenced by clone().
|
override |
Destructor cleans up the GSL spline stuff.
Definition at line 42 of file SplineTimeDependence.cpp.
|
overridevirtual |
Inheritable copy constructor.
Implements AbstractTimeDependence.
Definition at line 51 of file SplineTimeDependence.cpp.
References splineOrder_m, SplineTimeDependence(), times_m, and values_m.

|
overridevirtual |
Return the integral of the spline from 0 to the given time.
| time | time at which the spline is referenced. |
Implements AbstractTimeDependence.
Definition at line 120 of file SplineTimeDependence.cpp.
|
staticinherited |
Get the name corresponding to a given time_dep.
| time_dep | time dependence to lookup |
| GeneralClassicException | if time_dep is not recognised |
Definition at line 50 of file AbstractTimeDependence.cpp.
References AbstractTimeDependence::td_map.
|
staticinherited |
Look up the time dependence that has a given name.
| name | name of the time dependence |
| GeneralClassicException | if name is not recognised |
Definition at line 36 of file AbstractTimeDependence.cpp.
References name, and AbstractTimeDependence::td_map.
Referenced by PyOpal::PyAbstractTimeDependence::function(), VariableRFCavity::initialise(), MultipoleT::initialiseTimeDepencencies(), and ParallelCyclotronTracker::visitRFCavity().
|
overridevirtual |
Return the value of the spline at a given time.
| time | time at which the spline is referenced. If time is off either end of the spline, the last few values are used to extrapolate past the end of the spline. |
Implements AbstractTimeDependence.
Definition at line 110 of file SplineTimeDependence.cpp.
Print summary information about the time dependence.
| os | "Inform" stream to which the information is printed. |
Definition at line 57 of file SplineTimeDependence.cpp.
References endl(), spline_m, splineOrder_m, and times_m.
Referenced by operator<<().

| void SplineTimeDependence::setSpline | ( | size_t | splineOrder, |
| const std::vector< double > & | times, | ||
| const std::vector< double > & | values | ||
| ) |
Set the spline, deleting any existing spline data.
| splineOrder | 1 for linear, 3 for cubic, all other values invalid |
| times | the times of successive elements in the time dependence |
| values | the values at each time step. |
Definition at line 67 of file SplineTimeDependence.cpp.
References acc_m, spline_m, Expressions::times, times_m, and values_m.
Referenced by SplineTimeDependence().
|
staticinherited |
Add a value to the lookup table.
| name | name of the time dependence. If name already exists in the map, it is overwritten with the new value. |
| time_dep | shared_ptr to the time dependence. |
Definition at line 45 of file AbstractTimeDependence.cpp.
References name, and AbstractTimeDependence::td_map.
Referenced by OpalPolynomialTimeDependence::update(), OpalSinusoidalTimeDependence::update(), and OpalSplineTimeDependence::update().
|
private |
Definition at line 113 of file SplineTimeDependence.h.
Referenced by getIntegral(), getValue(), setSpline(), and ~SplineTimeDependence().
|
private |
Definition at line 112 of file SplineTimeDependence.h.
Referenced by getIntegral(), getValue(), print(), setSpline(), and ~SplineTimeDependence().
|
private |
Definition at line 114 of file SplineTimeDependence.h.
Referenced by clone(), print(), and SplineTimeDependence().
|
staticprivateinherited |
Definition at line 100 of file AbstractTimeDependence.h.
Referenced by AbstractTimeDependence::getName(), AbstractTimeDependence::getTimeDependence(), and AbstractTimeDependence::setTimeDependence().
|
private |
Definition at line 115 of file SplineTimeDependence.h.
Referenced by clone(), getIntegral(), getValue(), print(), setSpline(), and SplineTimeDependence().
|
private |
Definition at line 116 of file SplineTimeDependence.h.
Referenced by clone(), setSpline(), and SplineTimeDependence().