Main differences between V4.14 and V4.13 : Différence entre versions

De Wiki
Aller à : navigation, rechercher
Ligne 28 : Ligne 28 :
 
** MIXED_MODELS: Allows the use of certain propagation models from PATRIUS 4.12 while using the most recent optimization algorithms.
 
** MIXED_MODELS: Allows the use of certain propagation models from PATRIUS 4.12 while using the most recent optimization algorithms.
 
** OLD_MODELS: Reverts to existing propagation models and some of the optimization algorithms present in PATRIUS 4.12.  
 
** OLD_MODELS: Reverts to existing propagation models and some of the optimization algorithms present in PATRIUS 4.12.  
Note: The enum is set to OLD_MODELS by default, and it's the responsibility of the user to use a NEW_MODELS configuration if desired.
+
'''Note: The enum is set to OLD_MODELS by default''', and it's the responsibility of the user to use a NEW_MODELS configuration if desired.
 
* Addition of a constructor in the AbstractCelestialBody class, providing access to a constructor available in AbstractCelestialPoint.
 
* Addition of a constructor in the AbstractCelestialBody class, providing access to a constructor available in AbstractCelestialPoint.
 
* Inclusion of a method hasNoLoader() in CelestialBodyFactory, allowing for a given body to verify if there is no default loader, enabling users to perform this check in advance and avoid using a default loader if there is a specific loader for the body.
 
* Inclusion of a method hasNoLoader() in CelestialBodyFactory, allowing for a given body to verify if there is no default loader, enabling users to perform this check in advance and avoid using a default loader if there is a specific loader for the body.

Version du 2 septembre 2024 à 08:40

PATRIUS V4.14 is a major release adding some new features and correcting some bugs.

New functionalities

  • The interpolation class EphemerisPVLagrange, using the Lagrange method, relies on the use of a Hermite-type interpolator, similarly to the EphemerisPVHermite class. The common elements now depend on an abstract class called AbstractEphemerisPvHermiteLagrange, which contains the Hermite interpolator on which the calculation can rely. The calculation time is improved by a factor of 4.
  • The creation of a new class, BodyShapeFitter, allows to fit any type of shape based on 9 available options (EllipsoidType). The utility fit methods have been moved from FacetBodyShape to this new class.
  • Refactoring of the precise summation and product algorithms (methods twoSumError and twoProductError) used in the AbsoluteDate and MathArrays classes inside the Precision class to enhance readability and reduce code duplication.
  • Introduction of a new detector, PlaneCrossingDetector, as a generalization of the existing NodeDetector. It allows a more general description of a crossing plane event in space from a given frame. The PlaneCrossingDetector directly inherits from AbstractDetector, and NodeDetector is an extension of PlaneCrossingDetector, which in turn extends AbstractDetector.
  • Enhancement of the message returned by the DimensionMismatchException to provide a precise explanation/cause related to the dimension incompatibility occurring during algorithm/computation execution.
  • Introduction of a new frame, TwoDirectionFrame, which is defined (similarly to TwoDirectionAttitudeLaw) by two directions and two axes.
  • Addition in the SpiceBody and BSPEphemerisLoader classes of a mechanism to load any body from a BSP file. Since the accepted list of bodies is limited, the introduction of a Map allows for defining additional bodies so that any body present in a BSP file can be read.
  • Enhancement of the CelestialBody interface to include methods getInertialFrame() and getRotatingFrame() without arguments (the orientation of a celestial body is not necessarily IAU, it can be tabulated).

Addition of an IAUCelestialBody interface (a child of CelestialBody) to carry the methods with the argument getInertialFrame(IAUPoleModelType) and getRotatingFrame(IAUPoleModelType). Evolution of the implementations of the interfaces in AbstractCelestialBody and AbstractIAUCelestialBody.

  • Clarification for users regarding the naming of certain enums and classes:
    • The enum Predefined is renamed as PredefinedFrameType.
    • The enum EphemerisType is renamed as PredefinedEphemerisType.
    • The class FactoryManagedFrame is renamed as PredefinedFrame.
  • Creation of a new interface IGeometricalFieldOfView as an extension of the IFieldOfView interface, incorporating the following functionalities:
    • Method getMainDirection() to return the pointing center for the specific field of view.
    • Method getAngularDistance(Vector3D direction, AngularDistanceType type) to calculate the angular distance between the given direction and the field of view, based on two available options accessible via the AngularDistanceType enum: MINIMAL and DIRECTIONAL.
  • Renaming of the enum DatationChoice to EventDatationType, and the abstract method (implemented in the child classes) getDatationChoice() to getEventDatationType().
  • Enhancement of the emitter/receiver management in event detectors to eliminate redundancies and potential inconsistencies. A new mechanism to describe the emitter and receiver is introduced through the creation of a new class, LinkTypeHandler, which is responsible for storing the emission/reception role of the main signal and the PVCoordinatesProvider of the other targeted element.
  • Modifications of the STELA-PATRIUS propagator calculation classes (STELA frames configuration, gravitational potential (zonal and tesseral), third body, friction force, PRS, solid tides) to ensure thread-safety.
  • Creation of the interface SerializablePredicate<T>.
  • Addition of additional getters in the PVEphemeris class to retrieve sample and optimal dates for interpolation.
  • Introduction of an enum (statically accessible in the PatriusConfiguration class) to parameterize the backward compatibility of certain propagation models and optimization algorithms based on what existed in version PATRIUS 4.12. Three options are available:
    • NEW_MODELS: Corresponds to the most recent propagation models/optimization algorithms.
    • MIXED_MODELS: Allows the use of certain propagation models from PATRIUS 4.12 while using the most recent optimization algorithms.
    • OLD_MODELS: Reverts to existing propagation models and some of the optimization algorithms present in PATRIUS 4.12.

Note: The enum is set to OLD_MODELS by default, and it's the responsibility of the user to use a NEW_MODELS configuration if desired.

  • Addition of a constructor in the AbstractCelestialBody class, providing access to a constructor available in AbstractCelestialPoint.
  • Inclusion of a method hasNoLoader() in CelestialBodyFactory, allowing for a given body to verify if there is no default loader, enabling users to perform this check in advance and avoid using a default loader if there is a specific loader for the body.
  • Incorporation of the distinction between planet/barycenter for celestial bodies. The barycenters of celestial bodies are added in PredefinedEphemerisType, which returns the same ephemeris as currently returned for the corresponding celestial body. This distinction is considered in the affected loader classes as well.
  • Consideration of the TDB timescale in the evaluation of Chebyshev polynomials within the PosVelChebyshev classes and in the JPLHistoricEphemerisLoader class.
  • Expansion of the functionalities of the MultiNumericalPropagator class to now allow propagating analytical propagators in addition to numerical propagators (hybrid operation). A new multipropagation class is introduced specifically for purely analytical cases: MultiAnalyticalPropagator.
  • Addition of a “name” attribute in the LLHCoordinates class.
  • Inclusion of a getter and associated toString(...) methods for the input coordinates of an EllipsoidPoint.
  • Serialization of the class “fr.cnes.sirius.patrius.covariance.Covariance” is now possible
  • Restoration of the constructor that allows defining a MomentumDirection with the only attribute PVCoordinatesProvider. In general, the frame is no longer mandatory in its definition.

Bugs fixes

  • Correction of issues related to the use of planetary BSP files.
  • Addition of a missing override of the filterEvent() method in the OneSatEventDetectorWrapper class.
  • Resolution of an anomaly related to an infinite loop when calling the TimeStampedInterpolableEphemeris.interpolate() method.
  • Correction regarding the consideration of inertial velocity in certain detectors and the throwing of an exception when this is unlikely.
  • Fix of a problem stemming from the use of TargetGroundPointing.getTargetPosition() to correctly consider the line from the center of the celestial body to the targeted point (rather than from the satellite to the targeted point).
  • Addition of a mechanism (exception thrown) that prohibits the use of precession models introduced in PATRIUS 4.13 if the backward compatibility configuration is activated (PatriusConfiguration.OLD_MODELS or PatriusConfiguration.MIXED_MODELS).