public class PropagatorsParallelizer extends Object
多卫星传播基于多线程。因此,必须小心确保所有传播器都可以在多线程环境中运行。这意味着所有传播器都是独立构建的,并且它们依赖于同样是独立构建的力模型。一个明显的错误是重用机动力模型,因为这些模型需要缓存开火/停火状态。力模型使用的对象,如用于阻力力的大气模型或其他对象,也可能缓存中间变量,因此必须为每个传播器设置单独的实例。
这个类将为运行传播器创建新线程。它添加了一个新的全局步长处理器
,以一次管理所有步长,同时保留现有的各自步长处理器。
所有传播器彼此保持独立(它们甚至不知道它们由并行化器管理),并根据各自的算法推进模拟时间。并行化器将在每个步骤结束时阻塞它们,并允许它们继续以保持同步。处理器看到的全局步骤将是所有传播器步骤之间的共同部分。一旦处理了这个全局步骤,并行化器将让最晚的传播器(这里是传播器2)再前进一步,并计算和处理一个新的全局步骤,直到所有传播器达到结束。
这个类不提供多卫星事件。由于事件可能截断步骤甚至重置状态,所有事件(包括多卫星事件)都在每个传播器内部的非常低级别处理,不能由并行化器从外部管理。为了准确处理多卫星事件,事件探测器应该在一个卫星的传播器内注册,并且可以访问另一个卫星的独立传播器(通常是解析传播器或星历)。由探测器调用嵌入传播器,探测器本身由第一个传播器调用,因此它确实应该是一个专用传播器,并且不应该同时出现为并行化的传播器之一,否则将出现冲突。
Constructor and Description |
---|
PropagatorsParallelizer(List<Propagator> propagators, double h, MultiSatFixedStepHandler globalHandler)
简单构造函数。
|
PropagatorsParallelizer(List<Propagator> propagators, MultiSatStepHandler globalHandler)
简单构造函数。
|
Modifier and Type | Method and Description |
---|---|
List<Propagator> |
getPropagators()
获取基础单卫星传播器的不可修改列表。
|
List<SpacecraftState> |
propagate(AbsoluteDate start, AbsoluteDate target)
从开始日期向目标日期传播。
|
public PropagatorsParallelizer(List<Propagator> propagators, MultiSatStepHandler globalHandler)
propagators
- 要使用的传播器列表
globalHandler
- 用于同时管理所有航天器的全局处理器
public PropagatorsParallelizer(List<Propagator> propagators, double h, MultiSatFixedStepHandler globalHandler)
propagators
- 要使用的传播器列表
h
- 固定的时间步长(不使用符号)
globalHandler
- 用于同时管理所有航天器的全局处理器
public List<Propagator> getPropagators()
public List<SpacecraftState> propagate(AbsoluteDate start, AbsoluteDate target)
start
- 应该传播轨道状态的开始日期
target
- 应该传播轨道状态的目标日期
Copyright © 2002-2023 CS GROUP. All rights reserved.