Class FieldDSSTPropagator<T extends CalculusFieldElement<T>>
- java.lang.Object
-
- org.orekit.propagation.FieldAbstractPropagator<T>
-
- org.orekit.propagation.integration.FieldAbstractIntegratedPropagator<T>
-
- org.orekit.propagation.semianalytical.dsst.FieldDSSTPropagator<T>
-
- Type Parameters:
T
- type of the field elements
- All Implemented Interfaces:
FieldPropagator<T>
,FieldPVCoordinatesProvider<T>
public class FieldDSSTPropagator<T extends CalculusFieldElement<T>> extends FieldAbstractIntegratedPropagator<T>
This class propagatesorbits
using the DSST theory.Whereas analytical propagators are configured only thanks to their various constructors and can be used immediately after construction, such a semianalytical propagator configuration involves setting several parameters between construction time and propagation time, just as numerical propagators.
The configuration parameters that can be set are:
- the initial spacecraft state (
setInitialState(FieldSpacecraftState)
) - the various force models (
addForceModel(DSSTForceModel)
,removeForceModels()
) - the discrete events that should be triggered during propagation (
FieldAbstractIntegratedPropagator.addEventDetector(org.orekit.propagation.events.FieldEventDetector)
,FieldAbstractIntegratedPropagator.clearEventsDetectors()
) - the binding logic with the rest of the application (
FieldAbstractPropagator.getMultiplexer()
)
From these configuration parameters, only the initial state is mandatory. The default propagation settings are in
equinoctial
parameters withtrue
longitude argument. The central attraction coefficient used to define the initial orbit will be used. However, specifying only the initial state would mean the propagator would use only Keplerian forces. In this case, the simplerKeplerianPropagator
class would 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 six elements double array. These six elements are:
- the
equinoctial orbit parameters
(a, ex, ey, hx, hy, λm) in meters and radians,
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 chenged by calling
FieldAbstractIntegratedPropagator.setResetAtEnd(boolean)
.Beware the same instance cannot be used simultaneously by different threads, the class is not thread-safe.
- Since:
- 10.0
- Author:
- Romain Di Costanzo, Pascal Parraud
- See Also:
FieldSpacecraftState
,DSSTForceModel
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.orekit.propagation.integration.FieldAbstractIntegratedPropagator
FieldAbstractIntegratedPropagator.MainStateEquations<T extends CalculusFieldElement<T>>
-
-
Field Summary
-
Fields inherited from interface org.orekit.propagation.FieldPropagator
DEFAULT_MASS
-
-
Constructor Summary
Constructors Constructor Description FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator)
Create a new instance of DSSTPropagator.FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, AttitudeProvider attitudeProvider)
Create a new instance of DSSTPropagator.FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, PropagationType propagationType)
Create a new instance of DSSTPropagator.FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, PropagationType propagationType, AttitudeProvider attitudeProvider)
Create a new instance of DSSTPropagator.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addForceModel(DSSTForceModel force)
Add a force model to the global perturbation model.protected void
afterIntegration()
Method called just after integration.protected void
beforeIntegration(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> tEnd)
Method called just before integration.static <T extends CalculusFieldElement<T>>
FieldSpacecraftState<T>computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel)
Conversion from osculating to mean orbit.static <T extends CalculusFieldElement<T>>
FieldSpacecraftState<T>computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel, double epsilon, int maxIterations)
Conversion from osculating to mean orbit.static <T extends CalculusFieldElement<T>>
FieldSpacecraftState<T>computeOsculatingState(FieldSpacecraftState<T> mean, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forces)
Conversion from mean to osculating orbit.protected FieldStateMapper<T>
createMapper(FieldAbsoluteDate<T> referenceDate, T mu, OrbitType ignoredOrbitType, PositionAngleType ignoredPositionAngleType, AttitudeProvider attitudeProvider, Frame frame)
Create a mapper between raw double components and spacecraft state.List<DSSTForceModel>
getAllForceModels()
Get all the force models, perturbing forces and Newtonian attraction included.protected FieldSpacecraftState<T>
getInitialIntegrationState()
Get the initial state for integration.protected FieldAbstractIntegratedPropagator.MainStateEquations<T>
getMainStateEquations(FieldODEIntegrator<T> integrator)
Get the differential equations to integrate (for main state only).OrbitType
getOrbitType()
Get propagation parameter type.PositionAngleType
getPositionAngleType()
Get propagation parameter type.int
getSatelliteRevolution()
Get the number of satellite revolutions to use for converting osculating to mean elements.Set<String>
getSelectedCoefficients()
Get the selected short periodic coefficients that must be stored as additional states.boolean
initialIsOsculating()
Check if the initial state is provided in osculating elements.void
removeForceModels()
Remove all perturbing force models from the global perturbation model (except central attraction).void
resetInitialState(FieldSpacecraftState<T> state)
Reset the initial state.void
setAttitudeProvider(AttitudeProvider attitudeProvider)
Set attitude provider.void
setInitialState(FieldSpacecraftState<T> initialState)
Set the initial state with osculating orbital elements.void
setInitialState(FieldSpacecraftState<T> initialState, PropagationType stateType)
Set the initial state.void
setInterpolationGridToFixedNumberOfPoints(int interpolationPoints)
Set the interpolation grid generator.void
setInterpolationGridToMaxTimeGap(T maxGap)
Set the interpolation grid generator.void
setMu(T mu)
Set the central attraction coefficient μ.void
setSatelliteRevolution(int satelliteRevolution)
Override the default value of the parameter.void
setSelectedCoefficients(Set<String> selectedCoefficients)
Set the selected short periodic coefficients that must be stored as additional states.static <T extends CalculusFieldElement<T>>
double[][]tolerances(T dP, FieldOrbit<T> orbit)
Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.static <T extends CalculusFieldElement<T>>
double[][]tolerances(T dP, T dV, FieldOrbit<T> orbit)
Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.-
Methods inherited from class org.orekit.propagation.integration.FieldAbstractIntegratedPropagator
addAdditionalDerivativesProvider, addEventDetector, clearEventsDetectors, getAdditionalDerivativesProviders, getBasicDimension, getCalls, getEphemerisGenerator, getEventsDetectors, getIntegrator, getIntegratorName, getManagedAdditionalStates, getMu, getPropagationType, getResetAtEnd, initializeAttitudeProviderForDerivatives, initMapper, isAdditionalStateManaged, isMeanOrbit, propagate, propagate, setOrbitType, setPositionAngleType, setResetAtEnd, setUpEventDetector, setUpUserEventDetectors
-
Methods inherited from class org.orekit.propagation.FieldAbstractPropagator
addAdditionalStateProvider, getAdditionalStateProviders, getAttitudeProvider, getField, getFrame, getInitialState, getMultiplexer, getStartDate, initializeAdditionalStates, initializePropagation, setStartDate, stateChanged, updateAdditionalStates, updateUnmanagedStates
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.orekit.propagation.FieldPropagator
clearStepHandlers, getPosition, getPVCoordinates, setStepHandler, setStepHandler
-
-
-
-
Constructor Detail
-
FieldDSSTPropagator
@DefaultDataContext public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, PropagationType propagationType)
Create a new instance of DSSTPropagator.After creation, there are no perturbing forces at all. This means that if
addForceModel
is not called after creation, the integrated orbit will follow a Keplerian evolution only.This constructor uses the
default data context
.- Parameters:
field
- field used by defaultintegrator
- numerical integrator to use for propagation.propagationType
- type of orbit to output (mean or osculating).- See Also:
FieldDSSTPropagator(Field, FieldODEIntegrator, PropagationType, AttitudeProvider)
-
FieldDSSTPropagator
public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, PropagationType propagationType, AttitudeProvider attitudeProvider)
Create a new instance of DSSTPropagator.After creation, there are no perturbing forces at all. This means that if
addForceModel
is not called after creation, the integrated orbit will follow a Keplerian evolution only.- Parameters:
field
- field used by defaultintegrator
- numerical integrator to use for propagation.propagationType
- type of orbit to output (mean or osculating).attitudeProvider
- attitude law to use.- Since:
- 10.1
-
FieldDSSTPropagator
@DefaultDataContext public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator)
Create a new instance of DSSTPropagator.After creation, there are no perturbing forces at all. This means that if
addForceModel
is not called after creation, the integrated orbit will follow a Keplerian evolution only. Only the mean orbits will be generated.This constructor uses the
default data context
.- Parameters:
field
- fied used by defaultintegrator
- numerical integrator to use for propagation.- See Also:
FieldDSSTPropagator(Field, FieldODEIntegrator, AttitudeProvider)
-
FieldDSSTPropagator
public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, AttitudeProvider attitudeProvider)
Create a new instance of DSSTPropagator.After creation, there are no perturbing forces at all. This means that if
addForceModel
is not called after creation, the integrated orbit will follow a Keplerian evolution only. Only the mean orbits will be generated.- Parameters:
field
- fied used by defaultintegrator
- numerical integrator to use for propagation.attitudeProvider
- attitude law to use.- Since:
- 10.1
-
-
Method Detail
-
setMu
public void setMu(T mu)
Set the central attraction coefficient μ.Setting the central attraction coefficient is equivalent to
add
aDSSTNewtonianAttraction
force model.- Overrides:
setMu
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Parameters:
mu
- central attraction coefficient (m³/s²)- See Also:
addForceModel(DSSTForceModel)
,getAllForceModels()
-
setInitialState
public void setInitialState(FieldSpacecraftState<T> initialState)
Set the initial state with osculating orbital elements.- Parameters:
initialState
- initial state (defined with osculating elements)
-
setInitialState
public void setInitialState(FieldSpacecraftState<T> initialState, PropagationType stateType)
Set the initial state.- Parameters:
initialState
- initial statestateType
- defined if the orbital state is defined with osculating or mean elements
-
resetInitialState
public void resetInitialState(FieldSpacecraftState<T> state)
Reset the initial state.- Specified by:
resetInitialState
in interfaceFieldPropagator<T extends CalculusFieldElement<T>>
- Overrides:
resetInitialState
in classFieldAbstractPropagator<T extends CalculusFieldElement<T>>
- Parameters:
state
- new initial state
-
setSelectedCoefficients
public void setSelectedCoefficients(Set<String> selectedCoefficients)
Set the selected short periodic coefficients that must be stored as additional states.- Parameters:
selectedCoefficients
- short periodic coefficients that must be stored as additional states (null means no coefficients are selected, empty set means all coefficients are selected)
-
getSelectedCoefficients
public Set<String> getSelectedCoefficients()
Get the selected short periodic coefficients that must be stored as additional states.- Returns:
- short periodic coefficients that must be stored as additional states (null means no coefficients are selected, empty set means all coefficients are selected)
-
initialIsOsculating
public boolean initialIsOsculating()
Check if the initial state is provided in osculating elements.- Returns:
- true if initial state is provided in osculating elements
-
setInterpolationGridToFixedNumberOfPoints
public void setInterpolationGridToFixedNumberOfPoints(int interpolationPoints)
Set the interpolation grid generator.The generator will create an interpolation grid with a fixed number of points for each mean element integration step.
If neither
setInterpolationGridToFixedNumberOfPoints(int)
norsetInterpolationGridToMaxTimeGap(CalculusFieldElement)
has been called, by default the propagator is set as to 3 interpolations points per step.- Parameters:
interpolationPoints
- number of interpolation points at each integration step- Since:
- 7.1
- See Also:
setInterpolationGridToMaxTimeGap(CalculusFieldElement)
-
setInterpolationGridToMaxTimeGap
public void setInterpolationGridToMaxTimeGap(T maxGap)
Set the interpolation grid generator.The generator will create an interpolation grid with a maximum time gap between interpolation points.
If neither
setInterpolationGridToFixedNumberOfPoints(int)
norsetInterpolationGridToMaxTimeGap(CalculusFieldElement)
has been called, by default the propagator is set as to 3 interpolations points per step.- Parameters:
maxGap
- maximum time gap between interpolation points (seconds)- Since:
- 7.1
- See Also:
setInterpolationGridToFixedNumberOfPoints(int)
-
addForceModel
public void addForceModel(DSSTForceModel force)
Add a force model to the global perturbation model.If this method is not called at all, the integrated orbit will follow a Keplerian evolution only.
- Parameters:
force
- perturbingforce
to add- See Also:
removeForceModels()
,setMu(CalculusFieldElement)
-
removeForceModels
public void removeForceModels()
Remove all perturbing force models from the global perturbation model (except central attraction).Once all perturbing forces have been removed (and as long as no new force model is added), the integrated orbit will follow a Keplerian evolution only.
- See Also:
addForceModel(DSSTForceModel)
-
getAllForceModels
public List<DSSTForceModel> getAllForceModels()
Get all the force models, perturbing forces and Newtonian attraction included.- Returns:
- list of perturbing force models, with Newtonian attraction being the last one
- See Also:
addForceModel(DSSTForceModel)
,setMu(CalculusFieldElement)
-
getOrbitType
public OrbitType getOrbitType()
Get propagation parameter type.- Overrides:
getOrbitType
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Returns:
- orbit type used for propagation
-
getPositionAngleType
public PositionAngleType getPositionAngleType()
Get propagation parameter type.- Overrides:
getPositionAngleType
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Returns:
- angle type to use for propagation
-
computeOsculatingState
public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeOsculatingState(FieldSpacecraftState<T> mean, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forces)
Conversion from mean to osculating orbit.Compute osculating state in a DSST sense, corresponding to the mean SpacecraftState in input, and according to the Force models taken into account.
Since the osculating state is obtained by adding short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.
- Type Parameters:
T
- type of the elements- Parameters:
mean
- Mean state to convertforces
- Forces to take into accountattitudeProvider
- attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)- Returns:
- osculating state in a DSST sense
-
computeMeanState
public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel)
Conversion from osculating to mean orbit.Compute mean state in a DSST sense, corresponding to the osculating SpacecraftState in input, and according to the Force models taken into account.
Since the osculating state is obtained with the computation of short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.
The computation is done through a fixed-point iteration process.
- Type Parameters:
T
- type of the elements- Parameters:
osculating
- Osculating state to convertattitudeProvider
- attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)forceModel
- Forces to take into account- Returns:
- mean state in a DSST sense
-
computeMeanState
public static <T extends CalculusFieldElement<T>> FieldSpacecraftState<T> computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel, double epsilon, int maxIterations)
Conversion from osculating to mean orbit.Compute mean state in a DSST sense, corresponding to the osculating SpacecraftState in input, and according to the Force models taken into account.
Since the osculating state is obtained with the computation of short-periodic variation of each force model, the resulting output will depend on the force models parameterized in input.
The computation is done through a fixed-point iteration process.
- Type Parameters:
T
- type of the elements- Parameters:
osculating
- Osculating state to convertattitudeProvider
- attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)forceModel
- Forces to take into accountepsilon
- convergence threshold for mean parameters conversionmaxIterations
- maximum iterations for mean parameters conversion- Returns:
- mean state in a DSST sense
- Since:
- 10.1
-
setSatelliteRevolution
public void setSatelliteRevolution(int satelliteRevolution)
Override the default value of the parameter.By default, if the initial orbit is defined as osculating, it will be averaged over 2 satellite revolutions. This can be changed by using this method.
- Parameters:
satelliteRevolution
- number of satellite revolutions to use for converting osculating to mean elements
-
getSatelliteRevolution
public int getSatelliteRevolution()
Get the number of satellite revolutions to use for converting osculating to mean elements.- Returns:
- number of satellite revolutions to use for converting osculating to mean elements
-
setAttitudeProvider
public void setAttitudeProvider(AttitudeProvider attitudeProvider)
Set attitude provider.- Specified by:
setAttitudeProvider
in interfaceFieldPropagator<T extends CalculusFieldElement<T>>
- Overrides:
setAttitudeProvider
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Parameters:
attitudeProvider
- attitude provider
-
beforeIntegration
protected void beforeIntegration(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> tEnd)
Method called just before integration.The default implementation does nothing, it may be specialized in subclasses.
- Overrides:
beforeIntegration
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Parameters:
initialState
- initial statetEnd
- target date at which state should be propagated
-
afterIntegration
protected void afterIntegration()
Method called just after integration.The default implementation does nothing, it may be specialized in subclasses.
- Overrides:
afterIntegration
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
-
getInitialIntegrationState
protected FieldSpacecraftState<T> getInitialIntegrationState()
Get the initial state for integration.- Overrides:
getInitialIntegrationState
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Returns:
- initial state for integration
-
createMapper
protected FieldStateMapper<T> createMapper(FieldAbsoluteDate<T> referenceDate, T mu, OrbitType ignoredOrbitType, PositionAngleType ignoredPositionAngleType, AttitudeProvider attitudeProvider, Frame frame)
Create a mapper between raw double components and spacecraft state. /** Simple constructor.The position parameter type is meaningful only if
propagation orbit type
support it. As an example, it is not meaningful for propagation inCartesian
parameters.Note that for DSST, orbit type is hardcoded to
OrbitType.EQUINOCTIAL
and position angle type is hardcoded toPositionAngleType.MEAN
, so the corresponding parameters are ignored.- Specified by:
createMapper
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Parameters:
referenceDate
- reference datemu
- central attraction coefficient (m³/s²)ignoredOrbitType
- orbit type to use for mappingignoredPositionAngleType
- angle type to use for propagationattitudeProvider
- attitude providerframe
- inertial frame- Returns:
- new mapper
-
getMainStateEquations
protected FieldAbstractIntegratedPropagator.MainStateEquations<T> getMainStateEquations(FieldODEIntegrator<T> integrator)
Get the differential equations to integrate (for main state only).- Specified by:
getMainStateEquations
in classFieldAbstractIntegratedPropagator<T extends CalculusFieldElement<T>>
- Parameters:
integrator
- numerical integrator to use for propagation.- Returns:
- differential equations for main state
-
tolerances
public static <T extends CalculusFieldElement<T>> double[][] tolerances(T dP, FieldOrbit<T> orbit)
Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.The errors are estimated from partial derivatives properties of orbits, starting from a scalar position error specified by the user. Considering the energy conservation equation V = sqrt(mu (2/r - 1/a)), we get at constant energy (i.e. on a Keplerian trajectory):
V r² |dV| = mu |dr|
So we deduce a scalar velocity error consistent with the position error. From here, we apply orbits Jacobians matrices to get consistent errors on orbital parameters.
The tolerances are only orders of magnitude, and integrator tolerances are only local estimates, not global ones. So some care must be taken when using these tolerances. Setting 1mm as a position error does NOT mean the tolerances will guarantee a 1mm error position after several orbits integration.
- Type Parameters:
T
- elements type- Parameters:
dP
- user specified position error (m)orbit
- reference orbit- Returns:
- a two rows array, row 0 being the absolute tolerance error and row 1 being the relative tolerance error
-
tolerances
public static <T extends CalculusFieldElement<T>> double[][] tolerances(T dP, T dV, FieldOrbit<T> orbit)
Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.The errors are estimated from partial derivatives properties of orbits, starting from scalar position and velocity errors specified by the user.
The tolerances are only orders of magnitude, and integrator tolerances are only local estimates, not global ones. So some care must be taken when using these tolerances. Setting 1mm as a position error does NOT mean the tolerances will guarantee a 1mm error position after several orbits integration.
- Type Parameters:
T
- elements type- Parameters:
dP
- user specified position error (m)dV
- user specified velocity error (m/s)orbit
- reference orbit- Returns:
- a two rows array, row 0 being the absolute tolerance error and row 1 being the relative tolerance error
- Since:
- 10.3
-
-