Class BoxAndSolarArraySpacecraft

  • All Implemented Interfaces:
    DragSensitive, RadiationSensitive

    public class BoxAndSolarArraySpacecraft
    extends Object
    implements RadiationSensitive, DragSensitive
    Class representing the features of a classical satellite with a convex body shape.

    The body can be either a simple parallelepipedic box aligned with spacecraft axes or a set of panels defined by their area and normal vector. Some panels may be moving to model solar arrays (or antennas that could point anywhere). This should handle accurately most spacecraft shapes. This model does not take cast shadows into account.

    The lift component of the drag force can be optionally considered. It should probably only be used for reentry computation, with much denser atmosphere than in regular orbit propagation. The lift component is computed using a ratio of molecules that experience specular reflection instead of diffuse reflection (absorption followed by outgassing at negligible velocity). Without lift (i.e. when the lift ratio is set to 0), drag force is along atmosphere relative velocity. With lift (i.e. when the lift ratio is set to any value between 0 and 1), the drag force depends on both relative velocity direction and panels normal orientation. For a single panel, if the relative velocity is head-on (i.e. aligned with the panel normal), the force will be in the same direction with and without lift, but the magnitude with lift ratio set to 1.0 will be twice the magnitude with lift ratio set to 0.0 (because atmosphere molecules bounces backward at same velocity in case of specular reflection).

    Each panel has its own set of radiation and drag coefficients. In orbit determination context, it would not be possible to estimate each panel individually, therefore getDragParametersDrivers() returns a single parameter driver representing a global drag multiplicative factor that applies to all panels drag coefficients and the getRadiationParametersDrivers() returns a single parameter driver representing a global radiation multiplicative factor that applies to all panels radiation coefficients.

    Author:
    Luc Maisonobe, Pascal Parraud
    • Constructor Detail

      • BoxAndSolarArraySpacecraft

        public BoxAndSolarArraySpacecraft​(List<Panel> panels)
        Build a spacecraft model.
        Parameters:
        panels - panels composing the body, solar arrays and antennas (only the panels with strictly positive area will be stored)
        Since:
        12.0
      • BoxAndSolarArraySpacecraft

        public BoxAndSolarArraySpacecraft​(double xLength,
                                          double yLength,
                                          double zLength,
                                          ExtendedPVCoordinatesProvider sun,
                                          double solarArrayArea,
                                          Vector3D solarArrayAxis,
                                          double dragCoeff,
                                          double liftRatio,
                                          double absorptionCoeff,
                                          double reflectionCoeff)
        Build a spacecraft model with best lighting of solar array.

        Solar arrays orientation will be such that at each time the Sun direction will always be in the solar array meridian plane defined by solar array rotation axis and solar array normal vector.

        Parameters:
        xLength - length of the body along its X axis (m)
        yLength - length of the body along its Y axis (m)
        zLength - length of the body along its Z axis (m)
        sun - sun model
        solarArrayArea - area of the solar array (m²)
        solarArrayAxis - solar array rotation axis in satellite frame
        dragCoeff - drag coefficient (used only for drag)
        liftRatio - lift ratio (proportion between 0 and 1 of atmosphere modecules that will experience specular reflection when hitting spacecraft instead of experiencing diffuse reflection, hence producing lift)
        absorptionCoeff - absorption coefficient between 0.0 an 1.0 (used only for radiation pressure)
        reflectionCoeff - specular reflection coefficient between 0.0 an 1.0 (used only for radiation pressure)
        Since:
        12.0
    • Method Detail

      • getPanels

        public List<Panel> getPanels()
        Get the panels composing the body.
        Returns:
        unmodifiable view of the panels composing the body
        Since:
        12.0
      • dragAcceleration

        public Vector3D dragAcceleration​(SpacecraftState state,
                                         double density,
                                         Vector3D relativeVelocity,
                                         double[] parameters)
        Compute the acceleration due to drag.

        The computation includes all spacecraft specific characteristics like shape, area and coefficients.

        Specified by:
        dragAcceleration in interface DragSensitive
        Parameters:
        state - current state
        density - atmospheric density at spacecraft position
        relativeVelocity - relative velocity of atmosphere with respect to spacecraft, in the same inertial frame as spacecraft orbit (m/s)
        parameters - values of the force model parameters
        Returns:
        spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
      • dragAcceleration

        public <T extends CalculusFieldElement<T>> FieldVector3D<T> dragAcceleration​(FieldSpacecraftState<T> state,
                                                                                     T density,
                                                                                     FieldVector3D<T> relativeVelocity,
                                                                                     T[] parameters)
        Compute the acceleration due to drag.

        The computation includes all spacecraft specific characteristics like shape, area and coefficients.

        Specified by:
        dragAcceleration in interface DragSensitive
        Type Parameters:
        T - instance of a CalculusFieldElement
        Parameters:
        state - current state
        density - atmospheric density at spacecraft position
        relativeVelocity - relative velocity of atmosphere with respect to spacecraft, in the same inertial frame as spacecraft orbit (m/s)
        parameters - values of the force model parameters
        Returns:
        spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
      • radiationPressureAcceleration

        public Vector3D radiationPressureAcceleration​(SpacecraftState state,
                                                      Vector3D flux,
                                                      double[] parameters)
        Compute the acceleration due to radiation pressure.
        Specified by:
        radiationPressureAcceleration in interface RadiationSensitive
        Parameters:
        state - current state
        flux - radiation flux in the same inertial frame as spacecraft orbit
        parameters - values of the force model parameters
        Returns:
        spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
      • radiationPressureAcceleration

        public <T extends CalculusFieldElement<T>> FieldVector3D<T> radiationPressureAcceleration​(FieldSpacecraftState<T> state,
                                                                                                  FieldVector3D<T> flux,
                                                                                                  T[] parameters)
        Compute the acceleration due to radiation pressure.

        This method implements equation 8-44 from David A. Vallado's Fundamentals of Astrodynamics and Applications, third edition, 2007, Microcosm Press.

        Specified by:
        radiationPressureAcceleration in interface RadiationSensitive
        Type Parameters:
        T - extends CalculusFieldElement
        Parameters:
        state - current state
        flux - radiation flux in the same inertial frame as spacecraft orbit
        parameters - values of the force model parameters
        Returns:
        spacecraft acceleration in the same inertial frame as spacecraft orbit (m/s²)
      • buildBox

        public static List<Panel> buildBox​(double xLength,
                                           double yLength,
                                           double zLength,
                                           double drag,
                                           double liftRatio,
                                           double absorption,
                                           double reflection)
        Build the panels of a simple parallelepipedic box.
        Parameters:
        xLength - length of the body along its X axis (m)
        yLength - length of the body along its Y axis (m)
        zLength - length of the body along its Z axis (m)
        drag - drag coefficient
        liftRatio - drag lift ratio (proportion between 0 and 1 of atmosphere modecules that will experience specular reflection when hitting spacecraft instead of experiencing diffuse reflection, hence producing lift)
        absorption - radiation pressure absorption coefficient (between 0 and 1)
        reflection - radiation pressure specular reflection coefficient (between 0 and 1)
        Returns:
        surface vectors array
        Since:
        12.0
      • buildPanels

        public static List<Panel> buildPanels​(double xLength,
                                              double yLength,
                                              double zLength,
                                              ExtendedPVCoordinatesProvider sun,
                                              double solarArrayArea,
                                              Vector3D solarArrayAxis,
                                              double drag,
                                              double liftRatio,
                                              double absorption,
                                              double reflection)
        Build the panels of a simple parallelepiped box plus one solar array panel.
        Parameters:
        xLength - length of the body along its X axis (m)
        yLength - length of the body along its Y axis (m)
        zLength - length of the body along its Z axis (m)
        sun - sun model
        solarArrayArea - area of the solar array (m²)
        solarArrayAxis - solar array rotation axis in satellite frame
        drag - drag coefficient
        liftRatio - drag lift ratio (proportion between 0 and 1 of atmosphere modecules that will experience specular reflection when hitting spacecraft instead of experiencing diffuse reflection, hence producing lift)
        absorption - radiation pressure absorption coefficient (between 0 and 1)
        reflection - radiation pressure specular reflection coefficient (between 0 and 1)
        Returns:
        surface vectors array
        Since:
        12.0