Skip to content

ENH: model unbonded solid-motor grain CM shift (#340) - #1138

Open
thatrandomasiandev wants to merge 2 commits into
RocketPy-Team:developfrom
thatrandomasiandev:enh/340-unglued-solid-grains
Open

ENH: model unbonded solid-motor grain CM shift (#340)#1138
thatrandomasiandev wants to merge 2 commits into
RocketPy-Team:developfrom
thatrandomasiandev:enh/340-unglued-solid-grains

Conversation

@thatrandomasiandev

Copy link
Copy Markdown

Summary

  • Adds opt-in SolidMotor(grains_bonded=True) (default preserves current fixed-grain / BATES behavior).
  • When grains_bonded=False, applies a first-order inertial packing model: grains pack against the aft (nozzle-side) face of the initial grain stack, so propellant CM shifts toward the nozzle as grain_height regresses: CM(t) = grains_center_of_mass_position - _csys * (n/2) * (h0 - h(t)). Parallel-axis propellant_I_11 uses the packed pitch.
  • Documents that this is not a DEM / rigid-body grain dynamics model (no friction, rattling, or acceleration threshold). Inter-grain grain_separation (spacers) is retained; only grain-height loss shortens the stack. With only_radial_burn=True, height is fixed so CM does not shift.

Fixes #340

Follow-ups (out of scope)

  • Acceleration-dependent settling / ignition transient before packing completes
  • Full multi-body / DEM grain contact model
  • Optional collapse of soft spacers (grain_separation → 0 when packing)

Test plan

  • PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest tests/unit/motors/test_solidmotor.py
  • Bonded path matches prior fixed CM
  • Unbonded multi-grain CM moves aft vs bonded mid-burn; ignition CM matches
  • grains_bonded round-trips through to_dict / from_dict

@thatrandomasiandev
thatrandomasiandev requested a review from a team as a code owner August 11, 2026 02:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants