org.orekit.propagation.semianalytical.dsst
public class DSSTPropagator extends AbstractIntegratedPropagator
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(SpacecraftState)
)addForceModel(DSSTForceModel)
,
removeForceModels()
)AbstractIntegratedPropagator.addEventDetector(org.orekit.propagation.events.EventDetector)
,
AbstractIntegratedPropagator.clearEventsDetectors()
)AbstractIntegratedPropagator.setSlaveMode()
,
AbstractPropagator.setMasterMode(double, org.orekit.propagation.sampling.OrekitFixedStepHandler)
,
AbstractIntegratedPropagator.setMasterMode(org.orekit.propagation.sampling.OrekitStepHandler)
,
AbstractIntegratedPropagator.setEphemerisMode()
, AbstractIntegratedPropagator.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,The same propagator can be reused for several orbit extrapolations, by resetting the initial state without modifying the other configuration parameters. However, the same instance cannot be used simultaneously by different threads, the class is not thread-safe.
SpacecraftState
,
DSSTForceModel
AbstractIntegratedPropagator.MainStateEquations
DEFAULT_LAW, DEFAULT_MASS, EPHEMERIS_GENERATION_MODE, MASTER_MODE, SLAVE_MODE
Constructor and Description |
---|
DSSTPropagator(AbstractIntegrator integrator)
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 |
beforeIntegration(SpacecraftState initialState,
AbsoluteDate tEnd)
Method called just before integration.
|
protected StateMapper |
createMapper(AbsoluteDate referenceDate,
double mu,
OrbitType orbitType,
PositionAngle positionAngleType,
AttitudeProvider attitudeProvider,
Frame frame)
Create a mapper between raw double components and spacecraft state.
|
protected AbstractIntegratedPropagator.MainStateEquations |
getMainStateEquations(AbstractIntegrator integrator)
Get the differential equations to integrate (for main state only).
|
int |
getSatelliteRevolution()
Get the number of satellite revolutions to use for converting osculating to mean elements.
|
boolean |
initialIsOsculating()
Check if the initial state is provided in osculating elements.
|
void |
removeForceModels()
Remove all perturbing force models from the global perturbation model.
|
void |
resetInitialState(SpacecraftState state)
Reset the initial state.
|
void |
setInitialState(SpacecraftState initialState)
Set the initial state with osculating orbital elements.
|
void |
setInitialState(SpacecraftState initialState,
boolean withOsculatingElements)
Set the initial state.
|
void |
setSatelliteRevolution(int satelliteRevolution)
Override the default value of the parameter.
|
static double[][] |
tolerances(double dP,
Orbit orbit)
Estimate tolerance vectors for an AdaptativeStepsizeIntegrator.
|
addAdditionalEquations, addEventDetector, afterIntegration, clearEventsDetectors, getBasicDimension, getCalls, getEventsDetectors, getGeneratedEphemeris, getManagedAdditionalStates, getMu, getOrbitType, getPositionAngleType, initMapper, isAdditionalStateManaged, propagate, propagate, propagate, setAttitudeProvider, setEphemerisMode, setMasterMode, setMu, setOrbitType, setPositionAngleType, setSlaveMode, setUpEventDetector, setUpUserEventDetectors
addAdditionalStateProvider, getAdditionalStateProviders, getAttitudeProvider, getFixedStepSize, getFrame, getInitialState, getMode, getPVCoordinates, getStartDate, getStepHandler, setMasterMode, setStartDate, updateAdditionalStates
public DSSTPropagator(AbstractIntegrator 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.
integrator
- numerical integrator to use for propagation.public void setInitialState(SpacecraftState initialState) throws PropagationException
initialState
- initial state (defined with osculating elements)PropagationException
- if the initial state cannot be setpublic void setInitialState(SpacecraftState initialState, boolean withOsculatingElements) throws PropagationException
initialState
- initial statewithOsculatingElements
- true if the orbital state is defined with osculating elementsPropagationException
- if the initial state cannot be setpublic void resetInitialState(SpacecraftState state) throws PropagationException
resetInitialState
in interface Propagator
resetInitialState
in class AbstractPropagator
state
- new initial statePropagationException
- if initial state cannot be resetpublic boolean initialIsOsculating()
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()
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 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()
protected void beforeIntegration(SpacecraftState initialState, AbsoluteDate tEnd) throws OrekitException
The default implementation does nothing, it may be specialized in subclasses.
beforeIntegration
in class AbstractIntegratedPropagator
initialState
- initial statetEnd
- target date at which state should be propagatedOrekitException
- if hook cannot be runprotected StateMapper createMapper(AbsoluteDate referenceDate, double mu, OrbitType orbitType, PositionAngle positionAngleType, 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.
createMapper
in class AbstractIntegratedPropagator
referenceDate
- reference datemu
- central attraction coefficient (m3/s2)orbitType
- orbit type to use for mappingpositionAngleType
- angle type to use for propagationattitudeProvider
- attitude providerframe
- inertial frameprotected AbstractIntegratedPropagator.MainStateEquations getMainStateEquations(AbstractIntegrator integrator)
getMainStateEquations
in class AbstractIntegratedPropagator
integrator
- numerical integrator to use for propagation.public static double[][] tolerances(double dP, Orbit orbit) throws PropagationException
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):
V2 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.
dP
- user specified position error (m)orbit
- reference orbitPropagationException
- if Jacobian is singularCopyright © 2002–2015 CS Syst?mes d'Information. All rights reserved.