Class AbstractGaussianContribution
- java.lang.Object
-
- org.orekit.propagation.semianalytical.dsst.forces.AbstractGaussianContribution
-
- All Implemented Interfaces:
EventDetectorsProvider
,DSSTForceModel
,ParameterDriversProvider
- Direct Known Subclasses:
DSSTAtmosphericDrag
,DSSTSolarRadiationPressure
public abstract class AbstractGaussianContribution extends Object implements DSSTForceModel
Common handling ofDSSTForceModel
methods for Gaussian contributions to DSST propagation.This abstract class allows to provide easily a subset of
DSSTForceModel
methods for specific Gaussian contributions.This class implements the notion of numerical averaging of the DSST theory. Numerical averaging is mainly used for non-conservative disturbing forces such as atmospheric drag and solar radiation pressure.
Gaussian contributions can be expressed as: dai/dt = δai/δv . q
where:- ai are the six equinoctial elements
- v is the velocity vector
- q is the perturbing acceleration due to the considered force
The averaging process and other considerations lead to integrate this contribution over the true longitude L possibly taking into account some limits.
To create a numerically averaged contribution, one needs only to provide a
ForceModel
and to implement in the derived class the methods:getLLimits(SpacecraftState, AuxiliaryElements)
andgetParametersDriversWithoutMu()
.- Author:
- Pascal Parraud, Bryan Cazabonne (field translation)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
AbstractGaussianContribution.FieldFourierCjSjCoefficients<T extends CalculusFieldElement<T>>
Compute the Cij and the Sij coefficients with field elements.protected static class
AbstractGaussianContribution.FieldGaussianShortPeriodicCoefficients<T extends CalculusFieldElement<T>>
This class handles the short periodic coefficients described in Danielson 2.5.3-26.protected class
AbstractGaussianContribution.FieldIntegrableFunction<T extends CalculusFieldElement<T>>
Internal class for numerical quadrature.protected static class
AbstractGaussianContribution.FieldSlot<T extends CalculusFieldElement<T>>
Coefficients valid for one time slot.protected static class
AbstractGaussianContribution.FieldUijVijCoefficients<T extends CalculusFieldElement<T>>
The Uij and Vij coefficients described by equations 2.5.3-(21) and 2.5.3-(22) from Danielson.protected class
AbstractGaussianContribution.FourierCjSjCoefficients
Compute the Cij and the Sij coefficients.protected static class
AbstractGaussianContribution.GaussianShortPeriodicCoefficients
This class handles the short periodic coefficients described in Danielson 2.5.3-26.protected static class
AbstractGaussianContribution.GaussQuadrature
protected class
AbstractGaussianContribution.IntegrableFunction
Internal class for numerical quadrature.protected static class
AbstractGaussianContribution.Slot
Coefficients valid for one time slot.protected static class
AbstractGaussianContribution.UijVijCoefficients
The Uij and Vij coefficients described by equations 2.5.3-(21) and 2.5.3-(22) from Danielson.
-
Field Summary
-
Fields inherited from interface org.orekit.propagation.events.EventDetectorsProvider
DATATION_ACCURACY
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractGaussianContribution(String coefficientsKeyPrefix, double threshold, ForceModel contribution, double mu)
Build a new instance.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract <T extends CalculusFieldElement<T>>
T[]getLLimits(FieldSpacecraftState<T> state, FieldAuxiliaryElements<T> auxiliaryElements)
Compute the limits in L, the true longitude, for integration.protected abstract double[]
getLLimits(SpacecraftState state, AuxiliaryElements auxiliaryElements)
Compute the limits in L, the true longitude, for integration.protected <T extends CalculusFieldElement<T>>
T[]getMeanElementRate(FieldSpacecraftState<T> state, AbstractGaussianContribution.GaussQuadrature gauss, T low, T high, FieldAbstractGaussianContributionContext<T> context, T[] parameters)
Computes the mean equinoctial elements rates dai / dt.<T extends CalculusFieldElement<T>>
T[]getMeanElementRate(FieldSpacecraftState<T> state, FieldAuxiliaryElements<T> auxiliaryElements, T[] parameters)
Computes the mean equinoctial elements rates dai / dt.protected double[]
getMeanElementRate(SpacecraftState state, AbstractGaussianContribution.GaussQuadrature gauss, double low, double high, AbstractGaussianContributionContext context, double[] parameters)
Computes the mean equinoctial elements rates dai / dt.double[]
getMeanElementRate(SpacecraftState state, AuxiliaryElements auxiliaryElements, double[] parameters)
Computes the mean equinoctial elements rates dai / dt.List<ParameterDriver>
getParametersDrivers()
Get the drivers for parameters.protected abstract List<ParameterDriver>
getParametersDriversWithoutMu()
Get the drivers for force model parameters except the one for the central attraction coefficient.<T extends CalculusFieldElement<T>>
voidinit(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> target)
Initialize the force model at the start of propagation.void
init(SpacecraftState initialState, AbsoluteDate target)
Initialize the force model at the start of propagation.List<ShortPeriodTerms>
initializeShortPeriodTerms(AuxiliaryElements auxiliaryElements, PropagationType type, double[] parameters)
Performs initialization prior to propagation for the current force model.<T extends CalculusFieldElement<T>>
List<FieldShortPeriodTerms<T>>initializeShortPeriodTerms(FieldAuxiliaryElements<T> auxiliaryElements, PropagationType type, T[] parameters)
Performs initialization prior to propagation for the current force model.void
registerAttitudeProvider(AttitudeProvider provider)
Register an attitude provider.void
updateShortPeriodTerms(double[] parameters, SpacecraftState... meanStates)
Update the short period terms.<T extends CalculusFieldElement<T>>
voidupdateShortPeriodTerms(T[] parameters, FieldSpacecraftState<T>... meanStates)
Update the short period terms.-
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.semianalytical.dsst.forces.DSSTForceModel
extractParameters, extractParameters, getEventDetectors, getFieldEventDetectors
-
Methods inherited from interface org.orekit.propagation.events.EventDetectorsProvider
getEventDetectors, getFieldEventDetectors
-
Methods inherited from interface org.orekit.utils.ParameterDriversProvider
getNbParametersDriversValue, getParameterDriver, getParameters, getParameters, getParameters, getParameters, getParametersAllValues, getParametersAllValues, isSupported
-
-
-
-
Constructor Detail
-
AbstractGaussianContribution
protected AbstractGaussianContribution(String coefficientsKeyPrefix, double threshold, ForceModel contribution, double mu)
Build a new instance.- Parameters:
coefficientsKeyPrefix
- prefix for coefficients keysthreshold
- tolerance for the choice of the Gauss quadrature ordercontribution
- theForceModel
to be numerically averagedmu
- central attraction coefficient
-
-
Method Detail
-
init
public void init(SpacecraftState initialState, AbsoluteDate target)
Initialize the force model at the start of propagation.The default implementation of this method does nothing.
- Specified by:
init
in interfaceDSSTForceModel
- Parameters:
initialState
- spacecraft state at the start of propagation.target
- date of propagation. Not equal toinitialState.getDate()
.
-
init
public <T extends CalculusFieldElement<T>> void init(FieldSpacecraftState<T> initialState, FieldAbsoluteDate<T> target)
Initialize the force model at the start of propagation.The default implementation of this method does nothing.
- Specified by:
init
in interfaceDSSTForceModel
- Type Parameters:
T
- type of the elements- Parameters:
initialState
- spacecraft state at the start of propagation.target
- date of propagation. Not equal toinitialState.getDate()
.
-
getParametersDrivers
public List<ParameterDriver> getParametersDrivers()
Get the drivers for parameters.- Specified by:
getParametersDrivers
in interfaceParameterDriversProvider
- Returns:
- drivers for parameters
-
getParametersDriversWithoutMu
protected abstract List<ParameterDriver> getParametersDriversWithoutMu()
Get the drivers for force model parameters except the one for the central attraction coefficient.The driver for central attraction coefficient is automatically added at the last element of the
ParameterDriver
array intogetParametersDrivers()
method.- Returns:
- drivers for force model parameters
-
initializeShortPeriodTerms
public List<ShortPeriodTerms> initializeShortPeriodTerms(AuxiliaryElements auxiliaryElements, PropagationType type, double[] parameters)
Performs initialization prior to propagation for the current force model.This method aims at being called at the very beginning of a propagation.
- Specified by:
initializeShortPeriodTerms
in interfaceDSSTForceModel
- Parameters:
auxiliaryElements
- auxiliary elements related to the current orbittype
- type of the elements used during the propagationparameters
- values of the force model parameters for specific date (1 value only per parameter driver) obtained for example by callingParameterDriversProvider.getParameters(AbsoluteDate)
on force model.- Returns:
- a list of objects that will hold short period terms (the objects are also retained by the force model, which will update them during propagation)
-
initializeShortPeriodTerms
public <T extends CalculusFieldElement<T>> List<FieldShortPeriodTerms<T>> initializeShortPeriodTerms(FieldAuxiliaryElements<T> auxiliaryElements, PropagationType type, T[] parameters)
Performs initialization prior to propagation for the current force model.This method aims at being called at the very beginning of a propagation.
- Specified by:
initializeShortPeriodTerms
in interfaceDSSTForceModel
- Type Parameters:
T
- type of the elements- Parameters:
auxiliaryElements
- auxiliary elements related to the current orbittype
- type of the elements used during the propagationparameters
- values of the force model parameters for specific date (1 value only per parameter driver) obtained for example by callingParameterDriversProvider.getParameters(AbsoluteDate)
on force model orAbstractGradientConverter.getParametersAtStateDate(FieldSpacecraftState, ParameterDriversProvider)
on gradient converter.- Returns:
- a list of objects that will hold short period terms (the objects are also retained by the force model, which will update them during propagation)
-
getMeanElementRate
public double[] getMeanElementRate(SpacecraftState state, AuxiliaryElements auxiliaryElements, double[] parameters)
Computes the mean equinoctial elements rates dai / dt.- Specified by:
getMeanElementRate
in interfaceDSSTForceModel
- Parameters:
state
- current state information: date, kinematics, attitudeauxiliaryElements
- auxiliary elements related to the current orbitparameters
- values of the force model parameters at state date (only 1 span for each parameter driver) obtained for example by callingParameterDriversProvider.getParameters(AbsoluteDate)
on force model.- Returns:
- the mean element rates dai/dt
-
getMeanElementRate
public <T extends CalculusFieldElement<T>> T[] getMeanElementRate(FieldSpacecraftState<T> state, FieldAuxiliaryElements<T> auxiliaryElements, T[] parameters)
Computes the mean equinoctial elements rates dai / dt.- Specified by:
getMeanElementRate
in interfaceDSSTForceModel
- Type Parameters:
T
- type of the elements- Parameters:
state
- current state information: date, kinematics, attitudeauxiliaryElements
- auxiliary elements related to the current orbitparameters
- values of the force model parameters at state date (only 1 span for each parameter driver) obtained for example by callingParameterDriversProvider.getParameters(Field, FieldAbsoluteDate)
on force model orAbstractGradientConverter.getParametersAtStateDate(FieldSpacecraftState, ParameterDriversProvider)
on gradient converter.- Returns:
- the mean element rates dai/dt
-
getLLimits
protected abstract double[] getLLimits(SpacecraftState state, AuxiliaryElements auxiliaryElements)
Compute the limits in L, the true longitude, for integration.- Parameters:
state
- current state information: date, kinematics, attitudeauxiliaryElements
- auxiliary elements related to the current orbit- Returns:
- the integration limits in L
-
getLLimits
protected abstract <T extends CalculusFieldElement<T>> T[] getLLimits(FieldSpacecraftState<T> state, FieldAuxiliaryElements<T> auxiliaryElements)
Compute the limits in L, the true longitude, for integration.- Type Parameters:
T
- type of the elements- Parameters:
state
- current state information: date, kinematics, attitudeauxiliaryElements
- auxiliary elements related to the current orbit- Returns:
- the integration limits in L
-
getMeanElementRate
protected double[] getMeanElementRate(SpacecraftState state, AbstractGaussianContribution.GaussQuadrature gauss, double low, double high, AbstractGaussianContributionContext context, double[] parameters)
Computes the mean equinoctial elements rates dai / dt.- Parameters:
state
- current stategauss
- Gauss quadraturelow
- lower bound of the integral intervalhigh
- upper bound of the integral intervalcontext
- container for attributesparameters
- values of the force model parameters at state date (1 values for each parameters)- Returns:
- the mean element rates
-
getMeanElementRate
protected <T extends CalculusFieldElement<T>> T[] getMeanElementRate(FieldSpacecraftState<T> state, AbstractGaussianContribution.GaussQuadrature gauss, T low, T high, FieldAbstractGaussianContributionContext<T> context, T[] parameters)
Computes the mean equinoctial elements rates dai / dt.- Type Parameters:
T
- type of the elements- Parameters:
state
- current stategauss
- Gauss quadraturelow
- lower bound of the integral intervalhigh
- upper bound of the integral intervalcontext
- container for attributesparameters
- values of the force model parameters(1 values for each parameters)- Returns:
- the mean element rates
-
registerAttitudeProvider
public void registerAttitudeProvider(AttitudeProvider provider)
Register an attitude provider.Register an attitude provider that can be used by the force model.
- Specified by:
registerAttitudeProvider
in interfaceDSSTForceModel
- Parameters:
provider
- theAttitudeProvider
-
updateShortPeriodTerms
public void updateShortPeriodTerms(double[] parameters, SpacecraftState... meanStates)
Update the short period terms.The
short period terms
that will be updated are the ones that were returned during the call toDSSTForceModel.initializeShortPeriodTerms(AuxiliaryElements, PropagationType, double[])
.- Specified by:
updateShortPeriodTerms
in interfaceDSSTForceModel
- Parameters:
parameters
- values of the force model parameters (all span values for each parameters) obtained for example by callingParameterDriversProvider.getParametersAllValues()
on force model. The extract parameter methodDSSTForceModel.extractParameters(double[], AbsoluteDate)
is called in the method to select the right parameter corresponding to the mean state date.meanStates
- mean states information: date, kinematics, attitude
-
updateShortPeriodTerms
public <T extends CalculusFieldElement<T>> void updateShortPeriodTerms(T[] parameters, FieldSpacecraftState<T>... meanStates)
Update the short period terms.The
short period terms
that will be updated are the ones that were returned during the call toDSSTForceModel.initializeShortPeriodTerms(AuxiliaryElements, PropagationType, double[])
.- Specified by:
updateShortPeriodTerms
in interfaceDSSTForceModel
- Type Parameters:
T
- type of the elements- Parameters:
parameters
- values of the force model parameters (all span values for each parameters) obtained for example by callingParameterDriversProvider.getParametersAllValues(Field)
on force model orAbstractGradientConverter.getParameters(FieldSpacecraftState, ParameterDriversProvider)
on gradient converter. The extract parameter methodDSSTForceModel.extractParameters(CalculusFieldElement[], FieldAbsoluteDate)
is called in the method to select the right parameter.meanStates
- mean states information: date, kinematics, attitude
-
-