public class DSSTPropagator extends AbstractIntegratedPropagator
轨道
。
而分析传播器仅通过其各种构造函数进行配置,并且可以在构造后立即使用,这种半解析传播器配置涉及在构造时间和传播时间之间设置多个参数,就像数值传播器一样。
可以设置的配置参数包括:
setInitialState(SpacecraftState)
)addForceModel(DSSTForceModel)
,removeForceModels()
)AbstractIntegratedPropagator.addEventDetector(org.orekit.propagation.events.EventDetector)
,AbstractIntegratedPropagator.clearEventsDetectors()
)AbstractPropagator.getMultiplexer()
)从这些配置参数中,只有初始状态是必需的。默认传播设置为使用赤道
参数,带有true
经度参数。用于定义初始轨道的中心引力系数将被使用。但是,仅指定初始状态将意味着传播器仅使用开普勒力。在这种情况下,更简单的KeplerianPropagator
类将更有效。
构造函数中设置的基础数值积分器也可能具有自己的配置参数。自适应步长积分器的典型配置参数包括最小、最大和可能的起始步长,以及绝对和/或相对误差阈值。
积分器看到的状态是一个简单的六元素双精度数组。这六个元素是:
赤道轨道参数
(a,ex,ey,hx,hy,λm)以米和弧度为单位,默认情况下,在传播结束时,传播器将初始状态重置为最终状态,从而允许从那里开始新的传播而无需重新计算已执行的部分。可以通过调用AbstractIntegratedPropagator.setResetAtEnd(boolean)
来更改此行为。
请注意,同一实例不能同时被不同的线程使用,该类不是线程安全的。
SpacecraftState
, DSSTForceModel
AbstractIntegratedPropagator.MainStateEquations
DEFAULT_MASS
Constructor and Description |
---|
DSSTPropagator(org.hipparchus.ode.ODEIntegrator integrator)
创建一个新的DSSTPropagator实例。
|
DSSTPropagator(org.hipparchus.ode.ODEIntegrator integrator, PropagationType propagationType)
创建一个新的DSSTPropagator实例。
|
DSSTPropagator(org.hipparchus.ode.ODEIntegrator integrator, PropagationType propagationType, AttitudeProvider attitudeProvider)
创建一个新的DSSTPropagator实例。
|
Modifier and Type | Method and Description |
---|---|
void |
addForceModel(DSSTForceModel force)
向全局摄动模型添加一个力模型。
|
protected void |
afterIntegration()
在积分后调用的方法。
|
protected void |
beforeIntegration(SpacecraftState initialState, AbsoluteDate tEnd)
在积分前调用的方法。
|
static SpacecraftState |
computeMeanState(SpacecraftState osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModels)
从摄动到平均轨道的转换。
|
static SpacecraftState |
computeMeanState(SpacecraftState osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModels, double epsilon, int maxIterations)
从摄动到平均轨道的转换。
|
static SpacecraftState |
computeOsculatingState(SpacecraftState mean, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forces)
从平均到摄动轨道的转换。
|
protected AbstractMatricesHarvester |
createHarvester(String stmName, org.hipparchus.linear.RealMatrix initialStm, DoubleArrayDictionary initialJacobianColumns)
为传播器创建适当的收割器。
|
protected StateMapper |
createMapper(AbsoluteDate referenceDate, double mu, OrbitType ignoredOrbitType, PositionAngleType ignoredPositionAngleType, AttitudeProvider attitudeProvider, Frame frame)
创建原始双精度分量与航天器状态之间的映射器。
|
List<DSSTForceModel> |
getAllForceModels()
获取所有力模型,包括摄动力和牛顿引力。
|
protected SpacecraftState |
getInitialIntegrationState()
获取用于积分的初始状态。
|
protected List<String> |
getJacobiansColumnsNames()
|
protected AbstractIntegratedPropagator.MainStateEquations |
getMainStateEquations(org.hipparchus.ode.ODEIntegrator integrator)
获取要积分的微分方程(仅适用于主状态)。
|
OrbitType |
getOrbitType()
获取传播参数类型。
|
PositionAngleType |
getPositionAngleType()
获取传播参数类型。
|
int |
getSatelliteRevolution()
获取用于将摄动转换为平均元素的卫星公转数。
|
Set<String> |
getSelectedCoefficients()
获取必须存储为附加状态的选定短周期系数。
|
List<ShortPeriodTerms> |
getShortPeriodTerms()
获取短周期项。
|
double[] |
getShortPeriodTermsValue(SpacecraftState meanState)
获取短周期项值。
|
boolean |
initialIsOsculating()
检查初始状态是否以摄动元素提供。
|
void |
removeForceModels()
从全局摄动模型中删除所有摄动力模型(除了中心引力)。
|
void |
resetInitialState(SpacecraftState state)
重置初始状态。
|
void |
setAttitudeProvider(AttitudeProvider attitudeProvider)
设置姿态提供器。
|
void |
setInitialState(SpacecraftState initialState)
使用摄动轨道元素设置初始状态。
|
void |
setInitialState(SpacecraftState initialState, PropagationType stateType)
设置初始状态。
|
void |
setInterpolationGridToFixedNumberOfPoints(int interpolationPoints)
设置插值网格生成器。
|
void |
setInterpolationGridToMaxTimeGap(double maxGap)
设置插值网格生成器。
|
void |
setMu(double mu)
设置中心引力系数μ。
|
void |
setSatelliteRevolution(int satelliteRevolution)
覆盖参数的默认值。
|
void |
setSelectedCoefficients(Set<String> selectedCoefficients)
设置必须存储为附加状态的选定短周期系数。
|
void |
setShortPeriodTerms(List<ShortPeriodTerms> shortPeriodTerms)
覆盖默认值的短周期项。
|
protected void |
setUpStmAndJacobianGenerators()
设置状态转移矩阵和雅可比矩阵处理。
|
static double[][] |
tolerances(double dP, double dV, Orbit orbit)
为AdaptativeStepsizeIntegrator估算容差向量。
|
static double[][] |
tolerances(double dP, Orbit orbit)
为AdaptativeStepsizeIntegrator估算容差向量。
|
addAdditionalDerivativesProvider, addEventDetector, clearEventsDetectors, getAdditionalDerivativesProviders, getBasicDimension, getCalls, getEphemerisGenerator, getEventsDetectors, getIntegrator, getIntegratorName, getManagedAdditionalStates, getMu, getPropagationType, getResetAtEnd, initMapper, isAdditionalStateManaged, propagate, propagate, setOrbitType, setPositionAngleType, setResetAtEnd, setUpEventDetector, setUpUserEventDetectors
addAdditionalStateProvider, getAdditionalStateProviders, getAttitudeProvider, getFrame, getHarvester, getInitialState, getMultiplexer, getPVCoordinates, getStartDate, initializeAdditionalStates, initializePropagation, setStartDate, setupMatricesComputation, stateChanged, updateAdditionalStates, updateUnmanagedStates
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
clearStepHandlers, getDefaultLaw, setStepHandler, setStepHandler
getPosition
@DefaultDataContext public DSSTPropagator(org.hipparchus.ode.ODEIntegrator integrator, PropagationType propagationType)
创建后,根本没有任何摄动力。这意味着如果在创建后未调用addForceModel
,则集成轨道将仅遵循开普勒演化。
此构造函数使用默认数据上下文
。
integrator
- 用于传播的数值积分器。
propagationType
- 输出轨道类型(平均或摄动)。
DSSTPropagator(ODEIntegrator, PropagationType, AttitudeProvider)
public DSSTPropagator(org.hipparchus.ode.ODEIntegrator integrator, PropagationType propagationType, AttitudeProvider attitudeProvider)
创建后,根本没有任何摄动力。这意味着如果在创建后未调用addForceModel
,则集成轨道将仅遵循开普勒演化。
integrator
- 用于传播的数值积分器。
propagationType
- 输出轨道类型(平均或摄动)。
attitudeProvider
- 姿态规律。
@DefaultDataContext public DSSTPropagator(org.hipparchus.ode.ODEIntegrator integrator)
创建后,根本没有任何摄动力。这意味着如果在创建后未调用addForceModel
,则集成轨道将仅遵循开普勒演化。仅生成平均轨道。
此构造函数使用默认数据上下文
。
integrator
- 用于传播的数值积分器。
DSSTPropagator(ODEIntegrator, PropagationType, AttitudeProvider)
public void setMu(double mu)
设置中心引力系数等效于add
一个DSSTNewtonianAttraction
力模型。
setMu
在类 AbstractIntegratedPropagator
中
mu
- 中心引力系数(m³/s²)
addForceModel(DSSTForceModel)
,getAllForceModels()
public void setInitialState(SpacecraftState initialState)
initialState
- 初始状态(用轨道要素定义)
public void setInitialState(SpacecraftState initialState, PropagationType stateType)
initialState
- 初始状态
stateType
- 定义轨道状态是用轨道要素还是平均要素定义的
public void resetInitialState(SpacecraftState state)
resetInitialState
在接口 Propagator
resetInitialState
在类 AbstractPropagator
state
- 新的初始状态
public void setSelectedCoefficients(Set<String> selectedCoefficients)
selectedCoefficients
- 必须作为附加状态存储的选定短周期系数(null表示未选择任何系数,空集表示选择所有系数)
public Set<String> getSelectedCoefficients()
protected AbstractMatricesHarvester createHarvester(String stmName, org.hipparchus.linear.RealMatrix initialStm, DoubleArrayDictionary initialJacobianColumns)
createHarvester
在类 AbstractPropagator
stmName
- 状态转移矩阵状态名称
initialStm
- 初始状态转移矩阵 ∂Y/∂Y₀,如果为null(这是最常见的情况),则假定为6x6单位矩阵
initialJacobianColumns
- 相对于参数的雅可比矩阵的初始列,如果为null或字典中缺少某些选定参数,则相应的初始列假定为0
protected void setUpStmAndJacobianGenerators()
public boolean initialIsOsculating()
public void setInterpolationGridToFixedNumberOfPoints(int interpolationPoints)
生成器将为每个平均要素积分步骤创建一个具有固定点数的插值网格。
如果既未调用setInterpolationGridToFixedNumberOfPoints(int)
也未调用setInterpolationGridToMaxTimeGap(double)
,则默认情况下传播器设置为每步3个插值点。
interpolationPoints
- 每个积分步骤的插值点数
setInterpolationGridToMaxTimeGap(double)
public void setInterpolationGridToMaxTimeGap(double maxGap)
生成器将创建一个具有插值点之间最大时间间隔的插值网格。
如果既未调用setInterpolationGridToFixedNumberOfPoints(int)
也未调用setInterpolationGridToMaxTimeGap(double)
,则默认情况下传播器设置为每步3个插值点。
maxGap
- 插值点之间的最大时间间隔(秒)
setInterpolationGridToFixedNumberOfPoints(int)
public void addForceModel(DSSTForceModel force)
如果根本没有调用此方法,则集成轨道将仅遵循开普勒演化。
force
- 要添加的扰动force
removeForceModels()
, setMu(double)
public void removeForceModels()
一旦所有扰动力被移除(并且没有添加新的力模型),集成轨道将仅遵循开普勒演化。
public List<DSSTForceModel> getAllForceModels()
addForceModel(DSSTForceModel)
, setMu(double)
public OrbitType getOrbitType()
getOrbitType
在类 AbstractIntegratedPropagator
public PositionAngleType getPositionAngleType()
getPositionAngleType
在类 AbstractIntegratedPropagator
public static SpacecraftState computeOsculatingState(SpacecraftState mean, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forces)
计算在DSST意义上对应于输入的平均SpacecraftState的轨道要素,根据考虑的力模型。
由于轨道要素是通过添加每个力模型的短周期变化获得的,因此结果输出将取决于输入中参数化的力模型。
mean
- 要转换的平均状态
forces
- 要考虑的力
attitudeProvider
- 姿态提供者(如果没有高斯力模型,如大气阻力、辐射压力或特定用户定义模型,则可能为null)
public static SpacecraftState computeMeanState(SpacecraftState osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModels)
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 convert
attitudeProvider
- attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)
forceModels
- Forces to take into account
public static SpacecraftState computeMeanState(SpacecraftState osculating, AttitudeProvider attitudeProvider, Collection<DSSTForceModel> forceModels, double epsilon, int maxIterations)
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 convert
attitudeProvider
- attitude provider (may be null if there are no Gaussian force models like atmospheric drag, radiation pressure or specific user-defined models)
forceModels
- Forces to take into account
epsilon
- convergence threshold for mean parameters conversion
maxIterations
- maximum iterations for mean parameters conversion
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 elements
public int getSatelliteRevolution()
public void setShortPeriodTerms(List<ShortPeriodTerms> shortPeriodTerms)
By default, short periodic terms are initialized before the numerical integration of the mean orbital elements.
shortPeriodTerms
- short periodic terms
public List<ShortPeriodTerms> getShortPeriodTerms()
public void setAttitudeProvider(AttitudeProvider attitudeProvider)
setAttitudeProvider
in interface Propagator
setAttitudeProvider
in class AbstractIntegratedPropagator
attitudeProvider
- attitude provider
protected void beforeIntegration(SpacecraftState initialState, AbsoluteDate tEnd)
The default implementation does nothing, it may be specialized in subclasses.
beforeIntegration
in class AbstractIntegratedPropagator
initialState
- initial state
tEnd
- target date at which state should be propagated
protected void afterIntegration()
The default implementation does nothing, it may be specialized in subclasses.
afterIntegration
in class AbstractIntegratedPropagator
protected SpacecraftState getInitialIntegrationState()
getInitialIntegrationState
in class AbstractIntegratedPropagator
protected StateMapper createMapper(AbsoluteDate referenceDate, double mu, OrbitType ignoredOrbitType, PositionAngleType 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 PositionAngleType.MEAN
, so the corresponding parameters are ignored.
createMapper
in class AbstractIntegratedPropagator
referenceDate
- reference date
mu
- central attraction coefficient (m³/s²)
ignoredOrbitType
- orbit type to use for mapping
ignoredPositionAngleType
- angle type to use for propagation
attitudeProvider
- attitude provider
frame
- inertial frame
public double[] getShortPeriodTermsValue(SpacecraftState meanState)
meanState
- the mean state
protected AbstractIntegratedPropagator.MainStateEquations getMainStateEquations(org.hipparchus.ode.ODEIntegrator integrator)
getMainStateEquations
in class AbstractIntegratedPropagator
integrator
- numerical integrator to use for propagation.
public static double[][] tolerances(double dP, Orbit 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.
dP
- user specified position error (m)
orbit
- reference orbit
public static double[][] tolerances(double dP, double dV, Orbit orbit)
The errors are estimated from partial derivatives properties of orbits, starting from scalar position and velocity errors specified by the user.
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
- 用户指定的位置误差(米)
dV
- 用户指定的速度误差(米/秒)
orbit
- 参考轨道
Copyright © 2002-2023 CS GROUP. All rights reserved.