Physics
Free-molecular aerodynamics
Rarefied-gas force and torque on every panel, summed over the vehicle, with the atmosphere rotating with the Earth. Two gas–surface interaction (GSI) models are available: Sentman (the default) and the Walker closed-form Cercignani–Lampis–Lord (CLL) fit.
Source: cpp/src/aero/sentman.cpp (panel sum + Sentman), cpp/src/aero/cll.cpp (Walker-CLL), called from Simulator::step every substep. Switch: aero.gsi in the physics YAML, or --gsi on the CLI.
Flow state
corotating: truesubtracts ω⊕ × r (ω⊕ = 7.2921150e-5 rad/s).v_windis zero until you callSimulator.set_wind(w_N). MSIS has no winds, and no HWM model ships with the code.- ρ, T and m̄ come from MSIS (see Atmosphere). The same (ρ, T, m̄, χ) is held within a substep and interpolated linearly across the step when
atmosphere.interpis on. - The gas velocity in body axes is
v_B_gas = −C_BN v_rel. For each panel with outward normal n̂: \(\cos\theta=-\hat v\cdot\hat n\), with θ = 0 face-on.
Panel sum (common to both GSIs)
- The code stores \(C_\tau/\sin\theta\) and multiplies by the unnormalised \(\hat v+\cos\theta\,\hat n\), so an edge-on panel has no singularity.
- Wetted faces: every panel with \(s\cos\theta>-4\) is summed, back faces included. The erf/exp terms turn the lee-side flux off smoothly. For CLL the cut is per species (\(s_j\cos\theta\le -4\)).
- \(C_D=\mathbf F\cdot\hat v/(qA_\mathrm{ref})\), \(C_L=|\mathbf F_\perp|/(qA_\mathrm{ref})\). With
one_sided_ref, A_ref is half of ΣA (a two-sided membrane counts once). - Torque is about the body origin. Centroids are shifted by
cp_offset_min v8+ so the centre of pressure is offset from the CoM. - There is no shadowing or shielding: panels do not block one another. This is exact for convex bodies and flat membranes. For concave assemblies it is an approximation.
Sentman (default)
Sentman (1961) diffuse re-emission with the Moe & Moe (2005) energy-flux accommodation closure (project item M-01). With \(\gamma=s\cos\theta\), \(Z=1+\mathrm{erf}\,\gamma\), \(E=e^{-\gamma^2}\):
- Parameters:
aero.alpha_E(0.93),aero.T_w(300 K). They are global for the whole vehicle. - Sentman is fully diffuse in direction. α_E only sets the re-emission energy, so there is no specular momentum.
- Numerical guard: for γ > 6, Z = 2 and E = 0 exactly (error ≤ 1e-15).
- Hyperthermal identity (tested): \(C_p\cos\theta+C_\tau\sin\theta\to2\cos\theta\) as s → ∞ with α_E = 1 and T_w = T_i.
- The \((1-\alpha_E)s^2/2\) term keeps only the directed incident energy. Including the thermal part (\(+(1-\alpha_E)\)) would change face-on C_p by ≈0.2 % at s = 8, which is negligible.
Walker–CLL (optional, gsi: cll)
Walker, Mehta & Koller (2014) fitted closed-form plate coefficients to CLL-kernel simulations, as transcribed in ADBSat (Sinpetru et al., arXiv:2104.05543, eqs. 9–15). The model has one fit per species and is not the exact kernel. With \(\Gamma_1=\gamma E/\sqrt\pi+\tfrac12(1+2\gamma^2)Z\) and \(\Gamma_2=E/\sqrt\pi+\gamma Z\):
- α_N = 1 switches to the Schaaf–Chambre branch (ADBSat eq. 9), which equals Sentman with α_E = 1.
- Species mix (eq. 15): \(C=\sum_j\chi_jm_jC_j/\sum_j\chi_jm_j\) over He, O, N₂, O₂, Ar, H, N, with a per-species speed ratio \(s_j\). MSIS anomalous O is folded into O, and NO is dropped. Without χ the model uses the atomic-O row and the mixture s.
- Walker fit rows β, γ, δ, ζ are in
walker_fit(). He and H depend on the α_N band; Ar reuses the N₂ row. - Parameters:
aero.alpha_n(Walker α_N, normal energy accommodation),aero.alpha_t(σ_T, tangential momentum accommodation),aero.T_w. They are global for the vehicle.
alpha_t is σ_T, not the CLL kernel's α_t
In the CLL kernel, the tangential parameter α_t is an energy accommodation and the reflected mean tangential velocity is \(\sqrt{1-\alpha_t}\,v_t^i\). The tangential momentum accommodation is therefore \(\sigma_T=1-\sqrt{1-\alpha_t}\). The code multiplies \(C_\tau\) by the value you pass, so treat alpha_t as σ_T. If a paper gives you a CLL α_t, convert it first: α_t = 0.9 → σ_T = 0.684.high preset uses α_N = 0.93 so that standard-vs-high isolates the kernel and species mix. It is not a Walker-derived value. Face-on plate at s = 8, T_w/T_i = 1/3: Sentman(0.93) C_p = 2.37, Walker-CLL(α_N = 0.93) = 2.56, Walker-CLL(α_N = 1) = 2.14.How close is the Walker fit to the exact CLL kernel?
For this documentation pass I integrated the exact CLL kernel per plate with a scratch quadrature. The normal kernel is a Rice distribution, so its mean has a closed form in Bessel functions, and only the average over the incident Maxwellian needs a 1-D integral. No project code was changed. Atomic O, s = 8, T_w/T_i = 1/3, σ_T = 1:
| θ | α_N | exact CLL C_p | Walker fit C_p | Sentman(α_E = α_N) C_p |
|---|---|---|---|---|
| 0° | 1.00 | 2.1435 | 2.1435 | 2.1435 |
| 0° | 0.93 | 2.5581 | 2.5583 | 2.3694 |
| 0° | 0.50 | 3.4427 | 3.4427 | 2.9065 |
| 45° | 0.93 | 1.2937 | 1.2910 | 1.2658 |
| 80° | 0.99 | 0.0992 | 0.0884 (−11 %) | 0.1070 |
| 80° | 0.93 | 0.1047 | 0.0975 (−7 %) | 0.1376 |
| 80° | 0.50 | 0.1313 | 0.1298 | 0.2313 |
The Walker fit is excellent face-on and at moderate incidence, but it drifts at grazing incidence as α_N → 1 (at 80° the fitted C_p even drops below the α_N = 1 value). On the whole 176-plate SolarCat the effect averages out to ≤ 0.3 % in C_D. The much larger lever is the accommodation values themselves (see the plan).
Drag baseline and energy terms
Each substep also evaluates coefficients_only with the flow along the vehicle's minimum-projected-area body axis (min_drag_axis). The result is cached until s changes by more than 2e-4 relative. That gives the counterfactual \(F_\mathrm{base}=C_{D,\mathrm{base}}\,q\,A_\mathrm{ref}\), and the plant integrates:
dE_drag and dE_lift split the aero part along and across \(\hat v_\mathrm{rel}\). These feed the RL reward (dE_vs_baseline).
Configuration
| YAML key | SimParams | Default | Meaning |
|---|---|---|---|
aero.gsi | gsi | sentman | sentman | cll. Any other string throws. |
aero.alpha_E | alpha_E | 0.93 | Sentman energy accommodation |
aero.alpha_n | alpha_n | 1.0 (high: 0.93) | Walker α_N |
aero.alpha_t | alpha_t | 1.0 | σ_T, tangential momentum accommodation |
aero.T_w | T_w | 300 K | wall temperature (same for all panels) |
aero.one_sided_ref | one_sided_ref | true | A_ref = ½ΣA |
atmosphere.corotating | corotating | true | subtract ω⊕ × r |
Standalone use
from arlamx_v2 import cpp
from arlamx_v2.geometry import load_geom
n, A, c = load_geom("data/SolarCat_v3_1pct_plates.geom")
out = cpp.spacecraft_aero(n, A, c, v_rel_B=[7600, 0, 0], rho=3e-12, T=900, m_bar=2.656e-26,
T_w=300, alpha_E=0.93, one_sided_ref=True,
gsi="cll", alpha_n=0.93, alpha_t=1.0, chi=[0, 1, 0, 0, 0, 0, 0])
out["F"], out["tau"], out["Cd"], out["Cl"], out["A_ref"]
cpp.sentman(theta, s, Tw_Ti, alpha_E) # (Cp, Ctau) for one plate
cpp.cll(theta, s, Tw_Ti, alpha_n, alpha_t) # (Cp, Ctau), atomic-O row
Validation
tests/aero/test_sentman.py: hyperthermal identity (1e-3 at s = 8, 1e-8 at s = 80), α_E limits, face-on bands.tests/aero/test_cll.py: T-CLL-1 (α = 1 equals Sentman α_E = 1), T-CLL-4 (mixture differs from pure O), T-CLL-5 (unknown GSI throws). T-CLL-2/3 are specified indocs/CLL_TEST_SPEC.mdbut not yet written.tests/validation/verify_physics.py: independent scipy quadrature of the Sentman integrals.ACEnv/Reports/verify_sentman.md: audit record.
Limits
- One global (α, T_w) for all panels, with no per-material behaviour. See the plan.
- No shadowing or multiple reflection between panels (concave geometry).
- No surface-coverage (atomic-O adsorption) model, so α does not change with altitude or solar activity.
- Sentman is fully diffuse. Walker-CLL is a fit that is weakest at grazing incidence with α_N → 1.
- The onboard FP32 forecast uses a constant ballistic coefficient and an exponential atmosphere, not the panel model.
References
- Sentman, L. H. (1961). Free molecule flow theory and its application to the determination of aerodynamic forces. LMSC-448514.
- Moe, K. & Moe, M. M. (2005). Gas–surface interactions and satellite drag coefficients. Planet. Space Sci. 53, 793–801.
- Cercignani, C. & Lampis, M. (1971). Kinetic models for gas–surface interactions. TTSP 1, 101–114; Lord, R. G. (1991) Phys. Fluids A 3, 706.
- Walker, A., Mehta, P. & Koller, J. (2014). Drag coefficient model using the CLL GSI. J. Spacecraft Rockets 51(5), 1544–1563.
- Sinpetru, L. et al. (2022). ADBSat. arXiv:2104.05543.
- Doornbos, E. (2012). Thermospheric Density and Wind Determination from Satellite Dynamics. Springer.