Search in sources :

Example 6 with PartialDerivativesEquations

use of org.orekit.propagation.numerical.PartialDerivativesEquations in project Orekit by CS-SI.

the class AbstractForceModelTest method checkStateJacobian.

protected void checkStateJacobian(NumericalPropagator propagator, SpacecraftState state0, AbsoluteDate targetDate, double hFactor, double[] integratorAbsoluteTolerances, double checkTolerance) throws OrekitException {
    propagator.setInitialState(state0);
    double[][] reference = new double[][] { jacobianColumn(propagator, state0, targetDate, 0, hFactor * integratorAbsoluteTolerances[0]), jacobianColumn(propagator, state0, targetDate, 1, hFactor * integratorAbsoluteTolerances[1]), jacobianColumn(propagator, state0, targetDate, 2, hFactor * integratorAbsoluteTolerances[2]), jacobianColumn(propagator, state0, targetDate, 3, hFactor * integratorAbsoluteTolerances[3]), jacobianColumn(propagator, state0, targetDate, 4, hFactor * integratorAbsoluteTolerances[4]), jacobianColumn(propagator, state0, targetDate, 5, hFactor * integratorAbsoluteTolerances[5]) };
    for (int j = 0; j < 6; ++j) {
        for (int k = j + 1; k < 6; ++k) {
            double tmp = reference[j][k];
            reference[j][k] = reference[k][j];
            reference[k][j] = tmp;
        }
    }
    final String name = "pde";
    PartialDerivativesEquations pde = new PartialDerivativesEquations(name, propagator);
    propagator.setInitialState(pde.setInitialJacobians(state0));
    final JacobiansMapper mapper = pde.getMapper();
    final double[][] dYdY0 = new double[6][6];
    propagator.setMasterMode(new OrekitStepHandler() {

        public void handleStep(OrekitStepInterpolator interpolator, boolean isLast) throws OrekitException {
            if (isLast) {
                // pick up final Jacobian
                mapper.getStateJacobian(interpolator.getCurrentState(), dYdY0);
            }
        }
    });
    propagator.propagate(targetDate);
    for (int j = 0; j < 6; ++j) {
        for (int k = 0; k < 6; ++k) {
            double scale = integratorAbsoluteTolerances[j] / integratorAbsoluteTolerances[k];
            Assert.assertEquals(reference[j][k], dYdY0[j][k], checkTolerance * scale);
        }
    }
}
Also used : PartialDerivativesEquations(org.orekit.propagation.numerical.PartialDerivativesEquations) OrekitException(org.orekit.errors.OrekitException) JacobiansMapper(org.orekit.propagation.numerical.JacobiansMapper) OrekitStepHandler(org.orekit.propagation.sampling.OrekitStepHandler) OrekitStepInterpolator(org.orekit.propagation.sampling.OrekitStepInterpolator)

Example 7 with PartialDerivativesEquations

use of org.orekit.propagation.numerical.PartialDerivativesEquations in project Orekit by CS-SI.

the class IntegratedEphemerisTest method testPartialDerivativesIssue16.

@Test
public void testPartialDerivativesIssue16() throws OrekitException {
    final String eqName = "derivatives";
    numericalPropagator.setEphemerisMode();
    numericalPropagator.setOrbitType(OrbitType.CARTESIAN);
    final PartialDerivativesEquations derivatives = new PartialDerivativesEquations(eqName, numericalPropagator);
    final SpacecraftState initialState = derivatives.setInitialJacobians(new SpacecraftState(initialOrbit));
    final JacobiansMapper mapper = derivatives.getMapper();
    numericalPropagator.setInitialState(initialState);
    numericalPropagator.propagate(initialOrbit.getDate().shiftedBy(3600.0));
    BoundedPropagator ephemeris = numericalPropagator.getGeneratedEphemeris();
    ephemeris.setMasterMode(new OrekitStepHandler() {

        private final Array2DRowRealMatrix dYdY0 = new Array2DRowRealMatrix(6, 6);

        public void handleStep(OrekitStepInterpolator interpolator, boolean isLast) throws OrekitException {
            SpacecraftState state = interpolator.getCurrentState();
            Assert.assertEquals(mapper.getAdditionalStateDimension(), state.getAdditionalState(eqName).length);
            mapper.getStateJacobian(state, dYdY0.getDataRef());
            // no parameters, this is a no-op and should work
            mapper.getParametersJacobian(state, null);
            RealMatrix deltaId = dYdY0.subtract(MatrixUtils.createRealIdentityMatrix(6));
            Assert.assertTrue(deltaId.getNorm() > 100);
            Assert.assertTrue(deltaId.getNorm() < 3100);
        }
    });
    ephemeris.propagate(initialOrbit.getDate().shiftedBy(1800.0));
}
Also used : SpacecraftState(org.orekit.propagation.SpacecraftState) Array2DRowRealMatrix(org.hipparchus.linear.Array2DRowRealMatrix) RealMatrix(org.hipparchus.linear.RealMatrix) Array2DRowRealMatrix(org.hipparchus.linear.Array2DRowRealMatrix) PartialDerivativesEquations(org.orekit.propagation.numerical.PartialDerivativesEquations) OrekitException(org.orekit.errors.OrekitException) JacobiansMapper(org.orekit.propagation.numerical.JacobiansMapper) BoundedPropagator(org.orekit.propagation.BoundedPropagator) OrekitStepHandler(org.orekit.propagation.sampling.OrekitStepHandler) OrekitStepInterpolator(org.orekit.propagation.sampling.OrekitStepInterpolator) Test(org.junit.Test)

Aggregations

PartialDerivativesEquations (org.orekit.propagation.numerical.PartialDerivativesEquations)7 SpacecraftState (org.orekit.propagation.SpacecraftState)6 Test (org.junit.Test)3 OrekitException (org.orekit.errors.OrekitException)3 JacobiansMapper (org.orekit.propagation.numerical.JacobiansMapper)3 NumericalPropagator (org.orekit.propagation.numerical.NumericalPropagator)3 Vector3D (org.hipparchus.geometry.euclidean.threed.Vector3D)2 RealMatrix (org.hipparchus.linear.RealMatrix)2 DormandPrince853Integrator (org.hipparchus.ode.nonstiff.DormandPrince853Integrator)2 CartesianOrbit (org.orekit.orbits.CartesianOrbit)2 KeplerianOrbit (org.orekit.orbits.KeplerianOrbit)2 Orbit (org.orekit.orbits.Orbit)2 DateDetector (org.orekit.propagation.events.DateDetector)2 OrekitStepHandler (org.orekit.propagation.sampling.OrekitStepHandler)2 OrekitStepInterpolator (org.orekit.propagation.sampling.OrekitStepInterpolator)2 AbsoluteDate (org.orekit.time.AbsoluteDate)2 TimeStampedPVCoordinates (org.orekit.utils.TimeStampedPVCoordinates)2 FieldVector3D (org.hipparchus.geometry.euclidean.threed.FieldVector3D)1 Rotation (org.hipparchus.geometry.euclidean.threed.Rotation)1 Array2DRowRealMatrix (org.hipparchus.linear.Array2DRowRealMatrix)1