explicit: opt-in mass scaling to a target increment, the added mass reported

An explicit step may ask for mass scaling to a target time increment (on
a set, or the whole model): elements whose stable increment is below it
get the density that reaches it, with their lumped masses, frequency
bound and hourglass scales; adiabatic heating keeps the physical
density. The run reports the elements scaled, the added mass in all and
per section with its fraction, a warning, and the added mass's kinetic
energy in the energy account. Verified on a uniform bar scaled to twice
its increment (added mass 3×, increment doubled, a quarter of the
kinetic energy left to the physical mass). ROADMAP and parity note the
hyperelastic materials and mass scaling.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-14 14:29:43 -04:00
1 parent ce8e23d05b
commit bc75fd08d1
14 files changed
+249 -14

No files matched your search

+12
View File
@@ -468,3 +468,15 @@ geometry and take no thermal strain yet (both refused by name). Verified by unia
λ = 1.5 of all three laws on hex8 and tet4 against the material point (`crates/explicit/tests/hyperelastic.rs`)
and by `tests/oracle/explicit-neo-hookean-implicit`, a quasi-static explicit pull against the
implicit nonlinear solver.
## Mass scaling (explicit dynamics)
Opt-in per explicit step (`mass_scaling: {target_increment, set}`): every solid element (of the
set, or of the model) whose stable increment times the step's scale is below the target has its
density raised by (target / increment)², which brings its increment to the target (its lumped
masses, frequency bound and hourglass and bulk-viscosity scales follow; adiabatic heating keeps
the physical density). The run reports the elements scaled, the added mass in all and per
section, its fraction of the model's mass, a warning, and the kinetic energy of the added mass
(`energy.added_kinetic`, part of the kinetic energy, so the balance holds). Verified on a uniform
bar scaled to twice its increment: added mass three times the bar's, the increment doubled, the
added mass's share of the kinetic energy three quarters (`crates/explicit/tests/one_d.rs`).