From edd4812e9f560722de8cb332722d41beaad8f37f Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Wed, 22 May 2019 14:49:44 +0200
Subject: [PATCH 001/202] Added first classes for CR3BP.
---
.../java/org/orekit/bodies/CR3BPFactory.java | 64 ++++
.../java/org/orekit/bodies/CR3BPSystem.java | 314 ++++++++++++++++++
.../org/orekit/bodies/CR3BPFactoryTest.java | 33 ++
.../org/orekit/bodies/CR3BPSystemTest.java | 108 ++++++
4 files changed, 519 insertions(+)
create mode 100644 src/main/java/org/orekit/bodies/CR3BPFactory.java
create mode 100644 src/main/java/org/orekit/bodies/CR3BPSystem.java
create mode 100644 src/test/java/org/orekit/bodies/CR3BPFactoryTest.java
create mode 100644 src/test/java/org/orekit/bodies/CR3BPSystemTest.java
diff --git a/src/main/java/org/orekit/bodies/CR3BPFactory.java b/src/main/java/org/orekit/bodies/CR3BPFactory.java
new file mode 100644
index 000000000..c94f74b4c
--- /dev/null
+++ b/src/main/java/org/orekit/bodies/CR3BPFactory.java
@@ -0,0 +1,64 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.bodies;
+
+/**
+ * Factory class creating predefined CR3BP system using CR3BPSystem class. For example, Earth-Moon CR3BP
+ * System.
+ * @author Vincent Mouraux
+ * @see CR3BPSystem
+ */
+public class CR3BPFactory {
+
+ /** Private constructor.
+ *
This class is a utility class, it should neither have a public
+ * nor a default constructor. This private constructor prevents
+ * the compiler from generating one automatically.
+ */
+ private CR3BPFactory() {
+ }
+
+ /** Get the Sun-Jupiter CR3BP singleton bodies pair.
+ * @return Sun-Jupiter CR3BP system
+ */
+ public static CR3BPSystem getSunJupiterCR3BP() {
+ return getSystem(CelestialBodyFactory.getSun(), CelestialBodyFactory.getJupiter());
+ }
+
+ /** Get the Sun-Earth CR3BP singleton bodies pair.
+ * @return Sun-Earth CR3BP system
+ */
+ public static CR3BPSystem getSunEarthCR3BP() {
+ return getSystem(CelestialBodyFactory.getSun(), CelestialBodyFactory.getEarth());
+ }
+
+ /** Get the Earth-Moon CR3BP singleton bodies pair.
+ * @return Earth-Moon CR3BP system
+ */
+ public static CR3BPSystem getEarthMoonCR3BP() {
+ return getSystem(CelestialBodyFactory.getEarth(), CelestialBodyFactory.getMoon());
+ }
+
+ /** Get the corresponding CR3BP System.
+ * @param primaryBody Primary Body in the CR3BP System
+ * @param secondaryBody Secondary Body in the CR3BP System
+ * @return corresponding CR3BP System
+ */
+ public static CR3BPSystem getSystem(final CelestialBody primaryBody, final CelestialBody secondaryBody) {
+ return new CR3BPSystem(primaryBody, secondaryBody);
+ }
+}
diff --git a/src/main/java/org/orekit/bodies/CR3BPSystem.java b/src/main/java/org/orekit/bodies/CR3BPSystem.java
new file mode 100644
index 000000000..d215a3a9f
--- /dev/null
+++ b/src/main/java/org/orekit/bodies/CR3BPSystem.java
@@ -0,0 +1,314 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.bodies;
+
+import org.hipparchus.analysis.UnivariateFunction;
+import org.hipparchus.analysis.solvers.AllowedSolution;
+import org.hipparchus.analysis.solvers.BracketingNthOrderBrentSolver;
+import org.hipparchus.analysis.solvers.UnivariateSolverUtils;
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.util.FastMath;
+import org.orekit.frames.CR3BPLFrame;
+import org.orekit.frames.CR3BPRotatingFrame;
+import org.orekit.frames.Frame;
+
+/**
+ * Class creating, from two different celestial bodies, the corresponding system
+ * with respect to the Circular Restricted Three Body problem hypotheses.
+ * @author Vincent Mouraux
+ */
+public class CR3BPSystem {
+
+ /** Relative accuracy on position for solver. */
+ private static final double RELATIVE_ACCURACY = 1e-14;
+
+ /** Absolute accuracy on position for solver (1mm). */
+ private static final double ABSOLUTE_ACCURACY = 1e-3;
+
+ /** Function value accuracy for solver (set to 0 so we rely only on position for convergence). */
+ private static final double FUNCTION_ACCURACY = 0;
+
+ /** Maximal order for solver. */
+ private static final int MAX_ORDER = 5;
+
+ /** Maximal number of evaluations for solver. */
+ private static final int MAX_EVALUATIONS = 10000;
+
+ /** Mass ratio. */
+ private final double mu;
+
+ /** Distance between the two primaries, meters. */
+ private double lDim;
+
+ /** Orbital Velocity of m1, m/s. */
+ private double vDim;
+
+ /** Orbital Period of m1 and m2, seconds. */
+ private double tDim;
+
+ /** CR3BP System name. */
+ private String name;
+
+ /** Primary body. */
+ private CelestialBody primaryBody;
+
+ /** Secondary body. */
+ private CelestialBody secondaryBody;
+
+ /** Primary body GM. (m³/s²) */
+ private double mu1;
+
+ /** Secondary body GM. (m³/s²) */
+ private double mu2;
+
+ /** Distance between the primary and the CR3BP System barycenter, meters. */
+ private double barycenter;
+
+ /** Simple constructor.
+ * @param primaryBody Primary Body in the CR3BP System
+ * @param secondaryBody Secondary Body in the CR3BP System
+ */
+ public CR3BPSystem(final CelestialBody primaryBody, final CelestialBody secondaryBody) {
+
+ this.primaryBody = primaryBody;
+ this.secondaryBody = secondaryBody;
+
+ this.name = primaryBody.getName() + "_" + secondaryBody.getName();
+
+ this.mu1 = primaryBody.getGM();
+ this.mu2 = secondaryBody.getGM();
+
+ switch (name) {
+ case "Sun_Jupiter":
+ lDim = 7.78340821E11;
+ vDim = 13064.059343815603;
+ tDim = 3.7434456486914164E8;
+ break;
+ case "Sun_Earth":
+ lDim = 1.4959262E11;
+ vDim = 29785.259280799997;
+ tDim = 3.1556487159820825E7;
+ break;
+ case "Earth_Moon":
+ lDim = 384399000.0;
+ vDim = 1024.5481799056872;
+ tDim = 2357380.742325712;
+ break;
+ default:
+ break;
+ }
+
+ this.mu = mu2 / (mu1 + mu2);
+ this.barycenter = lDim * mu;
+ }
+
+ /** Get the CR3BP mass ratio of the system mu2/(mu1+mu2).
+ * @return CR3BP mass ratio of the system mu2/(mu1+mu2)
+ */
+ public double getMu() {
+ return mu;
+ }
+
+ /** Get the CR3BP distance between the two bodies.
+ * @return CR3BP distance between the two bodies(m)
+ */
+ public double getLdim() {
+ return lDim;
+ }
+
+ /** Get the CR3BP orbital velocity of m2.
+ * @return CR3BP orbital velocity of m2(m/s)
+ */
+ public double getVdim() {
+ return vDim;
+ }
+
+ /** Get the CR3BP orbital period of m2 around m1.
+ * @return CR3BP orbital period of m2 around m1(s)
+ */
+ public double getTdim() {
+ return tDim;
+ }
+
+ /** Get the name of the CR3BP system.
+ * @return name of the CR3BP system
+ */
+ public String getName() {
+ return name;
+ }
+
+ /** Get the primary CelestialBody.
+ * @return primary CelestialBody
+ */
+ public CelestialBody getPrimary() {
+ return primaryBody;
+ }
+
+ /** Get the secondary CelestialBody.
+ * @return secondary CelestialBody
+ */
+ public CelestialBody getSecondary() {
+ return secondaryBody;
+ }
+
+ /** Get the CR3BP Rotating Frame.
+ * @return CR3BP Rotating Frame
+ */
+ public Frame getRotatingFrame() {
+ final Frame baryFrame = new CR3BPRotatingFrame(lDim, barycenter, primaryBody, secondaryBody);
+ return baryFrame;
+ }
+
+ /** Get the CR3BP L1 centered Frame.
+ * @return CR3BP L1 centered Frame
+ */
+ public Frame getL1Frame() {
+ final Frame l1Frame =
+ new CR3BPLFrame(getRotatingFrame(), getL1Position());
+ return l1Frame;
+ }
+
+ /** Get the CR3BP L2 centered Frame.
+ * @return CR3BP L2 centered Frame
+ */
+ public Frame getL2Frame() {
+ final Frame l2Frame =
+ new CR3BPLFrame(getRotatingFrame(), getL2Position());
+ return l2Frame;
+ }
+
+ /** Get the CR3BP L3 centered Frame.
+ * @return CR3BP L3 centered Frame
+ */
+ public Frame getL3Frame() {
+ final Frame l3Frame =
+ new CR3BPLFrame(getRotatingFrame(), getL3Position());
+ return l3Frame;
+ }
+
+ /** Get the distance of the CR3BP Barycenter from the primary.
+ * @return distance of the CR3BP Barycenter from the primary
+ */
+ public double getBarycenter() {
+ return barycenter;
+ }
+
+ /**
+ * Get the position of the first Lagrangian point in the CR3BP Rotating frame.
+ * @return position of the first Lagrangian point in the CR3BP Rotating frame (m)
+ */
+ public Vector3D getL1Position() {
+
+ final double baseR = 1 - FastMath.cbrt(mu / 3);
+ final UnivariateFunction l1Equation = x -> {
+ final double leq1 =
+ x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq3 = mu * (x + mu) * (x + mu);
+ return leq1 - leq2 + leq3;
+ };
+ final double[] searchInterval =
+ UnivariateSolverUtils.bracket(l1Equation, baseR, -mu, 1 - mu, 1E-6,
+ 1, MAX_EVALUATIONS);
+ final BracketingNthOrderBrentSolver solver =
+ new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
+ ABSOLUTE_ACCURACY,
+ FUNCTION_ACCURACY, MAX_ORDER);
+ final double r =
+ solver.solve(MAX_EVALUATIONS, l1Equation, searchInterval[0],
+ searchInterval[1], AllowedSolution.ANY_SIDE);
+ final Vector3D l1 = new Vector3D(r * lDim, 0.0, 0.0);
+ return l1;
+ }
+
+ /**
+ * Get the position of the second Lagrangian point in the CR3BP Rotating frame.
+ * @return position of the second Lagrangian point in the CR3BP Rotating frame (m)
+ */
+ public Vector3D getL2Position() {
+
+ final double baseR = 1 + FastMath.cbrt(mu / 3);
+ final UnivariateFunction l2Equation = x -> {
+ final double leq1 =
+ x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq3 = mu * (x + mu) * (x + mu);
+ return leq1 - leq2 - leq3;
+ };
+ final double[] searchInterval =
+ UnivariateSolverUtils.bracket(l2Equation, baseR, 1 - mu, 2, 1E-6,
+ 1, MAX_EVALUATIONS);
+ final BracketingNthOrderBrentSolver solver =
+ new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
+ ABSOLUTE_ACCURACY,
+ FUNCTION_ACCURACY, MAX_ORDER);
+ final double r =
+ solver.solve(MAX_EVALUATIONS, l2Equation, searchInterval[0],
+ searchInterval[1], AllowedSolution.ANY_SIDE);
+ final Vector3D l2 = new Vector3D(r * lDim, 0.0, 0.0);
+ return l2;
+ }
+
+ /**
+ * Get the position of the third Lagrangian point in the CR3BP Rotating frame.
+ * @return position of the third Lagrangian point in the CR3BP Rotating frame (m)
+ */
+ public Vector3D getL3Position() {
+
+ final double baseR = -(1 + 5 * mu / 12);
+ final UnivariateFunction l3Equation = x -> {
+ final double leq1 =
+ x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq3 = mu * (x + mu) * (x + mu);
+ return leq1 + leq2 + leq3;
+ };
+ final double[] searchInterval =
+ UnivariateSolverUtils.bracket(l3Equation, baseR, -2, -mu, 1E-6, 1,
+ MAX_EVALUATIONS);
+ final BracketingNthOrderBrentSolver solver =
+ new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
+ ABSOLUTE_ACCURACY,
+ FUNCTION_ACCURACY, MAX_ORDER);
+ final double r =
+ solver.solve(MAX_EVALUATIONS, l3Equation, searchInterval[0],
+ searchInterval[1], AllowedSolution.ANY_SIDE);
+ final Vector3D l3 = new Vector3D(r * lDim, 0.0, 0.0);
+ return l3;
+ }
+
+ /**
+ * Get the position of the fourth Lagrangian point in the CR3BP Rotating frame.
+ * @return position of the fourth Lagrangian point in the CR3BP Rotating frame (m)
+ */
+ public Vector3D getL4Position() {
+ final Vector3D l4 =
+ new Vector3D((0.5 - mu) * lDim, FastMath.sqrt(3) / 2 * lDim, 0);
+ return l4;
+ }
+
+ /**
+ * Get the position of the fifth Lagrangian point in the CR3BP Rotating frame.
+ * @return position of the fifth Lagrangian point in the CR3BP Rotating frame (m)
+ */
+ public Vector3D getL5Position() {
+ final Vector3D l5 =
+ new Vector3D((0.5 - mu) * lDim, -FastMath.sqrt(3) / 2 * lDim, 0);
+ return l5;
+ }
+
+}
diff --git a/src/test/java/org/orekit/bodies/CR3BPFactoryTest.java b/src/test/java/org/orekit/bodies/CR3BPFactoryTest.java
new file mode 100644
index 000000000..b0fea547f
--- /dev/null
+++ b/src/test/java/org/orekit/bodies/CR3BPFactoryTest.java
@@ -0,0 +1,33 @@
+package org.orekit.bodies;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.orekit.Utils;
+
+public class CR3BPFactoryTest {
+
+ @Test
+ public void getSunJupiterCR3BP() {
+ Utils.setDataRoot("regular-data");
+
+ CR3BPSystem sunJupiterCR3BP = CR3BPFactory.getSunJupiterCR3BP();
+ Assert.assertNotNull(sunJupiterCR3BP);
+ }
+
+ @Test
+ public void getEarthMoonCR3BP() {
+ Utils.setDataRoot("regular-data");
+
+ CR3BPSystem earthMoonCR3BP = CR3BPFactory.getEarthMoonCR3BP();
+ Assert.assertNotNull(earthMoonCR3BP);
+ }
+
+ @Test
+ public void getSunEarthCR3BP() {
+ Utils.setDataRoot("regular-data");
+
+ CR3BPSystem sunEarthCR3BP = CR3BPFactory.getSunEarthCR3BP();
+ Assert.assertNotNull(sunEarthCR3BP);
+ }
+
+}
diff --git a/src/test/java/org/orekit/bodies/CR3BPSystemTest.java b/src/test/java/org/orekit/bodies/CR3BPSystemTest.java
new file mode 100644
index 000000000..53af7577f
--- /dev/null
+++ b/src/test/java/org/orekit/bodies/CR3BPSystemTest.java
@@ -0,0 +1,108 @@
+package org.orekit.bodies;
+
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.util.FastMath;
+import org.junit.Assert;
+import org.junit.Test;
+import org.orekit.Utils;
+import org.orekit.frames.Frame;
+import org.orekit.time.AbsoluteDate;
+import org.orekit.time.TimeScalesFactory;
+import org.orekit.utils.Constants;
+
+public class CR3BPSystemTest {
+
+ @Test
+ public void testCR3BPSystem() {
+ Utils.setDataRoot("regular-data");
+
+ final double lDim = CR3BPFactory.getSunEarthCR3BP().getLdim();
+ Assert.assertNotNull(lDim);
+
+ final double vDim = CR3BPFactory.getSunEarthCR3BP().getVdim();
+ Assert.assertNotNull(vDim);
+
+ final double tDim = CR3BPFactory.getSunEarthCR3BP().getTdim();
+ Assert.assertNotNull(tDim);
+ }
+
+ @Test
+ public void testgetBarycenter() {
+ Utils.setDataRoot("regular-data");
+
+ final double bary = CR3BPFactory.getSunEarthCR3BP().getBarycenter();
+ Assert.assertNotNull(bary);
+ }
+
+ @Test
+ public void testgetPrimary() {
+ Utils.setDataRoot("regular-data");
+
+ final CelestialBody primaryBody = CR3BPFactory.getSunEarthCR3BP().getPrimary();
+ Assert.assertNotNull(primaryBody);
+ }
+
+ @Test
+ public void testgetSecondary() {
+ Utils.setDataRoot("regular-data");
+
+ final CelestialBody secondaryBody = CR3BPFactory.getSunEarthCR3BP().getSecondary();
+ Assert.assertNotNull(secondaryBody);
+ }
+
+ @Test
+ public void testgetMu() {
+ Utils.setDataRoot("regular-data");
+
+ final double mu = CR3BPFactory.getSunEarthCR3BP().getMu();
+ Assert.assertNotNull(mu);
+ }
+
+ @Test
+ public void testgetName() {
+ Utils.setDataRoot("regular-data");
+
+ final String name = CR3BPFactory.getSunEarthCR3BP().getName();
+ Assert.assertNotNull(name);
+ }
+
+ @Test
+ public void testgetLFrame() {
+ Utils.setDataRoot("regular-data");
+
+
+ final Frame l2Frame = CR3BPFactory.getEarthMoonCR3BP().getL2Frame();
+ Assert.assertNotNull(l2Frame);
+
+ final Frame l3Frame = CR3BPFactory.getSunEarthCR3BP().getL3Frame();
+ Assert.assertNotNull(l3Frame);
+ }
+
+ @Test
+ public void testLOrientation() {
+
+ final AbsoluteDate date0 = new AbsoluteDate(2000, 01, 1, 11, 58, 20.000,
+ TimeScalesFactory.getUTC());
+ final CelestialBody sun = CelestialBodyFactory.getSun();
+ final CelestialBody earth = CelestialBodyFactory.getEarth();
+ final Frame l1Frame = CR3BPFactory.getSunEarthCR3BP().getL1Frame();
+ for (double dt = -Constants.JULIAN_DAY; dt <= Constants.JULIAN_DAY; dt += 3600.0) {
+ final AbsoluteDate date = date0.shiftedBy(dt);
+ final Vector3D sunPositionInL1 = sun.getPVCoordinates(date, l1Frame).getPosition();
+ final Vector3D earthPositionInL1 = earth.getPVCoordinates(date, l1Frame).getPosition();
+ Assert.assertEquals(FastMath.PI, Vector3D.angle(sunPositionInL1, Vector3D.MINUS_I), 3.0e-14);
+ Assert.assertEquals(FastMath.PI, Vector3D.angle(earthPositionInL1, Vector3D.MINUS_I), 3.0e-14);
+ }
+ }
+
+ @Test
+ public void testgetLPos() {
+ Utils.setDataRoot("regular-data");
+
+ final Vector3D l4Position = CR3BPFactory.getSunEarthCR3BP().getL4Position();
+ Assert.assertNotNull(l4Position);
+
+ final Vector3D l5Position = CR3BPFactory.getSunEarthCR3BP().getL5Position();
+ Assert.assertNotNull(l5Position);
+ }
+}
--
GitLab
From 92e8f61bedb899a9a1591085efc75c920d30de4f Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Wed, 22 May 2019 17:58:20 +0200
Subject: [PATCH 002/202] Integration of LagrangianPoints enumerate.
---
.../org/orekit/utils/LagrangianPoints.java | 40 +++++++++++++++++++
.../orekit/utils/LagrangianPointsTest.java | 13 ++++++
2 files changed, 53 insertions(+)
create mode 100644 src/main/java/org/orekit/utils/LagrangianPoints.java
create mode 100644 src/test/java/org/orekit/utils/LagrangianPointsTest.java
diff --git a/src/main/java/org/orekit/utils/LagrangianPoints.java b/src/main/java/org/orekit/utils/LagrangianPoints.java
new file mode 100644
index 000000000..7279a7ea8
--- /dev/null
+++ b/src/main/java/org/orekit/utils/LagrangianPoints.java
@@ -0,0 +1,40 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.orekit.utils;
+
+/** Enumerate for selecting which Lagrangian Point to consider in different classes.
+ * @author Vincent Mouraux
+ */
+public enum LagrangianPoints {
+
+ /** Lagrangian Point L1. */
+ L1,
+
+ /** Lagrangian Point L2. */
+ L2,
+
+ /** Lagrangian Point L3. */
+ L3,
+
+ /** Lagrangian Point L4. */
+ L4,
+
+ /** Lagrangian Point L5. */
+ L5;
+
+}
diff --git a/src/test/java/org/orekit/utils/LagrangianPointsTest.java b/src/test/java/org/orekit/utils/LagrangianPointsTest.java
new file mode 100644
index 000000000..c29079bba
--- /dev/null
+++ b/src/test/java/org/orekit/utils/LagrangianPointsTest.java
@@ -0,0 +1,13 @@
+package org.orekit.utils;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class LagrangianPointsTest {
+
+ @Test
+ public void testList() {
+ Assert.assertEquals(5, LagrangianPoints.values().length);
+ }
+
+}
--
GitLab
From 900ed188bbb742b2d50552e05308614fba1364ba Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Wed, 22 May 2019 17:59:38 +0200
Subject: [PATCH 003/202] Added CR3BP Rotating Frame.
---
.../org/orekit/frames/CR3BPRotatingFrame.java | 41 +++++
.../CR3BPRotatingTransformProvider.java | 106 ++++++++++++
.../CR3BPRotatingTransformProviderTest.java | 153 ++++++++++++++++++
3 files changed, 300 insertions(+)
create mode 100644 src/main/java/org/orekit/frames/CR3BPRotatingFrame.java
create mode 100644 src/main/java/org/orekit/frames/CR3BPRotatingTransformProvider.java
create mode 100644 src/test/java/org/orekit/frames/CR3BPRotatingTransformProviderTest.java
diff --git a/src/main/java/org/orekit/frames/CR3BPRotatingFrame.java b/src/main/java/org/orekit/frames/CR3BPRotatingFrame.java
new file mode 100644
index 000000000..5fd6040d7
--- /dev/null
+++ b/src/main/java/org/orekit/frames/CR3BPRotatingFrame.java
@@ -0,0 +1,41 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.frames;
+
+import org.orekit.bodies.CelestialBody;
+
+/** Class creating the rotating frame centered on the barycenter of the CR3BP System.
+ * @author Vincent Mouraux
+ */
+public class CR3BPRotatingFrame extends Frame {
+
+ /** Serializable UID.*/
+ private static final long serialVersionUID = 20190520L;
+
+ /** Simple constructor.
+ * @param distance distance between the two bodies, meters
+ * @param barycenter distance between the primary body and CR3BP barycenter, meters
+ * @param primaryBody Primary body.
+ * @param secondaryBody Secondary body.
+ */
+ public CR3BPRotatingFrame(final double distance, final double barycenter, final CelestialBody primaryBody, final CelestialBody secondaryBody) {
+ super(primaryBody.getInertiallyOrientedFrame(),
+ new CR3BPRotatingTransformProvider(distance, barycenter, primaryBody, secondaryBody),
+ primaryBody.getName() + "-" + secondaryBody.getName() + "-CR3BPBarycenter", true);
+ }
+
+}
diff --git a/src/main/java/org/orekit/frames/CR3BPRotatingTransformProvider.java b/src/main/java/org/orekit/frames/CR3BPRotatingTransformProvider.java
new file mode 100644
index 000000000..5b13c549b
--- /dev/null
+++ b/src/main/java/org/orekit/frames/CR3BPRotatingTransformProvider.java
@@ -0,0 +1,106 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.frames;
+
+import org.hipparchus.Field;
+import org.hipparchus.RealFieldElement;
+import org.hipparchus.geometry.euclidean.threed.FieldRotation;
+import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
+import org.hipparchus.geometry.euclidean.threed.Rotation;
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.orekit.bodies.CelestialBody;
+import org.orekit.time.AbsoluteDate;
+import org.orekit.time.FieldAbsoluteDate;
+import org.orekit.utils.FieldPVCoordinates;
+import org.orekit.utils.PVCoordinates;
+
+/** Transform provider for the rotating frame of the CR3BP System.
+ * @author Vincent Mouraux
+ */
+class CR3BPRotatingTransformProvider implements TransformProvider {
+
+ /** Serializable UID.*/
+ private static final long serialVersionUID = 20190519L;
+
+ /** Frame for results. Always defined as primaryBody's inertially oriented frame.*/
+ private final Frame frame;
+
+ /** Celestial body with smaller mass, m2.*/
+ private final CelestialBody secondaryBody;
+
+ /** barycenter of the system.*/
+ private final double barycenter;
+
+
+ /** Simple constructor.
+ * @param distance distance between the two bodies
+ * @param barycenter CR3BP Barycenter.
+ * @param primaryBody Primary body.
+ * @param secondaryBody Secondary body.
+ */
+ CR3BPRotatingTransformProvider(final double distance, final double barycenter, final CelestialBody primaryBody, final CelestialBody secondaryBody) {
+ this.secondaryBody = secondaryBody;
+ this.frame = primaryBody.getInertiallyOrientedFrame();
+ this.barycenter = barycenter;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Transform getTransform(final AbsoluteDate date) {
+ final PVCoordinates pv21 = secondaryBody.getPVCoordinates(date, frame);
+ final Vector3D translation = getBary(pv21.getPosition()).negate();
+ final Rotation rotation = new Rotation(pv21.getPosition(), pv21.getMomentum(),
+ Vector3D.PLUS_I, Vector3D.PLUS_K);
+ return new Transform(date, new Transform(date, translation), new Transform(date, rotation));
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public > FieldTransform getTransform(final FieldAbsoluteDate date) {
+ final FieldPVCoordinates pv21 = secondaryBody.getPVCoordinates(date, frame);
+ final FieldVector3D translation = getBary(pv21.getPosition()).negate();
+ final Field field = pv21.getPosition().getX().getField();
+ final FieldRotation rotation = new FieldRotation<>(pv21.getPosition(), pv21.getMomentum(),
+ FieldVector3D.getPlusI(field),
+ FieldVector3D.getPlusK(field));
+ return new FieldTransform(date,
+ new FieldTransform<>(date, translation),
+ new FieldTransform<>(date, rotation));
+ }
+
+ /** Compute the coordinates of the barycenter.
+ * @param primaryToSecondary relative position of secondary body with respect to primary body
+ * @return coordinates of the barycenter given in frame: primaryBody.getInertiallyOrientedFrame()
+ */
+ private Vector3D getBary(final Vector3D primaryToSecondary) {
+ final Vector3D normalized = primaryToSecondary.normalize();
+ return new Vector3D(barycenter, normalized);
+ }
+
+ /** Compute the coordinates of the barycenter.
+ * @param type of the field elements
+ * @param primaryToSecondary relative position of secondary body with respect to primary body
+ * @return coordinates of the barycenter given in frame: primaryBody.getInertiallyOrientedFrame()
+ */
+ private > FieldVector3D
+ getBary(final FieldVector3D primaryToSecondary) {
+ // Barycenter point is built
+ final FieldVector3D normalized = primaryToSecondary.normalize();
+ return new FieldVector3D<>(barycenter, normalized);
+
+ }
+}
diff --git a/src/test/java/org/orekit/frames/CR3BPRotatingTransformProviderTest.java b/src/test/java/org/orekit/frames/CR3BPRotatingTransformProviderTest.java
new file mode 100644
index 000000000..1694c2ee1
--- /dev/null
+++ b/src/test/java/org/orekit/frames/CR3BPRotatingTransformProviderTest.java
@@ -0,0 +1,153 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.frames;
+
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.util.FastMath;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.orekit.Utils;
+import org.orekit.bodies.CR3BPFactory;
+import org.orekit.bodies.CR3BPSystem;
+import org.orekit.bodies.CelestialBody;
+import org.orekit.bodies.CelestialBodyFactory;
+import org.orekit.time.AbsoluteDate;
+import org.orekit.time.TimeScalesFactory;
+import org.orekit.utils.Constants;
+import org.orekit.utils.PVCoordinates;
+
+/**Unit tests for {@link CR3BPRotatingTransformProvider}.
+ * @author Vincent Mouraux
+ */
+public class CR3BPRotatingTransformProviderTest {
+
+ @Test
+ public void testTransformationOrientationForEarthMoon() {
+
+ // Load Bodies
+ final CelestialBody moon = CelestialBodyFactory.getMoon();
+
+ // Set frames
+ final Frame eme2000 = FramesFactory.getEME2000();
+ final CR3BPSystem syst = CR3BPFactory.getEarthMoonCR3BP();
+ final Frame baryFrame = syst.getRotatingFrame();
+
+ // Time settings
+ final AbsoluteDate date = new AbsoluteDate(2000, 01, 01, 0, 0, 00.000,
+ TimeScalesFactory.getUTC());
+
+ // Compute Moon position in EME2000
+ PVCoordinates pvMoon = moon.getPVCoordinates(date, eme2000);
+ Vector3D posMoon = pvMoon.getPosition();
+
+ // Compute barycenter position in EME2000
+ // (it is important to use transformPosition(Vector3D.ZERO) and *not* getTranslation()
+ // because the test should avoid doing wrong interpretation of the meaning and
+ // particularly on the sign of the translation)
+ Vector3D posBary = baryFrame.getTransformTo(eme2000,date).transformPosition(Vector3D.ZERO);
+
+ // check barycenter and Moon are aligned as seen from Earth
+ Assert.assertEquals(0.0, Vector3D.angle(posMoon, posBary), 1.0e-10);
+ }
+
+
+ @Test
+ public void testSunEarth() {
+
+ // Load Bodies
+ final CelestialBody sun = CelestialBodyFactory.getSun();
+ final CelestialBody earth = CelestialBodyFactory.getEarth();
+
+ // Set frames
+ final Frame sunFrame = sun.getInertiallyOrientedFrame();
+ final CR3BPSystem syst = CR3BPFactory.getSunEarthCR3BP();
+ final Frame baryFrame = syst.getRotatingFrame();
+
+ // Time settings
+ final AbsoluteDate date = new AbsoluteDate(2000, 01, 01, 0, 0, 00.000,
+ TimeScalesFactory.getUTC());
+
+ // Compute Earth position in Sun centered frame
+ PVCoordinates pvEarth = earth.getPVCoordinates(date, sunFrame);
+ Vector3D posEarth = pvEarth.getPosition();
+
+ // Compute barycenter position in Sun centered frame
+ // (it is important to use transformPosition(Vector3D.ZERO) and *not* getTranslation()
+ // because the test should avoid doing wrong interpretation of the meaning and
+ // particularly on the sign of the translation)
+ Vector3D posBary = baryFrame.getTransformTo(sunFrame,date).transformPosition(Vector3D.ZERO);
+
+ // check L1 and Earth are aligned as seen from Sun
+ Assert.assertEquals(0.0, Vector3D.angle(posEarth, posBary), 1.0e-10);
+ }
+
+
+ @Test
+ public void testSunJupiter() {
+
+ // Load Bodies
+ final CelestialBody sun = CelestialBodyFactory.getSun();
+ final CelestialBody jupiter = CelestialBodyFactory.getJupiter();
+
+ // Set frames
+ final Frame sunFrame = sun.getInertiallyOrientedFrame();
+ final CR3BPSystem syst = CR3BPFactory.getSunJupiterCR3BP();
+ final Frame baryFrame = syst.getRotatingFrame();
+
+ // Time settings
+ final AbsoluteDate date = new AbsoluteDate(2000, 01, 01, 0, 0, 00.000,
+ TimeScalesFactory.getUTC());
+
+ // Compute Jupiter position in Sun centered frame
+ PVCoordinates pvJupiter = jupiter.getPVCoordinates(date, sunFrame);
+ Vector3D posJupiter = pvJupiter.getPosition();
+
+ // Compute barycenter position in Sun centered frame
+ // (it is important to use transformPosition(Vector3D.ZERO) and *not* getTranslation()
+ // because the test should avoid doing wrong interpretation of the meaning and
+ // particularly on the sign of the translation)
+ Vector3D posBary = baryFrame.getTransformTo(sunFrame,date).transformPosition(Vector3D.ZERO);
+
+ // check barycenter and Jupiter are aligned as seen from Sun
+ Assert.assertEquals(0.0, Vector3D.angle(posJupiter, posBary), 1.0e-10);
+ }
+
+ @Test
+ public void testbaryOrientation() {
+
+ final AbsoluteDate date0 = new AbsoluteDate(2000, 01, 1, 11, 58, 20.000,
+ TimeScalesFactory.getUTC());
+ final CelestialBody sun = CelestialBodyFactory.getSun();
+ final CelestialBody earth = CelestialBodyFactory.getEarth();
+ final CR3BPSystem syst = CR3BPFactory.getSunEarthCR3BP();
+ final Frame baryFrame = syst.getRotatingFrame();
+ for (double dt = -Constants.JULIAN_DAY; dt <= Constants.JULIAN_DAY; dt += 3600.0) {
+ final AbsoluteDate date = date0.shiftedBy(dt);
+ final Vector3D sunPositionInBary = sun.getPVCoordinates(date, baryFrame).getPosition();
+ final Vector3D earthPositionInBary = earth.getPVCoordinates(date, baryFrame).getPosition();
+ Assert.assertEquals(0.0, Vector3D.angle(sunPositionInBary, Vector3D.MINUS_I), 1.0e-10);
+ Assert.assertEquals(FastMath.PI, Vector3D.angle(earthPositionInBary, Vector3D.MINUS_I), 1.0e-10);
+ }
+ }
+
+ @Before
+ public void setUp() {
+ Utils.setDataRoot("regular-data");
+ }
+
+}
\ No newline at end of file
--
GitLab
From 953e475a4e2fde4119737d9bfe999593cb360357 Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Wed, 22 May 2019 18:00:47 +0200
Subject: [PATCH 004/202] Took into account LagrangianPoints enumerate.
---
.../java/org/orekit/bodies/CR3BPSystem.java | 220 ++++++++----------
.../org/orekit/bodies/CR3BPSystemTest.java | 75 +++---
2 files changed, 131 insertions(+), 164 deletions(-)
diff --git a/src/main/java/org/orekit/bodies/CR3BPSystem.java b/src/main/java/org/orekit/bodies/CR3BPSystem.java
index d215a3a9f..f28cc0aea 100644
--- a/src/main/java/org/orekit/bodies/CR3BPSystem.java
+++ b/src/main/java/org/orekit/bodies/CR3BPSystem.java
@@ -22,9 +22,9 @@ import org.hipparchus.analysis.solvers.BracketingNthOrderBrentSolver;
import org.hipparchus.analysis.solvers.UnivariateSolverUtils;
import org.hipparchus.geometry.euclidean.threed.Vector3D;
import org.hipparchus.util.FastMath;
-import org.orekit.frames.CR3BPLFrame;
import org.orekit.frames.CR3BPRotatingFrame;
import org.orekit.frames.Frame;
+import org.orekit.utils.LagrangianPoints;
/**
* Class creating, from two different celestial bodies, the corresponding system
@@ -173,33 +173,6 @@ public class CR3BPSystem {
return baryFrame;
}
- /** Get the CR3BP L1 centered Frame.
- * @return CR3BP L1 centered Frame
- */
- public Frame getL1Frame() {
- final Frame l1Frame =
- new CR3BPLFrame(getRotatingFrame(), getL1Position());
- return l1Frame;
- }
-
- /** Get the CR3BP L2 centered Frame.
- * @return CR3BP L2 centered Frame
- */
- public Frame getL2Frame() {
- final Frame l2Frame =
- new CR3BPLFrame(getRotatingFrame(), getL2Position());
- return l2Frame;
- }
-
- /** Get the CR3BP L3 centered Frame.
- * @return CR3BP L3 centered Frame
- */
- public Frame getL3Frame() {
- final Frame l3Frame =
- new CR3BPLFrame(getRotatingFrame(), getL3Position());
- return l3Frame;
- }
-
/** Get the distance of the CR3BP Barycenter from the primary.
* @return distance of the CR3BP Barycenter from the primary
*/
@@ -208,107 +181,104 @@ public class CR3BPSystem {
}
/**
- * Get the position of the first Lagrangian point in the CR3BP Rotating frame.
- * @return position of the first Lagrangian point in the CR3BP Rotating frame (m)
+ * Get the position of the Lagrangian point in the CR3BP Rotating frame.
+ * @param lagrangianPoint Lagrangian Point to consider
+ * @return position of the Lagrangian point in the CR3BP Rotating frame (m)
*/
- public Vector3D getL1Position() {
-
- final double baseR = 1 - FastMath.cbrt(mu / 3);
- final UnivariateFunction l1Equation = x -> {
- final double leq1 =
- x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
- final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
- final double leq3 = mu * (x + mu) * (x + mu);
- return leq1 - leq2 + leq3;
- };
- final double[] searchInterval =
- UnivariateSolverUtils.bracket(l1Equation, baseR, -mu, 1 - mu, 1E-6,
- 1, MAX_EVALUATIONS);
- final BracketingNthOrderBrentSolver solver =
- new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
- ABSOLUTE_ACCURACY,
- FUNCTION_ACCURACY, MAX_ORDER);
- final double r =
- solver.solve(MAX_EVALUATIONS, l1Equation, searchInterval[0],
- searchInterval[1], AllowedSolution.ANY_SIDE);
- final Vector3D l1 = new Vector3D(r * lDim, 0.0, 0.0);
- return l1;
- }
+ public Vector3D getLPosition(final LagrangianPoints lagrangianPoint) {
+ final Vector3D lpos;
+ final double baseR;
+ final double[] searchInterval;
+ final double r;
+ final BracketingNthOrderBrentSolver solver;
+
+ switch (lagrangianPoint) {
+
+ case L1:
+ baseR = 1 - FastMath.cbrt(mu / 3);
+ final UnivariateFunction l1Equation = x -> {
+ final double leq1 =
+ x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq3 = mu * (x + mu) * (x + mu);
+ return leq1 - leq2 + leq3;
+ };
+ searchInterval =
+ UnivariateSolverUtils.bracket(l1Equation, baseR, -mu,
+ 1 - mu, 1E-6, 1,
+ MAX_EVALUATIONS);
+ solver =
+ new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
+ ABSOLUTE_ACCURACY,
+ FUNCTION_ACCURACY,
+ MAX_ORDER);
+ r =
+ solver.solve(MAX_EVALUATIONS, l1Equation, searchInterval[0],
+ searchInterval[1], AllowedSolution.ANY_SIDE);
+ lpos = new Vector3D(r * lDim, 0.0, 0.0);
+ break;
- /**
- * Get the position of the second Lagrangian point in the CR3BP Rotating frame.
- * @return position of the second Lagrangian point in the CR3BP Rotating frame (m)
- */
- public Vector3D getL2Position() {
-
- final double baseR = 1 + FastMath.cbrt(mu / 3);
- final UnivariateFunction l2Equation = x -> {
- final double leq1 =
- x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
- final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
- final double leq3 = mu * (x + mu) * (x + mu);
- return leq1 - leq2 - leq3;
- };
- final double[] searchInterval =
- UnivariateSolverUtils.bracket(l2Equation, baseR, 1 - mu, 2, 1E-6,
- 1, MAX_EVALUATIONS);
- final BracketingNthOrderBrentSolver solver =
- new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
- ABSOLUTE_ACCURACY,
- FUNCTION_ACCURACY, MAX_ORDER);
- final double r =
- solver.solve(MAX_EVALUATIONS, l2Equation, searchInterval[0],
- searchInterval[1], AllowedSolution.ANY_SIDE);
- final Vector3D l2 = new Vector3D(r * lDim, 0.0, 0.0);
- return l2;
- }
+ case L2:
+ baseR = 1 + FastMath.cbrt(mu / 3);
+ final UnivariateFunction l2Equation = x -> {
+ final double leq1 =
+ x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq3 = mu * (x + mu) * (x + mu);
+ return leq1 - leq2 - leq3;
+ };
+ searchInterval =
+ UnivariateSolverUtils.bracket(l2Equation, baseR, 1 - mu, 2,
+ 1E-6, 1, MAX_EVALUATIONS);
+ solver =
+ new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
+ ABSOLUTE_ACCURACY,
+ FUNCTION_ACCURACY,
+ MAX_ORDER);
+ r =
+ solver.solve(MAX_EVALUATIONS, l2Equation, searchInterval[0],
+ searchInterval[1], AllowedSolution.ANY_SIDE);
+ lpos = new Vector3D(r * lDim, 0.0, 0.0);
+ break;
- /**
- * Get the position of the third Lagrangian point in the CR3BP Rotating frame.
- * @return position of the third Lagrangian point in the CR3BP Rotating frame (m)
- */
- public Vector3D getL3Position() {
-
- final double baseR = -(1 + 5 * mu / 12);
- final UnivariateFunction l3Equation = x -> {
- final double leq1 =
- x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
- final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
- final double leq3 = mu * (x + mu) * (x + mu);
- return leq1 + leq2 + leq3;
- };
- final double[] searchInterval =
- UnivariateSolverUtils.bracket(l3Equation, baseR, -2, -mu, 1E-6, 1,
- MAX_EVALUATIONS);
- final BracketingNthOrderBrentSolver solver =
- new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
- ABSOLUTE_ACCURACY,
- FUNCTION_ACCURACY, MAX_ORDER);
- final double r =
- solver.solve(MAX_EVALUATIONS, l3Equation, searchInterval[0],
- searchInterval[1], AllowedSolution.ANY_SIDE);
- final Vector3D l3 = new Vector3D(r * lDim, 0.0, 0.0);
- return l3;
- }
+ case L3:
+ baseR = -(1 + 5 * mu / 12);
+ final UnivariateFunction l3Equation = x -> {
+ final double leq1 =
+ x * (x + mu) * (x + mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq2 = (1 - mu) * (x + mu - 1) * (x + mu - 1);
+ final double leq3 = mu * (x + mu) * (x + mu);
+ return leq1 + leq2 + leq3;
+ };
+ searchInterval =
+ UnivariateSolverUtils.bracket(l3Equation, baseR, -2, -mu,
+ 1E-6, 1, MAX_EVALUATIONS);
+ solver =
+ new BracketingNthOrderBrentSolver(RELATIVE_ACCURACY,
+ ABSOLUTE_ACCURACY,
+ FUNCTION_ACCURACY,
+ MAX_ORDER);
+ r =
+ solver.solve(MAX_EVALUATIONS, l3Equation, searchInterval[0],
+ searchInterval[1], AllowedSolution.ANY_SIDE);
+ lpos = new Vector3D(r * lDim, 0.0, 0.0);
+ break;
- /**
- * Get the position of the fourth Lagrangian point in the CR3BP Rotating frame.
- * @return position of the fourth Lagrangian point in the CR3BP Rotating frame (m)
- */
- public Vector3D getL4Position() {
- final Vector3D l4 =
- new Vector3D((0.5 - mu) * lDim, FastMath.sqrt(3) / 2 * lDim, 0);
- return l4;
- }
+ case L4:
+ lpos =
+ new Vector3D((0.5 - mu) * lDim, FastMath.sqrt(3) / 2 * lDim,
+ 0);
+ break;
- /**
- * Get the position of the fifth Lagrangian point in the CR3BP Rotating frame.
- * @return position of the fifth Lagrangian point in the CR3BP Rotating frame (m)
- */
- public Vector3D getL5Position() {
- final Vector3D l5 =
- new Vector3D((0.5 - mu) * lDim, -FastMath.sqrt(3) / 2 * lDim, 0);
- return l5;
+ case L5:
+ lpos =
+ new Vector3D((0.5 - mu) * lDim,
+ -FastMath.sqrt(3) / 2 * lDim, 0);
+ break;
+ default:
+ lpos = new Vector3D(0, 0, 0);
+ break;
+ }
+ return lpos;
}
-
}
diff --git a/src/test/java/org/orekit/bodies/CR3BPSystemTest.java b/src/test/java/org/orekit/bodies/CR3BPSystemTest.java
index 53af7577f..682c91afe 100644
--- a/src/test/java/org/orekit/bodies/CR3BPSystemTest.java
+++ b/src/test/java/org/orekit/bodies/CR3BPSystemTest.java
@@ -1,28 +1,25 @@
package org.orekit.bodies;
import org.hipparchus.geometry.euclidean.threed.Vector3D;
-import org.hipparchus.util.FastMath;
import org.junit.Assert;
import org.junit.Test;
import org.orekit.Utils;
import org.orekit.frames.Frame;
-import org.orekit.time.AbsoluteDate;
-import org.orekit.time.TimeScalesFactory;
-import org.orekit.utils.Constants;
+import org.orekit.utils.LagrangianPoints;
public class CR3BPSystemTest {
@Test
public void testCR3BPSystem() {
Utils.setDataRoot("regular-data");
-
- final double lDim = CR3BPFactory.getSunEarthCR3BP().getLdim();
+ final CR3BPSystem syst = CR3BPFactory.getSunEarthCR3BP();
+ final double lDim = syst.getLdim();
Assert.assertNotNull(lDim);
- final double vDim = CR3BPFactory.getSunEarthCR3BP().getVdim();
+ final double vDim = syst.getVdim();
Assert.assertNotNull(vDim);
- final double tDim = CR3BPFactory.getSunEarthCR3BP().getTdim();
+ final double tDim = syst.getTdim();
Assert.assertNotNull(tDim);
}
@@ -34,6 +31,14 @@ public class CR3BPSystemTest {
Assert.assertNotNull(bary);
}
+ @Test
+ public void testgetRotatingFrame() {
+ Utils.setDataRoot("regular-data");
+
+ final Frame baryFrame = CR3BPFactory.getSunEarthCR3BP().getRotatingFrame();
+ Assert.assertNotNull(baryFrame);
+ }
+
@Test
public void testgetPrimary() {
Utils.setDataRoot("regular-data");
@@ -54,7 +59,7 @@ public class CR3BPSystemTest {
public void testgetMu() {
Utils.setDataRoot("regular-data");
- final double mu = CR3BPFactory.getSunEarthCR3BP().getMu();
+ final double mu = CR3BPFactory.getSunJupiterCR3BP().getMu();
Assert.assertNotNull(mu);
}
@@ -67,42 +72,34 @@ public class CR3BPSystemTest {
}
@Test
- public void testgetLFrame() {
+ public void testgetLPos() {
Utils.setDataRoot("regular-data");
-
- final Frame l2Frame = CR3BPFactory.getEarthMoonCR3BP().getL2Frame();
- Assert.assertNotNull(l2Frame);
+ final CR3BPSystem syst = CR3BPFactory.getEarthMoonCR3BP();
- final Frame l3Frame = CR3BPFactory.getSunEarthCR3BP().getL3Frame();
- Assert.assertNotNull(l3Frame);
- }
+ final Vector3D l1Position = syst.getLPosition(LagrangianPoints.L1);
+ Assert.assertEquals(3.23E8, l1Position.getX(),3E6);
+ Assert.assertEquals(0.0, l1Position.getY(),1E3);
+ Assert.assertEquals(0.0, l1Position.getZ(),1E3);
- @Test
- public void testLOrientation() {
-
- final AbsoluteDate date0 = new AbsoluteDate(2000, 01, 1, 11, 58, 20.000,
- TimeScalesFactory.getUTC());
- final CelestialBody sun = CelestialBodyFactory.getSun();
- final CelestialBody earth = CelestialBodyFactory.getEarth();
- final Frame l1Frame = CR3BPFactory.getSunEarthCR3BP().getL1Frame();
- for (double dt = -Constants.JULIAN_DAY; dt <= Constants.JULIAN_DAY; dt += 3600.0) {
- final AbsoluteDate date = date0.shiftedBy(dt);
- final Vector3D sunPositionInL1 = sun.getPVCoordinates(date, l1Frame).getPosition();
- final Vector3D earthPositionInL1 = earth.getPVCoordinates(date, l1Frame).getPosition();
- Assert.assertEquals(FastMath.PI, Vector3D.angle(sunPositionInL1, Vector3D.MINUS_I), 3.0e-14);
- Assert.assertEquals(FastMath.PI, Vector3D.angle(earthPositionInL1, Vector3D.MINUS_I), 3.0e-14);
- }
- }
+ final Vector3D l2Position = syst.getLPosition(LagrangianPoints.L2);
+ Assert.assertEquals(4.45E8, l2Position.getX(),3E6);
+ Assert.assertEquals(0.0, l2Position.getY(),1E3);
+ Assert.assertEquals(0.0, l2Position.getZ(),1E3);
- @Test
- public void testgetLPos() {
- Utils.setDataRoot("regular-data");
+ final Vector3D l3Position = syst.getLPosition(LagrangianPoints.L3);
+ Assert.assertEquals(-3.86E8, l3Position.getX(),3E6);
+ Assert.assertEquals(0.0, l3Position.getY(),1E3);
+ Assert.assertEquals(0.0, l3Position.getZ(),1E3);
- final Vector3D l4Position = CR3BPFactory.getSunEarthCR3BP().getL4Position();
- Assert.assertNotNull(l4Position);
+ final Vector3D l4Position = syst.getLPosition(LagrangianPoints.L4);
+ Assert.assertEquals(1.87E8, l4Position.getX(),3E6);
+ Assert.assertEquals(3.32E8, l4Position.getY(),3E6);
+ Assert.assertEquals(0.0, l4Position.getZ(),1E3);
- final Vector3D l5Position = CR3BPFactory.getSunEarthCR3BP().getL5Position();
- Assert.assertNotNull(l5Position);
+ final Vector3D l5Position = syst.getLPosition(LagrangianPoints.L5);
+ Assert.assertEquals(1.87E8, l5Position.getX(),3E6);
+ Assert.assertEquals(-3.32E8, l5Position.getY(),3E6);
+ Assert.assertEquals(0.0, l5Position.getZ(),1E3);
}
}
--
GitLab
From b671346fc1f99c0f094534967c5fbe56bcc83d46 Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Tue, 4 Jun 2019 12:40:24 +0200
Subject: [PATCH 005/202] WIP.
---
.../java/org/orekit/bodies/CR3BPFactory.java | 13 +-
.../java/org/orekit/bodies/CR3BPSystem.java | 37 +-
.../java/org/orekit/orbits/HaloOrbit.java | 244 ++++++++
.../orbits/RichardsonExpansionContext.java | 539 ++++++++++++++++++
.../events/XZPlaneCrossingDetector.java | 61 ++
.../numerical/cr3bp/STMEquations.java | 164 ++++++
.../cr3bp/forces/CR3BPForceModel.java | 178 ++++++
.../numerical/cr3bp/forces/package-info.java | 20 +
.../numerical/cr3bp/package-info.java | 21 +
.../java/org/orekit/utils/CR3BPConstants.java | 39 ++
.../orekit/forces/CR3BPForceModelTest.java | 314 ++++++++++
11 files changed, 1597 insertions(+), 33 deletions(-)
create mode 100644 src/main/java/org/orekit/orbits/HaloOrbit.java
create mode 100644 src/main/java/org/orekit/orbits/RichardsonExpansionContext.java
create mode 100644 src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java
create mode 100644 src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java
create mode 100644 src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java
create mode 100644 src/main/java/org/orekit/propagation/numerical/cr3bp/forces/package-info.java
create mode 100644 src/main/java/org/orekit/propagation/numerical/cr3bp/package-info.java
create mode 100644 src/main/java/org/orekit/utils/CR3BPConstants.java
create mode 100644 src/test/java/org/orekit/forces/CR3BPForceModelTest.java
diff --git a/src/main/java/org/orekit/bodies/CR3BPFactory.java b/src/main/java/org/orekit/bodies/CR3BPFactory.java
index c94f74b4c..4d799b011 100644
--- a/src/main/java/org/orekit/bodies/CR3BPFactory.java
+++ b/src/main/java/org/orekit/bodies/CR3BPFactory.java
@@ -16,6 +16,8 @@
*/
package org.orekit.bodies;
+import org.orekit.utils.CR3BPConstants;
+
/**
* Factory class creating predefined CR3BP system using CR3BPSystem class. For example, Earth-Moon CR3BP
* System.
@@ -36,29 +38,30 @@ public class CR3BPFactory {
* @return Sun-Jupiter CR3BP system
*/
public static CR3BPSystem getSunJupiterCR3BP() {
- return getSystem(CelestialBodyFactory.getSun(), CelestialBodyFactory.getJupiter());
+ return getSystem(CelestialBodyFactory.getSun(), CelestialBodyFactory.getJupiter(), CR3BPConstants.JUPITER_SEMI_MAJOR_AXIS);
}
/** Get the Sun-Earth CR3BP singleton bodies pair.
* @return Sun-Earth CR3BP system
*/
public static CR3BPSystem getSunEarthCR3BP() {
- return getSystem(CelestialBodyFactory.getSun(), CelestialBodyFactory.getEarth());
+ return getSystem(CelestialBodyFactory.getSun(), CelestialBodyFactory.getEarth(), CR3BPConstants.EARTH_MOON_BARYCENTER_SEMI_MAJOR_AXIS);
}
/** Get the Earth-Moon CR3BP singleton bodies pair.
* @return Earth-Moon CR3BP system
*/
public static CR3BPSystem getEarthMoonCR3BP() {
- return getSystem(CelestialBodyFactory.getEarth(), CelestialBodyFactory.getMoon());
+ return getSystem(CelestialBodyFactory.getEarth(), CelestialBodyFactory.getMoon(), CR3BPConstants.MOON_SEMI_MAJOR_AXIS);
}
/** Get the corresponding CR3BP System.
* @param primaryBody Primary Body in the CR3BP System
* @param secondaryBody Secondary Body in the CR3BP System
+ * @param a Semi-Major Axis of the secondary body
* @return corresponding CR3BP System
*/
- public static CR3BPSystem getSystem(final CelestialBody primaryBody, final CelestialBody secondaryBody) {
- return new CR3BPSystem(primaryBody, secondaryBody);
+ public static CR3BPSystem getSystem(final CelestialBody primaryBody, final CelestialBody secondaryBody, final double a) {
+ return new CR3BPSystem(primaryBody, secondaryBody, a);
}
}
diff --git a/src/main/java/org/orekit/bodies/CR3BPSystem.java b/src/main/java/org/orekit/bodies/CR3BPSystem.java
index f28cc0aea..96473c2b6 100644
--- a/src/main/java/org/orekit/bodies/CR3BPSystem.java
+++ b/src/main/java/org/orekit/bodies/CR3BPSystem.java
@@ -69,51 +69,32 @@ public class CR3BPSystem {
/** Secondary body. */
private CelestialBody secondaryBody;
- /** Primary body GM. (m³/s²) */
- private double mu1;
-
- /** Secondary body GM. (m³/s²) */
- private double mu2;
-
/** Distance between the primary and the CR3BP System barycenter, meters. */
private double barycenter;
/** Simple constructor.
* @param primaryBody Primary Body in the CR3BP System
* @param secondaryBody Secondary Body in the CR3BP System
+ * @param a Semi-Major Axis of the secondary body
*/
- public CR3BPSystem(final CelestialBody primaryBody, final CelestialBody secondaryBody) {
+ public CR3BPSystem(final CelestialBody primaryBody, final CelestialBody secondaryBody, final double a) {
this.primaryBody = primaryBody;
this.secondaryBody = secondaryBody;
this.name = primaryBody.getName() + "_" + secondaryBody.getName();
- this.mu1 = primaryBody.getGM();
- this.mu2 = secondaryBody.getGM();
+ final double mu1 = primaryBody.getGM();
+ final double mu2 = secondaryBody.getGM();
- switch (name) {
- case "Sun_Jupiter":
- lDim = 7.78340821E11;
- vDim = 13064.059343815603;
- tDim = 3.7434456486914164E8;
- break;
- case "Sun_Earth":
- lDim = 1.4959262E11;
- vDim = 29785.259280799997;
- tDim = 3.1556487159820825E7;
- break;
- case "Earth_Moon":
- lDim = 384399000.0;
- vDim = 1024.5481799056872;
- tDim = 2357380.742325712;
- break;
- default:
- break;
- }
+ this.lDim = a;
this.mu = mu2 / (mu1 + mu2);
this.barycenter = lDim * mu;
+
+ this.vDim = FastMath.sqrt(mu1 / (lDim - barycenter));
+ this.tDim = 2 * FastMath.PI * lDim / vDim;
+
}
/** Get the CR3BP mass ratio of the system mu2/(mu1+mu2).
diff --git a/src/main/java/org/orekit/orbits/HaloOrbit.java b/src/main/java/org/orekit/orbits/HaloOrbit.java
new file mode 100644
index 000000000..913c350a7
--- /dev/null
+++ b/src/main/java/org/orekit/orbits/HaloOrbit.java
@@ -0,0 +1,244 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.orekit.orbits;
+
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.linear.RealMatrix;
+import org.hipparchus.ode.events.Action;
+import org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator;
+import org.hipparchus.ode.nonstiff.GraggBulirschStoerIntegrator;
+import org.hipparchus.util.FastMath;
+import org.orekit.bodies.CR3BPSystem;
+import org.orekit.frames.Frame;
+import org.orekit.propagation.SpacecraftState;
+import org.orekit.propagation.events.EventDetector;
+import org.orekit.propagation.events.XZPlaneCrossingDetector;
+import org.orekit.propagation.events.handlers.EventHandler;
+import org.orekit.propagation.numerical.NumericalPropagator;
+import org.orekit.propagation.numerical.cr3bp.STMEquations;
+import org.orekit.propagation.numerical.cr3bp.forces.CR3BPForceModel;
+import org.orekit.time.AbsoluteDate;
+import org.orekit.time.TimeScalesFactory;
+import org.orekit.utils.AbsolutePVCoordinates;
+import org.orekit.utils.LagrangianPoints;
+import org.orekit.utils.PVCoordinates;
+
+/** Class calculating different parameters of a Halo Orbit.
+ * @author Vincent Mouraux
+ */
+public class HaloOrbit {
+
+ /** Orbital Period of the Halo Orbit. */
+ private double orbitalPeriod;
+
+ /** Orbital Period of the secondary body around barycenter. */
+ private double tDim;
+
+ /** CR3BP System of the Halo Orbit. */
+ private final CR3BPSystem cr3bpSystem;
+
+ /** Position-Velocity first guess for a point on a Halo Orbit. */
+ private final PVCoordinates firstGuess;
+
+ /** Simple Constructor.
+ * @param syst CR3BP System considered
+ * @param point Lagrangian Point considered
+ * @param firstGuess PVCoordinates of the first guess
+ */
+ public HaloOrbit(final CR3BPSystem syst, final LagrangianPoints point,
+ final PVCoordinates firstGuess) {
+ this.tDim = syst.getTdim();
+ this.cr3bpSystem = syst;
+ this.firstGuess = firstGuess;
+ orbitalPeriod = 0;
+ }
+
+ /** Simple Constructor.
+ * @param syst CR3BP System considered
+ * @param point Lagrangian Point considered
+ * @param az z-axis Amplitude of the required Halo Orbit, meters
+ * @param type type of the Halo Orbit ("Northern" or "Southern")
+ */
+ public HaloOrbit(final CR3BPSystem syst, final LagrangianPoints point, final double az, final String type) {
+ this.tDim = syst.getTdim();
+ this.cr3bpSystem = syst;
+
+ this.firstGuess = new RichardsonExpansionContext(cr3bpSystem, point).computeFirstGuess(az, type);
+ this.orbitalPeriod = new RichardsonExpansionContext(cr3bpSystem, point).getOrbitalPeriod(az, type);
+ }
+
+ /** Simple Constructor.
+ * @param syst CR3BP System considered
+ * @param point Lagrangian Point considered
+ * @param az z-axis Amplitude of the required Halo Orbit, meters
+ * @param type type of the Halo Orbit ("Northern" or "Southern")
+ * @param t Orbit time, seconds (>0)
+ * @param phi Orbit phase, rad
+ */
+ public HaloOrbit(final CR3BPSystem syst, final LagrangianPoints point, final double az,
+ final String type, final double t, final double phi) {
+ this.tDim = syst.getTdim();
+ this.cr3bpSystem = syst;
+
+ firstGuess =
+ new RichardsonExpansionContext(cr3bpSystem, point)
+ .computeFirstGuess(az, type, t, phi);
+ orbitalPeriod =
+ new RichardsonExpansionContext(cr3bpSystem, point)
+ .getOrbitalPeriod(az, type);
+ }
+
+ /** Return the orbital period of the Halo Orbit in second.
+ * @return orbitalPeriod orbital period of the Halo Orbit, second
+ */
+ public double getOrbitalPeriod() {
+ return orbitalPeriod * tDim / (2 * FastMath.PI);
+ }
+
+ /** Return the first guess Position-Velocity of a point on the Halo Orbit.
+ * @return firstGuess first guess Position-Velocity of a point on the Halo Orbit
+ */
+ public PVCoordinates getFirstGuess() {
+ return firstGuess;
+ }
+
+ public PVCoordinates differentialCorrection(final PVCoordinates firstGuess, final CR3BPSystem syst) {
+ double iter = 0;
+ double dvxf;
+ double dvzf;
+ // Time settings
+ final AbsoluteDate initialDate =
+ new AbsoluteDate(1996, 06, 25, 0, 0, 00.000,
+ TimeScalesFactory.getUTC());
+
+ // Get the Rotating Frame in which both primaries are orbiting around their common barycenter.
+ final Frame rotatingFrame = syst.getRotatingFrame();
+
+ PVCoordinates pv = firstGuess;
+
+ // !!!!!! NOT IN SECONDS !!!!! normalized time used in CR3BP calculation, treal = Tdim * t / (2 * pi)
+ final double integrationTime = 5;
+
+ // Integration parameters
+ // These parameters are used for the Dormand-Prince integrator, a
+ // variable step integrator,
+ // these limits prevent the integrator to spend too much time when the
+ // equations are too stiff,
+ // as well as the reverse situation.
+ final double minStep = 0.0001;
+ final double maxstep = 1;
+
+ // tolerances for integrators
+ // Used by the integrator to estimate its variable integration step
+ final double positionTolerance = 0.001;
+ final double velocityTolerance = 0.001;
+ final double massTolerance = 1.0e-6;
+ final double[] vecAbsoluteTolerances =
+ {
+ positionTolerance, positionTolerance, positionTolerance,
+ velocityTolerance, velocityTolerance, velocityTolerance,
+ massTolerance
+ };
+ final double[] vecRelativeTolerances =
+ new double[vecAbsoluteTolerances.length];
+
+ // Defining the numerical integrator that will be used by the propagator
+ AdaptiveStepsizeIntegrator integrator =
+ new GraggBulirschStoerIntegrator(minStep, maxstep,
+ vecAbsoluteTolerances,
+ vecRelativeTolerances);
+
+ final double maxcheck = 1;
+ final double threshold = 0.001;
+
+ do {
+ // PVCoordinates linked to a Frame and a Date
+ AbsolutePVCoordinates initialAbsPV =
+ new AbsolutePVCoordinates(rotatingFrame, initialDate, pv);
+
+ // Creating the initial spacecraftstate that will be given to the
+ // propagator
+ SpacecraftState initialState =
+ new SpacecraftState(initialAbsPV);
+
+ STMEquations stm = new STMEquations(syst);
+ SpacecraftState augmentedInitialState = stm.setInitialPhi(initialState);
+
+ EventDetector yPlaneCrossing =
+ new XZPlaneCrossingDetector(maxcheck, threshold).withHandler(new planeCrossingHandler());
+
+ NumericalPropagator propagator = new NumericalPropagator(integrator);
+ propagator.setOrbitType(null); // No known orbit type can be linked to this propagation
+ propagator.setIgnoreCentralAttraction(true); // The attraction in this problem is not central, mu is used differently
+ propagator.addForceModel(new CR3BPForceModel(syst)); // Add our specific force model to the propagation, it has to be propagated in the rotating frame*
+ propagator.addAdditionalEquations(stm);
+ propagator.setInitialState(augmentedInitialState);
+ propagator.addEventDetector(yPlaneCrossing);
+
+ SpacecraftState finalState = propagator.propagate(initialDate.shiftedBy(integrationTime));
+ RealMatrix phi = stm.getStateTransitionMatrix(finalState);
+
+ dvxf = -finalState.getPVCoordinates().getVelocity().getX();
+ dvzf = -finalState.getPVCoordinates().getVelocity().getZ();
+ System.out.println(dvxf);
+ //System.out.println(dvzf);
+ //System.out.println(finalState.getPVCoordinates().getPosition().getY());
+ double Mdet = phi.getEntry(3, 0) * phi.getEntry(5, 4) - phi.getEntry(5, 0) * phi.getEntry(3, 4);
+
+ double deltax0 = (phi.getEntry(5, 4) * dvxf - phi.getEntry(3, 4) * dvzf) / Mdet ; //dx0
+ double deltavy0 = (-phi.getEntry(5, 0) * dvxf + phi.getEntry(3, 0) * dvzf) / Mdet ; //dvy0
+
+ double newx = pv.getPosition().getX() + deltax0;
+ double newvy = pv.getVelocity().getY() + deltavy0;
+
+ pv = new PVCoordinates( new Vector3D(newx,pv.getPosition().getY(),pv.getPosition().getZ()), new Vector3D(pv.getVelocity().getX(),newvy,pv.getVelocity().getZ()));
+ ++iter;
+ }while(FastMath.abs(dvxf) > 1E-5 || FastMath.abs(dvzf) > 1E-5);
+
+ System.out.println(iter);
+ return pv;
+ }
+
+ /** Return the manifold vector.
+ * @param pva point coordinates on the Halo orbit
+ * @param phi Monodromy Matrix
+ * @param p
+ * @return manifold first guess Position-Velocity of a point on the Halo Orbit
+ */
+ /*public PVCoordinates getManifolds(PVCoordinates pva, RealMatrix phi, CR3BPSystem syst) {
+
+ final RealVector unstableManifoldEigen =
+ new EigenDecomposition(phi).getEigenvector(0);
+ final RealVector stableManifoldEigen =
+ new EigenDecomposition(phi).getEigenvector(1);
+
+
+ }
+ */
+ private static class planeCrossingHandler
+ implements
+ EventHandler {
+
+ public Action eventOccurred(final SpacecraftState s,
+ final XZPlaneCrossingDetector detector,
+ final boolean increasing) {
+ return Action.STOP;
+ }
+ }
+}
+
diff --git a/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java b/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java
new file mode 100644
index 000000000..66a273c13
--- /dev/null
+++ b/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java
@@ -0,0 +1,539 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.orekit.orbits;
+
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.util.FastMath;
+import org.orekit.bodies.CR3BPSystem;
+import org.orekit.utils.LagrangianPoints;
+import org.orekit.utils.PVCoordinates;
+
+/** Class/Container implementing the Third-Order Richardson Expansion.
+ * @author Vincent Mouraux
+ */
+public class RichardsonExpansionContext {
+
+ /** Distance between a Lagrangian Point and its closest primary body, meters. */
+ private final double gamma;
+
+ /** Mass ratio of the CR3BP System. */
+ private final double mu;
+
+ /** Distance between the two primary bodies, meters. */
+ private final double lDim;
+
+ /** Halo Orbit frequency. */
+ private final double wp;
+
+ /** Simple Halo Orbit coefficient. */
+ private final double k;
+
+ /** Simple Richardson coefficient. */
+ private final double a21;
+
+ /** Simple Richardson coefficient. */
+ private final double a22;
+
+ /** Simple Richardson coefficient. */
+ private final double a23;
+
+ /** Simple Richardson coefficient. */
+ private final double a24;
+
+ /** Simple Richardson coefficient. */
+ private final double b21;
+
+ /** Simple Richardson coefficient. */
+ private final double b22;
+
+ /** Simple Richardson coefficient. */
+ private final double d21;
+
+ /** Simple Richardson coefficient. */
+ private final double a31;
+
+ /** Simple Richardson coefficient. */
+ private final double a32;
+
+ /** Simple Richardson coefficient. */
+ private final double b31;
+
+ /** Simple Richardson coefficient. */
+ private final double b32;
+
+ /** Simple Richardson coefficient. */
+ private final double d31;
+
+ /** Simple Richardson coefficient. */
+ private final double d32;
+
+ /** Simple Richardson coefficient. */
+ private final double s1;
+
+ /** Simple Richardson coefficient. */
+ private final double s2;
+
+ /** Simple Richardson coefficient. */
+ private final double l1;
+
+ /** Simple Richardson coefficient. */
+ private final double l2;
+
+ /** Simple Halo Orbit coefficient. */
+ private final double delta;
+
+ /** Orbital Period of the Halo Orbit, seconds. */
+ private double orbitalPeriod;
+
+ /** Simple Constructor.
+ * @param cr3bpSystem CR3BP System considered
+ * @param point Lagrangian Point considered
+ */
+ public RichardsonExpansionContext(final CR3BPSystem cr3bpSystem,
+ final LagrangianPoints point) {
+
+ this.mu = cr3bpSystem.getMu();
+
+ this.lDim = cr3bpSystem.getLdim();
+
+ this.gamma = getLPosition(cr3bpSystem, point);
+
+ final double c2 = getCn(2, point);
+
+ final double c3 = getCn(3, point);
+
+ final double c4 = getCn(4, point);
+
+ this.wp = FastMath.sqrt(0.5 * (2 - c2 + FastMath.sqrt(9 * c2 * c2 - 8 * c2)));
+
+ final double ld = FastMath.sqrt(0.5 * (2 - c2 + FastMath.sqrt(9 * c2 * c2 - 8 * c2)));
+
+ // final double wv = FastMath.sqrt(c2);
+
+ k = (wp * wp + 1 + 2 * c2) / (2 * wp);
+
+ final double d1 = 3 * ld * ld * (k * (6 * ld * ld - 1) - 2 * ld) / k;
+
+ final double d2 = 8 * ld * ld * (k * (11 * ld * ld - 1) - 2 * ld) / k;
+
+ a21 = 3 * c3 * (k * k - 2) / (4 * (1 + 2 * c2));
+
+ a22 = 3 * c3 / (4 * (1 + 2 * c2));
+
+ a23 = -3 * c3 * ld * (3 * k * k * k * ld - 6 * k * (k - ld) + 4) / (4 * k * d1);
+
+ a24 = -3 * c3 * ld * (2 + 3 * k * ld) / (4 * k * d1);
+
+ b21 = -3 * c3 * ld * (3 * k * ld - 4) / (2 * d1);
+
+ b22 = 3 * c3 * ld / d1;
+
+ d21 = -c3 / (2 * ld * ld);
+
+ a31 =
+ -9 *
+ ld * (4 * c3 * (k * a23 - b21) + k * c4 * (4 + k * k)) /
+ (4 * d2) +
+ (9 * ld * ld + 1 - c2) /
+ (2 * d2) *
+ (2 * c3 * (2 * a23 - k * b21) + c4 * (2 + 3 * k * k));
+
+ a32 =
+ -9 *
+ ld * (4 * c3 * (k * a24 - b22) + k * c4) / (4 * d2) -
+ 3 *
+ (9 *
+ ld * ld +
+ 1 - c2) *
+ (c3 *
+ (k * b22 +
+ d21 -
+ 2 * a24) -
+ c4) /
+ (2 * d2);
+
+ b31 =
+ 3 *
+ 8 * ld * (3 * c3 * (k * b21 - 2 * a23) - c4 * (2 + 3 * k * k)) /
+ (8 * d2) +
+ 3 *
+ ((9 * ld * ld + 1 + 2 * c2) *
+ (4 * c3 * (k * a23 - b21) + k * c4 * (4 + k * k))) /
+ (8 * d2);
+
+ b32 =
+ 9 *
+ ld * (c3 * (k * b22 + d21 - 2 * a24) - c4) / d2 +
+ 3 *
+ ((9 * ld * ld +
+ 1 + 2 * c2) *
+ (4 *
+ c3 *
+ (k * a24 -
+ b22) +
+ k * c4)) /
+ (8 * d2);
+
+ d31 = 3 / (64 * ld * ld) * (4 * c3 * a24 + c4);
+
+ d32 = 3 / (64 * ld * ld) * (4 * c3 * (a23 - d21) + c4 * (4 + k * k));
+
+ s1 =
+ (3 *
+ c3 * (2 * a21 * (k * k - 2) - a23 * (k * k + 2) - 2 * k * b21) /
+ 2 -
+ 3 * c4 * (3 * k * k * k * k - 8 * k * k + 8) / 8) /
+ (2 * ld * (ld * (1 + k * k) - 2 * k));
+
+ s2 =
+ (3 *
+ c3 *
+ (2 * a22 * (k * k - 2) +
+ a24 * (k * k + 2) + 2 * k * b22 + 5 * d21) /
+ 2 +
+ 3 * c4 * (12 - k * k) / 8) / (2 * ld * (ld * (1 + k * k) - 2 * k));
+
+ l1 = -3 * c3 * (2 * a21 + a23 + 5 * d21) / 2 - 3 * c4 * (12 - k * k) / 8 + 2 * ld * ld * s1;
+
+ l2 = 3 * c3 * (a24 - 2 * a22) / 2 + (9 * c4 / 8) + (2 * ld * ld * s2);
+
+ delta = wp * wp - c2;
+ }
+
+ /** Calculate gamma.
+ * @param syst CR3BP System considered
+ * @param point Lagrangian Point considered
+ * @return gamma Distance between the Lagrangian point and its closest primary body, meters
+ */
+ private double getLPosition(final CR3BPSystem syst, final LagrangianPoints point) {
+
+ final double x;
+
+ final double DCP;
+
+ final double xe;
+
+ final double pos;
+
+ switch (point) {
+ case L1:
+ x = syst.getLPosition(LagrangianPoints.L1).getX();
+ DCP = 1 - mu;
+ xe = x / lDim;
+ pos = DCP - xe;
+ break;
+ case L2:
+ x = syst.getLPosition(LagrangianPoints.L2).getX();
+ DCP = 1 - mu;
+ xe = x / lDim;
+ pos = xe - DCP;
+ break;
+ case L3:
+ x = syst.getLPosition(LagrangianPoints.L3).getX();
+ DCP = -mu;
+ xe = x / lDim;
+ pos = DCP - xe;
+ break;
+ default:
+ pos = 0;
+ break;
+ }
+ return pos;
+ }
+
+ /** Calculate Cn Richardson Coefficient.
+ * @param order Order 'n' of the coefficient needed.
+ * @param point Lagrangian Point considered
+ * @return cn Cn Richardson Coefficient
+ */
+ private double getCn(final double order,
+ final LagrangianPoints point) {
+ final double cn;
+ switch (point) {
+ case L1:
+ cn = (1 / FastMath.pow(gamma, 3)) * (mu + FastMath.pow(-1, order) * (1 - mu) * FastMath.pow(gamma, order + 1) / FastMath.pow(1 - gamma, order + 1));
+ break;
+ case L2:
+ cn = (1 / FastMath.pow(gamma, 3)) * (FastMath.pow(-1, order) * mu + FastMath.pow(-1, order) * (1 - mu) * FastMath.pow(gamma, order + 1) / FastMath.pow(1 + gamma, order + 1));
+ break;
+ case L3:
+ cn = (1 / FastMath.pow(gamma, 3)) * (1 - mu + mu * FastMath.pow(gamma, order + 1) / FastMath.pow(1 + gamma, order + 1));
+ break;
+ default:
+ cn = 0;
+ break;
+ }
+ return cn;
+ }
+
+ /** Calculate first Guess with t=0 , phi=0.
+ * @param azr z-axis Amplitude of the required Halo Orbit, meters
+ * @param type type of the Halo Orbit ("Northern" or "Southern")
+ * @return firstGuess PVCoordinates of the first guess
+ */
+ public PVCoordinates computeFirstGuess(final double azr,
+ final String type) {
+ return computeFirstGuess(azr, type, 0.0, 0.0);
+ }
+
+ /** Calculate first Guess.
+ * @param azr z-axis Amplitude of the required Halo Orbit, meters
+ * @param type type of the Halo Orbit ("Northern" or "Southern")
+ * @param t Orbit time, seconds (>0)
+ * @param phi Orbit phase, rad
+ * @return firstGuess PVCoordinates of the first guess
+ */
+ public PVCoordinates computeFirstGuess(final double azr, final String type,
+ final double t, final double phi) {
+
+ final double az = azr / (gamma * lDim);
+
+ final double ax = FastMath.sqrt((delta + l2 * az * az) / -l1);
+
+ final double nu = 1 + s1 * ax * ax + s2 * az * az;
+
+ final double tau = nu * t;
+
+ final double tau1 = wp * tau + phi;
+
+ final double m;
+
+ if (type.equals("Northern")) {
+ m = 1;
+ } else {
+ m = 3;
+ }
+
+ final double dm = 2 - m;
+
+ final double firstx =
+ a21 * ax * ax +
+ a22 *
+ az * az - ax * FastMath.cos(tau1) +
+ (a23 * ax * ax -
+ a24 * az * az) * FastMath.cos(2 * tau1) +
+ (a31 * ax * ax * ax -
+ a32 * ax * az * az) * FastMath.cos(3 * tau1);
+
+ final double firsty =
+ k * ax * FastMath.sin(tau1) +
+ (b21 * ax * ax - b22 * az * az) *
+ FastMath.sin(2 * tau1) +
+ (b31 * ax * ax * ax -
+ b32 * ax * az * az) * FastMath.sin(3 * tau1);
+
+ final double firstz =
+ dm * az * FastMath.cos(tau1) +
+ dm *
+ d21 * ax * az * (FastMath
+ .cos(2 * tau1) - 3) +
+ dm *
+ (d32 *
+ az * ax *
+ ax -
+ d31 *
+ az *
+ az *
+ az) *
+ FastMath
+ .cos(3 *
+ tau1);
+
+ final double vx =
+ ax * wp * nu * FastMath.sin(tau1) -
+ 2 * (a23 * ax * ax - a24 * az * az) * wp * nu * FastMath.sin(2 * tau1) -
+ 3 * (a31 * ax * ax * ax - a32 * ax * az * az) * wp * nu * FastMath.sin(3 * tau1);
+
+ final double vy =
+ k * ax * wp * nu * FastMath.cos(tau1) +
+ 2 * wp * nu * (b21 * ax * ax - b22 * az * az) * FastMath.cos(2 * tau1) +
+ 3 * wp * nu * (b31 * ax * ax * ax - b32 * ax * az * az) * FastMath.cos(3 * tau1);
+
+ final double vz =
+ -dm * az * wp * nu * FastMath.sin(tau1) -
+ 2 * dm * d21 * ax * az * wp * nu * FastMath.sin(2 * tau1) -
+ 3 * dm * (d32 * az * ax * ax - d31 * az * az * az) * wp * nu * FastMath.sin(3 * tau1);
+
+ return new PVCoordinates(new Vector3D(firstx * gamma + 1 - mu - gamma, firsty * gamma, firstz * gamma), new Vector3D(vx * gamma, vy * gamma, vz * gamma));
+ }
+
+ /**
+ * @return the wp
+ */
+ public double getWp() {
+ return wp;
+ }
+
+ /**
+ * @return the k
+ */
+ public double getK() {
+ return k;
+ }
+
+ /**
+ * @return the a21
+ */
+ public double getA21() {
+ return a21;
+ }
+
+ /**
+ * @return the a22
+ */
+ public double getA22() {
+ return a22;
+ }
+
+ /**
+ * @return the a23
+ */
+ public double getA23() {
+ return a23;
+ }
+
+ /**
+ * @return the a24
+ */
+ public double getA24() {
+ return a24;
+ }
+
+ /**
+ * @return the b21
+ */
+ public double getB21() {
+ return b21;
+ }
+
+ /**
+ * @return the b22
+ */
+ public double getB22() {
+ return b22;
+ }
+
+ /**
+ * @return the d21
+ */
+ public double getD21() {
+ return d21;
+ }
+
+ /**
+ * @return the a31
+ */
+ public double getA31() {
+ return a31;
+ }
+
+ /**
+ * @return the a32
+ */
+ public double getA32() {
+ return a32;
+ }
+
+ /**
+ * @return the b31
+ */
+ public double getB31() {
+ return b31;
+ }
+
+ /**
+ * @return the b32
+ */
+ public double getB32() {
+ return b32;
+ }
+
+ /**
+ * @return the d31
+ */
+ public double getD31() {
+ return d31;
+ }
+
+ /**
+ * @return the d32
+ */
+ public double getD32() {
+ return d32;
+ }
+
+ /**
+ * @return the s1
+ */
+ public double getS1() {
+ return s1;
+ }
+
+ /**
+ * @return the s2
+ */
+ public double getS2() {
+ return s2;
+ }
+
+ /**
+ * @return the l1
+ */
+ public double getL1() {
+ return l1;
+ }
+
+ /**
+ * @return the l2
+ */
+ public double getL2() {
+ return l2;
+ }
+
+ /**
+ * @return the delta
+ */
+ public double getDelta() {
+ return delta;
+ }
+
+ /**
+ * @return the gamma
+ */
+ public double getGamma() {
+ return gamma;
+ }
+
+ /** Return the orbital period of the Halo Orbit.
+ * @param azr z-axis Amplitude of the required Halo Orbit, meters
+ * @param type type of the Halo Orbit ("Northern" or "Southern")
+ * @return the orbitalPeriod
+ */
+ public double getOrbitalPeriod(final double azr, final String type) {
+
+ final double az = azr / (gamma * lDim);
+
+ final double ax = FastMath.sqrt((delta + l2 * az * az) / -l1);
+
+ final double nu = 1 + s1 * ax * ax + s2 * az * az;
+
+ orbitalPeriod = FastMath.abs(2 * FastMath.PI / (wp * nu));
+
+ return orbitalPeriod;
+ }
+}
diff --git a/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java b/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java
new file mode 100644
index 000000000..dee3a8071
--- /dev/null
+++ b/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java
@@ -0,0 +1,61 @@
+package org.orekit.propagation.events;
+
+import org.orekit.propagation.SpacecraftState;
+import org.orekit.propagation.events.handlers.EventHandler;
+import org.orekit.propagation.events.handlers.StopOnIncreasing;
+
+public class XZPlaneCrossingDetector
+ extends
+ AbstractDetector {
+
+ public XZPlaneCrossingDetector(final double maxCheck, final double threshold) {
+ this(maxCheck, threshold, DEFAULT_MAX_ITER,
+ new StopOnIncreasing());
+ }
+
+ private XZPlaneCrossingDetector(final double maxCheck, final double threshold,
+ final int maxIter,
+ final EventHandler super XZPlaneCrossingDetector> handler) {
+ super(maxCheck, threshold, maxIter, handler);
+ }
+
+ /**
+ * Build a new instance.
+ *
+ * The orbit is used only to set an upper bound for the max check interval
+ * to period/3
+ *
+ *
+ * @param threshold convergence threshold (s)
+ * @param orbit initial orbit
+ */
+
+
+ /**
+ * Private constructor with full parameters.
+ *
+ * This constructor is private as users are expected to use the builder API
+ * with the various {@code withXxx()} methods to set up the instance in a
+ * readable manner without using a huge amount of parameters.
+ *
+ *
+ * @param maxCheck maximum checking interval (s)
+ * @param threshold convergence threshold (s)
+ * @param maxIter maximum number of iterations in the event time search
+ * @param handler event handler to call at event occurrences
+ * @since 6.1
+ */
+
+ protected XZPlaneCrossingDetector
+ create(final double newMaxCheck, final double newThreshold,
+ final int newMaxIter,
+ final EventHandler super XZPlaneCrossingDetector> newHandler) {
+ return new XZPlaneCrossingDetector(newMaxCheck, newThreshold, newMaxIter,
+ newHandler );
+ }
+
+ public double g(final SpacecraftState s) {
+ return s.getPVCoordinates().getPosition().getY();
+
+ }
+}
diff --git a/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java b/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java
new file mode 100644
index 000000000..0ed0765f1
--- /dev/null
+++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java
@@ -0,0 +1,164 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.propagation.numerical.cr3bp;
+
+import java.util.Arrays;
+
+import org.hipparchus.linear.Array2DRowRealMatrix;
+import org.hipparchus.linear.RealMatrix;
+import org.hipparchus.util.FastMath;
+import org.orekit.bodies.CR3BPSystem;
+import org.orekit.propagation.SpacecraftState;
+import org.orekit.propagation.integration.AdditionalEquations;
+
+/** Class calculating the state transition matrix coefficient.
+ * @author Vincent Mouraux
+ */
+public class STMEquations
+ implements
+ AdditionalEquations {
+
+ /** Mass ratio of the considered CR3BP System. */
+ private final double mu;
+
+ /** Name of the equations. */
+ private final String name;
+
+ /** Simple constructor.
+ * @param syst CR3BP System considered
+ */
+ public STMEquations(final CR3BPSystem syst) {
+ this.mu = syst.getMu();
+ this.name = "stmEquations";
+ }
+
+ /** Method adding the standard initial values of the additional state to the initial spacecraft state.
+ * @param s Initial state of the system
+ * @return s Initial augmented (with the additional equations) state
+ */
+ public SpacecraftState setInitialPhi(final SpacecraftState s) {
+ final int stateDimension = 36;
+ final double[] phi = new double[stateDimension];
+ for (int i = 0; i < stateDimension; ++i) {
+ phi[i] = 0.0;
+ }
+
+ for (int i = 0; i < stateDimension; i = i + 7) {
+ phi[i] = 1.0;
+ }
+ return s.addAdditionalState(name, phi);
+ }
+
+ /** {@inheritDoc} */
+ public double[] computeDerivatives(final SpacecraftState s, final double[] dPhi) {
+
+ final double[][] jacobian = new double[6][6];
+
+ final double[][] u = new double[3][3];
+ final double[][] phi2d = new double[6][6];
+
+ final double[] phi = s.getAdditionalState(getName());
+
+ for (int j = 0; j < jacobian.length; ++j) {
+ Arrays.fill(jacobian[j], 0.0);
+ }
+
+ jacobian[0][3] = 1.0;
+ jacobian[1][4] = 1.0;
+ jacobian[2][5] = 1.0;
+ jacobian[3][4] = 2.0;
+ jacobian[4][3] = -2.0;
+
+ final double x = s.getPVCoordinates().getPosition().getX();
+ final double y = s.getPVCoordinates().getPosition().getY();
+ final double z = s.getPVCoordinates().getPosition().getZ();
+
+ final double r1 = FastMath.sqrt((x + mu) * (x + mu) + y * y + z * z);
+ final double r2 = FastMath.sqrt((x - (1 - mu)) * (x - (1 - mu)) + y * y + z * z);
+
+ u[0][0] = 1 - (1 - mu) * (1 / FastMath.pow(r1, 3) -
+ 3 * (x + mu) * (x + mu) / FastMath.pow(r1, 5)) -
+ mu * (1 / FastMath.pow(r2, 3) -
+ 3 * (x - (1 - mu)) * (x - (1 - mu)) / FastMath.pow(r2, 5));
+
+ u[1][1] = 1 - (1 - mu) * (1 / FastMath.pow(r1, 3) - 3 * y * y / FastMath.pow(r1, 5)) -
+ mu * (1 / FastMath.pow(r2, 3) - 3 * y * y / FastMath.pow(r2, 5));
+
+ u[2][2] = -(1 - mu) * (1 / FastMath.pow(r1, 3) - 3 * z * z / FastMath.pow(r1, 5)) -
+ mu * (1 / FastMath.pow(r2, 3) - 3 * z * z / FastMath.pow(r2, 5));
+
+ u[0][1] =
+ 3 * (1 - mu) * y * (x + mu) / FastMath.pow(r1, 5) +
+ 3 * mu * y * (x - (1 - mu)) / FastMath.pow(r2, 5);
+
+ u[1][0] = u[0][1];
+
+ u[0][2] =
+ 3 * (1 - mu) * z * (x + mu) / FastMath.pow(r1, 5) +
+ 3 * mu * z * (x - (1 - mu)) / FastMath.pow(r2, 5);
+
+ u[2][0] = u[0][2];
+
+ u[1][2] =
+ 3 * (1 - mu) * y * z / FastMath.pow(r1, 5) +
+ 3 * mu * y * z / FastMath.pow(r2, 5);
+
+ u[2][1] = u[1][2];
+
+ for (int k = 3; k < 6; ++k) {
+ jacobian[k][0] = u[k - 3][0];
+ jacobian[k][1] = u[k - 3][1];
+ jacobian[k][2] = u[k - 3][2];
+ }
+
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 6; j++) {
+ phi2d[i][j] = phi[6 * i + j];
+ }
+ }
+
+ final RealMatrix phiM = new Array2DRowRealMatrix(phi2d, false);
+ final RealMatrix jacobianM = new Array2DRowRealMatrix(jacobian, false);
+ final RealMatrix phidM = jacobianM.multiply(phiM);
+
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 6; j++) {
+ dPhi[6 * i + j] = phidM.getEntry(i, j);
+ }
+ }
+
+ // these equations have no effect on the main state itself
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public String getName() {
+ return name;
+ }
+
+ public RealMatrix getStateTransitionMatrix(final SpacecraftState s) {
+ final double[][] phi2dA = new double[6][6];
+ final double[] stm= s.getAdditionalState(getName());
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 6; j++) {
+ phi2dA[i][j] = stm[6 * i + j];
+ }
+ }
+ final RealMatrix phiM = new Array2DRowRealMatrix(phi2dA, false);
+ return phiM;
+ }
+}
diff --git a/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java b/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java
new file mode 100644
index 000000000..37b4b0c8e
--- /dev/null
+++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java
@@ -0,0 +1,178 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.propagation.numerical.cr3bp.forces;
+
+import java.util.stream.Stream;
+
+import org.hipparchus.Field;
+import org.hipparchus.RealFieldElement;
+import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.util.FastMath;
+import org.orekit.bodies.CR3BPSystem;
+import org.orekit.errors.OrekitException;
+import org.orekit.forces.AbstractForceModel;
+import org.orekit.propagation.FieldSpacecraftState;
+import org.orekit.propagation.SpacecraftState;
+import org.orekit.propagation.events.EventDetector;
+import org.orekit.propagation.events.FieldEventDetector;
+import org.orekit.utils.ParameterDriver;
+
+/** Class calculating the acceleration induced by CR3BP model.
+ * @author Vincent Mouraux
+ */
+public class CR3BPForceModel extends AbstractForceModel {
+
+ /** Suffix for parameter name for attraction coefficient enabling Jacobian processing. */
+ public static final String ATTRACTION_COEFFICIENT_SUFFIX = " attraction coefficient";
+
+ /**
+ * Central attraction scaling factor.
+ *
+ * We use a power of 2 to avoid numeric noise introduction in the
+ * multiplications/divisions sequences.
+ *
+ */
+ private static final double MU_SCALE = FastMath.scalb(1.0, 32);
+
+ /** Driver for gravitational parameter. */
+ private final ParameterDriver muParameterDriver;
+
+ /** Simple constructor.
+ * @param cr3bp Name of the CR3BP System
+ */
+ public CR3BPForceModel(final CR3BPSystem cr3bp) {
+ muParameterDriver =
+ new ParameterDriver(cr3bp.getName() + ATTRACTION_COEFFICIENT_SUFFIX,
+ cr3bp.getMu(), MU_SCALE, 0.0,
+ Double.POSITIVE_INFINITY);
+ }
+
+ /** {@inheritDoc} */
+ public Vector3D acceleration(final SpacecraftState s,
+ final double[] parameters)
+ throws OrekitException {
+
+ final double mu = parameters[0];
+ final double d1 = mu;
+ final double d2 = 1 - mu;
+
+ final double x = s.getPVCoordinates().getPosition().getX();
+ final double y = s.getPVCoordinates().getPosition().getY();
+ final double z = s.getPVCoordinates().getPosition().getZ();
+
+ final double vx = s.getPVCoordinates().getVelocity().getX();
+ final double vy = s.getPVCoordinates().getVelocity().getY();
+
+ final double r1 = FastMath.sqrt((x + d1) * (x + d1) + y * y + z * z);
+ final double r2 = FastMath.sqrt((x - d2) * (x - d2) + y * y + z * z);
+
+ final double dUdX =
+ -(1 - mu) * (x + d1) / (r1 * r1 * r1) -
+ mu * (x - d2) / (r2 * r2 * r2) + x;
+ final double dUdY =
+ -y * ((1 - mu) / (r1 * r1 * r1) + mu / (r2 * r2 * r2)) + y;
+ final double dUdZ =
+ -z * ((1 - mu) / (r1 * r1 * r1) + mu / (r2 * r2 * r2));
+
+ final double accx = dUdX + 2 * vy;
+
+ final double accy = dUdY - 2 * vx;
+
+ final double accz = dUdZ;
+
+ // compute absolute acceleration
+ return new Vector3D(accx, accy, accz);
+
+ }
+
+ /** {@inheritDoc} */
+ public > FieldVector3D
+ acceleration(final FieldSpacecraftState s, final T[] parameters)
+ throws OrekitException {
+ // compute bodies separation vectors and squared norm
+
+ final T mu = parameters[0];
+ final T d1 = mu;
+ final T d2 = mu.negate().add(1);
+
+ final T x = s.getPVCoordinates().getPosition().getX();
+ final T y = s.getPVCoordinates().getPosition().getY();
+ final T z = s.getPVCoordinates().getPosition().getZ();
+
+ final T vx = s.getPVCoordinates().getVelocity().getX();
+ final T vy = s.getPVCoordinates().getVelocity().getY();
+
+ final T r1 =
+ ((d1.add(x)).multiply(d1.add(x)).add(y.multiply(y))
+ .add(z.multiply(z))).sqrt();
+ final T r2 =
+ ((x.subtract(d2)).multiply(x.subtract(d2)).add(y.multiply(y))
+ .add(z.multiply(z))).sqrt();
+
+ final T dUdX =
+ (r1.pow(3)).reciprocal().multiply(mu.negate().add(1))
+ .multiply(x.add(d1)).negate()
+ .subtract(((r2.pow(3)).reciprocal()).multiply(mu)
+ .multiply(x.subtract(d2)))
+ .add(x);
+
+ final T dUdY =
+ y.negate()
+ .multiply((r1.pow(3).reciprocal()).multiply(mu.negate().add(1))
+ .add(mu.multiply(r2.pow(3).reciprocal())))
+ .add(y);
+
+ final T dUdZ =
+ z.negate().multiply((r1.pow(3).reciprocal())
+ .multiply(mu.negate().add(1)).add(mu.multiply(r2.pow(3))));
+
+ final T accx = dUdX.add(vy.multiply(2));
+
+ final T accy = dUdY.subtract(vx.multiply(2));
+
+ final T accz = dUdZ;
+
+ // compute absolute acceleration
+ return new FieldVector3D<>(accx, accy, accz);
+
+ }
+
+ /** {@inheritDoc} */
+ public Stream getEventsDetectors() {
+ return Stream.empty();
+ }
+
+ @Override
+ /** {@inheritDoc} */
+ public > Stream>
+ getFieldEventsDetectors(final Field field) {
+ return Stream.empty();
+ }
+
+ /** {@inheritDoc} */
+ public ParameterDriver[] getParametersDrivers() {
+ return new ParameterDriver[] {
+ muParameterDriver
+ };
+ }
+
+ /** {@inheritDoc} */
+ public boolean dependsOnPositionOnly() {
+ return true;
+ }
+}
diff --git a/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/package-info.java b/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/package-info.java
new file mode 100644
index 000000000..55eb4c9e8
--- /dev/null
+++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/package-info.java
@@ -0,0 +1,20 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Top level package for CR3BP Forces.
+ */
+package org.orekit.propagation.numerical.cr3bp.forces;
diff --git a/src/main/java/org/orekit/propagation/numerical/cr3bp/package-info.java b/src/main/java/org/orekit/propagation/numerical/cr3bp/package-info.java
new file mode 100644
index 000000000..4710e00c4
--- /dev/null
+++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/package-info.java
@@ -0,0 +1,21 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Top level package for CR3BP Models used with a numerical propagator.
+ */
+
+package org.orekit.propagation.numerical.cr3bp;
diff --git a/src/main/java/org/orekit/utils/CR3BPConstants.java b/src/main/java/org/orekit/utils/CR3BPConstants.java
new file mode 100644
index 000000000..0cbc4ef7e
--- /dev/null
+++ b/src/main/java/org/orekit/utils/CR3BPConstants.java
@@ -0,0 +1,39 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.orekit.utils;
+
+import java.util.Calendar;
+
+/**
+ * Set of useful physical CR3BP constants using JPL data.
+ * @author Vincent Mouraux
+ */
+
+public interface CR3BPConstants {
+
+ /** Moon semi-major axis = 384 400 000 m. */
+ double CENTURY = (Calendar.getInstance().get(Calendar.YEAR) - 2000) / 100;
+
+ /** Moon semi-major axis in meters. */
+ double MOON_SEMI_MAJOR_AXIS = 384400000;
+
+ /** Earth-Moon barycenter semi-major axis in meters. */
+ double EARTH_MOON_BARYCENTER_SEMI_MAJOR_AXIS = (1.00000261 + 0.00000562 * CENTURY) * Constants.IAU_2012_ASTRONOMICAL_UNIT;
+
+ /** Jupiter semi-major axis in meters. */
+ double JUPITER_SEMI_MAJOR_AXIS = (5.20288700 - 0.00011607 * CENTURY) * Constants.IAU_2012_ASTRONOMICAL_UNIT;
+}
diff --git a/src/test/java/org/orekit/forces/CR3BPForceModelTest.java b/src/test/java/org/orekit/forces/CR3BPForceModelTest.java
new file mode 100644
index 000000000..64602df41
--- /dev/null
+++ b/src/test/java/org/orekit/forces/CR3BPForceModelTest.java
@@ -0,0 +1,314 @@
+package org.orekit.forces;
+
+import java.io.File;
+import java.util.Locale;
+
+import org.hipparchus.Field;
+import org.hipparchus.analysis.differentiation.DSFactory;
+import org.hipparchus.analysis.differentiation.DerivativeStructure;
+import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
+import org.hipparchus.geometry.euclidean.threed.Vector3D;
+import org.hipparchus.ode.nonstiff.AdaptiveStepsizeFieldIntegrator;
+import org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator;
+import org.hipparchus.ode.nonstiff.DormandPrince853FieldIntegrator;
+import org.hipparchus.ode.nonstiff.DormandPrince853Integrator;
+import org.hipparchus.random.GaussianRandomGenerator;
+import org.hipparchus.random.RandomGenerator;
+import org.hipparchus.random.UncorrelatedRandomVectorGenerator;
+import org.hipparchus.random.Well19937a;
+import org.hipparchus.util.FastMath;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.orekit.Utils;
+import org.orekit.bodies.CR3BPFactory;
+import org.orekit.bodies.CR3BPSystem;
+import org.orekit.data.DataProvidersManager;
+import org.orekit.data.DirectoryCrawler;
+import org.orekit.frames.Frame;
+import org.orekit.frames.FramesFactory;
+import org.orekit.orbits.CartesianOrbit;
+import org.orekit.orbits.FieldCartesianOrbit;
+import org.orekit.orbits.OrbitType;
+import org.orekit.propagation.FieldSpacecraftState;
+import org.orekit.propagation.SpacecraftState;
+import org.orekit.propagation.numerical.FieldNumericalPropagator;
+import org.orekit.propagation.numerical.NumericalPropagator;
+import org.orekit.propagation.numerical.cr3bp.forces.CR3BPForceModel;
+import org.orekit.time.AbsoluteDate;
+import org.orekit.time.FieldAbsoluteDate;
+import org.orekit.time.TimeScalesFactory;
+import org.orekit.utils.AbsolutePVCoordinates;
+import org.orekit.utils.FieldPVCoordinates;
+import org.orekit.utils.PVCoordinates;
+
+public class CR3BPForceModelTest {
+
+ private CR3BPSystem syst;
+
+ @Test
+ public void testModel() {
+
+ final double mu = new CR3BPForceModel(syst).getParameters()[0];
+ Assert.assertEquals(0.0121, mu, 1E-3);
+
+ // Time settings
+ final AbsoluteDate initialDate =
+ new AbsoluteDate(1996, 06, 25, 0, 0, 00.000,
+ TimeScalesFactory.getUTC());
+
+ final PVCoordinates initialConditions =
+ new PVCoordinates(new Vector3D(0.8, 0.2, 0.0),
+ new Vector3D(0.0, 0.0, 0.1));
+ final Frame Frame = syst.getRotatingFrame();
+
+ final AbsolutePVCoordinates initialAbsPV =
+ new AbsolutePVCoordinates(Frame, initialDate, initialConditions);
+
+ // Creating the initial spacecraftstate that will be given to the
+ // propagator
+ final SpacecraftState initialState = new SpacecraftState(initialAbsPV);
+
+ // Integration parameters
+ // These parameters are used for the Dormand-Prince integrator, a
+ // variable step integrator,
+ // these limits prevent the integrator to spend too much time when the
+ // equations are too stiff,
+ // as well as the reverse situation.
+ final double minStep = 0.00001;
+ final double maxstep = 3600.0;
+ final double integrationTime = 5;
+
+ // tolerances for integrators
+ // Used by the integrator to estimate its variable integration step
+ final double positionTolerance = 0.01;
+ final double velocityTolerance = 0.01;
+ final double massTolerance = 1.0e-6;
+ final double[] vecAbsoluteTolerances =
+ {
+ positionTolerance, positionTolerance, positionTolerance,
+ velocityTolerance, velocityTolerance, velocityTolerance,
+ massTolerance
+ };
+ final double[] vecRelativeTolerances =
+ new double[vecAbsoluteTolerances.length];
+
+ // Defining the numerical integrator that will be used by the propagator
+ AdaptiveStepsizeIntegrator integrator =
+ new DormandPrince853Integrator(minStep, maxstep,
+ vecAbsoluteTolerances,
+ vecRelativeTolerances);
+
+ NumericalPropagator propagator = new NumericalPropagator(integrator);
+ propagator.setOrbitType(null);
+ propagator.setIgnoreCentralAttraction(true);
+ propagator.addForceModel(new CR3BPForceModel(syst));
+ propagator.setInitialState(initialState);
+ propagator.setSlaveMode();
+ final SpacecraftState finalState = propagator.propagate(initialDate.shiftedBy(integrationTime));
+
+ Assert.assertNotEquals(initialState.getPVCoordinates().getPosition().getX(), finalState.getPVCoordinates().getPosition().getX(), 1E-2);
+ }
+
+ /**Testing if the propagation between the FieldPropagation and the propagation
+ * is equivalent.
+ * Also testing if propagating X+dX with the propagation is equivalent to
+ * propagation X with the FieldPropagation and then applying the taylor
+ * expansion of dX to the result.*/
+ @Test
+ public void RealFieldTest() {
+ DSFactory factory = new DSFactory(6, 5);
+ DerivativeStructure fpx = factory.variable(0, 0.8);
+ DerivativeStructure fpy = factory.variable(1, 0.2);
+ DerivativeStructure fpz = factory.variable(2, 0.0);
+ DerivativeStructure fvx = factory.variable(3, 0.0);
+ DerivativeStructure fvy = factory.variable(4, 0.0);
+ DerivativeStructure fvz = factory.variable(5, 0.1);
+ DerivativeStructure mu = factory.constant(syst.getMu());
+
+ final FieldPVCoordinates initialConditions =
+ new FieldPVCoordinates<>(new FieldVector3D<>(fpx, fpy, fpz),
+ new FieldVector3D<>(fvx, fvy, fvz));
+
+ final double minStep = 0.00001;
+ final double maxstep = 3600.0;
+
+ Field field = fpx.getField();
+ DerivativeStructure zero = field.getZero();
+ FieldAbsoluteDate J2000 = new FieldAbsoluteDate<>(field);
+
+ Frame EME = FramesFactory.getEME2000();
+
+ FieldCartesianOrbit FKO = new FieldCartesianOrbit<>(initialConditions,
+ EME,
+ J2000,
+ mu);
+
+ FieldSpacecraftState initialState = new FieldSpacecraftState<>(FKO);
+
+ SpacecraftState iSR = initialState.toSpacecraftState();
+ OrbitType type = OrbitType.CARTESIAN;
+
+ final double positionTolerance = 0.01;
+ final double velocityTolerance = 0.01;
+ final double massTolerance = 1.0e-6;
+ final double[] vecAbsoluteTolerances =
+ {
+ positionTolerance, positionTolerance, positionTolerance,
+ velocityTolerance, velocityTolerance, velocityTolerance,
+ massTolerance
+ };
+ final double[] vecRelativeTolerances =
+ new double[vecAbsoluteTolerances.length];
+
+ AdaptiveStepsizeFieldIntegrator integrator =
+ new DormandPrince853FieldIntegrator<>(field,minStep, maxstep,
+ vecAbsoluteTolerances,
+ vecRelativeTolerances);
+ integrator.setInitialStepSize(zero.add(60));
+ AdaptiveStepsizeIntegrator RIntegrator =
+ new DormandPrince853Integrator(minStep, maxstep,
+ vecAbsoluteTolerances,
+ vecRelativeTolerances);
+ RIntegrator.setInitialStepSize(60);
+
+ FieldNumericalPropagator FNP = new FieldNumericalPropagator<>(field, integrator);
+ FNP.setOrbitType(type);
+ FNP.setIgnoreCentralAttraction(true);
+ FNP.setInitialState(initialState);
+
+ NumericalPropagator NP = new NumericalPropagator(RIntegrator);
+ NP.setOrbitType(type);
+ NP.setIgnoreCentralAttraction(true);
+ NP.setInitialState(iSR);
+
+ final CR3BPForceModel forceModel = new CR3BPForceModel(syst);
+
+ FNP.addForceModel(forceModel);
+ NP.addForceModel(forceModel);
+
+ FieldAbsoluteDate target = J2000.shiftedBy(1000.);
+ FieldSpacecraftState finalState_DS = FNP.propagate(target);
+ SpacecraftState finalState_R = NP.propagate(target.toAbsoluteDate());
+ FieldPVCoordinates finPVC_DS = finalState_DS.getPVCoordinates();
+ PVCoordinates finPVC_R = finalState_R.getPVCoordinates();
+
+ Assert.assertEquals(finPVC_DS.toPVCoordinates().getPosition().getX(), finPVC_R.getPosition().getX(), FastMath.abs(finPVC_R.getPosition().getX()) * 1e-11);
+ Assert.assertEquals(finPVC_DS.toPVCoordinates().getPosition().getY(), finPVC_R.getPosition().getY(), FastMath.abs(finPVC_R.getPosition().getY()) * 1e-11);
+ Assert.assertEquals(finPVC_DS.toPVCoordinates().getPosition().getZ(), finPVC_R.getPosition().getZ(), FastMath.abs(finPVC_R.getPosition().getZ()) * 1e-11);
+
+ long number = 23091991;
+ RandomGenerator RG = new Well19937a(number);
+ GaussianRandomGenerator NGG = new GaussianRandomGenerator(RG);
+ UncorrelatedRandomVectorGenerator URVG = new UncorrelatedRandomVectorGenerator(new double[] {0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 },
+ new double[] {1e3, 0.01, 0.01, 0.01, 0.01, 0.01},
+ NGG);
+ double px_R = fpx.getReal();
+ double py_R = fpy.getReal();
+ double pz_R = fpz.getReal();
+ double vx_R = fvx.getReal();
+ double vy_R = fvy.getReal();
+ double vz_R = fvz.getReal();
+ double maxP = 0;
+ double maxV = 0;
+ double maxA = 0;
+ for (int ii = 0; ii < 1; ii++){
+ double[] rand_next = URVG.nextVector();
+ double px_shift = px_R + rand_next[0];
+ double py_shift = py_R + rand_next[1];
+ double pz_shift = pz_R + rand_next[2];
+ double vx_shift = vx_R + rand_next[3];
+ double vy_shift = vy_R + rand_next[4];
+ double vz_shift = vz_R + rand_next[5];
+
+ final PVCoordinates shiftedConditions =
+ new PVCoordinates(new Vector3D(px_shift, py_shift, pz_shift),
+ new Vector3D(vx_shift, vy_shift, vz_shift));
+
+ CartesianOrbit shiftedOrb = new CartesianOrbit(shiftedConditions,
+ EME,
+ J2000.toAbsoluteDate(),
+ mu.getReal()
+ );
+
+ SpacecraftState shift_iSR = new SpacecraftState(shiftedOrb);
+
+ NumericalPropagator shift_NP = new NumericalPropagator(RIntegrator);
+
+ shift_NP.setInitialState(shift_iSR);
+
+ shift_NP.addForceModel(forceModel);
+
+ SpacecraftState finalState_shift = shift_NP.propagate(target.toAbsoluteDate());
+
+
+ PVCoordinates finPVC_shift = finalState_shift.getPVCoordinates();
+
+ //position check
+ FieldVector3D pos_DS = finPVC_DS.getPosition();
+ double x_DS = pos_DS.getX().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double y_DS = pos_DS.getY().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double z_DS = pos_DS.getZ().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double x = finPVC_shift.getPosition().getX();
+ double y = finPVC_shift.getPosition().getY();
+ double z = finPVC_shift.getPosition().getZ();
+ maxP = FastMath.max(maxP, FastMath.abs((x_DS - x) / (x - pos_DS.getX().getReal())));
+ maxP = FastMath.max(maxP, FastMath.abs((y_DS - y) / (y - pos_DS.getY().getReal())));
+ maxP = FastMath.max(maxP, FastMath.abs((z_DS - z) / (z - pos_DS.getZ().getReal())));
+
+ // velocity check
+ FieldVector3D vel_DS = finPVC_DS.getVelocity();
+ double vx_DS = vel_DS.getX().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double vy_DS = vel_DS.getY().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double vz_DS = vel_DS.getZ().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double vx = finPVC_shift.getVelocity().getX();
+ double vy = finPVC_shift.getVelocity().getY();
+ double vz = finPVC_shift.getVelocity().getZ();
+ maxV = FastMath.max(maxV, FastMath.abs((vx_DS - vx) / vx));
+ maxV = FastMath.max(maxV, FastMath.abs((vy_DS - vy) / vy));
+ maxV = FastMath.max(maxV, FastMath.abs((vz_DS - vz) / vz));
+
+ // acceleration check
+ FieldVector3D acc_DS = finPVC_DS.getAcceleration();
+ double ax_DS = acc_DS.getX().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double ay_DS = acc_DS.getY().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double az_DS = acc_DS.getZ().taylor(rand_next[0], rand_next[1], rand_next[2], rand_next[3], rand_next[4], rand_next[5]);
+ double ax = finPVC_shift.getAcceleration().getX();
+ double ay = finPVC_shift.getAcceleration().getY();
+ double az = finPVC_shift.getAcceleration().getZ();
+ maxA = FastMath.max(maxA, FastMath.abs((ax_DS - ax) / ax));
+ maxA = FastMath.max(maxA, FastMath.abs((ay_DS - ay) / ay));
+ maxA = FastMath.max(maxA, FastMath.abs((az_DS - az) / az));
+ }
+ Assert.assertEquals(0, maxP, 5.0e-9);
+ Assert.assertEquals(0, maxV, 3.0e-10);
+ Assert.assertEquals(0, maxA, 8.0e-8);
+
+ }
+
+
+
+ @Before
+ public void setUp() {
+ Utils.setDataRoot("regular-data");
+
+ // configure Orekit data provider
+ File home = new File(System.getProperty("user.home"));
+ File orekitData = new File(home, "orekit-data");
+ if (!orekitData.exists()) {
+ System.err.format(Locale.US, "Failed to find %s folder%n",
+ orekitData.getAbsolutePath());
+ System.err
+ .format(Locale.US,
+ "You need to download %s from the %s page and unzip it in %s for this tutorial to work%n",
+ "orekit-data.zip",
+ "https://www.orekit.org/forge/projects/orekit/files",
+ home.getAbsolutePath());
+ System.exit(1);
+ }
+ DataProvidersManager manager = DataProvidersManager.getInstance();
+ manager.addProvider(new DirectoryCrawler(orekitData));
+
+ this.syst = CR3BPFactory.getEarthMoonCR3BP();
+ }
+}
--
GitLab
From 5d8708b19b140af4039edfc10f7637eada3d388e Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Thu, 6 Jun 2019 10:09:53 +0200
Subject: [PATCH 006/202] Fixed checkstyle errors.
---
.../java/org/orekit/orbits/HaloOrbit.java | 201 ++++++++++--------
.../events/XZPlaneCrossingDetector.java | 73 +++++--
.../numerical/cr3bp/STMEquations.java | 12 +-
3 files changed, 172 insertions(+), 114 deletions(-)
diff --git a/src/main/java/org/orekit/orbits/HaloOrbit.java b/src/main/java/org/orekit/orbits/HaloOrbit.java
index 913c350a7..b0faa019c 100644
--- a/src/main/java/org/orekit/orbits/HaloOrbit.java
+++ b/src/main/java/org/orekit/orbits/HaloOrbit.java
@@ -116,21 +116,29 @@ public class HaloOrbit {
public PVCoordinates getFirstGuess() {
return firstGuess;
}
-
- public PVCoordinates differentialCorrection(final PVCoordinates firstGuess, final CR3BPSystem syst) {
- double iter = 0;
- double dvxf;
- double dvzf;
+
+ /** Return the real starting point PVCoordinates on the Halo orbit after differential correction from a first guess.
+ * @param firstguess first guess PVCoordinates of the point to start differential correction
+ * @param syst CR3BP System considered
+ * @return pv Position-Velocity of the starting point on the Halo Orbit
+ */
+ public PVCoordinates differentialCorrection(final PVCoordinates firstguess,
+ final CR3BPSystem syst) {
+ //double iter = 0;
+ double dvxf;
+ double dvzf;
+
// Time settings
final AbsoluteDate initialDate =
new AbsoluteDate(1996, 06, 25, 0, 0, 00.000,
TimeScalesFactory.getUTC());
-
- // Get the Rotating Frame in which both primaries are orbiting around their common barycenter.
+
+ // Get the Rotating Frame in which both primaries are orbiting around
+ // their common barycenter.
final Frame rotatingFrame = syst.getRotatingFrame();
-
- PVCoordinates pv = firstGuess;
-
+
+ PVCoordinates pv = firstguess;
+
// !!!!!! NOT IN SECONDS !!!!! normalized time used in CR3BP calculation, treal = Tdim * t / (2 * pi)
final double integrationTime = 5;
@@ -148,70 +156,89 @@ public class HaloOrbit {
final double positionTolerance = 0.001;
final double velocityTolerance = 0.001;
final double massTolerance = 1.0e-6;
- final double[] vecAbsoluteTolerances =
- {
- positionTolerance, positionTolerance, positionTolerance,
- velocityTolerance, velocityTolerance, velocityTolerance,
- massTolerance
- };
+ final double[] vecAbsoluteTolerances = {positionTolerance, positionTolerance, positionTolerance, velocityTolerance, velocityTolerance, velocityTolerance, massTolerance };
final double[] vecRelativeTolerances =
new double[vecAbsoluteTolerances.length];
// Defining the numerical integrator that will be used by the propagator
- AdaptiveStepsizeIntegrator integrator =
+ final AdaptiveStepsizeIntegrator integrator =
new GraggBulirschStoerIntegrator(minStep, maxstep,
- vecAbsoluteTolerances,
- vecRelativeTolerances);
-
- final double maxcheck = 1;
- final double threshold = 0.001;
-
- do {
- // PVCoordinates linked to a Frame and a Date
- AbsolutePVCoordinates initialAbsPV =
- new AbsolutePVCoordinates(rotatingFrame, initialDate, pv);
-
- // Creating the initial spacecraftstate that will be given to the
- // propagator
- SpacecraftState initialState =
- new SpacecraftState(initialAbsPV);
-
- STMEquations stm = new STMEquations(syst);
- SpacecraftState augmentedInitialState = stm.setInitialPhi(initialState);
-
- EventDetector yPlaneCrossing =
- new XZPlaneCrossingDetector(maxcheck, threshold).withHandler(new planeCrossingHandler());
-
- NumericalPropagator propagator = new NumericalPropagator(integrator);
- propagator.setOrbitType(null); // No known orbit type can be linked to this propagation
- propagator.setIgnoreCentralAttraction(true); // The attraction in this problem is not central, mu is used differently
- propagator.addForceModel(new CR3BPForceModel(syst)); // Add our specific force model to the propagation, it has to be propagated in the rotating frame*
- propagator.addAdditionalEquations(stm);
- propagator.setInitialState(augmentedInitialState);
- propagator.addEventDetector(yPlaneCrossing);
-
- SpacecraftState finalState = propagator.propagate(initialDate.shiftedBy(integrationTime));
- RealMatrix phi = stm.getStateTransitionMatrix(finalState);
-
- dvxf = -finalState.getPVCoordinates().getVelocity().getX();
- dvzf = -finalState.getPVCoordinates().getVelocity().getZ();
- System.out.println(dvxf);
- //System.out.println(dvzf);
- //System.out.println(finalState.getPVCoordinates().getPosition().getY());
- double Mdet = phi.getEntry(3, 0) * phi.getEntry(5, 4) - phi.getEntry(5, 0) * phi.getEntry(3, 4);
-
- double deltax0 = (phi.getEntry(5, 4) * dvxf - phi.getEntry(3, 4) * dvzf) / Mdet ; //dx0
- double deltavy0 = (-phi.getEntry(5, 0) * dvxf + phi.getEntry(3, 0) * dvzf) / Mdet ; //dvy0
-
- double newx = pv.getPosition().getX() + deltax0;
- double newvy = pv.getVelocity().getY() + deltavy0;
-
- pv = new PVCoordinates( new Vector3D(newx,pv.getPosition().getY(),pv.getPosition().getZ()), new Vector3D(pv.getVelocity().getX(),newvy,pv.getVelocity().getZ()));
- ++iter;
- }while(FastMath.abs(dvxf) > 1E-5 || FastMath.abs(dvzf) > 1E-5);
-
- System.out.println(iter);
- return pv;
+ vecAbsoluteTolerances,
+ vecRelativeTolerances);
+
+ final double maxcheck = 1;
+ final double threshold = 0.001;
+
+ do {
+ // PVCoordinates linked to a Frame and a Date
+ final AbsolutePVCoordinates initialAbsPV =
+ new AbsolutePVCoordinates(rotatingFrame, initialDate, pv);
+
+ // Creating the initial spacecraftstate that will be given to the
+ // propagator
+ final SpacecraftState initialState = new SpacecraftState(initialAbsPV);
+
+ final STMEquations stm = new STMEquations(syst);
+ final SpacecraftState augmentedInitialState =
+ stm.setInitialPhi(initialState);
+
+ final EventDetector yPlaneCrossing =
+ new XZPlaneCrossingDetector(maxcheck, threshold)
+ .withHandler(new planeCrossingHandler());
+
+ final NumericalPropagator propagator =
+ new NumericalPropagator(integrator);
+ propagator.setOrbitType(null); // No known orbit type can be linked
+ // to this propagation
+ propagator.setIgnoreCentralAttraction(true); // The attraction in
+ // this problem is not
+ // central, mu is used
+ // differently
+ propagator.addForceModel(new CR3BPForceModel(syst)); // Add our
+ // specific
+ // force model
+ // to the
+ // propagation,
+ // it has to be
+ // propagated
+ // in the
+ // rotating
+ // frame*
+ propagator.addAdditionalEquations(stm);
+ propagator.setInitialState(augmentedInitialState);
+ propagator.addEventDetector(yPlaneCrossing);
+
+ final SpacecraftState finalState =
+ propagator.propagate(initialDate.shiftedBy(integrationTime));
+ final RealMatrix phi = stm.getStateTransitionMatrix(finalState);
+
+ dvxf = -finalState.getPVCoordinates().getVelocity().getX();
+ dvzf = -finalState.getPVCoordinates().getVelocity().getZ();
+ // System.out.println(dvxf);
+ // System.out.println(dvzf);
+ // System.out.println(finalState.getPVCoordinates().getPosition().getY());
+ final double Mdet =
+ phi.getEntry(3, 0) * phi.getEntry(5, 4) -
+ phi.getEntry(5, 0) * phi.getEntry(3, 4);
+
+ final double deltax0 =
+ (phi.getEntry(5, 4) * dvxf - phi.getEntry(3, 4) * dvzf) / Mdet; // dx0
+ final double deltavy0 =
+ (-phi.getEntry(5, 0) * dvxf + phi.getEntry(3, 0) * dvzf) / Mdet; // dvy0
+
+ final double newx = pv.getPosition().getX() + deltax0;
+ final double newvy = pv.getVelocity().getY() + deltavy0;
+
+ pv =
+ new PVCoordinates(new Vector3D(newx, pv.getPosition().getY(),
+ pv.getPosition().getZ()),
+ new Vector3D(pv.getVelocity().getX(), newvy,
+ pv.getVelocity().getZ()));
+ //++iter;
+ } while (FastMath.abs(dvxf) > 1E-5 || FastMath.abs(dvzf) > 1E-5);
+
+ //System.out.println(iter);
+ return pv;
}
/** Return the manifold vector.
@@ -220,25 +247,25 @@ public class HaloOrbit {
* @param p
* @return manifold first guess Position-Velocity of a point on the Halo Orbit
*/
- /*public PVCoordinates getManifolds(PVCoordinates pva, RealMatrix phi, CR3BPSystem syst) {
-
- final RealVector unstableManifoldEigen =
- new EigenDecomposition(phi).getEigenvector(0);
- final RealVector stableManifoldEigen =
- new EigenDecomposition(phi).getEigenvector(1);
-
-
- }
- */
+ /*
+ * public PVCoordinates getManifolds(PVCoordinates pva, RealMatrix phi,
+ * CR3BPSystem syst) { final RealVector unstableManifoldEigen = new
+ * EigenDecomposition(phi).getEigenvector(0); final RealVector
+ * stableManifoldEigen = new EigenDecomposition(phi).getEigenvector(1); }
+ */
+
+ /** Static class for event detection.
+ */
private static class planeCrossingHandler
- implements
- EventHandler {
-
- public Action eventOccurred(final SpacecraftState s,
- final XZPlaneCrossingDetector detector,
- final boolean increasing) {
- return Action.STOP;
- }
+ implements
+ EventHandler {
+
+ /** {@inheritDoc} */
+ public Action eventOccurred(final SpacecraftState s,
+ final XZPlaneCrossingDetector detector,
+ final boolean increasing) {
+ return Action.STOP;
+ }
}
}
diff --git a/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java b/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java
index dee3a8071..a03ff4dfd 100644
--- a/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java
+++ b/src/main/java/org/orekit/propagation/events/XZPlaneCrossingDetector.java
@@ -1,35 +1,41 @@
+/* Copyright 2002-2019 CS Systèmes d'Information
+ * Licensed to CS Systèmes d'Information (CS) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * CS licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.orekit.propagation.events;
import org.orekit.propagation.SpacecraftState;
import org.orekit.propagation.events.handlers.EventHandler;
import org.orekit.propagation.events.handlers.StopOnIncreasing;
+/** Detector for XZ Plane crossing.
+ * @author Vincent Mouraux
+ */
public class XZPlaneCrossingDetector
extends
AbstractDetector {
-
- public XZPlaneCrossingDetector(final double maxCheck, final double threshold) {
- this(maxCheck, threshold, DEFAULT_MAX_ITER,
- new StopOnIncreasing());
- }
-
- private XZPlaneCrossingDetector(final double maxCheck, final double threshold,
- final int maxIter,
- final EventHandler super XZPlaneCrossingDetector> handler) {
- super(maxCheck, threshold, maxIter, handler);
- }
/**
- * Build a new instance.
- *
- * The orbit is used only to set an upper bound for the max check interval
- * to period/3
- *
- *
+ * Simple Constructor.
+ * @param maxCheck maximum checking interval (s)
* @param threshold convergence threshold (s)
- * @param orbit initial orbit
*/
-
+ public XZPlaneCrossingDetector(final double maxCheck, final double threshold) {
+ this(maxCheck, threshold, DEFAULT_MAX_ITER,
+ new StopOnIncreasing());
+ }
/**
* Private constructor with full parameters.
@@ -38,22 +44,43 @@ public class XZPlaneCrossingDetector
* with the various {@code withXxx()} methods to set up the instance in a
* readable manner without using a huge amount of parameters.
*
- *
* @param maxCheck maximum checking interval (s)
* @param threshold convergence threshold (s)
* @param maxIter maximum number of iterations in the event time search
* @param handler event handler to call at event occurrences
- * @since 6.1
*/
-
+ private XZPlaneCrossingDetector(final double maxCheck, final double threshold,
+ final int maxIter,
+ final EventHandler super XZPlaneCrossingDetector> handler) {
+ super(maxCheck, threshold, maxIter, handler);
+ }
+
+ /** {@inheritDoc} */
+ @Override
protected XZPlaneCrossingDetector
create(final double newMaxCheck, final double newThreshold,
final int newMaxIter,
final EventHandler super XZPlaneCrossingDetector> newHandler) {
return new XZPlaneCrossingDetector(newMaxCheck, newThreshold, newMaxIter,
- newHandler );
+ newHandler);
}
+ /** Compute the value of the detection function.
+ *
+ * The value is the longitude difference between the spacecraft and the fixed
+ * longitude to be crossed, with some sign tweaks to ensure continuity.
+ * These tweaks imply the {@code increasing} flag in events detection becomes
+ * irrelevant here! As an example, the longitude of a prograde spacecraft
+ * will always increase, but this g function will increase and decrease so it
+ * will cross the zero value once per orbit, in increasing and decreasing
+ * directions on alternate orbits. If eastwards and westwards crossing have to
+ * be distinguished, the velocity direction has to be checked instead of looking
+ * at the {@code increasing} flag.
+ *
+ * @param s the current state information: date, kinematics, attitude
+ * @return longitude difference between the spacecraft and the fixed
+ * longitude, with some sign tweaks to ensure continuity
+ */
public double g(final SpacecraftState s) {
return s.getPVCoordinates().getPosition().getY();
diff --git a/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java b/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java
index 0ed0765f1..0b3429b8b 100644
--- a/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java
+++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java
@@ -150,15 +150,19 @@ public class STMEquations
return name;
}
+ /** Method returning the STM.
+ * @param s Initial state of the system
+ * @return phiM State Transition Matrix
+ */
public RealMatrix getStateTransitionMatrix(final SpacecraftState s) {
- final double[][] phi2dA = new double[6][6];
- final double[] stm= s.getAdditionalState(getName());
+ final double[][] phi2dA = new double[6][6];
+ final double[] stm = s.getAdditionalState(getName());
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
phi2dA[i][j] = stm[6 * i + j];
}
}
- final RealMatrix phiM = new Array2DRowRealMatrix(phi2dA, false);
- return phiM;
+ final RealMatrix phiM = new Array2DRowRealMatrix(phi2dA, false);
+ return phiM;
}
}
--
GitLab
From 1f2dd95b65c3386d3e29f2f85dca052205741b99 Mon Sep 17 00:00:00 2001
From: Vincent Mouraux
Date: Thu, 13 Jun 2019 13:54:37 +0200
Subject: [PATCH 007/202] Implement Halo Orbits computation.
---
build.xml | 311 +-
checkstyle.xml | 209 +-
pom.xml | 1653 +-
spotbugs-exclude-filter.xml | 560 +-
src/changes/changes.xml | 6427 ++--
.../assembly/source-distribution-assembly.xml | 50 +-
src/main/assembly/source-jar-assembly.xml | 44 +-
.../java/org/orekit/bodies/CR3BPSystem.java | 14 +-
.../java/org/orekit/orbits/HaloOrbit.java | 199 +-
.../orbits/RichardsonExpansionContext.java | 46 +-
.../cr3bp/{forces => }/CR3BPForceModel.java | 45 +-
.../numerical/cr3bp/STMEquations.java | 30 +-
.../numerical/cr3bp/forces/package-info.java | 20 -
.../utils/CR3BPDifferentialCorrection.java | 219 +
src/site/site.xml | 127 +-
.../org/orekit/bodies/CR3BPSystemTest.java | 30 +-
.../orekit/forces/CR3BPForceModelTest.java | 125 +-
.../ccsds/XML/TDM-data-inconsistent-block.xml | 116 +-
.../XML/TDM-data-number-format-error.xml | 114 +-
.../ccsds/XML/TDM-data-wrong-keyword.xml | 114 +-
.../XML/TDM-inconsistent-time-systems.xml | 262 +-
.../XML/TDM-metadata-number-format-error.xml | 114 +-
...DM-metadata-timesystem-not-implemented.xml | 114 +-
.../ccsds/XML/TDM-metadata-wrong-keyword.xml | 114 +-
src/test/resources/ccsds/XML/TDMExample15.xml | 272 +-
src/test/resources/ccsds/XML/TDMExample2.xml | 118 +-
src/test/resources/ccsds/XML/TDMExample4.xml | 232 +-
src/test/resources/ccsds/XML/TDMExample6.xml | 220 +-
src/test/resources/ccsds/XML/TDMExample8.xml | 266 +-
.../ccsds/XML/TDMExampleAllKeywords.xml | 414 +-
.../resources/rapid-data-xml/finals.daily.xml | 835 +-
.../rapid-data-xml/finals2000A.daily.xml | 445 +-
.../yearly/finals2000A.2002.xml | 25557 ++++++++--------
33 files changed, 20027 insertions(+), 19389 deletions(-)
rename src/main/java/org/orekit/propagation/numerical/cr3bp/{forces => }/CR3BPForceModel.java (79%)
delete mode 100644 src/main/java/org/orekit/propagation/numerical/cr3bp/forces/package-info.java
create mode 100644 src/main/java/org/orekit/utils/CR3BPDifferentialCorrection.java
diff --git a/build.xml b/build.xml
index a1ea0b788..358455697 100644
--- a/build.xml
+++ b/build.xml
@@ -2,142 +2,179 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/checkstyle.xml b/checkstyle.xml
index a5b479a4d..6e7ba954c 100644
--- a/checkstyle.xml
+++ b/checkstyle.xml
@@ -3,108 +3,121 @@
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ SR_ASSIGN, STAR, STAR_ASSIGN" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 22036174d..144ea53a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,846 +1,847 @@
- 4.0.0
- org.orekit
- orekit
- jar
- 10.0-SNAPSHOT
- ORbit Extrapolation KIT
- http://www.orekit.org/
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ 4.0.0
+ org.orekit
+ orekit
+ jar
+ 10.0-SNAPSHOT
+ ORbit Extrapolation KIT
+ http://www.orekit.org/
- 2002
-
+ 2002
+
OREKIT (ORbits Extrapolation KIT) is a low level space dynamics library.
It provides basic elements (orbits, dates, attitude, frames ...) and
various algorithms to handle them (conversions, analytical and numerical
propagation, pointing ...).
-
- UTF-8
- UTF-8
- 3.1.7
- 0.8.2
- 3.1.0
- 4.1.0
- 2.12.1
- 3.0.0
- 8.18
- 3.1.0
- 3.8.0
- 3.0.1
- 3.1.0
- 3.0.0
- 1.2
- 1.2018.12
- 3.0.0
- 3.1.0
- 3.7.1
- 3.0.1
- 2.22.1
- 2.22.1
- 2.23.0
- 1.2.10
- 3.0.0
- 1.6.8
- 1.6
- 3.0.0-M1
- 1.5
- 4.12
- 1.8
- 1.8
- ${git.revision}; ${maven.build.timestamp}
-
+
+ UTF-8
+ UTF-8
+ 3.1.7
+ 0.8.2
+ 3.1.0
+ 4.1.0
+ 2.12.1
+ 3.0.0
+ 8.18
+ 3.1.0
+ 3.8.0
+ 3.0.1
+ 3.1.0
+ 3.0.0
+ 1.2
+ 1.2018.12
+ 3.0.0
+ 3.1.0
+ 3.7.1
+ 3.0.1
+ 2.22.1
+ 2.22.1
+ 2.23.0
+ 1.2.10
+ 3.0.0
+ 1.6.8
+ 1.6
+ 3.0.0-M1
+ 1.5
+ 4.12
+ 1.8
+ 1.8
+ ${git.revision}; ${maven.build.timestamp}
+
-
-
- Luc Maisonobe
- luc
-
- architect
- developer
-
-
-
- Thierry Ceolin
- thierry
-
- developer
-
-
-
- Romain Di Costanzo
- romain
-
- developer
-
-
-
- Romain Garmier
-
- developer
-
-
-
- Hank Grabowski
- hankg
-
- developer
-
-
-
- Maxime Journot
- maxime
-
- developer
-
-
-
- Fabien Maussion
-
- developer
-
-
-
- Pascal Parraud
- pascal
-
- developer
-
-
-
- Véronique Pommier-Maurussane
- véronique
-
- developer
-
-
-
- Guylaine Prat
- guylaine
-
- developer
-
-
-
- Aude Privat
- aude
-
- developer
-
-
-
- Bruno Revelin
- bruno
-
- developer
-
-
-
- Thomas Neidhart
- thomas
-
- developer
-
-
-
- Evan Ward
- evan
-
- developer
-
-
-
+
+
+ Luc Maisonobe
+ luc
+
+ architect
+ developer
+
+
+
+ Thierry Ceolin
+ thierry
+
+ developer
+
+
+
+ Romain Di Costanzo
+ romain
+
+ developer
+
+
+
+ Romain Garmier
+
+ developer
+
+
+
+ Hank Grabowski
+ hankg
+
+ developer
+
+
+
+ Maxime Journot
+ maxime
+
+ developer
+
+
+
+ Fabien Maussion
+
+ developer
+
+
+
+ Pascal Parraud
+ pascal
+
+ developer
+
+
+
+ Véronique Pommier-Maurussane
+ véronique
+
+ developer
+
+
+
+ Guylaine Prat
+ guylaine
+
+ developer
+
+
+
+ Aude Privat
+ aude
+
+ developer
+
+
+
+ Bruno Revelin
+ bruno
+
+ developer
+
+
+
+ Thomas Neidhart
+ thomas
+
+ developer
+
+
+
+ Evan Ward
+ evan
+
+ developer
+
+
+
-
-
- Roberto Alacevich
-
-
- Albert Alcarraz García
-
-
- Daniel Aguilar Taboada
-
-
- Lucian Bărbulescu
-
-
- Petre Bazavan
-
-
- Nicolas Bernard
-
-
- Espen Bjørntvedt
-
-
- Bryan Cazabonne
-
-
- Paul Cefola
-
-
- Francesco Coccoluto
-
-
- Édouard Delente
-
-
- Christine Fernandez-Martin
-
-
- James Housden
-
-
- Yannick Jeandroz
-
-
- François-Xavier Laffont
-
-
- Lars Næsbye Christensen
-
-
- Steven Ports
-
-
- Silvia Ríos Bergantiños
-
-
- Francesco Rocca
-
-
- Mathieu Roméro
-
-
- Beatriz Salazar García
-
-
- Ioanna Stypsanelli
-
-
- Michael Turner
-
-
+
+
+ Roberto Alacevich
+
+
+ Albert Alcarraz García
+
+
+ Daniel Aguilar Taboada
+
+
+ Lucian Bărbulescu
+
+
+ Petre Bazavan
+
+
+ Nicolas Bernard
+
+
+ Espen Bjørntvedt
+
+
+ Bryan Cazabonne
+
+
+ Paul Cefola
+
+
+ Francesco Coccoluto
+
+
+ Édouard Delente
+
+
+ Christine Fernandez-Martin
+
+
+ James Housden
+
+
+ Yannick Jeandroz
+
+
+ François-Xavier Laffont
+
+
+ Lars Næsbye Christensen
+
+
+ Steven Ports
+
+
+ Silvia Ríos Bergantiños
+
+
+ Francesco Rocca
+
+
+ Mathieu Roméro
+
+
+ Beatriz Salazar García
+
+
+ Ioanna Stypsanelli
+
+
+ Michael Turner
+
+
-
- CS Systèmes d'Information
- http://www.c-s.fr/
-
+
+ CS Systèmes d'Information
+ http://www.c-s.fr/
+
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
-
-
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+
+
-
- scm:git:https://gitlab.orekit.org/orekit/orekit.git
- scm:git:ssh://git@gitlab.orekit.org/orekit/orekit.git
- https://gitlab.orekit.org/orekit/orekit/tree/master
-
+
+ scm:git:https://gitlab.orekit.org/orekit/orekit.git
+ scm:git:ssh://git@gitlab.orekit.org/orekit/orekit.git
+ https://gitlab.orekit.org/orekit/orekit/tree/master
+
-
- Gitlab
- https://gitlab.orekit.org/orekit/orekit/issues
-
+
+ Gitlab
+ https://gitlab.orekit.org/orekit/orekit/issues
+
-
-
- org.hipparchus
- hipparchus-core
- ${orekit.hipparchus.version}
- jar
- false
-
-
- org.hipparchus
- hipparchus-geometry
- ${orekit.hipparchus.version}
-
-
- org.hipparchus
- hipparchus-ode
- ${orekit.hipparchus.version}
- jar
- false
-
-
- org.hipparchus
- hipparchus-fitting
- ${orekit.hipparchus.version}
- jar
- false
-
-
- org.hipparchus
- hipparchus-optim
- ${orekit.hipparchus.version}
- jar
- false
-
-
- org.hipparchus
- hipparchus-filtering
- ${orekit.hipparchus.version}
- jar
- false
-
-
- org.hipparchus
- hipparchus-stat
- ${orekit.hipparchus.version}
-
-
-
- org.mockito
- mockito-core
- ${orekit.mockito-core.version}
- test
-
-
- junit
- junit
- ${orekit.junit.version}
- jar
- test
- false
-
-
+
+
+ org.hipparchus
+ hipparchus-core
+ ${orekit.hipparchus.version}
+ jar
+ false
+
+
+ org.hipparchus
+ hipparchus-geometry
+ ${orekit.hipparchus.version}
+
+
+ org.hipparchus
+ hipparchus-ode
+ ${orekit.hipparchus.version}
+ jar
+ false
+
+
+ org.hipparchus
+ hipparchus-fitting
+ ${orekit.hipparchus.version}
+ jar
+ false
+
+
+ org.hipparchus
+ hipparchus-optim
+ ${orekit.hipparchus.version}
+ jar
+ false
+
+
+ org.hipparchus
+ hipparchus-filtering
+ ${orekit.hipparchus.version}
+ jar
+ false
+
+
+ org.hipparchus
+ hipparchus-stat
+ ${orekit.hipparchus.version}
+
+
+
+ org.mockito
+ mockito-core
+ ${orekit.mockito-core.version}
+ test
+
+
+ junit
+ junit
+ ${orekit.junit.version}
+ jar
+ test
+ false
+
+
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${orekit.maven-compiler-plugin.version}
-
- ${orekit.compiler.source}
- ${orekit.compiler.target}
- -Xlint:deprecation
-
-
-
- maven-assembly-plugin
- ${orekit.maven-assembly-plugin.version}
-
-
- src/main/assembly/source-jar-assembly.xml
- src/main/assembly/source-distribution-assembly.xml
-
-
-
-
- org.apache.felix
- maven-bundle-plugin
- ${orekit.maven-bundle-plugin.version}
- true
-
-
- true
-
- ${project.build.directory}/osgi
-
- org.orekit.*;version=${project.version};-noimport:=true
- ${project.url}
-
-
-
-
- bundle-manifest
- process-classes
-
- manifest
-
-
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- ${orekit.maven-resources-plugin.version}
-
-
- process-resources
-
- copy-resources
-
-
- ${project.build.outputDirectory}/META-INF
-
-
- .
-
- LICENSE.txt
- NOTICE.txt
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-clean-plugin
- ${orekit.maven-clean-plugin.version}
-
-
- org.apache.maven.plugins
- maven-site-plugin
- ${orekit.maven-site-plugin.version}
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${orekit.maven-surefire-plugin.version}
-
-
- org.apache.maven.plugins
- maven-changes-plugin
- ${orekit.maven-changes-plugin.version}
-
-
- org.apache.maven.plugins
- maven-jxr-plugin
- ${orekit.maven-jxr-plugin.version}
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- ${orekit.maven-javadoc-plugin.version}
-
- ${basedir}/src/main/java/org/orekit/overview.html
- CS Systèmes d'information. All rights reserved.]]>
-
- https://docs.oracle.com/javase/8/docs/api/
- https://www.hipparchus.org/apidocs/
-
- ${orekit.compiler.source}
-
-
-
- org.jacoco
- jacoco-maven-plugin
- ${orekit.jacoco-maven-plugin.version}
-
-
- prepare-agent
- process-test-classes
-
- prepare-agent
-
-
-
- fr/cs/examples/**/*.class
-
-
-
-
- report
- site
-
- report
-
-
-
- fr/cs/examples/**/*.class
-
-
-
-
- check
-
- check
-
-
-
-
- BUNDLE
-
-
- CLASS
- COVEREDRATIO
- 1.00
-
-
- INSTRUCTION
- COVEREDRATIO
- 0.90
-
-
- METHOD
- COVEREDRATIO
- 0.95
-
-
- BRANCH
- COVEREDRATIO
- 0.85
-
-
- COMPLEXITY
- COVEREDRATIO
- 0.85
-
-
- LINE
- COVEREDRATIO
- 0.90
-
-
-
-
- false
-
- fr/cs/examples/**/*.class
-
-
-
-
-
-
- com.github.jeluard
- plantuml-maven-plugin
- ${orekit.plantuml-maven-plugin.version}
-
-
- ${basedir}/src/design
-
-
- *.puml
-
-
-
-
- ${project.build.directory}/site/images/design
-
-
-
-
- net.sourceforge.plantuml
- plantuml
- ${orekit.plantuml.version}
-
-
-
-
- pre-site
-
- generate
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${orekit.maven-jar-plugin.version}
-
-
- ${project.build.directory}/osgi/MANIFEST.MF
-
- ${orekit.compiler.source}
- ${orekit.compiler.target}
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- ${orekit.maven-checkstyle-plugin.version}
-
-
- com.puppycrawl.tools
- checkstyle
- ${orekit.checkstyle.version}
-
-
-
- ${basedir}/checkstyle.xml
- false
- ${basedir}/license-header.txt
-
-
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${orekit.maven-compiler-plugin.version}
+
+ ${orekit.compiler.source}
+ ${orekit.compiler.target}
+ -Xlint:deprecation
+
+
+
+ maven-assembly-plugin
+ ${orekit.maven-assembly-plugin.version}
+
+
+ src/main/assembly/source-jar-assembly.xml
+ src/main/assembly/source-distribution-assembly.xml
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ ${orekit.maven-bundle-plugin.version}
+ true
+
+
+ true
+
+ ${project.build.directory}/osgi
+
+ org.orekit.*;version=${project.version};-noimport:=true
+ ${project.url}
+
+
+
+
+ bundle-manifest
+ process-classes
+
+ manifest
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ ${orekit.maven-resources-plugin.version}
+
+
+ process-resources
+
+ copy-resources
+
+
+ ${project.build.outputDirectory}/META-INF
+
+
+ .
+
+ LICENSE.txt
+ NOTICE.txt
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ ${orekit.maven-clean-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-site-plugin
+ ${orekit.maven-site-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${orekit.maven-surefire-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-changes-plugin
+ ${orekit.maven-changes-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-jxr-plugin
+ ${orekit.maven-jxr-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${orekit.maven-javadoc-plugin.version}
+
+ ${basedir}/src/main/java/org/orekit/overview.html
+ CS Systèmes d'information. All rights reserved.]]>
+
+ https://docs.oracle.com/javase/8/docs/api/
+ https://www.hipparchus.org/apidocs/
+
+ ${orekit.compiler.source}
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ ${orekit.jacoco-maven-plugin.version}
+
+
+ prepare-agent
+ process-test-classes
+
+ prepare-agent
+
+
+
+ fr/cs/examples/**/*.class
+
+
+
+
+ report
+ site
+
+ report
+
+
+
+ fr/cs/examples/**/*.class
+
+
+
+
+ check
+
+ check
+
+
+
+
+ BUNDLE
+
+
+ CLASS
+ COVEREDRATIO
+ 1.00
+
+
+ INSTRUCTION
+ COVEREDRATIO
+ 0.90
+
+
+ METHOD
+ COVEREDRATIO
+ 0.95
+
+
+ BRANCH
+ COVEREDRATIO
+ 0.85
+
+
+ COMPLEXITY
+ COVEREDRATIO
+ 0.85
+
+
+ LINE
+ COVEREDRATIO
+ 0.90
+
+
+
+
+ false
+
+ fr/cs/examples/**/*.class
+
+
+
+
+
+
+ com.github.jeluard
+ plantuml-maven-plugin
+ ${orekit.plantuml-maven-plugin.version}
+
+
+ ${basedir}/src/design
+
+
+ *.puml
+
+
+
+
+ ${project.build.directory}/site/images/design
+
+
+
+
+ net.sourceforge.plantuml
+ plantuml
+ ${orekit.plantuml.version}
+
+
+
+
+ pre-site
+
+ generate
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${orekit.maven-jar-plugin.version}
+
+
+ ${project.build.directory}/osgi/MANIFEST.MF
+
+ ${orekit.compiler.source}
+ ${orekit.compiler.target}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${orekit.maven-checkstyle-plugin.version}
+
+
+ com.puppycrawl.tools
+ checkstyle
+ ${orekit.checkstyle.version}
+
+
+
+ ${basedir}/checkstyle.xml
+ false
+ ${basedir}/license-header.txt
+
+
+
+
-
-
-
- org.apache.maven.plugins
- maven-site-plugin
- ${orekit.maven-site-plugin.version}
-
-
- org.apache.maven.plugins
- maven-project-info-reports-plugin
- ${orekit.maven-project-info-reports-plugin.version}
-
-
- com.github.spotbugs
- spotbugs-maven-plugin
- ${orekit.spotbugs-maven-plugin.version}
-
- Normal
- Default
- ${basedir}/spotbugs-exclude-filter.xml
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${orekit.maven-surefire-plugin.version}
-
-
- org.apache.maven.plugins
- maven-surefire-report-plugin
- ${orekit.maven-surefire-report-plugin.version}
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- ${orekit.maven-checkstyle-plugin.version}
-
- ${basedir}/checkstyle.xml
- false
- ${basedir}/license-header.txt
-
-
-
-
- checkstyle
-
-
-
-
-
- org.apache.maven.plugins
- maven-changes-plugin
- ${orekit.maven-changes-plugin.version}
-
-
-
- changes-report
-
-
-
-
-
- org.apache.maven.plugins
- maven-jxr-plugin
- ${orekit.maven-jxr-plugin.version}
-
- false
- CS Systèmes d'information. All rights reserved.]]>
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- ${orekit.maven-javadoc-plugin.version}
-
- ${basedir}/src/main/java/org/orekit/overview.html
- CS Systèmes d'information. All rights reserved.]]>
-
- https://docs.oracle.com/javase/8/docs/api/
- https://www.hipparchus.org/apidocs/
-
- ${orekit.compiler.source}
-
-
-
-
- javadoc
-
-
-
-
-
- org.jacoco
- jacoco-maven-plugin
- ${orekit.jacoco-maven-plugin.version}
-
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-site-plugin
+ ${orekit.maven-site-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-project-info-reports-plugin
+ ${orekit.maven-project-info-reports-plugin.version}
+
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+ ${orekit.spotbugs-maven-plugin.version}
+
+ Normal
+ Default
+ ${basedir}/spotbugs-exclude-filter.xml
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${orekit.maven-surefire-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-surefire-report-plugin
+ ${orekit.maven-surefire-report-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ ${orekit.maven-checkstyle-plugin.version}
+
+ ${basedir}/checkstyle.xml
+ false
+ ${basedir}/license-header.txt
+
+
+
+
+ checkstyle
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-changes-plugin
+ ${orekit.maven-changes-plugin.version}
+
+
+
+ changes-report
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jxr-plugin
+ ${orekit.maven-jxr-plugin.version}
+
+ false
+ CS Systèmes d'information. All rights reserved.]]>
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${orekit.maven-javadoc-plugin.version}
+
+ ${basedir}/src/main/java/org/orekit/overview.html
+ CS Systèmes d'information. All rights reserved.]]>
+
+ https://docs.oracle.com/javase/8/docs/api/
+ https://www.hipparchus.org/apidocs/
+
+ ${orekit.compiler.source}
+
+
+
+
+ javadoc
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ ${orekit.jacoco-maven-plugin.version}
+
+
+
-
-
- git
-
-
- .git
-
-
-
-
-
- ru.concerteza.buildnumber
- maven-jgit-buildnumber-plugin
- ${orekit.jgit.buildnumber.version}
-
-
- prepare-package
-
- extract-buildnumber
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${orekit.maven-jar-plugin.version}
-
-
- ${project.build.directory}/osgi/MANIFEST.MF
-
- ${orekit.implementation.build}
- ${orekit.compiler.source}
- ${orekit.compiler.target}
-
-
-
-
-
-
-
-
- release
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- ${orekit.maven-source-plugin.version}
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- ${orekit.maven-javadoc-plugin.version}
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- ${orekit.nexus-staging-maven-plugin.version}
- true
-
- ossrh
- https://oss.sonatype.org/
- false
-
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
- ${orekit.build-helper-maven-plugin.version}
-
-
- attach-artifacts
- verify
-
- attach-artifact
-
-
-
-
- ${basedir}/target/orekit-${project.version}-sources.jar
- source-jar
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- ${orekit.maven-gpg-plugin.version}
-
-
- --digest-algo=SHA512
-
-
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
-
- org.apache.maven.plugins
- maven-install-plugin
- ${orekit.maven-install-plugin.version}
-
- true
-
-
-
-
-
-
- eclipse
-
-
- m2e.version
-
-
-
-
-
-
-
- org.eclipse.m2e
- lifecycle-mapping
- 1.0.0
-
-
-
-
-
- org.apache.felix
- maven-bundle-plugin
- [${orekit.maven-bundle-plugin.version},)
-
- manifest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ git
+
+
+ .git
+
+
+
+
+
+ ru.concerteza.buildnumber
+ maven-jgit-buildnumber-plugin
+ ${orekit.jgit.buildnumber.version}
+
+
+ prepare-package
+
+ extract-buildnumber
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${orekit.maven-jar-plugin.version}
+
+
+ ${project.build.directory}/osgi/MANIFEST.MF
+
+ ${orekit.implementation.build}
+ ${orekit.compiler.source}
+ ${orekit.compiler.target}
+
+
+
+
+
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${orekit.maven-source-plugin.version}
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${orekit.maven-javadoc-plugin.version}
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ ${orekit.nexus-staging-maven-plugin.version}
+ true
+
+ ossrh
+ https://oss.sonatype.org/
+ false
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ ${orekit.build-helper-maven-plugin.version}
+
+
+ attach-artifacts
+ verify
+
+ attach-artifact
+
+
+
+
+ ${basedir}/target/orekit-${project.version}-sources.jar
+ source-jar
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ ${orekit.maven-gpg-plugin.version}
+
+
+ --digest-algo=SHA512
+
+
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-install-plugin
+ ${orekit.maven-install-plugin.version}
+
+ true
+
+
+
+
+
+
+ eclipse
+
+
+ m2e.version
+
+
+
+
+
+
+
+ org.eclipse.m2e
+ lifecycle-mapping
+ 1.0.0
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ [${orekit.maven-bundle-plugin.version},)
+
+ manifest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spotbugs-exclude-filter.xml b/spotbugs-exclude-filter.xml
index c647079ae..d8f2f86ba 100644
--- a/spotbugs-exclude-filter.xml
+++ b/spotbugs-exclude-filter.xml
@@ -1,283 +1,303 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8d4326fbb..d99b7e4a1 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -1,162 +1,176 @@
-
+
-
- Orekit Changes
-
-
-
-
- Fix some possible NPEs in AntexLoader, FieldAngularCoordinates.
-
-
- Fix locale dependent comparisons in SP3File, TDMParser, and YUMAParser.
-
-
- Ensure opened streams are closed in ZipJarCrawler, DTM2000, IERSConventions, and
- OceanLoadDeformationCoefficients.
-
-
- Add DSST Orbit Determination for both Kalman Filter and Batch Least Squares estimator.
-
-
- Add a events detector based on the geomagnetic field intensity at the satellite altitude
- or at sea level above the satellite, and the associated tests
-
-
- Deleted deprecated methods in EclipseDetector.
-
-
- Fix the bug of attitude transition with Ephemeris propagator
- by adding a way for the LocalPVProvider to get the attitude at the end of the transition
-
-
- Changing AbstractGNSSAttitudeProvider from public to package-private.
-
-
- Fix the bug of attitude transition with analytical propagator
- by refreshing the attitude after the events triggering
-
-
- Fix the bug of attitude transition if a reset occurs during the transition
- by adding margins to the reset of TimeSpanMap to keep the one corresponding to the "after" attitude law.
-
-
- Generalized the GPSPropagator class to handle all GNSS constellations using
- the same algorithm.
-
-
- Added numerical and analytical GLONASS propagators.
-
-
- Added ambiguity resolution for phase measurements.
- This feature is not complete yet and is considered experimental.
-
-
- Reorganized models package by adding new sub-packages.
-
-
- Updated Hipparchus dependency to version 1.5 in pom.xml file.
-
-
- Deleted unused DerivativeStructure acceleration computation methods.
- In interfaces radiationPressureAcceleration and dragAcceleration, and all their implementations and their tests.
-
-
- Fixed endless loop on GPSPropagator and (Field)KeplerianOrbit.
-
-
- Added tests for class UnivariateProcessNoise.
- Working tests for non-Cartesian orbit propagation are still needed.
-
-
- Deprecated unused DerivativeStructure acceleration computation methods.
- In interfaces radiationPressureAcceleration and dragAcceleration, and all their implementations and their tests.
-
-
- Take target radius into account in CircularFieldOfViewDetector and FieldOfViewDetector.
-
-
- Fixed DTM2000.getDensity method, made it independent of user time zone.
-
-
- Take occulting body flattening into account in eclipse detector.
-
-
- Fixed default method compareTo in interface ComparableMeasurement.
-
-
- Added Shapiro effect modifier for Range and InterSatelliteRange measurements.
-
-
- Fix type parametrization of AbstractDetector so that multiple with* methods can be
- called when the type parameter is '?'.
-
-
- Remove EventHandler.Action and FieldEventHandler.Action. Use
- org.hipparchus.ode.events.Action instead.
-
-
- Changed API for magnetic field model to a SI base unit API.
-
-
- OrekitException preserves the stack trace when formatting the message throws
- another exception.
-
-
- Event detectors, field of view and attitude providers are not serializable anymore.
-
-
- Replaced private class BilinearInterpolatingFunction of Saastamoinen model
- by the one of Hipparchus
-
-
- Add Action.RESET_EVENTS to check all detectors for events without recomputing the
- propagation step.
-
-
- Add Action.RESET_EVENTS to check all detectors for events without recomputing the
- propagation step.
-
-
- Add toString() implementations to SpacecraftState, RecordAndContinue.Event and
- Field versions.
-
-
- Add Field version of RecordAndContinue.
-
-
- Add Field version of LatitudeCrossingDetector.
-
-
- Removed classes and methods deprecated in the 9.X series.
-
-
- Fixed parsing of clock in SP3 files.
-
-
-
+
+ Fix some possible NPEs in AntexLoader, FieldAngularCoordinates.
+
+
+ Fix locale dependent comparisons in SP3File, TDMParser, and YUMAParser.
+
+
+ Ensure opened streams are closed in ZipJarCrawler, DTM2000,
+ IERSConventions, and
+ OceanLoadDeformationCoefficients.
+
+
+ Add DSST Orbit Determination for both Kalman Filter and Batch Least
+ Squares estimator.
+
+
+ Add a events detector based on the geomagnetic field intensity at the
+ satellite altitude
+ or at sea level above the satellite, and the associated tests
+
+
+ Deleted deprecated methods in EclipseDetector.
+
+
+ Fix the bug of attitude transition with Ephemeris propagator
+ by adding a way for the LocalPVProvider to get the attitude at the end
+ of the transition
+
+
+ Changing AbstractGNSSAttitudeProvider from public to package-private.
+
+
+ Fix the bug of attitude transition with analytical propagator
+ by refreshing the attitude after the events triggering
+
+
+ Fix the bug of attitude transition if a reset occurs during the
+ transition
+ by adding margins to the reset of TimeSpanMap to keep the one
+ corresponding to the "after" attitude law.
+
+
+ Generalized the GPSPropagator class to handle all GNSS constellations using
+ the same algorithm.
+
+
+ Added numerical and analytical GLONASS propagators.
+
+
+ Added ambiguity resolution for phase measurements.
+ This feature is not complete yet and is considered experimental.
+
+
+ Reorganized models package by adding new sub-packages.
+
+
+ Updated Hipparchus dependency to version 1.5 in pom.xml file.
+
+
+ Deleted unused DerivativeStructure acceleration computation methods.
+ In interfaces radiationPressureAcceleration and dragAcceleration, and
+ all their implementations and their tests.
+
+
+ Fixed endless loop on GPSPropagator and (Field)KeplerianOrbit.
+
+
+ Added tests for class UnivariateProcessNoise.
+ Working tests for non-Cartesian orbit propagation are still needed.
+
+
+ Deprecated unused DerivativeStructure acceleration computation methods.
+ In interfaces radiationPressureAcceleration and dragAcceleration, and
+ all their implementations and their tests.
+
+
+ Take target radius into account in CircularFieldOfViewDetector and
+ FieldOfViewDetector.
+
+
+ Fixed DTM2000.getDensity method, made it independent of user time zone.
+
+
+ Take occulting body flattening into account in eclipse detector.
+
+
+ Fixed default method compareTo in interface ComparableMeasurement.
+
+
+ Added Shapiro effect modifier for Range and InterSatelliteRange
+ measurements.
+
+
+ Fix type parametrization of AbstractDetector so that multiple with*
+ methods can be
+ called when the type parameter is '?'.
+
+
+ Remove EventHandler.Action and FieldEventHandler.Action. Use
+ org.hipparchus.ode.events.Action instead.
+
+
+ Changed API for magnetic field model to a SI base unit API.
+
+
+ OrekitException preserves the stack trace when formatting the message throws
+ another exception.
+
+
+ Event detectors, field of view and attitude providers are not
+ serializable anymore.
+
+
+ Replaced private class BilinearInterpolatingFunction of Saastamoinen model
+ by the one of Hipparchus
+
+
+ Add Action.RESET_EVENTS to check all detectors for events without
+ recomputing the
+ propagation step.
+
+
+ Add Action.RESET_EVENTS to check all detectors for events without
+ recomputing the
+ propagation step.
+
+
+ Add toString() implementations to SpacecraftState,
+ RecordAndContinue.Event and
+ Field versions.
+
+
+ Add Field version of RecordAndContinue.
+
+
+ Add Field version of LatitudeCrossingDetector.
+
+
+ Removed classes and methods deprecated in the 9.X series.
+
+
+ Fixed parsing of clock in SP3 files.
+
+
+
-
- Handle GPS week rollover in GPSDate.
-
-
-
+ Handle GPS week rollover in GPSDate.
+
+
+
-
- Added a way to manage clock corrections from GPSPropagator.
-
-
- Added several tropospheric models: Mendes-Pavlis, Vienna 1, Vienna 3, estimated model
- where the total zenith delay can be estimated during Orbit Determination.
-
-
- Added Global Mapping Function and Niell Mapping Function to be used with tropospheric
- models.
-
-
- Added clock offset parameter at satellites level for orbit determination.
-
-
- Added clock offset parameter at ground stations level for orbit determination.
-
-
- Added weather model Global Pressure and Temperature 2.
-
-
- Added weather model Global Pressure and Temperature.
-
-
- Fixed dropped derivatives in TimeStampedFieldPVCoordinates.shiftedBy(dt).
-
-
- Fixed scaling error in ParameterFunction differentiation.
-
-
- Fixed inconsistency leading to inaccuracies in conversions from AbsoluteDate to FieldAbsoluteDate.
-
-
- The MarshallSolarActivityFutureEstimation class implements
- the NRLMSISE00InputParameters interface.
-
-
- Make FieldTransform.shiftedBy(T) public.
-
-
- Fix JavaDoc for TimeComponents.getSecond().
-
-
- Deprecate GFunction in favor of ToDoubleFunction.
-
-
- Added a measurements generation feature for use with orbit determination.
- Fixes issue #494
-
-
- Added adapter for event detectors, allowing to wrap existing detector
- while changing their behaviour.
-
-
- Added ground at night detector.
-
-
- Added inter-satellites direct view detector.
-
-
- Added constants defined by IAU 2015 resolution B3 for Sun, Earth and Jupiter.
-
-
- Added retrieval of full time span (start time, end time and data) containing
- a specified date in TimeSpanMap.
- Fixes issue #500
-
-
- Added direct building of attitude provider from GNSS satellite type.
-
-
- Added parsing of unofficial versions 2.12 and 2.20 of Rinex files
- (used by some spaceborne receivers like IceSat 1).
-
-
- Added a way to retrieve Rinex header directly from the observations data set.
-
-
- Added position-only measurements in orbit determination.
-
-
- Allow parsing of SP3 files that use non-predefined orbit types.
- Fixes issue #491.
-
-
- Added access to Kalman filter matrices.
- KalmanEstimation interface now has methods returning the physical values of:
- state transition matrix phi, measurement matrix H, innovation matrix S and Kalman gain matrix K.
- The methods are implemented in Model class. A class ModelTest was added to test these values.
- Fixes issue #485
-
-
- Fixed error message for TLE with incorrect checksum.
- Fixes issue #492.
-
-
- Fixed reference value of parameter drivers updating in Kalman filter.
- When resetting the orbit in the propagator builder, the reference values
- of the drivers are now reset too.
- Fixes issue #490.
-
-
- Made ParameterDriver class fully mutable.
- By adding setters for attributes scale, reference, minimum and maximum values.
- Fixes issue #489.
-
-
- Fixed method unNormalizeStateVector in Model class of Kalman estimator.
- Previous value did not take into account the reference values of the drivers.
- Fixes issue #488.
-
-
- Changed OrekitException from checked to unchecked exception.
- Most functions do throw such exceptions. As they are unchecked, they are
- not advertised in either `throws` statements in the function signature or
- in the javadoc. So users must consider that as soon as they use any Orekit
- feature, an unchecked `OrekitException` may be thrown. In most cases, users
- will not attempt to recover for this but will only use them to display or
- log a meaningful error message.
- Fixes #484.
-
-
- Added GPSDate class to convert back and forth with AbsoluteDate.
- Fixes #480.
-
-
- Fix generics in EventEnablingPredicateFilter.
- Fixes #476.
-
-
- Fixed wrong values of radec generated in AngularRaDecMeasurementCreator.
- Fixed wrong values of range rate generated in RangeRateMeasurementCreator.
- Added tests that check the values of measurements for each type of measurement.
- Upgraded precision in Kalman and batch least-squares OD tests that are using range-rate and radec measurements.
- Fixes issue #473.
-
-
- Derivatives with respect to mass are not computed anymore since several versions,
- some remnants of former computation remained and have now been removed.
-
-
-
+ Added a way to manage clock corrections from GPSPropagator.
+
+
+ Added several tropospheric models: Mendes-Pavlis, Vienna 1, Vienna 3,
+ estimated model
+ where the total zenith delay can be estimated during Orbit Determination.
+
+
+ Added Global Mapping Function and Niell Mapping Function to be used with
+ tropospheric
+ models.
+
+
+ Added clock offset parameter at satellites level for orbit determination.
+
+
+ Added clock offset parameter at ground stations level for orbit
+ determination.
+
+
+ Added weather model Global Pressure and Temperature 2.
+
+
+ Added weather model Global Pressure and Temperature.
+
+
+ Fixed dropped derivatives in TimeStampedFieldPVCoordinates.shiftedBy(dt).
+
+
+ Fixed scaling error in ParameterFunction differentiation.
+
+
+ Fixed inconsistency leading to inaccuracies in conversions from
+ AbsoluteDate to FieldAbsoluteDate.
+
+
+ The MarshallSolarActivityFutureEstimation class implements
+ the NRLMSISE00InputParameters interface.
+
+
+ Make FieldTransform.shiftedBy(T) public.
+
+
+ Fix JavaDoc for TimeComponents.getSecond().
+
+
+ Deprecate GFunction in favor of ToDoubleFunction.
+
+
+ Added a measurements generation feature for use with orbit determination.
+ Fixes issue #494
+
+
+ Added adapter for event detectors, allowing to wrap existing detector
+ while changing their behaviour.
+
+
+ Added ground at night detector.
+
+
+ Added inter-satellites direct view detector.
+
+
+ Added constants defined by IAU 2015 resolution B3 for Sun, Earth and
+ Jupiter.
+
+
+ Added retrieval of full time span (start time, end time and data)
+ containing
+ a specified date in TimeSpanMap.
+ Fixes issue #500
+
+
+ Added direct building of attitude provider from GNSS satellite type.
+
+
+ Added parsing of unofficial versions 2.12 and 2.20 of Rinex files
+ (used by some spaceborne receivers like IceSat 1).
+
+
+ Added a way to retrieve Rinex header directly from the observations data
+ set.
+
+
+ Added position-only measurements in orbit determination.
+
+
+ Allow parsing of SP3 files that use non-predefined orbit types.
+ Fixes issue #491.
+
+
+ Added access to Kalman filter matrices.
+ KalmanEstimation interface now has methods returning the physical values of:
+ state transition matrix phi, measurement matrix H, innovation matrix S
+ and Kalman gain matrix K.
+ The methods are implemented in Model class. A class ModelTest was added
+ to test these values.
+ Fixes issue #485
+
+
+ Fixed error message for TLE with incorrect checksum.
+ Fixes issue #492.
+
+
+ Fixed reference value of parameter drivers updating in Kalman filter.
+ When resetting the orbit in the propagator builder, the reference
+ values
+ of the drivers are now reset too.
+ Fixes issue #490.
+
+
+ Made ParameterDriver class fully mutable.
+ By adding setters for attributes scale, reference, minimum and maximum
+ values.
+ Fixes issue #489.
+
+
+ Fixed method unNormalizeStateVector in Model class of Kalman estimator.
+ Previous value did not take into account the reference values of the
+ drivers.
+ Fixes issue #488.
+
+
+ Changed OrekitException from checked to unchecked exception.
+ Most functions do throw such exceptions. As they are unchecked, they are
+ not advertised in either `throws` statements in the function
+ signature or
+ in the javadoc. So users must consider that as soon as they use any
+ Orekit
+ feature, an unchecked `OrekitException` may be thrown. In most cases, users
+ will not attempt to recover for this but will only use them to
+ display or
+ log a meaningful error message.
+ Fixes #484.
+
+
+ Added GPSDate class to convert back and forth with AbsoluteDate.
+ Fixes #480.
+
+
+ Fix generics in EventEnablingPredicateFilter.
+ Fixes #476.
+
+
+ Fixed wrong values of radec generated in AngularRaDecMeasurementCreator.
+ Fixed wrong values of range rate generated in
+ RangeRateMeasurementCreator.
+ Added tests that check the values of measurements for each type of
+ measurement.
+ Upgraded precision in Kalman and batch least-squares OD tests that are using
+ range-rate and radec measurements.
+ Fixes issue #473.
+
+
+ Derivatives with respect to mass are not computed anymore since several
+ versions,
+ some remnants of former computation remained and have now been removed.
+
+
+
-
- Fixed missing eclipse detectors in field version of Solar radiation pressure.
- Fixes issue #366.
-
-
- Fixed issue where EventHandler.init() was never called.
- Fixes issue #471.
-
-
- Fixed error in relative humidity units in Marini-Murray tropospheric model.
- Fixes issue #352.
-
-
- Fixed DSST events detection in the osculating case.
- Fixes issue #398.
-
-
- Allow several TLE with same date in TLESeries.
- Fixes issue #411.
-
-
- Fixed compilation problems with JDK 1.8
- Fixes issue #462.
-
-
- Added specific attitude mode for GNSS satellites: GPS (block IIA, block IIF, block IIF),
- GLONASS, GALILEO, BEIDOU (GEO, IGSO, MEO). This is still considered experimental as there
- are some problems when Sun crosses the orbital plane during a midnight/noon turn maneuver
- (which is a rare event but nevertheless occurs)
-
-
- Added natural order for observed measurements primarily based on
- chronological order, but with also value comparisons if measurements
- are simultaneous (which occurs a lot in GNSS), and ensuring no
- measurements are lost if stored in SortedSet
-
-
- Added GNSS code measurements
-
-
- Added GNSS phase measurements (very basic implementation for now, not usable as is)
-
-
- Added loading of RINEX observation files (versions 2 and 3)
-
-
- Fixed compression table reset problem in .Z files
- Fixes issue #450.
-
-
- Fixed de-activation of event detection.
- In the propagate(startDate, endDate) function of class "AbstractIntegratedPropagator",
- for dates out of the time interval defined by ]startDate, endDate].
- Fixes issue #449.
-
-
- Added support for loading Unix-compressed files (ending in .Z).
- This file compression algorithm is still widely used in the GNSS
- community (SP3 files, clock files, Klobuchar coefficients...)
- Fixes issue #447.
-
-
- Added a customizable filtering capability in data loading.
- This allows users to insert layers providing features like
- custom decompression algorithms, deciphering, monitoring...
- Fixes issue #446.
-
-
- Allow direct retrieval of rotation part without derivatives from
- LOFType without computing the full transform from inertial frame.
-
-
- Added a provider for time-dependent process noise in Kalman estimator.
- This providers allow users to set up realistic models where the process
- noise increases in the along track direction.
- Fixes issue #403.
-
-
- Increased visibility of attributes in ConstantThrustManeuver class.
- Added getters for all attributes. Also added an attribute name that
- allows the differentiation of the maneuvers, both from a parameter driver
- point of view and from a force model point of view.
- Fixes issue #426.
-
-
- Increased visibility of attributes in propagator builders.
- By adding getters for all attributes in NumericalPropagatorBuilder
- and AbstractPropagatorBuilder.
- Also made the method findByName in ParameterDriversList public.
- Fixes issue #425.
-
-
- Ensure the correct ITRF version is used in CCSDS files, regardless
- of the EOP source chosen, defaulting to ITRF-2014.
-
-
- Split initial covariance matrix and process noise matrix in two
- methods in the covariance matrix provider interface.
-
-
- Added VersionedITRF frame that allow users with needs for very high
- accuracy to specify which ITRF version they want, and stick to it
- regardless of their EOP source.
- Fixes issue #412.
-
-
- Added an itrf-versions.conf configuration file allowing to specify
- which ITRF version each EOP file defines for which date
-
-
- EOP history now contains the ITRF version corresponding to each
- EOP entry on a per date basis
-
-
- Added an ITRFVersion enumerate to simplify conversion between ITRF frames,
- even when no direct Helmert transformation is available
-
-
- Added TransformProviderUtility to reverse or combine TransformProvider instances.
-
-
- Allow attitude overriding during constant-thrust maneuvers.
- Fixes issue #410.
-
-
- Fixed out-of-sync attitude computation near switch events in AttitudeSequence.
- Fixes issue #404.
-
-
- Added a method to extract sub-ranges from TimeSpanMap instances.
-
-
- Fixed TLE creation with B* coefficients having single digits like 1.0e-4.
- Fixes issue #388.
-
-
- Add FunctionalDetector.
-
-
- Added handling of IGS ANTEX GNSS antenna models file.
-
-
- Added support for SP3-d files.
-
-
- Improved SP3 files parsing.
- Some files already operationally produced by IGS Multi-GNSS Experiment (MGEX)
- exceed the maximum number of satellites supported by the regular SP3-c file
- format (which is 85 satellites) and extended the header, without updating the
- format version to SP3-d, which specifically raises the 85 satellites limitation.
- Fixes issue #376.
-
-
- Allow backward propagation in batch LS orbit determination.
- Fixes issue #375.
-
-
- Added covariance matrix to PV measurements.
- Fixes issue #374.
-
-
- Fixed issue when converting very far points (such as Sun center) to geodetic coordinates.
- Fixes issue #373.
-
-
- Added more conversions between PV coordinates and DerivativeStructure.
- This simplifies for example getting the time derivative of the momentum.
-
-
- Fixed weights for angular measurements in W3B orbit determination.
- Fixed in test and tutorial.
- Fixes issue #370.
-
-
- Added frames for L1 and L2 Lagrange points, for any pair of celestial bodies.
-
-
-
+ Fixed missing eclipse detectors in field version of Solar radiation
+ pressure.
+ Fixes issue #366.
+
+
+ Fixed issue where EventHandler.init() was never called.
+ Fixes issue #471.
+
+
+ Fixed error in relative humidity units in Marini-Murray tropospheric
+ model.
+ Fixes issue #352.
+
+
+ Fixed DSST events detection in the osculating case.
+ Fixes issue #398.
+
+
+ Allow several TLE with same date in TLESeries.
+ Fixes issue #411.
+
+
+ Fixed compilation problems with JDK 1.8
+ Fixes issue #462.
+
+
+ Added specific attitude mode for GNSS satellites: GPS (block IIA, block
+ IIF, block IIF),
+ GLONASS, GALILEO, BEIDOU (GEO, IGSO, MEO). This is still considered
+ experimental as there
+ are some problems when Sun crosses the orbital plane during a
+ midnight/noon turn maneuver
+ (which is a rare event but nevertheless occurs)
+
+
+ Added natural order for observed measurements primarily based on
+ chronological order, but with also value comparisons if measurements
+ are simultaneous (which occurs a lot in GNSS), and ensuring no
+ measurements are lost if stored in SortedSet
+
+
+ Added GNSS code measurements
+
+
+ Added GNSS phase measurements (very basic implementation for now, not
+ usable as is)
+
+
+ Added loading of RINEX observation files (versions 2 and 3)
+
+
+ Fixed compression table reset problem in .Z files
+ Fixes issue #450.
+
+
+ Fixed de-activation of event detection.
+ In the propagate(startDate, endDate) function of class
+ "AbstractIntegratedPropagator",
+ for dates out of the time interval defined by ]startDate, endDate].
+ Fixes issue #449.
+
+
+ Added support for loading Unix-compressed files (ending in .Z).
+ This file compression algorithm is still widely used in the GNSS
+ community (SP3 files, clock files, Klobuchar coefficients...)
+ Fixes issue #447.
+
+
+ Added a customizable filtering capability in data loading.
+ This allows users to insert layers providing features like
+ custom decompression algorithms, deciphering, monitoring...
+ Fixes issue #446.
+
+
+ Allow direct retrieval of rotation part without derivatives from
+ LOFType without computing the full transform from inertial frame.
+
+
+ Added a provider for time-dependent process noise in Kalman estimator.
+ This providers allow users to set up realistic models where the
+ process
+ noise increases in the along track direction.
+ Fixes issue #403.
+
+
+ Increased visibility of attributes in ConstantThrustManeuver class.
+ Added getters for all attributes. Also added an attribute name that
+ allows the differentiation of the maneuvers, both from a parameter
+ driver
+ point of view and from a force model point of view.
+ Fixes issue #426.
+
+
+ Increased visibility of attributes in propagator builders.
+ By adding getters for all attributes in NumericalPropagatorBuilder
+ and AbstractPropagatorBuilder.
+ Also made the method findByName in ParameterDriversList public.
+ Fixes issue #425.
+
+
+ Ensure the correct ITRF version is used in CCSDS files, regardless
+ of the EOP source chosen, defaulting to ITRF-2014.
+
+
+ Split initial covariance matrix and process noise matrix in two
+ methods in the covariance matrix provider interface.
+
+
+ Added VersionedITRF frame that allow users with needs for very high
+ accuracy to specify which ITRF version they want, and stick to it
+ regardless of their EOP source.
+ Fixes issue #412.
+
+
+ Added an itrf-versions.conf configuration file allowing to specify
+ which ITRF version each EOP file defines for which date
+
+
+ EOP history now contains the ITRF version corresponding to each
+ EOP entry on a per date basis
+
+
+ Added an ITRFVersion enumerate to simplify conversion between ITRF
+ frames,
+ even when no direct Helmert transformation is available
+
+
+ Added TransformProviderUtility to reverse or combine TransformProvider
+ instances.
+
+
+ Allow attitude overriding during constant-thrust maneuvers.
+ Fixes issue #410.
+
+
+ Fixed out-of-sync attitude computation near switch events in
+ AttitudeSequence.
+ Fixes issue #404.
+
+
+ Added a method to extract sub-ranges from TimeSpanMap instances.
+
+
+ Fixed TLE creation with B* coefficients having single digits like 1.0e-4.
+ Fixes issue #388.
+
+
+ Add FunctionalDetector.
+
+
+ Added handling of IGS ANTEX GNSS antenna models file.
+
+
+ Added support for SP3-d files.
+
+
+ Improved SP3 files parsing.
+ Some files already operationally produced by IGS Multi-GNSS Experiment
+ (MGEX)
+ exceed the maximum number of satellites supported by the regular SP3-c
+ file
+ format (which is 85 satellites) and extended the header, without updating
+ the
+ format version to SP3-d, which specifically raises the 85 satellites
+ limitation.
+ Fixes issue #376.
+
+
+ Allow backward propagation in batch LS orbit determination.
+ Fixes issue #375.
+
+
+ Added covariance matrix to PV measurements.
+ Fixes issue #374.
+
+
+ Fixed issue when converting very far points (such as Sun center) to
+ geodetic coordinates.
+ Fixes issue #373.
+
+
+ Added more conversions between PV coordinates and DerivativeStructure.
+ This simplifies for example getting the time derivative of the
+ momentum.
+
+
+ Fixed weights for angular measurements in W3B orbit determination.
+ Fixed in test and tutorial.
+ Fixes issue #370.
+
+
+ Added frames for L1 and L2 Lagrange points, for any pair of celestial
+ bodies.
+
+
+
-
- Added ITRF2005 and ITRF2008 to the frames recognized by OEMParser.
- Fixes issue #361.
-
-
- Fixed FiniteDifferencePropagatorConverter so that the scale factor is only applied
- once instead of twice.
- Fixes issue #362.
-
-
- Fixed derivatives computation in turn-around range ionospheric delay modifier.
- Fixes issue #369.
-
-
- Disabled XML external resources when parsing rapid XML TDM files.
- Part of issue #368.
-
-
- Disabled XML external resources when parsing rapid XML EOP files.
- Part of issue #368.
-
-
- Fixed NPE in OrekitException when localized string is null.
-
-
- Fixed a singularity error in derivatives for perfectly circular orbits in DSST third body force model.
- Fixes issue #364.
-
-
- Fixed an error in array size computation for Hansen coefficients.
- Fixes issue #363.
-
-
- Added a way to retrieve EOP from frames by walking the frames hierarchy tree
- using parent frame links. This allows to retrieve EOP from topocentric frames,
- from Earth frames, from TOD...
-
-
- Take ground stations displacements into account in orbit determination.
- The predefined displacement models are the direct effect of solid tides
- and the indirect effect of ocean loading, but users can add their own models
- too.
-
-
- Added ground stations displacements due to ocean loading as per IERS conventions,
- including all the 342 tides considered in the HARDISP.F program.
- Computation is based on Onsala Space Observatory files in BLQ format.
-
-
- Added ground points displacements due to tides as per IERS conventions.
- We have slightly edited one entry in table 7.3a from IERS 2010 conventions
- to fix a sign error identified by Dr. Hana Krásná from TU Wien (out of phase
- radial term for the P₁ tide, which is -0.07mm in conventions when it should be
- +0.07mm). This implies that our implementation may differ up to 0.14mm from
- other implementations.
-
-
- Avoid intermixed ChangeForwarder instances calling each other.
- Fixes issue #360.
-
-
- Modified the way the propagation parameter drivers are mapped in the
- Jacobian matrix in class "Model".
- Added a test for multi-sat orbit determination with estimated
- propagation parameters (µ and SRP coefficients).
- Fixes issue #354.
-
-
- Added a convenience method to retrieve covariance matrix in
- physical units in orbit determination.
- Fixes issue #353.
-
-
- Fixed two errors in Marini-Murray model implementation.
- Fixes issue #352.
-
-
- Prevent duplicated Newtonian attraction in FieldNumericalPropagator.
- Fixes issue #350.
-
-
- Copy additional states through impulse maneuvers.
- Fixes issue #349.
-
-
- Removed unused construction parameters in ShiftingTransformProvider
- and InterpolatingTransformProvider.
- Fixes issue #356.
-
-
- Fixed wrong inertial frame for Earth retrieved from CelestialBodyFactory.
- Fixes issue #355.
-
-
- Use a git-flow like branching workflow, with a develop branch for bleeding-edge
- development, and master branch for stable published versions.
-
-
-
+ Added ITRF2005 and ITRF2008 to the frames recognized by OEMParser.
+ Fixes issue #361.
+
+
+ Fixed FiniteDifferencePropagatorConverter so that the scale factor is
+ only applied
+ once instead of twice.
+ Fixes issue #362.
+
+
+ Fixed derivatives computation in turn-around range ionospheric delay
+ modifier.
+ Fixes issue #369.
+
+
+ Disabled XML external resources when parsing rapid XML TDM files.
+ Part of issue #368.
+
+
+ Disabled XML external resources when parsing rapid XML EOP files.
+ Part of issue #368.
+
+
+ Fixed NPE in OrekitException when localized string is null.
+
+
+ Fixed a singularity error in derivatives for perfectly circular orbits in
+ DSST third body force model.
+ Fixes issue #364.
+
+
+ Fixed an error in array size computation for Hansen coefficients.
+ Fixes issue #363.
+
+
+ Added a way to retrieve EOP from frames by walking the frames hierarchy
+ tree
+ using parent frame links. This allows to retrieve EOP from topocentric
+ frames,
+ from Earth frames, from TOD...
+
+
+ Take ground stations displacements into account in orbit determination.
+ The predefined displacement models are the direct effect of solid
+ tides
+ and the indirect effect of ocean loading, but users can add their own
+ models
+ too.
+
+
+ Added ground stations displacements due to ocean loading as per IERS
+ conventions,
+ including all the 342 tides considered in the HARDISP.F program.
+ Computation is based on Onsala Space Observatory files in BLQ format.
+
+
+ Added ground points displacements due to tides as per IERS conventions.
+ We have slightly edited one entry in table 7.3a from IERS 2010
+ conventions
+ to fix a sign error identified by Dr. Hana Krásná from TU Wien (out of
+ phase
+ radial term for the P₁ tide, which is -0.07mm in conventions when it
+ should be
+ +0.07mm). This implies that our implementation may differ up to 0.14mm from
+ other implementations.
+
+
+ Avoid intermixed ChangeForwarder instances calling each other.
+ Fixes issue #360.
+
+
+ Modified the way the propagation parameter drivers are mapped in the
+ Jacobian matrix in class "Model".
+ Added a test for multi-sat orbit determination with estimated
+ propagation parameters (µ and SRP coefficients).
+ Fixes issue #354.
+
+
+ Added a convenience method to retrieve covariance matrix in
+ physical units in orbit determination.
+ Fixes issue #353.
+
+
+ Fixed two errors in Marini-Murray model implementation.
+ Fixes issue #352.
+
+
+ Prevent duplicated Newtonian attraction in FieldNumericalPropagator.
+ Fixes issue #350.
+
+
+ Copy additional states through impulse maneuvers.
+ Fixes issue #349.
+
+
+ Removed unused construction parameters in ShiftingTransformProvider
+ and InterpolatingTransformProvider.
+ Fixes issue #356.
+
+
+ Fixed wrong inertial frame for Earth retrieved from CelestialBodyFactory.
+ Fixes issue #355.
+
+
+ Use a git-flow like branching workflow, with a develop branch for
+ bleeding-edge
+ development, and master branch for stable published versions.
+
+
+
-
- Disabled XML external resources when parsing rapid XML TDM files.
- Part of issue #368.
-
-
- Disabled XML external resources when parsing rapid XML EOP files.
- Part of issue #368.
-
-
-
+ Disabled XML external resources when parsing rapid XML TDM files.
+ Part of issue #368.
+
+
+ Disabled XML external resources when parsing rapid XML EOP files.
+ Part of issue #368.
+
+
+
-
- Added on-board antenna phase center effect on inter-satellites range measurements.
-
-
- Added on-board antenna phase center effect on turn-around range measurements.
-
-
- Added on-board antenna phase center effect on range measurements.
-
-
- Moved Bias and OutlierFilter classes together with the other estimation modifiers.
-
-
- Forced states derivatives to be dimension 6 rather than either 6 or 7. The
- additional mass was not really useful, it was intended for maneuvers calibration,
- but in fact during maneuver calibration we adjust either flow rate or specific
- impulse but not directly mass itself.
-
-
- Added parametric acceleration force models, where acceleration amplitude is a
- simple parametric function. Acceleration direction is fixed in either inertial
- frame, or spacecraft frame, or in a dedicated attitude frame overriding spacecraft
- attitude. The latter could for example be used to model solar arrays orientation if
- the force is related to solar arrays). Two predefined implementations are provided,
- one for polynomial amplitude and one for harmonic amplitude. Users can add other
- cases at will. This allows for example to model the infamous GPS Y-bias, which is
- thought to be related to a radiator thermal radiation.
-
-
- Removed obsolete Cunningham and Droziner attraction models. These models have
- been superseded by Holmes-Featherstone attraction model available since 2013
- in Orekit.
-
-
- Take orbit to attitude coupling into account in the partial derivatives for all attitude modes.
- Fixes issue #200.
-
-
- Merged FieldAttitudeProvider into AttitudeProvider.
-
-
- Simplified ForceModel interface. It does not require dedicated methods anymore for
- computing derivatives with respect to either state or parameters.
-
-
- Removed Jacchia-Bowman 2006 now completely superseded by Jacchia-Bowman 2008.
-
-
- Make Jacchia-Bowman 2008 thread-safe and field-aware.
-
-
- Make NRL MSISE 2000 thread-safe and field-aware.
-
-
- Make DTM2000 thread-safe and field-aware.
-
-
- Added support for ITRF 2014.
- As of mid-2017, depending on the source of EOP, the ITRF retrieved using
- FramesFactory.getITRF will be either ITRF-2014 (if using EOP 14 C04) or
- ITRF-2008 (if using EOP 08 C04, bulletins A, bulletins B, or finals .all).
- If another ITRF is needed, it can be built using HelmertTransformation.
-
-
- Removed classes and methods deprecated in 8.0.
-
-
- Added coordinates of all intermediate participants in estimated measurements.
- This will allow estimation modifiers to get important vectors (sighting
- directions for example) without recomputing everything from the states.
-
-
- Added a multi-satellites orbit determination feature.
-
-
- Added one-way and two-way inter-satellites range measurements.
-
-
- Avoid clash with Python reserved keywords and, or and not in BooleanDetector.
-
-
- Added right ascension and declination angular measurements.
-
-
- Added a parallel propagation feature for addressing multi-satellites needs.
- Propagators of different types (analytical, semi-analytical, numerical,
- ephemerides ...) can be mixed at will.
-
-
- Fixed Gaussian quadrature inconsistent with DSST theory when orbit derivatives are present.
- Fixes issue #345.
-
-
- Fixed infinite recursion when attempting two orbit determinations in row.
- Fixes issue #347.
-
-
- Added Danish translations.
- Fixes issue #346.
-
-
- Allow estimation of polar motion (offset plus linear drift) and prime meridian
- correction (offset plus linear drift) in orbit determination. This is essentially
- equivalent to add correction to the xp, yp, dtu1 and lod Earth Orientation Parameters.
-
-
- Parameters in orbit determination can be associated with a per-parameter reference date.
-
-
- Fixed wrong generation of FieldTransforms by time stamped cache, when generation
- happens backward in time.
- Fixes issue #344.
-
-
- Improved computation ground station parameters derivatives
- in orbit determination.
-
-
- Use automatic differentiation for all orbit determination measurements types.
- This allows simpler evolutions to estimate parameters for which derivatives
- are not straightforward to compute; some of these parameters are needed for
- precise orbit determination.
-
-
- Added parsing of University of Bern Astronomical Institute files for α and β Klobuchar coefficients.
-
-
- Added parsing of CCSDS TDM (Tracking Data Messages) files, both text and XML.
-
-
- Fixed lighting ratio in solar radiation pressure for interplanetary trajectories.
-
-
- Allow small extrapolation before and after ephemeris.
- Fixes issue #261.
-
-
- Fixed missing attitude in DSST mean/osculating conversions.
- Fixes issue #339.
-
-
- Optionally take lift component of the drag force into account in BoxAndSolarArraySpacecraft.
- Fixes issue #324.
-
-
- Change visibility of getTargetPV in GroundPointing to public so it can be subclassed by
- users in other packages.
- Fixes issue #341.
-
-
- Deprecated the TLESeries class. The file format used was considered to be too specific and
- the API not really well designed. Users are encouraged to use their own parser for series of TLE.
-
-
- Removed dead code in deep SDP4 propagation model.
- Fixes issue #342.
-
-
- Added a way to prefix parameters names when estimating several maneuvers
- in one orbit determination.
- Fixes issue #338.
-
-
- Removed unneeded reset at end of sample creation in propagators conversion.
- Fixes issue #335.
-
-
- Fixed wrong angle wrapping computation in IodLambert.
-
-
- Fixed boundaries of thrust parameter driver in ConstantThrustManeuver.
- Fixes issue #327.
-
-
- Allow some old version of TLE format to be parsed correctly.
- Fixes issue #330.
-
-
- Fixed ArrayOutOfBoundException appearing when converting dates at past or future infinity
- to string.
- Fixes issue #340.
-
-
- Extended range of DateComponents to allow the full integer range as days offset
- from J2000.
-
-
- Prevent NaN appearing in UTC-TAI offsets for dates at past or future infinity.
-
-
- Prevent central attraction coefficient from being adjusted in TLEPropagatorBuilder,
- as it is specified by the TLE theory.
- Fixes issue #313.
-
-
- Added a flag to prevent resetting initial state at the end of integrating propagators.
- Fixes issue #251.
-
-
- Tutorials now all rely on orekit-data being in user home folder.
- Fixes issue #245.
-
-
- Apply delay corresponding to h = 0 when station altitude is below 0 in SaastamoinenModel.
- Fixes issue #202.
-
-
- Added derivatives to orbits computed from non-Keplerian models, and use
- these derivatives when available. This improves shiftedBy() accuracy,
- and as a consequence also the accuracy of EventShifter. As example, when
- comparing shiftedBy and numerical model on a low Earth Sun Synchronous Orbit,
- with a 20x20 gravity field, Sun and Moon third bodies attractions, drag and
- solar radiation pressure, shifted position errors without derivatives are 18m
- after 60s, 72m after 120s, 447m after 300s; 1601m after 600s and 3141m after
- 900s, whereas the shifted position errors with derivatives are 1.1m after 60s,
- 9.1m after 120s, 140m after 300s; 1067m after 600s and 3307m after 900s.
-
-
- Preserved non-Keplerian acceleration in spacecraft state when computed from numerical propagator.
- Fixes issue #183.
-
-
- Fixed accuracy of FieldAbsoluteDate.
- Fixes issue #337.
-
-
- Fixed eccentricity computation for hyperbolic Cartesian orbits.
- Fixes issue #336.
-
-
- Fixed an array out of bounds error in DSST zonal short periodics terms.
-
-
- Fixed a factor two error in tropospheric and ionospheric modifiers.
-
-
- Added turn-around (four-way range) measurements to orbit determination.
-
-
- Updated dependency to Hipparchus 1.1, released on 2017, March 16th.
- Fixes issue #329.
-
-
- Added simple Boolean logic with EventDetectors.
-
-
- Added getGMSTRateFunction to IEEEConventions to compute accurately Earth rotation rate.
-
-
- OneAxisEllipsoid can now transform FieldGeodeticPoint from any field
- and not only DerivativeStructure.
-
-
- Completed field-based Cartesian and angular coordinates with missing
- features that were only in the double based versions.
-
-
- Use DerivativeStructure to compute derivatives for Range measurements.
-
-
- Improved conversion speed from Cartesian coordinates to geodetic coordinates
- by about 15%.
-
-
- Replace OrbitFile interface with EphemerisFile, adding support for multiple
- ephemeris segments and the capability to create a propagator from an ephemeris.
-
-
- Added EphemerisFileWriter interface for serializing EphemerisFiles to external
- file formats, and implemented the OEMWriter for CCSDS OEM file export support.
-
-
- Added OrekitEphemerisFile object for encapsulating propagator outputs into an
- EphemerisFile which can then be exported with EphemerisFileWriter classes.
-
-
- Fixed thread-safety issues in DTM2000 model.
- Fixes issue #258.
-
-
- Added JB2008 atmosphere model.
-
-
- Added NRLMSISE-00 atmosphere model.
-
-
- Fixed outliers configuration parsing in orbit determination tutorial and test.
- Fixes issue #249
-
-
- Greatly improved orbit determination speed when a lot of measurements are used
- (several thousands).
-
-
- Fixed ant build script to run Junit tests.
- Fixes issue #246.
-
-
- Added a protection against zero scale factors for parameters drivers.
-
-
- Fix AbsoluteDate.createMJDDate when the time scale is UTC and the date
- is during a leap second.
- Fixes issue #247
-
-
- Fixed ant build script to retrieve Hipparchus dependencies correctly.
- Fixes issue #244.
-
-
-
+ Added on-board antenna phase center effect on inter-satellites range
+ measurements.
+
+
+ Added on-board antenna phase center effect on turn-around range
+ measurements.
+
+
+ Added on-board antenna phase center effect on range measurements.
+
+
+ Moved Bias and OutlierFilter classes together with the other estimation
+ modifiers.
+
+
+ Forced states derivatives to be dimension 6 rather than either 6 or 7. The
+ additional mass was not really useful, it was intended for maneuvers
+ calibration,
+ but in fact during maneuver calibration we adjust either flow rate or
+ specific
+ impulse but not directly mass itself.
+
+
+ Added parametric acceleration force models, where acceleration amplitude
+ is a
+ simple parametric function. Acceleration direction is fixed in either
+ inertial
+ frame, or spacecraft frame, or in a dedicated attitude frame overriding
+ spacecraft
+ attitude. The latter could for example be used to model solar arrays
+ orientation if
+ the force is related to solar arrays). Two predefined implementations
+ are provided,
+ one for polynomial amplitude and one for harmonic amplitude. Users can
+ add other
+ cases at will. This allows for example to model the infamous GPS Y-bias,
+ which is
+ thought to be related to a radiator thermal radiation.
+
+
+ Removed obsolete Cunningham and Droziner attraction models. These models
+ have
+ been superseded by Holmes-Featherstone attraction model available since
+ 2013
+ in Orekit.
+
+
+ Take orbit to attitude coupling into account in the partial derivatives
+ for all attitude modes.
+ Fixes issue #200.
+
+
+ Merged FieldAttitudeProvider into AttitudeProvider.
+
+
+ Simplified ForceModel interface. It does not require dedicated methods anymore
+ for
+ computing derivatives with respect to either state or parameters.
+
+
+ Removed Jacchia-Bowman 2006 now completely superseded by Jacchia-Bowman
+ 2008.
+
+
+ Make Jacchia-Bowman 2008 thread-safe and field-aware.
+
+
+ Make NRL MSISE 2000 thread-safe and field-aware.
+
+
+ Make DTM2000 thread-safe and field-aware.
+
+
+ Added support for ITRF 2014.
+ As of mid-2017, depending on the source of EOP, the ITRF retrieved
+ using
+ FramesFactory.getITRF will be either ITRF-2014 (if using EOP 14 C04) or
+ ITRF-2008 (if using EOP 08 C04, bulletins A, bulletins B, or finals .all).
+ If another ITRF is needed, it can be built using
+ HelmertTransformation.
+
+
+ Removed classes and methods deprecated in 8.0.
+
+
+ Added coordinates of all intermediate participants in estimated
+ measurements.
+ This will allow estimation modifiers to get important vectors (sighting
+ directions for example) without recomputing everything from the
+ states.
+
+
+ Added a multi-satellites orbit determination feature.
+
+
+ Added one-way and two-way inter-satellites range measurements.
+
+
+ Avoid clash with Python reserved keywords and, or and not in
+ BooleanDetector.
+
+
+ Added right ascension and declination angular measurements.
+
+
+ Added a parallel propagation feature for addressing multi-satellites
+ needs.
+ Propagators of different types (analytical, semi-analytical, numerical,
+ ephemerides ...) can be mixed at will.
+
+
+ Fixed Gaussian quadrature inconsistent with DSST theory when orbit
+ derivatives are present.
+ Fixes issue #345.
+
+
+ Fixed infinite recursion when attempting two orbit determinations in row.
+ Fixes issue #347.
+
+
+ Added Danish translations.
+ Fixes issue #346.
+
+
+ Allow estimation of polar motion (offset plus linear drift) and prime
+ meridian
+ correction (offset plus linear drift) in orbit determination. This is
+ essentially
+ equivalent to add correction to the xp, yp, dtu1 and lod Earth Orientation
+ Parameters.
+
+
+ Parameters in orbit determination can be associated with a per-parameter
+ reference date.
+
+
+ Fixed wrong generation of FieldTransforms by time stamped cache, when
+ generation
+ happens backward in time.
+ Fixes issue #344.
+
+
+ Improved computation ground station parameters derivatives
+ in orbit determination.
+
+
+ Use automatic differentiation for all orbit determination measurements
+ types.
+ This allows simpler evolutions to estimate parameters for which
+ derivatives
+ are not straightforward to compute; some of these parameters are needed
+ for
+ precise orbit determination.
+
+
+ Added parsing of University of Bern Astronomical Institute files for α
+ and β Klobuchar coefficients.
+
+
+ Added parsing of CCSDS TDM (Tracking Data Messages) files, both text and
+ XML.
+
+
+ Fixed lighting ratio in solar radiation pressure for interplanetary
+ trajectories.
+
+
+ Allow small extrapolation before and after ephemeris.
+ Fixes issue #261.
+
+
+ Fixed missing attitude in DSST mean/osculating conversions.
+ Fixes issue #339.
+
+
+ Optionally take lift component of the drag force into account in
+ BoxAndSolarArraySpacecraft.
+ Fixes issue #324.
+
+
+ Change visibility of getTargetPV in GroundPointing to public so it can be
+ subclassed by
+ users in other packages.
+ Fixes issue #341.
+
+
+ Deprecated the TLESeries class. The file format used was considered to be too
+ specific and
+ the API not really well designed. Users are encouraged to use their own
+ parser for series of TLE.
+
+
+ Removed dead code in deep SDP4 propagation model.
+ Fixes issue #342.
+
+
+ Added a way to prefix parameters names when estimating several maneuvers
+ in one orbit determination.
+ Fixes issue #338.
+
+
+ Removed unneeded reset at end of sample creation in propagators conversion.
+ Fixes issue #335.
+
+
+ Fixed wrong angle wrapping computation in IodLambert.
+
+
+ Fixed boundaries of thrust parameter driver in ConstantThrustManeuver.
+ Fixes issue #327.
+
+
+ Allow some old version of TLE format to be parsed correctly.
+ Fixes issue #330.
+
+
+ Fixed ArrayOutOfBoundException appearing when converting dates at past or
+ future infinity
+ to string.
+ Fixes issue #340.
+
+
+ Extended range of DateComponents to allow the full integer range as days
+ offset
+ from J2000.
+
+
+ Prevent NaN appearing in UTC-TAI offsets for dates at past or future
+ infinity.
+
+
+ Prevent central attraction coefficient from being adjusted in
+ TLEPropagatorBuilder,
+ as it is specified by the TLE theory.
+ Fixes issue #313.
+
+
+ Added a flag to prevent resetting initial state at the end of integrating
+ propagators.
+ Fixes issue #251.
+
+
+ Tutorials now all rely on orekit-data being in user home folder.
+ Fixes issue #245.
+
+
+ Apply delay corresponding to h = 0 when station altitude is below 0 in
+ SaastamoinenModel.
+ Fixes issue #202.
+
+
+ Added derivatives to orbits computed from non-Keplerian models, and use
+ these derivatives when available. This improves shiftedBy()
+ accuracy,
+ and as a consequence also the accuracy of EventShifter. As example,
+ when
+ comparing shiftedBy and numerical model on a low Earth Sun Synchronous Orbit,
+ with a 20x20 gravity field, Sun and Moon third bodies attractions,
+ drag and
+ solar radiation pressure, shifted position errors without derivatives are
+ 18m
+ after 60s, 72m after 120s, 447m after 300s; 1601m after 600s and 3141m
+ after
+ 900s, whereas the shifted position errors with derivatives are 1.1m after
+ 60s,
+ 9.1m after 120s, 140m after 300s; 1067m after 600s and 3307m after 900s.
+
+
+ Preserved non-Keplerian acceleration in spacecraft state when computed from
+ numerical propagator.
+ Fixes issue #183.
+
+
+ Fixed accuracy of FieldAbsoluteDate.
+ Fixes issue #337.
+
+
+ Fixed eccentricity computation for hyperbolic Cartesian orbits.
+ Fixes issue #336.
+
+
+ Fixed an array out of bounds error in DSST zonal short periodics terms.
+
+
+ Fixed a factor two error in tropospheric and ionospheric modifiers.
+
+
+ Added turn-around (four-way range) measurements to orbit determination.
+
+
+ Updated dependency to Hipparchus 1.1, released on 2017, March 16th.
+ Fixes issue #329.
+
+
+ Added simple Boolean logic with EventDetectors.
+
+
+ Added getGMSTRateFunction to IEEEConventions to compute accurately Earth
+ rotation rate.
+
+
+ OneAxisEllipsoid can now transform FieldGeodeticPoint from any field
+ and not only DerivativeStructure.
+
+
+ Completed field-based Cartesian and angular coordinates with missing
+ features that were only in the double based versions.
+
+
+ Use DerivativeStructure to compute derivatives for Range measurements.
+
+
+ Improved conversion speed from Cartesian coordinates to geodetic coordinates
+ by about 15%.
+
+
+ Replace OrbitFile interface with EphemerisFile, adding support for multiple
+ ephemeris segments and the capability to create a propagator from an
+ ephemeris.
+
+
+ Added EphemerisFileWriter interface for serializing EphemerisFiles to
+ external
+ file formats, and implemented the OEMWriter for CCSDS OEM file export
+ support.
+
+
+ Added OrekitEphemerisFile object for encapsulating propagator outputs
+ into an
+ EphemerisFile which can then be exported with EphemerisFileWriter classes.
+
+
+ Fixed thread-safety issues in DTM2000 model.
+ Fixes issue #258.
+
+
+ Added JB2008 atmosphere model.
+
+
+ Added NRLMSISE-00 atmosphere model.
+
+
+ Fixed outliers configuration parsing in orbit determination tutorial and
+ test.
+ Fixes issue #249
+
+
+ Greatly improved orbit determination speed when a lot of measurements are
+ used
+ (several thousands).
+
+
+ Fixed ant build script to run Junit tests.
+ Fixes issue #246.
+
+
+ Added a protection against zero scale factors for parameters drivers.
+
+
+ Fix AbsoluteDate.createMJDDate when the time scale is UTC and the date
+ is during a leap second.
+ Fixes issue #247
+
+
+ Fixed ant build script to retrieve Hipparchus dependencies correctly.
+ Fixes issue #244.
+
+
+
-
- Disabled XML external resources when parsing rapid XML EOP files.
- Part of issue #368.
-
-
-
+ Disabled XML external resources when parsing rapid XML EOP files.
+ Part of issue #368.
+
+
+
-
- Improved accuracy of orbits Jacobians.
- Fixes issue #243.
-
-
- Deprecated PropagationException, replaced by OrekitException.
-
-
- Fix bug in restarting propagation with a ConstantThrustManeuver with an
- updated initial condition.
-
-
- Fixed a display error for dates less than 0.5ms before a leap second.
-
-
- Use ParameterDriver with scale factor for both orbit determination, conversion,
- and partial derivatives computation when finite differences are needed.
-
-
- Apply impulse maneuver correctly in backward propagation.
- Fixes issue #241.
-
-
- Added angular separation detector. This is typically used to check separation
- between spacecraft and the Sun as seen from a ground station, to avoid interferences
- or damage.
-
-
- All class and methods that were deprecated in the 7.X series have been removed.
-
-
- Allow ICGEM gravity field reader to parse non-Earth gravity fields.
-
-
- Add methods for a integration step handler to tell if the start/end of the step is
- interpolated due to event detection. Also added ability to add a step handler in
- ephemeris mode.
-
-
- Switch to a continuous Ap to Kp geomagnetic index conversion.
- Fixes issue #240.
-
-
- Added computation of Dilution Of Precision (DOP).
-
-
- Added a specialized propagator for GPS spacecrafts, based on
- SEM or YUMA files.
-
-
- Ported the new Hipparchus event handling algorithm to Orekit.
- This improves robustness in corner cases, typically when different
- event detectors triggers at very close times and one of them
- resets the state such that it affects the other detectors.
-
-
- Simplified step interpolators API, replacing the setDate/getState
- pair with an interpolated state getter taking a date argument.
-
-
- Switched from Apache Commons Math to Hipparchus library.
-
-
- Added an orbit determination feature!
-
-
- Add EventHandler to record all events.
-
-
- Fix exception during event detection using
- NumericalPropagator.getGeneratedEphemeris() near the start/end date of
- the generated ephemeris.
- Fixes issue #238
-
-
-
+ Improved accuracy of orbits Jacobians.
+ Fixes issue #243.
+
+
+ Deprecated PropagationException, replaced by OrekitException.
+
+
+ Fix bug in restarting propagation with a ConstantThrustManeuver with an
+ updated initial condition.
+
+
+ Fixed a display error for dates less than 0.5ms before a leap second.
+
+
+ Use ParameterDriver with scale factor for both orbit determination,
+ conversion,
+ and partial derivatives computation when finite differences are needed.
+
+
+ Apply impulse maneuver correctly in backward propagation.
+ Fixes issue #241.
+
+
+ Added angular separation detector. This is typically used to check
+ separation
+ between spacecraft and the Sun as seen from a ground station, to avoid
+ interferences
+ or damage.
+
+
+ All class and methods that were deprecated in the 7.X series have been
+ removed.
+
+
+ Allow ICGEM gravity field reader to parse non-Earth gravity fields.
+
+
+ Add methods for a integration step handler to tell if the start/end of
+ the step is
+ interpolated due to event detection. Also added ability to add a step handler in
+ ephemeris mode.
+
+
+ Switch to a continuous Ap to Kp geomagnetic index conversion.
+ Fixes issue #240.
+
+
+ Added computation of Dilution Of Precision (DOP).
+
+
+ Added a specialized propagator for GPS spacecrafts, based on
+ SEM or YUMA files.
+
+
+ Ported the new Hipparchus event handling algorithm to Orekit.
+ This improves robustness in corner cases, typically when different
+ event detectors triggers at very close times and one of them
+ resets the state such that it affects the other detectors.
+
+
+ Simplified step interpolators API, replacing the setDate/getState
+ pair with an interpolated state getter taking a date argument.
+
+
+ Switched from Apache Commons Math to Hipparchus library.
+
+
+ Added an orbit determination feature!
+
+
+ Add EventHandler to record all events.
+
+
+ Fix exception during event detection using
+ NumericalPropagator.getGeneratedEphemeris() near the start/end date
+ of
+ the generated ephemeris.
+ Fixes issue #238
+
+
+
-
- Disabled XML external resources when parsing rapid XML EOP files.
- Part of issue #368.
-
-
-
+ Disabled XML external resources when parsing rapid XML EOP files.
+ Part of issue #368.
+
+
+
-
- Added GLONASS and QZSS time scales. These time scales my be used in SP3-c files.
-
-
- Added parsing and displaying of local time according to ISO-8601 standard.
-
-
- Added some protections against malformed SP3 files.
-
-
- Fixed Newcomb operators generation in DSST for high degree gravity fields.
- Fixes issue #237
-
-
- Improved tuning of DSST tesseral force models. Users can now tune max degree,
- max eccentricity power and max frequency in mean longitude for short
- period terms, as well as for m-daily terms.
-
-
- Improved tuning of DSST zonal force models. Users can now tune max degree,
- max eccentricity power and max frequency in true longitude for short
- period terms.
-
-
- Fixed wrong continuous maneuver handling in backward propagation.
- Fixes issue #236
-
-
-
+ Added GLONASS and QZSS time scales. These time scales my be used in SP3-c
+ files.
+
+
+ Added parsing and displaying of local time according to ISO-8601
+ standard.
+
+
+ Added some protections against malformed SP3 files.
+
+
+ Fixed Newcomb operators generation in DSST for high degree gravity
+ fields.
+ Fixes issue #237
+
+
+ Improved tuning of DSST tesseral force models. Users can now tune max
+ degree,
+ max eccentricity power and max frequency in mean longitude for short
+ period terms, as well as for m-daily terms.
+
+
+ Improved tuning of DSST zonal force models. Users can now tune max degree,
+ max eccentricity power and max frequency in true longitude for short
+ period terms.
+
+
+ Fixed wrong continuous maneuver handling in backward propagation.
+ Fixes issue #236
+
+
+
-
- Added tropospheric refraction correction angle following Recommendation ITU-R P.834-7.
-
-
- Added a way to configure max degree/order for short periods separately
- from the mean elements settings in DSST tutorial.
-
-
- Fixed limitation to degree 12 on zonal short periods, degree/order 8 on
- tesseral short periods, and degree/order 12 for tesseral m-dailies in DSST.
-
-
- Fixed wrong orbit type in propagator conversion. The type specified by
- user was ignored when computing variable stepsize integrator tolerances.
-
-
- Set up three different implementations of radiation pressure coefficients,
- using either a single reflection coefficient, or a pair of absorption
- and specular reflection coefficients using the classical convention about
- specular reflection, or a pair of absorption and specular reflection
- coefficients using the legacy convention from the 1995 CNES book.
- Fixes issue #170
-
-
- Fixed wrong latitude normalization in FieldGeodeticPoint.
-
-
- Fixed blanks handling in CCSDS ODM files.
- Fixes issue #232
-
-
- Fixed FramesFactory.getNonInterpolatingTransform working only
- in one direction.
- Fixes issue #231
-
-
- Added Field of View based event detector for ground based sensors.
-
-
- Added a getFootprint method to FieldOfView for projecting Field Of View
- to ground, taking limb of ellipsoid into account (including flatness) if
- Field Of View skims over horizon.
-
-
- Added a pointOnLimb method to Ellipsoid for computing points that lie
- on the limb as seen from an external observer.
-
-
- Added an isInside predicate method to Ellipsoid for checking points location.
-
-
- Support parsing lowercase values in CCSDS orbit data messages.
- Fixes issue #230
-
-
- Added a generic FieldOfViewDetector that can handle any Field Of View shape.
- The DihedralFieldOfViewDetector is deprecated, but the CircularFieldOfViewDetector
- which corresponds to a common case that can be computed more accurately and faster
- than the new generic detector is preserved.
-
-
- Added a FieldOfView class to model Fields Of View with any shape.
-
-
- Added a FootprintOverlapDetector which is triggered when a sensor
- Field Of View (any shape, even split in non-connected parts or
- containing holes) overlaps a geographic zone, which can be non-convex,
- split in different sub-zones, have holes, contain the pole...
- Fixes issue #216
-
-
- Added a protection against low altitudes in JB2006 model.
- Fixes issue #214
-
-
- Enlarged access to SGP4 and DeepSDP4 propagators.
- Fixes issue #207
-
-
- Fixed covariance matrices units when read from CCSDS ODM files. The
- data returned at API level are now consistent with SI units, instead of being
- kilometer-based.
- Fixes issue #217
-
-
- Fixed DSST ephemeris generation.
- Fixes issue #222
-
-
- Vastly improved DSS short period terms interpolation.
-
-
- Use new Rotation API from Apache Commons Math 3.6.
- This API allows to use both vector operator convention and frames
- transform convention naturally. This is useful when axis/angles are
- involved, or when composing rotations. This probably fixes one of
- the oldest stumbling blocks for Orekit users.
-
-
- Fixed state partial derivatives in drag force model.
- Fixes issue #229
-
-
- Fixed incorrect density in DTM2000 when the input position is not in ECI
- or ECEF.
- Fixes issue #228
-
-
- Added capability to use a single EventHandler with multiple types of
- EventDetectors.
-
-
- Added a way to customize interpolation grid in DSST, either using a fixed number
- of points or a maximum time gap between points, for each mean elements integration
- step.
-
-
- Added TabulatedLofOffset for attitudes defined by tabulating rotations between Local Orbital Frame
- and spacecraft frame.
- Fixes issue #227
-
-
- Fixed wrong ephemeris generation for analytical propagators with maneuvers.
- Fixes issue #224.
-
-
- Fixed date offset by one second for TLE built from their components,
- if a leap second was introduced earlier in the same year.
- Fixes issue #225.
-
-
- Allow parsing TLE with non-unclassified modifier.
-
-
- As a side effect of fixing issue #223, KeplerianPropagator and
- Eckstein-Hechler propagator are now serializable.
-
-
- Fixed missing additional states handling in ephemeris propagators
- created from analytical propagators.
-
-
- Fixed NPE and serialization issues in ephemeris propagators created
- from analytical propagators.
- Fixes issue #223.
-
-
- Fixed time scale issues in JPL ephemerides and IAU pole models.
- The time used for internal computation should be TDB, not TT.
-
-
- Fixed an issue with backward propagation on analytical propagator.
- During first step, the analytical interpolator wrongly considered the
- propagation was forward.
-
-
- Added a way to retrieve short period coefficients from DSST as
- spacecraft state additional parameters. This is mainly intended
- for test and validation purposes.
-
-
- Prevent small overshoots of step limits in event detection.
- Fixes issue #218.
-
-
- Handle string conversion of dates properly for dates less than 1 millisecond
- before midnight (they should not appear as second 60.0 of previous minute but
- should rather wrap around to next minute).
- Partly fixes issue #218.
-
-
- Enforce Lexicographical order in DirectoryCrawler, to ensure reproducible
- loading. Before this changes, some tests could fail in one computer while
- succeeding in another computer as we use a mix of DE-4xx files, some having
- a different EMRAT (81.30056907419062 for DE-431, 81.30056 for DE-405 and DE-406).
-
-
- Added EventEnablingPredicateFilter to filter event based on an user-provided
- enabling predicate function. This allow for example to dynamically turn some
- events on and off during propagation or to set up some elaborate logic like
- triggering on elevation first time derivative (i.e. one elevation maximum)
- but only when elevation itself is above some threshold.
-
-
- Renamed EventFilter into EventSlopeFilter.
-
-
- Added elevation extremum event detector.
-
-
- Fixed ellipsoid tessellation with large tolerances.
- Fixes issue #215.
-
-
- Fixed numerical precision issues for start/end dates of generated
- ephemerides.
- Fixes issues #210
-
-
- Added anomaly, latitude argument, or longitude argument crossings detector,
- either true, mean or eccentric.
- Fixes issue #213.
-
-
- Added latitude and longitude extremum detector.
-
-
- Added latitude and longitude crossing detector.
-
-
- Added a way to convert between PVA and geodetic points with time derivatives.
-
-
- Allow truncation of tiles in ellipsoid tessellation.
-
-
- Propagator builders can now be configured to accept any orbit types
- and any position angle types in the input flat array.
- Fixes issue #208.
-
-
- Added smooth attitude transitions in attitudes sequences, with derivatives
- continuity at both endpoints of the transition that can be forced to match
- rotation, rotation rate and rotation acceleration.
- Fixes issue #6.
-
-
- Fixed attitudes sequence behavior in backward propagation.
- Fixes issue #206.
-
-
- Added factory methods to create AbsoluteDate instances from MJD or JD.
- Fixes issue #193.
-
-
- Fixed wrong attitude switches when an event occurs but the active attitude mode
- is not the one it relates to.
- Fixes issue #190.
-
-
- Added a way to be notified when attitude switches occur.
- Fixes issue #190.
-
-
- Ensure Keplerian propagator uses the specified mu and not only the one from the initial orbit.
- Fixes issue #184.
-
-
- Improved frames transforms efficiency for various Earth frames.
-
-
- Specify inertial frame to compute orbital velocity for ground pointing laws.
- Fixes issue #115.
-
-
- Activated two commented-out tests for DTM2000, after ensuring we
- get the same results as the original fortran implementation.
- Fixes issue #204.
-
-
- Fixed resetting of SecularAndHarmonic fitting.
- Fixes issue #205.
-
-
- Added a way to sample a zone on an ellipsoid as grids of inside points.
- Fixes issue #201.
-
-
- Fixed an event detection problem when two really separate events occur within
- the event detector convergence threshold.
- Fixes issue #203.
-
-
- Added protections against TLE parameters too large to fit in the format.
- Fixes issue #77.
-
-
- Allowed slightly malformed TLE to be parsed.
- Fixes issue #196.
-
-
- Fixed overlapping issue in ellipsoid tessellation, typically for independent
- zones (like islands) close together.
- Fixes issue #195.
-
-
- Added support to load WMM coefficients from the official model file
- provided by NOAA.
-
-
- Fixed javadoc of method "GeoMagneticField#calculateField(...)":
- the provided altitude is expected to be a height above the WGS84 ellipsoid.
-
-
- Added a simpler interface for creating custom UTC-TAI offsets loaders.
-
-
- Added support for USNO tai-utc.dat file, enabled by default, in
- addition to the legacy support for IERS UTC-TAI.history file
- which is still supported and also enabled by default.
-
-
- Added a way to load TAI-UTC data from Bulletin A. Using this feature
- is however NOT recommended as there are known issues in TAI-UTC data
- in some bulletin A (for example bulletina-xix-001.txt from 2006-01-05
- has a wrong year for last leap second and bulletina-xxi-053.txt from
- 2008-12-31 has an off by one value for TAI-UTC on MJD 54832). This
- feature is therefore not enabled by default, and users wishing to
- rely on it should do it carefully and take their own responsibilities.
-
-
- Added ellipsoid tessellation, with tiles either oriented along track
- (ascending or descending) or at constant azimuth.
-
-
- Added customization of EOP continuity check threshold.
- Fixes issue #194.
-
-
- Added geoid model based on gravity field.
- Fixes issue #192.
-
-
- Added automatic loading of Marshall Solar Activity Future Estimation data.
- Fixes issue #191.
-
-
- Simplified Cartesian to ellipsoidal coordinates transform and greatly improved its performances.
-
-
- Fixed target point in BodyCenterPointing attitude.
- Fixes issue #100.
-
-
-
+ Added tropospheric refraction correction angle following Recommendation
+ ITU-R P.834-7.
+
+
+ Added a way to configure max degree/order for short periods separately
+ from the mean elements settings in DSST tutorial.
+
+
+ Fixed limitation to degree 12 on zonal short periods, degree/order 8 on
+ tesseral short periods, and degree/order 12 for tesseral m-dailies
+ in DSST.
+
+
+ Fixed wrong orbit type in propagator conversion. The type specified by
+ user was ignored when computing variable stepsize integrator
+ tolerances.
+
+
+ Set up three different implementations of radiation pressure
+ coefficients,
+ using either a single reflection coefficient, or a pair of absorption
+ and specular reflection coefficients using the classical convention
+ about
+ specular reflection, or a pair of absorption and specular reflection
+ coefficients using the legacy convention from the 1995 CNES book.
+ Fixes issue #170
+
+
+ Fixed wrong latitude normalization in FieldGeodeticPoint.
+
+
+ Fixed blanks handling in CCSDS ODM files.
+ Fixes issue #232
+
+
+ Fixed FramesFactory.getNonInterpolatingTransform working only
+ in one direction.
+ Fixes issue #231
+
+
+ Added Field of View based event detector for ground based sensors.
+
+
+ Added a getFootprint method to FieldOfView for projecting Field Of View
+ to ground, taking limb of ellipsoid into account (including
+ flatness) if
+ Field Of View skims over horizon.
+
+
+ Added a pointOnLimb method to Ellipsoid for computing points that lie
+ on the limb as seen from an external observer.
+
+
+ Added an isInside predicate method to Ellipsoid for checking points
+ location.
+
+
+ Support parsing lowercase values in CCSDS orbit data messages.
+ Fixes issue #230
+
+
+ Added a generic FieldOfViewDetector that can handle any Field Of View
+ shape.
+ The DihedralFieldOfViewDetector is deprecated, but the
+ CircularFieldOfViewDetector
+ which corresponds to a common case that can be computed more accurately
+ and faster
+ than the new generic detector is preserved.
+
+
+ Added a FieldOfView class to model Fields Of View with any shape.
+
+
+ Added a FootprintOverlapDetector which is triggered when a sensor
+ Field Of View (any shape, even split in non-connected parts or
+ containing holes) overlaps a geographic zone, which can be non-convex,
+ split in different sub-zones, have holes, contain the pole...
+ Fixes issue #216
+
+
+ Added a protection against low altitudes in JB2006 model.
+ Fixes issue #214
+
+
+ Enlarged access to SGP4 and DeepSDP4 propagators.
+ Fixes issue #207
+
+
+ Fixed covariance matrices units when read from CCSDS ODM files. The
+ data returned at API level are now consistent with SI units, instead of
+ being
+ kilometer-based.
+ Fixes issue #217
+
+
+ Fixed DSST ephemeris generation.
+ Fixes issue #222
+
+
+ Vastly improved DSS short period terms interpolation.
+
+
+ Use new Rotation API from Apache Commons Math 3.6.
+ This API allows to use both vector operator convention and frames
+ transform convention naturally. This is useful when axis/angles are
+ involved, or when composing rotations. This probably fixes one of
+ the oldest stumbling blocks for Orekit users.
+
+
+ Fixed state partial derivatives in drag force model.
+ Fixes issue #229
+
+
+ Fixed incorrect density in DTM2000 when the input position is not in ECI
+ or ECEF.
+ Fixes issue #228
+
+
+ Added capability to use a single EventHandler with multiple types of
+ EventDetectors.
+
+
+ Added a way to customize interpolation grid in DSST, either using a fixed
+ number
+ of points or a maximum time gap between points, for each mean elements
+ integration
+ step.
+
+
+ Added TabulatedLofOffset for attitudes defined by tabulating rotations
+ between Local Orbital Frame
+ and spacecraft frame.
+ Fixes issue #227
+
+
+ Fixed wrong ephemeris generation for analytical propagators with
+ maneuvers.
+ Fixes issue #224.
+
+
+ Fixed date offset by one second for TLE built from their components,
+ if a leap second was introduced earlier in the same year.
+ Fixes issue #225.
+
+
+ Allow parsing TLE with non-unclassified modifier.
+
+
+ As a side effect of fixing issue #223, KeplerianPropagator and
+ Eckstein-Hechler propagator are now serializable.
+
+
+ Fixed missing additional states handling in ephemeris propagators
+ created from analytical propagators.
+
+
+ Fixed NPE and serialization issues in ephemeris propagators created
+ from analytical propagators.
+ Fixes issue #223.
+
+
+ Fixed time scale issues in JPL ephemerides and IAU pole models.
+ The time used for internal computation should be TDB, not TT.
+
+
+ Fixed an issue with backward propagation on analytical propagator.
+ During first step, the analytical interpolator wrongly considered the
+ propagation was forward.
+
+
+ Added a way to retrieve short period coefficients from DSST as
+ spacecraft state additional parameters. This is mainly intended
+ for test and validation purposes.
+
+
+ Prevent small overshoots of step limits in event detection.
+ Fixes issue #218.
+
+
+ Handle string conversion of dates properly for dates less than 1
+ millisecond
+ before midnight (they should not appear as second 60.0 of previous minute
+ but
+ should rather wrap around to next minute).
+ Partly fixes issue #218.
+
+
+ Enforce Lexicographical order in DirectoryCrawler, to ensure reproducible
+ loading. Before this changes, some tests could fail in one computer
+ while
+ succeeding in another computer as we use a mix of DE-4xx files, some having
+ a different EMRAT (81.30056907419062 for DE-431, 81.30056 for DE-405
+ and DE-406).
+
+
+ Added EventEnablingPredicateFilter to filter event based on an
+ user-provided
+ enabling predicate function. This allow for example to dynamically turn some
+ events on and off during propagation or to set up some elaborate
+ logic like
+ triggering on elevation first time derivative (i.e. one elevation maximum)
+ but only when elevation itself is above some threshold.
+
+
+ Renamed EventFilter into EventSlopeFilter.
+
+
+ Added elevation extremum event detector.
+
+
+ Fixed ellipsoid tessellation with large tolerances.
+ Fixes issue #215.
+
+
+ Fixed numerical precision issues for start/end dates of generated
+ ephemerides.
+ Fixes issues #210
+
+
+ Added anomaly, latitude argument, or longitude argument crossings
+ detector,
+ either true, mean or eccentric.
+ Fixes issue #213.
+
+
+ Added latitude and longitude extremum detector.
+
+
+ Added latitude and longitude crossing detector.
+
+
+ Added a way to convert between PVA and geodetic points with time
+ derivatives.
+
+
+ Allow truncation of tiles in ellipsoid tessellation.
+
+
+ Propagator builders can now be configured to accept any orbit types
+ and any position angle types in the input flat array.
+ Fixes issue #208.
+
+
+ Added smooth attitude transitions in attitudes sequences, with
+ derivatives
+ continuity at both endpoints of the transition that can be forced to match
+ rotation, rotation rate and rotation acceleration.
+ Fixes issue #6.
+
+
+ Fixed attitudes sequence behavior in backward propagation.
+ Fixes issue #206.
+
+
+ Added factory methods to create AbsoluteDate instances from MJD or JD.
+ Fixes issue #193.
+
+
+ Fixed wrong attitude switches when an event occurs but the active
+ attitude mode
+ is not the one it relates to.
+ Fixes issue #190.
+
+
+ Added a way to be notified when attitude switches occur.
+ Fixes issue #190.
+
+
+ Ensure Keplerian propagator uses the specified mu and not only the one
+ from the initial orbit.
+ Fixes issue #184.
+
+
+ Improved frames transforms efficiency for various Earth frames.
+
+
+ Specify inertial frame to compute orbital velocity for ground pointing
+ laws.
+ Fixes issue #115.
+
+
+ Activated two commented-out tests for DTM2000, after ensuring we
+ get the same results as the original fortran implementation.
+ Fixes issue #204.
+
+
+ Fixed resetting of SecularAndHarmonic fitting.
+ Fixes issue #205.
+
+
+ Added a way to sample a zone on an ellipsoid as grids of inside points.
+ Fixes issue #201.
+
+
+ Fixed an event detection problem when two really separate events occur
+ within
+ the event detector convergence threshold.
+ Fixes issue #203.
+
+
+ Added protections against TLE parameters too large to fit in the format.
+ Fixes issue #77.
+
+
+ Allowed slightly malformed TLE to be parsed.
+ Fixes issue #196.
+
+
+ Fixed overlapping issue in ellipsoid tessellation, typically for
+ independent
+ zones (like islands) close together.
+ Fixes issue #195.
+
+
+ Added support to load WMM coefficients from the official model file
+ provided by NOAA.
+
+
+ Fixed javadoc of method "GeoMagneticField#calculateField(...)":
+ the provided altitude is expected to be a height above the WGS84
+ ellipsoid.
+
+
+ Added a simpler interface for creating custom UTC-TAI offsets loaders.
+
+
+ Added support for USNO tai-utc.dat file, enabled by default, in
+ addition to the legacy support for IERS UTC-TAI.history file
+ which is still supported and also enabled by default.
+
+
+ Added a way to load TAI-UTC data from Bulletin A. Using this feature
+ is however NOT recommended as there are known issues in TAI-UTC data
+ in some bulletin A (for example bulletina-xix-001.txt from
+ 2006-01-05
+ has a wrong year for last leap second and bulletina-xxi-053.txt from
+ 2008-12-31 has an off by one value for TAI-UTC on MJD 54832). This
+ feature is therefore not enabled by default, and users wishing to
+ rely on it should do it carefully and take their own
+ responsibilities.
+
+
+ Added ellipsoid tessellation, with tiles either oriented along track
+ (ascending or descending) or at constant azimuth.
+
+
+ Added customization of EOP continuity check threshold.
+ Fixes issue #194.
+
+
+ Added geoid model based on gravity field.
+ Fixes issue #192.
+
+
+ Added automatic loading of Marshall Solar Activity Future Estimation
+ data.
+ Fixes issue #191.
+
+
+ Simplified Cartesian to ellipsoidal coordinates transform and greatly improved
+ its performances.
+
+
+ Fixed target point in BodyCenterPointing attitude.
+ Fixes issue #100.
+
+
+
-
- Added bilinear interpolator and use it on Saastamoinen model.
- Implements feature #182.
-
-
- Removed old parts that were deprecated in previous versions.
-
-
- Updated dependency to Apache Commons Math 3.4, released on 2014-12-26.
-
-
- Fixed null vector normalization when attempting to project to ground a point already on ground.
- Fixes issue #181.
-
-
- Added Romanian localization for error messages.
-
-
- Fixed velocity inconsistency in orbit generation in Eckstein-Hechler propagator.
- The Eckstein-Hechler propagator now generated Cartesian orbits, with velocity
- computed to be fully consistent with model evolution. A side effect is that
- if users rebuild circular parameters from the generated orbits, they will
- generally not math exactly the input circular parameters (but position will
- match exactly).
- Fixes issue #180.
-
-
- Improved acceleration output in Eckstein-Hechler model.
-
-
- Added projection of moving point (i.e. position and derivatives too) to
- ground surface.
-
-
- Added a general 3 axes ellipsoid class, including a feature to compute
- any plane section (which result in a 2D ellipse).
-
-
- Added support for IERS bulletin A (rapid service and prediction)
-
-
- Fixed various issues in geomagnetic fields models:
- GeoMagneticField.getDecimalYear() returned a slightly wrong result: e.g. for 1/1/2005
- returned 2005.0020 instead of 2005.0, GeoMagneticFieldFactory.getModel() returned
- wrong interpolation near models validity endpoints, GeoMagneticField.transformModel(double)
- method did not check year validity. Added more unit tests and adapted existing tests for
- IGRF/WMM with sample values / results as they have changed slightly.
- Fixes issue #178.
-
-
- Fixed closest TLE search. When filtering first from satellite ID and
- then extracting closest date, the returned satellite was sometime wrong.
-
-
- Allow attitude overriding during impulsive maneuvers.
- Fixes issue #176.
-
-
- Added general relativity force model.
-
-
- added Greek localization for error messages.
-
-
- Fixed incorrect partial derivatives for force models that depend on satellite velocity.
- Fixes #174.
-
-
- Fixed incorrect parameters set in NumericalPropagatorBuilder.
- Fixes #175.
-
-
- Significantly reduced size of various serialized objects.
-
-
- PVCoordinatesProvider now produces time-stamped position-velocities.
-
-
- Tabulated attitude provider can be built directly from time-stamped angular coordinates
- lists, in addition to attitudes lists.
-
-
- Added time-stamped versions of position-velocity and angular coordinates.
-
-
- Fixed wrong rotation interpolation for rotations near π.
- Fixes issue #173.
-
-
- Updated dependency to Apache Commons Math 3.3.
-
-
- Added short periodics for DSST propagation.
-
-
- Added a GeographicZoneDetector event detector for complex geographic zones traversal.
- Fixes issue #163.
-
-
- Add Ecliptic frame. Agrees with JPL ephemerides to within 0.5 arcsec.
- Issue #166.
-
-
- Fix cache exception when propagating backwards with an interpolated
- gravity force model.
- Fixes issue #169.
-
-
- Fixed parsing of dates very far in the future.
- Fixes issue #171.
-
-
- Trigger an exception when attempting to interpolate attitudes without rotation rate
- using only one data point.
-
-
- Fixed SpacecraftState date mismatch exception with some attitude providers.
-
-
- Fixed wrong scaling in JPL ephemeris when retrieving coordinates in a frame
- that is not the defining frame of the celestial body.
- Fixes issue #165.
-
-
- Prepare generation of either mean or osculating orbits by DSST propagator.
- The short periodics terms are not computed yet, but there is ongoing work
- to add them.
-
-
- Avoid recomputing Chi and Chi^2 in Hansen coefficients for tesseral.
-
-
- Added better handling of Hansen kernel computation through use of PolynomialFunction.
-
-
- Compute Hansen coefficients using linear transformation.
-
-
- Fixed a non-bracketing exception in event detection, in some rare cases of noisy g function.
- Fixes issue #160.
-
-
- Fixed a missing reset of resonant tesseral terms in DSST propagation.
- Fixes issue #159.
-
-
- Improved default max check interval for NodeDetector, so it handles correctly
- highly eccentric orbits.
- Fixes issue #158.
-
-
-
+ Added bilinear interpolator and use it on Saastamoinen model.
+ Implements feature #182.
+
+
+ Removed old parts that were deprecated in previous versions.
+
+
+ Updated dependency to Apache Commons Math 3.4, released on 2014-12-26.
+
+
+ Fixed null vector normalization when attempting to project to ground a
+ point already on ground.
+ Fixes issue #181.
+
+
+ Added Romanian localization for error messages.
+
+
+ Fixed velocity inconsistency in orbit generation in Eckstein-Hechler
+ propagator.
+ The Eckstein-Hechler propagator now generated Cartesian orbits, with
+ velocity
+ computed to be fully consistent with model evolution. A side effect is that
+ if users rebuild circular parameters from the generated orbits, they
+ will
+ generally not math exactly the input circular parameters (but position will
+ match exactly).
+ Fixes issue #180.
+
+
+ Improved acceleration output in Eckstein-Hechler model.
+
+
+ Added projection of moving point (i.e. position and derivatives too) to
+ ground surface.
+
+
+ Added a general 3 axes ellipsoid class, including a feature to compute
+ any plane section (which result in a 2D ellipse).
+
+
+ Added support for IERS bulletin A (rapid service and prediction)
+
+
+ Fixed various issues in geomagnetic fields models:
+ GeoMagneticField.getDecimalYear() returned a slightly wrong result:
+ e.g. for 1/1/2005
+ returned 2005.0020 instead of 2005.0, GeoMagneticFieldFactory.getModel()
+ returned
+ wrong interpolation near models validity endpoints,
+ GeoMagneticField.transformModel(double)
+ method did not check year validity. Added more unit tests and adapted
+ existing tests for
+ IGRF/WMM with sample values / results as they have changed slightly.
+ Fixes issue #178.
+
+
+ Fixed closest TLE search. When filtering first from satellite ID and
+ then extracting closest date, the returned satellite was sometime wrong.
+
+
+ Allow attitude overriding during impulsive maneuvers.
+ Fixes issue #176.
+
+
+ Added general relativity force model.
+
+
+ added Greek localization for error messages.
+
+
+ Fixed incorrect partial derivatives for force models that depend on
+ satellite velocity.
+ Fixes #174.
+
+
+ Fixed incorrect parameters set in NumericalPropagatorBuilder.
+ Fixes #175.
+
+
+ Significantly reduced size of various serialized objects.
+
+
+ PVCoordinatesProvider now produces time-stamped position-velocities.
+
+
+ Tabulated attitude provider can be built directly from time-stamped angular
+ coordinates
+ lists, in addition to attitudes lists.
+
+
+ Added time-stamped versions of position-velocity and angular coordinates.
+
+
+ Fixed wrong rotation interpolation for rotations near π.
+ Fixes issue #173.
+
+
+ Updated dependency to Apache Commons Math 3.3.
+
+
+ Added short periodics for DSST propagation.
+
+
+ Added a GeographicZoneDetector event detector for complex geographic
+ zones traversal.
+ Fixes issue #163.
+
+
+ Add Ecliptic frame. Agrees with JPL ephemerides to within 0.5 arcsec.
+ Issue #166.
+
+
+ Fix cache exception when propagating backwards with an interpolated
+ gravity force model.
+ Fixes issue #169.
+
+
+ Fixed parsing of dates very far in the future.
+ Fixes issue #171.
+
+
+ Trigger an exception when attempting to interpolate attitudes without
+ rotation rate
+ using only one data point.
+
+
+ Fixed SpacecraftState date mismatch exception with some attitude
+ providers.
+
+
+ Fixed wrong scaling in JPL ephemeris when retrieving coordinates in a
+ frame
+ that is not the defining frame of the celestial body.
+ Fixes issue #165.
+
+
+ Prepare generation of either mean or osculating orbits by DSST propagator.
+ The short periodics terms are not computed yet, but there is ongoing
+ work
+ to add them.
+
+
+ Avoid recomputing Chi and Chi^2 in Hansen coefficients for tesseral.
+
+
+ Added better handling of Hansen kernel computation through use of
+ PolynomialFunction.
+
+
+ Compute Hansen coefficients using linear transformation.
+
+
+ Fixed a non-bracketing exception in event detection, in some rare cases
+ of noisy g function.
+ Fixes issue #160.
+
+
+ Fixed a missing reset of resonant tesseral terms in DSST propagation.
+ Fixes issue #159.
+
+
+ Improved default max check interval for NodeDetector, so it handles
+ correctly
+ highly eccentric orbits.
+ Fixes issue #158.
+
+
+
-
- Reduced number of calls to the g function in event detectors.
- Fixes issue #108.
-
-
- Fixed a spurious backward propagation.
- Fixes issue #107.
-
-
- Improved error detection for numerical and DSST propagation for cases
- where user attempts to compute integrator tolerances with an orbit for
- which Jacobian is singular (for example equatorial orbit while using
- Keplerian representation).
- Fixes issue #157.
-
-
- Added a method to get the number or calls to getNeighbors in the generic time stamped cache,
- to allow performing measurements while tuning the cache.
-
-
- Added high degree ocean load deformation coefficients computed by Pascal
- Gégout (CNRS / UMR5563 - GET).
-
-
- Time scales are now serializable.
-
-
- Improved DSST tesseral computation efficiency by caching Jacobi polynomials.
-
-
- Fixed yaw steering attitude law, which didn't project spacecraft velocity correctly.
- Fixes issue #156.
-
-
- Added a way to set the maximum number of iterations for events detection.
- Fixes issue #155.
-
-
- Added an attitude provider from tabulated attitudes.
- Fixes issue #154.
-
-
- Improved test coverage.
- Fixes issue #153.
-
-
- Merged all elevation detectors into one. The new detector supports all
- features from the previous (and now deprecated) ApparentElevationDetector
- and GroundMaskElevationDetector.
- Fixes issue #144.
-
-
- Added a DetectorEventHandler interface aimed at handling only the
- event occurrence part in propagation. This allows to separate the
- event detection itself (which is declared by the EventDetector interface)
- from the action to perform once the event has been detected. This also
- allows to avoid subclassing of events, which was cumbersome. It also allows
- to share a single handler for several events.
- The previous behavior with eventOccurred declared at detector level and
- subclassing is still available but is deprecated and will be removed in
- the next major release.
-
-
- Fixed an indexing error in Harris-Priester model.
- Fixes issue #152.
-
-
- Added a new force model for ocean tides in numerical propagation, including pole tides.
- Fixes issue #11.
-
-
- Fixed conversion from position-velocity to Keplerian, when the orbit is
- perfectly equatorial.
- Fixes issue #151.
-
-
- Added a new force model for solid tides in numerical propagation, including pole tides.
- Fixes issue #10.
-
-
- Added a way to select IERS conventions for non-rotating origin
- based ITRF.
-
-
- Greatly improved accuracy of celestial/terrestrial frames transforms.
- We are now at sub-micro arcsecond level for IERS 2003/2010, both with
- equinox based and Non-Rotating Origin, at a sub-milli arcseconds
- for IERS 1996, both with equinox based and Non-Rotating Origin.
-
-
- Fixed missing nutation correction in Equation Of Equinoxes.
- Fixes issue #150.
-
-
- Fixed rate for TCB time scale.
-
-
- Added new definition of astronomical unit from IAU-2012 resolution B2.
-
-
- Fixed Date/Time split problem when date is a few femto-seconds before the end of the day.
- Fixes issue #149.
-
-
- Fixed overflow problem in TimeComponents.
- Fixes issue #148.
-
-
- Separate parsing from using Poisson series.
-
-
- Added support for parsing CCSDS ODM files (OPM, OMM and OEM).
-
-
- Flattened ITRF frames tree so all supported ITRF realizations (2005, 2000, 97, 93) share the same
- parent ITRF2008. Previously, the tree was 2008 <- 2005 <- 2000 <- {93,97} and the reference dates
- for Helmert transforms were all different. We now use the parameters provided at epoch 2000.0 and
- with respect to ITRF2008 at http://itrf.ensg.ign.fr/doc_ITRF/Transfo-ITRF2008_ITRFs.txt.
-
-
- Fixed azimuth parameter in the TopocentricFrame.pointAtDistance method.
- Fixes issue #145.
-
-
- Fixed location of JAVA_EPOCH. As we now take the linear models between UTC and TAI
- that were used between 1961 and 1972, we have to consider the offset that was in
- effect on 1970-01-01 and which was precisely 8.000082s. Fixes issue #142.
-
-
- Vastly improved performances for Poisson series computations. Poisson series are often
- evaluated several components together (x/y/s in new non-rotating paradigm, ∆ψ/∆ε in old
- equinox paradigm for example). As the components are built from a common model, they
- share many nutation terms. We now evaluate these shared terms only once, as we evaluate
- the components in parallel thanks to a preliminary "compilation" phase performed when
- the Poisson series are set up. This dramatically improves speed: on a test case based
- on x/y/s evaluations over a one year time span without any caching, we noticed a
- more than two-fold speedup: mean computation time reduced from 6.75 seconds (standard
- deviation 0.49s) to 3.07 seconds (standard deviation 0.04s), so it was a 54.5% reduction
- in mean computation time. At the same time, accuracy was also improved thanks to the
- Møller-Knuth TwoSum algorithm without branching now used for summing all series terms.
-
-
- When UT1 time scale is used, it is now possible to choose which Earth Orientation
- Parameters history to use (formerly, only EOP compatible with IAU-2000/2006 was
- used, even for systems relying only on older conventions).
-
-
- Added Greenwich Mean Sidereal Time and Greenwich Apparent Sidereal Time
- to all supported IERS conventions (i.e. IERS 1996, IERS 2003 and IERS 2010).
-
-
- Classical equinox-based paradigm and new non-rotating origin paradigm for
- inertial and terrestrial frames are now supported with all IERS conventions.
- This means it is now possible to use MOD/TOD/GTOD with the recent precession/nutation
- models from recent conventions, and it is also possible to use CIRF/TIRF/ITRF with
- the older precession nutation models from ancient conventions. Of course, all these
- conventions and frames can be used at the same time, which is very important to
- support legacy systems and to convert coordinates between older and newer reference
- systems.
-
-
- Added IERS 1996 in the list of supported IERS conventions.
-
-
- Added factory methods to compute arbitrary Julian Epochs (J1900.0, J2000.0 ...)
- and Besselian Epochs (B1900.0, B1950.0 ...) that are used as reference dates
- in some models and frames.
-
-
- Fixed non-bracketing exception while converting Cartesian points very close to equator into geodetic
- coordinates. Fixes issue #141.
-
-
- Added getAngularVelocity() to PVCoordinates.
-
-
- Added back serialization for some ephemerides produced by integration-based propagators.
- The ephemerides produced by NumericalPropagator are always serializable, and the ones
- produced by DSSTPropagator may be serializable or not depending on the force models used.
-
-
- Fixed missing events detection when two events occurred at exactly the same time using an analytical
- propagator (like generated ephemerides for example). Fixes issue #138.
-
-
- Fixed data loading from zip/jar. A more streamlined architecture has been set up, and each zip entry
- now uses its own input stream. Closing the stream triggers the switch to the next entry, and duplicate
- close are handled gracefully. Fixes issue #139.
-
-
- Improved event bracketing by backporting changes made in Apache Commons Math (may fix issues #110
- and #136, but we cannot be sure as neither issues were reproducible even before this change...).
-
-
- Fixed GTOD and Veis frame that did apply UT1-UTC correction when they should not (fixes issue #131).
-
-
- Completely rewrote conversion from Cartesian to geodetic coordinates to improve
- numerical stability for very far points (typically when computing coordinates
- of Sun). Fixes issue #137.
-
-
-
+ Reduced number of calls to the g function in event detectors.
+ Fixes issue #108.
+
+
+ Fixed a spurious backward propagation.
+ Fixes issue #107.
+
+
+ Improved error detection for numerical and DSST propagation for cases
+ where user attempts to compute integrator tolerances with an orbit for
+ which Jacobian is singular (for example equatorial orbit while using
+ Keplerian representation).
+ Fixes issue #157.
+
+
+ Added a method to get the number or calls to getNeighbors in the generic
+ time stamped cache,
+ to allow performing measurements while tuning the cache.
+
+
+ Added high degree ocean load deformation coefficients computed by Pascal
+ Gégout (CNRS / UMR5563 - GET).
+
+
+ Time scales are now serializable.
+
+
+ Improved DSST tesseral computation efficiency by caching Jacobi polynomials.
+
+
+ Fixed yaw steering attitude law, which didn't project spacecraft velocity
+ correctly.
+ Fixes issue #156.
+
+
+ Added a way to set the maximum number of iterations for events detection.
+ Fixes issue #155.
+
+
+ Added an attitude provider from tabulated attitudes.
+ Fixes issue #154.
+
+
+ Improved test coverage.
+ Fixes issue #153.
+
+
+ Merged all elevation detectors into one. The new detector supports all
+ features from the previous (and now deprecated)
+ ApparentElevationDetector
+ and GroundMaskElevationDetector.
+ Fixes issue #144.
+
+
+ Added a DetectorEventHandler interface aimed at handling only the
+ event occurrence part in propagation. This allows to separate the
+ event detection itself (which is declared by the EventDetector interface)
+ from the action to perform once the event has been detected. This
+ also
+ allows to avoid subclassing of events, which was cumbersome. It also
+ allows
+ to share a single handler for several events.
+ The previous behavior with eventOccurred declared at detector level and
+ subclassing is still available but is deprecated and will be removed
+ in
+ the next major release.
+
+
+ Fixed an indexing error in Harris-Priester model.
+ Fixes issue #152.
+
+
+ Added a new force model for ocean tides in numerical propagation,
+ including pole tides.
+ Fixes issue #11.
+
+
+ Fixed conversion from position-velocity to Keplerian, when the orbit is
+ perfectly equatorial.
+ Fixes issue #151.
+
+
+ Added a new force model for solid tides in numerical propagation,
+ including pole tides.
+ Fixes issue #10.
+
+
+ Added a way to select IERS conventions for non-rotating origin
+ based ITRF.
+
+
+ Greatly improved accuracy of celestial/terrestrial frames transforms.
+ We are now at sub-micro arcsecond level for IERS 2003/2010, both with
+ equinox based and Non-Rotating Origin, at a sub-milli arcseconds
+ for IERS 1996, both with equinox based and Non-Rotating Origin.
+
+
+ Fixed missing nutation correction in Equation Of Equinoxes.
+ Fixes issue #150.
+
+
+ Fixed rate for TCB time scale.
+
+
+ Added new definition of astronomical unit from IAU-2012 resolution B2.
+
+
+ Fixed Date/Time split problem when date is a few femto-seconds before the
+ end of the day.
+ Fixes issue #149.
+
+
+ Fixed overflow problem in TimeComponents.
+ Fixes issue #148.
+
+
+ Separate parsing from using Poisson series.
+
+
+ Added support for parsing CCSDS ODM files (OPM, OMM and OEM).
+
+
+ Flattened ITRF frames tree so all supported ITRF realizations (2005, 2000,
+ 97, 93) share the same
+ parent ITRF2008. Previously, the tree was 2008 <- 2005 <- 2000 <-
+ {93,97} and the reference dates
+ for Helmert transforms were all different. We now use the parameters
+ provided at epoch 2000.0 and
+ with respect to ITRF2008 at
+ http://itrf.ensg.ign.fr/doc_ITRF/Transfo-ITRF2008_ITRFs.txt.
+
+
+ Fixed azimuth parameter in the TopocentricFrame.pointAtDistance method.
+ Fixes issue #145.
+
+
+ Fixed location of JAVA_EPOCH. As we now take the linear models between
+ UTC and TAI
+ that were used between 1961 and 1972, we have to consider the offset
+ that was in
+ effect on 1970-01-01 and which was precisely 8.000082s. Fixes issue #142.
+
+
+ Vastly improved performances for Poisson series computations. Poisson
+ series are often
+ evaluated several components together (x/y/s in new non-rotating paradigm,
+ ∆ψ/∆ε in old
+ equinox paradigm for example). As the components are built from a common
+ model, they
+ share many nutation terms. We now evaluate these shared terms only once,
+ as we evaluate
+ the components in parallel thanks to a preliminary "compilation" phase
+ performed when
+ the Poisson series are set up. This dramatically improves speed: on a
+ test case based
+ on x/y/s evaluations over a one year time span without any caching, we
+ noticed a
+ more than two-fold speedup: mean computation time reduced from 6.75
+ seconds (standard
+ deviation 0.49s) to 3.07 seconds (standard deviation 0.04s), so it was a
+ 54.5% reduction
+ in mean computation time. At the same time, accuracy was also improved
+ thanks to the
+ Møller-Knuth TwoSum algorithm without branching now used for summing all series
+ terms.
+
+
+ When UT1 time scale is used, it is now possible to choose which Earth
+ Orientation
+ Parameters history to use (formerly, only EOP compatible with IAU-2000/2006
+ was
+ used, even for systems relying only on older conventions).
+
+
+ Added Greenwich Mean Sidereal Time and Greenwich Apparent Sidereal Time
+ to all supported IERS conventions (i.e. IERS 1996, IERS 2003 and
+ IERS 2010).
+
+
+ Classical equinox-based paradigm and new non-rotating origin paradigm for
+ inertial and terrestrial frames are now supported with all IERS
+ conventions.
+ This means it is now possible to use MOD/TOD/GTOD with the recent
+ precession/nutation
+ models from recent conventions, and it is also possible to use
+ CIRF/TIRF/ITRF with
+ the older precession nutation models from ancient conventions. Of
+ course, all these
+ conventions and frames can be used at the same time, which is very important to
+ support legacy systems and to convert coordinates between older and
+ newer reference
+ systems.
+
+
+ Added IERS 1996 in the list of supported IERS conventions.
+
+
+ Added factory methods to compute arbitrary Julian Epochs (J1900.0,
+ J2000.0 ...)
+ and Besselian Epochs (B1900.0, B1950.0 ...) that are used as reference
+ dates
+ in some models and frames.
+
+
+ Fixed non-bracketing exception while converting Cartesian points very
+ close to equator into geodetic
+ coordinates. Fixes issue #141.
+
+
+ Added getAngularVelocity() to PVCoordinates.
+
+
+ Added back serialization for some ephemerides produced by
+ integration-based propagators.
+ The ephemerides produced by NumericalPropagator are always
+ serializable, and the ones
+ produced by DSSTPropagator may be serializable or not depending on the force
+ models used.
+
+
+ Fixed missing events detection when two events occurred at exactly the
+ same time using an analytical
+ propagator (like generated ephemerides for example). Fixes issue #138.
+
+
+ Fixed data loading from zip/jar. A more streamlined architecture has been
+ set up, and each zip entry
+ now uses its own input stream. Closing the stream triggers the switch
+ to the next entry, and duplicate
+ close are handled gracefully. Fixes issue #139.
+
+
+ Improved event bracketing by backporting changes made in Apache Commons Math
+ (may fix issues #110
+ and #136, but we cannot be sure as neither issues were reproducible
+ even before this change...).
+
+
+ Fixed GTOD and Veis frame that did apply UT1-UTC correction when they
+ should not (fixes issue #131).
+
+
+ Completely rewrote conversion from Cartesian to geodetic coordinates to
+ improve
+ numerical stability for very far points (typically when computing coordinates
+ of Sun). Fixes issue #137.
+
+
+
-
- Fixed conversion of mean anomaly to hyperbolic eccentric anomaly (fixes issue #135).
-
-
- Extracted fundamental nutation arguments from CIRF frame. This allows both reuse of
- the arguments for other computations (typically tides), and also allows to use
- convention-dependent arguments (they are similar for IERS conventions 2003 and 2010,
- but have changed before and may change in the future).
-
-
- Fixed event g function correction when starting exactly at 0 with a backward
- propagation (fixes issue #125).
-
-
- Error messages properties are now loaded directly in UTF-8.
-
-
- Added a way to know which tide system is used in gravity fields (zero-tide,
- tide-free or unknown).
-
-
- Added orphan frame, i.e. trees that are not yet connected to the main
- frame tree but attached later on. This allows building frame trees
- from leaf to root. This change fixes feature request #98.
-
-
- Added a way to filter only increasing or decreasing events. The filtering
- occurs a priori, i.e. the filtered out events do not trigger a search.
- Only the interesting events are searched for and contribute to computation
- time. This change fixes feature request #104.
-
-
- Added a semianalytical propagator based on the Draper Semianalytic
- Satellite Theory. The DSST accounts for all significant perturbations
- (central body including tesseral harmonics, third-body, drag, solar
- radiation pressure) and is applicable to all orbit classes.
- To begin with, only mean elements propagation is available.
-
-
- Greatly improved performance of time-stamped caches for data that is
- read only once (like UTC leap seconds history or EOP).
-
-
- Additional states can now be used in events. Note that waiting for the
- fix for issue MATH-965 in Apache Commons Math to be been officially
- published, a workaround has been used in Orekit. This workaround
- implies that events that should be triggered based on additional equations
- for integration-based propagator will be less accurate on the first step
- (full accuracy is recovered once the first step is accepted).
- So in these corner cases, users are advised to start propagation at least
- one step before the first event (or to use a version of Apache Commons Math
- that includes the fix, which has been added to the development version as
- of r1465654). This change fixes feature request #134.
-
-
- AdditionalStateProviders can now be used for all propagators, not
- only analytical ones. Note that when both state providers and
- additional differential equations are used in an integration-based
- propagator, they must used different states names. A state can only
- be handled by one type at a time, either already integrated or
- integrated by the propagator (fixes feature request #133).
-
-
- Added a way to store user data into SpacecraftState. User data are
- simply double arrays associated to a name. They are handled properly
- by interpolation, event handlers, ephemerides and adapter propagators.
- Note that since SpacecraftState instances are immutable, adding states
- generates a new instance, using a fluent API principle (fixes feature request #132).
-
-
- Added a way to retrieve all additional states at once from a step interpolator.
-
-
- Fixed wrong orientation for ICRF and all IAU pole and prime meridians
- (a few tens milli-arcseconds). This error mainly induced an error in
- celestial bodies directions, including the Sun which is used in many
- places in Orekit (fixes bug #130).
-
-
- Added support for IERS conventions 2010. Note that Orekit still also
- support conventions 2003 in addition to conventions 2010. However, as
- IERS does not provide anymore data to link TIRF 2003 with ITRF, ITRF
- based on 2003 convention is not available. ITRF can only be based on
- either 2010 conventions for CIO-based paradigm or on 1996 conventions
- for equinox-based paradigm.
-
-
- Atmosphere models now provide their central body frame.
-
-
- Added versions of angular coordinates and position-velocity that use
- any field instead of double (classes FieldAngularCoordinates and
- FieldPVCoordinates). This allows to compute derivatives of these quantities
- with respect to any number of variables and to any order (using DerivativeStructure
- for the field elements), or to compute at arbitrary precision (using Dfp for
- the field elements). Regular transforms as produced by frames
- handle these objects properly and compute partial derivatives for them.
-
-
- Converted Cunningham and Droziner force models to use the API of the new
- partial derivatives framework, despite they STILL USE finite differences.
- These two force models are now considered obsolete, they have been
- largely superseded by the Holmes-Featherstone model, which can be used
- for much larger degrees (Cunnigham and Droziner use un-normalized
- equations and coefficients which underflow at about degree 90), which
- already provides analytical derivatives, and which is twice faster. It
- was therefore considered a waste of time to develop analytical derivatives
- for them. As a consequence, they use finite differences to compute their
- derivatives, which adds another huge slow down factor when derivatives are
- requested. So users are strongly recommended to avoid these models when
- partial derivatives are desired...
-
-
- Added analytical computation of partial derivatives for third-body
- attraction.
-
-
- Added analytical computation of partial derivatives for constant
- thrust maneuvers.
-
-
- Converted Newtonian force model to use the new partial derivatives
- framework.
-
-
- Converted Holmes-Featherstone force model to use the new partial derivatives
- framework.
-
-
- Added analytical computation of partial derivatives for surface forces
- (drag and radiation pressure) for all supported spacecraft body shapes.
-
-
- Streamlined the force models partial derivatives computation for numerical
- propagation. It is now far simpler to compute analytically the derivatives
- with respect to state and with respect to force models specific parameters,
- thanks to the new Apache Commons Math differentiation framework.
-
-
- Added a new force model for central body gravity field, based on Holmes and Featherstone
- algorithms. This model is a great improvement over Cunningham and Droziner models. It
- allows much higher degrees (it uses normalized coefficients and carefully crafted
- recursions to avoid overflows and underflows). It computes analytically all partial
- derivatives and hence can be used to compute accurate state transition matrices. It is
- also much faster than the other models (for example a 10 days propagation of a low Earth
- orbit with a 1cm tolerance setting and a 69x69 gravity field was about 45% faster with
- Holmes and Featherstone than with Cunningham).
-
-
- Improved gravity field un-normalization to allow higher degrees/order with Cunningham and
- Droziner models. Formerly, the coefficients computation underflowed for square fields
- degree = order = 85, and for non-square fields at degree = 130 for order = 40. Now square
- fields can go slightly higher (degree = order = 89) and non-square fields can go much
- higher (degree = 393 for order = 63 for example). Attempts to use un-normalization past
- the underflow limit now raises an exception.
-
-
- Updated Orekit to version 3.1.1 of Apache Commons Math.
-
-
- Added support for time-dependent gravity fields. All recent gravity
- fields include time-dependent coefficients (linear trends and pulsations
- at several different periods). They are now properly handled by Orekit.
- For comparison purposes, it is still possible to retrieve only the constant
- part of a field even if the file contains time-dependent coefficients too.
-
-
- Added a way to speed up parsing and reduce memory consumption when
- loading gravity fields. Now the user can specify the maximal degree
- and order before reading the file.
-
-
- The EGM gravity field reader did not complain when files with missing
- coefficients were provided, even when asked to complain.
-
-
- Fixed serialization of all predefined frames. This fix implied
- also fixing serialization of celestial bodies as the predefined
- ICRF frame relies on them. Note for both types of objects, only
- some meta-data are really serialized in such a way that at
- deserialization time we retrieve singletons. So the serialized
- data are small (less than 500 bytes) and exchanging many time
- these objects in a distributed application does not imply anymore
- lots of duplication.
-
-
- Throw an exception if the conversion of mean anomaly to hyperbolic
- eccentric anomaly does not converge in KeplerianOrbit (fixes bug #114).
-
-
- Removed weak hash maps in frames (fixes bug #122).
-
-
- Improved documentation of interpolation methods (fixes bug #123).
-
-
- Make TIRF2000Provider class thread-safe (fixes bug #118).
-
-
- Correct spelling of the inner class QuadratureComputation (fixes bug #120).
-
-
- Remove unnecessary synchronization in UT1Scale (fixes bug #119).
-
-
- Clear caches in CelestialBodyFactory when removing CelestialBodyLoaders
- (fixes bug #106).
-
-
- Fix loading of JPL ephemerides files with overlapping periods
- (fixes bug #113).
-
-
- Prevent initialization exception in UTCScale in case no user-defined
- offsets are provided. (fixes bug #111).
-
-
- Improved performance by caching EME2000 frame in AbstractCelestialBody
- (fixes bug #116).
-
-
- Make TidalCorrections class thread-safe by using the new TimeStampedCache.
- (fixes bug #117).
-
-
- Convert position entries contained in SP3 files to meters instead of km
- (fixes bug #112).
-
-
- Added support for version 2011 of ICGEM gravity field format. Orekit
- still ignore the time-dependent part of these fields, though.
-
-
- Greatly simplified CelestialBodyLoader interface, now it is not related
- to DataLoader anymore (which implies users can more easily provide
- analytical models instead of the JPL/IMCCE ephemerides if they want)
-
-
- Use the new thread-safe caches and the new Hermite interpolation feature on
- Transform, Earth Orientation Parameters, JPL/IMCCE ephemerides, UTC-TAI
- history and Ephemeris to remove thread-safety issues in all classes using
- cache (fixes #3).
-
-
- Added Hermite interpolation features for position-velocity coordinates,
- angular coordinates, orbits, attitudes, spacecraft states and transforms.
- Hermite interpolation matches sample points value and optionally first derivative.
-
-
- Added an AngularCoordinates as an angular counterpart to PVCoordinates.
-
-
- Transform now implements both TimeStamped and TimeShiftable. Note that this change
- implied adding an AbsoluteDate parameter to all transform constructors, so this
- is a backward incompatible change.
-
-
- Fixed wrong transform for 3D lines (fixes bug #101).
-
-
- Upgraded support of CCSDS Unsegmented Time Code (CUC) to version 4 of the
- standard published in November 2010 (fixes bug #91), this includes support for
- an extended preamble field and longer time codes.
-
-
- Added a way to build TLE propagators with attitude providers and mass (fixes bug #84).
-
-
- Fixed numerical stability errors for high order gravity field in Cunningham model (fixes bug #97).
-
-
- Fixed an error in radiation pressure for BoxAndSolarArraySpacecraft (fixes bug #92).
-
-
- Added models for tropospheric delay and geomagnetic field.
-
-
- The existing general mechanism for shifting objects in time has been
- formalized as a parameterized interface implemented by AbsoluteDate, Attitude,
- Orbit, PVCoordinates and SpacecraftState.
-
-
- Time scales are not serializable anymore (this induced problems for the UTC scale
- and its caching feature).
-
-
- Fixed TLE propagation in deep space when inclination is exactly 0 (fixes bug #88).
-
-
- Added a package for spacecraft states to propagators conversion extending an
- original contribution for TLE (Orbit Converter for Two-Lines Elements) to all
- propagators.
-
-
- Improved testing of error messages.
-
-
- Removed too stringent test on trajectory in TLE propagator (fixes bug #86).
-
-
- Set the initial state for a TLEPropagator (fixes bug #85).
-
-
- Improved testing of error messages.
-
-
- Updated IAU poles for celestial bodies according to the 2009 report and the
- 2011 erratum from the IAU/IAG Working Group on Cartographic Coordinates and
- Rotational Elements of the Planets and Satellites (WGCCRE).
-
-
- Removed code deprecated before 5.0.
-
-
- Added support for more recent JPL DExxx and INPOP ephemerides files (fixes feature #23).
-
-
- Fixed formatting of very small values in TLE lines (fixes bug #77).
-
-
- Fixed formatting of TLE epoch (fixes bug #74).
-
-
- Fixed performance issues when using the singleton UTCScale instance from
- multiple threads. Use a prototype pattern instead (fixes bug #33).
-
-
- Added J2 effect on small maneuvers model.
-
-
- Fixed attitudeProvider field masking in IntegratedEphemeris.
-
-
- Added a tutorial to compute Earth phased, Sun synchronous orbits.
-
-
- Added a fitter for osculating parameters, allowing conversion to mean parameters.
-
-
- Made Greenwich mean and apparent sidereal time publicly visible in GTOD frame.
-
-
- Made equation of equinoxes sidereal time publicly visible in TOD frame.
-
-
- Added more german translations for error messages.
-
-
- Allow ClasspathCrawler and ZipJarCrawler data providers to work in
- OSGi environments by providing an explicit class loader (fixes bug #54).
-
-
- Improved the small maneuvers analytical model to compute orbit Jacobian
- with respect to maneuver parameters.
-
-
- Force impulse maneuver to preserve orbit type and orbit frame.
-
-
- Added sp3 file parser.
-
-
- Added a method to compute frames transforms Jacobians in the Transform class.
-
-
- Fixed a problem with propagation over null or negative ranges.
-
-
- Added a multiplexer for step handlers.
-
-
- Added init methods to step handlers and event handlers.
-
-
- Added an adapter propagator that can add small maneuvers to any propagator, including
- ephemeris based ones.
-
-
- Added an analytical model for the effect at date t1 of a small maneuver performed at date t0.
-
-
- Fixed a missing reinitialization of start date when state was reset in numerical propagator.
-
-
- Added detection of attempts to create hyperbolic orbits as circular or equinoctial
- instances.
-
-
- Fixed potential numerical failure in lightning ratio computation.
-
-
- Simplified construction of atmosphere models, the Earth fixed frame is already present
- in the body shape, there was no need to pass a separate argument for it.
-
-
- Added Harris-Priester atmosphere model.
-
-
- Changed the return value of eventOccurred method from an int to an enumerate.
-
-
- Fixed frame for TLEPropagator (fixes bug #31).
-
-
- Added getters/setters for impulse maneuvers.
-
-
- Added getters/setters for attitude provider in all orbit propagators.
-
-
- Added a method to compute visibility circles in TopocentricFrame.
-
-
- Added an equinox-based version of ITRF.
-
-
- Added getters for thrust, Isp and flow rate in constant thrust maneuvers.
-
-
- Allow use of any supported Local Orbital Frames as the reference frame
- for LofOffset attitude modes.
-
-
- Added support for LVLH, VVLH and VNC local orbital frames.
-
-
- Fixed a performance bug implying that some frames reloaded all EOP history files
- each time a transform was computed (fixes bug #26).
-
-
- Added support for columns-based IERS Rapid Data and Prediction files (finals.daily, finals.data
- and finals.all), the XML version was already supported since a few months
-
-
- Fixed numerical issue in eccentricity computation (fixes bug #25)
-
-
- Changed step handling of abstract propagators, now they use a single step
- equal to the duration of the propagation in all cases except when a fixed step
- is requested in master mode. Previously, they arbitrarily used on hundredth of
- the Keplerian period as the step size, hence performing many steps even if not
- strictly required
-
-
- Added propagation of Jacobians matrices in circular, Keplerian and equinoctial
- parameters, using either true, eccentric or mean position angles. Formerly,
- propagation of Jacobians matrices was possible only in Cartesian parameters
-
-
- Added a way to propagate additional state along with orbit in abstract
- propagators, as an analytical counterpart to the additional equations that
- can be integrated by numerical propagators
-
-
- Fixed missing partial derivatives data in ephemerides produced by a numerical
- propagator despite it was set up to computed them (fixes bug #16)
-
-
- Added a new much simpler way to log events occurrences all at once (or
- only a subset of the events if desired)
-
-
- Added alternative default name for ICGEM files
-
-
- Fixed EventState reset on propagation direction change (fixes bug #19)
-
-
- Fixed Jacobianizer so it can handle force models that do change the spacecraft mass,
- like ConstantThrustManeuver (fixes bug #18)
-
-
- Added Jacobians between orbital parameters and Cartesian parameters for all orbits
- types (including hyperbolic orbits), all angles types (mean, eccentric, true) and in
- both directions
-
-
- Replaced the integers parameters used in orbit constructors (MEAN_ANOMALY, ECCENTRIC_ANOMALY ...)
- by a new PositionAngle enumerate for better value safety. The old public constants and the
- corresponding constructors are still available but are deprecated
-
-
- Fixed ephemeris generation in numerical propagation. After getEphemeris has been
- called, later calls to the numerical propagator did reset the already computed
- and returned ephemeris (fixes bug #14)
-
-
- Added support for the Marshall Solar Activity Future Estimation files
-
-
- TLEPropagator now implements the Propagator interface, and hence can benefit from all
- events detection and mode handling features (fixes features request #4)
-
-
- improved events detection robustness, by decoupling events handling from adaptive step
- sizes in numerical integrators and (fix contributed to Apache Commons Math) and from
- classical propagation in analytical and tabulated propagators. This implies the events
- will NOT reduce integration step sizes anymore, thus also increasing speed and in corner
- cases reducing local precision at event occurrence, reducing max step size is often
- sufficient to compensate for this drawback
-
-
- all propagators, including analytical ones or tabulated ones can now be used for
- event detection. Of course for tabulated propagators, setting up an event that
- would try to reset the state triggers an error when the event occurs
-
-
- propagation can now be done between two dates, regardless of the date of the initial state
-
-
- attitude can be specified either using a date only thanks to a new AttitudeLaw interface
- or using a date, a position-velocity provider and a frame (which can be any frame) thanks
- to a new AttitudeProvider interface, wrappers have been added to convert between the two
- interfaces. A side effect of this change is that LofOffset constructor now needs a reference
- to an inertial reference frame, otherwise the attitude woud be wrong if a non-inertial frame
- were passed to getAttitude, due to velocity composition (the computed LOF would not really
- be a LOF)
-
-
- the notion of quasi-inertial frames has been renamed as pseudo-inertial because
- quasi-inertial has a precise relativistic meaning that is not considered here. We
- only consider these frames to be suitable for Newtonian mechanics.
-
-
- the equinox based frames have been renamed to more standard names (MOD, and GTOD
- instead of MEME, and PEF). The implementation of TEME was also wrong (it was
- really a TOD), so now there are both a TOD with a proper name and a TEME with a
- proper implementation.
-
-
- celestial bodies now provide both an inertially oriented body centered
- frame and a body oriented body centered frame, the bodies managed by
- CelestialBodyFactory use the IAU poles and prime meridian definitions
- to build the two frames
-
-
- added the ICRF frame at the solar system barycenter
-
-
- added the ITRF93, ITRF97, ITRF2000 and ITRF2008 frames (previously, only
- the ITRF2005 frame was available)
-
-
- added a getPoint method to TopocentricFrame
-
-
- added the Galileo System Time Scales and the Galileo start epoch.
-
-
- added the UT1, TCB and GMST time scales used in CCSDS Orbit Data Messages
-
-
- fixed an error when parsing a date occurring during a leap second introduction
-
-
- fixed a dut1 interpolation error for the day just before a leap second introduction
-
-
- fixed an error in JPL ephemerides: they are in TDB time scale
-
-
- fixed an error in date creation/parsing for UTC dates which occur during a
- leap second
-
-
- fixed UTC time scale between 1961-01-01 and 1971-12-31 ; in this time range
- the offset between UTC and TAI was piecewise linear
-
-
- added an enumerate for specifying months in dates and for simplifying parsing
- of some data files
-
-
- completed support for CCSDS Time Code Format (CCSDS 301.0-B-3) ; now in addition
- to ASCII Calendar Segmented Time Code which has been supported for a while,
- Orekit also supports CCSDS Unsegmented Time Code (CUC), CCSDS Day Segmented
- Time Code (CDS) and CCSDS Calendar Segmented Time Code (CCS)
-
-
- added a freeze method to the Frame and Transform classes, in order to build fixed
- frames from moving ones, this is useful for example to build a launch frame
- at launcher inertial navigation system reset time, or to build an equinox-based
- frame at a specific epoch
-
-
- fixed an out of memory error when lots of temporary frames were created in loops
- and discarded
-
-
- use the new FastMath class from commons-math instead of the standard java.util.Math
- class for increased accuracy and speed
-
-
- added support for the new bulletinB data published by Paris-Meudon observatory
- for IAU-1980 precession-nutation model (IERS has ceased publishing bulletinB
- files for both IAU-1980 precession-nutation model and IAU-2000
- precession-nutation model as of early 2010).
-
-
- added support for the new XML files containing both bulletinA and bulletinB data
- published by IERS (both the finals and daily files are supported).
-
-
- Orekit now depends on at least version 3.0 of Apache commons-math
-
-
- added a way to list what data have been loaded through DataProvidersManager
-
-
- PropagationException can now be created directly from OrekitException, thus simplifying
- wrapping lower Orekit errors in step handlers
-
-
- improved exception propagation from low level java runtime and Apache commons-math libraries
- preserving initial error stack trace
-
-
- changed exception localization framework to simplify messages handling
-
-
- greatly improved AbsoluteDate accuracy by shifting epoch when needed and separating
- long/double computations to avoid too large offsets and numerical cancellations, it is
- now possible to still have an absolute date accurate to about 1.0e-13s after shifting
- it 10000 times by 0.1s steps
-
-
- fixed an error in TopocentricFrame.getPVCoordinates: the coordinates returned were not the
- coordinates of the topocentric frame origin with respect to the specified frame, but were the
- coordinates of the specified frame origin with respect to the topocentric frame.
-
-
- fixed an errors in data loading in tutorials when one of the path in the classpath
- contained a space
-
-
- improved CelestialBodyPointed attitude mode: the spin now correctly includes
- the coupling effect of the phasing reference
-
-
- fixed an error in SpinStabilized attitude mode: the spin was reversed
- with respect to the specification
-
-
- added a GroundMaskElevationDetector dealing with local physical mask for visibility
-
-
- added an ApparentElevationDetector taking refraction into account in a terrestrial
- environment
-
-
- enhanced DateDetector behaviour to allow adding new event dates on the fly
-
-
- fixed an error in FramesFactory when getting ITRF2005 and TIRF2000 frames:
- ignoreTidalEffects was handled wrong.
-
-
- removed serialization of some cached data in frames
-
-
- fixed deserialization problems of frame singletons, they were not unique any more
-
-
- numerical propagation can now be done either using Cartesian parameters, circular
- parameters, equinoctial parameters, or Keplerian parameters (elliptical or hyperbolic)
- and using mean, eccentric or true position angles for the parameters where it is relevant.
- So there are now 10 possible configurations for state vector. This allows propagation
- of any kind of trajectories, including hyperbolic orbits used for interplanetary missions,
- or atmospheric re-entry trajectories
-
-
- completely revamped the partial derivatives matrices computation using the additional
- equations mechanism
-
-
- added a mechanism to integrate user-supplied additional equations alongside with
- orbital parameters during numerical propagation
-
-
- use A. W. Odell and R. H. Gooding (1986) fast and robust solver for Kepler equation
-
-
- keplerian and cartesian orbits now support hyperbolic orbits (i.e. eccentricity greater
- than 1, and in this case negative semi major axis by convention)
-
-
- fixed an error in LofOffset attitude mode: the computed attitude was reversed
- with respect to the specification
-
-
- added an AttitudesSequence class which can handle several laws, only one of
- which being active at any time. The active law changes as switch events are
- triggered. This can be used for example to alternate between daylight attitude mode
- and eclipse attitude mode, or between normal observing mode and special modes
- for ground contact or maneuvers.
-
-
- fixed an error when crawling a classpath or a directory a zip file was found.
- This might lead to select an inappropriate data provider.
-
-
-
-
- Fixed a performance bug implying that some frames reloaded all EOP history files
- each time a transform was computed (fixes bug #26).
-
-
- Fixed a parsing bug in IERS Rapid Data and Prediction files for dates between 2000 and 2009.
-
-
-
+ Fixed conversion of mean anomaly to hyperbolic eccentric anomaly (fixes
+ issue #135).
+
+
+ Extracted fundamental nutation arguments from CIRF frame. This allows both
+ reuse of
+ the arguments for other computations (typically tides), and also allows
+ to use
+ convention-dependent arguments (they are similar for IERS conventions 2003 and 2010,
+ but have changed before and may change in the future).
+
+
+ Fixed event g function correction when starting exactly at 0 with a
+ backward
+ propagation (fixes issue #125).
+
+
+ Error messages properties are now loaded directly in UTF-8.
+
+
+ Added a way to know which tide system is used in gravity fields
+ (zero-tide,
+ tide-free or unknown).
+
+
+ Added orphan frame, i.e. trees that are not yet connected to the main
+ frame tree but attached later on. This allows building frame trees
+ from leaf to root. This change fixes feature request #98.
+
+
+ Added a way to filter only increasing or decreasing events. The filtering
+ occurs a priori, i.e. the filtered out events do not trigger a
+ search.
+ Only the interesting events are searched for and contribute to
+ computation
+ time. This change fixes feature request #104.
+
+
+ Added a semianalytical propagator based on the Draper Semianalytic
+ Satellite Theory. The DSST accounts for all significant
+ perturbations
+ (central body including tesseral harmonics, third-body, drag, solar
+ radiation pressure) and is applicable to all orbit classes.
+ To begin with, only mean elements propagation is available.
+
+
+ Greatly improved performance of time-stamped caches for data that is
+ read only once (like UTC leap seconds history or EOP).
+
+
+ Additional states can now be used in events. Note that waiting for the
+ fix for issue MATH-965 in Apache Commons Math to be been officially
+ published, a workaround has been used in Orekit. This workaround
+ implies that events that should be triggered based on additional
+ equations
+ for integration-based propagator will be less accurate on the first
+ step
+ (full accuracy is recovered once the first step is accepted).
+ So in these corner cases, users are advised to start propagation at
+ least
+ one step before the first event (or to use a version of Apache Commons
+ Math
+ that includes the fix, which has been added to the development version
+ as
+ of r1465654). This change fixes feature request #134.
+
+
+ AdditionalStateProviders can now be used for all propagators, not
+ only analytical ones. Note that when both state providers and
+ additional differential equations are used in an integration-based
+ propagator, they must used different states names. A state can only
+ be handled by one type at a time, either already integrated or
+ integrated by the propagator (fixes feature request #133).
+
+
+ Added a way to store user data into SpacecraftState. User data are
+ simply double arrays associated to a name. They are handled properly
+ by interpolation, event handlers, ephemerides and adapter propagators.
+ Note that since SpacecraftState instances are immutable, adding
+ states
+ generates a new instance, using a fluent API principle (fixes feature request
+ #132).
+
+
+ Added a way to retrieve all additional states at once from a step
+ interpolator.
+
+
+ Fixed wrong orientation for ICRF and all IAU pole and prime meridians
+ (a few tens milli-arcseconds). This error mainly induced an error in
+ celestial bodies directions, including the Sun which is used in many
+ places in Orekit (fixes bug #130).
+
+
+ Added support for IERS conventions 2010. Note that Orekit still also
+ support conventions 2003 in addition to conventions 2010. However,
+ as
+ IERS does not provide anymore data to link TIRF 2003 with ITRF, ITRF
+ based on 2003 convention is not available. ITRF can only be based on
+ either 2010 conventions for CIO-based paradigm or on 1996
+ conventions
+ for equinox-based paradigm.
+
+
+ Atmosphere models now provide their central body frame.
+
+
+ Added versions of angular coordinates and position-velocity that use
+ any field instead of double (classes FieldAngularCoordinates and
+ FieldPVCoordinates). This allows to compute derivatives of these
+ quantities
+ with respect to any number of variables and to any order (using
+ DerivativeStructure
+ for the field elements), or to compute at arbitrary precision (using
+ Dfp for
+ the field elements). Regular transforms as produced by frames
+ handle these objects properly and compute partial derivatives for them.
+
+
+ Converted Cunningham and Droziner force models to use the API of the new
+ partial derivatives framework, despite they STILL USE finite
+ differences.
+ These two force models are now considered obsolete, they have been
+ largely superseded by the Holmes-Featherstone model, which can be
+ used
+ for much larger degrees (Cunnigham and Droziner use un-normalized
+ equations and coefficients which underflow at about degree 90),
+ which
+ already provides analytical derivatives, and which is twice faster. It
+ was therefore considered a waste of time to develop analytical
+ derivatives
+ for them. As a consequence, they use finite differences to compute
+ their
+ derivatives, which adds another huge slow down factor when derivatives are
+ requested. So users are strongly recommended to avoid these models
+ when
+ partial derivatives are desired...
+
+
+ Added analytical computation of partial derivatives for third-body
+ attraction.
+
+
+ Added analytical computation of partial derivatives for constant
+ thrust maneuvers.
+
+
+ Converted Newtonian force model to use the new partial derivatives
+ framework.
+
+
+ Converted Holmes-Featherstone force model to use the new partial derivatives
+ framework.
+
+
+ Added analytical computation of partial derivatives for surface forces
+ (drag and radiation pressure) for all supported spacecraft body
+ shapes.
+
+
+ Streamlined the force models partial derivatives computation for numerical
+ propagation. It is now far simpler to compute analytically the
+ derivatives
+ with respect to state and with respect to force models specific
+ parameters,
+ thanks to the new Apache Commons Math differentiation framework.
+
+
+ Added a new force model for central body gravity field, based on Holmes
+ and Featherstone
+ algorithms. This model is a great improvement over Cunningham and Droziner
+ models. It
+ allows much higher degrees (it uses normalized coefficients and carefully
+ crafted
+ recursions to avoid overflows and underflows). It computes analytically all
+ partial
+ derivatives and hence can be used to compute accurate state transition
+ matrices. It is
+ also much faster than the other models (for example a 10 days
+ propagation of a low Earth
+ orbit with a 1cm tolerance setting and a 69x69 gravity field was about
+ 45% faster with
+ Holmes and Featherstone than with Cunningham).
+
+
+ Improved gravity field un-normalization to allow higher degrees/order with
+ Cunningham and
+ Droziner models. Formerly, the coefficients computation underflowed for
+ square fields
+ degree = order = 85, and for non-square fields at degree = 130 for order =
+ 40. Now square
+ fields can go slightly higher (degree = order = 89) and non-square fields
+ can go much
+ higher (degree = 393 for order = 63 for example). Attempts to use
+ un-normalization past
+ the underflow limit now raises an exception.
+
+
+ Updated Orekit to version 3.1.1 of Apache Commons Math.
+
+
+ Added support for time-dependent gravity fields. All recent gravity
+ fields include time-dependent coefficients (linear trends and
+ pulsations
+ at several different periods). They are now properly handled by
+ Orekit.
+ For comparison purposes, it is still possible to retrieve only the
+ constant
+ part of a field even if the file contains time-dependent coefficients
+ too.
+
+
+ Added a way to speed up parsing and reduce memory consumption when
+ loading gravity fields. Now the user can specify the maximal degree
+ and order before reading the file.
+
+
+ The EGM gravity field reader did not complain when files with missing
+ coefficients were provided, even when asked to complain.
+
+
+ Fixed serialization of all predefined frames. This fix implied
+ also fixing serialization of celestial bodies as the predefined
+ ICRF frame relies on them. Note for both types of objects, only
+ some meta-data are really serialized in such a way that at
+ deserialization time we retrieve singletons. So the serialized
+ data are small (less than 500 bytes) and exchanging many time
+ these objects in a distributed application does not imply anymore
+ lots of duplication.
+
+
+ Throw an exception if the conversion of mean anomaly to hyperbolic
+ eccentric anomaly does not converge in KeplerianOrbit (fixes bug
+ #114).
+
+
+ Removed weak hash maps in frames (fixes bug #122).
+
+
+ Improved documentation of interpolation methods (fixes bug #123).
+
+
+ Make TIRF2000Provider class thread-safe (fixes bug #118).
+
+
+ Correct spelling of the inner class QuadratureComputation (fixes bug #120).
+
+
+ Remove unnecessary synchronization in UT1Scale (fixes bug #119).
+
+
+ Clear caches in CelestialBodyFactory when removing CelestialBodyLoaders
+ (fixes bug #106).
+
+
+ Fix loading of JPL ephemerides files with overlapping periods
+ (fixes bug #113).
+
+
+ Prevent initialization exception in UTCScale in case no user-defined
+ offsets are provided. (fixes bug #111).
+
+
+ Improved performance by caching EME2000 frame in AbstractCelestialBody
+ (fixes bug #116).
+
+
+ Make TidalCorrections class thread-safe by using the new
+ TimeStampedCache.
+ (fixes bug #117).
+
+
+ Convert position entries contained in SP3 files to meters instead of km
+ (fixes bug #112).
+
+
+ Added support for version 2011 of ICGEM gravity field format. Orekit
+ still ignore the time-dependent part of these fields, though.
+
+
+ Greatly simplified CelestialBodyLoader interface, now it is not related
+ to DataLoader anymore (which implies users can more easily provide
+ analytical models instead of the JPL/IMCCE ephemerides if they want)
+
+
+ Use the new thread-safe caches and the new Hermite interpolation
+ feature on
+ Transform, Earth Orientation Parameters, JPL/IMCCE ephemerides, UTC-TAI
+ history and Ephemeris to remove thread-safety issues in all classes
+ using
+ cache (fixes #3).
+
+
+ Added Hermite interpolation features for position-velocity coordinates,
+ angular coordinates, orbits, attitudes, spacecraft states and
+ transforms.
+ Hermite interpolation matches sample points value and optionally first
+ derivative.
+
+
+ Added an AngularCoordinates as an angular counterpart to PVCoordinates.
+
+
+ Transform now implements both TimeStamped and TimeShiftable. Note that this
+ change
+ implied adding an AbsoluteDate parameter to all transform constructors, so
+ this
+ is a backward incompatible change.
+
+
+ Fixed wrong transform for 3D lines (fixes bug #101).
+
+
+ Upgraded support of CCSDS Unsegmented Time Code (CUC) to version 4 of the
+ standard published in November 2010 (fixes bug #91), this includes
+ support for
+ an extended preamble field and longer time codes.
+
+
+ Added a way to build TLE propagators with attitude providers and mass
+ (fixes bug #84).
+
+
+ Fixed numerical stability errors for high order gravity field in
+ Cunningham model (fixes bug #97).
+
+
+ Fixed an error in radiation pressure for BoxAndSolarArraySpacecraft
+ (fixes bug #92).
+
+
+ Added models for tropospheric delay and geomagnetic field.
+
+
+ The existing general mechanism for shifting objects in time has been
+ formalized as a parameterized interface implemented by AbsoluteDate,
+ Attitude,
+ Orbit, PVCoordinates and SpacecraftState.
+
+
+ Time scales are not serializable anymore (this induced problems for the
+ UTC scale
+ and its caching feature).
+
+
+ Fixed TLE propagation in deep space when inclination is exactly 0 (fixes
+ bug #88).
+
+
+ Added a package for spacecraft states to propagators conversion extending
+ an
+ original contribution for TLE (Orbit Converter for Two-Lines Elements) to
+ all
+ propagators.
+
+
+ Improved testing of error messages.
+
+
+ Removed too stringent test on trajectory in TLE propagator (fixes bug #86).
+
+
+ Set the initial state for a TLEPropagator (fixes bug #85).
+
+
+ Improved testing of error messages.
+
+
+ Updated IAU poles for celestial bodies according to the 2009 report and the
+ 2011 erratum from the IAU/IAG Working Group on Cartographic
+ Coordinates and
+ Rotational Elements of the Planets and Satellites (WGCCRE).
+
+
+ Removed code deprecated before 5.0.
+
+
+ Added support for more recent JPL DExxx and INPOP ephemerides files
+ (fixes feature #23).
+
+
+ Fixed formatting of very small values in TLE lines (fixes bug #77).
+
+
+ Fixed formatting of TLE epoch (fixes bug #74).
+
+
+ Fixed performance issues when using the singleton UTCScale instance from
+ multiple threads. Use a prototype pattern instead (fixes bug #33).
+
+
+ Added J2 effect on small maneuvers model.
+
+
+ Fixed attitudeProvider field masking in IntegratedEphemeris.
+
+
+ Added a tutorial to compute Earth phased, Sun synchronous orbits.
+
+
+ Added a fitter for osculating parameters, allowing conversion to mean
+ parameters.
+
+
+ Made Greenwich mean and apparent sidereal time publicly visible in GTOD
+ frame.
+
+
+ Made equation of equinoxes sidereal time publicly visible in TOD frame.
+
+
+ Added more german translations for error messages.
+
+
+ Allow ClasspathCrawler and ZipJarCrawler data providers to work in
+ OSGi environments by providing an explicit class loader (fixes bug #54).
+
+
+ Improved the small maneuvers analytical model to compute orbit Jacobian
+ with respect to maneuver parameters.
+
+
+ Force impulse maneuver to preserve orbit type and orbit frame.
+
+
+ Added sp3 file parser.
+
+
+ Added a method to compute frames transforms Jacobians in the Transform
+ class.
+
+
+ Fixed a problem with propagation over null or negative ranges.
+
+
+ Added a multiplexer for step handlers.
+
+
+ Added init methods to step handlers and event handlers.
+
+
+ Added an adapter propagator that can add small maneuvers to any
+ propagator, including
+ ephemeris based ones.
+
+
+ Added an analytical model for the effect at date t1 of a small maneuver
+ performed at date t0.
+
+
+ Fixed a missing reinitialization of start date when state was reset in
+ numerical propagator.
+
+
+ Added detection of attempts to create hyperbolic orbits as circular or
+ equinoctial
+ instances.
+
+
+ Fixed potential numerical failure in lightning ratio computation.
+
+
+ Simplified construction of atmosphere models, the Earth fixed frame is already
+ present
+ in the body shape, there was no need to pass a separate argument for
+ it.
+
+
+ Added Harris-Priester atmosphere model.
+
+
+ Changed the return value of eventOccurred method from an int to an
+ enumerate.
+
+
+ Fixed frame for TLEPropagator (fixes bug #31).
+
+
+ Added getters/setters for impulse maneuvers.
+
+
+ Added getters/setters for attitude provider in all orbit propagators.
+
+
+ Added a method to compute visibility circles in TopocentricFrame.
+
+
+ Added an equinox-based version of ITRF.
+
+
+ Added getters for thrust, Isp and flow rate in constant thrust maneuvers.
+
+
+ Allow use of any supported Local Orbital Frames as the reference frame
+ for LofOffset attitude modes.
+
+
+ Added support for LVLH, VVLH and VNC local orbital frames.
+
+
+ Fixed a performance bug implying that some frames reloaded all EOP
+ history files
+ each time a transform was computed (fixes bug #26).
+
+
+ Added support for columns-based IERS Rapid Data and Prediction files
+ (finals.daily, finals.data
+ and finals.all), the XML version was already supported since a few
+ months
+
+
+ Fixed numerical issue in eccentricity computation (fixes bug #25)
+
+
+ Changed step handling of abstract propagators, now they use a single step
+ equal to the duration of the propagation in all cases except when a
+ fixed step
+ is requested in master mode. Previously, they arbitrarily used on
+ hundredth of
+ the Keplerian period as the step size, hence performing many steps even
+ if not
+ strictly required
+
+
+ Added propagation of Jacobians matrices in circular, Keplerian and
+ equinoctial
+ parameters, using either true, eccentric or mean position angles. Formerly,
+ propagation of Jacobians matrices was possible only in Cartesian
+ parameters
+
+
+ Added a way to propagate additional state along with orbit in abstract
+ propagators, as an analytical counterpart to the additional
+ equations that
+ can be integrated by numerical propagators
+
+
+ Fixed missing partial derivatives data in ephemerides produced by a
+ numerical
+ propagator despite it was set up to computed them (fixes bug #16)
+
+
+ Added a new much simpler way to log events occurrences all at once (or
+ only a subset of the events if desired)
+
+
+ Added alternative default name for ICGEM files
+
+
+ Fixed EventState reset on propagation direction change (fixes bug #19)
+
+
+ Fixed Jacobianizer so it can handle force models that do change the
+ spacecraft mass,
+ like ConstantThrustManeuver (fixes bug #18)
+
+
+ Added Jacobians between orbital parameters and Cartesian parameters for
+ all orbits
+ types (including hyperbolic orbits), all angles types (mean, eccentric,
+ true) and in
+ both directions
+
+
+ Replaced the integers parameters used in orbit constructors (MEAN_ANOMALY,
+ ECCENTRIC_ANOMALY ...)
+ by a new PositionAngle enumerate for better value safety. The old
+ public constants and the
+ corresponding constructors are still available but are deprecated
+
+
+ Fixed ephemeris generation in numerical propagation. After getEphemeris
+ has been
+ called, later calls to the numerical propagator did reset the already
+ computed
+ and returned ephemeris (fixes bug #14)
+
+
+ Added support for the Marshall Solar Activity Future Estimation files
+
+
+ TLEPropagator now implements the Propagator interface, and hence can benefit from
+ all
+ events detection and mode handling features (fixes features request #4)
+
+
+ improved events detection robustness, by decoupling events handling from
+ adaptive step
+ sizes in numerical integrators and (fix contributed to Apache Commons
+ Math) and from
+ classical propagation in analytical and tabulated propagators. This implies
+ the events
+ will NOT reduce integration step sizes anymore, thus also increasing
+ speed and in corner
+ cases reducing local precision at event occurrence, reducing max step
+ size is often
+ sufficient to compensate for this drawback
+
+
+ all propagators, including analytical ones or tabulated ones can now be
+ used for
+ event detection. Of course for tabulated propagators, setting up an event
+ that
+ would try to reset the state triggers an error when the event occurs
+
+
+ propagation can now be done between two dates, regardless of the date of the
+ initial state
+
+
+ attitude can be specified either using a date only thanks to a new
+ AttitudeLaw interface
+ or using a date, a position-velocity provider and a frame (which can
+ be any frame) thanks
+ to a new AttitudeProvider interface, wrappers have been added to
+ convert between the two
+ interfaces. A side effect of this change is that LofOffset constructor now
+ needs a reference
+ to an inertial reference frame, otherwise the attitude woud be wrong
+ if a non-inertial frame
+ were passed to getAttitude, due to velocity composition (the computed
+ LOF would not really
+ be a LOF)
+
+
+ the notion of quasi-inertial frames has been renamed as pseudo-inertial
+ because
+ quasi-inertial has a precise relativistic meaning that is not considered here. We
+ only consider these frames to be suitable for Newtonian mechanics.
+
+
+ the equinox based frames have been renamed to more standard names (MOD,
+ and GTOD
+ instead of MEME, and PEF). The implementation of TEME was also wrong (it
+ was
+ really a TOD), so now there are both a TOD with a proper name and a TEME
+ with a
+ proper implementation.
+
+
+ celestial bodies now provide both an inertially oriented body centered
+ frame and a body oriented body centered frame, the bodies managed by
+ CelestialBodyFactory use the IAU poles and prime meridian
+ definitions
+ to build the two frames
+
+
+ added the ICRF frame at the solar system barycenter
+
+
+ added the ITRF93, ITRF97, ITRF2000 and ITRF2008 frames (previously, only
+ the ITRF2005 frame was available)
+
+
+ added a getPoint method to TopocentricFrame
+
+
+ added the Galileo System Time Scales and the Galileo start epoch.
+
+
+ added the UT1, TCB and GMST time scales used in CCSDS Orbit Data Messages
+
+
+ fixed an error when parsing a date occurring during a leap second
+ introduction
+
+
+ fixed a dut1 interpolation error for the day just before a leap second
+ introduction
+
+
+ fixed an error in JPL ephemerides: they are in TDB time scale
+
+
+ fixed an error in date creation/parsing for UTC dates which occur during
+ a
+ leap second
+
+
+ fixed UTC time scale between 1961-01-01 and 1971-12-31 ; in this time
+ range
+ the offset between UTC and TAI was piecewise linear
+
+
+ added an enumerate for specifying months in dates and for simplifying
+ parsing
+ of some data files
+
+
+ completed support for CCSDS Time Code Format (CCSDS 301.0-B-3) ; now in
+ addition
+ to ASCII Calendar Segmented Time Code which has been supported for a
+ while,
+ Orekit also supports CCSDS Unsegmented Time Code (CUC), CCSDS Day
+ Segmented
+ Time Code (CDS) and CCSDS Calendar Segmented Time Code (CCS)
+
+
+ added a freeze method to the Frame and Transform classes, in order to
+ build fixed
+ frames from moving ones, this is useful for example to build a launch
+ frame
+ at launcher inertial navigation system reset time, or to build an
+ equinox-based
+ frame at a specific epoch
+
+
+ fixed an out of memory error when lots of temporary frames were created
+ in loops
+ and discarded
+
+
+ use the new FastMath class from commons-math instead of the standard
+ java.util.Math
+ class for increased accuracy and speed
+
+
+ added support for the new bulletinB data published by Paris-Meudon
+ observatory
+ for IAU-1980 precession-nutation model (IERS has ceased publishing
+ bulletinB
+ files for both IAU-1980 precession-nutation model and IAU-2000
+ precession-nutation model as of early 2010).
+
+
+ added support for the new XML files containing both bulletinA and
+ bulletinB data
+ published by IERS (both the finals and daily files are supported).
+
+
+ Orekit now depends on at least version 3.0 of Apache commons-math
+
+
+ added a way to list what data have been loaded through
+ DataProvidersManager
+
+
+ PropagationException can now be created directly from OrekitException, thus simplifying
+ wrapping lower Orekit errors in step handlers
+
+
+ improved exception propagation from low level java runtime and Apache
+ commons-math libraries
+ preserving initial error stack trace
+
+
+ changed exception localization framework to simplify messages handling
+
+
+ greatly improved AbsoluteDate accuracy by shifting epoch when needed and
+ separating
+ long/double computations to avoid too large offsets and numerical
+ cancellations, it is
+ now possible to still have an absolute date accurate to about 1.0e-13s
+ after shifting
+ it 10000 times by 0.1s steps
+
+
+ fixed an error in TopocentricFrame.getPVCoordinates: the coordinates
+ returned were not the
+ coordinates of the topocentric frame origin with respect to the specified
+ frame, but were the
+ coordinates of the specified frame origin with respect to the topocentric
+ frame.
+
+
+ fixed an errors in data loading in tutorials when one of the path in the
+ classpath
+ contained a space
+
+
+ improved CelestialBodyPointed attitude mode: the spin now correctly includes
+ the coupling effect of the phasing reference
+
+
+ fixed an error in SpinStabilized attitude mode: the spin was reversed
+ with respect to the specification
+
+
+ added a GroundMaskElevationDetector dealing with local physical mask for
+ visibility
+
+
+ added an ApparentElevationDetector taking refraction into account in a
+ terrestrial
+ environment
+
+
+ enhanced DateDetector behaviour to allow adding new event dates on the fly
+
+
+ fixed an error in FramesFactory when getting ITRF2005 and TIRF2000
+ frames:
+ ignoreTidalEffects was handled wrong.
+
+
+ removed serialization of some cached data in frames
+
+
+ fixed deserialization problems of frame singletons, they were not unique
+ any more
+
+
+ numerical propagation can now be done either using Cartesian parameters,
+ circular
+ parameters, equinoctial parameters, or Keplerian parameters (elliptical or
+ hyperbolic)
+ and using mean, eccentric or true position angles for the parameters
+ where it is relevant.
+ So there are now 10 possible configurations for state vector. This
+ allows propagation
+ of any kind of trajectories, including hyperbolic orbits used for
+ interplanetary missions,
+ or atmospheric re-entry trajectories
+
+
+ completely revamped the partial derivatives matrices computation using the
+ additional
+ equations mechanism
+
+
+ added a mechanism to integrate user-supplied additional equations
+ alongside with
+ orbital parameters during numerical propagation
+
+
+ use A. W. Odell and R. H. Gooding (1986) fast and robust solver for
+ Kepler equation
+
+
+ keplerian and cartesian orbits now support hyperbolic orbits (i.e.
+ eccentricity greater
+ than 1, and in this case negative semi major axis by convention)
+
+
+ fixed an error in LofOffset attitude mode: the computed attitude was
+ reversed
+ with respect to the specification
+
+
+ added an AttitudesSequence class which can handle several laws, only one
+ of
+ which being active at any time. The active law changes as switch events
+ are
+ triggered. This can be used for example to alternate between daylight attitude
+ mode
+ and eclipse attitude mode, or between normal observing mode and special
+ modes
+ for ground contact or maneuvers.
+
+
+ fixed an error when crawling a classpath or a directory a zip file was
+ found.
+ This might lead to select an inappropriate data provider.
+
+
+
+
+ Fixed a performance bug implying that some frames reloaded all EOP
+ history files
+ each time a transform was computed (fixes bug #26).
+
+
+ Fixed a parsing bug in IERS Rapid Data and Prediction files for dates
+ between 2000 and 2009.
+
+
+
-
- Added support for IERS Rapid Data and Prediction files finals.all, finals.data and finals.daily,
- for both IAU-1980 and IAU-2000 and with both columns and XML formats.
-
-
-
+ Added support for IERS Rapid Data and Prediction files finals.all,
+ finals.data and finals.daily,
+ for both IAU-1980 and IAU-2000 and with both columns and XML formats.
+
+
+
-
- updated packaging to allow deployment to maven central.
-
-
-
+ updated packaging to allow deployment to maven central.
+
+
+
-
- a new experimental numerical propagator has been added, in addition to computing
- the spacecraft state at target time, it also computes the partial derivatives of
- this state with respect to the initial state (one jacobian) and with respect to
- models parameters (another jacobian). The jacobians are integrated alongside with
- the state, using variational equations for better accuracy and numerical robustness.
- This will help further implementation of orbit determination or optimization
- algorithms. This code is still considered to be experimental as of 5.0 and the API
- could change in the future.
-
-
- a new SpacecraftFrame class has been added, taking into account orbit and
- attitude thanks to an underlying propagator. This allows to see the spacecraft just
- as another known geometrical object automatically handled and connected to all
- other frames. For an instantaneous view, Transform instances can also be built
- directly by SpacecraftState instances.
-
-
- frames can now be flagged as quasi-inertial or not; only quasi-inertial frames
- are suitable for defining orbits
-
-
- the Topocentric frame now provides a way to retrieve the body shape on which the
- frame is defined
-
-
- changed the way Veis 1950 frame is constructed.
- Now, its parent is the PEF frame with no EOP corrections applied.
-
-
- fixed a parameters inversion in Earth Orientation Parameters for IAU-1980 models.
- The error could introduce up to a few meters error in position during transformations
- between TEME and MEME
-
-
- factories have been introduced for handling all data formats. Their default configuration
- correspond to the legacy formats used in previous versions (IERS format for UTC-TAI, EOPC04
- and bulletins B for Earth Orientation Parameters, JPL format for celestial bodies ...).
- Users can now add support for their own formats if they want (for example if they prefer
- using bulletins A instead of EOPC04 and bulletins B, or if they have their own gravity
- field format ...). Consequences of these changes are that the SolarSystemBody and
- the PotentialReaderFactory classes have been deprecated (replaced by CelestialBodyFactory and
- GravityFieldFactory) and that TimeScalesFactory and FramesFactory have been extended. All these
- factories follow the same generic pattern.
-
-
- improved thread safety (however, Orekit is still NOT completely thread-safe).
-
-
- the loaders for gravity fields now can optionally allow missing coefficients (they will be
- replaced by 0.0 except c[0][0] which will be replaced by 1.0).
-
-
- the loader for gravity fields in the ICGEM format now support empty lines in the file
- (there is for example one blank line at the end of the file in the orekit-data zip archive).
-
-
- added support for the GRGS gravity field files formats.
-
-
- added a way to list the available satellite numbers in TLE files.
-
-
- improved TLE elements loading. Now TLE lines are loaded using the standard data loading
- mechanism (thus allowing loading from disk files, network, classpath ...), they can
- contain TLE for several objects in one file, and they may contain some non-TLE lines
- if desired.
-
-
- a new PVCoordinatesProvider interface has been created on top of several existing classes
- and interfaces (orbit propagator, celestial bodies, some moving frames ...). This is a
- major generalization that allows to use either satellites or celestial bodies in many
- algorithms (attitude pointing target, eclipses and field of view events ...)
-
-
- improved numerical propagator efficiency when used from an outside loop: the initial
- state is automatically set to the last state at propagation end, thus allowing to
- restart from here without recomputing everything
-
-
- added a reset feature in all propagators, allowing to reuse an already configured
- propagator for several different orbits
-
-
- fixed a mode handling error in NumericalPropagator: when a propagator was reused
- with a new mode setting, the previous step handlers were still used in addition to
- the new ones instead of replacing them
-
-
- fixed an interpolation error for orbits crossing the -PI/+PI singularity between
- entries in the Ephemeris class
-
-
- KeplerianPropagator now preserve orbits types
-
-
- AbsoluteDate, Orbit, PVCoordinates, Attitude and SpacecraftState instances can now all
- be slightly shifted in time using simple evolution models (keplerian for orbit, fixed
- angular rate for attitude, fixed translation for position/velocity). This is not a
- replacement for proper propagation but is useful for known simple motions or small
- time shifts or when coarse accuracy is sufficient
-
-
- changed AttitudeLaw.getState signature to use complete orbit. This is an incompatible
- change introduced to fix a major bug in spin computation for some attitude laws. The laws
- for which orientation depends on satellite velocity have a spin vector that depends on
- acceleration. This can be computed only if complete orbit is available. This change
- should be simple to handle from a users point of view, as the caller generally already
- has the orbit available and attitude laws implementations can retrieve all the former
- parameters (date, position/velocity, frame) directly from orbit.
-
-
- fixed spin rate computation errors in almost all attitude modes
-
-
- added a new simple linear attitude mode: FixedRate
-
-
- fixed an error in event detection: when two events were very close (for example a very
- short ground station visibility), the second one may be ignored despite the first one
- was detected.
-
-
- fixed corner cases in event detection during orbit propagation, sometimes
- an already detected and handled event prevented the propagator to go further in time.
-
-
- added an EventShifter wrapper allowing to slightly shift raw events in time. This is useful
- for example to switch an attitude mode from solar pointing to something else a few minutes
- before eclipse entry and going back to solar pointing mode a few minutes after eclipse exit.
-
-
- added a new AlignmentDetector.
-
-
- added a new EclipseDetector handling either umbra or penumbra entry and exit events.
-
-
- added new CircularFieldOfViewDetector and DihedralFieldOfViewDetector handling
- field of view entry and exit events for any type of target.
-
-
- added an experimental implementation of a BoxAndSolarArray spacecraft model considering a convex
- body (either parallelepipedic or defined by a set of facets) and a rotating solar array, for
- accurate modeling of surface forces with attitude. Beware that this class is still considered
- experimental, so use it with care!
-
-
- completely changed the RadiationSensitive and DragSensitive interfaces to be more comprehensive
- and handle properly lift and side force effects when used with non-symmetric spacecrafts/flux geometry
-
-
- fixed denormalization of gravity field coefficients, the last coefficient
- was not initialized
-
-
- added a relative constructor and a getMomentum method to PVCoordinates
-
-
- added a special implementation improving performances for the frequent case of identity transform
-
-
- fixed forgotten radians to degrees conversions for inclination and RAAN in CircularOrbit.toString()
-
-
- added a Constants interface including a few useful physical constants.
-
-
- added a way to build date components from week components (this can be used
- for scheduled operations with week-related periods)
-
-
- added string parsing features for dates and times components supporting ISO-8601 formats
-
-
- Orekit is now packaged as an OSGi bundle
-
-
- added some pieces of an UML model for the library (available in the source distribution)
-
-
- updated error message localization to be more consistent with Java exception. Now getMessage
- returns a non-localized message and only getLocalizedMessage returns a message localized for
- the platform default locale. A new getMessage(Locale) method has also been added to
- retrieve the message in any desired locale, not only the platform default one. The messages
- are also built and translated only when needed, so if an exception is triggered and
- never displayed, the message will never be built.
-
-
-
+ a new experimental numerical propagator has been added, in addition
+ to computing
+ the spacecraft state at target time, it also computes the partial
+ derivatives of
+ this state with respect to the initial state (one jacobian) and with
+ respect to
+ models parameters (another jacobian). The jacobians are integrated
+ alongside with
+ the state, using variational equations for better accuracy and
+ numerical robustness.
+ This will help further implementation of orbit determination or
+ optimization
+ algorithms. This code is still considered to be experimental as of 5.0 and the
+ API
+ could change in the future.
+
+
+ a new SpacecraftFrame class has been added, taking into account orbit
+ and
+ attitude thanks to an underlying propagator. This allows to see the
+ spacecraft just
+ as another known geometrical object automatically handled and
+ connected to all
+ other frames. For an instantaneous view, Transform instances can also be
+ built
+ directly by SpacecraftState instances.
+
+
+ frames can now be flagged as quasi-inertial or not; only quasi-inertial
+ frames
+ are suitable for defining orbits
+
+
+ the Topocentric frame now provides a way to retrieve the body shape on
+ which the
+ frame is defined
+
+
+ changed the way Veis 1950 frame is constructed.
+ Now, its parent is the PEF frame with no EOP corrections applied.
+
+
+ fixed a parameters inversion in Earth Orientation Parameters for IAU-1980
+ models.
+ The error could introduce up to a few meters error in position during
+ transformations
+ between TEME and MEME
+
+
+ factories have been introduced for handling all data formats. Their default
+ configuration
+ correspond to the legacy formats used in previous versions (IERS format for
+ UTC-TAI, EOPC04
+ and bulletins B for Earth Orientation Parameters, JPL format for
+ celestial bodies ...).
+ Users can now add support for their own formats if they want (for example
+ if they prefer
+ using bulletins A instead of EOPC04 and bulletins B, or if they have
+ their own gravity
+ field format ...). Consequences of these changes are that the
+ SolarSystemBody and
+ the PotentialReaderFactory classes have been deprecated (replaced by
+ CelestialBodyFactory and
+ GravityFieldFactory) and that TimeScalesFactory and FramesFactory have been extended.
+ All these
+ factories follow the same generic pattern.
+
+
+ improved thread safety (however, Orekit is still NOT completely
+ thread-safe).
+
+
+ the loaders for gravity fields now can optionally allow missing
+ coefficients (they will be
+ replaced by 0.0 except c[0][0] which will be replaced by 1.0).
+
+
+ the loader for gravity fields in the ICGEM format now support empty
+ lines in the file
+ (there is for example one blank line at the end of the file in the
+ orekit-data zip archive).
+
+
+ added support for the GRGS gravity field files formats.
+
+
+ added a way to list the available satellite numbers in TLE files.
+
+
+ improved TLE elements loading. Now TLE lines are loaded using the standard
+ data loading
+ mechanism (thus allowing loading from disk files, network, classpath ...),
+ they can
+ contain TLE for several objects in one file, and they may contain some
+ non-TLE lines
+ if desired.
+
+
+ a new PVCoordinatesProvider interface has been created on top of
+ several existing classes
+ and interfaces (orbit propagator, celestial bodies, some moving frames
+ ...). This is a
+ major generalization that allows to use either satellites or celestial
+ bodies in many
+ algorithms (attitude pointing target, eclipses and field of view events ...)
+
+
+ improved numerical propagator efficiency when used from an outside loop: the
+ initial
+ state is automatically set to the last state at propagation end, thus
+ allowing to
+ restart from here without recomputing everything
+
+
+ added a reset feature in all propagators, allowing to reuse an already
+ configured
+ propagator for several different orbits
+
+
+ fixed a mode handling error in NumericalPropagator: when a propagator was
+ reused
+ with a new mode setting, the previous step handlers were still used in
+ addition to
+ the new ones instead of replacing them
+
+
+ fixed an interpolation error for orbits crossing the -PI/+PI singularity
+ between
+ entries in the Ephemeris class
+
+
+ KeplerianPropagator now preserve orbits types
+
+
+ AbsoluteDate, Orbit, PVCoordinates, Attitude and SpacecraftState instances can
+ now all
+ be slightly shifted in time using simple evolution models (keplerian
+ for orbit, fixed
+ angular rate for attitude, fixed translation for position/velocity). This
+ is not a
+ replacement for proper propagation but is useful for known simple motions or
+ small
+ time shifts or when coarse accuracy is sufficient
+
+
+ changed AttitudeLaw.getState signature to use complete orbit. This is an
+ incompatible
+ change introduced to fix a major bug in spin computation for some attitude
+ laws. The laws
+ for which orientation depends on satellite velocity have a spin vector
+ that depends on
+ acceleration. This can be computed only if complete orbit is available. This
+ change
+ should be simple to handle from a users point of view, as the caller
+ generally already
+ has the orbit available and attitude laws implementations can retrieve
+ all the former
+ parameters (date, position/velocity, frame) directly from orbit.
+
+
+ fixed spin rate computation errors in almost all attitude modes
+
+
+ added a new simple linear attitude mode: FixedRate
+
+
+ fixed an error in event detection: when two events were very close (for
+ example a very
+ short ground station visibility), the second one may be ignored despite
+ the first one
+ was detected.
+
+
+ fixed corner cases in event detection during orbit propagation, sometimes
+ an already detected and handled event prevented the propagator to go
+ further in time.
+
+
+ added an EventShifter wrapper allowing to slightly shift raw events in
+ time. This is useful
+ for example to switch an attitude mode from solar pointing to something
+ else a few minutes
+ before eclipse entry and going back to solar pointing mode a few minutes
+ after eclipse exit.
+
+
+ added a new AlignmentDetector.
+
+
+ added a new EclipseDetector handling either umbra or penumbra entry and
+ exit events.
+
+
+ added new CircularFieldOfViewDetector and DihedralFieldOfViewDetector
+ handling
+ field of view entry and exit events for any type of target.
+
+
+ added an experimental implementation of a BoxAndSolarArray spacecraft
+ model considering a convex
+ body (either parallelepipedic or defined by a set of facets) and a
+ rotating solar array, for
+ accurate modeling of surface forces with attitude. Beware that this class is
+ still considered
+ experimental, so use it with care!
+
+
+ completely changed the RadiationSensitive and DragSensitive interfaces to be
+ more comprehensive
+ and handle properly lift and side force effects when used with
+ non-symmetric spacecrafts/flux geometry
+
+
+ fixed denormalization of gravity field coefficients, the last coefficient
+ was not initialized
+
+
+ added a relative constructor and a getMomentum method to PVCoordinates
+
+
+ added a special implementation improving performances for the frequent
+ case of identity transform
+
+
+ fixed forgotten radians to degrees conversions for inclination and RAAN
+ in CircularOrbit.toString()
+
+
+ added a Constants interface including a few useful physical constants.
+
+
+ added a way to build date components from week components (this can be
+ used
+ for scheduled operations with week-related periods)
+
+
+ added string parsing features for dates and times components supporting
+ ISO-8601 formats
+
+
+ Orekit is now packaged as an OSGi bundle
+
+
+ added some pieces of an UML model for the library (available in the
+ source distribution)
+
+
+ updated error message localization to be more consistent with Java
+ exception. Now getMessage
+ returns a non-localized message and only getLocalizedMessage returns a
+ message localized for
+ the platform default locale. A new getMessage(Locale) method has also
+ been added to
+ retrieve the message in any desired locale, not only the platform default
+ one. The messages
+ are also built and translated only when needed, so if an exception is
+ triggered and
+ never displayed, the message will never be built.
+
+
+
-
- added TDB time scale
-
-
- the RadiationSensitive and DragForce interfaces now have an
- additional SpacecraftState parameter in all their get methods.
- This allows to implement models that take into account solar
- arrays rotation. Note that this changes breaks compatibility
- for users that did add their own implementations, but it is
- simple to deal with (simply add one parameter in the signature
- and ignore it) so its was considered acceptable.
-
-
- added german localization for error messages
-
-
- added a feature allowing all tests to clear the already built reference
- objects (frames, time scales, solar system bodies ...) between each tests,
- thus removing the need to launch tests in separate JVMS. This allows to
- launch all tests directly from eclipse, and this speeds up maven tests by
- a factor 4 at least
-
-
- set up a custom ant build independent from the maven 2 build
-
-
- changed all tests from Junit 3 to Junit 4
-
-
- fixed accuracy of PEF frame
-
-
- fixed configuration problems on Windows systems
-
-
- fixed a reversed sign in solar radiation pressure
-
-
- Orekit supports the two different naming patterns for bulletins B provided by IERS
- on http://www.iers.org/ and http://hpiers.obspm.fr/eop-pc/.
-
-
- the predefined times scales (TAI, UTC ...) are now built using a factory. The various
- XXXScale.getInstance() methods defined in each predefined time scales classes
- are still available, but have been deprecated and will be removed in the future,
- they are replaced by TimeScalesFactory.getXXX().
-
-
- the Frame class was split into a FramesFactory class, dealing with the predefined
- reference frames, and a Frame class for the creation of new frames and the navigation
- through any frames tree. The Frame.getXXX() methods for the predefined reference
- frames are still available, but have been deprecated and will be removed in the future,
- they are replaced by FramesFactory.getXXX().
-
-
- 3 new predefined reference frames have been added in Orekit : MEME, TEME and PEF. They
- implement the classical paradigm of equinox-based transformations including the IAU-76
- precession model, the IAU-80 nutation model and the IAU-82 sidereal time model, with
- the capability to apply the nutation corrections provided by IERS through the EOP data
- files for better agreement with the IAU 2000 precession-nutation model.
-
-
- the ChronologicalComparator class is not a singleton anymore, this didn't really make sense
-
-
- fixed a state reset error: orbital state changed by event detectors like
- ImpulseManeuver were overwritten by other event detectors
-
-
- fixed stop date of abstract propagators (Keplerian and Eckstein-Heschler). They used to
- stop at the first event after target date when an event detector was set up, instead of
- stopping at the target date
-
-
- the gravity coefficients for solar system bodies are now extracted from JPL files headers
-
-
- the eventOccurred method in EventDetector interface and its various implementations
- has an additional parameter specifying if the switching function increases or
- decreases at event time. This allows simpler events identification has many switching
- functions have two switches (start/end, raising/setting, entry/exit ...). Note that
- this changes breaks compatibility for users that did implement their own events, but
- it is simple to deal with (simply add one parameter in the signature and ignore it)
- so its was considered acceptable.
-
-
- fixed an error occurring when DE406 JPL ephemerides were loaded before DE405 ones
-
-
- fixed an error in EGM potential file loader
-
-
- trigger exceptions when no data can be loaded
-
-
- remove predefined leap seconds, they are not useful anymore since other
- parts of the library do need configuration data (solar system bodies) and
- since data configuration has been vastly improved
-
-
- added support for the ICGEM format for gravity fields
-
-
- load gravity potential data using the same mechanism already used for Earth
- Orientation Parameters, UTC-TAI history and JPL ephemerides files
-
-
- re-activated a way to load data from the classpath using a
- data provider plugin.
-
-
- added a way to load data directly from network (either
- locally or through a proxy server) using a data provider plugin.
-
-
- added a small plugin-like mechanism to delegate data loading to a
- user-provided mechanism, thus enabling smooth integration in existing
- systems.
-
-
- updated to latest version of commons-math.
-
-
- added galician localization for error messages.
-
-
- improved javadoc comments in orbit classes.
-
-
- tidal corrections are now available for ITRF and TIRF frames. Both frames are
- provided in two versions, the standard one with tidal corrections and a stripped
- down one without tidal corrections. A cache/interpolation mechanism is used to
- keep the computation cost of tidal correction to a minimum. With this mechanism,
- the penalty to use tidal correction is slightly above 20% in run time for a
- transformation between GCRF and ITRF. A raw implementation without this mechanism
- would lead to a 550% penalty, or even a 1100% penalty if TIRF and ITRF parts were
- computed independently.
-
-
-
+ added TDB time scale
+
+
+ the RadiationSensitive and DragForce interfaces now have an
+ additional SpacecraftState parameter in all their get methods.
+ This allows to implement models that take into account solar
+ arrays rotation. Note that this changes breaks compatibility
+ for users that did add their own implementations, but it is
+ simple to deal with (simply add one parameter in the signature
+ and ignore it) so its was considered acceptable.
+
+
+ added german localization for error messages
+
+
+ added a feature allowing all tests to clear the already built reference
+ objects (frames, time scales, solar system bodies ...) between each
+ tests,
+ thus removing the need to launch tests in separate JVMS. This allows to
+ launch all tests directly from eclipse, and this speeds up maven
+ tests by
+ a factor 4 at least
+
+
+ set up a custom ant build independent from the maven 2 build
+
+
+ changed all tests from Junit 3 to Junit 4
+
+
+ fixed accuracy of PEF frame
+
+
+ fixed configuration problems on Windows systems
+
+
+ fixed a reversed sign in solar radiation pressure
+
+
+ Orekit supports the two different naming patterns for bulletins B provided
+ by IERS
+ on http://www.iers.org/ and http://hpiers.obspm.fr/eop-pc/.
+
+
+ the predefined times scales (TAI, UTC ...) are now built using a
+ factory. The various
+ XXXScale.getInstance() methods defined in each predefined time scales classes
+ are still available, but have been deprecated and will be removed in
+ the future,
+ they are replaced by TimeScalesFactory.getXXX().
+
+
+ the Frame class was split into a FramesFactory class, dealing with the
+ predefined
+ reference frames, and a Frame class for the creation of new frames and the
+ navigation
+ through any frames tree. The Frame.getXXX() methods for the predefined
+ reference
+ frames are still available, but have been deprecated and will be removed
+ in the future,
+ they are replaced by FramesFactory.getXXX().
+
+
+ 3 new predefined reference frames have been added in Orekit : MEME,
+ TEME and PEF. They
+ implement the classical paradigm of equinox-based transformations including
+ the IAU-76
+ precession model, the IAU-80 nutation model and the IAU-82 sidereal time
+ model, with
+ the capability to apply the nutation corrections provided by IERS
+ through the EOP data
+ files for better agreement with the IAU 2000 precession-nutation model.
+
+
+ the ChronologicalComparator class is not a singleton anymore, this
+ didn't really make sense
+
+
+ fixed a state reset error: orbital state changed by event detectors like
+ ImpulseManeuver were overwritten by other event detectors
+
+
+ fixed stop date of abstract propagators (Keplerian and
+ Eckstein-Heschler). They used to
+ stop at the first event after target date when an event detector was set
+ up, instead of
+ stopping at the target date
+
+
+ the gravity coefficients for solar system bodies are now extracted from
+ JPL files headers
+
+
+ the eventOccurred method in EventDetector interface and its various
+ implementations
+ has an additional parameter specifying if the switching function
+ increases or
+ decreases at event time. This allows simpler events identification has many
+ switching
+ functions have two switches (start/end, raising/setting, entry/exit ...).
+ Note that
+ this changes breaks compatibility for users that did implement their own
+ events, but
+ it is simple to deal with (simply add one parameter in the signature
+ and ignore it)
+ so its was considered acceptable.
+
+
+ fixed an error occurring when DE406 JPL ephemerides were loaded before
+ DE405 ones
+
+
+ fixed an error in EGM potential file loader
+
+
+ trigger exceptions when no data can be loaded
+
+
+ remove predefined leap seconds, they are not useful anymore since other
+ parts of the library do need configuration data (solar system
+ bodies) and
+ since data configuration has been vastly improved
+
+
+ added support for the ICGEM format for gravity fields
+
+
+ load gravity potential data using the same mechanism already used for
+ Earth
+ Orientation Parameters, UTC-TAI history and JPL ephemerides files
+
+
+ re-activated a way to load data from the classpath using a
+ data provider plugin.
+
+
+ added a way to load data directly from network (either
+ locally or through a proxy server) using a data provider plugin.
+
+
+ added a small plugin-like mechanism to delegate data loading to a
+ user-provided mechanism, thus enabling smooth integration in
+ existing
+ systems.
+
+
+ updated to latest version of commons-math.
+
+
+ added galician localization for error messages.
+
+
+ improved javadoc comments in orbit classes.
+
+
+ tidal corrections are now available for ITRF and TIRF frames. Both frames
+ are
+ provided in two versions, the standard one with tidal corrections and a
+ stripped
+ down one without tidal corrections. A cache/interpolation mechanism is
+ used to
+ keep the computation cost of tidal correction to a minimum. With this
+ mechanism,
+ the penalty to use tidal correction is slightly above 20% in run time
+ for a
+ transformation between GCRF and ITRF. A raw implementation without this mechanism
+ would lead to a 550% penalty, or even a 1100% penalty if TIRF and
+ ITRF parts were
+ computed independently.
+
+
+
-
- The ephemeris produced by numerical propagator now checks date validity in
- propagate method.
-
-
- The EME2000/J2000 frame was slightly mis-oriented (about 20 milli arcseconds).
- It really was the GCRF frame. This has been fixed and now both the GCRF and
- the EME2000/J2000 are available.
-
-
- Dates in UTC within leap seconds are now displayed correctly (i.e. a 61st
- second is added to the minute).
-
-
- Fixed an overflow error in AbsoluteDate that generated an exception when any
- attempts was made to print dates far away like AbsoluteDate.JULIAN_EPOCH or
- AbsoluteDate.MODIFIED_JULIAN_EPOCH.
-
-
- Changed test configuration to always use a new JVM for each test. This prevents
- some false positive to be generated.
-
-
- The GeodeticPoint constructor arguments has been reordered to reflect more
- traditional usage, latitude coming before longitude.
-
-
- The low accuracy Sun model based on Newcomb theory and the Moon model based
- on Brown theory have been withdrawn as they are superseded by the support of JPL
- DE 405 binary ephemerides files.
-
-
- The ThirdBody abstract class has been removed and its specific method
- getMu has been moved up into CelestialBody interface and
- renamed getGM.
-
-
- Improved external data configuration. The java property is now called
- orekit.data.path and is a colon or semicolon separated path containing
- directories or zip archives, themselves containing embedded directories
- or zip archives and data files. This allows easy roll-out of system-wide
- configuration data that individual users can override by prepending their
- own data trees in front of the path. This also allows simple configuration
- since many data files can be stored in easy to handle zip archives.
-
-
- Renamed the iers package into data, as it is not IERS specific anymore. Some
- classes where also moved out of the package and into the frame and time
- package and their visibility reduced to package only. This improves decoupling
- and reduces clutter on users by limiting the number of visible classes.
-
-
- The performance of IAU-2000 precession-nutation model computation has been
- tremendously improved, using a combined caching and interpolation approach. The
- simplified model (which was quite inaccurate in version 3.1) has therefore been
- removed as it was not needed anymore.
-
-
- The ITRF 2005 frame is now supported instead of the older ITRF 2000 frame. The
- Earth Orientation Parameters data handling classes have been updated to match
- this change and read the new file format provided by IERS.
-
-
- The J2000 frame has been renamed as EME2000 as this name seems to be more
- widely accepted and reduces confusion with the J2000.0 epoch. The
- Frame.getJ2000() method is still available, but has been deprecated
- and will be removed in the future.
-
-
- Changed TimeScale from base abstract class to interface only.
-
-
- Renamed some classes for better understanding: ChunkedDate is now DateComponents,
- ChunkedTime is now TimeComponents, ChunksPair is now DateTimeComponents. The
- getChunks method from AbsoluteDate as also been renamed into getComponents accordingly.
-
-
- Added new tutorials.
-
-
- Added predefined local orbital frames: the (t, n, w) frame aligned with velocity
- and the (q, s, w) frame aligned with position.
-
-
- Added a predefined detector for altitude crossing events.
-
-
- Added methods to get zenith, nadir, north, south, east and west direction for
- any GeodeticPoint.
-
-
- Added spanish localization for error messages.
-
-
- Added norse localization for error messages.
-
-
- Added italian localization for error messages.
-
-
- Added support for mean motion first and second derivatives fields in TLE.
-
-
- Added a way to rebuild the two lines of TLE instances.
-
-
- Added constructor from already parsed elements for TLE.
-
-
- Added a method to retrieve a body-centered inertial frame to the
- CelestialBody interface. As a consequence, thirteen new frames are
- predefined: Sun, Moon, planets and barycenters provided by JPL binary
- ephemerides.
-
-
- Support for the JPL DE 405 and DE 406 binary ephemerides files has been added
- and a factory class SolarSystemBody uses these files to provide implementations
- of the CelestialBody interface for Sun, Moon, the eight solar system
- planets,the Pluto dwarf planet as well as the solar system barycenter and Earth-Moon
- barycenter points.
-
-
- The CelestialBody interface now provides velocity as well as position.
-
-
- A getCalls() method has been added to the NumericalPropagator class to count the
- number of calls to the differential equations computation method. This helps
- tuning the underlying integrator settings in order to improve performances.
-
-
- A lot more classes and interfaces are now serializable, to help users embed
- instance in their own serializable classes.
-
-
- Added predefined leap seconds to allow proper turn-key use of the library
- even without an already configured environment. All known leap seconds at
- time of writing (2008) are predefined, from 1972-01-01 to 2009-01-01 (the
- last one has been announced in Bulletin C 36 on 2008-07-04 and is not yet
- present in the UTC-TAI.history published file)
-
-
- Improved user-friendliness of the time-scales by changing methods parameters
- types to more easily understandable ones.
-
-
- Improved user-friendliness of the AbsoluteDate class by adding several
- new constructors and methods for common cases. It is in particular now possible
- to use offsets within a time scale, for example to build a date given as a
- fractional number of days since a reference date in UTC, explicitly ignoring
- intermediate leap seconds.
-
-
- Improved the class handling date/time components: added a constructor to allow building
- from an offset with respect to a reference epoch, implemented Comparable interface and
- added equals and hashCode methods.
-
-
- Improved the class handling date components: added a constructor to allow building
- from any reference epoch, not only J2000.0 (thus simplifying use of modified julian day),
- added getMJD() method, added several constants JULIAN_EPOCH, MODIFIED_JULIAN_EPOCH,
- FIFTIES_EPOCH, GPS_EPOCH, J2000_EPOCH and JAVA_EPOCH.
-
-
- Added a new time scale: GPSScale.
-
-
- Added the changes page to the generated site.
-
-
-
-
+
+ The ephemeris produced by numerical propagator now checks date validity
+ in
+ propagate method.
+
+
+ The EME2000/J2000 frame was slightly mis-oriented (about 20 milli
+ arcseconds).
+ It really was the GCRF frame. This has been fixed and now both the
+ GCRF and
+ the EME2000/J2000 are available.
+
+
+ Dates in UTC within leap seconds are now displayed correctly (i.e. a 61st
+ second is added to the minute).
+
+
+ Fixed an overflow error in AbsoluteDate that generated an exception when
+ any
+ attempts was made to print dates far away like AbsoluteDate.JULIAN_EPOCH or
+ AbsoluteDate.MODIFIED_JULIAN_EPOCH.
+
+
+ Changed test configuration to always use a new JVM for each test. This
+ prevents
+ some false positive to be generated.
+
+
+ The GeodeticPoint constructor arguments has been reordered to reflect
+ more
+ traditional usage, latitude coming before longitude.
+
+
+ The low accuracy Sun model based on Newcomb theory and the Moon model
+ based
+ on Brown theory have been withdrawn as they are superseded by the
+ support of JPL
+ DE 405 binary ephemerides files.
+
+
+ The ThirdBody abstract class has been removed and its specific method
+ getMu has been moved up into CelestialBody interface and
+ renamed getGM.
+
+
+ Improved external data configuration. The java property is now called
+ orekit.data.path and is a colon or semicolon separated path
+ containing
+ directories or zip archives, themselves containing embedded directories
+ or zip archives and data files. This allows easy roll-out of
+ system-wide
+ configuration data that individual users can override by prepending their
+ own data trees in front of the path. This also allows simple
+ configuration
+ since many data files can be stored in easy to handle zip archives.
+
+
+ Renamed the iers package into data, as it is not IERS specific anymore.
+ Some
+ classes where also moved out of the package and into the frame and time
+ package and their visibility reduced to package only. This improves
+ decoupling
+ and reduces clutter on users by limiting the number of visible classes.
+
+
+ The performance of IAU-2000 precession-nutation model computation has
+ been
+ tremendously improved, using a combined caching and interpolation approach. The
+ simplified model (which was quite inaccurate in version 3.1) has
+ therefore been
+ removed as it was not needed anymore.
+
+
+ The ITRF 2005 frame is now supported instead of the older ITRF 2000
+ frame. The
+ Earth Orientation Parameters data handling classes have been updated to
+ match
+ this change and read the new file format provided by IERS.
+
+
+ The J2000 frame has been renamed as EME2000 as this name seems to be
+ more
+ widely accepted and reduces confusion with the J2000.0 epoch. The
+ Frame.getJ2000() method is still available, but has been deprecated
+ and will be removed in the future.
+
+
+ Changed TimeScale from base abstract class to interface only.
+
+
+ Renamed some classes for better understanding: ChunkedDate is now
+ DateComponents,
+ ChunkedTime is now TimeComponents, ChunksPair is now DateTimeComponents. The
+ getChunks method from AbsoluteDate as also been renamed into
+ getComponents accordingly.
+
+
+ Added new tutorials.
+
+
+ Added predefined local orbital frames: the (t, n, w) frame aligned with
+ velocity
+ and the (q, s, w) frame aligned with position.
+
+
+ Added a predefined detector for altitude crossing events.
+
+
+ Added methods to get zenith, nadir, north, south, east and west direction
+ for
+ any GeodeticPoint.
+
+
+ Added spanish localization for error messages.
+
+
+ Added norse localization for error messages.
+
+
+ Added italian localization for error messages.
+
+
+ Added support for mean motion first and second derivatives fields in TLE.
+
+
+ Added a way to rebuild the two lines of TLE instances.
+
+
+ Added constructor from already parsed elements for TLE.
+
+
+ Added a method to retrieve a body-centered inertial frame to the
+ CelestialBody interface. As a consequence, thirteen new frames are
+ predefined: Sun, Moon, planets and barycenters provided by JPL
+ binary
+ ephemerides.
+
+
+ Support for the JPL DE 405 and DE 406 binary ephemerides files has been
+ added
+ and a factory class SolarSystemBody uses these files to provide
+ implementations
+ of the CelestialBody interface for Sun, Moon, the eight solar system
+ planets,the Pluto dwarf planet as well as the solar system
+ barycenter and Earth-Moon
+ barycenter points.
+
+
+ The CelestialBody interface now provides velocity as well as position.
+
+
+ A getCalls() method has been added to the NumericalPropagator class
+ to count the
+ number of calls to the differential equations computation method. This
+ helps
+ tuning the underlying integrator settings in order to improve
+ performances.
+
+
+ A lot more classes and interfaces are now serializable, to help users
+ embed
+ instance in their own serializable classes.
+
+
+ Added predefined leap seconds to allow proper turn-key use of the library
+ even without an already configured environment. All known leap
+ seconds at
+ time of writing (2008) are predefined, from 1972-01-01 to 2009-01-01
+ (the
+ last one has been announced in Bulletin C 36 on 2008-07-04 and is not
+ yet
+ present in the UTC-TAI.history published file)
+
+
+ Improved user-friendliness of the time-scales by changing methods parameters
+ types to more easily understandable ones.
+
+
+ Improved user-friendliness of the AbsoluteDate class by adding several
+ new constructors and methods for common cases. It is in particular now
+ possible
+ to use offsets within a time scale, for example to build a date given
+ as a
+ fractional number of days since a reference date in UTC, explicitly ignoring
+ intermediate leap seconds.
+
+
+ Improved the class handling date/time components: added a constructor to
+ allow building
+ from an offset with respect to a reference epoch, implemented Comparable
+ interface and
+ added equals and hashCode methods.
+
+
+ Improved the class handling date components: added a constructor to allow
+ building
+ from any reference epoch, not only J2000.0 (thus simplifying use of
+ modified julian day),
+ added getMJD() method, added several constants JULIAN_EPOCH,
+ MODIFIED_JULIAN_EPOCH,
+ FIFTIES_EPOCH, GPS_EPOCH, J2000_EPOCH and JAVA_EPOCH.
+
+
+ Added a new time scale: GPSScale.
+
+
+ Added the changes page to the generated site.
+
+
+
+