public class FieldDSSTPropagator<T extends RealFieldElement<T>> extends FieldAbstractIntegratedPropagator<T>
orbits
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:
setInitialState(FieldSpacecraftState)
)addForceModel(DSSTForceModel)
,
removeForceModels()
)FieldAbstractIntegratedPropagator.addEventDetector(org.orekit.propagation.events.FieldEventDetector)
,
FieldAbstractIntegratedPropagator.clearEventsDetectors()
)FieldAbstractIntegratedPropagator.setSlaveMode()
,
FieldAbstractPropagator.setMasterMode(RealFieldElement, org.orekit.propagation.sampling.FieldOrekitFixedStepHandler)
,
FieldAbstractIntegratedPropagator.setMasterMode(org.orekit.propagation.sampling.FieldOrekitStepHandler)
,
FieldAbstractIntegratedPropagator.setEphemerisMode()
, FieldAbstractIntegratedPropagator.getGeneratedEphemeris()
)
From these configuration parameters, only the initial state is mandatory.
The default propagation settings are in equinoctial
parameters with true
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 simpler
KeplerianPropagator
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:
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.
FieldSpacecraftState
,
DSSTForceModel
FieldAbstractIntegratedPropagator.MainStateEquations<T extends RealFieldElement<T>>
DEFAULT_LAW, DEFAULT_MASS, EPHEMERIS_GENERATION_MODE, MASTER_MODE, SLAVE_MODE
Constructor and Description |
---|
FieldDSSTPropagator(Field<T> field,
FieldODEIntegrator<T> integrator)
Create a new instance of DSSTPropagator.
|
FieldDSSTPropagator(Field<T> field,
FieldODEIntegrator<T> integrator,
PropagationType propagationType)
Create a new instance of DSSTPropagator.
|
Modifier and Type | Method and 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.
|
FieldSpacecraftState<T> |
computeMeanState(FieldSpacecraftState<T> osculating,
AttitudeProvider attitudeProvider,
Collection<DSSTForceModel> forceModel)
Conversion from osculating to mean orbit.
|
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,
PositionAngle 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.
|
PositionAngle |
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 RealFieldElement<T>> |
tolerances(T dP,
FieldOrbit<T> orbit)
Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.
|
addAdditionalEquations, addEventDetector, clearEventsDetectors, getBasicDimension, getCalls, getEventsDetectors, getGeneratedEphemeris, getIntegrator, getManagedAdditionalStates, getMu, initMapper, isAdditionalStateManaged, isMeanOrbit, propagate, propagate, propagate, setEphemerisMode, setMasterMode, setOrbitType, setPositionAngleType, setResetAtEnd, setSlaveMode, setUpEventDetector, setUpUserEventDetectors
addAdditionalStateProvider, getAdditionalStateProviders, getAttitudeProvider, getField, getFixedStepSize, getFrame, getInitialState, getMode, getPVCoordinates, getStartDate, getStepHandler, setMasterMode, setStartDate, updateAdditionalStates
public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator, PropagationType propagationType)
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.
field
- field used by defaultintegrator
- numerical integrator to use for propagation.propagationType
- type of orbit to output (mean or osculating).public FieldDSSTPropagator(Field<T> field, FieldODEIntegrator<T> integrator)
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.
field
- fied used by defaultintegrator
- numerical integrator to use for propagation.public void setMu(T mu)
Setting the central attraction coefficient is
equivalent to add
a DSSTNewtonianAttraction
force model.
setMu
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
mu
- central attraction coefficient (m³/s²)addForceModel(DSSTForceModel)
,
getAllForceModels()
public void setInitialState(FieldSpacecraftState<T> initialState)
initialState
- initial state (defined with osculating elements)public void setInitialState(FieldSpacecraftState<T> initialState, PropagationType stateType)
initialState
- initial statestateType
- defined if the orbital state is defined with osculating or mean elementspublic void resetInitialState(FieldSpacecraftState<T> state)
resetInitialState
in interface FieldPropagator<T extends RealFieldElement<T>>
resetInitialState
in class FieldAbstractPropagator<T extends RealFieldElement<T>>
state
- new initial statepublic void setSelectedCoefficients(Set<String> selectedCoefficients)
selectedCoefficients
- short periodic coefficients that must be stored as additional states
(null means no coefficients are selected, empty set means all coefficients are selected)public Set<String> getSelectedCoefficients()
public boolean initialIsOsculating()
public void setInterpolationGridToFixedNumberOfPoints(int interpolationPoints)
The generator will create an interpolation grid with a fixed number of points for each mean element integration step.
If neither setInterpolationGridToFixedNumberOfPoints(int)
nor setInterpolationGridToMaxTimeGap(RealFieldElement)
has been called,
by default the propagator is set as to 3 interpolations points per step.
interpolationPoints
- number of interpolation points at
each integration stepsetInterpolationGridToMaxTimeGap(RealFieldElement)
public void setInterpolationGridToMaxTimeGap(T maxGap)
The generator will create an interpolation grid with a maximum time gap between interpolation points.
If neither setInterpolationGridToFixedNumberOfPoints(int)
nor setInterpolationGridToMaxTimeGap(RealFieldElement)
has been called,
by default the propagator is set as to 3 interpolations points per step.
maxGap
- maximum time gap between interpolation points (seconds)setInterpolationGridToFixedNumberOfPoints(int)
public void addForceModel(DSSTForceModel force)
If this method is not called at all, the integrated orbit will follow a Keplerian evolution only.
force
- perturbing force
to addremoveForceModels()
,
setMu(RealFieldElement)
public void removeForceModels()
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.
addForceModel(DSSTForceModel)
public List<DSSTForceModel> getAllForceModels()
addForceModel(DSSTForceModel)
,
setMu(RealFieldElement)
public OrbitType getOrbitType()
getOrbitType
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
public PositionAngle getPositionAngleType()
getPositionAngleType
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
public FieldSpacecraftState<T> computeOsculatingState(FieldSpacecraftState<T> mean, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forces)
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.
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)public FieldSpacecraftState<T> computeMeanState(FieldSpacecraftState<T> osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModel)
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.
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 accountpublic void setSatelliteRevolution(int satelliteRevolution)
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.
satelliteRevolution
- number of satellite revolutions to use for converting osculating to mean
elementspublic int getSatelliteRevolution()
public void setAttitudeProvider(AttitudeProvider attitudeProvider)
setAttitudeProvider
in interface FieldPropagator<T extends RealFieldElement<T>>
setAttitudeProvider
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
attitudeProvider
- attitude providerprotected void beforeIntegration(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> tEnd)
The default implementation does nothing, it may be specialized in subclasses.
beforeIntegration
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
initialState
- initial statetEnd
- target date at which state should be propagatedprotected void afterIntegration()
The default implementation does nothing, it may be specialized in subclasses.
afterIntegration
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
protected FieldSpacecraftState<T> getInitialIntegrationState()
getInitialIntegrationState
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
protected FieldStateMapper<T> createMapper(FieldAbsoluteDate<T> referenceDate, T mu, OrbitType ignoredOrbitType, PositionAngle ignoredPositionAngleType, AttitudeProvider attitudeProvider, Frame frame)
The position parameter type is meaningful only if propagation orbit type
support it. As an example, it is not meaningful for propagation
in Cartesian
parameters.
Note that for DSST, orbit type is hardcoded to OrbitType.EQUINOCTIAL
and position angle type is hardcoded to PositionAngle.MEAN
, so
the corresponding parameters are ignored.
createMapper
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
referenceDate
- reference datemu
- central attraction coefficient (m³/s²)ignoredOrbitType
- orbit type to use for mappingignoredPositionAngleType
- angle type to use for propagationattitudeProvider
- attitude providerframe
- inertial frameprotected FieldAbstractIntegratedPropagator.MainStateEquations<T> getMainStateEquations(FieldODEIntegrator<T> integrator)
getMainStateEquations
in class FieldAbstractIntegratedPropagator<T extends RealFieldElement<T>>
integrator
- numerical integrator to use for propagation.public static <T extends RealFieldElement<T>> double[][] tolerances(T dP, FieldOrbit<T> orbit)
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.
T
- elements typedP
- user specified position error (m)orbit
- reference orbitCopyright © 2002-2019 CS Systèmes d'information. All rights reserved.