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