Commit 9b96b064 authored by Luc Maisonobe's avatar Luc Maisonobe
Browse files

Merge branch 'orekit-issue-1015' into develop

parents dcdb3086 f641409c
Pipeline #2896 passed with stages
in 37 minutes and 54 seconds
......@@ -20,8 +20,6 @@ import java.io.Serializable;
import java.util.stream.Stream;
import org.hipparchus.analysis.differentiation.UnivariateDerivative2;
import org.hipparchus.exception.LocalizedCoreFormats;
import org.hipparchus.exception.MathIllegalStateException;
import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
import org.hipparchus.geometry.euclidean.threed.Rotation;
import org.hipparchus.geometry.euclidean.threed.RotationConvention;
......@@ -71,6 +69,7 @@ import org.orekit.utils.TimeStampedPVCoordinates;
* @author Guylaine Prat
* @author Fabien Maussion
* @author Véronique Pommier-Maurussane
* @author Andrew Goetz
*/
public class CartesianOrbit extends Orbit {
......@@ -433,48 +432,49 @@ public class CartesianOrbit extends Orbit {
private PVCoordinates shiftPVElliptic(final double dt) {
// preliminary computation
final Vector3D pvP = getPosition();
final Vector3D pvV = getPVCoordinates().getVelocity();
final double r2 = pvP.getNormSq();
final double r = FastMath.sqrt(r2);
final double rV2OnMu = r * pvV.getNormSq() / getMu();
final double a = getA();
final double eSE = Vector3D.dotProduct(pvP, pvV) / FastMath.sqrt(getMu() * a);
final double eCE = rV2OnMu - 1;
final double e2 = eCE * eCE + eSE * eSE;
// we can use any arbitrary reference 2D frame in the orbital plane
// in order to simplify some equations below, we use the current position as the u axis
final Vector3D u = pvP.normalize();
final Vector3D v = Vector3D.crossProduct(getPVCoordinates().getMomentum(), u).normalize();
// the following equations rely on the specific choice of u explained above,
// some coefficients that vanish to 0 in this case have already been removed here
final double ex = (eCE - e2) * a / r;
final double ey = -FastMath.sqrt(1 - e2) * eSE * a / r;
final double beta = 1 / (1 + FastMath.sqrt(1 - e2));
final double thetaE0 = FastMath.atan2(ey + eSE * beta * ex, r / a + ex - eSE * beta * ey);
final SinCos scThetaE0 = FastMath.sinCos(thetaE0);
final double thetaM0 = thetaE0 - ex * scThetaE0.sin() + ey * scThetaE0.cos();
// compute in-plane shifted eccentric argument
final double thetaM1 = thetaM0 + getKeplerianMeanMotion() * dt;
final double thetaE1 = meanToEccentric(thetaM1, ex, ey);
final SinCos scTE = FastMath.sinCos(thetaE1);
final double cTE = scTE.cos();
final double sTE = scTE.sin();
final PVCoordinates pv = getPVCoordinates();
final Vector3D pvP = pv.getPosition();
final Vector3D pvV = pv.getVelocity();
final Vector3D pvM = pv.getMomentum();
final double r2 = pvP.getNormSq();
final double r = FastMath.sqrt(r2);
final double rV2OnMu = r * pvV.getNormSq() / getMu();
final double a = r / (2 - rV2OnMu);
final double muA = getMu() * a;
// compute mean anomaly
final double eSE = Vector3D.dotProduct(pvP, pvV) / FastMath.sqrt(muA);
final double eCE = rV2OnMu - 1;
final double E0 = FastMath.atan2(eSE, eCE);
final double M0 = E0 - eSE;
final double e = FastMath.sqrt(eCE * eCE + eSE * eSE);
final double sqrt = FastMath.sqrt((1 + e) / (1 - e));
// find canonical 2D frame with p pointing to perigee
final double v0 = 2 * FastMath.atan(sqrt * FastMath.tan(E0 / 2));
final Vector3D p = new Rotation(pvM, v0, RotationConvention.FRAME_TRANSFORM).applyTo(pvP).normalize();
final Vector3D q = Vector3D.crossProduct(pvM, p).normalize();
// compute shifted eccentric anomaly
final double M1 = M0 + getKeplerianMeanMotion() * dt;
final double E1 = KeplerianAnomalyUtility.ellipticMeanToEccentric(e, M1);
// compute shifted in-plane Cartesian coordinates
final double exey = ex * ey;
final double exCeyS = ex * cTE + ey * sTE;
final double x = a * ((1 - beta * ey * ey) * cTE + beta * exey * sTE - ex);
final double y = a * ((1 - beta * ex * ex) * sTE + beta * exey * cTE - ey);
final double factor = FastMath.sqrt(getMu() / a) / (1 - exCeyS);
final double xDot = factor * (-sTE + beta * ey * exCeyS);
final double yDot = factor * ( cTE - beta * ex * exCeyS);
final Vector3D shiftedP = new Vector3D(x, u, y, v);
final Vector3D shiftedV = new Vector3D(xDot, u, yDot, v);
final SinCos scE = FastMath.sinCos(E1);
final double cE = scE.cos();
final double sE = scE.sin();
final double sE2m1 = FastMath.sqrt((1 - e) * (1 + e));
// coordinates of position and velocity in the orbital plane
final double x = a * (cE - e);
final double y = a * sE2m1 * sE;
final double factor = FastMath.sqrt(getMu() / a) / (1 - e * cE);
final double xDot = -factor * sE;
final double yDot = factor * sE2m1 * cE;
final Vector3D shiftedP = new Vector3D(x, p, y, q);
final Vector3D shiftedV = new Vector3D(xDot, p, yDot, q);
if (hasNonKeplerianAcceleration) {
// extract non-Keplerian part of the initial acceleration
......@@ -574,43 +574,6 @@ public class CartesianOrbit extends Orbit {
}
/** Computes the eccentric in-plane argument from the mean in-plane argument.
* @param thetaM = mean in-plane argument (rad)
* @param ex first component of eccentricity vector
* @param ey second component of eccentricity vector
* @return the eccentric in-plane argument.
*/
private double meanToEccentric(final double thetaM, final double ex, final double ey) {
// Generalization of Kepler equation to in-plane parameters
// with thetaE = eta + E and
// thetaM = eta + M = thetaE - ex.sin(thetaE) + ey.cos(thetaE)
// and eta being counted from an arbitrary reference in the orbital plane
double thetaE = thetaM;
double thetaEMthetaM = 0.0;
int iter = 0;
do {
final SinCos scThetaE = FastMath.sinCos(thetaE);
final double f2 = ex * scThetaE.sin() - ey * scThetaE.cos();
final double f1 = 1.0 - ex * scThetaE.cos() - ey * scThetaE.sin();
final double f0 = thetaEMthetaM - f2;
final double f12 = 2.0 * f1;
final double shift = f0 * f12 / (f1 * f12 - f0 * f2);
thetaEMthetaM -= shift;
thetaE = thetaM + thetaEMthetaM;
if (FastMath.abs(shift) <= 1.0e-12) {
return thetaE;
}
} while (++iter < 50);
throw new MathIllegalStateException(LocalizedCoreFormats.CONVERGENCE_FAILED);
}
/** Create a 6x6 identity matrix.
* @return 6x6 identity matrix
*/
......
......@@ -23,8 +23,6 @@ import java.util.stream.Stream;
import org.hipparchus.CalculusFieldElement;
import org.hipparchus.Field;
import org.hipparchus.analysis.differentiation.FieldUnivariateDerivative2;
import org.hipparchus.exception.LocalizedCoreFormats;
import org.hipparchus.exception.MathIllegalStateException;
import org.hipparchus.geometry.euclidean.threed.FieldRotation;
import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
import org.hipparchus.geometry.euclidean.threed.RotationConvention;
......@@ -73,6 +71,7 @@ import org.orekit.utils.TimeStampedFieldPVCoordinates;
* @author Guylaine Prat
* @author Fabien Maussion
* @author V&eacute;ronique Pommier-Maurussane
* @author Andrew Goetz
* @since 9.0
*/
public class FieldCartesianOrbit<T extends CalculusFieldElement<T>> extends FieldOrbit<T> {
......@@ -463,48 +462,46 @@ public class FieldCartesianOrbit<T extends CalculusFieldElement<T>> extends Fiel
final FieldPVCoordinates<T> pva = getPVCoordinates();
final FieldVector3D<T> pvP = pva.getPosition();
final FieldVector3D<T> pvV = pva.getVelocity();
final T r2 = pvP.getNormSq();
final T r = r2.sqrt();
final T rV2OnMu = r.multiply(pvV.getNormSq()).divide(getMu());
final T a = r.divide(rV2OnMu.negate().add(2));
final T eSE = FieldVector3D.dotProduct(pvP, pvV).divide(a.multiply(getMu()).sqrt());
final T eCE = rV2OnMu.subtract(1);
final T e2 = eCE.multiply(eCE).add(eSE.multiply(eSE));
// we can use any arbitrary reference 2D frame in the orbital plane
// in order to simplify some equations below, we use the current position as the u axis
final FieldVector3D<T> u = pvP.normalize();
final FieldVector3D<T> v = FieldVector3D.crossProduct(FieldVector3D.crossProduct(pvP, pvV), u).normalize();
// the following equations rely on the specific choice of u explained above,
// some coefficients that vanish to 0 in this case have already been removed here
final T ex = eCE.subtract(e2).multiply(a).divide(r);
final T s = e2.negate().add(1).sqrt();
final T ey = s.negate().multiply(eSE).multiply(a).divide(r);
final T beta = s.add(1).reciprocal();
final T thetaE0 = ey.add(eSE.multiply(beta).multiply(ex)).atan2(r.divide(a).add(ex).subtract(eSE.multiply(beta).multiply(ey)));
final FieldSinCos<T> scThetaE0 = FastMath.sinCos(thetaE0);
final T thetaM0 = thetaE0.subtract(ex.multiply(scThetaE0.sin())).add(ey.multiply(scThetaE0.cos()));
// compute in-plane shifted eccentric argument
final T sqrtMmuOA = a.reciprocal().multiply(getMu()).sqrt();
final T thetaM1 = thetaM0.add(sqrtMmuOA.divide(a).multiply(dt));
final T thetaE1 = meanToEccentric(thetaM1, ex, ey);
final FieldSinCos<T> scTE = FastMath.sinCos(thetaE1);
final T cTE = scTE.cos();
final T sTE = scTE.sin();
final FieldVector3D<T> pvM = pva.getMomentum();
final T r2 = pvP.getNormSq();
final T r = r2.sqrt();
final T rV2OnMu = r.multiply(pvV.getNormSq()).divide(getMu());
final T a = r.divide(rV2OnMu.negate().add(2));
final T muA = getMu().multiply(a);
// compute mean anomaly
final T eSE = FieldVector3D.dotProduct(pvP, pvV).divide(muA.sqrt());
final T eCE = rV2OnMu.subtract(1);
final T E0 = FastMath.atan2(eSE, eCE);
final T M0 = E0.subtract(eSE);
final T e = eCE.multiply(eCE).add(eSE.multiply(eSE)).sqrt();
final T sqrt = e.add(1).divide(e.negate().add(1)).sqrt();
// find canonical 2D frame with p pointing to perigee
final T v0 = sqrt.multiply(FastMath.tan(E0.divide(2))).atan().multiply(2);
final FieldVector3D<T> p = new FieldRotation<>(pvM, v0, RotationConvention.FRAME_TRANSFORM).applyTo(pvP).normalize();
final FieldVector3D<T> q = FieldVector3D.crossProduct(pvM, p).normalize();
// compute shifted eccentric anomaly
final T M1 = M0.add(getKeplerianMeanMotion().multiply(dt));
final T E1 = FieldKeplerianAnomalyUtility.ellipticMeanToEccentric(e, M1);
// compute shifted in-plane Cartesian coordinates
final T exey = ex.multiply(ey);
final T exCeyS = ex.multiply(cTE).add(ey.multiply(sTE));
final T x = a.multiply(beta.multiply(ey).multiply(ey).negate().add(1).multiply(cTE).add(beta.multiply(exey).multiply(sTE)).subtract(ex));
final T y = a.multiply(beta.multiply(ex).multiply(ex).negate().add(1).multiply(sTE).add(beta.multiply(exey).multiply(cTE)).subtract(ey));
final T factor = sqrtMmuOA.divide(exCeyS.negate().add(1));
final T xDot = factor.multiply(beta.multiply(ey).multiply(exCeyS).subtract(sTE));
final T yDot = factor.multiply(cTE.subtract(beta.multiply(ex).multiply(exCeyS)));
final FieldVector3D<T> shiftedP = new FieldVector3D<>(x, u, y, v);
final FieldVector3D<T> shiftedV = new FieldVector3D<>(xDot, u, yDot, v);
final FieldSinCos<T> scE = FastMath.sinCos(E1);
final T cE = scE.cos();
final T sE = scE.sin();
final T sE2m1 = e.negate().add(1).multiply(e.add(1)).sqrt();
// coordinates of position and velocity in the orbital plane
final T x = a.multiply(cE.subtract(e));
final T y = a.multiply(sE2m1).multiply(sE);
final T factor = a.reciprocal().multiply(getMu()).sqrt().divide(e.multiply(cE).negate().add(1));
final T xDot = factor.multiply(sE).negate();
final T yDot = factor.multiply(sE2m1).multiply(cE);
final FieldVector3D<T> shiftedP = new FieldVector3D<>(x, p, y, q);
final FieldVector3D<T> shiftedV = new FieldVector3D<>(xDot, p, yDot, q);
if (hasNonKeplerianAcceleration) {
// extract non-Keplerian part of the initial acceleration
......@@ -604,43 +601,6 @@ public class FieldCartesianOrbit<T extends CalculusFieldElement<T>> extends Fiel
}
/** Computes the eccentric in-plane argument from the mean in-plane argument.
* @param thetaM = mean in-plane argument (rad)
* @param ex first component of eccentricity vector
* @param ey second component of eccentricity vector
* @return the eccentric in-plane argument.
*/
private T meanToEccentric(final T thetaM, final T ex, final T ey) {
// Generalization of Kepler equation to in-plane parameters
// with thetaE = eta + E and
// thetaM = eta + M = thetaE - ex.sin(thetaE) + ey.cos(thetaE)
// and eta being counted from an arbitrary reference in the orbital plane
T thetaE = thetaM;
T thetaEMthetaM = zero;
int iter = 0;
do {
final FieldSinCos<T> scThetaE = FastMath.sinCos(thetaE);
final T f2 = ex.multiply(scThetaE.sin()).subtract(ey.multiply(scThetaE.cos()));
final T f1 = one.subtract(ex.multiply(scThetaE.cos())).subtract(ey.multiply(scThetaE.sin()));
final T f0 = thetaEMthetaM.subtract(f2);
final T f12 = f1.multiply(2.0);
final T shift = f0.multiply(f12).divide(f1.multiply(f12).subtract(f0.multiply(f2)));
thetaEMthetaM = thetaEMthetaM.subtract(shift);
thetaE = thetaM.add(thetaEMthetaM);
if (FastMath.abs(shift.getReal()) <= 1.0e-12) {
return thetaE;
}
} while (++iter < 50);
throw new MathIllegalStateException(LocalizedCoreFormats.CONVERGENCE_FAILED);
}
/** Create a 6x6 identity matrix.
* @return 6x6 identity matrix
*/
......
......@@ -328,7 +328,7 @@ public class DragForceTest extends AbstractLegacyForceModelTest {
CelestialBodyFactory.getSun(), 20.0, Vector3D.PLUS_J,
1.2, 0.1, 0.7, 0.2));
checkParameterDerivative(state, forceModel, DragSensitive.DRAG_COEFFICIENT, 1.0e-4, 5.0e-13);
checkParameterDerivative(state, forceModel, DragSensitive.DRAG_COEFFICIENT, 1.0e-4, 2.0e-12);
checkParameterDerivative(state, forceModel, DragSensitive.LIFT_RATIO, 1.0e-4, 2.0e-11);
}
......@@ -353,7 +353,7 @@ public class DragForceTest extends AbstractLegacyForceModelTest {
CelestialBodyFactory.getSun(), 20.0, Vector3D.PLUS_J,
1.2, 0.1, 0.7, 0.2));
checkParameterDerivativeGradient(state, forceModel, DragSensitive.DRAG_COEFFICIENT, 1.0e-4, 5.0e-13);
checkParameterDerivativeGradient(state, forceModel, DragSensitive.DRAG_COEFFICIENT, 1.0e-4, 2.0e-12);
checkParameterDerivativeGradient(state, forceModel, DragSensitive.LIFT_RATIO, 1.0e-4, 2.0e-11);
}
......
......@@ -838,7 +838,7 @@ public class TimeSpanDragForceTest extends AbstractLegacyForceModelTest {
// Check parameter derivatives at initial date: only 1st model parameter derivatives shouldn't be 0.
checkParameterDerivative(state, forceModel, DragSensitive.DRAG_COEFFICIENT, 1.0e-4, 2.0e-12);
checkParameterDerivative(state, forceModel, DragSensitive.LIFT_RATIO, 1.0e-4, 2.0e-11);
checkParameterDerivative(state, forceModel, DragSensitive.LIFT_RATIO, 1.0e-4, 2.2e-11);
checkParameterDerivative(state, forceModel, "Cd2", 1.0e-4, 0.);
checkParameterDerivative(state, forceModel, "Cl2", 1.0e-4, 0.);
checkParameterDerivative(state, forceModel, "Cd3", 1.0e-4, 0.);
......@@ -926,7 +926,7 @@ public class TimeSpanDragForceTest extends AbstractLegacyForceModelTest {
// Check parameter derivatives at initial date: only 1st model parameter derivatives shouldn't be 0.
checkParameterDerivativeGradient(state, forceModel, DragSensitive.DRAG_COEFFICIENT, 1.0e-4, 2.0e-12);
checkParameterDerivativeGradient(state, forceModel, DragSensitive.LIFT_RATIO, 1.0e-4, 2.0e-11);
checkParameterDerivativeGradient(state, forceModel, DragSensitive.LIFT_RATIO, 1.0e-4, 2.2e-11);
checkParameterDerivativeGradient(state, forceModel, "Cd2", 1.0e-4, 0.);
checkParameterDerivativeGradient(state, forceModel, "Cl2", 1.0e-4, 0.);
checkParameterDerivativeGradient(state, forceModel, "Cd3", 1.0e-4, 0.);
......
......@@ -535,7 +535,7 @@ public class SolarRadiationPressureTest extends AbstractLegacyForceModelTest {
new BoxAndSolarArraySpacecraft(1.5, 2.0, 1.8, CelestialBodyFactory.getSun(), 20.0,
Vector3D.PLUS_J, 1.2, 0.7, 0.2));
checkParameterDerivative(state, forceModel, RadiationSensitive.ABSORPTION_COEFFICIENT, 0.25, 1.9e-15);
checkParameterDerivative(state, forceModel, RadiationSensitive.ABSORPTION_COEFFICIENT, 0.25, 2.1e-15);
checkParameterDerivative(state, forceModel, RadiationSensitive.REFLECTION_COEFFICIENT, 0.25, 6.9e-15);
}
......@@ -559,7 +559,7 @@ public class SolarRadiationPressureTest extends AbstractLegacyForceModelTest {
new BoxAndSolarArraySpacecraft(1.5, 2.0, 1.8, CelestialBodyFactory.getSun(), 20.0,
Vector3D.PLUS_J, 1.2, 0.7, 0.2));
checkParameterDerivativeGradient(state, forceModel, RadiationSensitive.ABSORPTION_COEFFICIENT, 0.25, 1.9e-15);
checkParameterDerivativeGradient(state, forceModel, RadiationSensitive.ABSORPTION_COEFFICIENT, 0.25, 2.1e-15);
checkParameterDerivativeGradient(state, forceModel, RadiationSensitive.REFLECTION_COEFFICIENT, 0.25, 6.9e-10);
}
......
......@@ -23,17 +23,17 @@ public class BeidouGeoTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargeNegativeBeta() {
doTestAxes("patched-eclips/beta-large-negative-BEIDOU-2G.txt", 6.4e-15, 6.3e-16, false);
doTestAxes("patched-eclips/beta-large-negative-BEIDOU-2G.txt", 6.6e-15, 6.7e-16, false);
}
@Test
public void testPatchedSmallNegativeBeta() {
doTestAxes("patched-eclips/beta-small-negative-BEIDOU-2G.txt", 8.0e-15, 7.4e-16, false);
doTestAxes("patched-eclips/beta-small-negative-BEIDOU-2G.txt", 8.0e-15, 8.3e-16, false);
}
@Test
public void testPatchedCrossingBeta() {
doTestAxes("patched-eclips/beta-crossing-BEIDOU-2G.txt", 6.2e-15, 5.8e-16, false);
doTestAxes("patched-eclips/beta-crossing-BEIDOU-2G.txt", 6.2e-15, 8.6e-16, false);
}
@Test
......@@ -43,17 +43,17 @@ public class BeidouGeoTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testOriginalLargeNegativeBeta() {
doTestAxes("original-eclips/beta-large-negative-BEIDOU-2G.txt", 7.6e-4, 6.3e-16, false);
doTestAxes("original-eclips/beta-large-negative-BEIDOU-2G.txt", 7.6e-4, 6.7e-16, false);
}
@Test
public void testOriginalSmallNegativeBeta() {
doTestAxes("original-eclips/beta-small-negative-BEIDOU-2G.txt", 5.0e-4, 7.4e-16, false);
doTestAxes("original-eclips/beta-small-negative-BEIDOU-2G.txt", 5.0e-4, 8.6e-16, false);
}
@Test
public void testOriginalCrossingBeta() {
doTestAxes("original-eclips/beta-crossing-BEIDOU-2G.txt", 9.0e-4, 5.8e-16, false);
doTestAxes("original-eclips/beta-crossing-BEIDOU-2G.txt", 9.0e-4, 8.6e-16, false);
}
@Test
......
......@@ -23,12 +23,12 @@ public class BeidouIGSOTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargeNegativeBeta() {
doTestAxes("patched-eclips/beta-large-negative-BEIDOU-2I.txt", 7.7e-15, 9.5e-16, false);
doTestAxes("patched-eclips/beta-large-negative-BEIDOU-2I.txt", 7.8e-15, 1.1e-15, false);
}
@Test
public void testPatchedSmallNegativeBeta() {
doTestAxes("patched-eclips/beta-small-negative-BEIDOU-2I.txt", 7.7e-15, 5.0e-16, false);
doTestAxes("patched-eclips/beta-small-negative-BEIDOU-2I.txt", 8.1e-15, 9.3e-16, false);
}
@Test
......@@ -38,17 +38,17 @@ public class BeidouIGSOTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargePositiveBeta() {
doTestAxes("patched-eclips/beta-large-positive-BEIDOU-2I.txt", 7.8e-15, 1.2e-15, false);
doTestAxes("patched-eclips/beta-large-positive-BEIDOU-2I.txt", 7.9e-15, 1.2e-15, false);
}
@Test
public void testOriginalLargeNegativeBeta() {
doTestAxes("original-eclips/beta-large-negative-BEIDOU-2I.txt", 7.7e-15, 9.5e-16, false);
doTestAxes("original-eclips/beta-large-negative-BEIDOU-2I.txt", 7.8e-15, 1.1e-15, false);
}
@Test
public void testOriginalSmallNegativeBeta() {
doTestAxes("original-eclips/beta-small-negative-BEIDOU-2I.txt", 3.9e-3, 5.0e-16, false);
doTestAxes("original-eclips/beta-small-negative-BEIDOU-2I.txt", 3.9e-3, 9.3e-16, false);
}
@Test
......@@ -58,7 +58,7 @@ public class BeidouIGSOTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testOriginalLargePositiveBeta() {
doTestAxes("original-eclips/beta-large-positive-BEIDOU-2I.txt", 7.8e-15, 1.2e-15, false);
doTestAxes("original-eclips/beta-large-positive-BEIDOU-2I.txt", 7.9e-15, 1.2e-15, false);
}
}
......@@ -22,42 +22,42 @@ public class BeidouMeoTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargeNegativeBeta() {
doTestAxes("patched-eclips/beta-large-negative-BEIDOU-2M.txt", 8.8e-15, 7.3e-16, false);
doTestAxes("patched-eclips/beta-large-negative-BEIDOU-2M.txt", 9.2e-15, 1.1e-15, false);
}
@Test
public void testPatchedSmallNegativeBeta() {
doTestAxes("patched-eclips/beta-small-negative-BEIDOU-2M.txt", 7.7e-15, 7.0e-16, false);
doTestAxes("patched-eclips/beta-small-negative-BEIDOU-2M.txt", 7.7e-15, 9.4e-16, false);
}
@Test
public void testPatchedSmallPositiveBeta() {
doTestAxes("patched-eclips/beta-small-positive-BEIDOU-2M.txt", 7.9e-15, 4.3e-16, false);
doTestAxes("patched-eclips/beta-small-positive-BEIDOU-2M.txt", 8.1e-15, 7.8e-16, false);
}
@Test
public void testPatchedLargePositiveBeta() {
doTestAxes("patched-eclips/beta-large-positive-BEIDOU-2M.txt", 8.4e-15, 6.5e-16, false);
doTestAxes("patched-eclips/beta-large-positive-BEIDOU-2M.txt", 8.4e-15, 1.1e-15, false);
}
@Test
public void testOriginalLargeNegativeBeta() {
doTestAxes("original-eclips/beta-large-negative-BEIDOU-2M.txt", 8.8e-15, 7.3e-16, false);
doTestAxes("original-eclips/beta-large-negative-BEIDOU-2M.txt", 9.2e-15, 1.1e-15, false);
}
@Test
public void testOriginalSmallNegativeBeta() {
doTestAxes("original-eclips/beta-small-negative-BEIDOU-2M.txt", 2.2e-3, 6.5e-16, false);
doTestAxes("original-eclips/beta-small-negative-BEIDOU-2M.txt", 2.2e-3, 9.4e-16, false);
}
@Test
public void testOriginalSmallPositiveBeta() {
doTestAxes("original-eclips/beta-small-positive-BEIDOU-2M.txt", 2.7e-3, 3.6e-16, false);
doTestAxes("original-eclips/beta-small-positive-BEIDOU-2M.txt", 2.7e-3, 7.8e-16, false);
}
@Test
public void testOriginalLargePositiveBeta() {
doTestAxes("original-eclips/beta-large-positive-BEIDOU-2M.txt", 8.4e-15, 6.5e-16, false);
doTestAxes("original-eclips/beta-large-positive-BEIDOU-2M.txt", 8.4e-15, 1.1e-15, false);
}
}
......@@ -23,17 +23,17 @@ public class GPSBlockIIATest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargeNegativeBeta() {
doTestAxes("patched-eclips/beta-large-negative-BLOCK-IIA.txt", 6.1e-15, 4.5e-16, false);
doTestAxes("patched-eclips/beta-large-negative-BLOCK-IIA.txt", 6.1e-15, 8.7e-16, false);
}
@Test
public void testPatchedSmallNegativeBeta() {
doTestAxes("patched-eclips/beta-small-negative-BLOCK-IIA.txt", 5.1e-6, 6.1e-16, false);
doTestAxes("patched-eclips/beta-small-negative-BLOCK-IIA.txt", 5.1e-6, 1.2e-15, false);
}
@Test
public void testPatchedCrossingBeta() {
doTestAxes("patched-eclips/beta-crossing-BLOCK-IIA.txt", 5.2e-4, 7.7e-16, false);
doTestAxes("patched-eclips/beta-crossing-BLOCK-IIA.txt", 5.2e-4, 8.3e-16, false);
}
@Test
......@@ -43,17 +43,17 @@ public class GPSBlockIIATest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargePositiveBeta() {
doTestAxes("patched-eclips/beta-large-positive-BLOCK-IIA.txt", 7.0e-15, 8.0e-16, false);
doTestAxes("patched-eclips/beta-large-positive-BLOCK-IIA.txt", 7.2e-15, 8.8e-16, false);
}
@Test
public void testOriginalLargeNegativeBeta() {
doTestAxes("original-eclips/beta-large-negative-BLOCK-IIA.txt", 6.1e-15, 4.5e-16, false);
doTestAxes("original-eclips/beta-large-negative-BLOCK-IIA.txt", 6.1e-15, 8.7e-16, false);
}
@Test
public void testOriginalSmallNegativeBeta() {
doTestAxes("original-eclips/beta-small-negative-BLOCK-IIA.txt", 1.2e-3, 6.1e-16, false);
doTestAxes("original-eclips/beta-small-negative-BLOCK-IIA.txt", 1.2e-3, 1.2e-15, false);
}
@Test
......@@ -84,7 +84,7 @@ public class GPSBlockIIATest extends AbstractGNSSAttitudeProviderTest {
// As a conclusion, we consider here that the reference output is wrong and that
// Orekit behaviour is correct, so we increased the threshold so the test pass,
// and wrote this big comment to explain the situation
doTestAxes("original-eclips/beta-crossing-BLOCK-IIA.txt", 2.13, 7.7e-16, false);
doTestAxes("original-eclips/beta-crossing-BLOCK-IIA.txt", 2.13, 8.3e-16, false);
}
@Test
......@@ -94,7 +94,7 @@ public class GPSBlockIIATest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testOriginalLargePositiveBeta() {
doTestAxes("original-eclips/beta-large-positive-BLOCK-IIA.txt", 7.0e-15, 8.0e-16, false);
doTestAxes("original-eclips/beta-large-positive-BLOCK-IIA.txt", 7.2e-15, 8.8e-16, false);
}
}
......@@ -23,7 +23,7 @@ public class GPSBlockIIFTest extends AbstractGNSSAttitudeProviderTest {
@Test
public void testPatchedLargeNegativeBeta() {
doTestAxes("patched-eclips/beta-large-negative-BLOCK-IIF.txt", 6.7e-15, 7.6e-16, false);
doTestAxes("patched-eclips/beta-large-negative-BLOCK-IIF.txt", 6.8e-15, 7.6e-16, false);
}