I’m trying to use Orekit to simulate cross-orbit communications opportunities around a 24-node walker constellation. Based on the limitations on the ParallelPropagator, my plan was to run the numerical propagators in parallel, pull the ephemeris out of each and propagate those with InterSatViewDetector setup in serial.
Is this the least inefficient way to do this, or is there a more acceptable way to do it?
Thanks for raising up the topic.
I am interested as well.
The most limiting factor I see in a big constellation is that we repeat the propagation for each satellite.
- propagating satellite A to capture satellite B, C, D
- propagating satellite B to capture satellite A, C, D
While already capturing visibility of satellite A to B, it would be great to save B to A (that are the same) and do not repeat parallel propagation of A while considering B.
I was trying to force the event on storing the state (or just the PV) of the second satellite, but it is a bad idea
Open to discuss.
That sounds reasonable using an
EphemerisGenerator. It will use a good bit of memory, but that may not be an issue depending on the hardware. In theory computing access between n satellites is O(n^2) while propagating n satellites is O(n) so for large n it won’t matter how the satellites are propagated as long as they are only propagated once.
Also consider if you can use an
AnalyticPropagator. Then there would be no need to store ephemeris and so the memory requirements would decrease significantly.
@evan.ward thank you! I’ll see how much memory it takes up- right now I’m building it naively and if it needs too much memory I’ll optimize from there!