Class FieldNumericalPropagator<T extends CalculusFieldElement<T>>

Type Parameters:
T - type of the field elements
All Implemented Interfaces:
FieldPropagator<T>, FieldPVCoordinatesProvider<T>

public class FieldNumericalPropagator<T extends CalculusFieldElement<T>> extends FieldAbstractIntegratedPropagator<T>
This class propagates orbits using numerical integration.

Numerical propagation is much more accurate than analytical propagation like for example Keplerian or Eckstein-Hechler, but requires a few more steps to set up to be used properly. Whereas analytical propagators are configured only thanks to their various constructors and can be used immediately after construction, numerical propagators configuration involve setting several parameters between construction time and propagation time.

The configuration parameters that can be set are:

From these configuration parameters, only the initial state is mandatory. The default propagation settings are in equinoctial parameters with PositionAngleType.ECCENTRIC longitude argument. If the central attraction coefficient is not explicitly specified, the one used to define the initial orbit will be used. However, specifying only the initial state and perhaps the central attraction coefficient would mean the propagator would use only Keplerian forces. In this case, the simpler KeplerianPropagator class would perhaps be more effective.

The underlying numerical integrator set up in the constructor may also have its own configuration parameters. Typical configuration parameters for adaptive stepsize integrators are the min, max and perhaps start step size as well as the absolute and/or relative errors thresholds.

The state that is seen by the integrator is a simple seven elements double array. The six first elements are either:

The last element is the mass in kilograms.

The following code snippet shows a typical setting for Low Earth Orbit propagation in equinoctial parameters and true longitude argument:

 final T          zero      = field.getZero();
 final T          dP        = zero.add(0.001);
 final T          minStep   = zero.add(0.001);
 final T          maxStep   = zero.add(500);
 final T          initStep  = zero.add(60);
 final double[][] tolerance = ToleranceProvider.getDefaultToleranceProvider(dP).getTolerances(orbit, OrbitType.EQUINOCTIAL);
 AdaptiveStepsizeFieldIntegrator<T> integrator = new DormandPrince853FieldIntegrator<>(field, minStep, maxStep, tolerance[0], tolerance[1]);
 integrator.setInitialStepSize(initStep);
 propagator = new FieldNumericalPropagator<>(field, integrator);
 

By default, at the end of the propagation, the propagator resets the initial state to the final state, thus allowing a new propagation to be started from there without recomputing the part already performed. This behaviour can be changed by calling FieldAbstractIntegratedPropagator.setResetAtEnd(boolean).

Beware the same instance cannot be used simultaneously by different threads, the class is not thread-safe.

Author:
Mathieu Roméro, Luc Maisonobe, Guylaine Prat, Fabien Maussion, Véronique Pommier-Maurussane
See Also: