Expand description
BATES grains: a stack of identical hollow cylindrical grains that burn on their bores and, unless inhibited, on both ends.
The geometry follows RocketPy’s SolidMotor (MIT; rocketpy/motors/solid_motor.py, v1.13.0),
which integrates the regression as an ODE in time. Here it is solved exactly in the burned
mass instead. Every burning surface recedes by the same web depth x, so one grain’s volume is
V(x) = π (R² − (r₀ + x)²) (h₀ − 2x) ends burning, 0 ≤ x ≤ min(R − r₀, h₀/2)
V(x) = π (R² − (r₀ + x)²) h₀ ends inhibited, 0 ≤ x ≤ R − r₀and dV/dx = −A_b, the burning area 2π (r h + R² − r²) (or 2π r h), which is RocketPy’s
ṙ = −V̇/A_b, ḣ = −2ṙ written without time. Given the propellant mass left, V(x) = m/(N ρ)
is solved for x by safeguarded Newton iteration; V falls monotonically, so the root is
unique.
Every grain needs a bore (r₀ > 0): a solid end burner shortens without widening, which this
regression doesn’t describe (nor does RocketPy’s). Facing ends burn even with no gap between
grains, as in RocketPy.
The grains’ centers stay put (both ends burn equally), spaced h₀ + s apart. About the
stack’s center, with m_g = m/N per grain and the current r and h:
I_a = ½ m (R² + r²)
I_t = N m_g ((R² + r²)/4 + h²/12) + m_g (h₀ + s)² N (N² − 1)/12The last term is Σ m_g d_k² over grain offsets d_k = (k − (N−1)/2)(h₀ + s)
(solid_motor.py:724-740, 784-789). See docs/physics/motor.md.
Structs§
- Bates
Grains - A stack of identical BATES grains.
- Grain
Shape - The shape of one grain at some point in the burn.