use of org.orekit.orbits.CartesianOrbit 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);
}
use of org.orekit.orbits.CartesianOrbit 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);
}
use of org.orekit.orbits.CartesianOrbit 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);
}
use of org.orekit.orbits.CartesianOrbit in project Orekit by CS-SI.
the class ThirdBodyAttractionTest method testParameterDerivative.
@Test
public void testParameterDerivative() throws OrekitException {
final Vector3D pos = new Vector3D(6.46885878304673824e+06, -1.88050918456274318e+06, -1.32931592294715829e+04);
final Vector3D vel = new Vector3D(2.14718074509906819e+03, 7.38239351251748485e+03, -1.14097953925384523e+01);
final SpacecraftState state = new SpacecraftState(new CartesianOrbit(new PVCoordinates(pos, vel), FramesFactory.getGCRF(), new AbsoluteDate(2003, 3, 5, 0, 24, 0.0, TimeScalesFactory.getTAI()), Constants.EIGEN5C_EARTH_MU));
final CelestialBody moon = CelestialBodyFactory.getMoon();
final ThirdBodyAttraction forceModel = new ThirdBodyAttraction(moon);
Assert.assertTrue(forceModel.dependsOnPositionOnly());
final String name = moon.getName() + ThirdBodyAttraction.ATTRACTION_COEFFICIENT_SUFFIX;
checkParameterDerivative(state, forceModel, name, 1.0, 7.0e-15);
}
use of org.orekit.orbits.CartesianOrbit in project Orekit by CS-SI.
the class SolarRadiationPressureTest method testParameterDerivativeIsotropicSingle.
@Test
public void testParameterDerivativeIsotropicSingle() throws OrekitException {
final Vector3D pos = new Vector3D(6.46885878304673824e+06, -1.88050918456274318e+06, -1.32931592294715829e+04);
final Vector3D vel = new Vector3D(2.14718074509906819e+03, 7.38239351251748485e+03, -1.14097953925384523e+01);
final SpacecraftState state = new SpacecraftState(new CartesianOrbit(new PVCoordinates(pos, vel), FramesFactory.getGCRF(), new AbsoluteDate(2003, 3, 5, 0, 24, 0.0, TimeScalesFactory.getTAI()), Constants.EIGEN5C_EARTH_MU));
RadiationSensitive rs = new IsotropicRadiationSingleCoefficient(2.5, 0.7);
SolarRadiationPressure forceModel = new SolarRadiationPressure(CelestialBodyFactory.getSun(), Constants.WGS84_EARTH_EQUATORIAL_RADIUS, rs);
checkParameterDerivative(state, forceModel, RadiationSensitive.REFLECTION_COEFFICIENT, 1.0, 2.0e-15);
try {
rs.radiationPressureAcceleration(state.getDate(), state.getFrame(), state.getPVCoordinates().getPosition(), state.getAttitude().getRotation(), state.getMass(), Vector3D.ZERO, new double[2], RadiationSensitive.ABSORPTION_COEFFICIENT);
Assert.fail("an exception should have been thrown");
} catch (OrekitException oe) {
Assert.assertEquals(OrekitMessages.UNSUPPORTED_PARAMETER_NAME, oe.getSpecifier());
}
for (ParameterDriver driver : rs.getRadiationParametersDrivers()) {
Assert.assertEquals(RadiationSensitive.REFLECTION_COEFFICIENT, driver.getName());
}
}
Aggregations