<?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=User_Manual_3.4.1_Multi_Propagation</id>
	<title>User Manual 3.4.1 Multi Propagation - 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=User_Manual_3.4.1_Multi_Propagation"/>
	<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_3.4.1_Multi_Propagation&amp;action=history"/>
	<updated>2026-04-05T21:26:22Z</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=User_Manual_3.4.1_Multi_Propagation&amp;diff=1440&amp;oldid=prev</id>
		<title>Admin le 6 mars 2018 à 08:57</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_3.4.1_Multi_Propagation&amp;diff=1440&amp;oldid=prev"/>
		<updated>2018-03-06T08:57:00Z</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 6 mars 2018 à 08:57&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-l208&quot;&gt;Ligne 208 :&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ligne 208 :&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;br&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;br&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;As for the [{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/NumericalPropagator.html NumericalPropagator], to propagate the [{{JavaDoc3.4.1}}/org/orekit/attitudes/Attitude.html Attitude] of a specific state, two treatments could be applied :  &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;As for the [{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/NumericalPropagator.html NumericalPropagator], to propagate the [{{JavaDoc3.4.1}}/org/orekit/attitudes/Attitude.html Attitude] of a specific state, two treatments could be applied :  &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;* compute the attitude with an [{{JavaDoc3.4.1}}/org/orekit/attitudes/AttitudeProvider.html AttitudeProvider] :&#039;&#039;&#039;&#039;&#039;setAttitudeProvider(AttitudeProvider, String)&#039;&#039;&#039;&#039;&#039;.&lt;/div&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* compute the attitude with an [{{JavaDoc3.4.1}}/org/orekit/attitudes/AttitudeProvider.html AttitudeProvider] :&#039;&#039;&#039;&#039;&#039;setAttitudeProvider(AttitudeProvider, String)&#039;&#039;&#039;&#039;&#039;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;It is possible to deals with :  &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;It is possible to deals with :  &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;** a single attitude by calling &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&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;** a single attitude by calling &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&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;** two attitudes by calling &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderForces(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderEvents(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. It is not possible to call &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderForces(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; (or &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderEvents(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;)&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;** two attitudes by calling &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderForces(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderEvents(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. It is not possible to call &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderForces(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; (or &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderEvents(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;)&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=User_Manual_3.4.1_Multi_Propagation&amp;diff=1439&amp;oldid=prev</id>
		<title>Admin : Page créée avec «   == Introduction == === Scope === This section describes the multi propagator provided by the Patrius library. At this time, only numerical propagator is available for mu... »</title>
		<link rel="alternate" type="text/html" href="https://patrius.cnes.fr/index.php?title=User_Manual_3.4.1_Multi_Propagation&amp;diff=1439&amp;oldid=prev"/>
		<updated>2018-03-06T08:56:03Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec «   == Introduction == === Scope === This section describes the multi propagator provided by the Patrius library. At this time, only numerical propagator is available for mu... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Scope ===&lt;br /&gt;
This section describes the multi propagator provided by the Patrius library. At this time, only numerical propagator is available for multi spacecraft propagation.&amp;lt;br&amp;gt;&lt;br /&gt;
Generic features about propagators as well as other type of propagators are detailed [ORB_PGEN_Home here].&lt;br /&gt;
&lt;br /&gt;
=== Javadoc ===&lt;br /&gt;
All the classes related to numerical propagation are in the &amp;lt;code&amp;gt;fr.cnes.sirius.patrius.propagation.numerical.multi&amp;lt;/code&amp;gt; package of the Patrius library. The classes related to events detection are in the package &amp;lt;code&amp;gt;fr.cnes.sirius.patrius.propagation.events.multi&amp;lt;/code&amp;gt; of the Patrius library.  But the interface for multi event detectors is in &amp;lt;code&amp;gt;org.orekit.propagation.events.multi&amp;lt;/code&amp;gt; package of the Orekit-addons library.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Library&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|Orekit addons&lt;br /&gt;
|[{{JavaDoc3.4.1}}/org/orekit/propagation/events/multi/package-summary.html Package org.orekit.propagation.events.multi]&lt;br /&gt;
|-&lt;br /&gt;
|Patrius&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/events/multi/package-summary.html Package fr.cnes.sirius.patrius.events.multi]&lt;br /&gt;
|-&lt;br /&gt;
|Patrius&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/events/multi/package-summary.html Package fr.cnes.sirius.patrius.propagation.events.multi]&lt;br /&gt;
|-&lt;br /&gt;
|Patrius&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/numerical/multi/package-summary.html Package fr.cnes.sirius.patrius.propagation.numerical.multi]&lt;br /&gt;
|-&lt;br /&gt;
|Patrius&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/precomputed/multi/package-summary.html Package fr.cnes.sirius.patrius.propagation.precomputed.multi]&lt;br /&gt;
|-&lt;br /&gt;
|Patrius&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/sampling/multi/package-summary.html Package fr.cnes.sirius.patrius.propagation.sampling.multi]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
Other useful links can be found here :&lt;br /&gt;
* [[User Manual 3.4.1 Numerical propagation|Classical propagation chapter]]&lt;br /&gt;
* [[User Manual 3.4.1 SpacecraftState|SpacecraftState chapter]]&lt;br /&gt;
&lt;br /&gt;
=== Useful Documents ===&lt;br /&gt;
None as of now.&lt;br /&gt;
&lt;br /&gt;
=== Package Overview ===&lt;br /&gt;
==== Multi Numerical Propagator ====&lt;br /&gt;
&lt;br /&gt;
The multi propagator architecture is copied from [{{JavaDoc3.4.1}}/org/orekit/propagation/Propagator.html Propagator] interface and [{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/NumericalPropagator.html NumericalPropagator] class, and added to PATRIUS library.&lt;br /&gt;
&lt;br /&gt;
[[File:MultiNumericalPropagator.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
==== Three propagation modes ====&lt;br /&gt;
Like single spacecraft propagation, the multi spacecraft propagation can be performed in different propagation modes : slave, master and ephemeris generation. The architecture of the classes responsible for theses propagation modes are presented below :&lt;br /&gt;
[[File:MultiPropagationModes.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
== Features Description ==&lt;br /&gt;
=== Multi numerical propagator ===&lt;br /&gt;
The PATRIUS library offers a [{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/numerical/multi/MultiNumericalPropagator.html multi numerical propagator]. It aims at propagating several [{{JavaDoc3.4.1}}/org/orekit/propagation/SpacecraftState.html SpacecraftState] at the same time using numerical propagation. The N [{{JavaDoc3.4.1}}/org/orekit/propagation/SpacecraftState.html SpacecraftState] are propagated during the same time interval using the same [{{JavaDoc3.4.1}}/org/apache/commons/math3/ode/FirstOrderIntegrator.html FirstOrderIntegrator].&lt;br /&gt;
&lt;br /&gt;
Each state is identified with an ID of type String. All states can be completely different but they should have the same internal date.&lt;br /&gt;
&lt;br /&gt;
As for the mono-satellite numerical propagation, it is possible to define the following global propagation parameters: &lt;br /&gt;
* The type of orbital parameters and position angle&lt;br /&gt;
* The propagation mode&lt;br /&gt;
&lt;br /&gt;
For each state, it is possible to configure the following elements: &lt;br /&gt;
* The central attraction coefficient&lt;br /&gt;
* The force models&lt;br /&gt;
* The tolerances used for orbital parameters and the tolerances applied on additional states.&lt;br /&gt;
* The additional states equations associated with the additional states&lt;br /&gt;
* The attitude providers&lt;br /&gt;
&lt;br /&gt;
It is possible to define event detectors applied on a specific state or global event detectors applied on several states.&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
=== Interfaces ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Interface&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Summary&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;MultiPropagator&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This interface provides a way to propagate several states at any time.&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/MultiPropagator.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;MultiModeHandler&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Common interface for all multi propagator mode handlers initialization.&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/numerical/multi/MultiModeHandler.html ...]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Classes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Class&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Summary&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Javadoc&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;SpacecraftState&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class is the representation of a complete state holding orbit, attitude for forces and for events computation and additional states at a given date.&lt;br /&gt;
|[{{JavaDoc3.4.1}}/org/orekit/propagation/SpacecraftState.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;MultiNumericalPropagator&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class propagates several SpacecraftState using numerical integration.&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/numerical/multi/MultiNumericalPropagator.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;AttitudeEquation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class represents attitude differential equations.&lt;br /&gt;
|[{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/AttitudeEquation.html ...]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;MultiIntegratedEphemeris&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|This class stores sequentially generated orbital parameters for later retrieval.&lt;br /&gt;
|[{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/precomputed/multi/MultiIntegratedEphemeris.html ...]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Using the multi numerical propagator===&lt;br /&gt;
Here is presented a basic instanciation of the multi numerical propagator.&lt;br /&gt;
&lt;br /&gt;
=== Create propagator from FirstOrderIntegrator ===&lt;br /&gt;
&lt;br /&gt;
The [{{JavaDoc3.4.1}}/fr/cnes/sirius/patrius/propagation/numerical/multi/MultiNumericalPropagator.html MultiNumericalPropagator] should be created by giving a [{{JavaDoc3.4.1}}/org/apache/commons/math3/ode/FirstOrderIntegrator.html FirstOrderIntegrator].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;final MultiNumericalPropagator propagator = new MultiNumericalPropagator(integrator);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The integrator could be declared using absolute and relative tolerances represented by  : &lt;br /&gt;
* a scalar value&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final double abstolScal = 1.0e-10;&lt;br /&gt;
final double reltolScal = 1.0e-10;&lt;br /&gt;
final FirstOrderIntegrator integratorScal = new DormandPrince853Integrator(0.001, 200, abstolScal, reltolScal);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* a vector&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
final double[] abstolVec = { 1e-5, 1e-5, 1e-5, 1e-8, 1e-8, 1e-8};&lt;br /&gt;
final double[] reltolVec = { 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10};&lt;br /&gt;
final FirstOrderIntegrator integratorVec = new DormandPrince853Integrator(0.1, 60., abstolVec, reltolVec);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The orbit tolerances (vector or scalar tolerances) given to the integrator are used as default tolerances. The orbit tolerances could be defined in vector type using the method &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setOrbitTolerance&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The integrator could be changed by using the method &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setIntegrator(final FirstOrderIntegrator integrator)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Add initial states ===&lt;br /&gt;
Initial states could be added to the propagator using the method &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addInitialState(SpacecraftState, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. Each added state is defined by a unique ID. An error is raised if : &lt;br /&gt;
* the input spacecraft ID is empty or null.&lt;br /&gt;
* a state with the same ID was already added to the propagator.&lt;br /&gt;
* the date associated with the added state is different from the date associated with the states previously added. (All states are propagated from the same date).&lt;br /&gt;
&lt;br /&gt;
Note that, the initial state should be added before adding an additional equation, an attitude provider, a force model, an event ... etc ... associated with this state. Otherwise, the input spacecraft Id will not be recognized.&lt;br /&gt;
&lt;br /&gt;
The map of the added states could be retrieved with &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;getInitialStates()&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Add additional equations ===&lt;br /&gt;
As for the [{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/NumericalPropagator.html NumericalPropagator], additional equations corresponding to the additional states of each states should be added to the propagator.&lt;br /&gt;
&lt;br /&gt;
These additional equations are given to the multi numerical propagator for a specific state thanks to the following methods :&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addAdditionalEquation(AdditionalEquation, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addAttitudeEquation(AttitudeEquation, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setMassProviderEquation(MassProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; (This method should be called only once, mass provider must be mass provider used in force models)&lt;br /&gt;
&lt;br /&gt;
The method &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAdditionalStateTolerance(String, double[], double[])&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; may be used to add variation tolerance values (absolute and relative) to a specific additional state.&lt;br /&gt;
&lt;br /&gt;
For each state, the additional states should correspond with the added additional equations (same name, same size).&lt;br /&gt;
&lt;br /&gt;
See [ORB_PRO_UseP mono numerical propagation] chapter for more details.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to propagate two basic SpacecraftState :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Initial date&lt;br /&gt;
final AbsoluteDate date = AbsoluteDate.J2000_EPOCH;&lt;br /&gt;
&lt;br /&gt;
// Constants&lt;br /&gt;
final double mu = Constants.EGM96_EARTH_MU;&lt;br /&gt;
final Frame gcrf = FramesFactory.getGCRF();&lt;br /&gt;
final String STATE1 = &amp;quot;STATE1&amp;quot;;&lt;br /&gt;
final String STATE2 = &amp;quot;STATE2&amp;quot;;&lt;br /&gt;
final String BODY = &amp;quot;body&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// First initial state&lt;br /&gt;
final Orbit orbit1 = new KeplerianOrbit(7500000, 0.001, 0.40, 0, 0, 0,PositionAngle.MEAN, gcrf, date, mu);&lt;br /&gt;
final MassProvider massModel = new SimpleMassModel(1000., BODY);&lt;br /&gt;
final SpacecraftState state1 = new SpacecraftState(orbit1, massModel);&lt;br /&gt;
&lt;br /&gt;
// Second initial state&lt;br /&gt;
final Vector3D position = new Vector3D(7.0e6, 1.0e6, 4.0e6);&lt;br /&gt;
final Vector3D velocity = new Vector3D(-500.0, 8000.0, 1000.0);&lt;br /&gt;
final Orbit orbit2 = new EquinoctialOrbit(new PVCoordinates(position, velocity), gcrf, date, mu);&lt;br /&gt;
final AttitudeProvider law = new ConstantAttitudeLaw(FramesFactory.getEME2000(), Rotation.IDENTITY);&lt;br /&gt;
final Attitude attitude = law.getAttitude(orbit2, date, gcrf);&lt;br /&gt;
final SpacecraftState state2 = new SpacecraftState(orbit2, attitude);&lt;br /&gt;
&lt;br /&gt;
// Add initial states to the propagator&lt;br /&gt;
propagator.addInitialState(state1, STATE1);&lt;br /&gt;
propagator.addInitialState(state2, STATE2);&lt;br /&gt;
&lt;br /&gt;
// Add additional equation associated with the mass model of the first state&lt;br /&gt;
// Mass provider must be mass provider used in force models.&lt;br /&gt;
propagator.setMassProviderEquation(massModel, STATE1);&lt;br /&gt;
propagator.setAdditionalStateTolerance(&amp;quot;MASS_&amp;quot; + BODY, new double[]{1e-7}, new double[]{1e-7}, STATE1);&lt;br /&gt;
&lt;br /&gt;
// Set attitude provider associated with the second state&lt;br /&gt;
propagator.setAttitudeProvider(law, STATE2);&lt;br /&gt;
&lt;br /&gt;
// propagation&lt;br /&gt;
final Map&amp;lt;String, SpacecraftState&amp;gt; finalStates = propagator.propagate(date.shiftedBy(propagationDuration));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Propagate the attitude ===&lt;br /&gt;
&lt;br /&gt;
As for the [{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/NumericalPropagator.html NumericalPropagator], to propagate the [{{JavaDoc3.4.1}}/org/orekit/attitudes/Attitude.html Attitude] of a specific state, two treatments could be applied : &lt;br /&gt;
* compute the attitude with an [{{JavaDoc3.4.1}}/org/orekit/attitudes/AttitudeProvider.html AttitudeProvider] :&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
It is possible to deals with : &lt;br /&gt;
** a single attitude by calling &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** two attitudes by calling &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderForces(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderEvents(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. It is not possible to call &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProvider(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderForces(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; (or &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setAttitudeProviderEvents(AttitudeProvider, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
* propagate the attitude as a 7-dimension additional state : &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addAttitudeEquation(AttitudeEquation, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
In practical terms, the user has to build the additional equation by extending the abstract class [{{JavaDoc3.4.1}}/org/orekit/propagation/numerical/AttitudeEquation.html AttitudeEquation], call &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addAttitudeEquation(AttitudeEquation, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
See [ORB_PRO_UseP mono numerical propagation] chapter for more details.&lt;br /&gt;
&lt;br /&gt;
=== Set the central attraction coefficient ===&lt;br /&gt;
For each state, the central attraction coefficient used in the integration process could be defined with the method &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;setMu(double, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
If for a specific state, this method was not called, the central attraction coefficient of the orbit is used in the integration process.&lt;br /&gt;
The central attraction coefficient and the frame used in the integration process could be retrieved for a specific state using &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;getMu(String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;getFrame(String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
propagator.setMu(mu, STATE1);&lt;br /&gt;
final double muState1 = propagator.getMu(STATE1);&lt;br /&gt;
final Frame frameState1 = propagator.getFrame(STATE1);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add force model ===&lt;br /&gt;
For each state, a force model could be added to the list of forces used at each step by the propagator.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
propagator.addForceModel(model, STATE1);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[User Manual 3.4.1 Environment Models|force model]] chapter for more details.&lt;br /&gt;
&lt;br /&gt;
=== Add event detector ===&lt;br /&gt;
The user could add : &lt;br /&gt;
* an [{{JavaDoc3.4.1}}/org/orekit/propagation/events/EventDetector.html EventDetector] associated with a specific state using &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addEventDetector(EventDetector, String)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* a [{{JavaDoc3.4.1}}/org/orekit/propagation/events/multi/MultiEventDetector.html MultiEventDetector] associated with several states added to the propagator using &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;addEventDetector(MultiEventDetector)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
See  [[User Manual 3.4.1 Events detection: Presentation|events presentation]] and [[User Manual 3.4.1 Multi events detection|multi events presentation]] chapters for more details.&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Manual_3.4.1_Orbit_Propagation]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>