I have been using orekit for a while now, and have a pain point that maybe is already solved or could be a useful feature addition.
I would like to store the result of a propagation with the IntegratedEphemeris or Ephemeris class as opposed to just a list of SpacecraftStates, as the time querring and interpolation provided by these classes is quite useful. However, the pain point occurs when I need to implement successive calls to the propagator. This creates two seperate instances of IntegratedEphemeris, which to my knowledge can not be joined/combined into one arc.
Would it be reasonable to add a method to the IntegratedEphemeris and Ephemeris classes to extend their arcs with an additional IntegratedEphemeris or more SpacecraftStates?
For example:
Initialize a scenario
propagate for some time
Create and store propagation results (SpacecraftStates) into an Ephemeris object
Do some stuff (ie. plan a maneuver)
propagate for some more time
Append second propagation results (more SpacecraftStates) to the already built Ephemeris object
To my knowledge the current way to acheive something like this requires contructing new Epehemeris objects after each propagation, which seems inefficient. I imagine that there maybe is a rationale for why this does not exist, or perhaps there is a smarter way to do this that I have not uncovered.
I think there are two ways to approach your problem.
The one closest to your current approach is to build an Éphemeris object after each propagation. You can then concatenate them into an AggregatedBoundedPropagator. Make sure to have transitions at each impulsive maneuver otherwise you’re interpolating a discontinuity in your velocity.
Now, what exactly do you need to do each time you interrupt the propagation? Can’t you just do everything in one run and collect information along the way, with a custom Orekit(Fixed)StepHandler?
Note that the PropagationStepRecorder is a native one that stores all the SpacecraftState computed during integration steps.
I will investigate the AggregateBoundedPropagator some more (not sure how I missed it in the past). To clarify your point on the maneuvers, if I implement maneuvers based in the force model like a finite maneuver instead of impulsive, does that still need a transition for the interpolation to work properly?
Well if the thrust is bang-bang it makes the acceleration discontinuous. So if you’re using 2nd order interpolation or more in Éphemeris, you should probably isolate the thrust arc.
Anyway in the IntegratedEphemeris, the switches in the dynamics are already taken care of.