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