Negative eccentricity computed while propagating with Brouwer-Lyddane algorithm

Hello/Bonjour,

I’m trying to use a Brouwer-Lyddane propagator with a step handler in it, but it fails as it calculates a negative eccentricity during the computation.
If I remove the StepHandler, it works.

Here is the code :

	@Test
	public void testBL() {
		final double x1 = -1772.619869591273 * 1000;
		final double y1 = -3908.6521138424428 * 1000;
		final double z1 = 5266.68093513367 * 1000;
		final double dx1 = 6.35969327821623 * 1000;
		final double dy1 = -4.165238186695803 * 1000;
		final double dz1 = -0.9458311825913897 * 1000;

		Vector3D position1 = new Vector3D(x1, y1, z1);
		Vector3D velocity1 = new Vector3D(dx1, dy1, dz1);
		TimeScale tai = TimeScalesFactory.getTAI();
		AbsoluteDate date = new AbsoluteDate(2023, 3, 1, 14, 6, 29.639584, tai);
		CircularOrbit orbit1 = new CircularOrbit(new PVCoordinates(position1, velocity1), FramesFactory.getGCRF(),
				date, Constants.EGM96_EARTH_MU);
		System.out.println(orbit1);
		BrouwerLyddanePropagator blPropagator = new BrouwerLyddanePropagator(orbit1, 1000.,
				Constants.IERS2010_EARTH_EQUATORIAL_RADIUS, Constants.IERS2010_EARTH_MU, Constants.EIGEN5C_EARTH_C20,
				Constants.EIGEN5C_EARTH_C30, Constants.EIGEN5C_EARTH_C40, Constants.EIGEN5C_EARTH_C50,
				BrouwerLyddanePropagator.M2);
		List<SpacecraftState> listSpState = new ArrayList<>();
		blPropagator.setStepHandler(10, listSpState::add);
		AbsoluteDate startDate = new AbsoluteDate(2023, 3, 1, 14, 6, 29.639584, tai);
		AbsoluteDate endDate = new AbsoluteDate(2023, 3, 1, 15, 6, 29.639584, tai);

		blPropagator.propagate(startDate, endDate);
	}

Do you have an idea of how I could bypass this error? I tried using all the different orbit types (Cartesian, Keplerian, Circular & Equinoctial), but no one works.

I have same problem.
It seems that problem is not in propagate method but in
new BrouwerLyddanePropagator(…)

Code:
//////////////////////////
import java.io.File;
import org.orekit.data.DirectoryCrawler;
import org.orekit.data.DataProvidersManager;
import org.orekit.data.DataContext;
import org.orekit.orbits.CartesianOrbit;
import org.orekit.time.AbsoluteDate;
import org.orekit.time.UTCScale;
import org.orekit.time.TimeScalesFactory;
import org.orekit.propagation.analytical.BrouwerLyddanePropagator;
import org.orekit.frames.Frame;
import org.orekit.frames.FramesFactory;
import org.orekit.utils.PVCoordinates;
import org.orekit.utils.Constants;
import org.hipparchus.geometry.euclidean.threed.Vector3D;

public class Test {

static DataProvidersManager manager =
DataContext.getDefault().getDataProvidersManager();
static
{ manager.addProvider(new DirectoryCrawler(new File(“orekit-data”))); }

public static void main(String[] args)
{
Frame inertialFrame = FramesFactory.getEME2000();
UTCScale utcs = TimeScalesFactory.getUTC();

AbsoluteDate t = new AbsoluteDate(2023,06,26,12,0,0.0,utcs);
double x = 6313554.48504233;
double y = 2775620.8433687;
double z = -2111774.8221765;
double vx = 1575.31305905025;
double vy = 1786.43351611741;
double vz = 7042.05214468662;

Vector3D R = new Vector3D(x,y,z);
Vector3D V = new Vector3D(vx,vy,vz);
PVCoordinates W = new PVCoordinates(R,V);
CartesianOrbit orb =
new CartesianOrbit(W,inertialFrame,t,Constants.EGM96_EARTH_MU);

BrouwerLyddanePropagator prop =
new BrouwerLyddanePropagator(orb,Constants.EGM96_EARTH_EQUATORIAL_RADIUS,
Constants.EGM96_EARTH_MU,
Constants.EGM96_EARTH_C20,Constants.EGM96_EARTH_C30,
Constants.EGM96_EARTH_C40,Constants.EGM96_EARTH_C50,
BrouwerLyddanePropagator.M2);
System.out.println(“OK”);
}
}
/////////////////////////////////////////////////
Result:
//////////////////////////////////////////////
Exception in thread “main” org.orekit.errors.OrekitException: invalid parameter eccentricity: -0 not in range [0, ?]
at org.orekit.orbits.KeplerianOrbit.checkParameterRangeInclusive(KeplerianOrbit.java:1474)
at org.orekit.orbits.KeplerianOrbit.(KeplerianOrbit.java:191)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator$BLModel.propagateParameters(BrouwerLyddanePropagator.java:1430)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator.computeMeanParameters(BrouwerLyddanePropagator.java:738)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator.resetInitialState(BrouwerLyddanePropagator.java:680)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator.(BrouwerLyddanePropagator.java:531)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator.(BrouwerLyddanePropagator.java:475)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator.(BrouwerLyddanePropagator.java:371)
at org.orekit.propagation.analytical.BrouwerLyddanePropagator.(BrouwerLyddanePropagator.java:212)
at Test.main(Test.java:42)
////////////////////////////////////////////////////////////////////////////////////

Hi all,

I think your problem is a known Orekit issue: From Osculating to Mean Elements with Brouwer-Lyddane Propagator, negative eccentricity (#947) · Issues · Orekit / Orekit · GitLab

Unfortunately, we didn’t fix it yet…

Regards,
Bryan