Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/draft-release-11.3.1' into relea…
Browse files Browse the repository at this point in the history
…se-11.3
  • Loading branch information
maisonobe committed Dec 24, 2022
2 parents 4948fa1 + 82b07fc commit 13e01a9
Show file tree
Hide file tree
Showing 15 changed files with 191 additions and 68 deletions.
2 changes: 1 addition & 1 deletion build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<project name="orekit" default="jar" basedir=".">

<property name="project.version" value="11.3" />
<property name="project.version" value="11.3.1" />
<property name="src.dir" location="src" />
<property name="main.src.dir" value="${src.dir}/main/java" />
<property name="main.resources.dir" value="${src.dir}/main/resources" />
Expand Down
5 changes: 4 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<groupId>org.orekit</groupId>
<artifactId>orekit</artifactId>
<packaging>jar</packaging>
<version>11.3</version>
<version>11.3.1</version>
<name>ORbit Extrapolation KIT</name>
<url>http://www.orekit.org/</url>

Expand Down Expand Up @@ -337,6 +337,9 @@
<contributor>
<name>Sofia Urbina</name>
</contributor>
<contributor>
<name>Jean-Baptiste Valet</name>
</contributor>
<contributor>
<name>M&#233;lina Vanel</name>
</contributor>
Expand Down
18 changes: 18 additions & 0 deletions src/changes/changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,24 @@
<title>Orekit Changes</title>
</properties>
<body>
<release version="11.3.1" date="2022-12-24"
description="Version 11.3.1 is a patch release of Orekit.
It fixes an issue related to the parsing of dates in the Rinex navigation files.
It also fixes discontinuity issues in the Brouwer-Lyddane orbit propagator.
Finally, it includes some improvements in the class documentation">
<action dev="luc" type="fix" issue="1012">
Fixed JavaDoc in IsotropicRadiationClassicalConvention class.
</action>
<action dev="luc" type="fix" issue="1009">
Fixed week number parsing in Rinex Navigation files.
</action>
<action dev="jvalet" type="fix" issue="966">
Fixed discontinuity issues in Brouwer-Lyddane orbit propagator.
</action>
<action dev="vincent" type="update" issue="978">
Improved documentation of StateCovariance class.
</action>
</release>
<release version="11.3" date="2022-10-25"
description="Version 11.3 is a minor release of Orekit.
It includes both new features and bug fixes. New features introduced in 11.3 are:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

/** This class represents the features of a simplified spacecraft.
* <p>This model uses the classical thermo-optical coefficients
* Ca for absorption, Cs for specular reflection and Kd for diffuse
* Ca for absorption, Cs for specular reflection and Cd for diffuse
* reflection. The equation Ca + Cs + Cd = 1 always holds.
* </p>
* <p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,7 @@ public void parseFifthBroadcastOrbit(final String line, final ParseInfo pi) {
pi.galileoNav.setWeek((int) parseDouble(line, 42, 19));
pi.galileoNav.setDate(new GNSSDate(pi.galileoNav.getWeek(),
SEC_TO_MILLI * pi.galileoNav.getTime(),
SatelliteSystem.GALILEO,
SatelliteSystem.GPS, // in Rinex files, week number is aligned to GPS week!
pi.timeScales).getDate());
}

Expand Down Expand Up @@ -998,7 +998,7 @@ public void parseFifthBroadcastOrbit(final String line, final ParseInfo pi) {
pi.qzssNav.setWeek((int) parseDouble(line, 42, 19));
pi.qzssNav.setDate(new GNSSDate(pi.qzssNav.getWeek(),
SEC_TO_MILLI * pi.qzssNav.getTime(),
SatelliteSystem.QZSS,
SatelliteSystem.GPS, // in Rinex files, week number is aligned to GPS week!
pi.timeScales).getDate());
}

Expand Down Expand Up @@ -1112,7 +1112,7 @@ public void parseFifthBroadcastOrbit(final String line, final ParseInfo pi) {
pi.irnssNav.setWeek((int) parseDouble(line, 42, 19));
pi.irnssNav.setDate(new GNSSDate(pi.irnssNav.getWeek(),
SEC_TO_MILLI * pi.irnssNav.getTime(),
SatelliteSystem.IRNSS,
SatelliteSystem.GPS, // in Rinex files, week number is aligned to GPS week!
pi.timeScales).getDate());
}

Expand Down
85 changes: 59 additions & 26 deletions src/main/java/org/orekit/propagation/StateCovariance.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,8 @@
* Flight Dynamics Operations</i> by David A. SVallado.
* <p>
* Finally, covariance orbit type can be changed using the
* {@link #changeCovarianceType(Orbit, OrbitType, PositionAngle) changeCovarianceType(Orbit, OrbitType, PositionAngle)}
* method.
* </p>
* {@link #changeCovarianceType(Orbit, OrbitType, PositionAngle)} method.
*
* @author Bryan Cazabonne
* @author Vincent Cucchietti
* @since 11.3
Expand All @@ -54,7 +53,7 @@ public class StateCovariance implements TimeStamped {
/** State dimension. */
private static final int STATE_DIMENSION = 6;

/** Default position angle for covariance expressed in cartesian elements. */
/** Default position angle for covariance expressed in Cartesian elements. */
private static final PositionAngle DEFAULT_POSITION_ANGLE = PositionAngle.TRUE;

/** Orbital covariance [6x6]. */
Expand Down Expand Up @@ -197,7 +196,13 @@ public LOFType getLOFType() {
* The covariance orbit type <b>cannot</b> be changed if the covariance
* matrix is expressed in a {@link LOFType local orbital frame} or a
* non-pseudo inertial frame.
* </p>
* <p>
* As this type change uses the jacobian matrix of the transformation, it introduces a linear approximation.
* Hence, the current covariance matrix <b>will not exactly match</b> the new linearized case and the
* distribution will not follow a generalized Gaussian distribution anymore.
* <p>
* This is based on equation (1) to (6) from "Vallado, D. A. (2004). Covariance transformations for satellite flight
* dynamics operations."
*
* @param orbit orbit to which the covariance matrix should correspond
* @param outOrbitType target orbit type of the state covariance matrix
Expand Down Expand Up @@ -229,6 +234,12 @@ public StateCovariance changeCovarianceType(final Orbit orbit, final OrbitType o

/**
* Get the covariance in a given local orbital frame.
* <p>
* Changing the covariance frame is a linear process, this method does not introduce approximation unless a change
* in covariance orbit type is required.
* <p>
* This is based on equation (18) to (20) "from Vallado, D. A. (2004). Covariance transformations for satellite
* flight dynamics operations."
*
* @param orbit orbit to which the covariance matrix should correspond
* @param lofOut output local orbital frame
Expand All @@ -253,6 +264,12 @@ public StateCovariance changeCovarianceFrame(final Orbit orbit, final LOFType lo

/**
* Get the covariance in the output frame.
* <p>
* Changing the covariance frame is a linear process, this method does not introduce approximation unless a change
* in covariance orbit type is required.
* <p>
* This is based on equation (18) to (20) "from Vallado, D. A. (2004). Covariance transformations for satellite
* flight dynamics operations."
*
* @param orbit orbit to which the covariance matrix should correspond
* @param frameOut output frame
Expand All @@ -278,8 +295,8 @@ public StateCovariance changeCovarianceFrame(final Orbit orbit, final Frame fram
/**
* Get a time-shifted covariance matrix.
* <p>
* The shifting model is a Keplerian one. In other words, the state transition matrix is computed supposing
* Keplerian motion.
* The shifting model is a linearized, Keplerian one. In other words, it is based on a state transition matrix that
* is computed assuming Keplerian motion.
* <p>
* Shifting is <em>not</em> intended as a replacement for proper covariance propagation, but should be sufficient
* for small time shifts or coarse accuracy.
Expand Down Expand Up @@ -347,6 +364,13 @@ public StateCovariance shiftedBy(final Orbit orbit, final double dt) {

/**
* Create a covariance matrix in another orbit type.
* <p>
* As this type change uses the jacobian matrix of the transformation, it introduces a linear approximation.
* Hence, the input covariance matrix <b>will not exactly match</b> the new linearized case and the
* distribution will not follow a generalized Gaussian distribution anymore.
* <p>
* This is based on equation (1) to (6) from "Vallado, D. A. (2004). Covariance transformations for satellite flight
* dynamics operations."
*
* @param orbit orbit to which the covariance matrix should correspond
* @param date covariance epoch
Expand Down Expand Up @@ -396,15 +420,17 @@ private static StateCovariance changeTypeAndCreate(final Orbit orbit, final Abso
* Create a covariance matrix from a {@link LOFType local orbital frame} to another
* {@link LOFType local orbital frame}.
* <p>
* The transformation is based on Equation (20) of "Covariance Transformations for Satellite Flight Dynamics
* Changing the covariance frame is a linear process, this method does not introduce approximation.
* <p>
* The transformation is based on Equation (18) to (20) of "Covariance Transformations for Satellite Flight Dynamics
* Operations" by David A. Vallado.
*
* @param orbit orbit to which the covariance matrix should correspond
* @param date covariance epoch
* @param lofIn the local orbital frame in which the input covariance matrix is expressed
* @param lofOut the target local orbital frame
* @param inputCartesianCov input covariance {@code CARTESIAN})
* @return the covariance matrix expressed in the target commonly used local orbital frame in cartesian elements
* @return the covariance matrix expressed in the target commonly used local orbital frame in Cartesian elements
*/
private static StateCovariance changeFrameAndCreate(final Orbit orbit, final AbsoluteDate date,
final LOFType lofIn, final LOFType lofOut,
Expand All @@ -426,28 +452,30 @@ private static StateCovariance changeFrameAndCreate(final Orbit orbit, final Abs
/**
* Convert the covariance matrix from a {@link Frame frame} to a {@link LOFType local orbital frame}.
* <p>
* The transformation is based on Equation (20) of "Covariance Transformations for Satellite Flight Dynamics
* Changing the covariance frame is a linear process, this method does not introduce approximation unless a change
* in covariance orbit type is required.
* <p>
* The transformation is based on Equation (18) to (20) of "Covariance Transformations for Satellite Flight Dynamics
* Operations" by David A. Vallado.
* <p>
* As the frame transformation must be performed with the covariance expressed in Cartesian elements, both the orbit
* and position angle types of the input covariance must be provided.
* <p>
* <b>The output covariance matrix will provided in cartesian orbit type and not converted back to
* its original expression (if input different from cartesian elements).</b>
* <p>
* <b>The output covariance matrix will provided in Cartesian orbit type and not converted back to
* its original expression (if input different from Cartesian elements).</b>
*
* @param orbit orbit to which the covariance matrix should correspond
* @param date covariance epoch
* @param frameIn the frame in which the input covariance matrix is expressed. In case the frame is <b>not</b>
* pseudo-inertial, the input covariance matrix is expected to be expressed in <b>cartesian elements</b>.
* pseudo-inertial, the input covariance matrix is expected to be expressed in <b>Cartesian elements</b>.
* @param lofOut the target local orbital frame
* @param inputCov input covariance
* @param covOrbitType orbit type of the covariance matrix (used if frameIn is pseudo-inertial)
* @param covAngleType position angle type of the covariance matrix (used if frameIn is pseudo-inertial) (not used
* if covOrbitType equals {@code CARTESIAN})
* @return the covariance matrix expressed in the target local orbital frame in cartesian elements
* @return the covariance matrix expressed in the target local orbital frame in Cartesian elements
* @throws OrekitException if input frame is <b>not</b> pseudo-inertial <b>and</b> the input covariance is
* <b>not</b> expressed in cartesian elements.
* <b>not</b> expressed in Cartesian elements.
*/
private static StateCovariance changeFrameAndCreate(final Orbit orbit, final AbsoluteDate date,
final Frame frameIn, final LOFType lofOut,
Expand All @@ -472,12 +500,12 @@ private static StateCovariance changeFrameAndCreate(final Orbit orbit, final Abs
final RealMatrix cartesianCovarianceOut =
jacobianFromFrameInToLofOut.multiply(cartesianCovarianceIn.multiplyTransposed(jacobianFromFrameInToLofOut));

// Return converted covariance matrix expressed in cartesian elements
// Return converted covariance matrix expressed in Cartesian elements
return new StateCovariance(cartesianCovarianceOut, date, lofOut);

}

// Input frame is not inertial so the covariance matrix is expected to be in cartesian elements
// Input frame is not inertial so the covariance matrix is expected to be in Cartesian elements
else {

// Method checkInputConsistency already verify that input covariance is defined in CARTESIAN type
Expand All @@ -499,19 +527,21 @@ private static StateCovariance changeFrameAndCreate(final Orbit orbit, final Abs
/**
* Convert the covariance matrix from a {@link LOFType local orbital frame} to a {@link Frame frame}.
* <p>
* The transformation is based on Equation (20) of "Covariance Transformations for Satellite Flight Dynamics
* Changing the covariance frame is a linear process, this method does not introduce approximation.
* <p>
* The transformation is based on Equation (18) to (20) of "Covariance Transformations for Satellite Flight Dynamics
* Operations" by David A. Vallado.
* <p>
* The <u>input</u> covariance matrix is necessarily provided in <b>cartesian orbit type</b>.
* The <u>input</u> covariance matrix is necessarily provided in <b>Cartesian orbit type</b>.
* <p>
* The <u>output</u> covariance matrix will be expressed in <b>cartesian elements</b>.
* The <u>output</u> covariance matrix will be expressed in <b>Cartesian elements</b>.
*
* @param orbit orbit to which the covariance matrix should correspond
* @param date covariance epoch
* @param lofIn the local orbital frame in which the input covariance matrix is expressed
* @param frameOut the target frame
* @param inputCartesianCov input covariance ({@code CARTESIAN})
* @return the covariance matrix expressed in the target frame in cartesian elements
* @return the covariance matrix expressed in the target frame in Cartesian elements
*/
private static StateCovariance changeFrameAndCreate(final Orbit orbit, final AbsoluteDate date,
final LOFType lofIn, final Frame frameOut,
Expand Down Expand Up @@ -558,14 +588,17 @@ private static StateCovariance changeFrameAndCreate(final Orbit orbit, final Abs
* The transformation is based on Equation (18) of "Covariance Transformations for Satellite Flight Dynamics
* Operations" by David A. Vallado.
* <p>
* Changing the covariance frame is a linear process, this method does not introduce approximation unless a change
* in covariance orbit type is required.
* <p>
* As the frame transformation must be performed with the covariance expressed in Cartesian elements, both the orbit
* and position angle types of the input covariance must be provided.
* <p>
* In case the <u>input</u> frame is <b>not</b> pseudo-inertial, the <u>input</u> covariance matrix is necessarily
* expressed in <b>cartesian elements</b>.
* expressed in <b>Cartesian elements</b>.
* <p>
* In case the <u>output</u> frame is <b>not</b> pseudo-inertial, the <u>output</u> covariance matrix will be
* expressed in <b>cartesian elements</b>.
* expressed in <b>Cartesian elements</b>.
*
* @param orbit orbit to which the covariance matrix should correspond
* @param date covariance epoch
Expand All @@ -577,7 +610,7 @@ private static StateCovariance changeFrameAndCreate(final Orbit orbit, final Abs
* used if covOrbitType equals {@code CARTESIAN})
* @return the covariance matrix expressed in the target frame
* @throws OrekitException if input frame is <b>not</b> pseudo-inertial <b>and</b> the input covariance is
* <b>not</b> expressed in cartesian elements.
* <b>not</b> expressed in Cartesian elements.
*/
private static StateCovariance changeFrameAndCreate(final Orbit orbit, final AbsoluteDate date,
final Frame frameIn, final Frame frameOut,
Expand Down Expand Up @@ -615,7 +648,7 @@ private static StateCovariance changeFrameAndCreate(final Orbit orbit, final Abs
// Output frame is not pseudo-inertial
else {

// Output cartesian matrix
// Output Cartesian matrix
return new StateCovariance(cartesianCovarianceOut, date, frameOut, OrbitType.CARTESIAN,
DEFAULT_POSITION_ANGLE);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1282,18 +1282,15 @@ public KeplerianOrbit propagateParameters(final AbsoluteDate date) {
// mean mean anomaly (with drag Eq. 2.38 of Phipps' 1992 thesis)
final UnivariateDerivative2 dtM2 = dt.multiply(m2);
final UnivariateDerivative2 dt2M2 = dt.multiply(dtM2);
final UnivariateDerivative2 lpp = new UnivariateDerivative2(MathUtils.normalizeAngle(mean.getMeanAnomaly() + lt * xnot.getValue() + dt2M2.getValue(),
FastMath.PI),
final UnivariateDerivative2 lpp = new UnivariateDerivative2(MathUtils.normalizeAngle(mean.getMeanAnomaly() + lt * xnot.getValue() + dt2M2.getValue(), 0),
lt * xnotDot + 2.0 * dtM2.getValue(),
2.0 * m2);
// mean argument of perigee
final UnivariateDerivative2 gpp = new UnivariateDerivative2(MathUtils.normalizeAngle(mean.getPerigeeArgument() + gt * xnot.getValue(),
FastMath.PI),
final UnivariateDerivative2 gpp = new UnivariateDerivative2(MathUtils.normalizeAngle(mean.getPerigeeArgument() + gt * xnot.getValue(), 0),
gt * xnotDot,
0.0);
// mean longitude of ascending node
final UnivariateDerivative2 hpp = new UnivariateDerivative2(MathUtils.normalizeAngle(mean.getRightAscensionOfAscendingNode() + ht * xnot.getValue(),
FastMath.PI),
final UnivariateDerivative2 hpp = new UnivariateDerivative2(MathUtils.normalizeAngle(mean.getRightAscensionOfAscendingNode() + ht * xnot.getValue(), 0),
ht * xnotDot,
0.0);

Expand Down
Loading

0 comments on commit 13e01a9

Please sign in to comment.