EPOCH_UTC = "2023-05-16T20:00:00" EPOCH_UTC_DRAG = "2023-03-01T00:00:00"
SAMPLE_SECONDS = 3600.0
GMAT_ACCURACY = 1e-14
SPACECRAFT = dict(cd=2.2, drag_area_m2=10.0, dry_mass_kg=1000.0)
SW_TXT_URL = "https://celestrak.org/SpaceData/SW-All.txt"
MU_EARTH_KM3 = 398600.4418 MU_MOON_KM3 = 4902.800118
MU_SUN_KM3 = 132712440041.27942
DRAG_CONST = dict(atmosphere="NRLMSISE00", weather="constant",
f107=150.0, f107a=150.0, ap=4.0, gmat_kp=1.0)
DRAG_FILE = dict(atmosphere="NRLMSISE00", weather="CSSISpaceWeatherFile")
FORCE_MODELS = {
"j2": dict(gravity_model="EGM96", gravity_degree=2, gravity_order=2,
sun=True, moon=True, tides="None", relativity=False, drag=None),
"full": dict(gravity_model="EGM96", gravity_degree=36, gravity_order=36,
sun=True, moon=True, tides="SolidStep1", relativity=False, drag=None),
"gr": dict(gravity_model="EGM96", gravity_degree=36, gravity_order=36,
sun=True, moon=True, tides="SolidStep1", relativity=True, drag=None),
"drag_const": dict(gravity_model="EGM96", gravity_degree=36, gravity_order=36,
sun=True, moon=True, tides="SolidStep1", relativity=False,
drag=DRAG_CONST),
"drag_sw": dict(gravity_model="EGM96", gravity_degree=36, gravity_order=36,
sun=True, moon=True, tides="SolidStep1", relativity=False,
drag=DRAG_FILE),
}
ORBITS = {
"leo_iss": dict(kep=(6778.0, 0.001, 51.6, 30.0, 40.0, 50.0), days=7),
"sso_800": dict(kep=(7178.0, 0.0012, 98.6, 120.0, 90.0, 0.0), days=7),
"meo_gps": dict(kep=(26560.0, 0.01, 55.0, 200.0, 30.0, 100.0), days=7),
"molniya": dict(kep=(26600.0, 0.74, 63.4, 250.0, 270.0, 0.0), days=7),
"geo": dict(kep=(42164.0, 0.0003, 0.1, 0.0, 0.0, 45.0), days=7),
"tess": dict(cart=(-130142.3736645361, 120626.1878655891, 126520.4971633258,
-0.308744045658656, -1.40299418814228, -0.0616245044905574416),
days=7),
"cislunar": dict(kep=(300000.0, 0.0, 20.0, 60.0, 0.0, 180.0), days=7),
"iss_420": dict(kep=(6798.0, 0.0005, 51.6, 30.0, 40.0, 50.0), days=3,
epoch=EPOCH_UTC_DRAG, spacecraft=SPACECRAFT),
"leo_300": dict(kep=(6678.0, 0.0005, 45.0, 120.0, 90.0, 0.0), days=3,
epoch=EPOCH_UTC_DRAG, spacecraft=SPACECRAFT),
"sso_550": dict(kep=(6928.0, 0.001, 97.6, 200.0, 90.0, 0.0), days=3,
epoch=EPOCH_UTC_DRAG, spacecraft=SPACECRAFT),
"gto_250": dict(kep=(24396.0, 0.72832, 27.0, 60.0, 180.0, 0.0), days=3,
epoch=EPOCH_UTC_DRAG, spacecraft=SPACECRAFT),
}
def _c(orbit, fm, pos_m, vel_mps, name=None):
return dict(name=name or f"{orbit}_{fm}", orbit=orbit, force_model=fm,
tolerance=dict(pos_m=pos_m, vel_mps=vel_mps))
def _d(orbit, weather, pos_m, vel_mps, **extra):
short = {"iss_420": "iss", "leo_300": "leo300", "sso_550": "sso550", "gto_250": "gto"}[orbit]
return dict(_c(orbit, f"drag_{weather}", pos_m, vel_mps, name=f"drag_{short}_{weather}"), **extra)
CASES = [
_c("leo_iss", "j2", 0.10, 1e-4), _c("leo_iss", "full", 1.50, 2e-3), _c("leo_iss", "gr", 1.50, 2e-3), _c("sso_800", "j2", 0.10, 1e-4), _c("sso_800", "full", 1.50, 1.5e-3), _c("meo_gps", "j2", 0.30, 5e-5), _c("meo_gps", "full", 0.30, 5e-5), _c("molniya", "j2", 0.50, 2e-4), _c("molniya", "full", 6.00, 5e-3), _c("geo", "j2", 0.50, 4e-5), _c("geo", "full", 0.50, 4e-5), _c("tess", "j2", 3.00, 1e-5), _c("tess", "full", 3.00, 1e-5), _c("tess", "gr", 3.00, 1e-5), _c("cislunar", "j2", 2.00, 1e-5), _c("cislunar", "full", 2.00, 1e-5), _c("cislunar", "gr", 2.00, 1e-5), _d("iss_420", "const", 80.0, 0.10), _d("iss_420", "sw", 1.0e3, 1.1), _d("leo_300", "const", 900.0, 1.0), _d("leo_300", "sw", 7.0e3, 8.0, gmat_accuracy=1e-13), _d("sso_550", "const", 100.0, 0.12), _d("sso_550", "sw", 110.0, 0.12), _d("gto_250", "const", 30.0, 2.5e-2), _d("gto_250", "sw", 1.0e3, 0.7), ]