[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Developers] Semi-analytic DSST propagation




JOUANNIC Brian <brian.jouannic@thalesaleniaspace.com> a écrit :

Hi Luc,

Hi Brian,


Thank you for your answer.

The propagation is performed over [tStart + dt, tEnd +dt] for several values of dt. For each dt, a range of impulsive maneuvers (dv1, dv2...) occurring in the interval is considered. Thus, for a given dt, several propagations are done over the same interval, but with a changing impulsive shot magnitude/direction.

This looks like a station keeping maneuvers optimization. Can I assume the
dv are small enough? If so, I would suggest you to do the following, which
I agree is rather tricky. It is an "expert mode" use of Orekit ...

First, do a reference propagation with DSST and without any maneuvers over
a time range covering all your needs (i.e. from tStart + min(dt) to
tEnd + max(dt)). This reference propagation should be performed in
ephemeris generation mode. At the end of the propagation, retrieve the
ephemeris.

Then, you can do a loop with all your attempts, where at each iteration
of the loop you will select a dt and the associated maneuvers to check.
In order to do the propagation with maneuvers, you will use an
AdapterPropagator instance, built using the reference propagation ephemeris
you created in the first phase. A new AdapterPropagator instance should be
used for each iteration. Just after creating the AdapterPropagator instance,
add to it your maneuvers, using its addEffect method. For each maneuver,
you want to add first the direct effect of the maneuver itself using
class SmallManeuverAnalyticalModel, but also the differential effect due to
J2/maneuver coupling using class J2DifferentialEffect. So if you have for
example 3 maneuvers, you will first create an AdapterPropagator from the
DSST based ephemeris and 6 additional effects (2 for each maneuver).
Then you can use this propagator as you want (with step handlers, with events
detectors, whatever you want).

One you have finished your loop and optimized the maneuvers that best suit your needs, I would suggest to do a final propagation with DSST again, this time using
the optimized maneuvers, so your final simulation is more accurate.

For your information, this method is used for life-long mission analysis on both LEO and GEO missions, using a numerical propagator rather than DSST. I don't know if I am allowed to say the name of the operator so I will not say more about it. They are on this list, so maybe they will officially confirm it works and it is
efficient.

Since now we have DSST available, you should however get different kinds of results, because with DSST you can already handle mean elements apart from short periodic
terms, which is great for station-keeping. When you use this process with a
numerical propagator, you have to get rid of the short periodics by some extra
filtering step (typically using class SecularAndHarmonic).

Also note that currently the only effects that are available are small maneuver and J2 differential effect. If you need something more accurate (say additional
zonal terms or differential third body), then some dedicated code can be added
to handle them. If you need something like that, send me a direct message and
we will see if we can develop it for you and include it in the next version.

best regards,
Luc


Hope this helps.

Regards,
Brian

-----Original Message-----
From: orekit-developers-request@orekit.org [mailto:orekit-developers-request@orekit.org] On Behalf Of Luc Maisonobe
Sent: lundi 12 octobre 2015 15:33
To: orekit-developers@orekit.org
Subject: Re: [Orekit Developers] Semi-analytic DSST propagation

Le 12/10/2015 16:28, JOUANNIC Brian a écrit :
Hi,

Hi Brian,




I have a question concerning the use of the semi-analytic propagator
implemented in Orekit.



As this kind of propagator is known to reduce the CPU load at an
acceptable precision cost, I wanted to use it in an algorithm
involving a large number of short propagations (typically over a
couples of
orbits) instead of a numerical propagator.



However, it seems that for repeated short term propagations, a
NumericalPropagator performs better (in terms of computation time)
than a DSSTPropagator. From my understanding, it looks like this is
due to the fact the initialize() function of the TesseralContribution
class is called at the beginning of each propagation, causing the
algorithm to spend about 50% of CPU time in this function.



It is possible that I am not using the DSSTPropagator properly and
that is why I am asking you whether you could help me on that matter.

Are all your propagations related to the same orbit or do they correspond to different initial states? Are your propagation in sequence (say t0 -> t1, then t1 -> t2, ...) or do they correspond to different evaluations over the same range?

best regards,
Luc




Regards,

Brian