Understanding mean element propagation in Orekit

Hi,
I am using the BrouwerLyddanePropagator to propagate a mean orbit. If I use PropagationType.MEAN, should i expect to get the mean state at the end of the propagation as output?

I used the following test code where i start with a mean orbit at an epoch and use the propagator to propagate to the same epoch to check if i get back the input mean orbit. But looks like the output is different than the input with SMA difference of ~6 kms (that is in agreement with the osculating orbit SMA).

Does the output SpacecraftState of propagator.propagate give the osculating state?

What am i missing here?

inertialFrame = FramesFactory.getEME2000()
initialDate = AbsoluteDate(2020, 1, 12, 17, 17, 0, TimeScalesFactory.getUTC())

mu = EARTH_MU_WGS72.to(u.m**3/u.s**2).value

# Define input mean orbit elements:
a = 6980000                  # Semi-major axis [m]              
e = 0.001                    # Eccentricity
i_rad = math.radians(60)     # Inclination in rad
omega_rad = math.radians(100)     # Argument of perigee in rad
raan_rad = math.radians(195)      # Right ascension of ascending node in rad
anomaly_rad = math.radians(0)     # True anomaly in rad

input_meanOrbit = KeplerianOrbit(a, e, i_rad, omega_rad, raan_rad, anomaly_rad,
                           PositionAngleType.TRUE, inertialFrame, initialDate, mu)

gravity_field_degree = 10
gravity_field_order = 10
gravityProvider = GravityFieldFactory.getUnnormalizedProvider(gravity_field_degree,  gravity_field_order)
propagator = BrouwerLyddanePropagator(input_meanOrbit, gravityProvider, PropagationType.MEAN, BrouwerLyddanePropagator.M2)
State = propagator.propagate(initialDate)

output_Orbit = State.getOrbit()

Hello @Stella28,

Unfortunatly, as of Orekit 12.2.1, you cannot chose if output state will be mean or osculating.

You can refer to the BrouwerLyddanePropagator documentation to find the following constructor description:

BrouwerLyddanePropagator

public BrouwerLyddanePropagator​(Orbit initialOrbit, AttitudeProvider attitudeProv, double mass, UnnormalizedSphericalHarmonicsProvider provider, PropagationType)

Build a propagator from orbit, attitude provider, mass and potential provider.

Using this constructor, it is possible to define the initial orbit as a mean Brouwer-Lyddane orbit or an osculating one.

Parameters:
`initialOrbit` - initial orbit
`attitudeProv` - attitude provider
`mass` - spacecraft mass
`provider` - for un-normalized zonal coefficients
`initialType` - initial orbit type (mean Brouwer-Lyddane orbit or osculating orbit)
`m2Value` - value of empirical drag coefficient in rad/s². If equal to `M2` drag is not computed

Hence by specifying PropagationType.MEAN in the constructor, you are telling Orekit that the initial state is a mean one (in the Brouwer-Lyddane theory). Output state will be an osculating one !

Cheers,
Vincent

1 Like