from benchmarks.comparative.tasks.base import BenchmarkTask
R_EARTH = 6378137.0
GM_EARTH = 3.986004418e14
_FIXED_EPOCH_JD = 2460310.5 _FIXED_STATE_ECI = [
6_525_919.0,
1_710_416.0,
2_508_886.0,
-2_682.6,
7_209.5,
-1_953.7,
]
_N_SAMPLES = 100
class _AccelTaskBase(BenchmarkTask):
@property
def module(self) -> str:
return "force_model"
@property
def languages(self) -> list[str]:
return ["python", "rust", "java"]
def _base_params(self) -> dict:
return {
"jd": _FIXED_EPOCH_JD,
"state_eci": list(_FIXED_STATE_ECI),
"n_samples": _N_SAMPLES,
}
class AccelPointMassGravityTask(_AccelTaskBase):
@property
def name(self) -> str:
return "force_model.accel_point_mass_gravity"
@property
def description(self) -> str:
return "Evaluate point-mass gravity acceleration at a fixed LEO state"
def generate_params(self, seed: int) -> dict:
return self._base_params()
class AccelSphericalHarmonics20Task(_AccelTaskBase):
@property
def name(self) -> str:
return "force_model.accel_spherical_harmonics_20"
@property
def description(self) -> str:
return "Evaluate 20x20 spherical-harmonic gravity acceleration at a fixed LEO state"
def generate_params(self, seed: int) -> dict:
p = self._base_params()
p["degree"] = 20
p["order"] = 20
return p
class AccelSphericalHarmonics80Task(_AccelTaskBase):
@property
def name(self) -> str:
return "force_model.accel_spherical_harmonics_80"
@property
def description(self) -> str:
return "Evaluate 80x80 spherical-harmonic gravity acceleration at a fixed LEO state"
def generate_params(self, seed: int) -> dict:
p = self._base_params()
p["degree"] = 80
p["order"] = 80
return p
class AccelThirdBodySunTask(_AccelTaskBase):
@property
def name(self) -> str:
return "force_model.accel_third_body_sun"
@property
def description(self) -> str:
return "Evaluate Sun third-body acceleration (DE440s) at a fixed LEO state"
def generate_params(self, seed: int) -> dict:
return self._base_params()
class AccelThirdBodyMoonTask(_AccelTaskBase):
@property
def name(self) -> str:
return "force_model.accel_third_body_moon"
@property
def description(self) -> str:
return "Evaluate Moon third-body acceleration (DE440s) at a fixed LEO state"
def generate_params(self, seed: int) -> dict:
return self._base_params()