<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://patrius.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4</id>
	<title>NumericalPropagationWithOrbitalIncrementManeuvers 4.4 - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://patrius.cnes.fr/index.php?action=history&amp;feed=atom&amp;title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4"/>
	<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4&amp;action=history"/>
	<updated>2026-04-05T21:22:04Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://patrius.cnes.fr/index.php?title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4&amp;diff=2523&amp;oldid=prev</id>
		<title>Admin le 3 octobre 2019 à 13:06</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4&amp;diff=2523&amp;oldid=prev"/>
		<updated>2019-10-03T13:06:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 3 octobre 2019 à 13:06&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l132&quot;&gt;Ligne 132 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 132 :&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         // Adding additional state&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         // Adding additional state&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         propagator.setMassProviderEquation(mm);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         propagator.setMassProviderEquation(mm);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;//SPECIFIC&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;          &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         printResults(iniOrbit, listOfMan, &amp;quot;Initial conditions&amp;quot;, false);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         printResults(iniOrbit, listOfMan, &amp;quot;Initial conditions&amp;quot;, false);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://patrius.cnes.fr/index.php?title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4&amp;diff=2522&amp;oldid=prev</id>
		<title>Admin : Page créée avec « &lt;syntaxhighlight lang=&quot;java&quot;&gt; public class NumericalPropagationWithOrbitalIncrementManeuvers {      public static void main(String[] args) throws PatriusException {... »</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=NumericalPropagationWithOrbitalIncrementManeuvers_4.4&amp;diff=2522&amp;oldid=prev"/>
		<updated>2019-10-03T13:05:33Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; public class NumericalPropagationWithOrbitalIncrementManeuvers {      public static void main(String[] args) throws PatriusException {... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class NumericalPropagationWithOrbitalIncrementManeuvers {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) throws PatriusException {&lt;br /&gt;
        &lt;br /&gt;
        Locale.setDefault(Locale.US);&lt;br /&gt;
        &lt;br /&gt;
        // Patrius Dataset initialization (needed for example to get the UTC time)&lt;br /&gt;
        PatriusDataset.addResourcesFromPatriusDataset() ;&lt;br /&gt;
&lt;br /&gt;
        // Recovery of the UTC time scale using a &amp;quot;factory&amp;quot; (not to duplicate such unique object)&lt;br /&gt;
        final TimeScale TUC = TimeScalesFactory.getUTC();&lt;br /&gt;
        &lt;br /&gt;
        // Date of the orbit given in UTC time scale)&lt;br /&gt;
        final AbsoluteDate date0 = new AbsoluteDate(&amp;quot;2010-01-01T12:00:00.000&amp;quot;, TUC);&lt;br /&gt;
        &lt;br /&gt;
        // Getting the frame with wich will defined the orbit parameters&lt;br /&gt;
        // As for time scale, we will use also a &amp;quot;factory&amp;quot;.&lt;br /&gt;
        final Frame GCRF = FramesFactory.getGCRF();&lt;br /&gt;
&lt;br /&gt;
        // Initial orbit&lt;br /&gt;
        final double sma = 7200.e+3;&lt;br /&gt;
        final double ecc = 0.;&lt;br /&gt;
        final double inc = FastMath.toRadians(98.);&lt;br /&gt;
        final double pa = FastMath.toRadians(0.);&lt;br /&gt;
        final double raan = FastMath.toRadians(0.);&lt;br /&gt;
        final double anm = FastMath.toRadians(0.);&lt;br /&gt;
        final double MU = Constants.WGS84_EARTH_MU;&lt;br /&gt;
        &lt;br /&gt;
        final KeplerianParameters par = new KeplerianParameters(sma, ecc, inc, pa, raan, anm, PositionAngle.MEAN, MU);&lt;br /&gt;
        final KeplerianOrbit iniOrbit = new KeplerianOrbit(par, GCRF, date0);&lt;br /&gt;
        final double period0 = iniOrbit.getKeplerianPeriod();&lt;br /&gt;
        final double sma0 = iniOrbit.getA();&lt;br /&gt;
        &lt;br /&gt;
        // Creating a mass model (see also specific example)&lt;br /&gt;
        final AssemblyBuilder builder = new AssemblyBuilder();&lt;br /&gt;
        &lt;br /&gt;
        // Main part&lt;br /&gt;
        final double iniMass = 900.;&lt;br /&gt;
        builder.addMainPart(&amp;quot;MAIN&amp;quot;);&lt;br /&gt;
        builder.addProperty(new MassProperty(iniMass), &amp;quot;MAIN&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Tank part (ergols mass)&lt;br /&gt;
        final double ergolsMass = 100.;&lt;br /&gt;
        final TankProperty tank = new TankProperty(ergolsMass);&lt;br /&gt;
        builder.addPart(&amp;quot;TANK&amp;quot;, &amp;quot;MAIN&amp;quot;, Transform.IDENTITY);&lt;br /&gt;
        builder.addProperty(tank, &amp;quot;TANK&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // Engine part&lt;br /&gt;
        final double isp = 300.;&lt;br /&gt;
        final double thrust = 400.;&lt;br /&gt;
        final PropulsiveProperty prop = new PropulsiveProperty(thrust, isp); // au lieu de new PropulsiveProperty(&amp;quot;PROP&amp;quot;, thrust, isp);&lt;br /&gt;
        &lt;br /&gt;
        builder.addPart(&amp;quot;PROP&amp;quot;, &amp;quot;MAIN&amp;quot;, Transform.IDENTITY);&lt;br /&gt;
        builder.addProperty(prop, &amp;quot;PROP&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        final Assembly assembly = builder.returnAssembly();&lt;br /&gt;
        final MassProvider mm = new MassModel(assembly);&lt;br /&gt;
&lt;br /&gt;
        // We create a spacecratftstate&lt;br /&gt;
        final SpacecraftState iniState = new SpacecraftState(iniOrbit, mm);&lt;br /&gt;
        &lt;br /&gt;
        // Initialization of the Runge Kutta integrator with a 2 s step&lt;br /&gt;
        final double pasRk = 2.;&lt;br /&gt;
        final FirstOrderIntegrator integrator = new ClassicalRungeKuttaIntegrator(pasRk);&lt;br /&gt;
&lt;br /&gt;
        // Initialization of the propagator&lt;br /&gt;
        final NumericalPropagator propagator = new NumericalPropagator(integrator);&lt;br /&gt;
        propagator.resetInitialState(iniState);&lt;br /&gt;
        &lt;br /&gt;
        // Forcing integration using cartesian equations&lt;br /&gt;
        propagator.setOrbitType(OrbitType.CARTESIAN);&lt;br /&gt;
 &lt;br /&gt;
        final ArrayList&amp;lt;DateDetector&amp;gt; listOfEvents = new ArrayList&amp;lt;DateDetector&amp;gt;();&lt;br /&gt;
        final ArrayList&amp;lt;ImpulseManeuver&amp;gt; listOfMan = new ArrayList&amp;lt;ImpulseManeuver&amp;gt;();&lt;br /&gt;
        final ArrayList&amp;lt;String&amp;gt; listOfManLabels = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
        final boolean error = false;&lt;br /&gt;
        &lt;br /&gt;
        // Event corresponding to the criteria to trigger the Da impulsive maneuver&lt;br /&gt;
        double da = 10.e3;&lt;br /&gt;
        final DateDetector eventDa = new DateDetector(date0);&lt;br /&gt;
        listOfEvents.add(eventDa);&lt;br /&gt;
        final ImpulseManeuver impDa = new ImpulseDaManeuver(eventDa, da, prop, mm, tank);&lt;br /&gt;
        listOfMan.add(impDa);&lt;br /&gt;
        listOfManLabels.add(&amp;quot;Da impulsive maneuver&amp;quot;);&lt;br /&gt;
        final double newa = sma0 + da;&lt;br /&gt;
        final double newPeriod = 2.*FastMath.PI*FastMath.sqrt(newa*newa*newa/MU);&lt;br /&gt;
&lt;br /&gt;
        // Event corresponding to the criteria to trigger the Da/De impulsive maneuver ... but an impossible one !&lt;br /&gt;
        da = -10000.;&lt;br /&gt;
        double de = -0.001386962552;&lt;br /&gt;
        final DateDetector eventDaDe1 = new DateDetector(date0.shiftedBy(0.5*newPeriod));&lt;br /&gt;
        listOfEvents.add(eventDaDe1);&lt;br /&gt;
        final ImpulseManeuver impDaDe1 = new ImpulseDeManeuver(eventDaDe1, de, da, prop, mm, tank, error);&lt;br /&gt;
        listOfMan.add(impDaDe1);&lt;br /&gt;
        listOfManLabels.add(&amp;quot;DaDe impossible impulsive maneuver&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Event corresponding to the criteria to trigger the Da/De impulsive maneuver&lt;br /&gt;
        da = -10000.;&lt;br /&gt;
        de = -0.001386962552;&lt;br /&gt;
        final DateDetector eventDaDe2 = new DateDetector(date0.shiftedBy(newPeriod));&lt;br /&gt;
        listOfEvents.add(eventDaDe2);&lt;br /&gt;
        final ImpulseManeuver impDaDe2 = new ImpulseDeManeuver(eventDaDe2, de, da, prop, mm, tank, error);&lt;br /&gt;
        listOfMan.add(impDaDe2);&lt;br /&gt;
        listOfManLabels.add(&amp;quot;DaDe impulsive maneuver&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Event corresponding to the criteria to trigger the Di impulsive maneuver&lt;br /&gt;
        final DateDetector eventDi = new DateDetector(date0.shiftedBy(newPeriod+period0));&lt;br /&gt;
        listOfEvents.add(eventDi);&lt;br /&gt;
        double di = FastMath.toRadians(0.1);&lt;br /&gt;
        final ImpulseManeuver impDi = new ImpulseDiManeuver(eventDi, di, prop, mm, tank, error);&lt;br /&gt;
        //final ImpulseManeuver impDi = new ImpulseDiManeuver(eventDi, di, 0., prop, mm, tank, error);&lt;br /&gt;
        listOfMan.add(impDi);&lt;br /&gt;
        listOfManLabels.add(&amp;quot;Di impulsive maneuver&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // Event corresponding to the standard criteria&lt;br /&gt;
        final DateDetector eventStd = new DateDetector(date0.shiftedBy(newPeriod+2.*period0));&lt;br /&gt;
        listOfEvents.add(eventStd);&lt;br /&gt;
        final Vector3D deltaV = new Vector3D(10., 0., 0.);&lt;br /&gt;
        final ImpulseManeuver impStd = new ImpulseManeuver(eventStd, deltaV, prop, mm, tank, LOFType.TNW);&lt;br /&gt;
        listOfMan.add(impStd);&lt;br /&gt;
        listOfManLabels.add(&amp;quot;Std impulsive maneuver&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        // Creation of the sequence of maneuver&lt;br /&gt;
        ManeuversSequence seq = new ManeuversSequence(0., 0.);&lt;br /&gt;
        for (ImpulseManeuver impulseManeuver : listOfMan) {&lt;br /&gt;
            seq.add(impulseManeuver);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Adding the maneuver sequence to the propagator&lt;br /&gt;
        seq.applyTo(propagator);&lt;br /&gt;
        // Adding additional state&lt;br /&gt;
        propagator.setMassProviderEquation(mm);&lt;br /&gt;
        &lt;br /&gt;
//SPECIFIC&lt;br /&gt;
        &lt;br /&gt;
        printResults(iniOrbit, listOfMan, &amp;quot;Initial conditions&amp;quot;, false);&lt;br /&gt;
        &lt;br /&gt;
        // For propagating just after maneuvers&lt;br /&gt;
        final double dt = 1.e-6;&lt;br /&gt;
        &lt;br /&gt;
        for (int i = 0; i &amp;lt; listOfMan.size(); i++) {&lt;br /&gt;
            final SpacecraftState finalState = propagator.propagate(listOfEvents.get(i).getDate().shiftedBy(dt));&lt;br /&gt;
            KeplerianOrbit kep = new KeplerianOrbit(finalState.getOrbit());&lt;br /&gt;
            printResults(kep, listOfMan, listOfManLabels.get(i), true);&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private static void printResults (final KeplerianOrbit kep, final ArrayList&amp;lt;ImpulseManeuver&amp;gt; listOfMan,&lt;br /&gt;
            final String manLabel, final boolean isUsedDeltaV ) throws PatriusException {&lt;br /&gt;
        &lt;br /&gt;
        String str = &amp;quot;&amp;quot;;&lt;br /&gt;
        if ( !isUsedDeltaV ) {&lt;br /&gt;
            str = &amp;quot;Initial &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(manLabel);&lt;br /&gt;
        System.out.println(&amp;quot;Initial date = &amp;quot;+kep.getDate().toString(TimeScalesFactory.getUTC()));&lt;br /&gt;
        System.out.println(String.format(&amp;quot;%sSemi major axis = %8.3f km&amp;quot;, str, kep.getA()/1000.));&lt;br /&gt;
        System.out.println(String.format(&amp;quot;%seccentricity    =    %8.6f&amp;quot;, str, kep.getE()));&lt;br /&gt;
        System.out.println(String.format(&amp;quot;%sinclination     = %8.3f deg&amp;quot;, str, FastMath.toDegrees(kep.getI())));&lt;br /&gt;
        System.out.println(String.format(&amp;quot;%sAOL             = %8.3f deg&amp;quot;, str, FastMath.toDegrees(kep.getPerigeeArgument()+kep.getTrueAnomaly())));&lt;br /&gt;
        for (int i = 0; i &amp;lt; listOfMan.size(); i++) {&lt;br /&gt;
            if ( isUsedDeltaV ) {&lt;br /&gt;
                System.out.println(&amp;quot;Maneuver #&amp;quot;+i+&amp;quot; = &amp;quot;+listOfMan.get(i).getUsedDV() + &amp;quot; m/s&amp;quot;);&lt;br /&gt;
            } else {&lt;br /&gt;
                System.out.println(&amp;quot;Maneuver #&amp;quot;+i+&amp;quot; = &amp;quot;+listOfMan.get(i).getDeltaVSat() + &amp;quot; m/s&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>