Example usage for org.apache.commons.math3.ode.nonstiff DormandPrince853Integrator DormandPrince853Integrator

List of usage examples for org.apache.commons.math3.ode.nonstiff DormandPrince853Integrator DormandPrince853Integrator

Introduction

In this page you can find the example usage for org.apache.commons.math3.ode.nonstiff DormandPrince853Integrator DormandPrince853Integrator.

Prototype

public DormandPrince853Integrator(final double minStep, final double maxStep,
        final double[] vecAbsoluteTolerance, final double[] vecRelativeTolerance) 

Source Link

Document

Simple constructor.

Usage

From source file:org.orekit.forces.gravity.CunninghamAttractionModelTest.java

private BoundedPropagator createEphemeris(double dP, SpacecraftState initialState, double duration,
        UnnormalizedSphericalHarmonicsProvider provider) throws OrekitException {
    double[][] tol = NumericalPropagator.tolerances(dP, initialState.getOrbit(), OrbitType.CARTESIAN);
    AbstractIntegrator integrator = new DormandPrince853Integrator(0.001, 120.0, tol[0], tol[1]);
    NumericalPropagator propagator = new NumericalPropagator(integrator);
    propagator.setEphemerisMode();/*w  ww.ja va  2  s.  c o  m*/
    propagator.setOrbitType(OrbitType.CARTESIAN);
    propagator.addForceModel(
            new CunninghamAttractionModel(FramesFactory.getITRF(IERSConventions.IERS_2010, true), provider));
    propagator.setInitialState(initialState);
    propagator.propagate(initialState.getDate().shiftedBy(duration));
    return propagator.getGeneratedEphemeris();
}

From source file:org.orekit.forces.gravity.CunninghamAttractionModelTest.java

@Test
public void testStateJacobian() throws OrekitException {

    Utils.setDataRoot("regular-data:potential/grgs-format");
    GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(2000, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN,
            FramesFactory.getEME2000(), date, mu);
    OrbitType integrationType = OrbitType.CARTESIAN;
    double[][] tolerances = NumericalPropagator.tolerances(0.01, orbit, integrationType);

    propagator = new NumericalPropagator(
            new DormandPrince853Integrator(1.0e-3, 120, tolerances[0], tolerances[1]));
    propagator.setOrbitType(integrationType);
    CunninghamAttractionModel cuModel = new CunninghamAttractionModel(itrf2008,
            GravityFieldFactory.getUnnormalizedProvider(50, 50));
    Assert.assertEquals(TideSystem.UNKNOWN, cuModel.getTideSystem());
    propagator.addForceModel(cuModel);//from ww w .  j a va  2s.  c o m
    SpacecraftState state0 = new SpacecraftState(orbit);
    propagator.setInitialState(state0);
    try {
        DerivativeStructure one = new DerivativeStructure(7, 1, 1.0);
        cuModel.accelerationDerivatives(state0.getDate(), state0.getFrame(),
                new FieldVector3D<DerivativeStructure>(one, state0.getPVCoordinates().getPosition()),
                new FieldVector3D<DerivativeStructure>(one, state0.getPVCoordinates().getVelocity()),
                new FieldRotation<DerivativeStructure>(one.multiply(state0.getAttitude().getRotation().getQ0()),
                        one.multiply(state0.getAttitude().getRotation().getQ1()),
                        one.multiply(state0.getAttitude().getRotation().getQ2()),
                        one.multiply(state0.getAttitude().getRotation().getQ3()), false),
                one.multiply(state0.getMass()));
        Assert.fail("an exception should have been thrown");
    } catch (OrekitException oe) {
        Assert.assertEquals(OrekitMessages.STEPS_NOT_INITIALIZED_FOR_FINITE_DIFFERENCES, oe.getSpecifier());
    }
    cuModel.setSteps(1.0, 1.0e10);

    checkStateJacobian(propagator, state0, date.shiftedBy(3.5 * 3600.0), 40000, tolerances[0], 2.0e-7);
}

From source file:org.orekit.forces.gravity.CunninghamAttractionModelTest.java

@Before
public void setUp() {
    itrf2008 = null;//from  www.j a v a2  s.  c  o  m
    propagator = null;
    Utils.setDataRoot("regular-data");
    try {
        // Eigen c1 model truncated to degree 6
        mu = 3.986004415e+14;
        ae = 6378136.460;
        c20 = -1.08262631303e-3;
        c30 = 2.53248017972e-6;
        c40 = 1.61994537014e-6;
        c50 = 2.27888264414e-7;
        c60 = -5.40618601332e-7;

        itrf2008 = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
        double[] absTolerance = { 0.001, 1.0e-9, 1.0e-9, 1.0e-6, 1.0e-6, 1.0e-6, 0.001 };
        double[] relTolerance = { 1.0e-7, 1.0e-4, 1.0e-4, 1.0e-7, 1.0e-7, 1.0e-7, 1.0e-7 };
        AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(0.001, 1000, absTolerance,
                relTolerance);
        integrator.setInitialStepSize(60);
        propagator = new NumericalPropagator(integrator);
    } catch (OrekitException oe) {
        Assert.fail(oe.getMessage());
    }
}

From source file:org.orekit.forces.gravity.DrozinerAttractionModelTest.java

@Test
public void testStateJacobian() throws OrekitException {

    Utils.setDataRoot("regular-data:potential/grgs-format");
    GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(2000, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN,
            FramesFactory.getEME2000(), date, mu);
    OrbitType integrationType = OrbitType.CARTESIAN;
    double[][] tolerances = NumericalPropagator.tolerances(0.01, orbit, integrationType);

    propagator = new NumericalPropagator(
            new DormandPrince853Integrator(1.0e-3, 120, tolerances[0], tolerances[1]));
    propagator.setOrbitType(integrationType);
    DrozinerAttractionModel drModel = new DrozinerAttractionModel(itrf2008,
            GravityFieldFactory.getUnnormalizedProvider(50, 50));
    Assert.assertEquals(TideSystem.UNKNOWN, drModel.getTideSystem());
    propagator.addForceModel(drModel);/*from  w  w  w. j a v  a  2 s . c  o  m*/
    SpacecraftState state0 = new SpacecraftState(orbit);
    propagator.setInitialState(state0);
    try {
        DerivativeStructure one = new DerivativeStructure(7, 1, 1.0);
        drModel.accelerationDerivatives(state0.getDate(), state0.getFrame(),
                new FieldVector3D<DerivativeStructure>(one, state0.getPVCoordinates().getPosition()),
                new FieldVector3D<DerivativeStructure>(one, state0.getPVCoordinates().getVelocity()),
                new FieldRotation<DerivativeStructure>(one.multiply(state0.getAttitude().getRotation().getQ0()),
                        one.multiply(state0.getAttitude().getRotation().getQ1()),
                        one.multiply(state0.getAttitude().getRotation().getQ2()),
                        one.multiply(state0.getAttitude().getRotation().getQ3()), false),
                one.multiply(state0.getMass()));
        Assert.fail("an exception should have been thrown");
    } catch (OrekitException oe) {
        Assert.assertEquals(OrekitMessages.STEPS_NOT_INITIALIZED_FOR_FINITE_DIFFERENCES, oe.getSpecifier());
    }
    drModel.setSteps(1.0, 1.0e10);

    checkStateJacobian(propagator, state0, date.shiftedBy(3.5 * 3600.0), 40000, tolerances[0], 2.0e-7);

}

From source file:org.orekit.forces.gravity.DrozinerAttractionModelTest.java

@Before
public void setUp() {
    itrf2008 = null;//from  ww w. j av a 2 s.  c o m
    propagator = null;
    Utils.setDataRoot("regular-data");
    try {
        mu = 3.986004415e+14;
        ae = 6378136.460;
        c20 = -1.08262631303e-3;
        c30 = 2.53248017972e-6;
        c40 = 1.61994537014e-6;
        c50 = 2.27888264414e-7;
        c60 = -5.40618601332e-7;
        itrf2008 = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
        double[] absTolerance = { 0.001, 1.0e-9, 1.0e-9, 1.0e-6, 1.0e-6, 1.0e-6, 0.001 };
        double[] relTolerance = { 1.0e-7, 1.0e-4, 1.0e-4, 1.0e-7, 1.0e-7, 1.0e-7, 1.0e-7 };
        AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(0.001, 1000, absTolerance,
                relTolerance);
        integrator.setInitialStepSize(60);
        propagator = new NumericalPropagator(integrator);

    } catch (OrekitException oe) {
        Assert.fail(oe.getMessage());
    }
}

From source file:org.orekit.forces.gravity.HolmesFeatherstoneAttractionModelTest.java

@Test
public void testCompleteWithCunninghamReference() throws OrekitException {

    Utils.setDataRoot("regular-data:potential/grgs-format");
    GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(2000, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN,
            FramesFactory.getEME2000(), date, mu);
    double[][] tolerances = NumericalPropagator.tolerances(0.01, orbit, OrbitType.CARTESIAN);
    AbsoluteDate targetDate = date.shiftedBy(3 * Constants.JULIAN_DAY);

    propagator = new NumericalPropagator(
            new DormandPrince853Integrator(1.0e-3, 120, tolerances[0], tolerances[1]));
    propagator.setOrbitType(OrbitType.CARTESIAN);
    propagator.addForceModel(/*from ww  w  .  j a  v a  2  s  .  c  om*/
            new HolmesFeatherstoneAttractionModel(itrf, GravityFieldFactory.getNormalizedProvider(69, 69)));

    propagator.setInitialState(new SpacecraftState(orbit));
    SpacecraftState hfOrb = propagator.propagate(targetDate);

    propagator.removeForceModels();

    propagator.addForceModel(
            new CunninghamAttractionModel(itrf, GravityFieldFactory.getUnnormalizedProvider(69, 69)));

    propagator.setInitialState(new SpacecraftState(orbit));
    SpacecraftState cOrb = propagator.propagate(targetDate);

    Vector3D dif = hfOrb.getPVCoordinates().getPosition().subtract(cOrb.getPVCoordinates().getPosition());
    Assert.assertEquals(0, dif.getNorm(), 4e-5);
}

From source file:org.orekit.forces.gravity.HolmesFeatherstoneAttractionModelTest.java

private BoundedPropagator createEphemeris(double dP, SpacecraftState initialState, double duration,
        NormalizedSphericalHarmonicsProvider provider) throws OrekitException {
    double[][] tol = NumericalPropagator.tolerances(dP, initialState.getOrbit(), OrbitType.CARTESIAN);
    AbstractIntegrator integrator = new DormandPrince853Integrator(0.001, 120.0, tol[0], tol[1]);
    NumericalPropagator propagator = new NumericalPropagator(integrator);
    propagator.setEphemerisMode();/*  www  . java  2  s  . com*/
    propagator.setOrbitType(OrbitType.CARTESIAN);
    propagator.addForceModel(new HolmesFeatherstoneAttractionModel(
            FramesFactory.getITRF(IERSConventions.IERS_2010, true), provider));
    propagator.setInitialState(initialState);
    propagator.propagate(initialState.getDate().shiftedBy(duration));
    return propagator.getGeneratedEphemeris();
}

From source file:org.orekit.forces.gravity.HolmesFeatherstoneAttractionModelTest.java

@Test
public void testStateJacobian() throws OrekitException {

    Utils.setDataRoot("regular-data:potential/grgs-format");
    GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));

    // initialization
    AbsoluteDate date = new AbsoluteDate(new DateComponents(2000, 07, 01), new TimeComponents(13, 59, 27.816),
            TimeScalesFactory.getUTC());
    double i = FastMath.toRadians(98.7);
    double omega = FastMath.toRadians(93.0);
    double OMEGA = FastMath.toRadians(15.0 * 22.5);
    Orbit orbit = new KeplerianOrbit(7201009.7124401, 1e-3, i, omega, OMEGA, 0, PositionAngle.MEAN,
            FramesFactory.getEME2000(), date, mu);
    OrbitType integrationType = OrbitType.CARTESIAN;
    double[][] tolerances = NumericalPropagator.tolerances(0.01, orbit, integrationType);

    propagator = new NumericalPropagator(
            new DormandPrince853Integrator(1.0e-3, 120, tolerances[0], tolerances[1]));
    propagator.setOrbitType(integrationType);
    HolmesFeatherstoneAttractionModel hfModel = new HolmesFeatherstoneAttractionModel(itrf,
            GravityFieldFactory.getNormalizedProvider(50, 50));
    Assert.assertEquals(TideSystem.UNKNOWN, hfModel.getTideSystem());
    propagator.addForceModel(hfModel);/*from  w w  w.  j a  va 2 s .  c  o m*/
    SpacecraftState state0 = new SpacecraftState(orbit);
    propagator.setInitialState(state0);

    checkStateJacobian(propagator, state0, date.shiftedBy(3.5 * 3600.0), 50000, tolerances[0], 7.0e-10);
}

From source file:org.orekit.forces.gravity.HolmesFeatherstoneAttractionModelTest.java

@Before
public void setUp() {
    itrf = null;/*from w w  w.j a  v a2 s . c  om*/
    propagator = null;
    Utils.setDataRoot("regular-data");
    try {
        // Eigen 6s model truncated to degree 6
        mu = 3.986004415e+14;
        ae = 6378136.460;
        normalizedC20 = -4.84165299820e-04;
        normalizedC30 = 9.57211326674e-07;
        normalizedC40 = 5.39990167207e-07;
        normalizedC50 = 6.86846073356e-08;
        normalizedC60 = -1.49953256913e-07;
        unnormalizedC20 = FastMath.sqrt(5) * normalizedC20;
        unnormalizedC30 = FastMath.sqrt(7) * normalizedC30;
        unnormalizedC40 = FastMath.sqrt(9) * normalizedC40;
        unnormalizedC50 = FastMath.sqrt(11) * normalizedC50;
        unnormalizedC60 = FastMath.sqrt(13) * normalizedC60;

        itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
        double[] absTolerance = { 0.001, 1.0e-9, 1.0e-9, 1.0e-6, 1.0e-6, 1.0e-6, 0.001 };
        double[] relTolerance = { 1.0e-7, 1.0e-4, 1.0e-4, 1.0e-7, 1.0e-7, 1.0e-7, 1.0e-7 };
        AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(0.001, 1000, absTolerance,
                relTolerance);
        integrator.setInitialStepSize(60);
        propagator = new NumericalPropagator(integrator);
    } catch (OrekitException oe) {
        Assert.fail(oe.getMessage());
    }
}

From source file:org.orekit.forces.gravity.OceanTidesTest.java

private SpacecraftState propagate(Orbit orbit, AbsoluteDate target, ForceModel... forceModels)
        throws OrekitException {
    double[][] tolerances = NumericalPropagator.tolerances(10, orbit, OrbitType.KEPLERIAN);
    AbstractIntegrator integrator = new DormandPrince853Integrator(1.0e-3, 300, tolerances[0], tolerances[1]);
    NumericalPropagator propagator = new NumericalPropagator(integrator);
    for (ForceModel forceModel : forceModels) {
        propagator.addForceModel(forceModel);
    }//  w  ww .  ja  v a2 s  . c  o m
    propagator.setInitialState(new SpacecraftState(orbit));
    return propagator.propagate(target);
}