public class SolarRadiationPressure extends JacobiansParameterizable implements ForceModel, GradientModel
The implementation of this class enables the computation of partial derivatives with respect to absorption, specular reflection or diffusion reflection coefficients.
Eclipses computation can be deactivated by using setEclipsesComputation(boolean)
. By
default, eclipses are taken into account.
This class allows to consider any occulting body (Earth, Moon, etc.).
In case of multiple occulting bodies, the assumption is made that only one body occults the
spacecraft at a time.
Light speed is currently never taken into account.
Modifier and Type | Field and Description |
---|---|
static String |
REFERENCE_FLUX
Normalized reference flux.
|
Constructor and Description |
---|
SolarRadiationPressure(double dRef,
double pRef,
PVCoordinatesProvider sunBody,
double sunRadiusIn,
BodyShape occultingBody,
Assembly assembly,
double multiplicativeFactorIn)
Creates a new instance.
|
SolarRadiationPressure(double dRef,
double pRef,
PVCoordinatesProvider sunBody,
double sunRadiusIn,
BodyShape occultingBody,
RadiationSensitive spacecraftModel)
Complete constructor.
|
SolarRadiationPressure(double dRef,
double pRef,
PVCoordinatesProvider sunBody,
double sunRadiusIn,
BodyShape occultingBody,
RadiationSensitive spacecraftModel,
boolean computePD)
Complete constructor.
|
SolarRadiationPressure(double dRef,
double pRef,
PVCoordinatesProvider sun,
double sunRadiusIn,
double occultingBodyRadius,
CelestialBodyFrame occultingBodyFrame,
RadiationSensitive spacecraft,
boolean computePD)
Complete constructor.
|
SolarRadiationPressure(double dRef,
double pRef,
PVCoordinatesProvider sun,
double sunRadiusIn,
double occultingBodyRadius,
RadiationSensitive spacecraft)
Complete constructor.
|
SolarRadiationPressure(double dRef,
double pRef,
PVCoordinatesProvider sun,
double sunRadiusIn,
double occultingBodyRadius,
RadiationSensitive spacecraft,
boolean computePD)
Complete constructor.
|
SolarRadiationPressure(Parameter referenceFlux,
PVCoordinatesProvider sunBody,
BodyShape occultingBody,
RadiationSensitive spacecraftModel)
Complete constructor using
Parameter . |
SolarRadiationPressure(Parameter referenceFlux,
PVCoordinatesProvider sunBody,
double sunRadiusIn,
BodyShape occultingBody,
RadiationSensitive spacecraftModel,
boolean computePD)
Complete constructor using
Parameter . |
SolarRadiationPressure(Parameter refFluxParam,
PVCoordinatesProvider sun,
double sunRadiusIn,
double occultingBodyRadius,
CelestialBodyFrame occultingBodyFrame,
RadiationSensitive spacecraft,
boolean computePD)
Complete constructor.
|
SolarRadiationPressure(Parameter refFluxParam,
PVCoordinatesProvider sun,
double occultingBodyRadius,
RadiationSensitive spacecraft)
Complete constructor.
|
SolarRadiationPressure(Parameter refFluxParam,
PVCoordinatesProvider sun,
double occultingBodyRadius,
RadiationSensitive spacecraft,
boolean computePD)
Complete constructor.
|
SolarRadiationPressure(PVCoordinatesProvider sunBody,
BodyShape occultingBody,
RadiationSensitive spacecraftModel)
Simple constructor with default reference values.
|
SolarRadiationPressure(PVCoordinatesProvider sunBody,
BodyShape occultingBody,
RadiationSensitive spacecraftModel,
boolean computePD)
Simple constructor with default reference values.
|
SolarRadiationPressure(PVCoordinatesProvider sun,
double occultingBodyRadius,
CelestialBodyFrame occultingBodyFrame,
RadiationSensitive spacecraft,
boolean computePD)
Simple constructor with default reference values.
|
SolarRadiationPressure(PVCoordinatesProvider sun,
double occultingBodyRadius,
RadiationSensitive spacecraft)
Simple constructor with default reference values.
|
SolarRadiationPressure(PVCoordinatesProvider sun,
double occultingBodyRadius,
RadiationSensitive spacecraft,
boolean computePD)
Simple constructor with default reference values.
|
SolarRadiationPressure(SolarRadiationPressure otherInstance,
Assembly assembly)
Creates a new instance from the data in another one but with a different assembly.
|
Modifier and Type | Method and Description |
---|---|
void |
addContribution(SpacecraftState s,
TimeDerivativesEquations adder)
Compute the contribution of the force model to the perturbing
acceleration.
|
void |
addDAccDParam(SpacecraftState s,
Parameter param,
double[] dAccdParam)
Compute acceleration derivatives with respect to additional parameters.
|
void |
addDAccDState(SpacecraftState s,
double[][] dAccdPos,
double[][] dAccdVel)
Compute acceleration derivatives with respect to state parameters.
|
void |
addOccultingBody(BodyShape body)
Add an occulting body.
|
void |
checkData(AbsoluteDate start,
AbsoluteDate end)
This methods throws an exception if the user did not provide all the required data to perform model call on
provided range [start; end].
|
Vector3D |
computeAcceleration(SpacecraftState s)
Compute the acceleration due to the force.
|
boolean |
computeGradientPosition()
This method returns true if the acceleration partial derivatives with
respect to position have to be computed.
|
boolean |
computeGradientVelocity()
This method returns true if the acceleration partial derivatives with
respect to velocity have to be computed.
|
static double |
convertRadiativePressureToFlux(double dRef,
double pRef)
Get the solar flux (SF) from the solar radiation pressure: SF = pRef * dRef2
|
double |
getEpsilonSignalPropagation()
Getter for the epsilon for signal propagation when signal propagation is taken into account.
|
EventDetector[] |
getEventsDetectors()
Get the discrete events related to the model.
|
Frame |
getInertialFrame()
Getter for the inertial frame used for signal propagation computation.
|
double |
getLightingRatio(Vector3D satSunVector,
BodyShape occultingBody,
PVCoordinatesProvider pv,
Frame frame,
AbsoluteDate date)
Get the lighting ratio ([0-1]) for provided occulting body.
|
int |
getMaxIterSignalPropagation()
Getter for the maximum number of iterations for signal propagation when signal propagation is taken into account.
|
double |
getMultiplicativeFactor()
Getter for the multiplicative factor.
|
List<BodyShape> |
getOccultingBodies()
Getter for the occulting bodies.
|
AbstractSignalPropagationDetector.PropagationDelayType |
getPropagationDelayType()
Getter for the propagation delay type.
|
Parameter |
getReferenceFlux()
Getter for the parameter representing the reference flux normalized for a 1m distance (N).
|
Vector3D |
getSolarFlux(SpacecraftState s)
Compute solar flux.
|
PVCoordinatesProvider |
getSunBody()
Getter for the Sun model used at construction.
|
boolean |
isEclipseComputation()
Returns flag indicating if eclipses should be taken into account.
|
void |
setEclipsesComputation(boolean eclipsesComputationFlagIn)
Setter for enabling/disabling eclipses computation.
|
void |
setEpsilonSignalPropagation(double epsilon)
Setter for the epsilon for signal propagation when signal propagation is taken into account.
This epsilon (in s) directly reflect the accuracy of signal propagation (1s of accuracy = 3E8m of accuracy on distance between emitter and receiver) |
void |
setMaxIterSignalPropagation(int maxIterSignalPropagationIn)
Setter for the maximum number of iterations for signal propagation when signal propagation is taken into account.
|
void |
setPropagationDelayType(AbstractSignalPropagationDetector.PropagationDelayType propagationDelayTypeIn,
Frame frameIn)
Setter for the propagation delay computation type.
|
addJacobiansParameter, addJacobiansParameter, addJacobiansParameter, supportsJacobianParameter
addAllParameters, addAllParameters, addParameter, getParameters, supportsParameter
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getParameters, supportsParameter
public static final String REFERENCE_FLUX
public SolarRadiationPressure(PVCoordinatesProvider sun, double occultingBodyRadius, RadiationSensitive spacecraft)
When this constructor is used, the reference values are:
Constants.SEIDELMANN_UA
Constants.CONST_SOL_N_M2
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
sun
- Sun modeloccultingBodyRadius
- Occulting body radiusspacecraft
- The physical and geometrical spacecraft representationpublic SolarRadiationPressure(PVCoordinatesProvider sun, double occultingBodyRadius, RadiationSensitive spacecraft, boolean computePD)
When this constructor is used, the reference values are:
Constants.SEIDELMANN_UA
Constants.CONST_SOL_N_M2
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
sun
- Sun modeloccultingBodyRadius
- Occulting body radiusspacecraft
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(PVCoordinatesProvider sun, double occultingBodyRadius, CelestialBodyFrame occultingBodyFrame, RadiationSensitive spacecraft, boolean computePD)
When this constructor is used, the reference values are:
Constants.SEIDELMANN_UA
Constants.CONST_SOL_N_M2
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
sun
- Sun modeloccultingBodyRadius
- Occulting body radiusoccultingBodyFrame
- Occulting body-centered framespacecraft
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(double dRef, double pRef, PVCoordinatesProvider sun, double sunRadiusIn, double occultingBodyRadius, RadiationSensitive spacecraft)
Note that reference solar radiation pressure pRef
in N/m2 is linked
to solar flux SF in W/m2 using the method
convertRadiativePressureToFlux(double, double)
.
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
dRef
- Reference distance for the solar radiation pressure (m)pRef
- Reference solar radiation pressure at dRef (N/m2)sun
- Sun modelsunRadiusIn
- Sun radiusoccultingBodyRadius
- Occulting body radiusspacecraft
- The physical and geometrical spacecraft representationpublic SolarRadiationPressure(double dRef, double pRef, PVCoordinatesProvider sun, double sunRadiusIn, double occultingBodyRadius, RadiationSensitive spacecraft, boolean computePD)
Note that reference solar radiation pressure pRef
in N/m2 is linked
to solar flux SF in W/m2 using the method
convertRadiativePressureToFlux(double, double)
.
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
dRef
- Reference distance for the solar radiation pressure (m)pRef
- Reference solar radiation pressure at dRef (N/m2)sun
- Sun modelsunRadiusIn
- Sun radiusoccultingBodyRadius
- Occulting body radiusspacecraft
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(double dRef, double pRef, PVCoordinatesProvider sun, double sunRadiusIn, double occultingBodyRadius, CelestialBodyFrame occultingBodyFrame, RadiationSensitive spacecraft, boolean computePD)
Note that reference solar radiation pressure pRef
in N/m2 is linked
to solar flux SF in W/m2 using the method
convertRadiativePressureToFlux(double, double)
.
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
dRef
- Reference distance for the solar radiation pressure (m)pRef
- Reference solar radiation pressure at dRef (N/m2)sun
- Sun modelsunRadiusIn
- Sun radiusoccultingBodyRadius
- Occulting body radiusoccultingBodyFrame
- Occulting body-centered framespacecraft
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(Parameter refFluxParam, PVCoordinatesProvider sun, double occultingBodyRadius, RadiationSensitive spacecraft)
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
refFluxParam
- Normalized reference flux parameter for a 1m distance (N)sun
- Sun modeloccultingBodyRadius
- Occulting body radiusspacecraft
- The physical and geometrical spacecraft representationpublic SolarRadiationPressure(Parameter refFluxParam, PVCoordinatesProvider sun, double occultingBodyRadius, RadiationSensitive spacecraft, boolean computePD)
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
refFluxParam
- Normalized reference flux parameter for a 1m distance (N)sun
- Sun modeloccultingBodyRadius
- Occulting body radiusspacecraft
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(Parameter refFluxParam, PVCoordinatesProvider sun, double sunRadiusIn, double occultingBodyRadius, CelestialBodyFrame occultingBodyFrame, RadiationSensitive spacecraft, boolean computePD)
Note: this constructor defines a spherical/circular occulting body (see
#buildOccultingBodies(double, Frame)
.
The lighting ratio
and the
events detectors
computation will be optimized.
refFluxParam
- Normalized reference flux parameter for a 1m distance (N)sun
- Sun modelsunRadiusIn
- Sun radiusoccultingBodyRadius
- Occulting body radiusoccultingBodyFrame
- Occulting body-centered framespacecraft
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(PVCoordinatesProvider sunBody, BodyShape occultingBody, RadiationSensitive spacecraftModel)
When this constructor is used, the reference values are:
Constants.SEIDELMANN_UA
Constants.CONST_SOL_N_M2
sunBody
- Sun modeloccultingBody
- Occulting body model (for umbra/penumbra computation)spacecraftModel
- The physical and geometrical spacecraft representationpublic SolarRadiationPressure(PVCoordinatesProvider sunBody, BodyShape occultingBody, RadiationSensitive spacecraftModel, boolean computePD)
When this constructor is used, the reference values are:
Constants.SEIDELMANN_UA
Constants.CONST_SOL_N_M2
sunBody
- Sun modeloccultingBody
- Occulting body model (for umbra/penumbra computation)spacecraftModel
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(double dRef, double pRef, PVCoordinatesProvider sunBody, double sunRadiusIn, BodyShape occultingBody, RadiationSensitive spacecraftModel)
Note that reference solar radiation pressure pRef
in N/m2 is linked
to solar flux SF in W/m2 using the method
convertRadiativePressureToFlux(double, double)
.
dRef
- Reference distance for the solar radiation pressure (m)pRef
- Reference solar radiation pressure at dRef (N/m2)sunBody
- Sun modelsunRadiusIn
- Sun radiusoccultingBody
- Occulting body model (for umbra/penumbra computation)spacecraftModel
- The physical and geometrical spacecraft representationpublic SolarRadiationPressure(double dRef, double pRef, PVCoordinatesProvider sunBody, double sunRadiusIn, BodyShape occultingBody, RadiationSensitive spacecraftModel, boolean computePD)
Note that reference solar radiation pressure pRef
in N/m2 is linked
to solar flux SF in W/m2 using the method
convertRadiativePressureToFlux(double, double)
.
dRef
- Reference distance for the solar radiation pressure (m)pRef
- Reference solar radiation pressure at dRef (N/m2)sunBody
- Sun modelsunRadiusIn
- Sun radiusoccultingBody
- Occulting body model (for umbra/penumbra computation)spacecraftModel
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(Parameter referenceFlux, PVCoordinatesProvider sunBody, BodyShape occultingBody, RadiationSensitive spacecraftModel)
Parameter
.referenceFlux
- The parameter representing the reference flux normalized for a 1m distance (N)sunBody
- Sun modeloccultingBody
- Occulting body model (for umbra/penumbra computation)spacecraftModel
- The physical and geometrical spacecraft representationpublic SolarRadiationPressure(Parameter referenceFlux, PVCoordinatesProvider sunBody, double sunRadiusIn, BodyShape occultingBody, RadiationSensitive spacecraftModel, boolean computePD)
Parameter
.referenceFlux
- The parameter representing the reference flux normalized for a 1m distance (N)sunBody
- Sun modelsunRadiusIn
- Sun radiusoccultingBody
- Occulting body model (for umbra/penumbra computation)spacecraftModel
- The physical and geometrical spacecraft representationcomputePD
- true
if the partial derivatives wrt position have to be computed,
false
otherwisepublic SolarRadiationPressure(double dRef, double pRef, PVCoordinatesProvider sunBody, double sunRadiusIn, BodyShape occultingBody, Assembly assembly, double multiplicativeFactorIn)
dRef
- Reference distance for the solar radiation pressure (m)pRef
- Reference solar radiation pressure at dRef (N/m2)sunBody
- Sun modelsunRadiusIn
- Sun radiusoccultingBody
- Occulting body model (for umbra/penumbra computation)assembly
- Assembly with aerodynamic propertiesmultiplicativeFactorIn
- Multiplicative factorpublic SolarRadiationPressure(SolarRadiationPressure otherInstance, Assembly assembly)
otherInstance
- The other instanceassembly
- Assembly with aerodynamic propertiespublic Vector3D getSolarFlux(SpacecraftState s) throws PatriusException
s
- Spacecraft statePatriusException
- thrown if Sun position cannot be retrievedpublic Vector3D computeAcceleration(SpacecraftState s) throws PatriusException
computeAcceleration
in interface ForceModel
s
- current state information: date, kinematics, attitudeSpacecraftState frame
PatriusException
- if some specific error occurspublic void addContribution(SpacecraftState s, TimeDerivativesEquations adder) throws PatriusException
addContribution
in interface ForceModel
s
- current state information: date, kinematics, attitudeadder
- object where the contribution should be addedPatriusException
- if some specific error occurspublic double getLightingRatio(Vector3D satSunVector, BodyShape occultingBody, PVCoordinatesProvider pv, Frame frame, AbsoluteDate date) throws PatriusException
satSunVector
- Sat-Sun vector in spacecraft state frameoccultingBody
- Occulting bodypv
- Satellite's position-velocityframe
- Frame in which is defined the positiondate
- DatePatriusException
- if an error occurspublic EventDetector[] getEventsDetectors()
getEventsDetectors
in interface ForceModel
public void addDAccDState(SpacecraftState s, double[][] dAccdPos, double[][] dAccdVel) throws PatriusException
addDAccDState
in interface IJacobiansParameterizable
s
- spacecraft statedAccdPos
- acceleration derivatives with respect to positiondAccdVel
- acceleration derivatives with respect to velocityPatriusException
- if derivatives cannot be computedpublic void addDAccDParam(SpacecraftState s, Parameter param, double[] dAccdParam) throws PatriusException
addDAccDParam
in interface IJacobiansParameterizable
s
- spacecraft stateparam
- the parameter with respect to which derivatives are requireddAccdParam
- acceleration derivatives with respect to specified parametersPatriusException
- if derivatives cannot be computedpublic boolean computeGradientPosition()
computeGradientPosition
in interface GradientModel
public boolean computeGradientVelocity()
computeGradientVelocity
in interface GradientModel
public PVCoordinatesProvider getSunBody()
public List<BodyShape> getOccultingBodies()
public double getMultiplicativeFactor()
public Parameter getReferenceFlux()
public void checkData(AbsoluteDate start, AbsoluteDate end) throws PatriusException
checkData
in interface ForceModel
start
- range start dateend
- range end datePatriusException
- thrown if some data is missingpublic void setEclipsesComputation(boolean eclipsesComputationFlagIn)
eclipsesComputationFlagIn
- True if eclipses should be taken into account, false otherwisepublic boolean isEclipseComputation()
public final void addOccultingBody(BodyShape body)
body
- Occulting body to addpublic static double convertRadiativePressureToFlux(double dRef, double pRef)
dRef
- Reference distance for the solar radiation pressure (m)pRef
- solar radiation pressure at reference distance dRef (N/m2)public AbstractSignalPropagationDetector.PropagationDelayType getPropagationDelayType()
public void setPropagationDelayType(AbstractSignalPropagationDetector.PropagationDelayType propagationDelayTypeIn, Frame frameIn)
propagationDelayTypeIn
- Propagation delay type used in events computationframeIn
- Frame to use for signal propagation with delay (may be null if propagation delay type is
considered instantaneous). Warning: the usage of a pseudo inertial frame is tolerated, however it will
lead to some inaccuracies due to the non-invariance of the frame with respect to time. For this reason,
it is suggested to use the ICRF frame or a frame which is frozen with respect to the ICRF.IllegalArgumentException
- if the provided frame is not pseudo inertial.public Frame getInertialFrame()
public double getEpsilonSignalPropagation()
public void setEpsilonSignalPropagation(double epsilon)
epsilon
- Epsilon for the signal propagationpublic int getMaxIterSignalPropagation()
public void setMaxIterSignalPropagation(int maxIterSignalPropagationIn)
maxIterSignalPropagationIn
- Maximum number of iterations for signal propagationCopyright © 2023 CNES. All rights reserved.