16 #define SOT_FACTORY_TEMPLATE_ENTITY_PLUGIN_EULER(sotClassType, sotSigType, \ 17 sotCoefType, className) \ 19 std::string sotClassType<sotSigType, sotCoefType>::getTypeName(void) { \ 23 const std::string sotClassType<sotSigType, sotCoefType>::CLASS_NAME = \ 26 const std::string &sotClassType<sotSigType, sotCoefType>::getClassName(void) \ 31 Entity *regFunction##_##sotSigType##_##sotCoefType( \ 32 const std::string &objname) { \ 33 return new sotClassType<sotSigType, sotCoefType>(objname); \ 35 EntityRegisterer regObj##_##sotSigType##_##sotCoefType( \ 36 sotClassType<sotSigType, sotCoefType>::CLASS_NAME, \ 37 ®Function##_##sotSigType##_##sotCoefType); \ 44 "IntegratorEulerDoubleDouble")
46 "IntegratorEulerVectorMatrix")
48 "IntegratorEulerVectorDouble")
50 template class IntegratorEuler<
double,
double>;
51 template class IntegratorEuler<Vector,
double>;
52 template class IntegratorEuler<Vector, Matrix>;
integrates an ODE using a naive Euler integration. TODO: change the integration method. For the moment, the highest derivative of the output signal is computed using the previous values of the other derivatives and the input signal, then integrated n times, which will most certainly induce a huge drift for ODEs with a high order at the denominator.
SOT_FACTORY_TEMPLATE_ENTITY_PLUGIN_EULER(IntegratorEuler, double, double, "IntegratorEulerDoubleDouble") SOT_FACTORY_TEMPLATE_ENTITY_PLUGIN_EULER(IntegratorEuler