Hi!
I’m coming back on this topic since it is a concern for our application… with potential impacts for the next study
First of all, we unfortunately can’t implement a new propulsion model since we only have one in our software that is generic to all platform and applicable to orbit determination and propagation as well as spacecraft operations and mission analysis. The idea to have only one is to improve code maintenance. In addition, I think that the main changes presented below can be useful for all Orekit users doing propagation with maneuvers.
So, I implemented (during my work time) a merge request with some small improvements in maneuvers handling: Improve maneuver performance (!901) · Merge requests · Orekit / Orekit · GitLab
To summarize, the improvements are significant thanks to 2 main changes. By significant, I mean the computation time (i.e., propagation time) is reduced by a factor of 3, 4 or even 5 depending the number of maneuvers. The two main changes are presented below
Extending CopyOnWriteArrayList is more efficient and preserves thread safety
First significant change is to remove all the synchronized
keys in TimeSpanMap
and to extend the CopyOnWriteArrayList class. This class introduce thread safety and reduce considerably the computation time if the number of read operations is greater than the number of write operations. Which is I think the case for TimeSpanMap
From what I understand, it provided the same service as synchronized keys, but with a reduced computation time on operations.
Added mechanism to remove time-based force models non applicable inside propagation span
The idea of this commit is to look at all the force models that are time dependent and to see if the time dependency is inside the propagation span or not. If not, the force model is not used during the orbit propagation. If yes, the force model is used. At the end, the the “cleaned” force models are putted back to the list of forceModels
so that a user performing propagation from t0 → t1 and after t1 → t2 is not impacted by the clean.
This change is only applicable to Maneuver
with a DateBaseManeuverTrigger
and the methods are not public to limit the risk of wrong used.
Thanks to this two changes we considerably reduced the propagation time.
Any comment is welcome. I didn’t implemented unit tests yet or analysed the 6 failing tests because I would like to have feedbacks before on the two changes. If everything is OK, we would be please to contribute a patch release with it 
Best regards,
Bryan