|
| 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