Hi, when using the Brouwer-Lyddane propagator in Orekit to extrapolate the orbit of a low earth circular orbit satellite, the error reached 50 kilometers during a one-hour extrapolation. What could be the possible reasons? the reference value is close to the numerical propagated results.
final Frame inertialFrame = FramesFactory.getEME2000();
AbsoluteDate initDate = new AbsoluteDate(2024, 12, 1, 0, 0, 0, TimeScalesFactory.getUTC());
double timeshift = 3600 ;
NormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getNormalizedProvider(5, 0);
// Initial orbit
final Orbit initialOrbit = new KeplerianOrbit(new PVCoordinates(new Vector3D(-5053374.356, -3419077.892, -4241149.605),
new Vector3D(-4221.103996, -1055.944563, 5887.522421)),
inertialFrame, initDate, provider.getMu());
// Initial state definition
final SpacecraftState initialState = new SpacecraftState(initialOrbit);
//_______________________________________________________________________________________________
// SET UP A REFERENCE NUMERICAL PROPAGATION
//_______________________________________________________________________________________________
// Adaptive step integrator with a minimum step of 0.001 and a maximum step of 1000
final double minStep = 0.001;
final double maxstep = 1000.0;
final double positionTolerance = 10.0;
final OrbitType propagationType = OrbitType.CIRCULAR;
final double[][] tolerances =
ToleranceProvider.getDefaultToleranceProvider(positionTolerance).getTolerances(initialOrbit, propagationType);
final AdaptiveStepsizeIntegrator integrator =
new DormandPrince853Integrator(minStep, maxstep, tolerances[0], tolerances[1]);
// Numerical Propagator
final NumericalPropagator NumPropagator = new NumericalPropagator(integrator);
NumPropagator.setOrbitType(propagationType);
final ForceModel holmesFeatherstone =
new HolmesFeatherstoneAttractionModel(FramesFactory.getITRF(IERSConventions.IERS_2010, true), provider);
NumPropagator.addForceModel(holmesFeatherstone);
// Set up initial state in the propagator
NumPropagator.setInitialState(initialState);
// Extrapolate from the initial to the final date
final SpacecraftState NumFinalState = NumPropagator.propagate(initDate.shiftedBy(timeshift));
final TimeStampedPVCoordinates numPV = NumFinalState.getOrbit().getPVCoordinates();
//_______________________________________________________________________________________________
// SET UP A BROUWER LYDDANE PROPAGATION
//_______________________________________________________________________________________________
BrouwerLyddanePropagator BLextrapolator =
new BrouwerLyddanePropagator(initialOrbit, GravityFieldFactory.getUnnormalizedProvider(provider), BrouwerLyddanePropagator.M2);
SpacecraftState BLFinalState = BLextrapolator.propagate(initDate.shiftedBy(timeshift));
TimeStampedPVCoordinates blPv = BLFinalState.getPVCoordinates();