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);
}
}
}
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));
}
Aggregations