Why the Eph generated by my orekit numeric propagator with drag model is not good?

Hello everyone!
I use orekit numeric propagator to generate sat eph which about 66 hours away from the epoch of the element.
drag and solar pressure force model, third body attraction are included.
the DragCD I used is 2.1,DragSF is 9.7 m2

today I got some telemetry data of the target sat, there are gps information in it.

I compared the gps data and the eph,the distance between them is about 40KM, this is out of my estimate。

I tried some adjustment to improve the result. I found that when I removed the drag and solar pressure force model from propagator, the distance between the telemetry gps data and eph is
narrowed to 1.5KM

I tried STK HPOP to make the eph,the result is very similar to my orekit result, with drag model ,the result is not good ,without drag model,the result is very close to my telemetry gps data.

I’m very confused about that. How did this happen,Is there something I did wrong.

Hope some guy can help me to make clear of that.

Thanks!

p.s the target sat mass is about 1000kg,the DragSF is about 10m2. which are official data.

Hi @youngcle

Is it possible to have a sample of code? Especially to see how you configure your orbit propagator and how you initialize the force models.

Thank you,
Bryan

Comparing directly propagation against measurements works only if your dynamical model is really finely tuned. Drag is modelled using an atmosphere model whose evolution is difficult to predict.
How did you get the 2.1 drag coefficient? Does it come from an orbit determination from previous period data? How are the solar activity coefficients updated in the atmosphere model? Do you use an accurate modelling for the spacecraft shape, including solar arrays with an associated attitude model or a simpler sphere model?

  1. The drag coefficient “2.1” I used is told by the satellite provider. It’s a fixed value,so I do not believe it come from an orbit determination.
  2. The solar activity coefficients were fixed value. I made static fixed input params for nls
    both daily and average of F10.7 solar flux is set to 140,which I think is similar as STK force model configuration “manual input”
    Although the atm model setting is not perfect, I think the result is out of my expect.
  3. I have no accurate model about the satellite, so I used IsotropicDrag model and set the SF to 9.6 m2 which was told by satellite provider. In Stk Scene, I used sphere model too.

The both result made by my code and stk use the similar drag model are not good compare to telemetry gps data(66 hours away from the elements epoch,the difference is 80km, which cannot be used in my app), when I removed the drag model.Both of the result are very good(the difference is about 1km ). This confused me very much.

The following is the code I used to define the propagator.

        final double minStep_num = 0.001;
        final double maxstep_num = 20.0;
        final double positionTolerance = 1.0;
        final OrbitType propagationType = OrbitType.KEPLERIAN;
        final double[][] tolerances = NumericalPropagator.tolerances(positionTolerance, orbit_loaded,
                propagationType);
        AdaptiveStepsizeIntegrator integrator_adpative = new DormandPrince853Integrator(minStep_num, maxstep_num,
                tolerances[0], tolerances[1]);

        // Propagator
        NumericalPropagator propagator_num = new NumericalPropagator(integrator_adpative);

        propagator_num.setOrbitType(propagationType);

        // Force Model (reduced to perturbing gravity field)
        // 3rd body (SUN)
        propagator_num.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getSun()));
        // 3rd body (MOON)
        propagator_num.addForceModel(new ThirdBodyAttraction(CelestialBodyFactory.getMoon()));

        // ## Drag coefficient
        double DRAG_CD = drag_cd
        // Drag area (m^2)
        double DRAG_SF = drag_sf
        // Drag
        final double ae = normalized.getAe();

        final OneAxisEllipsoid earth_atm = new OneAxisEllipsoid(ae, Constants.WGS84_EARTH_FLATTENING, earthFrame);

       

        //here,I make a static fixed input params for nls
        //both daily and average of F10.7 solar flux  is set to 140,which I think is similar as STK forcemodel "manual input"
        StaticInputParams_NLS staticInputParams_NLS = new StaticInputParams_NLS();
        final Atmosphere atm =new NRLMSISE00(staticInputParams_NLS, CelestialBodyFactory.getSun(),
         earth_atm); //
        
        DragSensitive dragShap = new IsotropicDrag(DRAG_SF, DRAG_CD );

        propagator_num.addForceModel(new DragForce(atm, dragShap));

        
        // Solar Radiation Pressure
        propagator_num.addForceModel(new SolarRadiationPressure(CelestialBodyFactory.getSun(), ae,
                new IsotropicRadiationSingleCoefficient(SOLAR_RADIATION_PRESSURE_SF, SOLAR_RADIATION_PRESSURE_CR)));
        // ocean tide
        UT1Scale ut1 = TimeScalesFactory.getUT1(IERSConventions.IERS_2010, true);

        OceanTides oceanTides = new OceanTides(earthFrame, normalized.getAe(), normalized.getMu(), true,
                SolidTides.DEFAULT_STEP, SolidTides.DEFAULT_POINTS, 50, 50, IERSConventions.IERS_2010, ut1);//
        propagator_num.addForceModel(oceanTides);

        // solid tide
        SolidTides solidTides = new SolidTides(earthFrame, normalized.getAe(), normalized.getMu(),
                normalized.getTideSystem(), IERSConventions.IERS_2010, ut1, CelestialBodyFactory.getSun(),
                CelestialBodyFactory.getMoon());
        propagator_num.addForceModel(solidTides);

        // relativity
        final Relativity forceModel = new Relativity(Constants.EIGEN5C_EARTH_MU);
        propagator_num.addForceModel(forceModel);

        ForceModel holmesFeatherstone = new HolmesFeatherstoneAttractionModel(earthFrame, normalized);

        // Add force model to the propagator
        propagator_num.addForceModel(holmesFeatherstone);
        propagator_num.setInitialState(new SpacecraftState(orbit_loaded, mass));

Hi @youngcle,

What are the dates you are propagating for ?
Maybe a flux of 140 is too high for these dates?

You can check the flux values in the CSSI Space Weather data file for example and set it accordingly to your dates.
A version of this file is available on the orekit-data repository here, and the latest version is here.

For example the latest prediction for the F10.7 flux for july 2020 is 68.
Note that with Orekit version 10.2 you will be able to use this file to set up your atmospheric model.

Maxime