« Main differences between V4.18 and V4.17 » : différence entre les versions

De Patrius
Aller à la navigation Aller à la recherche
Page créée avec « <font color=#556B2F>'''PATRIUS'''</font> V4.18 is a major release adding some new features and correcting some bugs. == New functionalities == * When reading SP3 files, if the accuracy was not present, the parsing failed. This behavior has been modified to allow the parsing of files without accuracy. In that case, the accuracy is set to “0”. This is an impossible value of accuracy since in the SP3 file it is expressed as 2^n, so it is easy for the user to id... »
 
Aucun résumé des modifications
Ligne 2 : Ligne 2 :


== New functionalities ==
== New functionalities ==
* When reading SP3 files, if the accuracy was not present, the parsing failed. This behavior has been modified to allow the parsing of files without accuracy. In that case, the accuracy is set to “0”. This is an impossible value of accuracy since in the SP3 file it is expressed as 2^n, so it is easy for the user to identify the values that have not been read.
* 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.  
* To construct a SurfaceDistanceDetector, the CelestialBody attribute has been replaced by a BodyShape. Moreover, the getBody() method from DistanceDetector has been renamed getTarget().
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.
* The LaguerreSolver has been modifier to accept as input the maximum number of iterations allowed as well as multiple initial guesses (and their respective maximum iterations)
* 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.
* A new solver PolynomialRootsFinder that computes the roots for a polynomial using the eigenvalues of the companion matrix A of the input polynomial has been added to Patrius
* 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.
* It is now possible to define an extrapolation function builder in TimeStampedInterpolableEphemeris to complete the interpolation with an extrapolation feature on the left and right side of the samples. A new TimeStampedExtrapolationFunctionBuilder interface is created with no standard implementation.
* Added new constructors to the ModelFunction class to enable the optimization of various function types: ℝⁿ → ℝ : MultivariateFunction, ℝ → ℝ : UnivariateFunction and ℝ → ℝⁿ : UnivariateVectorFunction.
* New feature in ApparentRadiusProvider allowing to compute the apparent radius of the occulting body from the spacecraft (observer) position given a specific direction to describe the computation plane. In comparison, the existing method predefine this plane with the direction of the occulted object. The rest of the method / behavior stays identical.
* Added support of the method StrictLegsSequence#addAll
* BodyShape implements ApparentRadiusProvider and VariableRadiusProvider is deleted.
* Added systematic acceleration calculation in BSP ephemerides (previously not calculated at all) via Chebyshev polynomial expansion. No regression expected on positions and velocities.
* New feature RealMatrix#getDeterminant() to compute the determinant value directly from the matrix instead of having to use the appropriate decomposition solver on the matrix. Also, new feature in ArithmeticUtilsTest to compute all the permutations from a double vector (equivalent to “perms” function in MatLab).
* 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 class AnomalyUtils to centralize every conversion methods between mean, eccentric and true anomalies.
* Allows the user to configure the desired TDB time scale prior to instantiating UserIAUPole, BSPEphemerisLoader, and PosVelChebyshev objects. Dates are initialized within their respective constructors based on this TDB scale, rather than being handled in a static way.
* It is now possible to accept the non-optimal range interpolation in AbstractBoundedPVProvider (i.e. : EphemerisPvLagrange and EphemerisPvHermite)
* New AstronomicalNightDetector detector allowing to find for astronomical dawn and dusk events (independent of the actual spacecraft state).
* New constructors to build a LofOffset directly from a Rotation object
* 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).
* New constructor in SensorVisibilityDetector to describe the SatToSatLinkType/LinkType (before it was forced to be in SECONDARY_TO_MAIN mode)
* 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].
* Users can now read special TDB segments contained in BSP files in order to build a TDB model with TT-TDB offsets.
* New body point solar incidence detector based on the angle between the interest point-satellite vector and the interest point-sun vector.
* Possibility to provide an AbstractHarmonicGravityModel to a ThirdBodyAttraction in order to take into account the gravitational effects of the central body on this third body. The implemented modifications model the attraction of the third body γ as follows: γ = γ(third body → spacecraft) - γ(third body → central body).
* CELESTLAB inspired mission analysis functionalities added: InterplanetaryUtils (SOI computation, DV needed to join / leave an hyperbolic orbit from / to an elliptical one), ProgDetectorUtils (EventDetector wrapper used to compute intervals), EventUtils (Computation of shadow zones, visibility windows and geometry between a satellite and its target), KeplerianParamUtils (computation and conversion of several kerplerian orbit characteristics) and KeplerianParamComputer (Computation of all keplerian characteristics pertaining to an orbit defined with a semi-major axis, eccentricity and true anomaly)


== Bugs fixes ==
== Bugs fixes ==
* The class StrictAttitudeLegsSequence can now be serialized (also, the interfaces MultiEventDetector, TimeSequence & TimeStamped extend Serializable).
* 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.
* SP3 format expresses the accuracy in mm but Patrius interprets it as m. The conversion was missing.
* Fix the method FacetBodyShape#getIntersectionPoint which was using a line defined in the wrong coordinate system to compute the closest triangles.
* The interface MultiOrbitalCovarianceProvider (since 4.16) define a default implementation for its getOrbitalCovarianceProvider method.
* Fix for reading .bsp files when the binary file format is not declared at the correct index (more robust DafHandleManager method).
* Fix the local time’s signal propagation computation in BodyPointLocalTimeAngleDetector.
* 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).
* Fix the ConvergenceException exist only when the threshold value is reached in CartesianOrbit#meanToEccentric, CartesianOrbit#meanToHyperbolicEccentric, FacetBodyShape#getApparentRadius, CircularParameters#hyperbolicMeanToEccentric and KeplerianParameters#meanToHyperbolicEccentric
* 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.
* Generalize the behavior to throw a ConvergenceException when the convergence algorithm failed in AlternateEquinoctialParameters#getLE, CircularParameters#ellipticMeanToEccentric and EquinoctialParameters#meanToEccentric
* Added validation checks during orbital parameter construction to prevent the creation of physically inconsistent ApsisOrbit, EquatorialOrbit, or KeplerianOrbit objects.
* Fix the use of the deprecated PatriusMessages.DIMENSIONS_MISMATCH error message using an explicit message instead.
** KeplerianParameters / EquatorialParameters: the condition “e >= 0” must be satisfied
* In AbstractEllipsoidBodyShape#getApparentRadius the ellipsoid’s B radius was defined uncorrectly which may result in incorrect radius computation.
** ApsisAltitudeParameters / ApsisRadiusParameters: the condition “periapsis > 0” must be satisfied
* In the LineMaskingDetector detector, the case when mainElement isn’t null is now well managed.
* In AbstractBodyAttraction, the acceleration derivatives with respect to the parameter K is now computed in the input frame instead of being computed in the body frame.
* In SolarTimeAngleDetector and in AlignmentDetector the sun (respectively the body) is now expressed in the working frame, corresponding to the first pseudo-inertial frame ancestor, when the spacecraft state’s frame isn’t pseudo-inertial.
* Fix the body masking distance and the spacecraft masking distance computation in in SensorVisibilityDetector#g (uses LinkType.DOWNLINK instead of LinkType.UPLINK)
* Fix the UserIAUPole#getAngularCoordinates#ICRF_TO_INERTIAL computation by using Euler angles

Version du 10 juin 2026 à 10:03

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.
  • Allows the user to configure the desired TDB time scale prior to instantiating UserIAUPole, BSPEphemerisLoader, and PosVelChebyshev objects. Dates are initialized within their respective constructors based on this TDB scale, rather than being handled in a static way.
  • 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].

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