Main differences between V4.18 and V4.17

De Patrius
Aller à la navigation Aller à la recherche

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

New functionalities

  • Added a new atmospheric model NRLMSIS 2.0, in addition from the existing NRLMSIS 1.0 model. The solar flux and geomagnetic activity inputs are the same for both versions of the MSIS models. Note that the FORTRAN reference model excludes the NO (Nitric Oxide) element. The same applies to the implemented model in PATRIUS, as it is based on the reference model. Other elements (He, O, N2, etc.), as well as pressure and temperature, are however taken into account.
  • Added to the ThirdBodyAttraction constructors the ability to provide a specific gravity model for the indirect terms. If none is provided, the gravity model already supplied for the third-body attraction calculation is used to compute the indirect terms (backward compatibility). To disable the computation of indirect terms, a gravity model that does not include harmonics must be provided.
  • Added a service to the ApparentRadiusProvider interface to calculate the maximum apparent radius of a body as seen by a satellite. This radius, expressed in meters, corresponds to the maximum distance from the body's center to any point on its surface belonging to the limb ellipse (contour ellipse) viewed by the satellite.
  • Added new constructors to the ModelFunction class to enable the optimization of various function types: ℝⁿ → ℝ : MultivariateFunction, ℝ → ℝ : UnivariateFunction and ℝ → ℝⁿ : UnivariateVectorFunction.
  • Added support of the method StrictLegsSequence#addAll
  • Added systematic acceleration calculation in BSP ephemerides (previously not calculated at all) via Chebyshev polynomial expansion. No regression expected on positions and velocities.
  • Added a class SafetyMarginDetector to detect escape limits crossings. User can choose between two methods to compute escape limit: either at the satellite position or at the orbit’s pericenter.
  • New AstronomicalNightDetector detector allowing to find for astronomical dawn and dusk events (independent of the actual spacecraft state).
  • Improved matrix toString display: Systematic display of row x column dimensions and large/small numbers are shown in scientific notation without numerical approximation for computing formats (JAVA, OCTAVE, SCILAB and NUMPY).
  • Added support for the Alpha-5 TLE numbering format, extending the range of supported satellite catalog numbers from [0; 99,999] to [0; 339,999].
  • Fixed excessive memory consumption in detectors inheriting from AbstractSignalPropagationDetector. This issue occurred when detecting a large number of events, particularly during long propagation analyses. Implementing date caching, fully transparent to the user, resolves this issue.

Bugs fixes

  • In BSPEphemerisLoader, fix the TDB offset extraction by applying a “/ 1000” conversion, fix an error message that could lead to an infinite loop, update the getTDBModel() method so it can be called directly without having to call before the loadCelestialBodyEphemeris method.
  • Fix the method FacetBodyShape#getIntersectionPoint which was using a line defined in the wrong coordinate system to compute the closest triangles.
  • Fix for reading .bsp files when the binary file format is not declared at the correct index (more robust DafHandleManager method).
  • Correction in the AbstractEllipsoidBodyShape#getApparentRadiusDirection method: using the observer's PVCoordinatesProvider instead of the body's (this) as the origin for the first direction vector. This incorrect behavior had an impact when the input direction depended on the observer's trajectory (for example, with a VelocityDirection linked to the observing satellite).
  • Added a cache system to store and manage the “other dates” in AbstractSignalPropagationDetector instead of storing them indefinitely in a Map, which could cause large memory consumption during long propagations.
  • Added validation checks during orbital parameter construction to prevent the creation of physically inconsistent ApsisOrbit, EquatorialOrbit, or KeplerianOrbit objects:
    • KeplerianParameters / EquatorialParameters: the condition “e >= 0” must be satisfied
    • ApsisAltitudeParameters / ApsisRadiusParameters: the condition “periapsis > 0” must be satisfied
  • Fixed an issue related to the static initialization of certain dates from the TDB time scale (which is user-configurable). These dates are now dynamically initialized within the constructors of the affected classes: UserIAUPole, BSPEphemerisLoader, and PosVelChebyshev. As a result, the user must configure the desired TDB scale before instantiating these classes.