public interface AdditionalStateProvider
SpacecraftState
的范围。
Propagators
生成包含轨道、姿态和质量至少的 states
。这些状态可能还包含 额外状态
。实现此接口的类的实例旨在注册到传播器,以便它们在计算基本组件(轨道、姿态和质量)之后逐步添加这些额外状态。
一些额外状态可能取决于先前的额外状态已经可用,然后才能计算。甚至在某些情况下,如果它们依赖于仅在传播开始后或发生某些事件后才满足的条件,可能无法计算这些额外状态。由于传播器逐步构建完整状态,循环遍历注册的提供者,因此必须按照满足这些可能是时间相关的依赖关系的顺序调用它们的 getAdditionalState
方法,这些依赖关系与提供者注册到传播器的顺序无关。每次构建完整状态时,都使用一种产出机制进行重新排序。传播器首先将所有提供者推入堆栈,然后依次清空堆栈,一次一个提供者,注意只选择在被询问时不 产出
的提供者。例如,考虑这样一种情况,已经注册了提供者 A、B 和 C,实际上提供者 B 需要提供者 C 生成的额外状态。然后在构建完整状态时,传播器将这三个提供者放入新堆栈中,然后开始逐步生成额外状态。首先检查提供者 A,它不产出,因此从堆栈中弹出并添加生成的额外状态。然后检查提供者 B,但它产出,因为来自提供者 C 的状态尚不可用。因此传播器检查提供者 C,它不产出,因此从堆栈中弹出并应用。在这个阶段,提供者 B 是堆栈中唯一剩下的提供者,因此再次检查它,但这次它不产出,因为来自提供者 C 的状态可用,因为刚刚添加,所以提供者 B 从堆栈中弹出并应用。堆栈现在为空,传播器可以返回完整状态。
在传播的某些阶段,注册到传播器的提供者子集都会产出并且无法 检索
它们的额外状态。例如,在计算状态转移矩阵或雅可比矩阵的传播器的初始化阶段期间会发生这种情况。这些特性作为 ODE 积分器中的辅助方程进行管理,并在主要方程(对应于轨道)初始化后进行初始化。因此,当主要方程初始化时,依赖于辅助状态的提供者都会产出。这种行为是预期的。另一种情况发生在用户设置导致依赖循环的额外状态(状态 A 依赖于状态 B,状态 B 依赖于状态 C,状态 C 依赖于状态 A)。在这种情况下,三个相应的提供者将互相等待并且无限期地产出。这第二种情况是死锁,是由应用级别的额外状态管理设计错误导致的。传播器无法事先知道所有产出的提供者子集是正常的还是异常的。因此,在传播器级别,当检测到任何一种情况时,传播器会放弃并返回其能够计算的最完整状态,而不会生成任何错误。在第一种情况下不会触发错误(一旦主要方程已经初始化,辅助方程也将被初始化),在第二种情况下,只要用户尝试检索未添加的额外状态,就会触发错误。
Propagator
, AdditionalDerivativesProvider
Modifier and Type | Method and Description |
---|---|
double[] |
getAdditionalState(SpacecraftState state)
获取额外状态。
|
String |
getName()
获取额外状态的名称。
|
default void |
init(SpacecraftState initialState, AbsoluteDate target)
在传播开始时初始化额外状态提供者。
|
default boolean |
yields(SpacecraftState state)
检查此提供者是否应该产出,以便另一个提供者有机会添加缺失部分。
|
String getName()
default void init(SpacecraftState initialState, AbsoluteDate target)
initialState
- 传播开始时的初始状态信息
target
- 传播的日期
default boolean yields(SpacecraftState state)
产出的决定通常基于提供的 state
中是否已经有额外状态(但从理论上讲,也可能取决于额外状态导数是否已经可用,或任何其他标准)。例如,如果提供者需要状态转移矩阵,它可以将此方法实现为:
public boolean yields(final SpacecraftState state) {
return !state.getAdditionalStates().containsKey("STM");
}
默认实现返回 false
,意味着状态数据可以立即 生成
。
state
- 要处理的状态
double[] getAdditionalState(SpacecraftState state)
state
- 额外状态应对应的航天器状态
Copyright © 2002-2023 CS GROUP. All rights reserved.