Search in sources :

Example 36 with Frame

use of org.orekit.frames.Frame in project Orekit by CS-SI.

the class NumericalPropagatorTest method testEphemerisDates.

@Test
public void testEphemerisDates() throws OrekitException {
    // setup
    TimeScale tai = TimeScalesFactory.getTAI();
    AbsoluteDate initialDate = new AbsoluteDate("2015-07-01", tai);
    AbsoluteDate startDate = new AbsoluteDate("2015-07-03", tai).shiftedBy(-0.1);
    AbsoluteDate endDate = new AbsoluteDate("2015-07-04", tai);
    Frame eci = FramesFactory.getGCRF();
    KeplerianOrbit orbit = new KeplerianOrbit(600e3 + Constants.WGS84_EARTH_EQUATORIAL_RADIUS, 0, 0, 0, 0, 0, PositionAngle.TRUE, eci, initialDate, mu);
    OrbitType type = OrbitType.CARTESIAN;
    double[][] tol = NumericalPropagator.tolerances(1e-3, orbit, type);
    NumericalPropagator prop = new NumericalPropagator(new DormandPrince853Integrator(0.1, 500, tol[0], tol[1]));
    prop.setOrbitType(type);
    prop.resetInitialState(new SpacecraftState(new CartesianOrbit(orbit)));
    // action
    prop.setEphemerisMode();
    prop.propagate(startDate, endDate);
    BoundedPropagator ephemeris = prop.getGeneratedEphemeris();
    // verify
    TimeStampedPVCoordinates actualPV = ephemeris.getPVCoordinates(startDate, eci);
    TimeStampedPVCoordinates expectedPV = orbit.getPVCoordinates(startDate, eci);
    MatcherAssert.assertThat(actualPV.getPosition(), OrekitMatchers.vectorCloseTo(expectedPV.getPosition(), 1.0));
    MatcherAssert.assertThat(actualPV.getVelocity(), OrekitMatchers.vectorCloseTo(expectedPV.getVelocity(), 1.0));
    MatcherAssert.assertThat(ephemeris.getMinDate().durationFrom(startDate), OrekitMatchers.closeTo(0, 0));
    MatcherAssert.assertThat(ephemeris.getMaxDate().durationFrom(endDate), OrekitMatchers.closeTo(0, 0));
    // test date
    AbsoluteDate date = endDate.shiftedBy(-0.11);
    Assert.assertEquals(ephemeris.propagate(date).getDate().durationFrom(date), 0, 0);
}
Also used : SpacecraftState(org.orekit.propagation.SpacecraftState) FieldSpacecraftState(org.orekit.propagation.FieldSpacecraftState) Frame(org.orekit.frames.Frame) CartesianOrbit(org.orekit.orbits.CartesianOrbit) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) OrbitType(org.orekit.orbits.OrbitType) DormandPrince853Integrator(org.hipparchus.ode.nonstiff.DormandPrince853Integrator) TimeStampedPVCoordinates(org.orekit.utils.TimeStampedPVCoordinates) TimeScale(org.orekit.time.TimeScale) BoundedPropagator(org.orekit.propagation.BoundedPropagator) AbsoluteDate(org.orekit.time.AbsoluteDate) Test(org.junit.Test)

Example 37 with Frame

use of org.orekit.frames.Frame in project Orekit by CS-SI.

the class NumericalPropagatorTest method testParallelismIssue258.

@Test
public void testParallelismIssue258() throws OrekitException, InterruptedException, ExecutionException, FileNotFoundException {
    Utils.setDataRoot("regular-data:atmosphere:potential/grgs-format");
    GravityFieldFactory.addPotentialCoefficientsReader(new GRGSFormatReader("grim4s4_gr", true));
    final double mu = GravityFieldFactory.getNormalizedProvider(2, 2).getMu();
    // Geostationary transfer orbit
    // semi major axis in meters
    final double a = 24396159;
    // eccentricity
    final double e = 0.72831215;
    // inclination
    final double i = FastMath.toRadians(7);
    // perigee argument
    final double omega = FastMath.toRadians(180);
    // right ascension of ascending node
    final double raan = FastMath.toRadians(261);
    // mean anomaly
    final double lM = 0;
    final Frame inertialFrame = FramesFactory.getEME2000();
    final TimeScale utc = TimeScalesFactory.getUTC();
    final AbsoluteDate initialDate = new AbsoluteDate(2003, 1, 1, 00, 00, 00.000, utc);
    final Orbit initialOrbit = new CartesianOrbit(new KeplerianOrbit(a, e, i, omega, raan, lM, PositionAngle.MEAN, inertialFrame, initialDate, mu));
    final SpacecraftState initialState = new SpacecraftState(initialOrbit, 1000);
    // initialize the testing points
    final List<SpacecraftState> states = new ArrayList<SpacecraftState>();
    final NumericalPropagator propagator = createPropagator(initialState, OrbitType.CARTESIAN, PositionAngle.TRUE);
    final double samplingStep = 10000.0;
    propagator.setMasterMode(samplingStep, (state, isLast) -> states.add(state));
    propagator.propagate(initialDate.shiftedBy(5 * samplingStep));
    // compute reference errors, using serial computation in a for loop
    final double[][] referenceErrors = new double[states.size() - 1][];
    for (int startIndex = 0; startIndex < states.size() - 1; ++startIndex) {
        referenceErrors[startIndex] = recomputeFollowing(startIndex, states);
    }
    final Consumer<SpacecraftState> checker = point -> {
        try {
            final int startIndex = states.indexOf(point);
            double[] errors = recomputeFollowing(startIndex, states);
            for (int k = 0; k < errors.length; ++k) {
                Assert.assertEquals(startIndex + " to " + (startIndex + k + 1), referenceErrors[startIndex][k], errors[k], 1.0e-9);
            }
        } catch (OrekitException oe) {
            Assert.fail(oe.getLocalizedMessage());
        }
    };
    // serial propagation using Stream
    states.stream().forEach(checker);
    // parallel propagation using parallelStream
    states.parallelStream().forEach(checker);
}
Also used : ParameterDriver(org.orekit.utils.ParameterDriver) CoreMatchers(org.hamcrest.CoreMatchers) ApsideDetector(org.orekit.propagation.events.ApsideDetector) TimeStampedPVCoordinates(org.orekit.utils.TimeStampedPVCoordinates) AdaptiveStepsizeIntegrator(org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator) ForceModel(org.orekit.forces.ForceModel) Frame(org.orekit.frames.Frame) DragForce(org.orekit.forces.drag.DragForce) IERSConventions(org.orekit.utils.IERSConventions) PVCoordinates(org.orekit.utils.PVCoordinates) EquinoctialOrbit(org.orekit.orbits.EquinoctialOrbit) GRGSFormatReader(org.orekit.forces.gravity.potential.GRGSFormatReader) SpacecraftState(org.orekit.propagation.SpacecraftState) FieldEventDetector(org.orekit.propagation.events.FieldEventDetector) After(org.junit.After) StopOnEvent(org.orekit.propagation.events.handlers.StopOnEvent) ThirdBodyAttraction(org.orekit.forces.gravity.ThirdBodyAttraction) PositionAngle(org.orekit.orbits.PositionAngle) DateDetector(org.orekit.propagation.events.DateDetector) ParseException(java.text.ParseException) Utils(org.orekit.Utils) CartesianOrbit(org.orekit.orbits.CartesianOrbit) FramesFactory(org.orekit.frames.FramesFactory) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) FileNotFoundException(java.io.FileNotFoundException) SHMFormatReader(org.orekit.forces.gravity.potential.SHMFormatReader) List(java.util.List) Stream(java.util.stream.Stream) MatcherAssert(org.hamcrest.MatcherAssert) DataProvidersManager(org.orekit.data.DataProvidersManager) RealFieldElement(org.hipparchus.RealFieldElement) EventDetector(org.orekit.propagation.events.EventDetector) Action(org.orekit.propagation.events.handlers.EventHandler.Action) SolarRadiationPressure(org.orekit.forces.radiation.SolarRadiationPressure) DormandPrince853Integrator(org.hipparchus.ode.nonstiff.DormandPrince853Integrator) ContinueOnEvent(org.orekit.propagation.events.handlers.ContinueOnEvent) OrekitStepHandler(org.orekit.propagation.sampling.OrekitStepHandler) AdditionalStateProvider(org.orekit.propagation.AdditionalStateProvider) AbstractIntegratedPropagator(org.orekit.propagation.integration.AbstractIntegratedPropagator) TimeScale(org.orekit.time.TimeScale) Orbit(org.orekit.orbits.Orbit) FieldSpacecraftState(org.orekit.propagation.FieldSpacecraftState) ArrayList(java.util.ArrayList) NormalizedSphericalHarmonicsProvider(org.orekit.forces.gravity.potential.NormalizedSphericalHarmonicsProvider) IsotropicRadiationSingleCoefficient(org.orekit.forces.radiation.IsotropicRadiationSingleCoefficient) ODEIntegrator(org.hipparchus.ode.ODEIntegrator) OrbitType(org.orekit.orbits.OrbitType) FieldVector3D(org.hipparchus.geometry.euclidean.threed.FieldVector3D) ClassicalRungeKuttaIntegrator(org.hipparchus.ode.nonstiff.ClassicalRungeKuttaIntegrator) OrekitStepInterpolator(org.orekit.propagation.sampling.OrekitStepInterpolator) FastMath(org.hipparchus.util.FastMath) AdditionalEquations(org.orekit.propagation.integration.AdditionalEquations) Before(org.junit.Before) Constants(org.orekit.utils.Constants) DTM2000(org.orekit.forces.drag.atmosphere.DTM2000) BoundedPropagator(org.orekit.propagation.BoundedPropagator) Vector3D(org.hipparchus.geometry.euclidean.threed.Vector3D) OrekitMatchers(org.orekit.OrekitMatchers) IOException(java.io.IOException) Test(org.junit.Test) GravityFieldFactory(org.orekit.forces.gravity.potential.GravityFieldFactory) MarshallSolarActivityFutureEstimation(org.orekit.forces.drag.atmosphere.data.MarshallSolarActivityFutureEstimation) ExecutionException(java.util.concurrent.ExecutionException) Consumer(java.util.function.Consumer) Field(org.hipparchus.Field) OrekitMessages(org.orekit.errors.OrekitMessages) EventHandler(org.orekit.propagation.events.handlers.EventHandler) OneAxisEllipsoid(org.orekit.bodies.OneAxisEllipsoid) OrekitException(org.orekit.errors.OrekitException) CelestialBodyFactory(org.orekit.bodies.CelestialBodyFactory) TimeScalesFactory(org.orekit.time.TimeScalesFactory) IsotropicDrag(org.orekit.forces.drag.IsotropicDrag) LocalizedCoreFormats(org.hipparchus.exception.LocalizedCoreFormats) Assert(org.junit.Assert) AbstractDetector(org.orekit.propagation.events.AbstractDetector) HolmesFeatherstoneAttractionModel(org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel) AbsoluteDate(org.orekit.time.AbsoluteDate) Frame(org.orekit.frames.Frame) CartesianOrbit(org.orekit.orbits.CartesianOrbit) EquinoctialOrbit(org.orekit.orbits.EquinoctialOrbit) CartesianOrbit(org.orekit.orbits.CartesianOrbit) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) Orbit(org.orekit.orbits.Orbit) ArrayList(java.util.ArrayList) TimeScale(org.orekit.time.TimeScale) AbsoluteDate(org.orekit.time.AbsoluteDate) GRGSFormatReader(org.orekit.forces.gravity.potential.GRGSFormatReader) SpacecraftState(org.orekit.propagation.SpacecraftState) FieldSpacecraftState(org.orekit.propagation.FieldSpacecraftState) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) OrekitException(org.orekit.errors.OrekitException) Test(org.junit.Test)

Example 38 with Frame

use of org.orekit.frames.Frame in project Orekit by CS-SI.

the class NumericalPropagatorTest method createEllipticOrbit.

private CartesianOrbit createEllipticOrbit() throws OrekitException {
    final AbsoluteDate date = new AbsoluteDate("2003-05-01T00:00:20.000", TimeScalesFactory.getUTC());
    final Vector3D position = new Vector3D(6896874.444705, 1956581.072644, -147476.245054);
    final Vector3D velocity = new Vector3D(166.816407662, -1106.783301861, -7372.745712770);
    final TimeStampedPVCoordinates pv = new TimeStampedPVCoordinates(date, position, velocity);
    final Frame frame = FramesFactory.getEME2000();
    final double mu = Constants.EIGEN5C_EARTH_MU;
    return new CartesianOrbit(pv, frame, mu);
}
Also used : Frame(org.orekit.frames.Frame) CartesianOrbit(org.orekit.orbits.CartesianOrbit) FieldVector3D(org.hipparchus.geometry.euclidean.threed.FieldVector3D) Vector3D(org.hipparchus.geometry.euclidean.threed.Vector3D) TimeStampedPVCoordinates(org.orekit.utils.TimeStampedPVCoordinates) AbsoluteDate(org.orekit.time.AbsoluteDate)

Example 39 with Frame

use of org.orekit.frames.Frame in project Orekit by CS-SI.

the class DSSTPropagatorTest method testEphemerisDates.

@Test
public void testEphemerisDates() throws OrekitException {
    // setup
    TimeScale tai = TimeScalesFactory.getTAI();
    AbsoluteDate initialDate = new AbsoluteDate("2015-07-01", tai);
    AbsoluteDate startDate = new AbsoluteDate("2015-07-03", tai).shiftedBy(-0.1);
    AbsoluteDate endDate = new AbsoluteDate("2015-07-04", tai);
    Frame eci = FramesFactory.getGCRF();
    KeplerianOrbit orbit = new KeplerianOrbit(600e3 + Constants.WGS84_EARTH_EQUATORIAL_RADIUS, 0, 0, 0, 0, 0, PositionAngle.TRUE, eci, initialDate, Constants.EIGEN5C_EARTH_MU);
    double[][] tol = DSSTPropagator.tolerances(1, orbit);
    Propagator prop = new DSSTPropagator(new DormandPrince853Integrator(0.1, 500, tol[0], tol[1]));
    prop.resetInitialState(new SpacecraftState(new CartesianOrbit(orbit)));
    // action
    prop.setEphemerisMode();
    prop.propagate(startDate, endDate);
    BoundedPropagator ephemeris = prop.getGeneratedEphemeris();
    // verify
    TimeStampedPVCoordinates actualPV = ephemeris.getPVCoordinates(startDate, eci);
    TimeStampedPVCoordinates expectedPV = orbit.getPVCoordinates(startDate, eci);
    MatcherAssert.assertThat(actualPV.getPosition(), OrekitMatchers.vectorCloseTo(expectedPV.getPosition(), 1.0));
    MatcherAssert.assertThat(actualPV.getVelocity(), OrekitMatchers.vectorCloseTo(expectedPV.getVelocity(), 1.0));
    MatcherAssert.assertThat(ephemeris.getMinDate().durationFrom(startDate), OrekitMatchers.closeTo(0, 0));
    MatcherAssert.assertThat(ephemeris.getMaxDate().durationFrom(endDate), OrekitMatchers.closeTo(0, 0));
    // test date
    AbsoluteDate date = endDate.shiftedBy(-0.11);
    Assert.assertEquals(ephemeris.propagate(date).getDate().durationFrom(date), 0, 0);
}
Also used : SpacecraftState(org.orekit.propagation.SpacecraftState) Frame(org.orekit.frames.Frame) CartesianOrbit(org.orekit.orbits.CartesianOrbit) Propagator(org.orekit.propagation.Propagator) NumericalPropagator(org.orekit.propagation.numerical.NumericalPropagator) BoundedPropagator(org.orekit.propagation.BoundedPropagator) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) DormandPrince853Integrator(org.hipparchus.ode.nonstiff.DormandPrince853Integrator) TimeStampedPVCoordinates(org.orekit.utils.TimeStampedPVCoordinates) TimeScale(org.orekit.time.TimeScale) BoundedPropagator(org.orekit.propagation.BoundedPropagator) AbsoluteDate(org.orekit.time.AbsoluteDate) Test(org.junit.Test)

Example 40 with Frame

use of org.orekit.frames.Frame in project Orekit by CS-SI.

the class DSSTPropagatorTest method testPropagationWithThirdBody.

@Test
public void testPropagationWithThirdBody() throws OrekitException, IOException {
    // Central Body geopotential 2x0
    final UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(2, 0);
    final Frame earthFrame = CelestialBodyFactory.getEarth().getBodyOrientedFrame();
    DSSTForceModel zonal = new DSSTZonal(provider, 2, 1, 5);
    DSSTForceModel tesseral = new DSSTTesseral(earthFrame, Constants.WGS84_EARTH_ANGULAR_VELOCITY, provider, 2, 0, 0, 2, 2, 0, 0);
    // Third Bodies Force Model (Moon + Sun)
    DSSTForceModel moon = new DSSTThirdBody(CelestialBodyFactory.getMoon());
    DSSTForceModel sun = new DSSTThirdBody(CelestialBodyFactory.getSun());
    // SIRIUS Orbit
    final AbsoluteDate initDate = new AbsoluteDate(2003, 7, 1, 0, 0, 00.000, TimeScalesFactory.getUTC());
    final Orbit orbit = new KeplerianOrbit(42163393., 0.2684, FastMath.toRadians(63.435), FastMath.toRadians(270.0), FastMath.toRadians(285.0), FastMath.toRadians(344.0), PositionAngle.MEAN, FramesFactory.getEME2000(), initDate, provider.getMu());
    // Set propagator with state and force model
    setDSSTProp(new SpacecraftState(orbit));
    dsstProp.addForceModel(zonal);
    dsstProp.addForceModel(tesseral);
    dsstProp.addForceModel(moon);
    dsstProp.addForceModel(sun);
    // 5 days propagation
    final SpacecraftState state = dsstProp.propagate(initDate.shiftedBy(5. * 86400.));
    // Ref Standalone_DSST:
    // a    = 42163393.0 m
    // h/ey =  -0.06893353670734315
    // k/ex =  -0.2592789733084587
    // p/hy =  -0.5968524904937771
    // q/hx =   0.1595005111738418
    // lM   = 183°9386620425922
    Assert.assertEquals(42163393.0, state.getA(), 1.e-1);
    Assert.assertEquals(-0.2592789733084587, state.getEquinoctialEx(), 5.e-7);
    Assert.assertEquals(-0.06893353670734315, state.getEquinoctialEy(), 2.e-7);
    Assert.assertEquals(0.1595005111738418, state.getHx(), 2.e-7);
    Assert.assertEquals(-0.5968524904937771, state.getHy(), 5.e-8);
    Assert.assertEquals(183.9386620425922, FastMath.toDegrees(MathUtils.normalizeAngle(state.getLM(), FastMath.PI)), 3.e-2);
}
Also used : SpacecraftState(org.orekit.propagation.SpacecraftState) Frame(org.orekit.frames.Frame) DSSTThirdBody(org.orekit.propagation.semianalytical.dsst.forces.DSSTThirdBody) EquinoctialOrbit(org.orekit.orbits.EquinoctialOrbit) CartesianOrbit(org.orekit.orbits.CartesianOrbit) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) Orbit(org.orekit.orbits.Orbit) CircularOrbit(org.orekit.orbits.CircularOrbit) UnnormalizedSphericalHarmonicsProvider(org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider) DSSTZonal(org.orekit.propagation.semianalytical.dsst.forces.DSSTZonal) DSSTTesseral(org.orekit.propagation.semianalytical.dsst.forces.DSSTTesseral) KeplerianOrbit(org.orekit.orbits.KeplerianOrbit) DSSTForceModel(org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel) AbsoluteDate(org.orekit.time.AbsoluteDate) Test(org.junit.Test)

Aggregations

Frame (org.orekit.frames.Frame)257 Test (org.junit.Test)169 AbsoluteDate (org.orekit.time.AbsoluteDate)153 Vector3D (org.hipparchus.geometry.euclidean.threed.Vector3D)117 FieldAbsoluteDate (org.orekit.time.FieldAbsoluteDate)99 KeplerianOrbit (org.orekit.orbits.KeplerianOrbit)79 SpacecraftState (org.orekit.propagation.SpacecraftState)79 FieldVector3D (org.hipparchus.geometry.euclidean.threed.FieldVector3D)70 OrekitException (org.orekit.errors.OrekitException)60 PVCoordinates (org.orekit.utils.PVCoordinates)58 Orbit (org.orekit.orbits.Orbit)51 OneAxisEllipsoid (org.orekit.bodies.OneAxisEllipsoid)50 TimeScale (org.orekit.time.TimeScale)46 TimeStampedPVCoordinates (org.orekit.utils.TimeStampedPVCoordinates)46 GeodeticPoint (org.orekit.bodies.GeodeticPoint)41 TopocentricFrame (org.orekit.frames.TopocentricFrame)38 Transform (org.orekit.frames.Transform)38 FieldPVCoordinates (org.orekit.utils.FieldPVCoordinates)35 DSFactory (org.hipparchus.analysis.differentiation.DSFactory)33 FieldKeplerianOrbit (org.orekit.orbits.FieldKeplerianOrbit)31