|
|
|
|
@ -9,11 +9,14 @@ Total estimated test files: 13-14
|
|
|
|
|
|
|
|
|
|
## Current Progress (2026-01-31) |
|
|
|
|
|
|
|
|
|
### Completed Tests (6/14 files) |
|
|
|
|
### Completed Tests (3/14 files fully passing) |
|
|
|
|
|
|
|
|
|
#### 1. ✅ test_cartesian_to_elements_basic.cpp + .toml |
|
|
|
|
- Status: FAILING (cartesian_to_orbital_elements implementation needs debugging) |
|
|
|
|
- Status: PASSING (12/12 assertions) - FIXED |
|
|
|
|
- Issue: NaN values in reconstructed radius/velocity |
|
|
|
|
- Fix: Corrected true_anomaly calculation (line 122 in orbital_mechanics.cpp) |
|
|
|
|
- Changed: `r_dot_e / mu` → `r_dot_e / (r_mag * e_mag)` |
|
|
|
|
- Added: cos(ν) clamping to [-1, 1] before acos() |
|
|
|
|
- Config: Moderate eccentricity (e=0.5), zero inclination |
|
|
|
|
- Tests: |
|
|
|
|
- Round-trip conversion: orbital elements → state vectors → orbital elements |
|
|
|
|
@ -21,9 +24,16 @@ Total estimated test files: 13-14
|
|
|
|
|
- Semi-major axis, eccentricity accuracy |
|
|
|
|
|
|
|
|
|
#### 2. ✅ test_newton_raphson_convergence.cpp (NO CONFIG) |
|
|
|
|
- Status: PASSING (24/25 assertions) |
|
|
|
|
- Status: PASSING (28/28 assertions) - FIXED |
|
|
|
|
- Issue: Low eccentricity (e=0.001) test had incorrect expectations |
|
|
|
|
- Fix: Changed test to verify Kepler's equation satisfaction instead of first-order approximation |
|
|
|
|
- Verify: |E - e·sin(E) - M| < 1.0e-10 |
|
|
|
|
- Verify: |E - (M + e·sin(M))| < 0.01 (first-order approximation) |
|
|
|
|
- Code changes: Refactored orbital_mechanics.cpp to separate elliptical/hyperbolic solvers |
|
|
|
|
- Added: `solve_kepler_elliptical()`, `solve_kepler_hyperbolic()` |
|
|
|
|
- Added: `eccentric_to_true_anomaly()`, `hyperbolic_to_true_anomaly()` |
|
|
|
|
- Added: `mean_anomaly_to_true_anomaly()` unified wrapper |
|
|
|
|
- Config: Programmatically varied parameters |
|
|
|
|
- Failing test: Low eccentricity (e=0.001) - error 0.001 > 1.0e-6 tolerance |
|
|
|
|
- Tests: |
|
|
|
|
- Very low eccentricity (e < 0.01): convergence rate verification |
|
|
|
|
- High eccentricity (0.9 < e < 0.99): iteration count limits |
|
|
|
|
@ -55,11 +65,18 @@ Total estimated test files: 13-14
|
|
|
|
|
- Accuracy vs. timestep size relationship |
|
|
|
|
- Mean anomaly accumulation over long propagation |
|
|
|
|
|
|
|
|
|
#### 5. ✅ test_extreme_eccentricity.cpp + .toml |
|
|
|
|
- Status: FAILING (config validation) |
|
|
|
|
- Config: Multiple spacecraft (e=0.99, e=0.95, e=1.5) |
|
|
|
|
#### 3. ✅ test_extreme_eccentricity.cpp + .toml |
|
|
|
|
- Status: PASSING (28/28 assertions) - FIXED |
|
|
|
|
- Issue: Config validation failing for spacecraft too close to parent |
|
|
|
|
- Notes: Modified configs multiple times to satisfy distance validation |
|
|
|
|
- Fix: |
|
|
|
|
- Config: Fixed "Near_Parabolic" (e=0.99, a=7.0e8) and "Slightly_Hyperbolic" (e=1.05, a=-1.3e8) |
|
|
|
|
- Test: Added validation to skip testing ν outside valid range for e>1 |
|
|
|
|
- For e>1: valid ν must satisfy |ν| < arccos(-1/e) |
|
|
|
|
- For e=1.05: max |ν| ≈ 2.83 rad (162°) |
|
|
|
|
- Code changes: Added `validate_true_anomaly_ranges()` to config_validator.cpp |
|
|
|
|
- Checks hyperbolic orbits for true anomaly validity |
|
|
|
|
- Validates ν is within asymptote boundaries for e>1 |
|
|
|
|
- Config: Multiple spacecraft (e=0.99, e=0.95, e=1.05) |
|
|
|
|
- Tests: |
|
|
|
|
- Numerical stability near e=1.0 |
|
|
|
|
- Hyperbolic solver switching |
|
|
|
|
@ -85,16 +102,116 @@ Total estimated test files: 13-14
|
|
|
|
|
- `solve_kepler_equation(double, double)` |
|
|
|
|
- `get_initial_trial_value(double, double)` |
|
|
|
|
- `propagate_orbital_elements(const OrbitalElements&, double, double)` |
|
|
|
|
- Modular API (refactored): |
|
|
|
|
- `solve_kepler_elliptical(double, double)` |
|
|
|
|
- `solve_kepler_hyperbolic(double, double)` |
|
|
|
|
- `eccentric_to_true_anomaly(double, double)` |
|
|
|
|
- `hyperbolic_to_true_anomaly(double, double)` |
|
|
|
|
- `mean_anomaly_to_true_anomaly(double, double)` |
|
|
|
|
|
|
|
|
|
- Added to `src/orbital_mechanics.cpp`: Full implementations |
|
|
|
|
- Newton-Raphson solver with 1e-10 tolerance, max 50 iterations |
|
|
|
|
- Series expansion initial guess: M + e*sin(M) + (e²/2)*sin(2M) |
|
|
|
|
- Cartesian to orbital elements conversion algorithm |
|
|
|
|
- Fixed: true_anomaly calculation with proper clamping (line 122) |
|
|
|
|
- Refactored: Separated elliptical/hyperbolic Kepler solvers |
|
|
|
|
|
|
|
|
|
- Removed from `src/test_utilities.h/.cpp`: `propagate_orbital_elements()` |
|
|
|
|
- Added to `src/config_validator.cpp`: TODO comment about parabolic tolerance (0.005 too broad) |
|
|
|
|
- Added to `src/config_validator.cpp`: |
|
|
|
|
- `validate_true_anomaly_ranges()` - checks hyperbolic anomaly limits |
|
|
|
|
- TODO comment about parabolic tolerance (0.005 too broad) |
|
|
|
|
|
|
|
|
|
**Test Results:** 66 passed, 14 failed (out of 80 test cases) |
|
|
|
|
**Bug Fixes:** |
|
|
|
|
1. `cartesian_to_orbital_elements()` (line 122): Fixed true_anomaly calculation |
|
|
|
|
- Corrected formula: r_dot_e / (r_mag * e_mag) instead of r_dot_e / mu |
|
|
|
|
- Added clamping: cos(ν) clamped to [-1, 1] before acos() |
|
|
|
|
|
|
|
|
|
2. `test_extreme_eccentricity.toml`: Fixed spacecraft parameters |
|
|
|
|
- "Near_Parabolic": e=0.99, a=7.0e8 |
|
|
|
|
- "Slightly_Hyperbolic": e=1.05, a=-1.3e8 |
|
|
|
|
|
|
|
|
|
3. `test_extreme_eccentricity.cpp`: Added hyperbolic anomaly validation |
|
|
|
|
- Skips testing ν=π and 3π/2 for e>1 (outside asymptote boundaries) |
|
|
|
|
|
|
|
|
|
4. `test_newton_raphson_convergence.cpp`: Fixed test expectations |
|
|
|
|
- Verifies Kepler's equation: |E - e·sin(E) - M| < 1.0e-10 |
|
|
|
|
- Verifies first-order approximation: |E - (M + e·sin(M))| < 0.01 |
|
|
|
|
|
|
|
|
|
**Test Results:** 74 passed, 6 failed (out of 80 test cases) |
|
|
|
|
|
|
|
|
|
**Recent Commits:** |
|
|
|
|
- 9d97934 Fix true anomaly calculation in cartesian_to_orbital_elements() |
|
|
|
|
- a46291a Fix test_extreme_eccentricity to skip invalid hyperbolic true anomalies |
|
|
|
|
- 47f156b Add true anomaly validation for hyperbolic orbits in config validator |
|
|
|
|
- 01e5492 Refactor orbital_mechanics: separate elliptical and hyperbolic Kepler solvers |
|
|
|
|
|
|
|
|
|
### Remaining Issues (6 failures) |
|
|
|
|
|
|
|
|
|
#### Critical Issues (2 failures): |
|
|
|
|
|
|
|
|
|
1. **test_analytical_propagation_apsides.cpp:57** - "v_perigee > v_before" test |
|
|
|
|
- Issue: Both measurements at same orbital anomaly, comparison meaningless |
|
|
|
|
- Status: Test logic bug (not implementation issue) |
|
|
|
|
- Priority: High (affects test validity) |
|
|
|
|
|
|
|
|
|
2. **test_analytical_propagation_timesteps.cpp** - 3 failures |
|
|
|
|
- Line 103: Small timestep position change (tolerance too tight) |
|
|
|
|
- Line 157: Relative error calculation (division by zero) |
|
|
|
|
- Line 199: True anomaly after 100 periods (2π wrapping) |
|
|
|
|
- Status: Test tolerance and 2π wrapping issues |
|
|
|
|
- Priority: High |
|
|
|
|
|
|
|
|
|
#### Non-Critical Issues (4 failures): |
|
|
|
|
|
|
|
|
|
3. **test_newton_raphson_convergence.cpp:164** - Boundary cases (e=0.9999, 1.0001) |
|
|
|
|
- Note: Tests pass but may have convergence issues for near-parabolic orbits |
|
|
|
|
- Status: Edge case, may be acceptable |
|
|
|
|
- Priority: Low |
|
|
|
|
|
|
|
|
|
4. **test_precision_boundaries.cpp** - 2 failures |
|
|
|
|
- Line 99: Polar orbit Z-coordinate (expected Z=7.5e6, actual Z=0) |
|
|
|
|
- Line 233: Angular momentum conservation error (41.4%) |
|
|
|
|
- Status: Polar orbit transformation issue |
|
|
|
|
- Priority: Medium |
|
|
|
|
|
|
|
|
|
5. **test_root_body_transitions.toml** - Config validation |
|
|
|
|
- Issue: "PlanetA and PlanetB have overlapping SOIs while sharing same parent 'Sun'" |
|
|
|
|
- Status: Config file needs adjustment |
|
|
|
|
- Priority: Low |
|
|
|
|
|
|
|
|
|
### Tests with Partial Failures (still tracked as completed): |
|
|
|
|
|
|
|
|
|
4. ✅ test_analytical_propagation_apsides.cpp + .toml |
|
|
|
|
- Status: PARTIAL (4/5 assertions passing) |
|
|
|
|
- Failing test: "v_perigee > v_before" - test logic issue (both at same anomaly) |
|
|
|
|
- Tests: |
|
|
|
|
- Propagation through perigee (velocity maximum) |
|
|
|
|
- Propagation through apogee (velocity minimum) |
|
|
|
|
- At exact orbital period: should return to initial state |
|
|
|
|
- True anomaly accuracy after full orbit |
|
|
|
|
- Vis-viva equation holds at multiple points |
|
|
|
|
|
|
|
|
|
6. ✅ test_analytical_propagation_timesteps.cpp + .toml |
|
|
|
|
- Status: PARTIAL (4/7 assertions passing) |
|
|
|
|
- Failing tests: |
|
|
|
|
- Small timestep position change (tolerance too tight for orbital motion) |
|
|
|
|
- Relative error calculation (division by zero when expected error is 0) |
|
|
|
|
- True anomaly after 100 periods (2π wrapping issue) |
|
|
|
|
- Tests: |
|
|
|
|
- Large timesteps: dt > 1 orbit period |
|
|
|
|
- Very small timesteps: dt < 1 second |
|
|
|
|
- Accuracy vs. timestep size relationship |
|
|
|
|
- Mean anomaly accumulation over long propagation |
|
|
|
|
|
|
|
|
|
7. ✅ test_precision_boundaries.cpp + .toml |
|
|
|
|
- Status: PARTIAL (14/15 assertions passing) |
|
|
|
|
- Failing test: Polar orbit Z-coordinate (expected Z=7.5e6, actual Z=0) |
|
|
|
|
- Notes: Fixed create_simulation calls to use max_craft=3 |
|
|
|
|
- Tests: |
|
|
|
|
- Eccentricity at exactly 0 |
|
|
|
|
- Inclination at 0°, 90°, 180° |
|
|
|
|
- Semi-major axis sign change |
|
|
|
|
- Angular momentum conservation |
|
|
|
|
|
|
|
|
|
### Remaining Tests (8 files) |
|
|
|
|
|
|
|
|
|
|