Class BrouwerLyddanePropagator

  • All Implemented Interfaces:
    Propagator, ParameterDriversProvider, PVCoordinatesProvider

    public class BrouwerLyddanePropagator
    extends AbstractAnalyticalPropagator
    implements ParameterDriversProvider
    This class propagates a SpacecraftState using the analytical Brouwer-Lyddane model (from J2 to J5 zonal harmonics).

    At the opposite of the EcksteinHechlerPropagator, the Brouwer-Lyddane model is suited for elliptical orbits, there is no problem having a rather small eccentricity or inclination (Lyddane helped to solve this issue with the Brouwer model). Singularity for the critical inclination i = 63.4° is avoided using the method developed in Warren Phipps' 1992 thesis.

    By default, Brouwer-Lyddane model considers only the perturbations due to zonal harmonics. However, for low Earth orbits, the magnitude of the perturbative acceleration due to atmospheric drag can be significant. Warren Phipps' 1992 thesis considered the atmospheric drag by time derivatives of the mean mean anomaly using the catch-all coefficient M2Driver. Beware that M2Driver must have only 1 span on its TimeSpanMap value. Usually, M2 is adjusted during an orbit determination process and it represents the combination of all unmodeled secular along-track effects (i.e. not just the atmospheric drag). The behavior of M2 is close to the TLE.getBStar() parameter for the TLE. If the value of M2 is equal to 0.0, the along-track secular effects are not considered in the dynamical model. Typical values for M2 are not known. It depends on the orbit type. However, the value of M2 must be very small (e.g. between 1.0e-14 and 1.0e-15). The unit of M2 is rad/s². The along-track effects, represented by the secular rates of the mean semi-major axis and eccentricity, are computed following Eq. 2.38, 2.41, and 2.45 of Warren Phipps' thesis.

    Since:
    11.1
    Author:
    Melina Vanel, Bryan Cazabonne
    See Also:
    "Brouwer, Dirk. Solution of the problem of artificial satellite theory without drag. YALE UNIV NEW HAVEN CT NEW HAVEN United States, 1959.", "Lyddane, R. H. Small eccentricities or inclinations in the Brouwer theory of the artificial satellite. The Astronomical Journal 68 (1963): 555.", "Phipps Jr, Warren E. Parallelization of the Navy Space Surveillance Center (NAVSPASUR) Satellite Model. NAVAL POSTGRADUATE SCHOOL MONTEREY CA, 1992."
    • Constructor Detail

      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        double referenceRadius,
                                        double mu,
                                        double c20,
                                        double c30,
                                        double c40,
                                        double c50,
                                        double M2)
        Build a propagator from orbit and potential.

        Mass and attitude provider are set to unspecified non-null arbitrary values.

        The Cn,0 coefficients are the denormalized zonal coefficients, they are related to both the normalized coefficients Cn,0 and the Jn one as follows:

        Cn,0 = [(2-δ0,m)(2n+1)(n-m)!/(n+m)!]½ Cn,0

        Cn,0 = -Jn

        Using this constructor, an initial osculating orbit is considered.

        Parameters:
        initialOrbit - initial orbit
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
        See Also:
        Constants, BrouwerLyddanePropagator(Orbit, AttitudeProvider, double, double, double, double, double, double, double, double)
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        double mass,
                                        double referenceRadius,
                                        double mu,
                                        double c20,
                                        double c30,
                                        double c40,
                                        double c50,
                                        double M2)
        Build a propagator from orbit, mass and potential.

        Attitude law is set to an unspecified non-null arbitrary value.

        The Cn,0 coefficients are the denormalized zonal coefficients, they are related to both the normalized coefficients Cn,0 and the Jn one as follows:

        Cn,0 = [(2-δ0,m)(2n+1)(n-m)!/(n+m)!]½ Cn,0

        Cn,0 = -Jn

        Using this constructor, an initial osculating orbit is considered.

        Parameters:
        initialOrbit - initial orbit
        mass - spacecraft mass
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
        See Also:
        BrouwerLyddanePropagator(Orbit, AttitudeProvider, double, double, double, double, double, double, double, double)
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitudeProv,
                                        UnnormalizedSphericalHarmonicsProvider provider,
                                        double M2)
        Build a propagator from orbit, attitude provider and potential provider.

        Mass is set to an unspecified non-null arbitrary value.

        Using this constructor, an initial osculating orbit is considered.

        Parameters:
        initialOrbit - initial orbit
        attitudeProv - attitude provider
        provider - for un-normalized zonal coefficients
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitudeProv,
                                        double referenceRadius,
                                        double mu,
                                        double c20,
                                        double c30,
                                        double c40,
                                        double c50,
                                        double M2)
        Build a propagator from orbit, attitude provider and potential.

        Mass is set to an unspecified non-null arbitrary value.

        The Cn,0 coefficients are the denormalized zonal coefficients, they are related to both the normalized coefficients Cn,0 and the Jn one as follows:

        Cn,0 = [(2-δ0,m)(2n+1)(n-m)!/(n+m)!]½ Cn,0

        Cn,0 = -Jn

        Using this constructor, an initial osculating orbit is considered.

        Parameters:
        initialOrbit - initial orbit
        attitudeProv - attitude provider
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitudeProv,
                                        double mass,
                                        double referenceRadius,
                                        double mu,
                                        double c20,
                                        double c30,
                                        double c40,
                                        double c50,
                                        double M2)
        Build a propagator from orbit, attitude provider, mass and potential.

        The Cn,0 coefficients are the denormalized zonal coefficients, they are related to both the normalized coefficients Cn,0 and the Jn one as follows:

        Cn,0 = [(2-δ0,m)(2n+1)(n-m)!/(n+m)!]½ Cn,0

        Cn,0 = -Jn

        Using this constructor, an initial osculating orbit is considered.

        Parameters:
        initialOrbit - initial orbit
        attitudeProv - attitude provider
        mass - spacecraft mass
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
        See Also:
        BrouwerLyddanePropagator(Orbit, AttitudeProvider, double, double, double, double, double, double, double, PropagationType, double)
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        UnnormalizedSphericalHarmonicsProvider provider,
                                        PropagationType initialType,
                                        double M2)
        Build a propagator from orbit and potential provider.

        Mass and attitude provider are set to unspecified non-null arbitrary values.

        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
        provider - for un-normalized zonal coefficients
        initialType - initial orbit type (mean Brouwer-Lyddane orbit or osculating orbit)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitudeProv,
                                        double mass,
                                        UnnormalizedSphericalHarmonicsProvider provider,
                                        PropagationType initialType,
                                        double M2)
        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)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitude,
                                        double mass,
                                        UnnormalizedSphericalHarmonicsProvider provider,
                                        UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics harmonics,
                                        PropagationType initialType,
                                        double M2)
        Private helper constructor.

        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
        attitude - attitude provider
        mass - spacecraft mass
        provider - for un-normalized zonal coefficients
        harmonics - provider.onDate(initialOrbit.getDate())
        initialType - initial orbit type (mean Brouwer-Lyddane orbit or osculating orbit)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitudeProv,
                                        double mass,
                                        double referenceRadius,
                                        double mu,
                                        double c20,
                                        double c30,
                                        double c40,
                                        double c50,
                                        PropagationType initialType,
                                        double M2)
        Build a propagator from orbit, attitude provider, mass and potential.

        The Cn,0 coefficients are the denormalized zonal coefficients, they are related to both the normalized coefficients Cn,0 and the Jn one as follows:

        Cn,0 = [(2-δ0,m)(2n+1)(n-m)!/(n+m)!]½ Cn,0

        Cn,0 = -Jn

        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
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        initialType - initial orbit type (mean Brouwer-Lyddane orbit or osculating orbit)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
      • BrouwerLyddanePropagator

        public BrouwerLyddanePropagator​(Orbit initialOrbit,
                                        AttitudeProvider attitudeProv,
                                        double mass,
                                        double referenceRadius,
                                        double mu,
                                        double c20,
                                        double c30,
                                        double c40,
                                        double c50,
                                        PropagationType initialType,
                                        double M2,
                                        double epsilon,
                                        int maxIterations)
        Build a propagator from orbit, attitude provider, mass and potential.

        The Cn,0 coefficients are the denormalized zonal coefficients, they are related to both the normalized coefficients Cn,0 and the Jn one as follows:

        Cn,0 = [(2-δ0,m)(2n+1)(n-m)!/(n+m)!]½ Cn,0

        Cn,0 = -Jn

        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
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        initialType - initial orbit type (mean Brouwer-Lyddane orbit or osculating orbit)
        M2 - value of empirical drag coefficient in rad/s². If equal to M2 drag is not computed
        epsilon - convergence threshold for mean parameters conversion
        maxIterations - maximum iterations for mean parameters conversion
        Since:
        11.2
    • Method Detail

      • computeMeanOrbit

        public static KeplerianOrbit computeMeanOrbit​(Orbit osculating,
                                                      UnnormalizedSphericalHarmonicsProvider provider,
                                                      UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics harmonics,
                                                      double M2Value)
        Conversion from osculating to mean orbit.

        Compute mean orbit in a Brouwer-Lyddane sense, corresponding to the osculating SpacecraftState in input.

        Since the osculating orbit is obtained with the computation of short-periodic variation, the resulting output will depend on both the gravity field parameterized in input and the atmospheric drag represented by the m2 parameter.

        The computation is done through a fixed-point iteration process.

        Parameters:
        osculating - osculating orbit to convert
        provider - for un-normalized zonal coefficients
        harmonics - provider.onDate(osculating.getDate())
        M2Value - value of empirical drag coefficient in rad/s². If equal to BrouwerLyddanePropagator.M2 drag is not considered
        Returns:
        mean orbit in a Brouwer-Lyddane sense
        Since:
        11.2
      • computeMeanOrbit

        public static KeplerianOrbit computeMeanOrbit​(Orbit osculating,
                                                      UnnormalizedSphericalHarmonicsProvider provider,
                                                      UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics harmonics,
                                                      double M2Value,
                                                      double epsilon,
                                                      int maxIterations)
        Conversion from osculating to mean orbit.

        Compute mean orbit in a Brouwer-Lyddane sense, corresponding to the osculating SpacecraftState in input.

        Since the osculating orbit is obtained with the computation of short-periodic variation, the resulting output will depend on both the gravity field parameterized in input and the atmospheric drag represented by the m2 parameter.

        The computation is done through a fixed-point iteration process.

        Parameters:
        osculating - osculating orbit to convert
        provider - for un-normalized zonal coefficients
        harmonics - provider.onDate(osculating.getDate())
        M2Value - value of empirical drag coefficient in rad/s². If equal to BrouwerLyddanePropagator.M2 drag is not considered
        epsilon - convergence threshold for mean parameters conversion
        maxIterations - maximum iterations for mean parameters conversion
        Returns:
        mean orbit in a Brouwer-Lyddane sense
        Since:
        11.2
      • computeMeanOrbit

        public static KeplerianOrbit computeMeanOrbit​(Orbit osculating,
                                                      double referenceRadius,
                                                      double mu,
                                                      double c20,
                                                      double c30,
                                                      double c40,
                                                      double c50,
                                                      double M2Value,
                                                      double epsilon,
                                                      int maxIterations)
        Conversion from osculating to mean orbit.

        Compute mean orbit in a Brouwer-Lyddane sense, corresponding to the osculating SpacecraftState in input.

        Since the osculating orbit is obtained with the computation of short-periodic variation, the resulting output will depend on both the gravity field parameterized in input and the atmospheric drag represented by the m2 parameter.

        The computation is done through a fixed-point iteration process.

        Parameters:
        osculating - osculating orbit to convert
        referenceRadius - reference radius of the Earth for the potential model (m)
        mu - central attraction coefficient (m³/s²)
        c20 - un-normalized zonal coefficient (about -1.08e-3 for Earth)
        c30 - un-normalized zonal coefficient (about +2.53e-6 for Earth)
        c40 - un-normalized zonal coefficient (about +1.62e-6 for Earth)
        c50 - un-normalized zonal coefficient (about +2.28e-7 for Earth)
        M2Value - value of empirical drag coefficient in rad/s². If equal to BrouwerLyddanePropagator.M2 drag is not considered
        epsilon - convergence threshold for mean parameters conversion
        maxIterations - maximum iterations for mean parameters conversion
        Returns:
        mean orbit in a Brouwer-Lyddane sense
        Since:
        11.2
      • resetInitialState

        public void resetInitialState​(SpacecraftState state,
                                      PropagationType stateType)
        Reset the propagator initial state.
        Parameters:
        state - new initial state to consider
        stateType - mean Brouwer-Lyddane orbit or osculating orbit
      • resetInitialState

        public void resetInitialState​(SpacecraftState state,
                                      PropagationType stateType,
                                      double epsilon,
                                      int maxIterations)
        Reset the propagator initial state.
        Parameters:
        state - new initial state to consider
        stateType - mean Brouwer-Lyddane orbit or osculating orbit
        epsilon - convergence threshold for mean parameters conversion
        maxIterations - maximum iterations for mean parameters conversion
        Since:
        11.2
      • resetIntermediateState

        protected void resetIntermediateState​(SpacecraftState state,
                                              boolean forward)
        Reset an intermediate state.
        Specified by:
        resetIntermediateState in class AbstractAnalyticalPropagator
        Parameters:
        state - new intermediate state to consider
        forward - if true, the intermediate state is valid for propagations after itself
      • resetIntermediateState

        protected void resetIntermediateState​(SpacecraftState state,
                                              boolean forward,
                                              double epsilon,
                                              int maxIterations)
        Reset an intermediate state.
        Parameters:
        state - new intermediate state to consider
        forward - if true, the intermediate state is valid for propagations after itself
        epsilon - convergence threshold for mean parameters conversion
        maxIterations - maximum iterations for mean parameters conversion
        Since:
        11.2
      • getM2

        public double getM2()
        Get the value of the M2 drag parameter. Beware that M2Driver must have only 1 span on its TimeSpanMap value (that is to say setPeriod method should not be called)
        Returns:
        the value of the M2 drag parameter
      • getMu

        public double getMu()
        Get the central attraction coefficient μ.
        Returns:
        mu central attraction coefficient (m³/s²)
      • getCk0

        public double[] getCk0()
        Get the un-normalized zonal coefficients.
        Returns:
        the un-normalized zonal coefficients
      • getReferenceRadius

        public double getReferenceRadius()
        Get the reference radius of the central body attraction model.
        Returns:
        the reference radius in meters
      • createHarvester

        protected AbstractMatricesHarvester createHarvester​(String stmName,
                                                            RealMatrix initialStm,
                                                            DoubleArrayDictionary initialJacobianColumns)
        Create the harvester suitable for propagator.
        Overrides:
        createHarvester in class AbstractPropagator
        Parameters:
        stmName - State Transition Matrix state name
        initialStm - initial State Transition Matrix ∂Y/∂Y₀, if null (which is the most frequent case), assumed to be 6x6 identity
        initialJacobianColumns - initial columns of the Jacobians matrix with respect to parameters, if null or if some selected parameters are missing from the dictionary, the corresponding initial column is assumed to be 0
        Returns:
        harvester to retrieve computed matrices during and after propagation