Class FieldImpulseManeuver<D extends FieldEventDetector<T>,​T extends CalculusFieldElement<T>>

  • Type Parameters:
    D - type of the detector
    T - type of the field elements
    All Implemented Interfaces:
    FieldEventDetector<T>

    public class FieldImpulseManeuver<D extends FieldEventDetector<T>,​T extends CalculusFieldElement<T>>
    extends FieldAbstractDetector<FieldImpulseManeuver<D,​T>,​T>
    Impulse maneuver model for propagators working with Fields.

    This class implements an impulse maneuver as a discrete event that can be provided to any Propagator and mirrors the standard version ImpulseManeuver.

    The maneuver is triggered when an underlying event generates a STOP event, in which case this class will generate a RESET_STATE event (the stop event from the underlying object is therefore filtered out). In the simple cases, the underlying event detector may be a basic date event, but it can also be a more elaborate apside event for apogee maneuvers for example.

    The maneuver is defined by a single velocity increment. If no AttitudeProvider is given, the current attitude of the spacecraft, defined by the current spacecraft state, will be used as the AttitudeProvider so the velocity increment should be given in the same pseudoinertial frame as the FieldSpacecraftState used to construct the propagator that will handle the maneuver. If an AttitudeProvider is given, the velocity increment given should be defined appropriately in consideration of that provider. So, a typical case for tangential maneuvers is to provide a LOF aligned attitude provider along with a velocity increment defined in accordance with that LOF aligned attitude provider; e.g. if the LOF aligned attitude provider was constructed using LOFType.VNC the velocity increment should be provided in VNC coordinates.

    The norm through which the delta-V maps to the mass consumption is chosen via the enum Control3DVectorCostType. Default is Euclidean.

    Beware that the triggering event detector must behave properly both before and after maneuver. If for example a node detector is used to trigger an inclination maneuver and the maneuver change the orbit to an equatorial one, the node detector will fail just after the maneuver, being unable to find a node on an equatorial orbit! This is a real case that has been encountered during validation ...

    Since:
    12.0
    Author:
    Romain Serra
    See Also:
    FieldPropagator.addEventDetector(FieldEventDetector), ImpulseManeuver
    • Constructor Detail

      • FieldImpulseManeuver

        public FieldImpulseManeuver​(D trigger,
                                    FieldVector3D<T> deltaVSat,
                                    T isp)
        Build a new instance.
        Parameters:
        trigger - triggering event
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
      • FieldImpulseManeuver

        public FieldImpulseManeuver​(D trigger,
                                    AttitudeProvider attitudeOverride,
                                    FieldVector3D<T> deltaVSat,
                                    T isp)
        Build a new instance.
        Parameters:
        trigger - triggering event
        attitudeOverride - the attitude provider to use for the maneuver
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
      • FieldImpulseManeuver

        public FieldImpulseManeuver​(D trigger,
                                    AttitudeProvider attitudeOverride,
                                    FieldVector3D<T> deltaVSat,
                                    T isp,
                                    Control3DVectorCostType control3DVectorCostType)
        Build a new instance.
        Parameters:
        trigger - triggering event
        attitudeOverride - the attitude provider to use for the maneuver
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
        control3DVectorCostType - increment's norm for mass consumption