About OrbitType

Hi,everyone.

I’m using HPOP NumericalPropagator to get the J2000 Position. I compared these data with STK, and I set everything the same option. But the OrbitType sometimes effects a lot, I think the eccentricity is the reason. How can I tell when to use the EQUINOCTIAL 、 KEPLERIAN or CIRCULAR?

Hello,

how do you compute the tolerances used for the propagation ?

This is my propagator:

    public void HPOPPropagator(String satelliteName, AbsoluteDate epoch, double a, double e, double i,
                               double raan, double pa, double anomaly, double gyfsxs, double dqznxs, String positionAngleType) {
        this.satelliteName = satelliteName;
        PositionAngle positionAngle = PositionAngle.MEAN;
        Orbit initialOrbit = null;
        OrbitType propagationType;
        double cs = 20;
        if (e <= 0.0001) {
            propagationType = OrbitType.EQUINOCTIAL;// i=0 Or e=0
            double u = Math.toRadians(pa) + Math.toRadians(anomaly);
            initialOrbit = new CircularOrbit(
                    a, e * Math.cos(Math.toRadians(pa)), e * Math.sin(Math.toRadians(pa)), Math.toRadians(i), Math.toRadians(raan), u,
                    positionAngle, FramesFactory.getEME2000(), epoch, Constants.WGS84_EARTH_MU);
        } else {
            propagationType = OrbitType.KEPLERIAN;
            initialOrbit = new KeplerianOrbit(
                    a, e, Math.toRadians(i), Math.toRadians(pa), Math.toRadians(raan), Math.toRadians(anomaly),
                    positionAngle, FramesFactory.getEME2000(), epoch, Constants.WGS84_EARTH_MU);
        }
        // Initial state definition
        final SpacecraftState spacecraftState = new SpacecraftState(initialOrbit, 1000);
        // attitude
        AttitudeProvider attitude = new LofOffset(FramesFactory.getEME2000(), LOFType.VVLH);
        final double minStep = 0.00001;
        final double maxStep = 100.0;
        final double positionTolerance = 1.00e-6;

        final double[][] tolerance =
                NumericalPropagator.tolerances(positionTolerance, initialOrbit, propagationType);
        final AdaptiveStepsizeIntegrator integrator =
                new DormandPrince853Integrator(minStep, maxStep, tolerance[0], tolerance[1]);

        // Propagator
        final NumericalPropagator propagator = new NumericalPropagator(integrator);

        // Gravity
        final NormalizedSphericalHarmonicsProvider provider = OrbitConstants.provider;
        final ForceModel holmesFeatherStone =
                new HolmesFeatherstoneAttractionModel(OrbitConstants.FRAME_ECF, provider);
        propagator.addForceModel(holmesFeatherStone);
        // Moon Sun
        propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getSun()));
        propagator.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getMoon()));
        // SPR
        propagator.addForceModel(new SolarRadiationPressure(CelestialBodyFactory.getSun(), provider.getAe(),
                new IsotropicRadiationSingleCoefficient(cs, gyfsxs)));
        // Drag
        UT1Scale ut1 = TimeScalesFactory.getUT1(IERSConventions.IERS_2010, false);
        NRLMSISE00InputParameters inputData =
                new CssiSpaceWeatherData("SpaceWeather-All-v1.2.txt");
        NRLMSISE00 atmosphere = new NRLMSISE00(inputData, CelestialBodyFactory.getSun(), OrbitConstants.EARTH_SHAPE, ut1);
        DragSensitive drag = new IsotropicDrag(cs, dqznxs);
        propagator.addForceModel(new DragForce(atmosphere, drag));

        propagator.setInitialState(spacecraftState);
        propagator.setAttitudeProvider(attitude);
        this.propagator = propagator;
    }

My input data:

"t0": "2026-05-09 00:00:00",
"a": 6878140.0,
"e": 0.0,
"i": 35.0,
"w": 0.0,
"m": 152.0,
"raan": 100.0
"t0": "2026-05-09 00:00:00",
"a": 6878140.0,
"e": 0.012,
"i": 35.0,
"w": 0.0,
"m": 152.0,
"raan": 100.0

The only difference between these two data is the eccentricity.
And the result error is filled in this chart


I want to konw what can I do to fix the error when the eccentricity is not 0?

Have you tried building up the force model step by step - starting with a monopole - to see when the deviations with STK first appear? It might help find the discrepancy. I would be interested to hear the result.

Note you have to be careful with gravity - if i remember correctly, the gravity coefficients are scaled by EGM96 even though you are using WGS84.