EcksteinHechler unable to compute mean elements

Hi everybody!

I have just started using the Orekit-Library. My goal is to compare different propagation methods for LEO satellites. More precisely I’d like to see the position error/difference between an analytical propagator (EcksteinHechler) and a numerical integrator using only the gravitational perturbations.

My input data is a GPS state vector (position, vlocity, time) of the Sentinel6A satellite in ECEF frame.

My probem is, that I can’t get the EcksteinHechler propagator to work. Maybe somebody can help me figure it out:

I’m trying to do the following:

public void analyticalPropagator () {
    // data providers
    File orekitData = new File("...\\orekit-data-master");
    DataProvidersManager manager = DataContext.getDefault().getDataProvidersManager();
    manager.addProvider(new DirectoryCrawler(orekitData));

    double mu = 3.986004415e+14;
    double referenceRadius = 6378.1363e3;
    double c20 = 0.00108262668;
    double c30 = -0.2532435346e-5;
    double c40 = 0.1619331205e-5;
    double c50 = 0.2277161016e10-6;
    double c60 = -0.5396484906e10-6;

    // start time S6A
    TimeScale utc = TimeScalesFactory.getUTC();
	
	// Sentinel 6A (PVT in ECEF/ICRF)
    AbsoluteDate initialDate = new AbsoluteDate(2024, 01, 14, 21, 59, 23.000, utc);
    PVCoordinates initialCoordinates = new PVCoordinates(new Vector3D(153847.541, -7657138.782, -953892.469), new Vector3D(2365.132521, 858.055848, -6509.012544));
    
	// frame
    Frame itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, false);
    Frame gcrf = FramesFactory.getEME2000();

	// Transform to GCRF
    Transform transform = itrf.getTransformTo(gcrf, initialDate);
    PVCoordinates pvt_gcrf = transform.transformPVCoordinates(initialCoordinates);

	Orbit initialOrbit = new CartesianOrbit(initialAbsolutePV, gcrf, initialDate, mu);

	EcksteinHechlerPropagator eckstein = new EcksteinHechlerPropagator(initialOrbit, referenceRadius, mu, c20, c30, c40, c50 ,c60);
}

I allways get a error when creating the ecksetin propagator during the transformation of the initial state to the mean elements:
“Exception in thread “main” org.orekit.errors.OrekitException: unable to compute Eckstein-Hechler mean parameters after 101 iterations
at org.orekit.propagation.analytical.EcksteinHechlerPropagator.computeMeanParameters(EcksteinHechlerPropagator.java:716)
at org.orekit.propagation.analytical.EcksteinHechlerPropagator.resetInitialState(EcksteinHechlerPropagator.java:622)
at org.orekit.propagation.analytical.EcksteinHechlerPropagator.(EcksteinHechlerPropagator.java:482)
at org.orekit.propagation.analytical.EcksteinHechlerPropagator.(EcksteinHechlerPropagator.java:430)
at org.orekit.propagation.analytical.EcksteinHechlerPropagator.(EcksteinHechlerPropagator.java:328)
at org.orekit.propagation.analytical.EcksteinHechlerPropagator.(EcksteinHechlerPropagator.java:180)
at propagators.propagators.analyticalPropagator(propagators.java:80)
at App.main(App.java:10)”

Does anybode see my error? Is it nescessary to transform the initial state vector to the GCRF frame?

Thank you very much in advance!

Best regards

Simon

Hi @SimonKrebietke,

I believe the problem comes from your c50 and c60 coefficients :

    double c50 = 0.2277161016e-6;
    double c60 = -0.5396484906e-6;

instead of

    double c50 = 0.2277161016e10-6;
    double c60 = -0.5396484906e10-6;

Cheers,
Vincent

1 Like

Hi Vincent,

thank you so much! This was a very, stupid mistake;-)

Cheers Simon

You are welcome ! It happens to all of us :sweat_smile: .

In case you don’t know, you can use the values stored in the Constants class. For example :

        double c20 = Constants.EIGEN5C_EARTH_C20;
        double c30 = Constants.EIGEN5C_EARTH_C30;
        double c40 = Constants.EIGEN5C_EARTH_C40;
        double c50 = Constants.EIGEN5C_EARTH_C50;
        double c60 = Constants.EIGEN5C_EARTH_C60;

Cheers,
Vincent

Thanks for the tip!
Cheers Simon

1 Like