Skip to main content

Module grains

Module grains 

Source
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)/12

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

BatesGrains
A stack of identical BATES grains.
GrainShape
The shape of one grain at some point in the burn.