<?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=NumericalPropagationWithContinuousManeuver_4.4</id>
	<title>NumericalPropagationWithContinuousManeuver 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=NumericalPropagationWithContinuousManeuver_4.4"/>
	<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=NumericalPropagationWithContinuousManeuver_4.4&amp;action=history"/>
	<updated>2026-04-06T12:41:28Z</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=NumericalPropagationWithContinuousManeuver_4.4&amp;diff=2518&amp;oldid=prev</id>
		<title>Admin : Page créée avec « &lt;syntaxhighlight lang=&quot;java&quot;&gt; public class NumericalPropagationWithContinuousManeuver {      public static void main(String[] args) throws PatriusException, IOException, U... »</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=NumericalPropagationWithContinuousManeuver_4.4&amp;diff=2518&amp;oldid=prev"/>
		<updated>2019-10-03T13:01:29Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt; public class NumericalPropagationWithContinuousManeuver {      public static void main(String[] args) throws PatriusException, IOException, U... »&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 NumericalPropagationWithContinuousManeuver {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) throws PatriusException, IOException, URISyntaxException {&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 date = 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 exc = 0.01;&lt;br /&gt;
        final double per = sma*(1.-exc);&lt;br /&gt;
        final double apo = sma*(1.+exc);&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 ApsisRadiusParameters par = new ApsisRadiusParameters(per, apo, inc, pa, raan, anm, PositionAngle.MEAN, MU);&lt;br /&gt;
        final Orbit iniOrbit = new ApsisOrbit(par, GCRF, date);&lt;br /&gt;
        &lt;br /&gt;
//SPECIFIC&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;
        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;
//SPECIFIC&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;
//SPECIFIC&lt;br /&gt;
        // Duration of the maneuver to get a 20 m/S boost&lt;br /&gt;
        final double G0 = 9.80665;&lt;br /&gt;
        final double duration = G0*isp*iniMass*(1. - FastMath.exp(-20/(G0*isp)))/thrust;&lt;br /&gt;
        // Start and end thrust events&lt;br /&gt;
        final EventDetector eventStart = new DateDetector(date.shiftedBy(10.));&lt;br /&gt;
        final EventDetector eventEnd = new DateDetector(date.shiftedBy(10.+duration));&lt;br /&gt;
        // Creation of the continuous thrust maneuver&lt;br /&gt;
        final Vector3D direction = new Vector3D(1., 0., 0.);&lt;br /&gt;
        final ContinuousThrustManeuver man = new ContinuousThrustManeuver(eventStart, eventEnd, prop, direction, mm, tank);&lt;br /&gt;
        // Adding a continuous thrust maneuver&lt;br /&gt;
        propagator.addForceModel(man);&lt;br /&gt;
        // Adding additional state (change name add to set for V3.3)&lt;br /&gt;
        propagator.setMassProviderEquation(mm);&lt;br /&gt;
        &lt;br /&gt;
        // Adding an attitude law (or attitude sequence : mandatory)&lt;br /&gt;
        final AttitudeLaw attitudeLaw = new LofOffset(LOFType.TNW, RotationOrder.ZYX, 0., 0., 0.);&lt;br /&gt;
        propagator.setAttitudeProvider(attitudeLaw);&lt;br /&gt;
&lt;br /&gt;
//SPECIFIC&lt;br /&gt;
        &lt;br /&gt;
        // Propagating 100s&lt;br /&gt;
        final double dt = 100.;&lt;br /&gt;
        final AbsoluteDate finalDate = date.shiftedBy(dt);&lt;br /&gt;
        final SpacecraftState finalState = propagator.propagate(finalDate);&lt;br /&gt;
        final Orbit finalOrbit = finalState.getOrbit();&lt;br /&gt;
        &lt;br /&gt;
        // Printing new date and semi major axis&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;Initial semi major axis = &amp;quot;+iniOrbit.getA()/1000.+&amp;quot; km&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;New date = &amp;quot;+finalOrbit.getDate().toString(TUC)+&amp;quot; deg&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Final semi major axis = &amp;quot;+finalOrbit.getA()/1000.+&amp;quot; km&amp;quot;);&lt;br /&gt;
        // Printing mass&lt;br /&gt;
        System.out.println();&lt;br /&gt;
        System.out.println(&amp;quot;Dry Mass = &amp;quot;+finalState.getMass(&amp;quot;MAIN&amp;quot;)+&amp;quot; kg&amp;quot;);&lt;br /&gt;
        System.out.println(&amp;quot;Ergols Mass = &amp;quot;+finalState.getMass(&amp;quot;TANK&amp;quot;)+&amp;quot; kg&amp;quot;);&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>