public class TimeSpanDragForce extends AbstractDragForceModel
This class is closely related to DragForce
class.
The difference is that it has a TimeSpanMap
of DragSensitive
objects as attribute
instead of a single DragSensitive
object.
The idea behind this model is to allow the user to design a drag force model that can see its physical parameters
(drag coefficient and lift ratio) change with time, at dates chosen by the user.
This is a behavior that can be sought in operational orbit determination.
Indeed the solar activity has a strong influence on the local atmospheric density, and thus on the drag force effect.
Solar activity is a physical phenomenon that is difficult to model and predict.
The errors induced by this incomplete modeling can be estimated through the drag coefficients.
Being able to define and estimate drag coefficients depending on user-chosen dates in a piecewise fashion allows for
a better modeling of solar activity uncertainties.
A typical operational use case is to have a daily solar activity with three-hourly magnetic indexes provided by an
international organization (NOAA for example).
Given this input, a user can define a piecewise drag force model with daily or three-hourly drag coefficients.
Each timed coefficient will absorb a part of the uncertainties in the solar activity and will allow for a more accurate
orbit determination
addDragSensitiveValidAfter(DragSensitive, AbsoluteDate)
or addDragSensitiveValidBefore(DragSensitive, AbsoluteDate)
.TimeSpanMap
, meaning: ParameterDriver
(s)
of each DragSensitive model that is added to the object. This will allow you keeping track of the evolution of your models.DragSensitive.DRAG_COEFFICIENT
";
addDragSensitiveValidAfter(DragSensitive, AbsoluteDate)
: the driver's default name is
"DragSensitive.DRAG_COEFFICIENT
+ DATE_AFTER
+ date.toString()"
addDragSensitiveValidBefore(DragSensitive, AbsoluteDate)
: the driver's default name is
"DragSensitive.DRAG_COEFFICIENT
+ DATE_BEFORE
+ date.toString()"
atmosphere
: an atmospheric model
;
isotropicDrag0, 1 and 2
: three IsotropicDrag
models;
date
: an AbsoluteDate
.
isotropicDrag0.getDragParametersDrivers()[0].setName = "Cd0";
isotropicDrag1.getDragParametersDrivers()[0].setName = "Cd1";
isotropicDrag2.getDragParametersDrivers()[0].setName = "Cd2";
TimeSpanDragForce force = new TimeSpanDragForce(atmosphere, isotropicDrag0);
force.addDragSensitiveValidAfter(isotropicDrag1, date.shiftedBy(Constants.JULIAN_DAY));
force.addDragSensitiveValidAfter(isotropicDrag2, date.shiftedBy(2 * Constants.JULIAN_DAY));
Warning:
The TimeSpanDragForce model is versatile and you could end up with non-physical modeling.
For example you could add 2 IsotropicDrag
models with different areas,
or one IsotropicDrag
model and then one
BoxAndSolarArraySpacecraft
model.
It is up to you to ensure that your models are consistent with each other, Orekit will not perform any check for that.
Modifier and Type | Field and Description |
---|---|
static String |
DATE_AFTER
Prefix for dates after in the parameter drivers' name.
|
static String |
DATE_BEFORE
Prefix for dates before in the parameter drivers' name.
|
Constructor and Description |
---|
TimeSpanDragForce(Atmosphere atmosphere,
DragSensitive spacecraft)
Constructor with default UTC time scale for the default names of the drag parameter drivers.
|
TimeSpanDragForce(Atmosphere atmosphere,
DragSensitive spacecraft,
TimeScale timeScale)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
<T extends CalculusFieldElement<T>> |
acceleration(FieldSpacecraftState<T> s,
T[] parameters)
Compute acceleration.
|
Vector3D |
acceleration(SpacecraftState s,
double[] parameters)
Compute acceleration.
|
void |
addDragSensitiveValidAfter(DragSensitive dragSensitive,
AbsoluteDate earliestValidityDate)
Add a DragSensitive entry valid after a limit date.
Using addDragSensitiveValidAfter(entry, t) will make entry
valid in [t, +∞[ (note the closed bracket). |
void |
addDragSensitiveValidBefore(DragSensitive dragSensitive,
AbsoluteDate latestValidityDate)
Add a DragSensitive entry valid before a limit date.
Using addDragSensitiveValidBefore(entry, t) will make entry
valid in ]-∞, t[ (note the open bracket). |
TimeSpanMap<DragSensitive> |
extractDragSensitiveRange(AbsoluteDate start,
AbsoluteDate end)
Extract a range of the
DragSensitive map. |
double[] |
extractParameters(double[] parameters,
AbsoluteDate date)
Extract the proper parameter drivers' values from the array in input of the
acceleration method. |
<T extends CalculusFieldElement<T>> |
extractParameters(T[] parameters,
FieldAbsoluteDate<T> date)
Extract the proper parameter drivers' values from the array in input of the
acceleration method. |
DragSensitive |
getDragSensitive(AbsoluteDate date)
Get the
DragSensitive model valid at a date. |
TimeSpanMap.Span<DragSensitive> |
getDragSensitiveSpan(AbsoluteDate date)
Get the
DragSensitive TimeSpanMap.Span containing a specified date. |
Stream<EventDetector> |
getEventsDetectors()
Get the discrete events related to the model.
|
<T extends CalculusFieldElement<T>> |
getFieldEventsDetectors(Field<T> field)
Get the discrete events related to the model.
|
TimeSpanMap.Span<DragSensitive> |
getFirstSpan()
Get the first
time span of the drag sensitive time span map. |
List<ParameterDriver> |
getParametersDrivers()
Get the drivers for force model parameters.
|
NavigableSet<TimeSpanMap.Transition<DragSensitive>> |
getTransitions()
Deprecated.
as of 11.1, replaced by
getFirstSpan() |
dependsOnPositionOnly, getDSDensityWrtStateUsingFiniteDifferences, getGradientDensityWrtStateUsingFiniteDifferences, isDSStateDerivative, isGradientStateDerivative, isVariable, isVariable
complainIfNotSupported, getParameterDriver, isSupported
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
addContribution, addContribution, getParameters, getParameters, init, init
public static final String DATE_BEFORE
public static final String DATE_AFTER
@DefaultDataContext public TimeSpanDragForce(Atmosphere atmosphere, DragSensitive spacecraft)
atmosphere
- atmospheric modelspacecraft
- Time scale used for the default names of the drag parameter driverspublic TimeSpanDragForce(Atmosphere atmosphere, DragSensitive spacecraft, TimeScale timeScale)
atmosphere
- atmospheric modelspacecraft
- the initial object physical and geometric informationtimeScale
- Time scale used for the default names of the drag parameter driverspublic void addDragSensitiveValidBefore(DragSensitive dragSensitive, AbsoluteDate latestValidityDate)
addDragSensitiveValidBefore(entry, t)
will make entry
valid in ]-∞, t[ (note the open bracket).dragSensitive
- DragSensitive entrylatestValidityDate
- date before which the entry is valid
(must be different from all dates already used for transitions)public void addDragSensitiveValidAfter(DragSensitive dragSensitive, AbsoluteDate earliestValidityDate)
addDragSensitiveValidAfter(entry, t)
will make entry
valid in [t, +∞[ (note the closed bracket).dragSensitive
- DragSensitive entryearliestValidityDate
- date after which the entry is valid
(must be different from all dates already used for transitions)public DragSensitive getDragSensitive(AbsoluteDate date)
DragSensitive
model valid at a date.date
- the date of validitypublic TimeSpanMap.Span<DragSensitive> getDragSensitiveSpan(AbsoluteDate date)
DragSensitive
TimeSpanMap.Span
containing a specified date.date
- date belonging to the desired time spanpublic TimeSpanMap<DragSensitive> extractDragSensitiveRange(AbsoluteDate start, AbsoluteDate end)
DragSensitive
map.
The object returned will be a new independent instance that will contain only the transitions that lie in the specified range.
See theTimeSpanMap.extractRange method
for more.start
- earliest date at which a transition is included in the range
(may be set to AbsoluteDate.PAST_INFINITY
to keep all early transitions)end
- latest date at which a transition is included in the r
(may be set to AbsoluteDate.FUTURE_INFINITY
to keep all late transitions)@Deprecated public NavigableSet<TimeSpanMap.Transition<DragSensitive>> getTransitions()
getFirstSpan()
TimeSpanMap.Transition
s of the drag sensitive time span map.TimeSpanMap.Transition
s for the drag sensitive time span mappublic TimeSpanMap.Span<DragSensitive> getFirstSpan()
time span
of the drag sensitive time span map.time span
of the drag sensitive time span mappublic Vector3D acceleration(SpacecraftState s, double[] parameters)
s
- current state information: date, kinematics, attitudeparameters
- values of the force model parameterspublic <T extends CalculusFieldElement<T>> FieldVector3D<T> acceleration(FieldSpacecraftState<T> s, T[] parameters)
T
- type of the elementss
- current state information: date, kinematics, attitudeparameters
- values of the force model parameterspublic Stream<EventDetector> getEventsDetectors()
A date detector is used to cleanly stop the propagator and reset the state derivatives at transition dates.
public <T extends CalculusFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventsDetectors(Field<T> field)
A date detector is used to cleanly stop the propagator and reset the state derivatives at transition dates.
T
- extends CalculusFieldElement<T>field
- field to which the state belongspublic List<ParameterDriver> getParametersDrivers()
All the parameter drivers of all DragSensitive models are returned in an array. Models are ordered chronologically.
public double[] extractParameters(double[] parameters, AbsoluteDate date)
acceleration
method.
Parameters are filtered given an input date.parameters
- the input parameters arraydate
- the datepublic <T extends CalculusFieldElement<T>> T[] extractParameters(T[] parameters, FieldAbsoluteDate<T> date)
acceleration
method.
Parameters are filtered given an input date.T
- extends CalculusFieldElementparameters
- the input parameters arraydate
- the dateCopyright © 2002-2022 CS GROUP. All rights reserved.