[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,

Thank you very much for your clear answer, it seems to be the kind of setup I was looking for. I have got one more question though, do you think a similar approach could be used when the delta v's are not small ?

As the analytical model for maneuvers is based on a simple linearized
equation, accuracy will decrease as maneuver increases. You will have
to check the result with respect to your needs. It will depend on
maneuver type, orbit range, mission needs, ...

best regards,
Luc


Regards,
Brian


-----Original Message-----
From: orekit-developers-request@orekit.org [mailto:orekit-developers-request@orekit.org] On Behalf Of MAISONOBE Luc
Sent: mardi 13 octobre 2015 10:08
To: orekit-developers@orekit.org
Subject: 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