I am building a new force model and I am struggling with the implementation of the methods involving CalculusFieldElements. Is the implementation mandatory if I do not want to compute Jacobians?
Hi @SergioD
The implementation is mandatory for the computation of Jacobian since the CalculusFieldElements implementation is used to computed derivatives using automatic differentiation.
If you don’t need to compute partial derivatives of the acceleration with respect to parameters, so I don’t think you need to implement the CalculusFieldElements method.
Maybe you can throw an exception if the CalculusFieldElements method is called?
Thanks to that, if the method is used, you will have an exception highlighting yhe need to implement it
Regards,
Bryan
Right now I am using this implementation
@Override
public <T extends CalculusFieldElement<T>> FieldVector3D<T> computeThrustDirection(
FieldSpacecraftState<T> s, T[] parameters) {
throw new UnsupportedOperationException("Operation not supported");
}
My worry was that the method with the exception was called at some point by the propagator, I guess that if I do not call AbstractPropagator.setupMatricesComputation() it shouldn’t matter.
AbstractPropagator.setupMatricesComputation()
is used activate the computation of the state transition matrix by the propagator. Because the variational equations used to compute the state transition matrix are integrated simultaneously with the main state equation, its activation is done by the propagator. In Orekit, it is done by the AbstractPropagator.setupMatricesComputation()
.
According to your first message, if you don’t need to compute Jacobian, you don’t need to call the AbstractPropagator.setupMatricesComputation()
method.
Best regards,
Bryan