public interface Propagator extends PVCoordinatesProvider
此接口是轨道传播的顶层抽象。它只允许传播到预定义日期。它由没有时间限制的解析模型实现,基于外部数据文件的轨道读取器,使用丰富力模型的数值积分器以及在数值积分完成并收集到密集输出数据后构建的连续模型实现。
请注意,一个单独的传播器不能从多个线程调用。它的配置可以更改,因为至少有一个resetInitialState(SpacecraftState)
方法,即使不支持重置状态的传播器(例如TLEPropagator
)在计算过程中也会缓存一些内部数据。但是,只要它们配置了独立的构建模块(主要是事件处理器和步长处理器,可能会保留一些内部状态),并且只从一个线程调用它们,它们就可以在多线程应用程序中使用。还可以使用PropagatorsParallelizer
来同步运行多个传播器以并行运行。
Modifier and Type | Field and Description |
---|---|
static double |
DEFAULT_MASS
默认质量。
|
getPosition, getPVCoordinates
static final double DEFAULT_MASS
static AttitudeProvider getDefaultLaw(Frames frames)
frames
- 要使用的参考系。
StepHandlerMultiplexer getMultiplexer()
default void clearStepHandlers()
此便利方法等同于调用getMultiplexer().clear()
getMultiplexer()
, StepHandlerMultiplexer.clear()
default void setStepHandler(double h, OrekitFixedStepHandler handler)
此便利方法等同于调用getMultiplexer().clear()
,然后调用getMultiplexer().add(h, handler)
h
- 固定步长(秒)
handler
- 在每个完成的步骤结束时调用的处理器
getMultiplexer()
, StepHandlerMultiplexer.add(double, OrekitFixedStepHandler)
default void setStepHandler(OrekitStepHandler handler)
此便利方法等同于调用getMultiplexer().clear()
,然后调用getMultiplexer().add(handler)
handler
- 在每个完成的步骤结束时调用的处理器
getMultiplexer()
, StepHandlerMultiplexer.add(OrekitStepHandler)
EphemerisGenerator getEphemerisGenerator()
当用户需要在初始时间和目标时间之间的任何时间快速随机访问轨道状态时,可以使用此生成器。一个典型的例子是实现搜索和迭代算法,这些算法可能在找到结果之前在传播范围内向前和向后导航,即使所使用的传播器是基于积分的并且只从一个初始时间到一个目标时间。
请注意,当与基于积分的传播器一起使用时,生成器将存储所有中间结果。因此,在长时间积分范围和高精度/短时间步长的情况下,它会占用大量内存。当与解析传播器一起使用时,生成器仅存储开始/停止时间和对解析传播器本身的引用,以便在需要时调用它,因此它的内存占用较少。
返回的星历生成器最初将为空,当随后调用propagate(target)
或propagate(start, target)
时,它将填充传播数据。因此,使用此方法的正确方式是:
EphemerisGenerator generator = propagator.getEphemerisGenerator(); propagator.propagate(target); BoundedPropagator ephemeris = generator.getGeneratedEphemeris();
SpacecraftState getInitialState()
void resetInitialState(SpacecraftState state)
state
- 要考虑的新初始状态
void addAdditionalStateProvider(AdditionalStateProvider additionalStateProvider)
additionalStateProvider
- 附加状态的提供程序
List<AdditionalStateProvider> getAdditionalStateProviders()
boolean isAdditionalStateManaged(String name)
管理的状态是传播器知道如何计算其演变的状态。它们对应于通过调用addAdditionalStateProvider
方法注册了一个provider
的附加状态。
出现在初始状态
中但没有注册演变方法的附加状态不被视为管理状态。这些未管理的附加状态在传播过程中不会丢失。它们的值在状态重置时是分段恒定的,如果某个事件处理器resetState
方法在事件发生时被调用并且恰好更改了未管理的附加状态,则它们的值会发生变化。
name
- 附加状态的名称
String[] getManagedAdditionalStates()
<T extends EventDetector> void addEventDetector(T detector)
T
- 通用版本的类类型
detector
- 要添加的事件探测器
clearEventsDetectors()
, getEventsDetectors()
Collection<EventDetector> getEventsDetectors()
addEventDetector(EventDetector)
, clearEventsDetectors()
void clearEventsDetectors()
AttitudeProvider getAttitudeProvider()
void setAttitudeProvider(AttitudeProvider attitudeProvider)
attitudeProvider
- 姿态提供器
Frame getFrame()
传播参考系是初始状态的定义参考系,因此应在设置了此状态之后调用此方法,否则可能返回null。
resetInitialState(SpacecraftState)
default MatricesHarvester setupMatricesComputation(String stmName, org.hipparchus.linear.RealMatrix initialStm, DoubleArrayDictionary initialJacobianColumns)
如果调用了此方法,将自动计算状态转移矩阵和关于力模型参数的雅可比矩阵,这些参数将在传播开始时选择,并且收集器将允许检索它们。
初始矩阵的参数必须与传播器将使用的轨道类型和位置角度相兼容。
默认实现会抛出异常,因为不是所有传播器都支持此方法。
stmName
- 状态转移矩阵状态名称
initialStm
- 初始状态转移矩阵 ∂Y/∂Y₀,如果为null(最常见情况),则假定为6x6单位矩阵
initialJacobianColumns
- 关于参数的雅可比矩阵的初始列,如果为null或者字典中缺少某些选择的参数,则相应的初始列假定为0
SpacecraftState propagate(AbsoluteDate target)
简单的传播器仅使用目标日期作为计算传播状态的规范。功能更丰富的传播器可以考虑其他信息,并提供不同的操作模式或G-stop功能以在特定事件发生时停止。在这些情况下,目标日期仅是一个提示,而不是强制性目标。
target
- 应传播轨道状态的目标日期
SpacecraftState propagate(AbsoluteDate start, AbsoluteDate target)
这些传播器使用起始日期和目标日期来计算传播状态。对于使用事件检测机制的传播器,如果提供的起始日期与初始状态日期不同,则将执行第一次简单传播,而不处理任何事件计算。然后从起始日期到目标日期执行完整传播。
start
- 应传播轨道状态的起始日期
target
- 应传播轨道状态的目标日期
Copyright © 2002-2023 CS GROUP. All rights reserved.