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

De Wiki
Aller à : navigation, rechercher
(Page créée avec « <font color=#556B2F>'''PATRIUS'''</font> V4.14 is a major release adding some new features and correcting some bugs. == New functionalities == * Celestial bodies and bar... »)
 
Ligne 3 : Ligne 3 :
 
== New functionalities ==
 
== New functionalities ==
  
* Celestial bodies and barycenters are now differentiated: celestial bodies are representated by the interface CelestialBody and barycenters are representated by the interface CelestialPoint. CelestialBody describes, besides the attributes of CelestialPoint, a GravityModel, an IAUPole and a BodyShape. The EMB and SSB objects are now built as CelestialPoint.
+
* 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.
* Add the Ecliptic_J2000 frame, accessible from FramesFactory.getEclipticJ2000(). Every CelestialPoint objects has a Ecliptic_J2000 frame defined in its center.
+
* 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.
* Add the G50 frame, accessible from FramesFactory.getG50().
+
* 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.
* A celestial body orientation can now be defined with quaternions. This evolution adds the interfaces CelestialBodyOrientation and CelestialBodyIAUOrientation (IAUPole renamed) and the class CelestialBodyTabulatedOrientation.
+
* 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.
* Add a generic filter method in the interface EventDetector (already applied for LocalTimeAngleDetector)
+
* Enhancement of the message returned by the DimensionMismatchException to provide a precise explanation/cause related to the dimension incompatibility occurring during algorithm/computation execution.
* Merge the eclipse and lightning ratio computation between EclipseDetector and SolarRadiationPressure.
+
* Introduction of a new frame, TwoDirectionFrame, which is defined (similarly to TwoDirectionAttitudeLaw) by two directions and two axes.
* The obliquity and precession model of the Earth (used for the MOD reference frame) has been made configurable through the configuration of reference frames:
+
* 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.
** Add the interface MODPrecessionModel and one implementation IAUMODPrecessionModel
+
* 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).  
** Add getters/setters in the frames configuration
+
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.
* Add the SurfaceDistanceDetector detector allowing to detect the distance at the surface of a celestial body (ellipsoid, facet body, etc).
+
* Clarification for users regarding the naming of certain enums and classes:
* Add the class ThreeAxisEllipsoid allowing to represent a 3-axis ellipsoid. This class extends EllipsoidBodyShape.
+
* * The enum Predefined is renamed as PredefinedFrameType.
* Add the DatePolynomialFunctionInterface#copy(AbsoluteDate newOriginDate) method, allowing to instanciate a new equivalent polynomial function at a different T0 date.
+
* * The enum EphemerisType is renamed as PredefinedEphemerisType.
* PotentialCoefficientsReader can now read gravity model sigmas
+
* * The class FactoryManagedFrame is renamed as PredefinedFrame.
* New SignalPropagationWrapperDetector allowing to wrap extisting compatible detectors and extract signal emitter and/or receiver dates associated to an event.
+
* Creation of a new interface IGeometricalFieldOfView as an extension of the IFieldOfView interface, incorporating the following functionalities:
* Add new methods in RealMatrix : double getMin(boolean absValue), double getMax(boolean absValue) and RealMatrix getAbs()
+
* * Method getMainDirection() to return the pointing center for the specific field of view.
* Add new matrix NUMPY_FORMAT format in MatrixUtils + new features
+
* * 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.
* AngularCorrection extends IParameterizable
+
* Renaming of the enum DatationChoice to EventDatationType, and the abstract method (implemented in the child classes) getDatationChoice() to getEventDatationType().
* Standard parameters in MeteorologicalConditions are public + a STANDARD pre-build instance is accessible
+
* 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.
* FiniteDistanceAngularCorrection : new interface allows characterizing an angular correction when the distance between the observer and the target is finite (to account for parallax correction, for example).
+
* 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.
* AstronomicalRefractionModel : new class to represent a troposhere refraction model. The new AstronomicalRefractionModelFactory class facilitate its usage.
+
* Creation of the interface SerializablePredicate<T>.
* VacuumSignalPropagation : new getEmitterPV & getReceiverPV methods + define the internal enumerate SignalPropagationRole to dissociate the role of transmitter or receiver.
+
* Addition of additional getters in the PVEphemeris class to retrieve sample and optimal dates for interpolation.
* IntervalMapSearcher : new class allowing to associate objects to date intervals with an optimized cache managment.
+
* 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:
* CardanCalculator : new class similar to AzimuthElevationCalculator, describing static computational methods for the Cardan angles.
+
* * NEW_MODELS: Corresponds to the most recent propagation models/optimization algorithms.
* ZernikePolynomial  : new class to represent a Zernike polynomial
+
* * MIXED_MODELS: Allows the use of certain propagation models from PATRIUS 4.12 while using the most recent optimization algorithms.
* LightAberrationCorrection : new class replacing StellarAberrationCorrection
+
* * 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 ==
 
== Bugs fixes ==
* LongitudeDetector : the 2pi->0 jump is fixed
+
* Correction of issues related to the use of planetary BSP files.
* Existing informatic formats for matrix representation in MatrixUtils (JAVA, OCTAVE, SCILAB, NUMPY) now display all the digits
+
* Addition of a missing override of the filterEvent() method in the OneSatEventDetectorWrapper class.
* The use of BSP files for celestial bodies has been made more robust.
+
* Resolution of an anomaly related to an infinite loop when calling the TimeStampedInterpolableEphemeris.interpolate() method.
* The PyramidalField union calculation is more robust in certain configurations.
+
* Correction regarding the consideration of inertial velocity in certain detectors and the throwing of an exception when this is unlikely.
* "FieldDescriptor: The printFunction parameter becomes serializable.
+
* 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).

Version du 2 septembre 2024 à 08:39

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).