1 changed files with 0 additions and 77 deletions
@ -1,77 +0,0 @@
|
||||
# Find Dominant Body Bug: Mutual SOI Issue |
||||
|
||||
## Overview |
||||
This documents the remaining issue with `find_dominant_body()` when two similar-mass bodies are positioned within each other's sphere of influence (SOI). |
||||
|
||||
**Date:** January 20, 2026 |
||||
**Status:** Failing Test (Test 4 from test_plan_invalid_parent_assignment.md) |
||||
**Related:** `docs/test_plan_invalid_parent_assignment.md` |
||||
|
||||
--- |
||||
|
||||
## Test Case 4: Mutual SOI - Similar Mass Planets |
||||
|
||||
**Purpose:** Edge case: two Earth-like planets positioned within each other's SOI |
||||
|
||||
**Actual Result:** ❌ **STILL FAILS** (separate issue, not fixed by spacecraft validation) |
||||
|
||||
**Config:** `tests/configs/mutual_soi_close.toml` |
||||
|
||||
**Setup:** |
||||
- PlanetA: mass = 5.972e24 kg, position = {1.496e11, 0, 0} |
||||
- PlanetB: mass = 5.972e24 kg, position = {1.501e11, 0, 0} |
||||
- Separation: 5e8 meters (500 million km) |
||||
- Planet SOI: ~9.25e8 meters (925 million km) |
||||
- **Both planets within each other's SOI** |
||||
|
||||
**Why This Fails:** |
||||
- Both planets start with parent=0 (Sun) |
||||
- Both are within each other's SOI |
||||
- `find_dominant_body()` logic selects closest body within SOI |
||||
- Result: PlanetA selects PlanetB as parent, PlanetB selects PlanetA as parent |
||||
- Config validation passes (both are ≥ parent.radius + body.radius from Sun) |
||||
|
||||
**Key Assertions:** |
||||
```cpp |
||||
// Both should orbit Sun (not each other) |
||||
REQUIRE(sim->bodies[PLANET_A_IDX].parent_index == SUN_IDX); |
||||
REQUIRE(sim->bodies[PLANET_B_IDX].parent_index == SUN_IDX); |
||||
|
||||
// Planets should never have each other as parents |
||||
for (int parent : history.planet_a_parents) { |
||||
REQUIRE(parent != PLANET_B_IDX); |
||||
} |
||||
for (int parent : history.planet_b_parents) { |
||||
REQUIRE(parent != PLANET_A_IDX); |
||||
} |
||||
``` |
||||
|
||||
**Expected Behavior (Option A):** |
||||
- Both planets should continue orbiting Sun |
||||
- Neither should become other's parent |
||||
- This requires future fix to `find_dominant_body()` logic (mass hierarchy check) |
||||
|
||||
--- |
||||
|
||||
## Future Work |
||||
|
||||
### Current Status |
||||
Tests 1-3 from the parent assignment test suite are now passing. Test 4 continues to fail, documenting a separate mutual SOI issue. |
||||
|
||||
### Potential Fixes for Test 4 |
||||
1. Add mass hierarchy check to `find_dominant_body()` |
||||
2. Prevent mutual SOI assignments for similar-mass bodies |
||||
3. Detect and reject invalid configs at load time |
||||
4. Implement proper N-body interaction or restricted 3-body solution |
||||
|
||||
### Enhanced Detection |
||||
- SOI overlap detection at config load time |
||||
- Automatic correction of invalid parent assignments |
||||
- Validation warnings for edge cases |
||||
|
||||
--- |
||||
|
||||
## References |
||||
- `src/simulation.cpp:64-107` - `find_dominant_body()` implementation |
||||
- `tests/configs/mutual_soi_close.toml` - Test configuration for mutual SOI case |
||||
- `tests/test_invalid_parent_assignment.cpp` - Test suite implementation |
||||
Loading…
Reference in new issue