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 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 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 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 handler) { + super(maxCheck, threshold, maxIter, handler); + } + + /** {@inheritDoc} */ + @Override protected XZPlaneCrossingDetector create(final double newMaxCheck, final double newThreshold, final int newMaxIter, final EventHandler 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. + + + + diff --git a/src/main/assembly/source-distribution-assembly.xml b/src/main/assembly/source-distribution-assembly.xml index 0c5d3978c..608081ff6 100644 --- a/src/main/assembly/source-distribution-assembly.xml +++ b/src/main/assembly/source-distribution-assembly.xml @@ -1,27 +1,27 @@ - sources - - zip - - - - - README.md - LICENSE.txt - NOTICE.txt - BUILDING.txt - CONTRIBUTING.md - pom.xml - build.xml - checkstyle.xml - spotbugs-exclude-filter.xml - license-header.txt - - true - - - src - true - - + sources + + zip + + + + + README.md + LICENSE.txt + NOTICE.txt + BUILDING.txt + CONTRIBUTING.md + pom.xml + build.xml + checkstyle.xml + spotbugs-exclude-filter.xml + license-header.txt + + true + + + src + true + + diff --git a/src/main/assembly/source-jar-assembly.xml b/src/main/assembly/source-jar-assembly.xml index b79e54ba0..5596f94fe 100644 --- a/src/main/assembly/source-jar-assembly.xml +++ b/src/main/assembly/source-jar-assembly.xml @@ -1,24 +1,24 @@ - sources - - jar - - false - - - - LICENSE.txt - NOTICE.txt - - META-INF - - - src/main/java - . - - **/*.java - - true - - + sources + + jar + + false + + + + LICENSE.txt + NOTICE.txt + + META-INF + + + src/main/java + . + + **/*.java + + true + + diff --git a/src/main/java/org/orekit/bodies/CR3BPSystem.java b/src/main/java/org/orekit/bodies/CR3BPSystem.java index 96473c2b6..41e1302bb 100644 --- a/src/main/java/org/orekit/bodies/CR3BPSystem.java +++ b/src/main/java/org/orekit/bodies/CR3BPSystem.java @@ -196,7 +196,7 @@ public class CR3BPSystem { r = solver.solve(MAX_EVALUATIONS, l1Equation, searchInterval[0], searchInterval[1], AllowedSolution.ANY_SIDE); - lpos = new Vector3D(r * lDim, 0.0, 0.0); + lpos = new Vector3D(r, 0.0, 0.0); break; case L2: @@ -219,7 +219,7 @@ public class CR3BPSystem { r = solver.solve(MAX_EVALUATIONS, l2Equation, searchInterval[0], searchInterval[1], AllowedSolution.ANY_SIDE); - lpos = new Vector3D(r * lDim, 0.0, 0.0); + lpos = new Vector3D(r, 0.0, 0.0); break; case L3: @@ -242,19 +242,15 @@ public class CR3BPSystem { r = solver.solve(MAX_EVALUATIONS, l3Equation, searchInterval[0], searchInterval[1], AllowedSolution.ANY_SIDE); - lpos = new Vector3D(r * lDim, 0.0, 0.0); + lpos = new Vector3D(r, 0.0, 0.0); break; case L4: - lpos = - new Vector3D((0.5 - mu) * lDim, FastMath.sqrt(3) / 2 * lDim, - 0); + lpos = new Vector3D(0.5 - mu, FastMath.sqrt(3) / 2, 0); break; case L5: - lpos = - new Vector3D((0.5 - mu) * lDim, - -FastMath.sqrt(3) / 2 * lDim, 0); + lpos = new Vector3D(0.5 - mu, -FastMath.sqrt(3) / 2, 0); break; default: lpos = new Vector3D(0, 0, 0); diff --git a/src/main/java/org/orekit/orbits/HaloOrbit.java b/src/main/java/org/orekit/orbits/HaloOrbit.java index b0faa019c..f791a9bf2 100644 --- a/src/main/java/org/orekit/orbits/HaloOrbit.java +++ b/src/main/java/org/orekit/orbits/HaloOrbit.java @@ -18,23 +18,12 @@ package org.orekit.orbits; import org.hipparchus.geometry.euclidean.threed.Vector3D; +import org.hipparchus.linear.EigenDecomposition; 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.hipparchus.linear.RealVector; 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; @@ -46,9 +35,6 @@ 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; @@ -62,10 +48,9 @@ public class HaloOrbit { */ public HaloOrbit(final CR3BPSystem syst, final LagrangianPoints point, final PVCoordinates firstGuess) { - this.tDim = syst.getTdim(); this.cr3bpSystem = syst; this.firstGuess = firstGuess; - orbitalPeriod = 0; + orbitalPeriod = 2; } /** Simple Constructor. @@ -75,7 +60,6 @@ public class HaloOrbit { * @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); @@ -92,7 +76,6 @@ public class HaloOrbit { */ 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 = @@ -103,11 +86,11 @@ public class HaloOrbit { .getOrbitalPeriod(az, type); } - /** Return the orbital period of the Halo Orbit in second. - * @return orbitalPeriod orbital period of the Halo Orbit, second + /** Return the orbital period of the Halo Orbit. + * @return orbitalPeriod orbital period of the Halo Orbit */ public double getOrbitalPeriod() { - return orbitalPeriod * tDim / (2 * FastMath.PI); + return orbitalPeriod; } /** Return the first guess Position-Velocity of a point on the Halo Orbit. @@ -117,155 +100,39 @@ public class HaloOrbit { return firstGuess; } - /** 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. - 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 - 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 - 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. - * @param pva point coordinates on the Halo orbit - * @param phi Monodromy Matrix - * @param p + * @param s SpacecraftState with additionnal equations + * @param type Stability of the manifold required * @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(final SpacecraftState s, + final boolean type) { - /** Static class for event detection. - */ - private static class planeCrossingHandler - implements - EventHandler { + final RealVector eigenVector; - /** {@inheritDoc} */ - public Action eventOccurred(final SpacecraftState s, - final XZPlaneCrossingDetector detector, - final boolean increasing) { - return Action.STOP; + final RealMatrix phi = new STMEquations(cr3bpSystem).getStateTransitionMatrix(s); + if (type) { + eigenVector = new EigenDecomposition(phi).getEigenvector(1); + } else { + eigenVector = new EigenDecomposition(phi).getEigenvector(0); } + + final double epsilon = cr3bpSystem.getVdim() * 1E2 / cr3bpSystem.getLdim(); + + final PVCoordinates pv = + new PVCoordinates(s.getPVCoordinates().getPosition() + .add(new Vector3D(eigenVector.getEntry(0), eigenVector + .getEntry(1), eigenVector.getEntry(2)).normalize() + .scalarMultiply(epsilon)), s.getPVCoordinates() + .getVelocity() + .add(new Vector3D(eigenVector.getEntry(3), + eigenVector.getEntry(4), + eigenVector.getEntry(5)) + .normalize() + .scalarMultiply(epsilon))); + return pv; + } + } diff --git a/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java b/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java index 66a273c13..f709e1cee 100644 --- a/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java +++ b/src/main/java/org/orekit/orbits/RichardsonExpansionContext.java @@ -100,6 +100,9 @@ public class RichardsonExpansionContext { /** Orbital Period of the Halo Orbit, seconds. */ private double orbitalPeriod; + /** Lagrangian Point considered. */ + private LagrangianPoints point; + /** Simple Constructor. * @param cr3bpSystem CR3BP System considered * @param point Lagrangian Point considered @@ -107,17 +110,19 @@ public class RichardsonExpansionContext { public RichardsonExpansionContext(final CR3BPSystem cr3bpSystem, final LagrangianPoints point) { + this.point = point; + this.mu = cr3bpSystem.getMu(); this.lDim = cr3bpSystem.getLdim(); - this.gamma = getLPosition(cr3bpSystem, point); + this.gamma = getLPosition(cr3bpSystem); - final double c2 = getCn(2, point); + final double c2 = getCn(2); - final double c3 = getCn(3, point); + final double c3 = getCn(3); - final double c4 = getCn(4, point); + final double c4 = getCn(4); this.wp = FastMath.sqrt(0.5 * (2 - c2 + FastMath.sqrt(9 * c2 * c2 - 8 * c2))); @@ -217,37 +222,31 @@ public class RichardsonExpansionContext { /** 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) { + private double getLPosition(final CR3BPSystem syst) { 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; + pos = DCP - x; break; case L2: x = syst.getLPosition(LagrangianPoints.L2).getX(); DCP = 1 - mu; - xe = x / lDim; - pos = xe - DCP; + pos = x - DCP; break; case L3: x = syst.getLPosition(LagrangianPoints.L3).getX(); DCP = -mu; - xe = x / lDim; - pos = DCP - xe; + pos = DCP - x; break; default: pos = 0; @@ -258,11 +257,9 @@ public class RichardsonExpansionContext { /** 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) { + private double getCn(final double order) { final double cn; switch (point) { case L1: @@ -313,6 +310,8 @@ public class RichardsonExpansionContext { final double m; + final PVCoordinates pvf; + if (type.equals("Northern")) { m = 1; } else { @@ -369,7 +368,18 @@ public class RichardsonExpansionContext { 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)); + switch (point) { + case L1: + pvf = new PVCoordinates(new Vector3D(firstx * gamma + 1 - mu - gamma, firsty * gamma, firstz * gamma), new Vector3D(vx * gamma, vy * gamma, vz * gamma)); + break; + case L2: + pvf = new PVCoordinates(new Vector3D(firstx * gamma + 1 - mu + gamma, firsty * gamma, firstz * gamma), new Vector3D(vx * gamma, vy * gamma, vz * gamma)); + break; + default: + pvf = new PVCoordinates(new Vector3D(firstx, firsty, firstz), new Vector3D(vx, vy, vz)); + break; + } + return pvf; } /** diff --git a/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java b/src/main/java/org/orekit/propagation/numerical/cr3bp/CR3BPForceModel.java similarity index 79% rename from src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java rename to src/main/java/org/orekit/propagation/numerical/cr3bp/CR3BPForceModel.java index 37b4b0c8e..388aa875b 100644 --- a/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/CR3BPForceModel.java +++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/CR3BPForceModel.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.orekit.propagation.numerical.cr3bp.forces; +package org.orekit.propagation.numerical.cr3bp; import java.util.stream.Stream; @@ -69,7 +69,7 @@ public class CR3BPForceModel extends AbstractForceModel { final double mu = parameters[0]; final double d1 = mu; - final double d2 = 1 - mu; + final double d2 = 1.0 - mu; final double x = s.getPVCoordinates().getPosition().getX(); final double y = s.getPVCoordinates().getPosition().getY(); @@ -82,16 +82,16 @@ public class CR3BPForceModel extends AbstractForceModel { final double r2 = FastMath.sqrt((x - d2) * (x - d2) + y * y + z * z); final double dUdX = - -(1 - mu) * (x + d1) / (r1 * r1 * r1) - + -(1.0 - 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; + -y * ((1.0 - mu) / (r1 * r1 * r1) + mu / (r2 * r2 * r2)) + y; final double dUdZ = - -z * ((1 - mu) / (r1 * r1 * r1) + mu / (r2 * r2 * r2)); + -z * ((1.0 - mu) / (r1 * r1 * r1) + mu / (r2 * r2 * r2)); - final double accx = dUdX + 2 * vy; + final double accx = dUdX + 2.0 * vy; - final double accy = dUdY - 2 * vx; + final double accy = dUdY - 2.0 * vx; final double accz = dUdZ; @@ -108,7 +108,7 @@ public class CR3BPForceModel extends AbstractForceModel { final T mu = parameters[0]; final T d1 = mu; - final T d2 = mu.negate().add(1); + final T d2 = mu.negate().add(1.0); final T x = s.getPVCoordinates().getPosition().getX(); final T y = s.getPVCoordinates().getPosition().getY(); @@ -118,32 +118,29 @@ public class CR3BPForceModel extends AbstractForceModel { 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(); + FastMath.sqrt((d1.add(x)).multiply(d1.add(x)).add(y.multiply(y)) + .add(z.multiply(z))); + final T r2 = - ((x.subtract(d2)).multiply(x.subtract(d2)).add(y.multiply(y)) - .add(z.multiply(z))).sqrt(); + FastMath.sqrt((x.subtract(d2)).multiply(x.subtract(d2)) + .add(y.multiply(y)).add(z.multiply(z))); 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); + mu.negate().add(1.0).negate().multiply(x.add(d1)).divide(r1.multiply(r1).multiply(r1)). + subtract(mu.multiply(x.subtract(d2)).divide(r2.multiply(r2).multiply(r2))). + 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); + .multiply(mu.negate().add(1.0).divide(r1.multiply(r1).multiply(r1)).add(mu.divide(r2.multiply(r2).multiply(r2)))).add(y); final T dUdZ = - z.negate().multiply((r1.pow(3).reciprocal()) - .multiply(mu.negate().add(1)).add(mu.multiply(r2.pow(3)))); + z.negate().multiply(mu.negate().add(1.0).divide(r1.multiply(r1).multiply(r1)) + .add(mu.divide(r2.multiply(r2).multiply(r2)))); - final T accx = dUdX.add(vy.multiply(2)); + final T accx = dUdX.add(vy.multiply(2.0)); - final T accy = dUdY.subtract(vx.multiply(2)); + final T accy = dUdY.subtract(vx.multiply(2.0)); final T accz = dUdZ; 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 0b3429b8b..61833c98d 100644 --- a/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java +++ b/src/main/java/org/orekit/propagation/numerical/cr3bp/STMEquations.java @@ -90,32 +90,32 @@ public class STMEquations 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[0][0] = 1 - (1 - mu) * (1 / (r1 * r1 * r1) - + 3 * (x + mu) * (x + mu) / (r1 * r1 * r1 * r1 * r1)) - + mu * (1 / (r2 * r2 * r2) - + 3 * (x - (1 - mu)) * (x - (1 - mu)) / (r2 * r2 * r2 * r2 * r2)); - 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[1][1] = 1 - (1 - mu) * (1 / (r1 * r1 * r1) - 3 * y * y / (r1 * r1 * r1 * r1 * r1)) - + mu * (1 / (r2 * r2 * r2) - 3 * y * y / (r2 * r2 * r2 * r2 * r2)); - 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[2][2] = -(1 - mu) * (1 / (r1 * r1 * r1) - 3 * z * z / (r1 * r1 * r1 * r1 * r1)) - + mu * (1 / (r2 * r2 * r2) - 3 * z * z / (r2 * r2 * r2 * r2 * r2)); u[0][1] = - 3 * (1 - mu) * y * (x + mu) / FastMath.pow(r1, 5) + - 3 * mu * y * (x - (1 - mu)) / FastMath.pow(r2, 5); + 3 * (1 - mu) * y * (x + mu) / (r1 * r1 * r1 * r1 * r1) + + 3 * mu * y * (x - (1 - mu)) / (r2 * r2 * r2 * r2 * r2); 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); + 3 * (1 - mu) * z * (x + mu) / (r1 * r1 * r1 * r1 * r1) + + 3 * mu * z * (x - (1 - mu)) / (r2 * r2 * r2 * r2 * r2); 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); + 3 * (1 - mu) * y * z / (r1 * r1 * r1 * r1 * r1) + + 3 * mu * y * z / (r2 * r2 * r2 * r2 * r2); u[2][1] = u[1][2]; @@ -151,7 +151,7 @@ public class STMEquations } /** Method returning the STM. - * @param s Initial state of the system + * @param s SpacecraftState of the system * @return phiM State Transition Matrix */ public RealMatrix getStateTransitionMatrix(final SpacecraftState s) { 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 deleted file mode 100644 index 55eb4c9e8..000000000 --- a/src/main/java/org/orekit/propagation/numerical/cr3bp/forces/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* 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/utils/CR3BPDifferentialCorrection.java b/src/main/java/org/orekit/utils/CR3BPDifferentialCorrection.java new file mode 100644 index 000000000..50e6875fb --- /dev/null +++ b/src/main/java/org/orekit/utils/CR3BPDifferentialCorrection.java @@ -0,0 +1,219 @@ +/* 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 org.hipparchus.geometry.euclidean.threed.Vector3D; +import org.hipparchus.linear.MatrixUtils; +import org.hipparchus.linear.RealMatrix; +import org.hipparchus.ode.events.Action; +import org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator; +import org.hipparchus.ode.nonstiff.DormandPrince853Integrator; +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.CR3BPForceModel; +import org.orekit.propagation.numerical.cr3bp.STMEquations; +import org.orekit.time.AbsoluteDate; +import org.orekit.time.TimeScalesFactory; + + +/** Class implementing the differential correction method for Halo or Lyapunov Orbits. + * It is not a simple differential correction, it uses higher order terms to be more accurate and meet orbits requirements. + * Method used is expressed in the following article: Three-dimensional, periodic, Halo Orbits by Kathleen Connor Howell, Stanford University + * @author Vincent Mouraux + */ +public class CR3BPDifferentialCorrection { + + /** Boolean return true if the propagated trajectory crosses the plane. */ + private static boolean cross; + + /** first guess PVCoordinates of the point to start differential correction. */ + private final PVCoordinates firstGuess; + + /** CR3BP System considered. */ + private final CR3BPSystem syst; + + /** orbitalPeriod Orbital Period of the required orbit. */ + private final double orbitalPeriod; + + /** Simple Constructor. + * @param firstguess first guess PVCoordinates of the point to start differential correction + * @param syst CR3BP System considered + * @param orbitalPeriod Orbital Period of the required orbit + */ + public CR3BPDifferentialCorrection(final PVCoordinates firstguess, + final CR3BPSystem syst, final double orbitalPeriod) { + this.firstGuess = firstguess; + this.syst = syst; + this.orbitalPeriod = orbitalPeriod; + } + + /** Return the real starting point PVCoordinates on the Halo orbit after differential correction from a first guess. + * @return pv Position-Velocity of the starting point on the Halo Orbit + */ + public PVCoordinates compute() { + + // number of iteration + double iter = 0; + + // Final velocity difference in X direction + double dvxf; + + // Final velocity difference in Z direction + double dvzf; + + final double[] param = new double[1]; + param[0] = syst.getMu(); + + final RealMatrix A = MatrixUtils.createRealMatrix(2, 2); + + // Time settings + final AbsoluteDate initialDate = + new AbsoluteDate(1996, 06, 25, 0, 0, 00.000, + TimeScalesFactory.getUTC()); + + final Frame rotatingFrame = syst.getRotatingFrame(); + + // Initializing PVCoordinates with first guess + PVCoordinates pv = firstGuess; + + // Maximum integration Time to cross XZ plane equals to one full orbit. + final double integrationTime = orbitalPeriod; + + final double minStep = 1E-12; + final double maxstep = 0.001; + + final double positionTolerance = 1E-9; + final double velocityTolerance = 1E-9; + final double massTolerance = 1.0e-6; + final double[] vecAbsoluteTolerances = {positionTolerance, positionTolerance, positionTolerance, velocityTolerance, velocityTolerance, velocityTolerance, massTolerance }; + final double[] vecRelativeTolerances = + new double[vecAbsoluteTolerances.length]; + + final AdaptiveStepsizeIntegrator integrator = + new DormandPrince853Integrator(minStep, maxstep, + vecAbsoluteTolerances, + vecRelativeTolerances); + + final double maxcheck = 10; + final double threshold = 1E-10; + + final STMEquations stm = new STMEquations(syst); + + final EventDetector XZPlaneCrossing = + new XZPlaneCrossingDetector(maxcheck, threshold) + .withHandler(new planeCrossingHandler()); + + do { + final AbsolutePVCoordinates initialAbsPV = + new AbsolutePVCoordinates(rotatingFrame, initialDate, pv); + + final SpacecraftState initialState = + new SpacecraftState(initialAbsPV); + + final SpacecraftState augmentedInitialState = + stm.setInitialPhi(initialState); + + cross = false; + + final NumericalPropagator propagator = + new NumericalPropagator(integrator); + propagator.setOrbitType(null); + propagator.setIgnoreCentralAttraction(true); + propagator.addForceModel(new CR3BPForceModel(syst)); + propagator.addAdditionalEquations(stm); + propagator.addEventDetector(XZPlaneCrossing); + propagator.setInitialState(augmentedInitialState); + + final SpacecraftState finalState = + propagator.propagate(initialDate.shiftedBy(integrationTime)); + final RealMatrix phi = stm.getStateTransitionMatrix(finalState); + + dvxf = -finalState.getPVCoordinates().getVelocity().getX(); + final double vy = finalState.getPVCoordinates().getVelocity().getY(); + dvzf = -finalState.getPVCoordinates().getVelocity().getZ(); + + final Vector3D acc = new CR3BPForceModel(syst).acceleration(finalState, param); + final double accx = acc.getX(); + final double accz = acc.getZ(); + + final double a11 = + phi.getEntry(3, 0) - accx * phi.getEntry(1, 0) / vy; + final double a12 = + phi.getEntry(3, 4) - accx * phi.getEntry(1, 4) / vy; + final double a21 = + phi.getEntry(5, 0) - accz * phi.getEntry(1, 0) / vy; + final double a22 = + phi.getEntry(5, 4) - accz * phi.getEntry(1, 4) / vy; + + A.setEntry(0, 0, a11); + A.setEntry(0, 1, a12); + A.setEntry(1, 0, a21); + A.setEntry(1, 1, a22); + + final double Mdet = + A.getEntry(0, 0) * A.getEntry(1, 1) - + A.getEntry(1, 0) * A.getEntry(0, 1); + + final double deltax0 = + (A.getEntry(1, 1) * dvxf - A.getEntry(0, 1) * dvzf) / Mdet; // dx0 + final double deltavy0 = + (-A.getEntry(1, 0) * dvxf + A.getEntry(0, 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-8 || FastMath.abs(dvzf) > 1E-8) & + iter < 5); + + if (cross) { + return pv; + } else { + System.out + .println("Your orbit does not cross XZ plane, trajectory wont result into an Halo Orbit"); + return pv; + } + } + + /** Static class for event detection. + */ + private static class planeCrossingHandler + implements + EventHandler { + + /** {@inheritDoc} */ + public Action eventOccurred(final SpacecraftState s, + final XZPlaneCrossingDetector detector, + final boolean increasing) { + cross = true; + return Action.STOP; + } + } +} diff --git a/src/site/site.xml b/src/site/site.xml index 97ef244bf..462c32706 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -1,69 +1,64 @@ - + - - CS Systèmes d'Information - /images/logo_cs_2008_ang.jpg - http://uk.c-s.fr/ - - - Orekit - /images/orekit-logo.png - /index.html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + CS Systèmes d'Information + /images/logo_cs_2008_ang.jpg + http://uk.c-s.fr/ + + + Orekit + /images/orekit-logo.png + /index.html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/org/orekit/bodies/CR3BPSystemTest.java b/src/test/java/org/orekit/bodies/CR3BPSystemTest.java index 682c91afe..829a9e464 100644 --- a/src/test/java/org/orekit/bodies/CR3BPSystemTest.java +++ b/src/test/java/org/orekit/bodies/CR3BPSystemTest.java @@ -78,28 +78,28 @@ public class CR3BPSystemTest { final CR3BPSystem syst = CR3BPFactory.getEarthMoonCR3BP(); 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); + Assert.assertEquals(3.23E8, l1Position.getX() * syst.getLdim(),3E6); + Assert.assertEquals(0.0, l1Position.getY() * syst.getLdim(),1E3); + Assert.assertEquals(0.0, l1Position.getZ() * syst.getLdim(),1E3); 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); + Assert.assertEquals(4.45E8, l2Position.getX() * syst.getLdim(),3E6); + Assert.assertEquals(0.0, l2Position.getY() * syst.getLdim(),1E3); + Assert.assertEquals(0.0, l2Position.getZ() * syst.getLdim(),1E3); 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); + Assert.assertEquals(-3.86E8, l3Position.getX() * syst.getLdim(),3E6); + Assert.assertEquals(0.0, l3Position.getY() * syst.getLdim(),1E3); + Assert.assertEquals(0.0, l3Position.getZ() * syst.getLdim(),1E3); 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); + Assert.assertEquals(1.87E8, l4Position.getX() * syst.getLdim(),3E6); + Assert.assertEquals(3.32E8, l4Position.getY() * syst.getLdim(),3E6); + Assert.assertEquals(0.0, l4Position.getZ() * syst.getLdim(),1E3); 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); + Assert.assertEquals(1.87E8, l5Position.getX() * syst.getLdim(),3E6); + Assert.assertEquals(-3.32E8, l5Position.getY() * syst.getLdim(),3E6); + Assert.assertEquals(0.0, l5Position.getZ() * syst.getLdim(),1E3); } } diff --git a/src/test/java/org/orekit/forces/CR3BPForceModelTest.java b/src/test/java/org/orekit/forces/CR3BPForceModelTest.java index 64602df41..6c9cbcb14 100644 --- a/src/test/java/org/orekit/forces/CR3BPForceModelTest.java +++ b/src/test/java/org/orekit/forces/CR3BPForceModelTest.java @@ -1,16 +1,13 @@ 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.ClassicalRungeKuttaFieldIntegrator; +import org.hipparchus.ode.nonstiff.ClassicalRungeKuttaIntegrator; import org.hipparchus.ode.nonstiff.DormandPrince853Integrator; import org.hipparchus.random.GaussianRandomGenerator; import org.hipparchus.random.RandomGenerator; @@ -23,22 +20,18 @@ 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.propagation.numerical.cr3bp.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.FieldAbsolutePVCoordinates; import org.orekit.utils.FieldPVCoordinates; import org.orekit.utils.PVCoordinates; @@ -60,8 +53,8 @@ public class CR3BPForceModelTest { 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 Frame Frame = syst.getRotatingFrame(); + final Frame Frame = FramesFactory.getGCRF(); final AbsolutePVCoordinates initialAbsPV = new AbsolutePVCoordinates(Frame, initialDate, initialConditions); @@ -124,61 +117,38 @@ public class CR3BPForceModelTest { 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(); + //final Frame frame = syst.getRotatingFrame(); + final Frame frame = FramesFactory.getGCRF(); + + // PVCoordinates linked to a Frame and a Date + final FieldAbsolutePVCoordinates initialAbsPV = + new FieldAbsolutePVCoordinates<>(frame, J2000, initialConditions); - FieldCartesianOrbit FKO = new FieldCartesianOrbit<>(initialConditions, - EME, - J2000, - mu); - FieldSpacecraftState initialState = new FieldSpacecraftState<>(FKO); + FieldSpacecraftState initialState = new FieldSpacecraftState<>(initialAbsPV); 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]; + ClassicalRungeKuttaFieldIntegrator integrator = new ClassicalRungeKuttaFieldIntegrator<>(field, zero.add(1.0)); - 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); + ClassicalRungeKuttaIntegrator RIntegrator = new ClassicalRungeKuttaIntegrator(1.0); FieldNumericalPropagator FNP = new FieldNumericalPropagator<>(field, integrator); - FNP.setOrbitType(type); + FNP.setOrbitType(null); FNP.setIgnoreCentralAttraction(true); FNP.setInitialState(initialState); NumericalPropagator NP = new NumericalPropagator(RIntegrator); - NP.setOrbitType(type); + NP.setOrbitType(null); NP.setIgnoreCentralAttraction(true); NP.setInitialState(iSR); @@ -186,8 +156,9 @@ public class CR3BPForceModelTest { FNP.addForceModel(forceModel); NP.addForceModel(forceModel); + - FieldAbsoluteDate target = J2000.shiftedBy(1000.); + FieldAbsoluteDate target = J2000.shiftedBy(1.); FieldSpacecraftState finalState_DS = FNP.propagate(target); SpacecraftState finalState_R = NP.propagate(target.toAbsoluteDate()); FieldPVCoordinates finPVC_DS = finalState_DS.getPVCoordinates(); @@ -196,12 +167,12 @@ public class CR3BPForceModelTest { 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); - + Assert.assertTrue(forceModel.dependsOnPositionOnly()); 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}, + new double[] {0.001, 0.001, 0.001, 0.001, 0.001, 0.001}, NGG); double px_R = fpx.getReal(); double py_R = fpy.getReal(); @@ -224,20 +195,22 @@ public class CR3BPForceModelTest { 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); + // PVCoordinates linked to a Frame and a Date + final AbsolutePVCoordinates shiftedAbsPV = + new AbsolutePVCoordinates(frame, J2000.toAbsoluteDate(), shiftedConditions); + + SpacecraftState shift_iSR = new SpacecraftState(shiftedAbsPV); + + NumericalPropagator shift_NP = new NumericalPropagator(RIntegrator); shift_NP.setInitialState(shift_iSR); + shift_NP.setOrbitType(null); + shift_NP.setIgnoreCentralAttraction(true); shift_NP.addForceModel(forceModel); + SpacecraftState finalState_shift = shift_NP.propagate(target.toAbsoluteDate()); @@ -276,14 +249,17 @@ public class CR3BPForceModelTest { 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)); + if (ax != 0 || ay !=0 || az != 0) { + 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)); + } else { + maxA = 0; + } } - Assert.assertEquals(0, maxP, 5.0e-9); - Assert.assertEquals(0, maxV, 3.0e-10); - Assert.assertEquals(0, maxA, 8.0e-8); - + Assert.assertEquals(0, maxP, 4.2e-11); + Assert.assertEquals(0, maxV, 1.4e-12); + Assert.assertEquals(0, maxA, 8.5e-12); } @@ -291,24 +267,7 @@ public class CR3BPForceModelTest { @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(); } } diff --git a/src/test/resources/ccsds/XML/TDM-data-inconsistent-block.xml b/src/test/resources/ccsds/XML/TDM-data-inconsistent-block.xml index 6b6b06486..a98e63ee7 100644 --- a/src/test/resources/ccsds/XML/TDM-data-inconsistent-block.xml +++ b/src/test/resources/ccsds/XML/TDM-data-inconsistent-block.xml @@ -1,61 +1,61 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - This is a meta-data comment - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - UTC - 7.7E-5 - - - This is a data comment - - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - -294.9673 - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + This is a meta-data comment + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + UTC + 7.7E-5 + + + This is a data comment + + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + -294.9673 + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDM-data-number-format-error.xml b/src/test/resources/ccsds/XML/TDM-data-number-format-error.xml index 27b76d26a..30dcd45dc 100644 --- a/src/test/resources/ccsds/XML/TDM-data-number-format-error.xml +++ b/src/test/resources/ccsds/XML/TDM-data-number-format-error.xml @@ -1,60 +1,60 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - UTC - 7.7E-5 - - - - 2005-06-08T17:41:00.000 - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - this-is-not-a-number - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + UTC + 7.7E-5 + + + + 2005-06-08T17:41:00.000 + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + this-is-not-a-number + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDM-data-wrong-keyword.xml b/src/test/resources/ccsds/XML/TDM-data-wrong-keyword.xml index 3623cb6ac..d980661cf 100644 --- a/src/test/resources/ccsds/XML/TDM-data-wrong-keyword.xml +++ b/src/test/resources/ccsds/XML/TDM-data-wrong-keyword.xml @@ -1,60 +1,60 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - UTC - 7.7E-5 - - - - 2005-06-08T17:41:00.000 - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - -294.9673 - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + UTC + 7.7E-5 + + + + 2005-06-08T17:41:00.000 + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + -294.9673 + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDM-inconsistent-time-systems.xml b/src/test/resources/ccsds/XML/TDM-inconsistent-time-systems.xml index 922515a60..77d151dba 100644 --- a/src/test/resources/ccsds/XML/TDM-inconsistent-time-systems.xml +++ b/src/test/resources/ccsds/XML/TDM-inconsistent-time-systems.xml @@ -1,134 +1,134 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - The following are clock offsets, in seconds between the - clocks at each DSN complex relative to UTC(NIST). The offset - is a mean of readings using several GPS space vehicles in - common view. Value is "station clock minus UTC”. - 2005-06-10T15:45:00.000 - NASA/JPL -
- - - - Note: SPC10 switched back to Maser1 from Maser2 on 2005-142 - DSS-10 - UTC-NIST - 2005-05-22T12:00:00.000 - 2005-05-25T12:00:00.000 - UTC - - - - 2005-05-22T12:00:00.000 - 9.56E-7 - - - 2005-05-22T12:00:00.000 - 6.944E-14 - - - 2005-05-23T12:00:00.000 - 9.62E-7 - - - 2005-05-23T12:00:00.000 - -2.083E-13 - - - 2005-05-24T12:00:00.000 - 9.44E-7 - - - 2005-05-24T12:00:00.000 - -2.778E-13 - - - 2005-05-25T12:00:00.000 - 9.2E-7 - - - - - - DSS-40 - UTC-NIST - 2005-05-22T12:00:00.000 - 2005-05-25T12:00:00.000 - TCG - - - - 2005-05-22T12:00:00.000 - -7.4E-7 - - - 2005-05-22T12:00:00.000 - -3.125E-13 - - - 2005-05-23T12:00:00.000 - -7.67E-7 - - - 2005-05-23T12:00:00.000 - -1.62E-13 - - - 2005-05-24T12:00:00.000 - -7.81E-7 - - - 2005-05-24T12:00:00.000 - -4.745E-13 - - - 2005-05-25T12:00:00.000 - -8.22E-7 - - - - - - DSS-60 - UTC-NIST - 2005-05-22T12:00:00.000 - 2005-05-25T12:00:00.000 - UTC - - - - 2005-05-22T12:00:00.000 - -1.782E-6 - - - 2005-05-22T12:00:00.000 - 1.736E-13 - - - 2005-05-23T12:00:00.000 - -1.767E-6 - - - 2005-05-23T12:00:00.000 - 1.157E-14 - - - 2005-05-24T12:00:00.000 - -1.766E-6 - - - 2005-05-24T12:00:00.000 - 8.102E-14 - - - 2005-05-25T12:00:00.000 - -1.759E-6 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + The following are clock offsets, in seconds between the + clocks at each DSN complex relative to UTC(NIST). The offset + is a mean of readings using several GPS space vehicles in + common view. Value is "station clock minus UTC”. + 2005-06-10T15:45:00.000 + NASA/JPL +
+ + + + Note: SPC10 switched back to Maser1 from Maser2 on 2005-142 + DSS-10 + UTC-NIST + 2005-05-22T12:00:00.000 + 2005-05-25T12:00:00.000 + UTC + + + + 2005-05-22T12:00:00.000 + 9.56E-7 + + + 2005-05-22T12:00:00.000 + 6.944E-14 + + + 2005-05-23T12:00:00.000 + 9.62E-7 + + + 2005-05-23T12:00:00.000 + -2.083E-13 + + + 2005-05-24T12:00:00.000 + 9.44E-7 + + + 2005-05-24T12:00:00.000 + -2.778E-13 + + + 2005-05-25T12:00:00.000 + 9.2E-7 + + + + + + DSS-40 + UTC-NIST + 2005-05-22T12:00:00.000 + 2005-05-25T12:00:00.000 + TCG + + + + 2005-05-22T12:00:00.000 + -7.4E-7 + + + 2005-05-22T12:00:00.000 + -3.125E-13 + + + 2005-05-23T12:00:00.000 + -7.67E-7 + + + 2005-05-23T12:00:00.000 + -1.62E-13 + + + 2005-05-24T12:00:00.000 + -7.81E-7 + + + 2005-05-24T12:00:00.000 + -4.745E-13 + + + 2005-05-25T12:00:00.000 + -8.22E-7 + + + + + + DSS-60 + UTC-NIST + 2005-05-22T12:00:00.000 + 2005-05-25T12:00:00.000 + UTC + + + + 2005-05-22T12:00:00.000 + -1.782E-6 + + + 2005-05-22T12:00:00.000 + 1.736E-13 + + + 2005-05-23T12:00:00.000 + -1.767E-6 + + + 2005-05-23T12:00:00.000 + 1.157E-14 + + + 2005-05-24T12:00:00.000 + -1.766E-6 + + + 2005-05-24T12:00:00.000 + 8.102E-14 + + + 2005-05-25T12:00:00.000 + -1.759E-6 + + + +
diff --git a/src/test/resources/ccsds/XML/TDM-metadata-number-format-error.xml b/src/test/resources/ccsds/XML/TDM-metadata-number-format-error.xml index 074428a29..b2b56da9d 100644 --- a/src/test/resources/ccsds/XML/TDM-metadata-number-format-error.xml +++ b/src/test/resources/ccsds/XML/TDM-metadata-number-format-error.xml @@ -1,60 +1,60 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - UTC - this-is-not-a-number - - - - 2005-06-08T17:41:00.000 - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - -294.9673 - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + UTC + this-is-not-a-number + + + + 2005-06-08T17:41:00.000 + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + -294.9673 + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDM-metadata-timesystem-not-implemented.xml b/src/test/resources/ccsds/XML/TDM-metadata-timesystem-not-implemented.xml index bdf607451..d7697a933 100644 --- a/src/test/resources/ccsds/XML/TDM-metadata-timesystem-not-implemented.xml +++ b/src/test/resources/ccsds/XML/TDM-metadata-timesystem-not-implemented.xml @@ -1,60 +1,60 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - WRONG-TIME-SYSTEM - 7.7E-5 - - - - 2005-06-08T17:41:00.000 - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - -294.9673 - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + WRONG-TIME-SYSTEM + 7.7E-5 + + + + 2005-06-08T17:41:00.000 + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + -294.9673 + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDM-metadata-wrong-keyword.xml b/src/test/resources/ccsds/XML/TDM-metadata-wrong-keyword.xml index 2208116c6..2effaa185 100644 --- a/src/test/resources/ccsds/XML/TDM-metadata-wrong-keyword.xml +++ b/src/test/resources/ccsds/XML/TDM-metadata-wrong-keyword.xml @@ -1,60 +1,60 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - UTC - 7.7E-5 - - - - 2005-06-08T17:41:00.000 - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - -294.9673 - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + UTC + 7.7E-5 + + + + 2005-06-08T17:41:00.000 + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + -294.9673 + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDMExample15.xml b/src/test/resources/ccsds/XML/TDMExample15.xml index 8d9dc24db..d4ec3a60c 100644 --- a/src/test/resources/ccsds/XML/TDMExample15.xml +++ b/src/test/resources/ccsds/XML/TDMExample15.xml @@ -1,139 +1,139 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - The following are clock offsets, in seconds between the - clocks at each DSN complex relative to UTC(NIST). The offset - is a mean of readings using several GPS space vehicles in - common view. Value is "station clock minus UTC”. - 2005-06-10T15:45:00.000 - NASA/JPL -
- - - - Note: SPC10 switched back to Maser1 from Maser2 on 2005-142 - DSS-10 - UTC-NIST - 2005-05-22T12:00:00.000 - 2005-05-25T12:00:00.000 - UTC - - - This is a data comment - - 2005-05-22T12:00:00.000 - 9.56E-7 - - - 2005-05-22T12:00:00.000 - 6.944E-14 - - - 2005-05-23T12:00:00.000 - 9.62E-7 - - - 2005-05-23T12:00:00.000 - -2.083E-13 - - - 2005-05-24T12:00:00.000 - 9.44E-7 - - - 2005-05-24T12:00:00.000 - -2.778E-13 - - - 2005-05-25T12:00:00.000 - 9.2E-7 - - - - - - This is a meta-data comment - DSS-40 - UTC-NIST - 2005-05-22T12:00:00.000 - 2005-05-25T12:00:00.000 - UTC - - - This is a data comment - - 2005-05-22T12:00:00.000 - -7.4E-7 - - - 2005-05-22T12:00:00.000 - -3.125E-13 - - - 2005-05-23T12:00:00.000 - -7.67E-7 - - - 2005-05-23T12:00:00.000 - -1.62E-13 - - - 2005-05-24T12:00:00.000 - -7.81E-7 - - - 2005-05-24T12:00:00.000 - -4.745E-13 - - - 2005-05-25T12:00:00.000 - -8.22E-7 - - - - - - This is a meta-data comment - DSS-60 - UTC-NIST - 2005-05-22T12:00:00.000 - 2005-05-25T12:00:00.000 - UTC - - - This is a data comment - - 2005-05-22T12:00:00.000 - -1.782E-6 - - - 2005-05-22T12:00:00.000 - 1.736E-13 - - - 2005-05-23T12:00:00.000 - -1.767E-6 - - - 2005-05-23T12:00:00.000 - 1.157E-14 - - - 2005-05-24T12:00:00.000 - -1.766E-6 - - - 2005-05-24T12:00:00.000 - 8.102E-14 - - - 2005-05-25T12:00:00.000 - -1.759E-6 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + The following are clock offsets, in seconds between the + clocks at each DSN complex relative to UTC(NIST). The offset + is a mean of readings using several GPS space vehicles in + common view. Value is "station clock minus UTC”. + 2005-06-10T15:45:00.000 + NASA/JPL +
+ + + + Note: SPC10 switched back to Maser1 from Maser2 on 2005-142 + DSS-10 + UTC-NIST + 2005-05-22T12:00:00.000 + 2005-05-25T12:00:00.000 + UTC + + + This is a data comment + + 2005-05-22T12:00:00.000 + 9.56E-7 + + + 2005-05-22T12:00:00.000 + 6.944E-14 + + + 2005-05-23T12:00:00.000 + 9.62E-7 + + + 2005-05-23T12:00:00.000 + -2.083E-13 + + + 2005-05-24T12:00:00.000 + 9.44E-7 + + + 2005-05-24T12:00:00.000 + -2.778E-13 + + + 2005-05-25T12:00:00.000 + 9.2E-7 + + + + + + This is a meta-data comment + DSS-40 + UTC-NIST + 2005-05-22T12:00:00.000 + 2005-05-25T12:00:00.000 + UTC + + + This is a data comment + + 2005-05-22T12:00:00.000 + -7.4E-7 + + + 2005-05-22T12:00:00.000 + -3.125E-13 + + + 2005-05-23T12:00:00.000 + -7.67E-7 + + + 2005-05-23T12:00:00.000 + -1.62E-13 + + + 2005-05-24T12:00:00.000 + -7.81E-7 + + + 2005-05-24T12:00:00.000 + -4.745E-13 + + + 2005-05-25T12:00:00.000 + -8.22E-7 + + + + + + This is a meta-data comment + DSS-60 + UTC-NIST + 2005-05-22T12:00:00.000 + 2005-05-25T12:00:00.000 + UTC + + + This is a data comment + + 2005-05-22T12:00:00.000 + -1.782E-6 + + + 2005-05-22T12:00:00.000 + 1.736E-13 + + + 2005-05-23T12:00:00.000 + -1.767E-6 + + + 2005-05-23T12:00:00.000 + 1.157E-14 + + + 2005-05-24T12:00:00.000 + -1.766E-6 + + + 2005-05-24T12:00:00.000 + 8.102E-14 + + + 2005-05-25T12:00:00.000 + -1.759E-6 + + + +
diff --git a/src/test/resources/ccsds/XML/TDMExample2.xml b/src/test/resources/ccsds/XML/TDMExample2.xml index d4d7486c4..706e83345 100644 --- a/src/test/resources/ccsds/XML/TDMExample2.xml +++ b/src/test/resources/ccsds/XML/TDMExample2.xml @@ -1,62 +1,62 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - StarTrek 1-way data, Ka band down - 2005-06-09T20:15:00.000 - NASA/JPL -
- - - - This is a meta-data comment - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - 2,1 - 7.7E-5 - 2005-06-08T17:41:00.000 - 2005-06-08T17:41:40.000 - UTC - 7.7E-5 - - - This is a data comment - - 2005-06-08T17:41:00.000 - 3.2023442781733E10 - - - 2005-06-08T17:41:00.000 - -409.2735 - - - 2005-06-08T17:41:01.000 - -371.1568 - - - 2005-06-08T17:41:02.000 - -333.0551 - - - 2005-06-08T17:41:03.000 - -294.9673 - - - 2005-06-08T17:41:04.000 - -256.9054 - - - 2005-06-08T17:41:05.000 - -218.7951 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + StarTrek 1-way data, Ka band down + 2005-06-09T20:15:00.000 + NASA/JPL +
+ + + + This is a meta-data comment + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + 2,1 + 7.7E-5 + 2005-06-08T17:41:00.000 + 2005-06-08T17:41:40.000 + UTC + 7.7E-5 + + + This is a data comment + + 2005-06-08T17:41:00.000 + 3.2023442781733E10 + + + 2005-06-08T17:41:00.000 + -409.2735 + + + 2005-06-08T17:41:01.000 + -371.1568 + + + 2005-06-08T17:41:02.000 + -333.0551 + + + 2005-06-08T17:41:03.000 + -294.9673 + + + 2005-06-08T17:41:04.000 + -256.9054 + + + 2005-06-08T17:41:05.000 + -218.7951 + + + +
diff --git a/src/test/resources/ccsds/XML/TDMExample4.xml b/src/test/resources/ccsds/XML/TDMExample4.xml index f0d7cf6a3..2de8dc0c6 100644 --- a/src/test/resources/ccsds/XML/TDMExample4.xml +++ b/src/test/resources/ccsds/XML/TDMExample4.xml @@ -1,118 +1,120 @@ -
- TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) - 2005-07-10T23:00:00.000 - NASA/JPL -
- - - - Range correction applied is range calibration to DSS-24. - Estimated RTLT at begin of pass = 950 seconds - Antenna Z-height correction 0.0545 km applied to uplink signal - Antenna Z-height correction 0.0189 km applied to downlink signal - 46.7741 - YES - START - SEQUENTIAL - DSS-24 - YYYY-NNNA - 1,2,1 - COHERENT - 2.0E26 - RU - 7.7E-5 - 0.0 - UTC - 7.7E-5 - 0.0 - - - This is a data comment - - 2005-07-10T00:31:51.000 - 7.1800643673536E9 - - - 2005-07-10T00:31:51.000 - 0.59299 - - - 2005-07-10T00:31:51.000 - 3.92429985151986E7 - - - 2005-07-10T00:31:51.000 - 28.52538 - - - 2005-07-10T00:34:48.000 - 7.1800644723146E9 - - - 2005-07-10T00:34:48.000 - 0.59305 - - - 2005-07-10T00:34:48.000 - 6.11722653115234E7 - - - 2005-07-10T00:34:48.000 - 28.39347 - - - 2005-07-10T00:37:45.000 - 7.1800645772756E9 - - - 2005-07-10T00:37:45.000 - 0.59299 - - - 2005-07-10T00:37:45.000 - 1.59981088168328E7 - - - 2005-07-10T00:37:45.000 - 28.16193 - - - 2005-07-10T00:40:42.000 - 7.1800646822366E9 - - - 2005-07-10T00:40:42.000 - 0.59299 - - - 2005-07-10T00:40:42.000 - 3.79382844138008E7 - - - 2005-07-10T00:40:42.000 - 29.44597 - - - 2005-07-10T00:58:24.000 - 7.18006532656141E9 - - - 2005-07-10T00:49:33.000 - 0.62085 - - - 2005-07-10T00:58:24.000 - 3.54787294012973E7 - - - 2005-07-10T00:58:24.000 - 30.48199 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) + 2005-07-10T23:00:00.000 + NASA/JPL +
+ + + + Range correction applied is range calibration to DSS-24. + Estimated RTLT at begin of pass = 950 seconds + Antenna Z-height correction 0.0545 km applied to uplink + signal + Antenna Z-height correction 0.0189 km applied to downlink + signal + 46.7741 + YES + START + SEQUENTIAL + DSS-24 + YYYY-NNNA + 1,2,1 + COHERENT + 2.0E26 + RU + 7.7E-5 + 0.0 + UTC + 7.7E-5 + 0.0 + + + This is a data comment + + 2005-07-10T00:31:51.000 + 7.1800643673536E9 + + + 2005-07-10T00:31:51.000 + 0.59299 + + + 2005-07-10T00:31:51.000 + 3.92429985151986E7 + + + 2005-07-10T00:31:51.000 + 28.52538 + + + 2005-07-10T00:34:48.000 + 7.1800644723146E9 + + + 2005-07-10T00:34:48.000 + 0.59305 + + + 2005-07-10T00:34:48.000 + 6.11722653115234E7 + + + 2005-07-10T00:34:48.000 + 28.39347 + + + 2005-07-10T00:37:45.000 + 7.1800645772756E9 + + + 2005-07-10T00:37:45.000 + 0.59299 + + + 2005-07-10T00:37:45.000 + 1.59981088168328E7 + + + 2005-07-10T00:37:45.000 + 28.16193 + + + 2005-07-10T00:40:42.000 + 7.1800646822366E9 + + + 2005-07-10T00:40:42.000 + 0.59299 + + + 2005-07-10T00:40:42.000 + 3.79382844138008E7 + + + 2005-07-10T00:40:42.000 + 29.44597 + + + 2005-07-10T00:58:24.000 + 7.18006532656141E9 + + + 2005-07-10T00:49:33.000 + 0.62085 + + + 2005-07-10T00:58:24.000 + 3.54787294012973E7 + + + 2005-07-10T00:58:24.000 + 30.48199 + + + +
diff --git a/src/test/resources/ccsds/XML/TDMExample6.xml b/src/test/resources/ccsds/XML/TDMExample6.xml index a3be96424..93db8d9a7 100644 --- a/src/test/resources/ccsds/XML/TDMExample6.xml +++ b/src/test/resources/ccsds/XML/TDMExample6.xml @@ -1,113 +1,113 @@ -
- TDM example created by yyyyy-nnnA Nav Team (JAXA) - 1998-06-10T01:00:00.000 - JAXA -
- - - - This is a meta-data comment - AZEL - 1.0 - MIDDLE - SEQUENTIAL - NORTH - F07R07 - E7 - 1,2,3,2,1 - CONSTANT - KM - 1998-06-10T00:57:37.000 - 1998-06-10T00:57:44.000 - UTC - - - This is a data comment - - 1998-06-10T00:57:37.000 - 80452.7542 - - - 1998-06-10T00:57:37.000 - 256.64002393 - - - 1998-06-10T00:57:37.000 - 13.38100016 - - - 1998-06-10T00:57:37.000 - 2.10639519907917E9 - - - 1998-06-10T00:57:37.000 - 2.287487999E9 - - - 1998-06-10T00:57:38.000 - 80452.7368 - - - 1998-06-10T00:57:38.000 - 256.64002393 - - - 1998-06-10T00:57:38.000 - 13.38100016 - - - 1998-06-10T00:57:38.000 - 2.10639519907917E9 - - - 1998-06-10T00:57:38.000 - 2.287487999E9 - - - 1998-06-10T00:57:39.000 - 80452.7197 - - - 1998-06-10T00:57:39.000 - 256.64002393 - - - 1998-06-10T00:57:39.000 - 13.38100016 - - - 1998-06-10T00:57:39.000 - 2.10639519907917E9 - - - 1998-06-10T00:57:39.000 - 2.287487999E9 - - - 1998-06-10T00:57:44.000 - 80452.6331 - - - 1998-06-10T00:57:44.000 - 256.64002393 - - - 1998-06-10T00:57:44.000 - 13.38100016 - - - 1998-06-10T00:57:44.000 - 2.10639519907917E9 - - - 1998-06-10T00:57:44.000 - 2.287487999E9 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by yyyyy-nnnA Nav Team (JAXA) + 1998-06-10T01:00:00.000 + JAXA +
+ + + + This is a meta-data comment + AZEL + 1.0 + MIDDLE + SEQUENTIAL + NORTH + F07R07 + E7 + 1,2,3,2,1 + CONSTANT + KM + 1998-06-10T00:57:37.000 + 1998-06-10T00:57:44.000 + UTC + + + This is a data comment + + 1998-06-10T00:57:37.000 + 80452.7542 + + + 1998-06-10T00:57:37.000 + 256.64002393 + + + 1998-06-10T00:57:37.000 + 13.38100016 + + + 1998-06-10T00:57:37.000 + 2.10639519907917E9 + + + 1998-06-10T00:57:37.000 + 2.287487999E9 + + + 1998-06-10T00:57:38.000 + 80452.7368 + + + 1998-06-10T00:57:38.000 + 256.64002393 + + + 1998-06-10T00:57:38.000 + 13.38100016 + + + 1998-06-10T00:57:38.000 + 2.10639519907917E9 + + + 1998-06-10T00:57:38.000 + 2.287487999E9 + + + 1998-06-10T00:57:39.000 + 80452.7197 + + + 1998-06-10T00:57:39.000 + 256.64002393 + + + 1998-06-10T00:57:39.000 + 13.38100016 + + + 1998-06-10T00:57:39.000 + 2.10639519907917E9 + + + 1998-06-10T00:57:39.000 + 2.287487999E9 + + + 1998-06-10T00:57:44.000 + 80452.6331 + + + 1998-06-10T00:57:44.000 + 256.64002393 + + + 1998-06-10T00:57:44.000 + 13.38100016 + + + 1998-06-10T00:57:44.000 + 2.10639519907917E9 + + + 1998-06-10T00:57:44.000 + 2.287487999E9 + + + +
diff --git a/src/test/resources/ccsds/XML/TDMExample8.xml b/src/test/resources/ccsds/XML/TDMExample8.xml index 2719e0856..9f17edad7 100644 --- a/src/test/resources/ccsds/XML/TDMExample8.xml +++ b/src/test/resources/ccsds/XML/TDMExample8.xml @@ -1,136 +1,136 @@ -
- GEOSCX_INP - 2007-08-30T12:01:44.749 - GSOC -
- - - - This is a meta-data comment - XSYE - RAW - 1.0 - END - SEQUENTIAL - HBSTK - SAT - 1,2,1 - 2007-08-29T07:00:02.000 - 2007-08-29T14:00:02.000 - UTC - - - This is a data comment - - 2007-08-29T07:00:02.000 - -1.498776048 - - - 2007-08-29T07:00:02.000 - 67.01312389 - - - 2007-08-29T07:00:02.000 - 18.28395556 - - - 2007-08-29T08:00:02.000 - -2.201305217 - - - 2007-08-29T08:00:02.000 - 67.01982278 - - - 2007-08-29T08:00:02.000 - 21.19609167 - - - 2007-08-29T14:00:02.000 - 0.929545817 - - - 2007-08-29T14:00:02.000 - -89.35626083 - - - 2007-08-29T14:00:02.000 - 2.78791667 - - - - - - This is a meta-data comment - AZEL - RAW - 1.0 - END - SEQUENTIAL - WHM1 - SAT - 1,2,1 - CONSTANT - 1.0E7 - 2007-08-29T06:00:02.000 - 2007-08-29T13:00:02.000 - UTC - - - This is a data comment - - 2007-08-29T06:00:02.000 - 40016.524895367 - - - 2007-08-29T06:00:02.000 - -0.885640091 - - - 2007-08-29T06:00:02.000 - 99.5320425 - - - 2007-08-29T06:00:02.000 - 1.26724167 - - - 2007-08-29T07:00:02.000 - 35723.879359189 - - - 2007-08-29T07:00:02.000 - -1.510223139 - - - 2007-08-29T07:00:02.000 - 103.3306175 - - - 2007-08-29T07:00:02.000 - 4.77875278 - - - 2007-08-29T13:00:02.000 - 34815.685586009 - - - 2007-08-29T13:00:02.000 - 1.504082291 - - - 2007-08-29T13:00:02.000 - 243.73365222 - - - 2007-08-29T13:00:02.000 - 8.78254167 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ GEOSCX_INP + 2007-08-30T12:01:44.749 + GSOC +
+ + + + This is a meta-data comment + XSYE + RAW + 1.0 + END + SEQUENTIAL + HBSTK + SAT + 1,2,1 + 2007-08-29T07:00:02.000 + 2007-08-29T14:00:02.000 + UTC + + + This is a data comment + + 2007-08-29T07:00:02.000 + -1.498776048 + + + 2007-08-29T07:00:02.000 + 67.01312389 + + + 2007-08-29T07:00:02.000 + 18.28395556 + + + 2007-08-29T08:00:02.000 + -2.201305217 + + + 2007-08-29T08:00:02.000 + 67.01982278 + + + 2007-08-29T08:00:02.000 + 21.19609167 + + + 2007-08-29T14:00:02.000 + 0.929545817 + + + 2007-08-29T14:00:02.000 + -89.35626083 + + + 2007-08-29T14:00:02.000 + 2.78791667 + + + + + + This is a meta-data comment + AZEL + RAW + 1.0 + END + SEQUENTIAL + WHM1 + SAT + 1,2,1 + CONSTANT + 1.0E7 + 2007-08-29T06:00:02.000 + 2007-08-29T13:00:02.000 + UTC + + + This is a data comment + + 2007-08-29T06:00:02.000 + 40016.524895367 + + + 2007-08-29T06:00:02.000 + -0.885640091 + + + 2007-08-29T06:00:02.000 + 99.5320425 + + + 2007-08-29T06:00:02.000 + 1.26724167 + + + 2007-08-29T07:00:02.000 + 35723.879359189 + + + 2007-08-29T07:00:02.000 + -1.510223139 + + + 2007-08-29T07:00:02.000 + 103.3306175 + + + 2007-08-29T07:00:02.000 + 4.77875278 + + + 2007-08-29T13:00:02.000 + 34815.685586009 + + + 2007-08-29T13:00:02.000 + 1.504082291 + + + 2007-08-29T13:00:02.000 + 243.73365222 + + + 2007-08-29T13:00:02.000 + 8.78254167 + + + +
diff --git a/src/test/resources/ccsds/XML/TDMExampleAllKeywords.xml b/src/test/resources/ccsds/XML/TDMExampleAllKeywords.xml index b6cf2df89..6d74bd150 100644 --- a/src/test/resources/ccsds/XML/TDMExampleAllKeywords.xml +++ b/src/test/resources/ccsds/XML/TDMExampleAllKeywords.xml @@ -1,210 +1,210 @@ -
- TDM example created by CSSI - Testing all TDM known meta-data and data keywords - 2017-06-14T10:53:00.000 - CSSI -
- - - - All known meta-data keywords displayed - RADEC - 1.0 - 2.0 - 3.0 - 4.0 - 5.0 - 6.0 - YES - RAW - 3.20210352E10 - 1.0 - MIDDLE - SEQUENTIAL - DSS-25 - YYYY-NNNA - P3 - P4 - P5 - 2,1 - 4,5 - 3,2 - COHERENT - 32768.0 - RU - L - 7.7E-5 - 7.7E-5 - 7.7E-5 - 7.7E-5 - 7.7E-5 - EME2000 - 2017-06-14T10:53:00.000 - 2017-06-15T10:53:00.000 - UTC - TRANSMIT - S - 7.7E-5 - 7.7E-5 - 7.7E-5 - 7.7E-5 - 7.7E-5 - 221 - 240 - - - Signal related Keywords - - 2017-06-14T10:53:01.000 - 1.0 - - - 2017-06-14T10:53:02.000 - 2.0 - - - 2017-06-14T10:53:03.000 - 3.0 - - - 2017-06-14T10:53:04.000 - 4.0 - - - 2017-06-14T10:53:05.000 - 5.0 - - - 2017-06-14T10:53:06.000 - 6.0 - - - 2017-06-14T10:53:07.000 - 7.0 - - - 2017-06-14T10:53:08.000 - 8.0 - - - 2017-06-14T10:53:09.000 - 9.0 - - - 2017-06-14T10:53:10.000 - 10.0 - - - 2017-06-14T10:53:11.000 - 11.0 - - - 2017-06-14T10:53:12.000 - 12.0 - - - 2017-06-14T10:53:13.000 - 13.0 - - - 2017-06-14T10:53:14.000 - 14.0 - - - 2017-06-14T10:53:15.000 - 15.0 - - - 2017-06-14T10:53:16.000 - 16.0 - - - 2017-06-14T10:53:17.000 - 17.0 - - - 2017-06-14T10:53:18.000 - 18.0 - - - 2017-06-14T10:53:19.000 - 19.0 - - - 2017-06-14T10:53:20.000 - 20.0 - - - 2017-06-14T10:53:21.000 - 21.0 - - - 2017-06-14T10:53:22.000 - 22.0 - - - VLBI/Delta-DOR Related Keywords - - 2017-06-14T10:53:23.000 - 23.0 - - - 2017-06-14T10:53:24.000 - 24.0 - - - Angle Related Keywords - - 2017-06-14T10:53:25.000 - 25.0 - - - 2017-06-14T10:53:26.000 - 26.0 - - - Time Related Keywords - - 2017-06-14T10:53:27.000 - 27.0 - - - 2017-06-14T10:53:28.000 - 28.0 - - - Media Related Keywords - - 2017-06-14T10:53:29.000 - 29.0 - - - 2017-06-14T10:53:30.000 - 30.0 - - - 2017-06-14T10:53:31.000 - 31.0 - - - Meteorological Related Keywords - - 2017-06-14T10:53:32.000 - 32.0 - - - 2017-06-14T10:53:33.000 - 33.0 - - - 2017-06-14T10:53:34.000 - 34.0 - - - - + xsi:noNamespaceSchemaLocation="fdsxml-1.0-master.xsd" + id="CCSDS_TDM_VERS" version="1.0"> +
+ TDM example created by CSSI + Testing all TDM known meta-data and data keywords + 2017-06-14T10:53:00.000 + CSSI +
+ + + + All known meta-data keywords displayed + RADEC + 1.0 + 2.0 + 3.0 + 4.0 + 5.0 + 6.0 + YES + RAW + 3.20210352E10 + 1.0 + MIDDLE + SEQUENTIAL + DSS-25 + YYYY-NNNA + P3 + P4 + P5 + 2,1 + 4,5 + 3,2 + COHERENT + 32768.0 + RU + L + 7.7E-5 + 7.7E-5 + 7.7E-5 + 7.7E-5 + 7.7E-5 + EME2000 + 2017-06-14T10:53:00.000 + 2017-06-15T10:53:00.000 + UTC + TRANSMIT + S + 7.7E-5 + 7.7E-5 + 7.7E-5 + 7.7E-5 + 7.7E-5 + 221 + 240 + + + Signal related Keywords + + 2017-06-14T10:53:01.000 + 1.0 + + + 2017-06-14T10:53:02.000 + 2.0 + + + 2017-06-14T10:53:03.000 + 3.0 + + + 2017-06-14T10:53:04.000 + 4.0 + + + 2017-06-14T10:53:05.000 + 5.0 + + + 2017-06-14T10:53:06.000 + 6.0 + + + 2017-06-14T10:53:07.000 + 7.0 + + + 2017-06-14T10:53:08.000 + 8.0 + + + 2017-06-14T10:53:09.000 + 9.0 + + + 2017-06-14T10:53:10.000 + 10.0 + + + 2017-06-14T10:53:11.000 + 11.0 + + + 2017-06-14T10:53:12.000 + 12.0 + + + 2017-06-14T10:53:13.000 + 13.0 + + + 2017-06-14T10:53:14.000 + 14.0 + + + 2017-06-14T10:53:15.000 + 15.0 + + + 2017-06-14T10:53:16.000 + 16.0 + + + 2017-06-14T10:53:17.000 + 17.0 + + + 2017-06-14T10:53:18.000 + 18.0 + + + 2017-06-14T10:53:19.000 + 19.0 + + + 2017-06-14T10:53:20.000 + 20.0 + + + 2017-06-14T10:53:21.000 + 21.0 + + + 2017-06-14T10:53:22.000 + 22.0 + + + VLBI/Delta-DOR Related Keywords + + 2017-06-14T10:53:23.000 + 23.0 + + + 2017-06-14T10:53:24.000 + 24.0 + + + Angle Related Keywords + + 2017-06-14T10:53:25.000 + 25.0 + + + 2017-06-14T10:53:26.000 + 26.0 + + + Time Related Keywords + + 2017-06-14T10:53:27.000 + 27.0 + + + 2017-06-14T10:53:28.000 + 28.0 + + + Media Related Keywords + + 2017-06-14T10:53:29.000 + 29.0 + + + 2017-06-14T10:53:30.000 + 30.0 + + + 2017-06-14T10:53:31.000 + 31.0 + + + Meteorological Related Keywords + + 2017-06-14T10:53:32.000 + 32.0 + + + 2017-06-14T10:53:33.000 + 33.0 + + + 2017-06-14T10:53:34.000 + 34.0 + + + +
diff --git a/src/test/resources/rapid-data-xml/finals.daily.xml b/src/test/resources/rapid-data-xml/finals.daily.xml index 0bf877d60..e8a46b93d 100644 --- a/src/test/resources/rapid-data-xml/finals.daily.xml +++ b/src/test/resources/rapid-data-xml/finals.daily.xml @@ -1,421 +1,422 @@ - - + + - -finals.daily (IAU1980) -2010-05-12 -IAU1980 ---- - - - - -Year -Month -Day -Time -MJD - - - -X -sigma_X -Y -sigma_Y -UT1-UTC -sigma_UT1-UTC -LOD -sigma_LOD -dPsi -sigma_dPsi -dEpsilon -sigma_dEpsilon - - -X -Y -UT1-UTC -dPsi -dEpsilon - - - - -arcsec -arcsec -arcsec -arcsec -sec -sec -msec -msec -marcsec -marcsec -marcsec -marcsec - - -arcsec -arcsec -sec -marcsec -marcsec - - - - - - - - -0.060729 -0.000093 -0.483215 -0.000042 - - --0.0568654 -0.0000065 --0.0551 -0.0045 - - --67.373 -0.204 --9.678 -0.102 - - -0.060783 -0.483197 - - --0.0568663 - - --67.364 --9.740 - - - - - - - -0.064760 -0.000092 -0.483590 -0.000042 - - --0.0568341 -0.0000063 -0.0067 -0.0051 - - --67.654 -0.204 --9.803 -0.102 - - - - - - - - - - - - - - - - - - -0.067871 -0.000086 -0.483932 -0.000042 - - --0.0568738 -0.0000078 -0.0534 -0.0045 - - --67.868 -0.216 --9.815 -0.157 - - - - - - - - - - - - - - - - - - -0.137281 -0.000015 -0.468001 -0.000018 - - --0.0496964 -0.0000103 --0.1170 -0.0076 - - --72.554 -.600 --9.498 -.600 - - - - - - - - - - - - - - - - - - -0.139469 -0.000014 -0.466637 -0.000018 - - --0.0495399 -0.0000111 --0.1972 -0.0081 - - --72.579 -.600 --9.572 -.600 - - - - - - - - - - - - - - - - - - -0.156152 -0.000092 -0.457878 -0.000091 - - --0.0470563 -0.0000552 - - - - --73.248 -.600 --9.937 -.600 - - - - - - - - - - - - - - - - - - -0.158128 -0.000619 -0.456935 -0.000403 - - --0.0473546 -0.0001080 - - - - --73.156 -.600 --9.831 -.600 - - - - - - - - - - - - - - - - - - -0.199330 -0.008044 -0.315336 -0.010278 - - --0.1063895 -0.0084511 - - - - - - - - - - - - - - - - - - - - - - - - - - -0.198449 -0.008095 -0.313754 -0.010360 - - --0.1072125 -0.0085261 - - - - - - - - - - - - - - - - - - - - - - - + + finals.daily (IAU1980) + 2010-05-12 + IAU1980 + --- + + + + + Year + Month + Day + Time + MJD + + + + X + sigma_X + Y + sigma_Y + UT1-UTC + sigma_UT1-UTC + LOD + sigma_LOD + dPsi + sigma_dPsi + dEpsilon + sigma_dEpsilon + + + X + Y + UT1-UTC + dPsi + dEpsilon + + + + + arcsec + arcsec + arcsec + arcsec + sec + sec + msec + msec + marcsec + marcsec + marcsec + marcsec + + + arcsec + arcsec + sec + marcsec + marcsec + + + + + + + + + 0.060729 + 0.000093 + 0.483215 + 0.000042 + + + -0.0568654 + 0.0000065 + -0.0551 + 0.0045 + + + -67.373 + 0.204 + -9.678 + 0.102 + + + 0.060783 + 0.483197 + + + -0.0568663 + + + -67.364 + -9.740 + + + + + + + + 0.064760 + 0.000092 + 0.483590 + 0.000042 + + + -0.0568341 + 0.0000063 + 0.0067 + 0.0051 + + + -67.654 + 0.204 + -9.803 + 0.102 + + + + + + + + + + + + + + + + + + + 0.067871 + 0.000086 + 0.483932 + 0.000042 + + + -0.0568738 + 0.0000078 + 0.0534 + 0.0045 + + + -67.868 + 0.216 + -9.815 + 0.157 + + + + + + + + + + + + + + + + + + + 0.137281 + 0.000015 + 0.468001 + 0.000018 + + + -0.0496964 + 0.0000103 + -0.1170 + 0.0076 + + + -72.554 + .600 + -9.498 + .600 + + + + + + + + + + + + + + + + + + + 0.139469 + 0.000014 + 0.466637 + 0.000018 + + + -0.0495399 + 0.0000111 + -0.1972 + 0.0081 + + + -72.579 + .600 + -9.572 + .600 + + + + + + + + + + + + + + + + + + + 0.156152 + 0.000092 + 0.457878 + 0.000091 + + + -0.0470563 + 0.0000552 + + + + + -73.248 + .600 + -9.937 + .600 + + + + + + + + + + + + + + + + + + + 0.158128 + 0.000619 + 0.456935 + 0.000403 + + + -0.0473546 + 0.0001080 + + + + + -73.156 + .600 + -9.831 + .600 + + + + + + + + + + + + + + + + + + + 0.199330 + 0.008044 + 0.315336 + 0.010278 + + + -0.1063895 + 0.0084511 + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.198449 + 0.008095 + 0.313754 + 0.010360 + + + -0.1072125 + 0.0085261 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/rapid-data-xml/finals2000A.daily.xml b/src/test/resources/rapid-data-xml/finals2000A.daily.xml index 56fc83f52..337672764 100644 --- a/src/test/resources/rapid-data-xml/finals2000A.daily.xml +++ b/src/test/resources/rapid-data-xml/finals2000A.daily.xml @@ -1,226 +1,227 @@ - - + + - -finals.daily (IAU2000) -2010-05-11 -IAU2000 ---- - - - - -Year -Month -Day -Time -MJD - - - -X -sigma_X -Y -sigma_Y -UT1-UTC -sigma_UT1-UTC -LOD -sigma_LOD -dX -sigma_dX -dY -sigma_dY - - -X -Y -UT1-UTC -dX -dY - - - - -arcsec -arcsec -arcsec -arcsec -sec -sec -msec -msec -marcsec -marcsec -marcsec -marcsec - - -arcsec -arcsec -sec -marcsec -marcsec - - - - - - - - --0.056846 -0.000039 -0.413239 -0.000052 - - --0.0311475 -0.0000051 -1.2258 -0.0034 - - --0.208 -0.045 --0.056 -0.103 - - --0.056632 -0.413157 - - --0.0311466 - - --0.221 --0.244 - - - - - - - -0.064761 -0.000092 -0.483591 -0.000042 - - --0.0568341 -0.0000063 -0.0068 -0.0051 - - --0.105 -0.086 -0.024 -0.101 - - - - - - - - - - - - - - - - - - -0.121722 -0.000023 -0.476274 -0.000063 - - --0.0518661 -0.0000124 --0.7308 -0.0085 - - --0.143 -0.239 -0.020 -0.600 - - - - - - - - - - - - - - - - - - -0.200104 -0.007750 -0.319265 -0.010253 - - --0.1034398 -0.0083759 - - - - - - - - - - - - - - - - - - - - - - - + + finals.daily (IAU2000) + 2010-05-11 + IAU2000 + --- + + + + + Year + Month + Day + Time + MJD + + + + X + sigma_X + Y + sigma_Y + UT1-UTC + sigma_UT1-UTC + LOD + sigma_LOD + dX + sigma_dX + dY + sigma_dY + + + X + Y + UT1-UTC + dX + dY + + + + + arcsec + arcsec + arcsec + arcsec + sec + sec + msec + msec + marcsec + marcsec + marcsec + marcsec + + + arcsec + arcsec + sec + marcsec + marcsec + + + + + + + + + -0.056846 + 0.000039 + 0.413239 + 0.000052 + + + -0.0311475 + 0.0000051 + 1.2258 + 0.0034 + + + -0.208 + 0.045 + -0.056 + 0.103 + + + -0.056632 + 0.413157 + + + -0.0311466 + + + -0.221 + -0.244 + + + + + + + + 0.064761 + 0.000092 + 0.483591 + 0.000042 + + + -0.0568341 + 0.0000063 + 0.0068 + 0.0051 + + + -0.105 + 0.086 + 0.024 + 0.101 + + + + + + + + + + + + + + + + + + + 0.121722 + 0.000023 + 0.476274 + 0.000063 + + + -0.0518661 + 0.0000124 + -0.7308 + 0.0085 + + + -0.143 + 0.239 + 0.020 + 0.600 + + + + + + + + + + + + + + + + + + + 0.200104 + 0.007750 + 0.319265 + 0.010253 + + + -0.1034398 + 0.0083759 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/regular-data/Earth-orientation-parameters/yearly/finals2000A.2002.xml b/src/test/resources/regular-data/Earth-orientation-parameters/yearly/finals2000A.2002.xml index df70b7ab2..1261ded61 100644 --- a/src/test/resources/regular-data/Earth-orientation-parameters/yearly/finals2000A.2002.xml +++ b/src/test/resources/regular-data/Earth-orientation-parameters/yearly/finals2000A.2002.xml @@ -1,12780 +1,12781 @@ - - - - 2002-01-01 - 52275 - - - -0.177007 - 0.000041 - 0.294102 - 0.000069 - - - -0.1158059 - 0.0000175 - 0.8108 - 0.0060 - - - 0.185 - 0.294 - -0.118 - 0.340 - - - - - -0.177000 - 0.293620 - - -0.1158230 - - 0.591 - 0.263 - - - - - 2002-01-02 - 52276 - - - -0.177486 - 0.000033 - 0.297793 - 0.000080 - - - -0.1166715 - 0.0000098 - 0.9385 - 0.0103 - - - 0.181 - 0.105 - -0.118 - 0.340 - - - - - -0.177470 - 0.297200 - - -0.1166920 - - 0.445 - -0.050 - - - - - 2002-01-03 - 52277 - - - -0.178327 - 0.000037 - 0.300991 - 0.000073 - - - -0.1177007 - 0.0000108 - 1.1198 - 0.0070 - - - 0.172 - 0.105 - -0.115 - 0.340 - - - - - -0.178340 - 0.300940 - - -0.1177150 - - 0.307 - -0.139 - - - - - 2002-01-04 - 52278 - - - -0.179092 - 0.000042 - 0.303766 - 0.000061 - - - -0.1189008 - 0.0000099 - 1.2704 - 0.0072 - - - 0.163 - 0.105 - -0.095 - 0.340 - - - - - -0.179090 - 0.303680 - - -0.1189030 - - 0.205 - -0.174 - - - - - 2002-01-05 - 52279 - - - -0.179523 - 0.000046 - 0.306642 - 0.000060 - - - -0.1202135 - 0.0000094 - 1.3372 - 0.0062 - - - 0.140 - 0.103 - -0.071 - 0.119 - - - - - -0.179550 - 0.306440 - - -0.1202550 - - 0.137 - -0.007 - - - - - 2002-01-06 - 52280 - - - -0.180011 - 0.000057 - 0.309692 - 0.000089 - - - -0.1215495 - 0.0000074 - 1.3270 - 0.0061 - - - 0.125 - 0.083 - -0.067 - 0.122 - - - - - -0.179970 - 0.309560 - - -0.1216410 - - 0.057 - 0.149 - - - - - 2002-01-07 - 52281 - - - -0.180666 - 0.000057 - 0.312888 - 0.000088 - - - -0.1228387 - 0.0000077 - 1.2304 - 0.0057 - - - 0.108 - 0.083 - -0.081 - 0.122 - - - - - -0.180630 - 0.312730 - - -0.1229070 - - 0.038 - 0.151 - - - - - 2002-01-08 - 52282 - - - -0.181810 - 0.000065 - 0.315494 - 0.000071 - - - -0.1239632 - 0.0000088 - 0.9923 - 0.0057 - - - 0.101 - 0.056 - -0.096 - 0.124 - - - - - -0.181690 - 0.315560 - - -0.1239680 - - 0.043 - 0.224 - - - - - 2002-01-09 - 52283 - - - -0.182652 - 0.000094 - 0.318350 - 0.000076 - - - -0.1248089 - 0.0000085 - 0.7108 - 0.0061 - - - 0.115 - 0.090 - -0.115 - 0.101 - - - - - -0.182690 - 0.318280 - - -0.1248070 - - 0.159 - 0.190 - - - - - 2002-01-10 - 52284 - - - -0.183025 - 0.000088 - 0.321333 - 0.000076 - - - -0.1254034 - 0.0000084 - 0.4850 - 0.0062 - - - 0.121 - 0.090 - -0.123 - 0.101 - - - - - -0.183060 - 0.321190 - - -0.1254210 - - 0.242 - 0.058 - - - - - 2002-01-11 - 52285 - - - -0.183115 - 0.000081 - 0.324383 - 0.000082 - - - -0.1257910 - 0.0000089 - 0.2955 - 0.0071 - - - 0.119 - 0.090 - -0.123 - 0.101 - - - - - -0.183040 - 0.324220 - - -0.1257940 - - 0.293 - -0.036 - - - - - 2002-01-12 - 52286 - - - -0.182597 - 0.000079 - 0.327551 - 0.000036 - - - -0.1260011 - 0.0000114 - 0.1261 - 0.0060 - - - 0.134 - 0.092 - -0.113 - 0.340 - - - - - -0.182770 - 0.327380 - - -0.1260400 - - 0.236 - -0.152 - - - - - 2002-01-13 - 52287 - - - -0.182281 - 0.000085 - 0.330647 - 0.000067 - - - -0.1260612 - 0.0000081 - 0.0106 - 0.0071 - - - 0.141 - 0.084 - -0.114 - 0.129 - - - - - -0.182260 - 0.330390 - - -0.1261170 - - 0.199 - -0.204 - - - - - 2002-01-14 - 52288 - - - -0.181726 - 0.000084 - 0.333749 - 0.000075 - - - -0.1260513 - 0.0000084 - -0.0178 - 0.0052 - - - 0.155 - 0.084 - -0.137 - 0.129 - - - - - -0.181660 - 0.333550 - - -0.1260720 - - 0.190 - -0.178 - - - - - 2002-01-15 - 52289 - - - -0.181296 - 0.000047 - 0.337049 - 0.000079 - - - -0.1260552 - 0.0000066 - 0.0426 - 0.0047 - - - 0.170 - 0.075 - -0.159 - 0.174 - - - - - -0.181260 - 0.336820 - - -0.1260550 - - 0.190 - -0.248 - - - - - 2002-01-16 - 52290 - - - -0.180657 - 0.000048 - 0.339997 - 0.000072 - - - -0.1261449 - 0.0000042 - 0.1280 - 0.0039 - - - 0.180 - 0.059 - -0.151 - 0.133 - - - - - -0.180660 - 0.339780 - - -0.1261430 - - 0.211 - -0.289 - - - - - 2002-01-17 - 52291 - - - -0.179790 - 0.000050 - 0.343126 - 0.000074 - - - -0.1263089 - 0.0000041 - 0.2064 - 0.0029 - - - 0.178 - 0.059 - -0.118 - 0.133 - - - - - -0.179880 - 0.342870 - - -0.1263090 - - 0.207 - -0.299 - - - - - 2002-01-18 - 52292 - - - -0.179226 - 0.000049 - 0.346261 - 0.000082 - - - -0.1265809 - 0.0000040 - 0.3543 - 0.0029 - - - 0.162 - 0.059 - -0.097 - 0.133 - - - - - -0.179240 - 0.346120 - - -0.1265880 - - 0.203 - -0.121 - - - - - 2002-01-19 - 52293 - - - -0.178747 - 0.000032 - 0.349357 - 0.000059 - - - -0.1270138 - 0.0000040 - 0.4911 - 0.0027 - - - 0.141 - 0.294 - -0.133 - 0.340 - - - - - -0.178740 - 0.349230 - - -0.1270260 - - 0.236 - 0.087 - - - - - 2002-01-20 - 52294 - - - -0.178411 - 0.000029 - 0.352387 - 0.000054 - - - -0.1275373 - 0.0000037 - 0.5505 - 0.0027 - - - 0.128 - 0.294 - -0.138 - 0.340 - - - - - -0.178410 - 0.352280 - - -0.1275570 - - 0.208 - 0.227 - - - - - 2002-01-21 - 52295 - - - -0.178166 - 0.000098 - 0.355435 - 0.000052 - - - -0.1281068 - 0.0000036 - 0.5861 - 0.0024 - - - 0.110 - 0.089 - -0.140 - 0.340 - - - - - -0.178170 - 0.355300 - - -0.1281260 - - 0.218 - 0.271 - - - - - 2002-01-22 - 52296 - - - -0.177708 - 0.000100 - 0.358626 - 0.000045 - - - -0.1287036 - 0.0000032 - 0.6041 - 0.0024 - - - 0.087 - 0.120 - -0.153 - 0.340 - - - - - -0.177750 - 0.358510 - - -0.1287150 - - 0.229 - 0.167 - - - - - 2002-01-23 - 52297 - - - -0.177111 - 0.000106 - 0.362049 - 0.000045 - - - -0.1293036 - 0.0000032 - 0.5879 - 0.0023 - - - 0.073 - 0.097 - -0.176 - 0.340 - - - - - -0.177120 - 0.361930 - - -0.1293080 - - 0.324 - 0.051 - - - - - 2002-01-24 - 52298 - - - -0.176570 - 0.000107 - 0.365469 - 0.000045 - - - -0.1298574 - 0.0000032 - 0.5058 - 0.0022 - - - 0.075 - 0.097 - -0.188 - 0.340 - - - - - -0.176510 - 0.365290 - - -0.1298590 - - 0.274 - -0.073 - - - - - 2002-01-25 - 52299 - - - -0.175459 - 0.000109 - 0.368879 - 0.000047 - - - -0.1303011 - 0.0000031 - 0.3813 - 0.0023 - - - 0.087 - 0.097 - -0.193 - 0.340 - - - - - -0.175730 - 0.368690 - - -0.1303060 - - 0.216 - -0.152 - - - - - 2002-01-26 - 52300 - - - -0.174989 - 0.000119 - 0.372296 - 0.000048 - - - -0.1306355 - 0.0000032 - 0.3033 - 0.0030 - - - 0.116 - 0.089 - -0.188 - 0.340 - - - - - -0.175000 - 0.372170 - - -0.1306280 - - 0.230 - -0.236 - - - - - 2002-01-27 - 52301 - - - -0.174307 - 0.000076 - 0.375592 - 0.000057 - - - -0.1309419 - 0.0000051 - 0.3277 - 0.0032 - - - 0.137 - 0.128 - -0.190 - 0.340 - - - - - -0.174370 - 0.375470 - - -0.1309230 - - 0.324 - -0.155 - - - - - 2002-01-28 - 52302 - - - -0.173589 - 0.000075 - 0.378911 - 0.000059 - - - -0.1313291 - 0.0000055 - 0.4665 - 0.0044 - - - 0.153 - 0.128 - -0.166 - 0.340 - - - - - -0.173550 - 0.378710 - - -0.1313120 - - 0.345 - 0.091 - - - - - 2002-01-29 - 52303 - - - -0.172598 - 0.000062 - 0.382237 - 0.000058 - - - -0.1319044 - 0.0000071 - 0.6939 - 0.0046 - - - 0.149 - 0.167 - -0.140 - 0.340 - - - - - -0.172820 - 0.382030 - - -0.1319070 - - 0.123 - -0.037 - - - - - 2002-01-30 - 52304 - - - -0.172380 - 0.000111 - 0.385247 - 0.000051 - - - -0.1327400 - 0.0000073 - 0.9908 - 0.0051 - - - 0.130 - 0.160 - -0.142 - 0.159 - - - - - -0.172060 - 0.385140 - - -0.1327840 - - -0.008 - -0.142 - - - - - 2002-01-31 - 52305 - - - -0.170710 - 0.000113 - 0.388491 - 0.000051 - - - -0.1338698 - 0.0000074 - 1.2392 - 0.0052 - - - 0.112 - 0.160 - -0.155 - 0.159 - - - - - -0.170750 - 0.388250 - - -0.1339120 - - -0.049 - -0.270 - - - - - 2002-02-01 - 52306 - - - -0.168866 - 0.000103 - 0.391727 - 0.000048 - - - -0.1351880 - 0.0000073 - 1.3964 - 0.0047 - - - 0.100 - 0.160 - -0.150 - 0.159 - - - - - -0.168940 - 0.391530 - - -0.1352080 - - 0.138 - -0.131 - - - - - 2002-02-02 - 52307 - - - -0.167468 - 0.000110 - 0.394920 - 0.000066 - - - -0.1366463 - 0.0000057 - 1.5046 - 0.0044 - - - 0.089 - 0.151 - -0.144 - 0.212 - - - - - -0.167400 - 0.394750 - - -0.1365590 - - 0.306 - -0.006 - - - - - 2002-02-03 - 52308 - - - -0.166416 - 0.000068 - 0.398078 - 0.000101 - - - -0.1381461 - 0.0000049 - 1.4595 - 0.0038 - - - 0.080 - 0.134 - -0.145 - 0.224 - - - - - -0.166390 - 0.397840 - - -0.1380160 - - 0.364 - 0.151 - - - - - 2002-02-04 - 52309 - - - -0.165559 - 0.000064 - 0.401074 - 0.000101 - - - -0.1395235 - 0.0000049 - 1.2891 - 0.0034 - - - 0.068 - 0.134 - -0.160 - 0.224 - - - - - -0.165460 - 0.400780 - - -0.1394740 - - 0.336 - 0.165 - - - - - 2002-02-05 - 52310 - - - -0.164209 - 0.000045 - 0.403330 - 0.000104 - - - -0.1407191 - 0.0000048 - 1.1032 - 0.0034 - - - 0.055 - 0.115 - -0.170 - 0.236 - - - - - -0.164370 - 0.403580 - - -0.1407190 - - -0.078 - 0.181 - - - - - 2002-02-06 - 52311 - - - -0.163267 - 0.000056 - 0.406627 - 0.000100 - - - -0.1417113 - 0.0000046 - 0.8617 - 0.0033 - - - 0.050 - 0.105 - -0.180 - 0.168 - - - - - -0.163320 - 0.406310 - - -0.1417360 - - -0.052 - 0.124 - - - - - 2002-02-07 - 52312 - - - -0.162275 - 0.000055 - 0.409545 - 0.000101 - - - -0.1424498 - 0.0000045 - 0.6423 - 0.0031 - - - 0.052 - 0.105 - -0.193 - 0.168 - - - - - -0.162230 - 0.409320 - - -0.1424540 - - 0.076 - 0.065 - - - - - 2002-02-08 - 52313 - - - -0.161013 - 0.000053 - 0.412672 - 0.000100 - - - -0.1430178 - 0.0000043 - 0.4886 - 0.0044 - - - 0.059 - 0.105 - -0.201 - 0.168 - - - - - -0.161130 - 0.412430 - - -0.1430230 - - 0.255 - -0.092 - - - - - 2002-02-09 - 52314 - - - -0.159833 - 0.000049 - 0.415575 - 0.000050 - - - -0.1434420 - 0.0000075 - 0.3800 - 0.0047 - - - 0.107 - 0.053 - -0.190 - 0.340 - - - - - -0.159750 - 0.415430 - - -0.1434440 - - 0.305 - -0.089 - - - - - 2002-02-10 - 52315 - - - -0.157934 - 0.000056 - 0.418962 - 0.000106 - - - -0.1438171 - 0.0000084 - 0.3895 - 0.0054 - - - 0.123 - 0.181 - -0.190 - 0.165 - - - - - -0.157950 - 0.418820 - - -0.1438150 - - 0.321 - -0.017 - - - - - 2002-02-11 - 52316 - - - -0.156061 - 0.000058 - 0.422593 - 0.000119 - - - -0.1442513 - 0.0000077 - 0.4900 - 0.0058 - - - 0.143 - 0.181 - -0.203 - 0.165 - - - - - -0.156050 - 0.422450 - - -0.1442500 - - 0.264 - 0.025 - - - - - 2002-02-12 - 52317 - - - -0.154322 - 0.000050 - 0.425814 - 0.000119 - - - -0.1447951 - 0.0000079 - 0.5844 - 0.0052 - - - 0.159 - 0.250 - -0.218 - 0.233 - - - - - -0.154400 - 0.425740 - - -0.1447930 - - 0.245 - 0.023 - - - - - 2002-02-13 - 52318 - - - -0.153339 - 0.000073 - 0.428887 - 0.000121 - - - -0.1454185 - 0.0000071 - 0.6738 - 0.0052 - - - 0.167 - 0.179 - -0.214 - 0.174 - - - - - -0.153250 - 0.428820 - - -0.1454300 - - 0.242 - -0.103 - - - - - 2002-02-14 - 52319 - - - -0.152462 - 0.000068 - 0.431894 - 0.000120 - - - -0.1461499 - 0.0000069 - 0.7846 - 0.0045 - - - 0.161 - 0.179 - -0.188 - 0.174 - - - - - -0.152390 - 0.431700 - - -0.1461620 - - 0.252 - -0.105 - - - - - 2002-02-15 - 52320 - - - -0.151422 - 0.000074 - 0.434614 - 0.000119 - - - -0.1469825 - 0.0000055 - 0.8798 - 0.0038 - - - 0.143 - 0.179 - -0.165 - 0.174 - - - - - -0.151390 - 0.434420 - - -0.1469910 - - 0.237 - -0.075 - - - - - 2002-02-16 - 52321 - - - -0.150079 - 0.000069 - 0.437259 - 0.000077 - - - -0.1479131 - 0.0000033 - 0.9858 - 0.0033 - - - 0.118 - 0.049 - -0.179 - 0.340 - - - - - -0.150100 - 0.437100 - - -0.1479090 - - 0.241 - 0.036 - - - - - 2002-02-17 - 52322 - - - -0.148475 - 0.000065 - 0.439911 - 0.000045 - - - -0.1489442 - 0.0000035 - 1.0621 - 0.0032 - - - 0.108 - 0.049 - -0.179 - 0.340 - - - - - -0.148490 - 0.439730 - - -0.1489370 - - 0.226 - 0.019 - - - - - 2002-02-18 - 52323 - - - -0.146808 - 0.000112 - 0.442622 - 0.000075 - - - -0.1500110 - 0.0000054 - 1.0593 - 0.0035 - - - 0.097 - 0.294 - -0.188 - 0.340 - - - - - -0.146780 - 0.442390 - - -0.1500170 - - 0.215 - 0.062 - - - - - 2002-02-19 - 52324 - - - -0.145238 - 0.000100 - 0.445437 - 0.000077 - - - -0.1510435 - 0.0000060 - 0.9984 - 0.0040 - - - 0.081 - 0.294 - -0.213 - 0.340 - - - - - -0.145260 - 0.445150 - - -0.1510560 - - 0.290 - 0.145 - - - - - 2002-02-20 - 52325 - - - -0.143898 - 0.000104 - 0.447985 - 0.000077 - - - -0.1520022 - 0.0000060 - 0.9206 - 0.0043 - - - 0.075 - 0.090 - -0.238 - 0.340 - - - - - -0.143730 - 0.447920 - - -0.1520210 - - 0.366 - 0.184 - - - - - 2002-02-21 - 52326 - - - -0.142007 - 0.000105 - 0.451025 - 0.000075 - - - -0.1528781 - 0.0000061 - 0.8229 - 0.0043 - - - 0.084 - 0.090 - -0.237 - 0.340 - - - - - -0.142030 - 0.450810 - - -0.1528980 - - 0.398 - 0.064 - - - - - 2002-02-22 - 52327 - - - -0.140226 - 0.000105 - 0.454084 - 0.000075 - - - -0.1536489 - 0.0000061 - 0.7279 - 0.0042 - - - 0.094 - 0.090 - -0.229 - 0.340 - - - - - -0.140240 - 0.453930 - - -0.1536530 - - 0.325 - -0.285 - - - - - 2002-02-23 - 52328 - - - -0.138460 - 0.000104 - 0.457395 - 0.000070 - - - -0.1543436 - 0.0000058 - 0.6621 - 0.0039 - - - 0.132 - 0.074 - -0.277 - 0.340 - - - - - -0.138440 - 0.457220 - - -0.1543870 - - 0.314 - -0.598 - - - - - 2002-02-24 - 52329 - - - -0.136555 - 0.000139 - 0.460777 - 0.000023 - - - -0.1550022 - 0.0000047 - 0.6835 - 0.0038 - - - 0.155 - 0.117 - -0.291 - 0.340 - - - - - -0.136510 - 0.460600 - - -0.1551080 - - 0.377 - -0.621 - - - - - 2002-02-25 - 52330 - - - -0.134085 - 0.000156 - 0.463944 - 0.000021 - - - -0.1557567 - 0.0000049 - 0.8433 - 0.0031 - - - 0.179 - 0.117 - -0.251 - 0.340 - - - - - -0.134050 - 0.463790 - - -0.1558460 - - 0.403 - -0.402 - - - - - 2002-02-26 - 52331 - - - -0.131066 - 0.000147 - 0.467081 - 0.000032 - - - -0.1567176 - 0.0000040 - 1.0894 - 0.0031 - - - 0.171 - 0.133 - -0.183 - 0.340 - - - - - -0.131080 - 0.466900 - - -0.1567280 - - 0.213 - -0.143 - - - - - 2002-02-27 - 52332 - - - -0.128402 - 0.000142 - 0.470378 - 0.000051 - - - -0.1579450 - 0.0000038 - 1.3639 - 0.0028 - - - 0.136 - 0.096 - -0.166 - 0.340 - - - - - -0.128360 - 0.470160 - - -0.1579220 - - -0.045 - -0.238 - - - - - 2002-02-28 - 52333 - - - -0.125967 - 0.000133 - 0.473636 - 0.000051 - - - -0.1594162 - 0.0000038 - 1.5508 - 0.0027 - - - 0.112 - 0.096 - -0.203 - 0.340 - - - - - -0.125970 - 0.473440 - - -0.1594490 - - -0.103 - -0.305 - - - - - 2002-03-01 - 52334 - - - -0.123464 - 0.000133 - 0.476602 - 0.000052 - - - -0.1610153 - 0.0000039 - 1.6439 - 0.0026 - - - 0.112 - 0.096 - -0.231 - 0.340 - - - - - -0.123360 - 0.476540 - - -0.1610230 - - 0.158 - -0.160 - - - - - 2002-03-02 - 52335 - - - -0.120764 - 0.000034 - 0.479932 - 0.000055 - - - -0.1626785 - 0.0000035 - 1.6606 - 0.0024 - - - 0.082 - 0.294 - -0.213 - 0.340 - - - - - -0.120890 - 0.479830 - - -0.1626750 - - 0.359 - 0.113 - - - - - 2002-03-03 - 52336 - - - -0.118528 - 0.000073 - 0.483086 - 0.000054 - - - -0.1642833 - 0.0000028 - 1.5177 - 0.0022 - - - 0.069 - 0.067 - -0.209 - 0.340 - - - - - -0.118380 - 0.482830 - - -0.1642830 - - 0.557 - 0.450 - - - - - 2002-03-04 - 52337 - - - -0.116653 - 0.000087 - 0.486083 - 0.000053 - - - -0.1656736 - 0.0000025 - 1.2538 - 0.0022 - - - 0.054 - 0.060 - -0.216 - 0.340 - - - - - -0.116640 - 0.485860 - - -0.1656820 - - 0.547 - 0.465 - - - - - 2002-03-05 - 52338 - - - -0.114393 - 0.000076 - 0.489077 - 0.000075 - - - -0.1667945 - 0.0000034 - 1.0006 - 0.0018 - - - 0.044 - 0.073 - -0.220 - 0.340 - - - - - -0.114530 - 0.488880 - - -0.1668110 - - 0.426 - 0.445 - - - - - 2002-03-06 - 52339 - - - -0.111592 - 0.000075 - 0.491856 - 0.000054 - - - -0.1676946 - 0.0000027 - 0.8068 - 0.0021 - - - 0.037 - 0.086 - -0.225 - 0.340 - - - - - -0.111870 - 0.491710 - - -0.1677050 - - 0.340 - 0.334 - - - - - 2002-03-07 - 52340 - - - -0.108712 - 0.000076 - 0.494571 - 0.000053 - - - -0.1684226 - 0.0000025 - 0.6566 - 0.0018 - - - 0.036 - 0.086 - -0.242 - 0.340 - - - - - -0.108770 - 0.494280 - - -0.1684280 - - 0.293 - 0.217 - - - - - 2002-03-08 - 52341 - - - -0.105530 - 0.000074 - 0.497225 - 0.000053 - - - -0.1690293 - 0.0000023 - 0.5710 - 0.0018 - - - 0.045 - 0.086 - -0.265 - 0.340 - - - - - -0.105510 - 0.497000 - - -0.1690330 - - 0.331 - -0.109 - - - - - 2002-03-09 - 52342 - - - -0.102288 - 0.000069 - 0.499884 - 0.000054 - - - -0.1695805 - 0.0000025 - 0.5331 - 0.0019 - - - 0.090 - 0.068 - -0.268 - 0.340 - - - - - -0.102260 - 0.499710 - - -0.1696080 - - 0.374 - -0.306 - - - - - 2002-03-10 - 52343 - - - -0.099231 - 0.000088 - 0.502609 - 0.000058 - - - -0.1701169 - 0.0000031 - 0.5596 - 0.0020 - - - 0.114 - 0.064 - -0.265 - 0.340 - - - - - -0.099160 - 0.502440 - - -0.1701600 - - 0.354 - -0.387 - - - - - 2002-03-11 - 52344 - - - -0.096898 - 0.000097 - 0.505316 - 0.000050 - - - -0.1707287 - 0.0000032 - 0.6733 - 0.0023 - - - 0.139 - 0.064 - -0.253 - 0.340 - - - - - -0.096810 - 0.505150 - - -0.1707500 - - 0.268 - -0.276 - - - - - 2002-03-12 - 52345 - - - -0.095001 - 0.000103 - 0.507719 - 0.000040 - - - -0.1714764 - 0.0000035 - 0.8257 - 0.0023 - - - 0.152 - 0.294 - -0.233 - 0.340 - - - - - -0.095040 - 0.507560 - - -0.1714790 - - 0.213 - -0.181 - - - - - 2002-03-13 - 52346 - - - -0.092694 - 0.000098 - 0.510026 - 0.000045 - - - -0.1723725 - 0.0000034 - 0.9554 - 0.0025 - - - 0.146 - 0.082 - -0.207 - 0.340 - - - - - -0.092840 - 0.509890 - - -0.1723820 - - 0.255 - -0.217 - - - - - 2002-03-14 - 52347 - - - -0.090271 - 0.000108 - 0.512315 - 0.000050 - - - -0.1733609 - 0.0000036 - 1.0061 - 0.0025 - - - 0.133 - 0.082 - -0.191 - 0.340 - - - - - -0.090220 - 0.512070 - - -0.1733690 - - 0.263 - -0.333 - - - - - 2002-03-15 - 52348 - - - -0.087638 - 0.000109 - 0.514503 - 0.000054 - - - -0.1743556 - 0.0000037 - 0.9693 - 0.0025 - - - 0.111 - 0.082 - -0.190 - 0.340 - - - - - -0.087660 - 0.514370 - - -0.1743580 - - 0.289 - -0.272 - - - - - 2002-03-16 - 52349 - - - -0.084878 - 0.000041 - 0.516640 - 0.000050 - - - -0.1752920 - 0.0000036 - 0.9098 - 0.0030 - - - 0.088 - 0.098 - -0.197 - 0.340 - - - - - -0.084860 - 0.516470 - - -0.1753050 - - 0.263 - -0.038 - - - - - 2002-03-17 - 52350 - - - -0.081863 - 0.000095 - 0.518611 - 0.000045 - - - -0.1761811 - 0.0000047 - 0.8680 - 0.0030 - - - 0.076 - 0.056 - -0.198 - 0.340 - - - - - -0.081840 - 0.518430 - - -0.1762050 - - 0.234 - 0.041 - - - - - 2002-03-18 - 52351 - - - -0.078741 - 0.000095 - 0.520489 - 0.000058 - - - -0.1770213 - 0.0000047 - 0.8060 - 0.0034 - - - 0.072 - 0.056 - -0.199 - 0.340 - - - - - -0.078700 - 0.520250 - - -0.1770390 - - 0.251 - 0.095 - - - - - 2002-03-19 - 52352 - - - -0.075571 - 0.000088 - 0.522411 - 0.000057 - - - -0.1777714 - 0.0000048 - 0.6788 - 0.0032 - - - 0.068 - 0.056 - -0.215 - 0.340 - - - - - -0.075630 - 0.522210 - - -0.1777670 - - 0.287 - 0.174 - - - - - 2002-03-20 - 52353 - - - -0.072555 - 0.000086 - 0.524164 - 0.000061 - - - -0.1783699 - 0.0000042 - 0.5245 - 0.0031 - - - 0.074 - 0.093 - -0.237 - 0.340 - - - - - -0.072570 - 0.523990 - - -0.1783600 - - 0.378 - 0.210 - - - - - 2002-03-21 - 52354 - - - -0.069246 - 0.000081 - 0.525863 - 0.000057 - - - -0.1788357 - 0.0000040 - 0.4162 - 0.0029 - - - 0.096 - 0.093 - -0.235 - 0.340 - - - - - -0.069250 - 0.525600 - - -0.1788340 - - 0.414 - 0.208 - - - - - 2002-03-22 - 52355 - - - -0.065790 - 0.000084 - 0.527705 - 0.000057 - - - -0.1792241 - 0.0000039 - 0.3735 - 0.0024 - - - 0.114 - 0.093 - -0.222 - 0.340 - - - - - -0.065770 - 0.527460 - - -0.1792290 - - 0.350 - -0.053 - - - - - 2002-03-23 - 52356 - - - -0.062320 - 0.000036 - 0.529326 - 0.000062 - - - -0.1796054 - 0.0000026 - 0.3991 - 0.0023 - - - 0.117 - 0.119 - -0.237 - 0.122 - - - - - -0.062270 - 0.529100 - - -0.1796230 - - 0.288 - -0.498 - - - - - 2002-03-24 - 52357 - - - -0.058828 - 0.000046 - 0.530832 - 0.000056 - - - -0.1800509 - 0.0000024 - 0.5107 - 0.0018 - - - 0.120 - 0.085 - -0.267 - 0.127 - - - - - -0.058810 - 0.530710 - - -0.1801030 - - 0.291 - -0.685 - - - - - 2002-03-25 - 52358 - - - -0.055237 - 0.000055 - 0.532473 - 0.000056 - - - -0.1806600 - 0.0000026 - 0.7219 - 0.0019 - - - 0.131 - 0.085 - -0.248 - 0.127 - - - - - -0.055180 - 0.532160 - - -0.1807120 - - 0.351 - -0.540 - - - - - 2002-03-26 - 52359 - - - -0.051303 - 0.000054 - 0.534257 - 0.000049 - - - -0.1815161 - 0.0000030 - 0.9975 - 0.0021 - - - 0.123 - 0.080 - -0.179 - 0.340 - - - - - -0.051350 - 0.533960 - - -0.1815250 - - 0.287 - -0.235 - - - - - 2002-03-27 - 52360 - - - -0.048001 - 0.000062 - 0.535974 - 0.000049 - - - -0.1826647 - 0.0000033 - 1.3024 - 0.0023 - - - 0.091 - 0.080 - -0.151 - 0.340 - - - - - -0.047900 - 0.535800 - - -0.1826590 - - 0.143 - -0.172 - - - - - 2002-03-28 - 52361 - - - -0.045022 - 0.000063 - 0.537463 - 0.000048 - - - -0.1840957 - 0.0000034 - 1.5317 - 0.0024 - - - 0.070 - 0.080 - -0.183 - 0.340 - - - - - -0.044850 - 0.537270 - - -0.1841020 - - 0.097 - -0.173 - - - - - 2002-03-29 - 52362 - - - -0.041709 - 0.000069 - 0.538727 - 0.000050 - - - -0.1856567 - 0.0000036 - 1.5468 - 0.0028 - - - 0.080 - 0.080 - -0.226 - 0.340 - - - - - -0.041730 - 0.538490 - - -0.1856720 - - 0.280 - -0.199 - - - - - 2002-03-30 - 52363 - - - -0.038227 - 0.000045 - 0.539728 - 0.000037 - - - -0.1871312 - 0.0000044 - 1.3874 - 0.0030 - - - 0.090 - 0.111 - -0.231 - 0.340 - - - - - -0.038250 - 0.539420 - - -0.1871400 - - 0.554 - -0.013 - - - - - 2002-03-31 - 52364 - - - -0.034503 - 0.000028 - 0.540438 - 0.000052 - - - -0.1884119 - 0.0000047 - 1.1690 - 0.0043 - - - 0.073 - 0.111 - -0.213 - 0.340 - - - - - -0.034510 - 0.540310 - - -0.1884220 - - 0.746 - 0.034 - - - - - 2002-04-01 - 52365 - - - -0.030775 - 0.000064 - 0.540923 - 0.000079 - - - -0.1894606 - 0.0000074 - 0.9247 - 0.0037 - - - 0.046 - 0.175 - -0.201 - 0.340 - - - - - -0.030760 - 0.540660 - - -0.1894800 - - 0.735 - -0.062 - - - - - 2002-04-02 - 52366 - - - -0.026997 - 0.000076 - 0.541306 - 0.000079 - - - -0.1902654 - 0.0000058 - 0.6928 - 0.0045 - - - 0.033 - 0.153 - -0.201 - 0.130 - - - - - -0.026850 - 0.541150 - - -0.1902860 - - 0.589 - -0.185 - - - - - 2002-04-03 - 52367 - - - -0.022754 - 0.000073 - 0.541808 - 0.000083 - - - -0.1908598 - 0.0000052 - 0.5017 - 0.0039 - - - 0.035 - 0.127 - -0.212 - 0.111 - - - - - -0.022980 - 0.541720 - - -0.1908570 - - 0.431 - -0.249 - - - - - 2002-04-04 - 52368 - - - -0.018607 - 0.000073 - 0.543037 - 0.000085 - - - -0.1912960 - 0.0000052 - 0.3922 - 0.0037 - - - 0.028 - 0.130 - -0.232 - 0.340 - - - - - -0.018830 - 0.542820 - - -0.1912760 - - 0.265 - -0.188 - - - - - 2002-04-05 - 52369 - - - -0.014927 - 0.000076 - 0.544412 - 0.000079 - - - -0.1916755 - 0.0000053 - 0.3767 - 0.0034 - - - 0.042 - 0.130 - -0.258 - 0.340 - - - - - -0.014960 - 0.544200 - - -0.1916810 - - 0.249 - -0.199 - - - - - 2002-04-06 - 52370 - - - -0.011575 - 0.000083 - 0.545865 - 0.000068 - - - -0.1920754 - 0.0000044 - 0.4393 - 0.0031 - - - 0.061 - 0.130 - -0.270 - 0.340 - - - - - -0.011580 - 0.545710 - - -0.1920770 - - 0.202 - -0.298 - - - - - 2002-04-07 - 52371 - - - -0.008809 - 0.000102 - 0.547094 - 0.000047 - - - -0.1925663 - 0.0000034 - 0.5385 - 0.0027 - - - 0.085 - 0.129 - -0.264 - 0.340 - - - - - -0.008710 - 0.546960 - - -0.1925570 - - 0.148 - -0.349 - - - - - 2002-04-08 - 52372 - - - -0.006168 - 0.000099 - 0.548019 - 0.000058 - - - -0.1931513 - 0.0000033 - 0.6344 - 0.0024 - - - 0.105 - 0.112 - -0.240 - 0.340 - - - - - -0.006160 - 0.547850 - - -0.1931530 - - 0.007 - -0.270 - - - - - 2002-04-09 - 52373 - - - -0.003462 - 0.000102 - 0.548833 - 0.000057 - - - -0.1938398 - 0.0000035 - 0.7444 - 0.0023 - - - 0.106 - 0.134 - -0.200 - 0.340 - - - - - -0.003780 - 0.548650 - - -0.1938450 - - -0.085 - -0.119 - - - - - 2002-04-10 - 52374 - - - -0.001630 - 0.000100 - 0.549501 - 0.000064 - - - -0.1946408 - 0.0000031 - 0.8567 - 0.0023 - - - 0.090 - 0.110 - -0.161 - 0.340 - - - - - -0.001790 - 0.549280 - - -0.1946360 - - -0.051 - -0.056 - - - - - 2002-04-11 - 52375 - - - 0.000760 - 0.000093 - 0.549917 - 0.000065 - - - -0.1955456 - 0.0000030 - 0.9464 - 0.0022 - - - 0.069 - 0.110 - -0.150 - 0.340 - - - - - 0.000630 - 0.549660 - - -0.1955480 - - 0.030 - -0.194 - - - - - 2002-04-12 - 52376 - - - 0.003795 - 0.000091 - 0.550572 - 0.000071 - - - -0.1965096 - 0.0000030 - 0.9642 - 0.0025 - - - 0.051 - 0.110 - -0.171 - 0.340 - - - - - 0.003750 - 0.550380 - - -0.1965140 - - 0.108 - -0.168 - - - - - 2002-04-13 - 52377 - - - 0.006868 - 0.000056 - 0.551403 - 0.000072 - - - -0.1974465 - 0.0000040 - 0.8995 - 0.0029 - - - -0.003 - 0.053 - -0.200 - 0.340 - - - - - 0.006850 - 0.551270 - - -0.1974570 - - 0.175 - -0.116 - - - - - 2002-04-14 - 52378 - - - 0.009923 - 0.000065 - 0.552101 - 0.000060 - - - -0.1982923 - 0.0000050 - 0.7859 - 0.0032 - - - -0.010 - 0.090 - -0.209 - 0.340 - - - - - 0.009940 - 0.551890 - - -0.1983280 - - 0.240 - -0.044 - - - - - 2002-04-15 - 52379 - - - 0.012900 - 0.000066 - 0.552738 - 0.000056 - - - -0.1990098 - 0.0000050 - 0.6467 - 0.0036 - - - -0.003 - 0.090 - -0.203 - 0.340 - - - - - 0.012910 - 0.552530 - - -0.1990500 - - 0.252 - 0.008 - - - - - 2002-04-16 - 52380 - - - 0.015675 - 0.000067 - 0.553316 - 0.000041 - - - -0.1995651 - 0.0000053 - 0.4458 - 0.0035 - - - 0.005 - 0.121 - -0.205 - 0.119 - - - - - 0.015700 - 0.553150 - - -0.1995690 - - 0.244 - -0.003 - - - - - 2002-04-17 - 52381 - - - 0.018807 - 0.000070 - 0.553815 - 0.000042 - - - -0.1999177 - 0.0000050 - 0.2940 - 0.0036 - - - 0.011 - 0.095 - -0.199 - 0.340 - - - - - 0.018850 - 0.553680 - - -0.1999170 - - 0.236 - -0.042 - - - - - 2002-04-18 - 52382 - - - 0.022144 - 0.000072 - 0.554304 - 0.000041 - - - -0.2001964 - 0.0000050 - 0.2722 - 0.0034 - - - 0.029 - 0.095 - -0.208 - 0.340 - - - - - 0.022150 - 0.554150 - - -0.2001990 - - 0.246 - -0.098 - - - - - 2002-04-19 - 52383 - - - 0.025474 - 0.000075 - 0.554736 - 0.000042 - - - -0.2004566 - 0.0000045 - 0.2341 - 0.0032 - - - 0.059 - 0.095 - -0.200 - 0.340 - - - - - 0.025500 - 0.554540 - - -0.2004610 - - 0.215 - -0.109 - - - - - 2002-04-20 - 52384 - - - 0.028902 - 0.000034 - 0.555001 - 0.000040 - - - -0.2006765 - 0.0000039 - 0.2318 - 0.0028 - - - 0.079 - 0.061 - -0.194 - 0.340 - - - - - 0.028950 - 0.554890 - - -0.2006920 - - 0.190 - -0.176 - - - - - 2002-04-21 - 52385 - - - 0.032015 - 0.000078 - 0.555130 - 0.000052 - - - -0.2009681 - 0.0000033 - 0.3734 - 0.0026 - - - 0.077 - 0.082 - -0.200 - 0.340 - - - - - 0.032050 - 0.555000 - - -0.2009790 - - 0.115 - -0.227 - - - - - 2002-04-22 - 52386 - - - 0.034846 - 0.000078 - 0.555105 - 0.000056 - - - -0.2014646 - 0.0000035 - 0.6391 - 0.0024 - - - 0.063 - 0.082 - -0.200 - 0.340 - - - - - 0.034890 - 0.554920 - - -0.2014710 - - 0.067 - -0.130 - - - - - 2002-04-23 - 52387 - - - 0.037867 - 0.000075 - 0.554965 - 0.000059 - - - -0.2022561 - 0.0000034 - 0.9341 - 0.0027 - - - 0.046 - 0.099 - -0.182 - 0.340 - - - - - 0.037860 - 0.554810 - - -0.2022590 - - 0.035 - -0.091 - - - - - 2002-04-24 - 52388 - - - 0.041225 - 0.000076 - 0.554802 - 0.000066 - - - -0.2033150 - 0.0000040 - 1.1756 - 0.0026 - - - 0.026 - 0.096 - -0.171 - 0.340 - - - - - 0.041250 - 0.554620 - - -0.2033180 - - 0.026 - -0.125 - - - - - 2002-04-25 - 52389 - - - 0.044884 - 0.000076 - 0.554653 - 0.000066 - - - -0.2045888 - 0.0000040 - 1.3617 - 0.0027 - - - 0.016 - 0.096 - -0.185 - 0.340 - - - - - 0.044890 - 0.554490 - - -0.2045770 - - 0.069 - -0.252 - - - - - 2002-04-26 - 52390 - - - 0.048635 - 0.000078 - 0.554475 - 0.000069 - - - -0.2059960 - 0.0000037 - 1.4204 - 0.0037 - - - 0.022 - 0.096 - -0.203 - 0.340 - - - - - 0.048700 - 0.554360 - - -0.2059990 - - 0.196 - -0.166 - - - - - 2002-04-27 - 52391 - - - 0.052523 - 0.000059 - 0.554085 - 0.000073 - - - -0.2073676 - 0.0000063 - 1.2929 - 0.0035 - - - 0.004 - 0.149 - -0.204 - 0.340 - - - - - 0.052510 - 0.553960 - - -0.2073770 - - 0.339 - -0.014 - - - - - 2002-04-28 - 52392 - - - 0.056216 - 0.000067 - 0.553526 - 0.000098 - - - -0.2085353 - 0.0000060 - 1.0260 - 0.0043 - - - -0.008 - 0.135 - -0.189 - 0.340 - - - - - 0.056270 - 0.553350 - - -0.2085470 - - 0.382 - 0.051 - - - - - 2002-04-29 - 52393 - - - 0.059904 - 0.000068 - 0.553024 - 0.000098 - - - -0.2094096 - 0.0000060 - 0.7292 - 0.0043 - - - -0.030 - 0.135 - -0.178 - 0.340 - - - - - 0.059990 - 0.552900 - - -0.2094170 - - 0.293 - -0.070 - - - - - 2002-04-30 - 52394 - - - 0.063466 - 0.000058 - 0.552615 - 0.000099 - - - -0.2099979 - 0.0000061 - 0.4450 - 0.0041 - - - -0.040 - 0.120 - -0.178 - 0.340 - - - - - 0.063540 - 0.552680 - - -0.2099850 - - 0.154 - -0.261 - - - - - 2002-05-01 - 52395 - - - 0.066772 - 0.000059 - 0.552568 - 0.000099 - - - -0.2103313 - 0.0000055 - 0.2560 - 0.0041 - - - -0.031 - 0.099 - -0.195 - 0.340 - - - - - 0.066810 - 0.552550 - - -0.2103280 - - -0.038 - -0.391 - - - - - 2002-05-02 - 52396 - - - 0.069977 - 0.000057 - 0.552416 - 0.000095 - - - -0.2105553 - 0.0000055 - 0.2032 - 0.0034 - - - -0.011 - 0.099 - -0.221 - 0.340 - - - - - 0.070040 - 0.552260 - - -0.2105750 - - -0.123 - -0.339 - - - - - 2002-05-03 - 52397 - - - 0.073297 - 0.000052 - 0.552103 - 0.000090 - - - -0.2107561 - 0.0000041 - 0.2057 - 0.0033 - - - 0.009 - 0.099 - -0.237 - 0.340 - - - - - 0.073400 - 0.551980 - - -0.2107650 - - 0.002 - -0.212 - - - - - 2002-05-04 - 52398 - - - 0.076884 - 0.000043 - 0.551978 - 0.000056 - - - -0.2109942 - 0.0000037 - 0.2908 - 0.0030 - - - 0.022 - 0.068 - -0.206 - 0.340 - - - - - 0.076890 - 0.551810 - - -0.2110110 - - 0.181 - -0.187 - - - - - 2002-05-05 - 52399 - - - 0.080657 - 0.000051 - 0.551917 - 0.000052 - - - -0.2113652 - 0.0000044 - 0.4585 - 0.0032 - - - 0.039 - 0.147 - -0.189 - 0.204 - - - - - 0.080730 - 0.551700 - - -0.2114160 - - 0.312 - -0.149 - - - - - 2002-05-06 - 52400 - - - 0.084630 - 0.000056 - 0.551761 - 0.000048 - - - -0.2119130 - 0.0000052 - 0.6317 - 0.0035 - - - 0.047 - 0.122 - -0.172 - 0.185 - - - - - 0.084750 - 0.551580 - - -0.2119720 - - 0.274 - 0.130 - - - - - 2002-05-07 - 52401 - - - 0.088548 - 0.000060 - 0.551376 - 0.000048 - - - -0.2126183 - 0.0000055 - 0.7740 - 0.0037 - - - 0.034 - 0.123 - -0.149 - 0.192 - - - - - 0.088540 - 0.551260 - - -0.2126300 - - 0.182 - 0.439 - - - - - 2002-05-08 - 52402 - - - 0.091571 - 0.000056 - 0.550864 - 0.000050 - - - -0.2134483 - 0.0000053 - 0.8781 - 0.0038 - - - 0.011 - 0.105 - -0.130 - 0.171 - - - - - 0.091560 - 0.550730 - - -0.2134090 - - 0.093 - 0.389 - - - - - 2002-05-09 - 52403 - - - 0.094252 - 0.000059 - 0.550063 - 0.000051 - - - -0.2143627 - 0.0000052 - 0.9469 - 0.0037 - - - -0.009 - 0.105 - -0.128 - 0.171 - - - - - 0.094320 - 0.549950 - - -0.2143480 - - 0.067 - 0.180 - - - - - 2002-05-10 - 52404 - - - 0.097648 - 0.000059 - 0.549301 - 0.000052 - - - -0.2153294 - 0.0000051 - 0.9776 - 0.0040 - - - -0.014 - 0.105 - -0.151 - 0.171 - - - - - 0.097670 - 0.549210 - - -0.2153350 - - 0.053 - -0.153 - - - - - 2002-05-11 - 52405 - - - 0.101078 - 0.000061 - 0.548997 - 0.000052 - - - -0.2162959 - 0.0000060 - 0.9424 - 0.0039 - - - 0.006 - 0.058 - -0.179 - 0.105 - - - - - 0.101130 - 0.548850 - - -0.2163140 - - 0.103 - -0.283 - - - - - 2002-05-12 - 52406 - - - 0.103926 - 0.000071 - 0.548532 - 0.000060 - - - -0.2171983 - 0.0000058 - 0.8597 - 0.0052 - - - 0.007 - 0.071 - -0.187 - 0.340 - - - - - 0.104010 - 0.548380 - - -0.2172330 - - 0.173 - -0.229 - - - - - 2002-05-13 - 52407 - - - 0.106775 - 0.000072 - 0.547814 - 0.000063 - - - -0.2180139 - 0.0000086 - 0.7730 - 0.0050 - - - 0.014 - 0.056 - -0.185 - 0.340 - - - - - 0.106820 - 0.547560 - - -0.2180410 - - 0.201 - -0.137 - - - - - 2002-05-14 - 52408 - - - 0.109830 - 0.000105 - 0.546963 - 0.000060 - - - -0.2187311 - 0.0000081 - 0.6468 - 0.0055 - - - 0.024 - 0.057 - -0.187 - 0.340 - - - - - 0.109690 - 0.546720 - - -0.2187190 - - 0.216 - -0.046 - - - - - 2002-05-15 - 52409 - - - 0.112014 - 0.000103 - 0.545755 - 0.000055 - - - -0.2193188 - 0.0000069 - 0.5543 - 0.0053 - - - 0.026 - 0.067 - -0.206 - 0.340 - - - - - 0.112130 - 0.545580 - - -0.2193030 - - 0.181 - -0.079 - - - - - 2002-05-16 - 52410 - - - 0.114383 - 0.000097 - 0.544196 - 0.000055 - - - -0.2198581 - 0.0000069 - 0.5168 - 0.0046 - - - 0.025 - 0.067 - -0.222 - 0.340 - - - - - 0.114200 - 0.544020 - - -0.2198500 - - 0.202 - -0.164 - - - - - 2002-05-17 - 52411 - - - 0.116546 - 0.000092 - 0.542598 - 0.000054 - - - -0.2203536 - 0.0000060 - 0.4829 - 0.0040 - - - 0.041 - 0.067 - -0.224 - 0.340 - - - - - 0.116510 - 0.542440 - - -0.2203590 - - 0.235 - -0.120 - - - - - 2002-05-18 - 52412 - - - 0.119089 - 0.000062 - 0.541412 - 0.000045 - - - -0.2208656 - 0.0000041 - 0.5741 - 0.0033 - - - 0.066 - 0.065 - -0.204 - 0.340 - - - - - 0.119110 - 0.541240 - - -0.2208620 - - 0.306 - -0.035 - - - - - 2002-05-19 - 52413 - - - 0.121988 - 0.000062 - 0.540660 - 0.000044 - - - -0.2215418 - 0.0000028 - 0.7854 - 0.0024 - - - 0.074 - 0.105 - -0.175 - 0.340 - - - - - 0.121990 - 0.540490 - - -0.2215070 - - 0.245 - 0.036 - - - - - 2002-05-20 - 52414 - - - 0.125211 - 0.000040 - 0.540141 - 0.000035 - - - -0.2224512 - 0.0000023 - 1.0412 - 0.0017 - - - 0.053 - 0.126 - -0.156 - 0.340 - - - - - 0.125270 - 0.539970 - - -0.2224240 - - 0.117 - 0.109 - - - - - 2002-05-21 - 52415 - - - 0.128380 - 0.000037 - 0.539644 - 0.000033 - - - -0.2236215 - 0.0000019 - 1.2889 - 0.0015 - - - 0.024 - 0.156 - -0.167 - 0.340 - - - - - 0.128480 - 0.539480 - - -0.2236270 - - -0.014 - 0.036 - - - - - 2002-05-22 - 52416 - - - 0.131157 - 0.000049 - 0.538980 - 0.000050 - - - -0.2249902 - 0.0000020 - 1.4200 - 0.0014 - - - 0.006 - 0.114 - -0.198 - 0.340 - - - - - 0.131230 - 0.538810 - - -0.2250060 - - -0.115 - -0.234 - - - - - 2002-05-23 - 52417 - - - 0.133618 - 0.000045 - 0.538130 - 0.000049 - - - -0.2264190 - 0.0000020 - 1.4234 - 0.0014 - - - -0.002 - 0.114 - -0.221 - 0.340 - - - - - 0.133700 - 0.537930 - - -0.2264180 - - -0.076 - -0.357 - - - - - 2002-05-24 - 52418 - - - 0.135828 - 0.000043 - 0.537236 - 0.000049 - - - -0.2278000 - 0.0000020 - 1.3158 - 0.0016 - - - -0.006 - 0.114 - -0.221 - 0.340 - - - - - 0.135990 - 0.537030 - - -0.2278030 - - 0.028 - -0.313 - - - - - 2002-05-25 - 52419 - - - 0.138181 - 0.000036 - 0.536203 - 0.000048 - - - -0.2290060 - 0.0000026 - 1.0744 - 0.0016 - - - -0.012 - 0.040 - -0.213 - 0.100 - - - - - 0.138220 - 0.536070 - - -0.2290250 - - 0.175 - -0.032 - - - - - 2002-05-26 - 52420 - - - 0.140465 - 0.000034 - 0.535123 - 0.000055 - - - -0.2299238 - 0.0000024 - 0.7581 - 0.0019 - - - -0.018 - 0.040 - -0.215 - 0.100 - - - - - 0.140550 - 0.534950 - - -0.2299640 - - 0.258 - 0.137 - - - - - 2002-05-27 - 52421 - - - 0.143113 - 0.000051 - 0.533964 - 0.000060 - - - -0.2305260 - 0.0000027 - 0.4533 - 0.0020 - - - -0.021 - 0.082 - -0.223 - 0.102 - - - - - 0.143240 - 0.533780 - - -0.2305660 - - 0.260 - 0.115 - - - - - 2002-05-28 - 52422 - - - 0.146203 - 0.000046 - 0.532834 - 0.000049 - - - -0.2308520 - 0.0000031 - 0.2133 - 0.0021 - - - -0.017 - 0.109 - -0.226 - 0.104 - - - - - 0.146250 - 0.532660 - - -0.2308730 - - 0.245 - -0.004 - - - - - 2002-05-29 - 52423 - - - 0.148928 - 0.000049 - 0.531523 - 0.000047 - - - -0.2309844 - 0.0000031 - 0.0685 - 0.0022 - - - -0.004 - 0.134 - -0.230 - 0.340 - - - - - 0.149140 - 0.531430 - - -0.2309950 - - 0.194 - 0.004 - - - - - 2002-05-30 - 52424 - - - 0.151869 - 0.000049 - 0.530181 - 0.000047 - - - -0.2310250 - 0.0000031 - 0.0315 - 0.0022 - - - 0.014 - 0.134 - -0.242 - 0.340 - - - - - 0.151940 - 0.530030 - - -0.2310410 - - 0.156 - -0.087 - - - - - 2002-05-31 - 52425 - - - 0.154668 - 0.000052 - 0.528706 - 0.000051 - - - -0.2310636 - 0.0000032 - 0.0429 - 0.0022 - - - 0.031 - 0.134 - -0.245 - 0.340 - - - - - 0.154720 - 0.528570 - - -0.2310720 - - 0.111 - -0.227 - - - - - 2002-06-01 - 52426 - - - 0.157262 - 0.000051 - 0.527174 - 0.000049 - - - -0.2311178 - 0.0000031 - 0.0753 - 0.0023 - - - 0.045 - 0.134 - -0.227 - 0.340 - - - - - 0.157340 - 0.527040 - - -0.2311240 - - 0.225 - -0.307 - - - - - 2002-06-02 - 52427 - - - 0.159762 - 0.000052 - 0.525449 - 0.000059 - - - -0.2312232 - 0.0000032 - 0.1348 - 0.0022 - - - 0.052 - 0.123 - -0.204 - 0.340 - - - - - 0.159880 - 0.525310 - - -0.2312140 - - 0.312 - -0.270 - - - - - 2002-06-03 - 52428 - - - 0.162422 - 0.000051 - 0.523562 - 0.000059 - - - -0.2313872 - 0.0000030 - 0.1936 - 0.0022 - - - 0.045 - 0.118 - -0.193 - 0.340 - - - - - 0.162500 - 0.523430 - - -0.2313740 - - 0.307 - -0.215 - - - - - 2002-06-04 - 52429 - - - 0.165139 - 0.000048 - 0.521977 - 0.000055 - - - -0.2316033 - 0.0000029 - 0.2312 - 0.0021 - - - 0.022 - 0.073 - -0.192 - 0.117 - - - - - 0.165300 - 0.521670 - - -0.2316120 - - 0.262 - -0.046 - - - - - 2002-06-05 - 52430 - - - 0.168238 - 0.000074 - 0.520296 - 0.000054 - - - -0.2318190 - 0.0000029 - 0.1769 - 0.0021 - - - -0.005 - 0.077 - -0.189 - 0.131 - - - - - 0.168340 - 0.520030 - - -0.2318370 - - 0.130 - 0.046 - - - - - 2002-06-06 - 52431 - - - 0.171422 - 0.000075 - 0.518624 - 0.000054 - - - -0.2319380 - 0.0000029 - 0.0654 - 0.0021 - - - -0.018 - 0.077 - -0.192 - 0.131 - - - - - 0.171450 - 0.518430 - - -0.2319380 - - 0.046 - -0.079 - - - - - 2002-06-07 - 52432 - - - 0.174122 - 0.000081 - 0.516908 - 0.000075 - - - -0.2319549 - 0.0000031 - -0.0309 - 0.0028 - - - -0.014 - 0.077 - -0.209 - 0.131 - - - - - 0.174530 - 0.516740 - - -0.2319570 - - 0.001 - -0.321 - - - - - 2002-06-08 - 52433 - - - 0.177642 - 0.000075 - 0.515254 - 0.000060 - - - -0.2318678 - 0.0000049 - -0.1525 - 0.0028 - - - 0.044 - 0.126 - -0.249 - 0.148 - - - - - 0.177650 - 0.515060 - - -0.2318840 - - 0.045 - -0.514 - - - - - 2002-06-09 - 52434 - - - 0.180649 - 0.000078 - 0.513639 - 0.000062 - - - -0.2316395 - 0.0000046 - -0.3053 - 0.0042 - - - 0.040 - 0.098 - -0.257 - 0.103 - - - - - 0.180710 - 0.513450 - - -0.2316690 - - 0.140 - -0.480 - - - - - 2002-06-10 - 52435 - - - 0.183538 - 0.000090 - 0.511970 - 0.000067 - - - -0.2312580 - 0.0000068 - -0.4556 - 0.0048 - - - 0.038 - 0.098 - -0.259 - 0.103 - - - - - 0.183570 - 0.511780 - - -0.2312790 - - 0.162 - -0.306 - - - - - 2002-06-11 - 52436 - - - 0.186085 - 0.000081 - 0.510073 - 0.000077 - - - -0.2307278 - 0.0000085 - -0.6072 - 0.0054 - - - 0.042 - 0.069 - -0.268 - 0.340 - - - - - 0.186120 - 0.509890 - - -0.2307300 - - 0.143 - -0.162 - - - - - 2002-06-12 - 52437 - - - 0.188432 - 0.000085 - 0.507988 - 0.000080 - - - -0.2300715 - 0.0000083 - -0.6750 - 0.0059 - - - 0.048 - 0.065 - -0.282 - 0.340 - - - - - 0.188420 - 0.507800 - - -0.2300660 - - 0.131 - -0.162 - - - - - 2002-06-13 - 52438 - - - 0.190968 - 0.000083 - 0.505877 - 0.000065 - - - -0.2293918 - 0.0000082 - -0.7007 - 0.0058 - - - 0.052 - 0.065 - -0.289 - 0.340 - - - - - 0.190770 - 0.505750 - - -0.2293550 - - 0.122 - -0.182 - - - - - 2002-06-14 - 52439 - - - 0.193083 - 0.000086 - 0.504175 - 0.000071 - - - -0.2287029 - 0.0000081 - -0.6280 - 0.0067 - - - 0.058 - 0.065 - -0.285 - 0.340 - - - - - 0.193220 - 0.503920 - - -0.2287030 - - 0.179 - -0.218 - - - - - 2002-06-15 - 52440 - - - 0.195895 - 0.000082 - 0.502363 - 0.000071 - - - -0.2281871 - 0.0000105 - -0.4015 - 0.0054 - - - 0.085 - 0.088 - -0.286 - 0.340 - - - - - 0.195910 - 0.502180 - - -0.2282220 - - 0.276 - -0.197 - - - - - 2002-06-16 - 52441 - - - 0.199058 - 0.000072 - 0.500284 - 0.000063 - - - -0.2279101 - 0.0000072 - -0.1445 - 0.0065 - - - 0.088 - 0.088 - -0.254 - 0.340 - - - - - 0.199100 - 0.500090 - - -0.2279630 - - 0.325 - -0.151 - - - - - 2002-06-17 - 52442 - - - 0.202224 - 0.000052 - 0.497949 - 0.000062 - - - -0.2278952 - 0.0000078 - 0.1038 - 0.0055 - - - 0.076 - 0.080 - -0.216 - 0.340 - - - - - 0.202290 - 0.497760 - - -0.2279310 - - 0.238 - -0.175 - - - - - 2002-06-18 - 52443 - - - 0.204833 - 0.000041 - 0.495529 - 0.000055 - - - -0.2280823 - 0.0000082 - 0.2461 - 0.0056 - - - 0.054 - 0.090 - -0.204 - 0.124 - - - - - 0.204940 - 0.495220 - - -0.2280790 - - 0.123 - -0.233 - - - - - 2002-06-19 - 52444 - - - 0.207403 - 0.000051 - 0.493005 - 0.000068 - - - -0.2283611 - 0.0000080 - 0.3097 - 0.0057 - - - 0.036 - 0.130 - -0.227 - 0.103 - - - - - 0.207500 - 0.492730 - - -0.2283380 - - 0.000 - -0.278 - - - - - 2002-06-20 - 52445 - - - 0.210137 - 0.000052 - 0.490747 - 0.000066 - - - -0.2286852 - 0.0000079 - 0.3240 - 0.0054 - - - 0.025 - 0.130 - -0.259 - 0.103 - - - - - 0.210240 - 0.490560 - - -0.2286600 - - -0.008 - -0.289 - - - - - 2002-06-21 - 52446 - - - 0.212483 - 0.000055 - 0.488963 - 0.000064 - - - -0.2289894 - 0.0000072 - 0.2792 - 0.0059 - - - 0.015 - 0.130 - -0.273 - 0.103 - - - - - 0.212630 - 0.488670 - - -0.2289890 - - 0.040 - -0.177 - - - - - 2002-06-22 - 52447 - - - 0.214573 - 0.000054 - 0.486901 - 0.000080 - - - -0.2292204 - 0.0000088 - 0.1649 - 0.0045 - - - 0.029 - 0.183 - -0.297 - 0.340 - - - - - 0.214630 - 0.486680 - - -0.2292480 - - 0.100 - -0.060 - - - - - 2002-06-23 - 52448 - - - 0.216546 - 0.000061 - 0.484560 - 0.000075 - - - -0.2293042 - 0.0000054 - 0.0058 - 0.0049 - - - 0.027 - 0.132 - -0.311 - 0.340 - - - - - 0.216550 - 0.484340 - - -0.2293260 - - 0.182 - -0.014 - - - - - 2002-06-24 - 52449 - - - 0.218223 - 0.000057 - 0.482032 - 0.000074 - - - -0.2292468 - 0.0000044 - -0.1088 - 0.0032 - - - 0.038 - 0.132 - -0.328 - 0.340 - - - - - 0.218230 - 0.481840 - - -0.2292470 - - 0.228 - -0.077 - - - - - 2002-06-25 - 52450 - - - 0.219496 - 0.000047 - 0.479289 - 0.000056 - - - -0.2291120 - 0.0000036 - -0.1472 - 0.0029 - - - 0.056 - 0.294 - -0.324 - 0.340 - - - - - 0.219580 - 0.479140 - - -0.2291160 - - 0.268 - -0.207 - - - - - 2002-06-26 - 52451 - - - 0.220863 - 0.000053 - 0.476457 - 0.000048 - - - -0.2289647 - 0.0000038 - -0.1487 - 0.0026 - - - 0.073 - 0.071 - -0.308 - 0.140 - - - - - 0.220900 - 0.476260 - - -0.2289770 - - 0.287 - -0.266 - - - - - 2002-06-27 - 52452 - - - 0.222503 - 0.000050 - 0.473416 - 0.000048 - - - -0.2288300 - 0.0000038 - -0.1040 - 0.0025 - - - 0.084 - 0.071 - -0.298 - 0.140 - - - - - 0.222530 - 0.473240 - - -0.2288370 - - 0.319 - -0.392 - - - - - 2002-06-28 - 52453 - - - 0.224483 - 0.000049 - 0.470359 - 0.000041 - - - -0.2287789 - 0.0000034 - 0.0072 - 0.0025 - - - 0.091 - 0.071 - -0.294 - 0.140 - - - - - 0.224420 - 0.470060 - - -0.2287840 - - 0.289 - -0.376 - - - - - 2002-06-29 - 52454 - - - 0.225982 - 0.000042 - 0.467428 - 0.000030 - - - -0.2288374 - 0.0000032 - 0.0974 - 0.0021 - - - 0.074 - 0.093 - -0.318 - 0.117 - - - - - 0.226010 - 0.467180 - - -0.2288750 - - 0.262 - -0.455 - - - - - 2002-06-30 - 52455 - - - 0.227153 - 0.000056 - 0.464679 - 0.000035 - - - -0.2289711 - 0.0000025 - 0.1799 - 0.0021 - - - 0.070 - 0.078 - -0.304 - 0.102 - - - - - 0.227260 - 0.464490 - - -0.2290160 - - 0.172 - -0.380 - - - - - 2002-07-01 - 52456 - - - 0.228093 - 0.000056 - 0.461754 - 0.000040 - - - -0.2292086 - 0.0000027 - 0.2966 - 0.0017 - - - 0.051 - 0.068 - -0.301 - 0.340 - - - - - 0.228170 - 0.461610 - - -0.2292270 - - 0.100 - -0.191 - - - - - 2002-07-02 - 52457 - - - 0.228678 - 0.000050 - 0.458602 - 0.000045 - - - -0.2295658 - 0.0000024 - 0.4177 - 0.0018 - - - 0.022 - 0.052 - -0.306 - 0.340 - - - - - 0.228800 - 0.458450 - - -0.2295720 - - 0.071 - -0.116 - - - - - 2002-07-03 - 52458 - - - 0.229486 - 0.000054 - 0.455839 - 0.000050 - - - -0.2300133 - 0.0000025 - 0.4468 - 0.0017 - - - 0.001 - 0.052 - -0.300 - 0.340 - - - - - 0.229470 - 0.455480 - - -0.2300200 - - 0.082 - -0.235 - - - - - 2002-07-04 - 52459 - - - 0.229938 - 0.000056 - 0.452887 - 0.000050 - - - -0.2304316 - 0.0000025 - 0.3926 - 0.0018 - - - -0.006 - 0.052 - -0.294 - 0.340 - - - - - 0.230020 - 0.452640 - - -0.2304250 - - 0.159 - -0.474 - - - - - 2002-07-05 - 52460 - - - 0.230334 - 0.000055 - 0.449811 - 0.000047 - - - -0.2307882 - 0.0000025 - 0.3073 - 0.0024 - - - -0.007 - 0.052 - -0.312 - 0.340 - - - - - 0.230440 - 0.449620 - - -0.2307870 - - 0.168 - -0.740 - - - - - 2002-07-06 - 52461 - - - 0.230822 - 0.000042 - 0.446517 - 0.000056 - - - -0.2310288 - 0.0000040 - 0.1696 - 0.0021 - - - -0.010 - 0.045 - -0.348 - 0.340 - - - - - 0.230840 - 0.446330 - - -0.2310450 - - 0.250 - -0.877 - - - - - 2002-07-07 - 52462 - - - 0.231547 - 0.000033 - 0.443050 - 0.000064 - - - -0.2311249 - 0.0000034 - 0.0245 - 0.0037 - - - -0.016 - 0.059 - -0.370 - 0.215 - - - - - 0.231560 - 0.442800 - - -0.2311160 - - 0.267 - -0.796 - - - - - 2002-07-08 - 52463 - - - 0.232366 - 0.000037 - 0.439748 - 0.000096 - - - -0.2310816 - 0.0000062 - -0.1093 - 0.0034 - - - -0.018 - 0.059 - -0.369 - 0.215 - - - - - 0.232370 - 0.439500 - - -0.2310570 - - 0.170 - -0.537 - - - - - 2002-07-09 - 52464 - - - 0.233110 - 0.000043 - 0.436481 - 0.000090 - - - -0.2309161 - 0.0000060 - -0.2139 - 0.0042 - - - -0.012 - 0.175 - -0.363 - 0.182 - - - - - 0.233070 - 0.436310 - - -0.2309210 - - 0.067 - -0.233 - - - - - 2002-07-10 - 52465 - - - 0.234045 - 0.000040 - 0.433309 - 0.000093 - - - -0.2306700 - 0.0000058 - -0.2699 - 0.0042 - - - 0.003 - 0.170 - -0.361 - 0.150 - - - - - 0.234030 - 0.433250 - - -0.2306780 - - 0.063 - -0.022 - - - - - 2002-07-11 - 52466 - - - 0.235486 - 0.000040 - 0.430445 - 0.000093 - - - -0.2303926 - 0.0000058 - -0.2769 - 0.0040 - - - 0.020 - 0.170 - -0.349 - 0.150 - - - - - 0.235400 - 0.430340 - - -0.2303350 - - 0.146 - -0.074 - - - - - 2002-07-12 - 52467 - - - 0.236744 - 0.000037 - 0.427581 - 0.000091 - - - -0.2301708 - 0.0000056 - -0.1201 - 0.0045 - - - 0.028 - 0.170 - -0.331 - 0.150 - - - - - 0.236820 - 0.427380 - - -0.2301690 - - 0.192 - -0.158 - - - - - 2002-07-13 - 52468 - - - 0.238130 - 0.000045 - 0.424612 - 0.000081 - - - -0.2301863 - 0.0000068 - 0.1383 - 0.0038 - - - -0.006 - 0.179 - -0.317 - 0.171 - - - - - 0.238100 - 0.424380 - - -0.2302190 - - 0.242 - -0.370 - - - - - 2002-07-14 - 52469 - - - 0.239176 - 0.000063 - 0.421547 - 0.000053 - - - -0.2304362 - 0.0000051 - 0.3633 - 0.0047 - - - -0.021 - 0.167 - -0.311 - 0.340 - - - - - 0.239200 - 0.421320 - - -0.2304620 - - 0.195 - -0.419 - - - - - 2002-07-15 - 52470 - - - 0.240203 - 0.000061 - 0.418490 - 0.000040 - - - -0.2308965 - 0.0000064 - 0.5393 - 0.0039 - - - -0.033 - 0.134 - -0.291 - 0.340 - - - - - 0.240220 - 0.418270 - - -0.2308980 - - 0.147 - -0.304 - - - - - 2002-07-16 - 52471 - - - 0.241195 - 0.000066 - 0.415687 - 0.000037 - - - -0.2314750 - 0.0000060 - 0.5958 - 0.0041 - - - -0.041 - 0.048 - -0.262 - 0.340 - - - - - 0.241160 - 0.415450 - - -0.2314830 - - 0.091 - -0.200 - - - - - 2002-07-17 - 52472 - - - 0.241889 - 0.000062 - 0.412966 - 0.000043 - - - -0.2320488 - 0.0000050 - 0.5343 - 0.0039 - - - -0.051 - 0.060 - -0.246 - 0.109 - - - - - 0.241970 - 0.412750 - - -0.2320660 - - 0.062 - -0.269 - - - - - 2002-07-18 - 52473 - - - 0.242889 - 0.000069 - 0.410526 - 0.000044 - - - -0.2325175 - 0.0000050 - 0.3944 - 0.0035 - - - -0.065 - 0.060 - -0.252 - 0.109 - - - - - 0.242950 - 0.410280 - - -0.2324960 - - 0.068 - -0.293 - - - - - 2002-07-19 - 52474 - - - 0.244025 - 0.000068 - 0.408341 - 0.000041 - - - -0.2328086 - 0.0000049 - 0.1674 - 0.0036 - - - -0.078 - 0.060 - -0.272 - 0.109 - - - - - 0.243920 - 0.408040 - - -0.2328090 - - 0.109 - -0.416 - - - - - 2002-07-20 - 52475 - - - 0.244305 - 0.000055 - 0.405797 - 0.000045 - - - -0.2328278 - 0.0000052 - -0.1331 - 0.0030 - - - -0.080 - 0.069 - -0.345 - 0.105 - - - - - 0.244380 - 0.405560 - - -0.2328360 - - 0.150 - -0.396 - - - - - 2002-07-21 - 52476 - - - 0.244751 - 0.000064 - 0.402907 - 0.000054 - - - -0.2325516 - 0.0000034 - -0.4061 - 0.0031 - - - -0.071 - 0.080 - -0.371 - 0.340 - - - - - 0.244780 - 0.402680 - - -0.2325410 - - 0.129 - -0.408 - - - - - 2002-07-22 - 52477 - - - 0.245504 - 0.000067 - 0.399931 - 0.000060 - - - -0.2320454 - 0.0000034 - -0.5896 - 0.0022 - - - -0.053 - 0.080 - -0.380 - 0.340 - - - - - 0.245540 - 0.399670 - - -0.2320260 - - 0.049 - -0.330 - - - - - 2002-07-23 - 52478 - - - 0.246126 - 0.000050 - 0.397037 - 0.000064 - - - -0.2314018 - 0.0000029 - -0.6850 - 0.0022 - - - -0.030 - 0.096 - -0.364 - 0.340 - - - - - 0.246260 - 0.396850 - - -0.2314050 - - 0.019 - -0.160 - - - - - 2002-07-24 - 52479 - - - 0.246675 - 0.000063 - 0.394277 - 0.000071 - - - -0.2306944 - 0.0000029 - -0.7235 - 0.0021 - - - -0.010 - 0.123 - -0.335 - 0.340 - - - - - 0.246670 - 0.394040 - - -0.2307260 - - 0.028 - -0.058 - - - - - 2002-07-25 - 52480 - - - 0.246909 - 0.000063 - 0.391371 - 0.000074 - - - -0.2299901 - 0.0000030 - -0.6562 - 0.0021 - - - 0.000 - 0.123 - -0.316 - 0.340 - - - - - 0.246940 - 0.391050 - - -0.2300230 - - 0.165 - -0.036 - - - - - 2002-07-26 - 52481 - - - 0.246753 - 0.000068 - 0.388059 - 0.000069 - - - -0.2294082 - 0.0000030 - -0.5102 - 0.0020 - - - 0.001 - 0.123 - -0.310 - 0.340 - - - - - 0.246920 - 0.387830 - - -0.2294130 - - 0.319 - -0.166 - - - - - 2002-07-27 - 52482 - - - 0.246829 - 0.000061 - 0.384528 - 0.000072 - - - -0.2289664 - 0.0000027 - -0.3739 - 0.0020 - - - -0.013 - 0.139 - -0.302 - 0.340 - - - - - 0.246880 - 0.384320 - - -0.2289960 - - 0.477 - -0.306 - - - - - 2002-07-28 - 52483 - - - 0.247105 - 0.000068 - 0.380774 - 0.000076 - - - -0.2286576 - 0.0000025 - -0.2460 - 0.0020 - - - -0.023 - 0.144 - -0.296 - 0.340 - - - - - 0.247190 - 0.380540 - - -0.2287050 - - 0.581 - -0.335 - - - - - 2002-07-29 - 52484 - - - 0.247628 - 0.000080 - 0.376992 - 0.000076 - - - -0.2284592 - 0.0000030 - -0.1638 - 0.0019 - - - -0.046 - 0.164 - -0.305 - 0.340 - - - - - 0.247690 - 0.376780 - - -0.2284900 - - 0.549 - -0.286 - - - - - 2002-07-30 - 52485 - - - 0.248468 - 0.000054 - 0.373301 - 0.000067 - - - -0.2283017 - 0.0000029 - -0.1664 - 0.0020 - - - -0.071 - 0.154 - -0.316 - 0.340 - - - - - 0.248530 - 0.373170 - - -0.2283280 - - 0.375 - -0.214 - - - - - 2002-07-31 - 52486 - - - 0.249775 - 0.000055 - 0.370024 - 0.000075 - - - -0.2281081 - 0.0000025 - -0.2239 - 0.0019 - - - -0.085 - 0.184 - -0.304 - 0.119 - - - - - 0.249840 - 0.369800 - - -0.2281490 - - 0.076 - -0.308 - - - - - 2002-08-01 - 52487 - - - 0.251203 - 0.000055 - 0.367030 - 0.000072 - - - -0.2278486 - 0.0000025 - -0.2971 - 0.0018 - - - -0.089 - 0.184 - -0.284 - 0.119 - - - - - 0.251250 - 0.366800 - - -0.2278600 - - -0.125 - -0.369 - - - - - 2002-08-02 - 52488 - - - 0.252217 - 0.000059 - 0.364292 - 0.000067 - - - -0.2275141 - 0.0000025 - -0.3695 - 0.0024 - - - -0.095 - 0.184 - -0.297 - 0.119 - - - - - 0.252240 - 0.364080 - - -0.2275160 - - -0.177 - -0.490 - - - - - 2002-08-03 - 52489 - - - 0.252959 - 0.000045 - 0.361730 - 0.000041 - - - -0.2270995 - 0.0000042 - -0.4721 - 0.0023 - - - -0.102 - 0.210 - -0.345 - 0.167 - - - - - 0.253020 - 0.361480 - - -0.2271160 - - 0.031 - -0.569 - - - - - 2002-08-04 - 52490 - - - 0.253929 - 0.000054 - 0.359162 - 0.000054 - - - -0.2265586 - 0.0000038 - -0.6086 - 0.0028 - - - -0.098 - 0.222 - -0.378 - 0.141 - - - - - 0.253980 - 0.358920 - - -0.2265870 - - 0.214 - -0.507 - - - - - 2002-08-05 - 52491 - - - 0.254933 - 0.000055 - 0.356507 - 0.000053 - - - -0.2258940 - 0.0000036 - -0.7100 - 0.0028 - - - -0.080 - 0.222 - -0.363 - 0.141 - - - - - 0.254980 - 0.356280 - - -0.2259130 - - 0.338 - -0.379 - - - - - 2002-08-06 - 52492 - - - 0.255641 - 0.000053 - 0.353601 - 0.000054 - - - -0.2251625 - 0.0000040 - -0.7398 - 0.0026 - - - -0.062 - 0.235 - -0.325 - 0.107 - - - - - 0.255770 - 0.353310 - - -0.2251650 - - 0.363 - -0.254 - - - - - 2002-08-07 - 52493 - - - 0.256734 - 0.000055 - 0.350412 - 0.000068 - - - -0.2244468 - 0.0000038 - -0.6723 - 0.0028 - - - -0.076 - 0.232 - -0.314 - 0.172 - - - - - 0.256720 - 0.350180 - - -0.2244500 - - 0.359 - -0.085 - - - - - 2002-08-08 - 52494 - - - 0.257866 - 0.000050 - 0.347592 - 0.000068 - - - -0.2238582 - 0.0000038 - -0.4837 - 0.0025 - - - -0.070 - 0.232 - -0.295 - 0.172 - - - - - 0.257930 - 0.347350 - - -0.2238700 - - 0.330 - 0.054 - - - - - 2002-08-09 - 52495 - - - 0.259021 - 0.000051 - 0.345085 - 0.000071 - - - -0.2235133 - 0.0000032 - -0.1934 - 0.0033 - - - -0.073 - 0.232 - -0.284 - 0.172 - - - - - 0.259060 - 0.344730 - - -0.2235210 - - 0.274 - -0.086 - - - - - 2002-08-10 - 52496 - - - 0.259889 - 0.000040 - 0.342435 - 0.000065 - - - -0.2234796 - 0.0000053 - 0.1214 - 0.0033 - - - -0.088 - 0.200 - -0.288 - 0.209 - - - - - 0.259930 - 0.342210 - - -0.2235000 - - 0.101 - -0.216 - - - - - 2002-08-11 - 52497 - - - 0.260395 - 0.000055 - 0.339874 - 0.000080 - - - -0.2237395 - 0.0000057 - 0.3863 - 0.0039 - - - -0.110 - 0.169 - -0.302 - 0.194 - - - - - 0.260430 - 0.339680 - - -0.2237760 - - -0.012 - -0.341 - - - - - 2002-08-12 - 52498 - - - 0.260501 - 0.000057 - 0.337026 - 0.000081 - - - -0.2242203 - 0.0000056 - 0.5554 - 0.0043 - - - -0.129 - 0.169 - -0.307 - 0.194 - - - - - 0.260510 - 0.336830 - - -0.2242470 - - -0.067 - -0.269 - - - - - 2002-08-13 - 52499 - - - 0.260695 - 0.000060 - 0.333828 - 0.000067 - - - -0.2247995 - 0.0000065 - 0.5720 - 0.0042 - - - -0.137 - 0.132 - -0.299 - 0.178 - - - - - 0.260660 - 0.333730 - - -0.2248020 - - -0.103 - -0.114 - - - - - 2002-08-14 - 52500 - - - 0.260836 - 0.000066 - 0.331041 - 0.000060 - - - -0.2253234 - 0.0000062 - 0.4658 - 0.0045 - - - -0.139 - 0.141 - -0.286 - 0.131 - - - - - 0.260880 - 0.330800 - - -0.2253290 - - -0.114 - -0.046 - - - - - 2002-08-15 - 52501 - - - 0.260782 - 0.000076 - 0.328349 - 0.000060 - - - -0.2257041 - 0.0000063 - 0.2786 - 0.0039 - - - -0.145 - 0.141 - -0.274 - 0.131 - - - - - 0.260800 - 0.328160 - - -0.2257190 - - -0.147 - -0.105 - - - - - 2002-08-16 - 52502 - - - 0.260548 - 0.000071 - 0.325779 - 0.000060 - - - -0.2258615 - 0.0000048 - 0.0340 - 0.0040 - - - -0.152 - 0.141 - -0.272 - 0.131 - - - - - 0.260590 - 0.325560 - - -0.2258670 - - -0.073 - -0.313 - - - - - 2002-08-17 - 52503 - - - 0.260237 - 0.000064 - 0.323157 - 0.000040 - - - -0.2257823 - 0.0000049 - -0.1799 - 0.0031 - - - -0.171 - 0.134 - -0.276 - 0.340 - - - - - 0.260270 - 0.322960 - - -0.2258040 - - 0.031 - -0.395 - - - - - 2002-08-18 - 52504 - - - 0.259736 - 0.000064 - 0.320468 - 0.000048 - - - -0.2255261 - 0.0000039 - -0.3204 - 0.0034 - - - -0.159 - 0.117 - -0.296 - 0.340 - - - - - 0.259760 - 0.320270 - - -0.2255640 - - 0.108 - -0.425 - - - - - 2002-08-19 - 52505 - - - 0.259114 - 0.000058 - 0.317728 - 0.000044 - - - -0.2251661 - 0.0000046 - -0.3871 - 0.0028 - - - -0.141 - 0.117 - -0.302 - 0.340 - - - - - 0.259100 - 0.317490 - - -0.2251930 - - 0.175 - -0.378 - - - - - 2002-08-20 - 52506 - - - 0.258511 - 0.000059 - 0.314902 - 0.000047 - - - -0.2247766 - 0.0000041 - -0.3797 - 0.0030 - - - -0.123 - 0.098 - -0.282 - 0.340 - - - - - 0.258500 - 0.314620 - - -0.2247810 - - 0.121 - -0.239 - - - - - 2002-08-21 - 52507 - - - 0.257802 - 0.000052 - 0.311902 - 0.000050 - - - -0.2244420 - 0.0000039 - -0.2664 - 0.0028 - - - -0.094 - 0.085 - -0.278 - 0.340 - - - - - 0.257860 - 0.311680 - - -0.2244460 - - 0.026 - -0.175 - - - - - 2002-08-22 - 52508 - - - 0.257209 - 0.000051 - 0.308816 - 0.000050 - - - -0.2242698 - 0.0000039 - -0.0752 - 0.0027 - - - -0.084 - 0.085 - -0.264 - 0.340 - - - - - 0.257220 - 0.308630 - - -0.2242690 - - -0.047 - -0.034 - - - - - 2002-08-23 - 52509 - - - 0.256800 - 0.000051 - 0.305568 - 0.000045 - - - -0.2242689 - 0.0000036 - 0.0478 - 0.0030 - - - -0.088 - 0.085 - -0.257 - 0.340 - - - - - 0.256760 - 0.305340 - - -0.2242730 - - -0.106 - -0.211 - - - - - 2002-08-24 - 52510 - - - 0.256230 - 0.000040 - 0.302257 - 0.000030 - - - -0.2243559 - 0.0000045 - 0.1422 - 0.0025 - - - -0.092 - 0.089 - -0.238 - 0.340 - - - - - 0.256260 - 0.302050 - - -0.2243560 - - -0.043 - -0.332 - - - - - 2002-08-25 - 52511 - - - 0.255531 - 0.000041 - 0.298857 - 0.000044 - - - -0.2245589 - 0.0000035 - 0.2534 - 0.0029 - - - -0.103 - 0.074 - -0.228 - 0.340 - - - - - 0.255550 - 0.298650 - - -0.2245560 - - 0.040 - -0.502 - - - - - 2002-08-26 - 52512 - - - 0.254866 - 0.000039 - 0.295352 - 0.000043 - - - -0.2248446 - 0.0000035 - 0.3102 - 0.0024 - - - -0.119 - 0.074 - -0.238 - 0.340 - - - - - 0.254880 - 0.295130 - - -0.2248520 - - 0.062 - -0.398 - - - - - 2002-08-27 - 52513 - - - 0.254471 - 0.000040 - 0.291896 - 0.000051 - - - -0.2251643 - 0.0000034 - 0.3218 - 0.0023 - - - -0.135 - 0.057 - -0.259 - 0.340 - - - - - 0.254570 - 0.291610 - - -0.2251720 - - 0.063 - -0.280 - - - - - 2002-08-28 - 52514 - - - 0.254537 - 0.000033 - 0.288635 - 0.000053 - - - -0.2254708 - 0.0000031 - 0.2811 - 0.0023 - - - -0.142 - 0.042 - -0.261 - 0.340 - - - - - 0.254600 - 0.288320 - - -0.2254850 - - -0.059 - -0.172 - - - - - 2002-08-29 - 52515 - - - 0.254527 - 0.000036 - 0.285578 - 0.000053 - - - -0.2257058 - 0.0000032 - 0.1784 - 0.0022 - - - -0.165 - 0.056 - -0.234 - 0.340 - - - - - 0.254560 - 0.285420 - - -0.2257490 - - -0.119 - -0.186 - - - - - 2002-08-30 - 52516 - - - 0.254099 - 0.000033 - 0.282491 - 0.000058 - - - -0.2258163 - 0.0000030 - 0.0419 - 0.0023 - - - -0.175 - 0.056 - -0.233 - 0.340 - - - - - 0.254150 - 0.282230 - - -0.2258220 - - -0.052 - -0.215 - - - - - 2002-08-31 - 52517 - - - 0.253553 - 0.000028 - 0.279374 - 0.000059 - - - -0.2257931 - 0.0000034 - -0.0841 - 0.0028 - - - -0.179 - 0.294 - -0.264 - 0.340 - - - - - 0.253570 - 0.279080 - - -0.2258010 - - 0.183 - -0.100 - - - - - 2002-09-01 - 52518 - - - 0.252764 - 0.000028 - 0.276238 - 0.000060 - - - -0.2256558 - 0.0000047 - -0.1871 - 0.0032 - - - -0.164 - 0.294 - -0.283 - 0.340 - - - - - 0.252800 - 0.276040 - - -0.2256610 - - 0.348 - 0.052 - - - - - 2002-09-02 - 52519 - - - 0.251586 - 0.000042 - 0.273037 - 0.000063 - - - -0.2254303 - 0.0000055 - -0.2560 - 0.0041 - - - -0.134 - 0.294 - -0.256 - 0.340 - - - - - 0.251620 - 0.272820 - - -0.2254090 - - 0.370 - -0.016 - - - - - 2002-09-03 - 52520 - - - 0.250137 - 0.000052 - 0.269871 - 0.000070 - - - -0.2251698 - 0.0000067 - -0.2468 - 0.0042 - - - -0.111 - 0.095 - -0.208 - 0.132 - - - - - 0.250140 - 0.269660 - - -0.2251190 - - 0.220 - -0.034 - - - - - 2002-09-04 - 52521 - - - 0.248961 - 0.000054 - 0.266858 - 0.000066 - - - -0.2249761 - 0.0000064 - -0.1192 - 0.0046 - - - -0.105 - 0.093 - -0.177 - 0.175 - - - - - 0.248990 - 0.266590 - - -0.2249760 - - 0.055 - -0.114 - - - - - 2002-09-05 - 52522 - - - 0.248311 - 0.000058 - 0.263842 - 0.000068 - - - -0.2249550 - 0.0000064 - 0.0792 - 0.0045 - - - -0.115 - 0.093 - -0.174 - 0.175 - - - - - 0.248290 - 0.263550 - - -0.2249850 - - -0.044 - -0.131 - - - - - 2002-09-06 - 52523 - - - 0.247366 - 0.000064 - 0.260875 - 0.000059 - - - -0.2251609 - 0.0000062 - 0.3568 - 0.0043 - - - -0.132 - 0.093 - -0.191 - 0.175 - - - - - 0.247480 - 0.260610 - - -0.2251690 - - -0.163 - -0.252 - - - - - 2002-09-07 - 52524 - - - 0.246210 - 0.000078 - 0.258210 - 0.000064 - - - -0.2256919 - 0.0000057 - 0.7042 - 0.0042 - - - -0.146 - 0.093 - -0.215 - 0.175 - - - - - 0.246250 - 0.257990 - - -0.2256930 - - -0.248 - -0.529 - - - - - 2002-09-08 - 52525 - - - 0.244631 - 0.000075 - 0.255840 - 0.000047 - - - -0.2265412 - 0.0000056 - 0.9673 - 0.0040 - - - -0.154 - 0.095 - -0.223 - 0.170 - - - - - 0.244650 - 0.255640 - - -0.2265270 - - -0.193 - -0.638 - - - - - 2002-09-09 - 52526 - - - 0.242771 - 0.000070 - 0.253383 - 0.000041 - - - -0.2275671 - 0.0000056 - 1.0521 - 0.0042 - - - -0.168 - 0.068 - -0.210 - 0.172 - - - - - 0.242770 - 0.253220 - - -0.2275570 - - -0.084 - -0.458 - - - - - 2002-09-10 - 52527 - - - 0.241044 - 0.000074 - 0.250758 - 0.000074 - - - -0.2285822 - 0.0000062 - 0.9474 - 0.0038 - - - -0.189 - 0.259 - -0.207 - 0.340 - - - - - 0.241050 - 0.250530 - - -0.2286070 - - -0.010 - -0.183 - - - - - 2002-09-11 - 52528 - - - 0.239280 - 0.000075 - 0.248209 - 0.000075 - - - -0.2294107 - 0.0000052 - 0.6893 - 0.0040 - - - -0.200 - 0.216 - -0.245 - 0.340 - - - - - 0.239380 - 0.247960 - - -0.2294510 - - -0.044 - -0.089 - - - - - 2002-09-12 - 52529 - - - 0.237450 - 0.000068 - 0.245625 - 0.000075 - - - -0.2299605 - 0.0000052 - 0.4304 - 0.0036 - - - -0.188 - 0.216 - -0.262 - 0.340 - - - - - 0.237550 - 0.245520 - - -0.2299690 - - -0.073 - -0.188 - - - - - 2002-09-13 - 52530 - - - 0.235735 - 0.000062 - 0.242963 - 0.000069 - - - -0.2302906 - 0.0000051 - 0.2288 - 0.0032 - - - -0.170 - 0.216 - -0.246 - 0.340 - - - - - 0.235820 - 0.242720 - - -0.2302950 - - -0.066 - -0.273 - - - - - 2002-09-14 - 52531 - - - 0.234203 - 0.000049 - 0.239879 - 0.000073 - - - -0.2304285 - 0.0000038 - 0.0584 - 0.0029 - - - -0.159 - 0.264 - -0.223 - 0.106 - - - - - 0.234230 - 0.239620 - - -0.2304410 - - -0.009 - -0.232 - - - - - 2002-09-15 - 52532 - - - 0.232880 - 0.000048 - 0.236991 - 0.000070 - - - -0.2304348 - 0.0000028 - -0.0298 - 0.0024 - - - -0.153 - 0.218 - -0.221 - 0.340 - - - - - 0.232900 - 0.236760 - - -0.2304400 - - 0.021 - -0.149 - - - - - 2002-09-16 - 52533 - - - 0.231674 - 0.000046 - 0.234716 - 0.000049 - - - -0.2303954 - 0.0000029 - -0.0383 - 0.0022 - - - -0.146 - 0.066 - -0.227 - 0.340 - - - - - 0.231690 - 0.234540 - - -0.2303880 - - 0.118 - -0.119 - - - - - 2002-09-17 - 52534 - - - 0.230142 - 0.000044 - 0.232788 - 0.000039 - - - -0.2303722 - 0.0000033 - -0.0046 - 0.0023 - - - -0.138 - 0.050 - -0.219 - 0.340 - - - - - 0.230150 - 0.232650 - - -0.2303780 - - 0.157 - -0.020 - - - - - 2002-09-18 - 52535 - - - 0.228000 - 0.000045 - 0.231029 - 0.000039 - - - -0.2303992 - 0.0000036 - 0.0681 - 0.0024 - - - -0.130 - 0.076 - -0.204 - 0.340 - - - - - 0.228000 - 0.230880 - - -0.2304330 - - 0.090 - -0.009 - - - - - 2002-09-19 - 52536 - - - 0.225300 - 0.000045 - 0.229334 - 0.000036 - - - -0.2305198 - 0.0000036 - 0.1751 - 0.0025 - - - -0.126 - 0.076 - -0.200 - 0.340 - - - - - 0.225360 - 0.229150 - - -0.2305380 - - 0.048 - 0.049 - - - - - 2002-09-20 - 52537 - - - 0.222324 - 0.000045 - 0.227361 - 0.000037 - - - -0.2307498 - 0.0000034 - 0.2835 - 0.0030 - - - -0.134 - 0.076 - -0.198 - 0.340 - - - - - 0.222380 - 0.227190 - - -0.2307560 - - 0.003 - -0.058 - - - - - 2002-09-21 - 52538 - - - 0.219443 - 0.000041 - 0.225147 - 0.000036 - - - -0.2310816 - 0.0000049 - 0.3763 - 0.0027 - - - -0.112 - 0.070 - -0.167 - 0.340 - - - - - 0.219440 - 0.224910 - - -0.2310880 - - 0.003 - -0.210 - - - - - 2002-09-22 - 52539 - - - 0.216753 - 0.000051 - 0.222885 - 0.000050 - - - -0.2314919 - 0.0000042 - 0.4375 - 0.0036 - - - -0.123 - 0.081 - -0.150 - 0.340 - - - - - 0.216770 - 0.222670 - - -0.2314890 - - 0.058 - -0.420 - - - - - 2002-09-23 - 52540 - - - 0.214376 - 0.000050 - 0.220545 - 0.000050 - - - -0.2319429 - 0.0000054 - 0.4577 - 0.0031 - - - -0.128 - 0.081 - -0.152 - 0.340 - - - - - 0.214380 - 0.220350 - - -0.2319350 - - 0.055 - -0.320 - - - - - 2002-09-24 - 52541 - - - 0.212108 - 0.000045 - 0.217930 - 0.000053 - - - -0.2323868 - 0.0000045 - 0.4166 - 0.0036 - - - -0.132 - 0.109 - -0.175 - 0.114 - - - - - 0.212310 - 0.217770 - - -0.2323930 - - 0.057 - -0.236 - - - - - 2002-09-25 - 52542 - - - 0.210460 - 0.000047 - 0.215629 - 0.000060 - - - -0.2327573 - 0.0000048 - 0.3192 - 0.0033 - - - -0.136 - 0.109 - -0.190 - 0.103 - - - - - 0.210510 - 0.215420 - - -0.2327630 - - 0.045 - -0.113 - - - - - 2002-09-26 - 52543 - - - 0.208775 - 0.000051 - 0.213283 - 0.000059 - - - -0.2330060 - 0.0000048 - 0.1643 - 0.0033 - - - -0.141 - 0.109 - -0.185 - 0.103 - - - - - 0.208750 - 0.213110 - - -0.2329580 - - 0.045 - -0.119 - - - - - 2002-09-27 - 52544 - - - 0.206783 - 0.000049 - 0.211025 - 0.000060 - - - -0.2331053 - 0.0000045 - 0.0676 - 0.0035 - - - -0.151 - 0.109 - -0.180 - 0.103 - - - - - 0.206800 - 0.210720 - - -0.2330990 - - 0.126 - -0.177 - - - - - 2002-09-28 - 52545 - - - 0.204753 - 0.000034 - 0.208654 - 0.000052 - - - -0.2331468 - 0.0000050 - -0.0121 - 0.0030 - - - -0.153 - 0.118 - -0.191 - 0.340 - - - - - 0.204730 - 0.208400 - - -0.2332060 - - 0.263 - -0.035 - - - - - 2002-09-29 - 52546 - - - 0.202685 - 0.000043 - 0.206071 - 0.000058 - - - -0.2330682 - 0.0000041 - -0.1304 - 0.0042 - - - -0.136 - 0.105 - -0.191 - 0.340 - - - - - 0.202690 - 0.205880 - - -0.2331410 - - 0.344 - 0.088 - - - - - 2002-09-30 - 52547 - - - 0.200600 - 0.000049 - 0.203370 - 0.000058 - - - -0.2329148 - 0.0000068 - -0.1624 - 0.0033 - - - -0.111 - 0.092 - -0.165 - 0.340 - - - - - 0.200580 - 0.203140 - - -0.2329430 - - 0.276 - 0.103 - - - - - 2002-10-01 - 52548 - - - 0.198438 - 0.000053 - 0.200628 - 0.000053 - - - -0.2327854 - 0.0000052 - -0.0683 - 0.0041 - - - -0.098 - 0.071 - -0.138 - 0.340 - - - - - 0.198520 - 0.200480 - - -0.2328000 - - 0.051 - -0.021 - - - - - 2002-10-02 - 52549 - - - 0.196572 - 0.000055 - 0.198282 - 0.000057 - - - -0.2328043 - 0.0000045 - 0.1040 - 0.0034 - - - -0.074 - 0.056 - -0.104 - 0.106 - - - - - 0.196610 - 0.198090 - - -0.2328330 - - -0.057 - -0.025 - - - - - 2002-10-03 - 52550 - - - 0.194667 - 0.000053 - 0.195878 - 0.000059 - - - -0.2330035 - 0.0000045 - 0.3065 - 0.0031 - - - -0.080 - 0.056 - -0.119 - 0.106 - - - - - 0.194670 - 0.195650 - - -0.2330330 - - -0.070 - 0.109 - - - - - 2002-10-04 - 52551 - - - 0.192460 - 0.000050 - 0.193650 - 0.000053 - - - -0.2334564 - 0.0000042 - 0.6264 - 0.0034 - - - -0.094 - 0.056 - -0.143 - 0.106 - - - - - 0.192520 - 0.193410 - - -0.2334550 - - -0.031 - 0.043 - - - - - 2002-10-05 - 52552 - - - 0.189862 - 0.000047 - 0.191557 - 0.000046 - - - -0.2342577 - 0.0000051 - 0.9507 - 0.0028 - - - -0.129 - 0.050 - -0.172 - 0.132 - - - - - 0.189930 - 0.191370 - - -0.2343080 - - 0.053 - -0.226 - - - - - 2002-10-06 - 52553 - - - 0.187321 - 0.000042 - 0.189487 - 0.000053 - - - -0.2353089 - 0.0000037 - 1.1285 - 0.0033 - - - -0.131 - 0.042 - -0.169 - 0.116 - - - - - 0.187340 - 0.189270 - - -0.2353840 - - 0.124 - -0.502 - - - - - 2002-10-07 - 52554 - - - 0.184959 - 0.000051 - 0.187380 - 0.000066 - - - -0.2364593 - 0.0000042 - 1.1403 - 0.0032 - - - -0.140 - 0.294 - -0.121 - 0.106 - - - - - 0.184980 - 0.187140 - - -0.2364880 - - 0.132 - -0.456 - - - - - 2002-10-08 - 52555 - - - 0.182530 - 0.000046 - 0.185194 - 0.000070 - - - -0.2375352 - 0.0000053 - 0.9893 - 0.0032 - - - -0.170 - 0.294 - -0.082 - 0.340 - - - - - 0.182620 - 0.184970 - - -0.2375410 - - -0.013 - -0.215 - - - - - 2002-10-09 - 52556 - - - 0.180044 - 0.000055 - 0.182859 - 0.000067 - - - -0.2384055 - 0.0000048 - 0.7411 - 0.0036 - - - -0.199 - 0.294 - -0.104 - 0.340 - - - - - 0.180170 - 0.182730 - - -0.2384380 - - -0.153 - -0.033 - - - - - 2002-10-10 - 52557 - - - 0.177944 - 0.000056 - 0.180860 - 0.000067 - - - -0.2390105 - 0.0000049 - 0.4723 - 0.0035 - - - -0.189 - 0.294 - -0.150 - 0.340 - - - - - 0.177910 - 0.180620 - - -0.2390100 - - -0.251 - -0.019 - - - - - 2002-10-11 - 52558 - - - 0.175532 - 0.000057 - 0.178926 - 0.000064 - - - -0.2393653 - 0.0000050 - 0.2493 - 0.0038 - - - -0.151 - 0.294 - -0.153 - 0.340 - - - - - 0.175550 - 0.178830 - - -0.2393640 - - -0.197 - -0.042 - - - - - 2002-10-12 - 52559 - - - 0.173134 - 0.000067 - 0.177075 - 0.000062 - - - -0.2395424 - 0.0000057 - 0.1262 - 0.0031 - - - -0.121 - 0.057 - -0.116 - 0.340 - - - - - 0.173160 - 0.176910 - - -0.2395600 - - -0.093 - 0.101 - - - - - 2002-10-13 - 52560 - - - 0.170921 - 0.000055 - 0.175251 - 0.000054 - - - -0.2396589 - 0.0000038 - 0.1265 - 0.0040 - - - -0.112 - 0.064 - -0.095 - 0.110 - - - - - 0.170950 - 0.175020 - - -0.2396870 - - -0.015 - 0.335 - - - - - 2002-10-14 - 52561 - - - 0.168489 - 0.000055 - 0.173594 - 0.000070 - - - -0.2398239 - 0.0000055 - 0.2121 - 0.0033 - - - -0.109 - 0.069 - -0.098 - 0.120 - - - - - 0.168490 - 0.173340 - - -0.2398360 - - 0.014 - 0.295 - - - - - 2002-10-15 - 52562 - - - 0.165860 - 0.000049 - 0.171716 - 0.000064 - - - -0.2400934 - 0.0000053 - 0.3284 - 0.0035 - - - -0.106 - 0.074 - -0.095 - 0.147 - - - - - 0.165930 - 0.171640 - - -0.2400990 - - 0.059 - 0.056 - - - - - 2002-10-16 - 52563 - - - 0.163392 - 0.000053 - 0.170315 - 0.000062 - - - -0.2404851 - 0.0000043 - 0.4578 - 0.0032 - - - -0.144 - 0.095 - -0.097 - 0.149 - - - - - 0.163530 - 0.170080 - - -0.2405390 - - -0.029 - -0.119 - - - - - 2002-10-17 - 52564 - - - 0.161191 - 0.000053 - 0.169052 - 0.000058 - - - -0.2410185 - 0.0000037 - 0.6158 - 0.0027 - - - -0.146 - 0.091 - -0.093 - 0.150 - - - - - 0.161140 - 0.168790 - - -0.2410910 - - -0.114 - -0.043 - - - - - 2002-10-18 - 52565 - - - 0.158403 - 0.000053 - 0.167996 - 0.000057 - - - -0.2416984 - 0.0000034 - 0.7188 - 0.0027 - - - -0.156 - 0.091 - -0.096 - 0.145 - - - - - 0.158390 - 0.167740 - - -0.2417050 - - -0.180 - 0.006 - - - - - 2002-10-19 - 52566 - - - 0.154531 - 0.000049 - 0.166880 - 0.000051 - - - -0.2424320 - 0.0000039 - 0.7493 - 0.0023 - - - -0.171 - 0.062 - -0.094 - 0.133 - - - - - 0.154650 - 0.166660 - - -0.2424460 - - -0.201 - -0.045 - - - - - 2002-10-20 - 52567 - - - 0.150252 - 0.000047 - 0.165587 - 0.000045 - - - -0.2431913 - 0.0000030 - 0.7626 - 0.0025 - - - -0.179 - 0.063 - -0.084 - 0.120 - - - - - 0.150440 - 0.165330 - - -0.2432310 - - -0.206 - -0.110 - - - - - 2002-10-21 - 52568 - - - 0.146618 - 0.000056 - 0.164051 - 0.000047 - - - -0.2439478 - 0.0000032 - 0.7479 - 0.0023 - - - -0.176 - 0.070 - -0.081 - 0.115 - - - - - 0.146600 - 0.163910 - - -0.2439770 - - -0.184 - -0.225 - - - - - 2002-10-22 - 52569 - - - 0.143155 - 0.000054 - 0.162771 - 0.000052 - - - -0.2446789 - 0.0000034 - 0.7088 - 0.0024 - - - -0.174 - 0.087 - -0.091 - 0.101 - - - - - 0.143220 - 0.162700 - - -0.2446860 - - -0.171 - -0.145 - - - - - 2002-10-23 - 52570 - - - 0.139895 - 0.000054 - 0.161489 - 0.000057 - - - -0.2453497 - 0.0000035 - 0.6228 - 0.0025 - - - -0.177 - 0.082 - -0.104 - 0.340 - - - - - 0.139950 - 0.161420 - - -0.2453520 - - -0.186 - 0.019 - - - - - 2002-10-24 - 52571 - - - 0.136562 - 0.000056 - 0.160226 - 0.000065 - - - -0.2459112 - 0.0000036 - 0.4971 - 0.0023 - - - -0.181 - 0.072 - -0.112 - 0.340 - - - - - 0.136600 - 0.159880 - - -0.2459250 - - -0.175 - 0.053 - - - - - 2002-10-25 - 52572 - - - 0.132966 - 0.000059 - 0.158548 - 0.000065 - - - -0.2463382 - 0.0000031 - 0.3545 - 0.0023 - - - -0.183 - 0.068 - -0.122 - 0.340 - - - - - 0.133050 - 0.158470 - - -0.2463450 - - -0.170 - -0.044 - - - - - 2002-10-26 - 52573 - - - 0.129486 - 0.000059 - 0.156867 - 0.000064 - - - -0.2466310 - 0.0000030 - 0.2445 - 0.0021 - - - -0.229 - 0.074 - -0.146 - 0.340 - - - - - 0.129500 - 0.156810 - - -0.2466280 - - -0.101 - -0.021 - - - - - 2002-10-27 - 52574 - - - 0.125833 - 0.000049 - 0.155376 - 0.000067 - - - -0.2468484 - 0.0000029 - 0.1982 - 0.0021 - - - -0.206 - 0.071 - -0.139 - 0.340 - - - - - 0.125880 - 0.155240 - - -0.2468390 - - -0.019 - 0.083 - - - - - 2002-10-28 - 52575 - - - 0.122284 - 0.000045 - 0.154200 - 0.000060 - - - -0.2470315 - 0.0000029 - 0.1641 - 0.0020 - - - -0.179 - 0.074 - -0.119 - 0.340 - - - - - 0.122280 - 0.153930 - - -0.2470170 - - -0.027 - 0.050 - - - - - 2002-10-29 - 52576 - - - 0.118736 - 0.000043 - 0.153060 - 0.000050 - - - -0.2472056 - 0.0000027 - 0.2170 - 0.0019 - - - -0.165 - 0.084 - -0.107 - 0.104 - - - - - 0.118900 - 0.152880 - - -0.2472120 - - -0.045 - 0.042 - - - - - 2002-10-30 - 52577 - - - 0.115385 - 0.000042 - 0.152330 - 0.000042 - - - -0.2475186 - 0.0000026 - 0.4292 - 0.0019 - - - -0.166 - 0.103 - -0.115 - 0.340 - - - - - 0.115420 - 0.152150 - - -0.2475260 - - -0.075 - -0.044 - - - - - 2002-10-31 - 52578 - - - 0.111561 - 0.000040 - 0.151635 - 0.000041 - - - -0.2480836 - 0.0000026 - 0.7003 - 0.0019 - - - -0.169 - 0.105 - -0.128 - 0.340 - - - - - 0.111560 - 0.151430 - - -0.2480760 - - -0.039 - -0.005 - - - - - 2002-11-01 - 52579 - - - 0.107463 - 0.000041 - 0.150907 - 0.000037 - - - -0.2489222 - 0.0000027 - 0.9806 - 0.0026 - - - -0.176 - 0.105 - -0.140 - 0.340 - - - - - 0.107540 - 0.150700 - - -0.2489260 - - -0.029 - -0.058 - - - - - 2002-11-02 - 52580 - - - 0.103558 - 0.000058 - 0.150174 - 0.000053 - - - -0.2500239 - 0.0000046 - 1.1983 - 0.0028 - - - -0.206 - 0.107 - -0.154 - 0.340 - - - - - 0.103570 - 0.149990 - - -0.2500350 - - -0.002 - -0.214 - - - - - 2002-11-03 - 52581 - - - 0.099870 - 0.000070 - 0.149567 - 0.000076 - - - -0.2512652 - 0.0000049 - 1.2554 - 0.0037 - - - -0.217 - 0.104 - -0.157 - 0.340 - - - - - 0.099910 - 0.149380 - - -0.2512750 - - 0.013 - -0.227 - - - - - 2002-11-04 - 52582 - - - 0.096370 - 0.000098 - 0.149109 - 0.000092 - - - -0.2524932 - 0.0000058 - 1.1882 - 0.0047 - - - -0.224 - 0.097 - -0.120 - 0.101 - - - - - 0.096410 - 0.148870 - - -0.2524980 - - 0.029 - -0.160 - - - - - 2002-11-05 - 52583 - - - 0.092461 - 0.000103 - 0.148266 - 0.000102 - - - -0.2535888 - 0.0000080 - 0.9627 - 0.0046 - - - -0.241 - 0.067 - -0.069 - 0.108 - - - - - 0.092750 - 0.148250 - - -0.2535730 - - -0.096 - 0.131 - - - - - 2002-11-06 - 52584 - - - 0.088996 - 0.000093 - 0.147750 - 0.000097 - - - -0.2544023 - 0.0000072 - 0.6882 - 0.0053 - - - -0.261 - 0.072 - -0.062 - 0.340 - - - - - 0.088800 - 0.147510 - - -0.2544100 - - -0.207 - 0.311 - - - - - 2002-11-07 - 52585 - - - 0.084740 - 0.000092 - 0.147025 - 0.000097 - - - -0.2549795 - 0.0000071 - 0.4567 - 0.0048 - - - -0.259 - 0.072 - -0.097 - 0.340 - - - - - 0.084780 - 0.146840 - - -0.2549740 - - -0.206 - 0.116 - - - - - 2002-11-08 - 52586 - - - 0.080612 - 0.000091 - 0.146352 - 0.000104 - - - -0.2553284 - 0.0000064 - 0.2633 - 0.0046 - - - -0.229 - 0.072 - -0.118 - 0.340 - - - - - 0.080700 - 0.146110 - - -0.2553240 - - -0.073 - -0.048 - - - - - 2002-11-09 - 52587 - - - 0.076660 - 0.000088 - 0.145583 - 0.000075 - - - -0.2555285 - 0.0000059 - 0.1369 - 0.0041 - - - -0.195 - 0.084 - -0.102 - 0.340 - - - - - 0.076660 - 0.145430 - - -0.2555430 - - 0.086 - 0.073 - - - - - 2002-11-10 - 52588 - - - 0.072799 - 0.000055 - 0.145055 - 0.000074 - - - -0.2556275 - 0.0000050 - 0.0863 - 0.0041 - - - -0.171 - 0.113 - -0.084 - 0.340 - - - - - 0.072840 - 0.144860 - - -0.2556750 - - 0.133 - 0.338 - - - - - 2002-11-11 - 52589 - - - 0.069211 - 0.000055 - 0.144695 - 0.000072 - - - -0.2557355 - 0.0000056 - 0.1388 - 0.0038 - - - -0.154 - 0.113 - -0.077 - 0.340 - - - - - 0.069250 - 0.144500 - - -0.2557700 - - 0.135 - 0.321 - - - - - 2002-11-12 - 52590 - - - 0.065872 - 0.000057 - 0.144423 - 0.000077 - - - -0.2559252 - 0.0000056 - 0.2514 - 0.0038 - - - -0.140 - 0.145 - -0.066 - 0.340 - - - - - 0.065950 - 0.144170 - - -0.2559250 - - 0.076 - 0.123 - - - - - 2002-11-13 - 52591 - - - 0.062938 - 0.000074 - 0.144033 - 0.000080 - - - -0.2562553 - 0.0000050 - 0.4149 - 0.0038 - - - -0.169 - 0.106 - -0.052 - 0.103 - - - - - 0.063020 - 0.143850 - - -0.2562560 - - 0.008 - -0.163 - - - - - 2002-11-14 - 52592 - - - 0.059969 - 0.000071 - 0.143890 - 0.000079 - - - -0.2567468 - 0.0000050 - 0.5539 - 0.0035 - - - -0.174 - 0.106 - -0.042 - 0.103 - - - - - 0.059990 - 0.143740 - - -0.2567520 - - -0.164 - -0.244 - - - - - 2002-11-15 - 52593 - - - 0.056312 - 0.000067 - 0.143857 - 0.000082 - - - -0.2573401 - 0.0000049 - 0.6238 - 0.0044 - - - -0.187 - 0.106 - -0.046 - 0.103 - - - - - 0.056470 - 0.143620 - - -0.2573380 - - -0.249 - -0.137 - - - - - 2002-11-16 - 52594 - - - 0.052991 - 0.000072 - 0.143837 - 0.000094 - - - -0.2579805 - 0.0000073 - 0.6522 - 0.0038 - - - -0.200 - 0.109 - -0.051 - 0.116 - - - - - 0.053070 - 0.143640 - - -0.2579920 - - -0.265 - -0.076 - - - - - 2002-11-17 - 52595 - - - 0.049739 - 0.000071 - 0.143788 - 0.000106 - - - -0.2586303 - 0.0000057 - 0.6382 - 0.0048 - - - -0.205 - 0.092 - -0.050 - 0.340 - - - - - 0.049760 - 0.143600 - - -0.2586500 - - -0.195 - 0.007 - - - - - 2002-11-18 - 52596 - - - 0.046274 - 0.000075 - 0.143347 - 0.000109 - - - -0.2592424 - 0.0000063 - 0.5806 - 0.0046 - - - -0.202 - 0.092 - -0.050 - 0.340 - - - - - 0.046290 - 0.143150 - - -0.2592520 - - -0.102 - -0.064 - - - - - 2002-11-19 - 52597 - - - 0.042676 - 0.000066 - 0.142687 - 0.000111 - - - -0.2597690 - 0.0000072 - 0.4556 - 0.0046 - - - -0.202 - 0.136 - -0.052 - 0.340 - - - - - 0.042760 - 0.142590 - - -0.2597580 - - -0.009 - -0.062 - - - - - 2002-11-20 - 52598 - - - 0.039031 - 0.000068 - 0.142263 - 0.000100 - - - -0.2601416 - 0.0000066 - 0.2946 - 0.0049 - - - -0.208 - 0.175 - -0.061 - 0.125 - - - - - 0.039060 - 0.142050 - - -0.2601350 - - 0.068 - -0.007 - - - - - 2002-11-21 - 52599 - - - 0.035651 - 0.000069 - 0.141828 - 0.000099 - - - -0.2603827 - 0.0000066 - 0.2072 - 0.0045 - - - -0.207 - 0.175 - -0.080 - 0.125 - - - - - 0.035610 - 0.141620 - - -0.2603750 - - 0.149 - -0.023 - - - - - 2002-11-22 - 52600 - - - 0.032390 - 0.000070 - 0.141622 - 0.000086 - - - -0.2605744 - 0.0000062 - 0.1752 - 0.0047 - - - -0.197 - 0.175 - -0.100 - 0.125 - - - - - 0.032530 - 0.141440 - - -0.2605540 - - 0.147 - -0.104 - - - - - 2002-11-23 - 52601 - - - 0.029463 - 0.000060 - 0.141888 - 0.000056 - - - -0.2607351 - 0.0000067 - 0.1493 - 0.0039 - - - -0.173 - 0.206 - -0.100 - 0.340 - - - - - 0.029500 - 0.141590 - - -0.2607550 - - 0.093 - -0.155 - - - - - 2002-11-24 - 52602 - - - 0.026286 - 0.000057 - 0.142102 - 0.000061 - - - -0.2608950 - 0.0000047 - 0.1894 - 0.0040 - - - -0.153 - 0.168 - -0.087 - 0.340 - - - - - 0.026290 - 0.141920 - - -0.2609170 - - -0.019 - -0.144 - - - - - 2002-11-25 - 52603 - - - 0.023154 - 0.000053 - 0.142255 - 0.000060 - - - -0.2611461 - 0.0000042 - 0.3263 - 0.0032 - -