Feature/test drag#296
Merged
Merged
Conversation
…ove force handling
…tPropagator SpacecraftPropagator now owns all force building for custom integrators, mirroring the existing VV convenience constructor pattern. RK78Integrator constructors no longer require forces or initial state; forces are added via AddForce() and Initialize() is called by the propagator. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement dual-mode propagator: SSB-centered (existing, for interplanetary) and central-body-centered (new, for planetary satellite missions). The central-body mode avoids catastrophic cancellation in double precision that occurs when computing satellite-to-body vectors from SSB-centered positions (~5 significant digits lost for LEO). - Add ThirdBodyPerturbation force using Battin's numerically stable formulation: a = -mu / |r-d|^3 * (r + f(q)*d), where f(q) stably computes (1+q)^(3/2)-1 and |r-d|^3 = |d|^3*(1+q)^(3/2) - Add centralBody constructor overloads to SpacecraftPropagator - Replace old propagation tests with conformance-based tests from GMAT R2025a reference data (cases 001, 002, 003) - Both modes tested against same GMAT reference within tolerances Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tests; remove .NET 8.0 support - Introduce PropagatorBase, SsbPropagator, and CentralBodyPropagator for modular propagation modes - Implement conformance and infrastructure tests for new propagators - Update Spacecraft propagation logic to select appropriate propagator based on observer type - Remove .NET 8.0 target from project files and NuSpec; standardize on net10.0 - Refactor usages and comments for new propagator classes - Adjust test tolerances and assertions for improved accuracy and consistency
…nd test project references for consistent community linkage; add CLAUDE.md with repository guidance
…formance; refactor GetEphemeris methods and introduce PropagationEphemerisCache
…tate vector handling; convert CB-relative states to SSB-relative on demand and optimize ephemeris retrieval
…ctors for force evaluation; implement UpdateState method for improved state management
…ect corrected ephemeris values
…n-SPICE observers; enhance GetGeometricStateRelativeTo methods across celestial objects
…mputation for non-SPICE observers; reduce SSB round-trips and improve memory allocation efficiency
…amics propagation - Added performance benchmark results for RK78 integration methods in Markdown, CSV, and HTML formats. - Implemented BisectionEventFinder for root-finding within integration steps using cubic Hermite interpolation. - Created AcceptedStep struct to represent integration steps with start and end states. - Introduced CrossingDirection enum to specify event triggering directions. - Developed IEventDetector interface for industry-standard event detection based on continuous g-functions. - Implemented ManeuverEventDetector class to handle impulse maneuvers and event-driven triggering. - Added IntegrationResult struct to encapsulate results of integration segments, including detected events. - Created PropagationSegment class to manage continuous propagation arcs and provide cubic Hermite interpolation. - Developed PropagationSolution class to manage multiple segments and interpolate states at given epochs.
…ralBodyPropagator, implement segment-based event-driven maneuver execution, and enhance event detection system with g-function approach.
…espectively; add IO.Astrodynamics.CLI project to solution
…isTests for accuracy
…propagator-rework # Conflicts: # src/community/IO.Astrodynamics.Net/IO.Astrodynamics.Tests/Propagators/PropagatorTests.cs
… StateVectors access modifier
…prove internal access modifiers
…hemeris computation strategy
…te state vector retrieval
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request updates the propagation and ephemeris API to simplify usage, improve clarity, and make SSB-relative state handling an internal detail. The most significant changes are that all
Propagate()methods now return aPropagationSolutionfor dense output, SSB-specific methods have been removed from the public API, and SPK files are now written with central-body-relative states. Documentation and tests have been updated accordingly.API and Behavior Changes:
Propagate()methods (PropagatorBase,CentralBodyPropagator,TLEPropagator,Spacecraft.Propagate()/PropagateAsync()) now return aPropagationSolutionobject, enabling dense output viaInterpolateAt(epoch). Previously, callers accessed propagated states directly fromStateVectorsRelativeToICRF. [1] [2] [3] [4] [5] [6] [7]GetGeometricStateFromICRF,GetEphemerisFromICRF) have been removed from public interfaces and are now internal. Equivalent functionality is available usingGetEphemeris(epoch, target, observer, frame, aberration)with SSB as the observer. SSB-relative states are now used internally only for aberration correction and star positions. [1] [2]Spacecraft.WriteEphemeris()now contain states relative to the central body, not SSB; SPICE will chain ephemerides automatically using the center body ID.Documentation Updates:
DEVELOPER_GUIDE.mdto reflect the new propagation API, clarify thatStateVectorsRelativeToICRFare CB-relative, and document the internal use of SSB-relative states. [1] [2] [3] [4] [5] [6] [7] [8] [9]Test Suite Updates:
ConfigurationTest.csto use the newGetEphemerismethod (with explicit observer argument) instead of the removedGetEphemerisFromICRF. Test names and assertions were updated to match the new API. [1] [2] [3]