I’m trying to include maneuvers in my
DSSTPropagator. By looking on the forum I found this and this old topics, both mentioning the
AbstractGaussianContribution class. I think I managed to successfully implement the equivalent Python class
PythonAbstractGaussianContribution. Indeed, the code runs, however, I think that the results I obtain are wrong. In particular, I have doubts about the
getLLimits method. From what I understand, this method is supposed to return the true longitude interval over which the force has to be averaged, so I imagine this interval should coincide with the interval over which the maneuver actually takes place.
As a first attempt, to compute these boundaries, I’m using a numerical propagator that propagates only the manevuer. These values are then passed to the DSSTManeuver during construction as
DSSTConstantThrustManeuver(maneuver, Lv1, Lv2) and retrieved by the
getLLimits method. This image shows the results (SMA, ecc and inc) obtained from a numerical propagator and the DSST one:
As you can see, the maneuver is indeed accounted for, but the results are in my opinion very wrong.
I also tried setting
Lv2 = Lv1 + 2*pi, and the results are again really weird:
As you can see, now the mean SMA is correct, but there is no effect on the eccentricity.
This is a very nice (but hard) feature you’re developing right now!
This looks like a huge maneuver you’re implementing on a short arc though.
It does look almost instantaneous on your graphs
Could you share your code so we can re-run it on our side?
My guess is that in case 1 the semi-major axis maneuver changes the initial orbit so that Lv2 is reached before you expect it to be reached and the maneuver stops.
But I may very well be wrong.
Concerning the effect of the “averaged maneuver” on eccentricity: maybe you are averaging the
de/dt on a symmetric interval which yields no net effect ?
All the best,
Hello @MaximeJ, sorry for the delayed reply
The maneuver is indeed pretty large, it’s a 10 minutes 10 N maneuver. The reason I tried such large value for thrust is so that I could actually see the effect with just one maneuver.
Thank you for your help!
These are the file to run this test-case
dsstManeuverTest.py (7.9 KB)
MyDSSTManuever.py (1.2 KB)
I’m not really sure how the averaging of the DSST works, but from a physical point of view I don’t think that’s the case because even if the averaging interval were symmetric, the
de/dt term shouldn’t integrate to zero (or at least that’s what I’d expect) since the firing is in the tangential direction and the duration is significantly smaller than the orbital period.
Update: I also tried to compare the results of the osculating DSST propagation with the ones from the numerical propagation
In both cases there is an effect on the inclination which I don’t understand where’s coming from (the maneuver is aligned with the velocity), but more importantly, the DSST osculating elements are far from the values returned by the mean propagation.
There is a known bug with event handling and DSST in osculating parameters (see issue 834).
It turns out I just added some information on it yesterday while trying to use
RESET_STATE in an event detector.
I think that you shouldn’t try to use
DateBasedManeuverTriggers with a DSST osculating until this bug is fixed (since these triggers use
RESET_STATE under the hood).
Hope this helps,