Symi Integrator¶
-
template<unsigned int order, UpdateType step>
class QDynamics::Symi : public QDynamics::Magi<order, step>¶ A simple subclass of QDynamics::Magi which overloads the Magi::Magnus() function with an exact analytical expressions, removing the need for numerical estimation of the terms. We therefore set Magi::Resolution to 0, as this is no longer needed.
When working with Symi, note that you have to be explicit about member variables because of template based inheritance: Dependent names vs Independent names. It’s inbuilt into the specification for reasons I don’t quite know. Therefore, you must refer to member variables as
Symi::x, rather than justx.Public Functions
-
inline Symi(double T, double deltaT)¶
Constructor, as per Integrator::Integrator(double,double).
- Parameters
T – The total duration of the integration
deltaT – the width of timesteps used
-
inline Symi(double T, double deltaT, int skipper)¶
Constructor, as per Integrator::Integrator(double,double,int).
- Parameters
T – The total duration of the integration
deltaT – the width of timesteps used
skipper – The number of epochs which pass in between updates to the progess Integrator::Buffer
Protected Functions
-
inline virtual Quaternion Magnus(double duration)¶
The primary purpose of this subclass. This heavily mathematical function computes exactly the terms of the Magnus expansion exactly (up to numerical precision), in the case where the moment of inertia matrix is aligned such that J = (I,I,J_z).
- Parameters
t – The duration of the torque-free precession
-
inline virtual void MakeName()¶
Generates a print-and-filename-friendly name depending on the properties of the integrator.
-
inline Symi(double T, double deltaT)¶