Where PyIMR stops, and where it deliberately parts company with IMRv2.
PhysicalParametersdefaults reproduce the pinned reference trajectories. The default polytropic exponent is 1.4; IMRv2 itself ships with 1.47.SimulationResult.stress_statecontains nondimensional internal variables. Public dimensional outputs carry units in their names or documentation.- Collapse shooting requires a material with memory, and cannot be combined with an explicit initial stress state or a nonzero observed wall velocity. IMRv2 does permit collapse for memoryless materials, which PyIMR deliberately does not.
gilmorewithliquid_eos="mie-gruneisen"(upstreamradial = 6) is supported here, and is the one configuration IMRv2 cannot run at all -- upstream returns complex radii without raising. The cause is a wrong root of the Mie-Gruneisen density quadratic; see upstream.md.- Both Mie-Gruneisen operators (upstream
radial = 5and6) deliberately diverge from IMRv2. Upstream's Mie-Gruneisen branch is physically wrong; the corrections are validated against the independent Tait branches and the weakly-compressible limit rather than against upstream.tests/ref_radial5.csvis retained as a record of upstream behaviour, not as a target.
PyIMR reproduces IMRv2 except where upstream is wrong. One divergence is
numerical rather than a defect fix: the Zener acceleration coefficient, which
makes three Zener reference trajectories regression pins rather than
cross-checks (#174).
Eight defects were found at dea31cd, each reproduced with MATLAB R2025a via
tools/gen_imrv2_cases.m, and each correction validated against something other
than upstream -- a closed form, an independent equation of state, or a reduction
limit. The wrong Mie-Gruneisen root, the non-functional non-Newtonian viscosity
suite, the stubbed collapse initialization and the rest are in
upstream.md.
Those defects are why several PyIMR models are validated by reduction limit rather than against a pinned upstream trajectory: for those models, no working upstream implementation exists to pin against.
The first-order-in-Mach dynamics divide by
which vanishes as an outward-moving wall reaches keller-miksis and keller-enthalpy, half of it for herring. Going
inward the same factor grows, so a supersonic collapse is nowhere near the
singularity while a supersonic rebound is the singularity.
A stiffening law can drive a bubble there. On the #245 band a Yeoh RelaxingMaterial
collapses, arrests, and rebounds onto that denominator:
max_wall_mach refuses that case by name instead, as a solver event. It is off by
default, one-sided, and deliberately not the same guard as min_radius_ratio:
the two order runs differently. On that band a relaxation time of
Values above one are accepted rather than rejected as typos: rayleigh-plesset is
incompressible, has no such denominator, and genuinely exceeds Mach one.
Forward sensitivities integrate
All requested parameter directions share one augmented integration. Prepared parameter scaling keeps error control dimensionless; public derivatives are converted back to dimensional parameter units.