Skip to content

Commit e171db4

Browse files
authored
Add files via upload
1 parent 8a3dcb1 commit e171db4

11 files changed

Lines changed: 1569 additions & 0 deletions
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
"""Preliminary ASTERION sizing checks.
2+
3+
This script intentionally performs only transparent first-order calculations.
4+
It is not a flight-design or certification tool.
5+
"""
6+
7+
from __future__ import annotations
8+
9+
import math
10+
from dataclasses import dataclass
11+
12+
13+
@dataclass(frozen=True)
14+
class AsterionBaseline:
15+
ring_radius_m: float = 12.0
16+
ring_speed_rpm: float = 4.3
17+
thruster_count: int = 12
18+
thruster_power_kw: float = 12.0
19+
total_power_low_kw: float = 200.0
20+
total_power_high_kw: float = 300.0
21+
22+
23+
def artificial_gravity(radius_m: float, speed_rpm: float) -> tuple[float, float]:
24+
if radius_m <= 0 or speed_rpm < 0:
25+
raise ValueError("Radius must be positive and speed cannot be negative.")
26+
omega = speed_rpm * 2.0 * math.pi / 60.0
27+
acceleration = omega**2 * radius_m
28+
return acceleration, acceleration / 9.80665
29+
30+
31+
def propulsion_power(count: int, unit_power_kw: float) -> float:
32+
if count < 0 or unit_power_kw < 0:
33+
raise ValueError("Thruster count and power must be non-negative.")
34+
return count * unit_power_kw
35+
36+
37+
def main() -> None:
38+
baseline = AsterionBaseline()
39+
acceleration, gravity_fraction = artificial_gravity(
40+
baseline.ring_radius_m, baseline.ring_speed_rpm
41+
)
42+
prop_power = propulsion_power(
43+
baseline.thruster_count, baseline.thruster_power_kw
44+
)
45+
46+
print("ASTERION FCTA-1 preliminary sizing")
47+
print(f"Ring acceleration: {acceleration:.3f} m/s^2")
48+
print(f"Artificial gravity: {gravity_fraction:.3f} g")
49+
print(f"Propulsion power: {prop_power:.1f} kW")
50+
print(
51+
"Non-propulsion power margin: "
52+
f"{baseline.total_power_low_kw - prop_power:.1f} to "
53+
f"{baseline.total_power_high_kw - prop_power:.1f} kW"
54+
)
55+
56+
57+
if __name__ == "__main__":
58+
main()

0 commit comments

Comments
 (0)