EffectiveCavityFraction#
Source: models/solid_mechanics/traction_separation_law/EffectiveCavityFraction.py
GTN-style coalescence map from the physical cavitated area fraction \(f\) to the effective fraction \(f^*\) that drives the softening functions,
\(f_c\) is the coalescence onset (ligament rupture at \(a/b \approx 0.7\) puts it near \(0.5\)), \(f_F\) the physical fraction at final separation, and \(f_u^*\) the effective fraction at which the interface carries no load. Because both softening functions, \(q(f)\) and \((1-f)\), vanish at \(f = 1\), \(f_u^*\) must be set strictly below one so \(q(f^*)\) stays positive and the rates stay finite right up to separation.
The map saturates at \(f_u^*\) for \(f \ge f_F\) rather than extrapolating the accelerated branch. Without that cap a separated state, or a Newton iterate that overshoots, drives \(f^*\) through one at \(f = f_c + (1 - f_c) / \kappa\) – a physical fraction below one and therefore reachable – and both downstream denominators, \(q(f^*)\) and \(1 - f^*\), vanish together. Saturating bounds every consumer of \(f^*\) by \(f_u^* < 1\) for any \(f\) whatsoever, so the rates are finite however far an iterate strays. The map is continuous at \(f_F\): the accelerated branch reaches exactly \(f_u^*\) there.
Only the softening functions see \(f^*\). The geometric factors (\(f/N\), \(\sqrt{f}\), \(V(f,N)\)) keep the physical \(f\), which is what preserves the identity \([\![u]\!]_n^v = NV - N_0V_0\).
Inputs#
cavity_fraction—input·Scalar· requiredPhysical cavitated area fraction
Outputs#
effective_cavity_fraction—output·Scalar· requiredEffective cavitated area fraction
Parameters#
coalescence_fraction—parameter·Scalar· requiredArea fraction at the onset of coalescence
failure_fraction—parameter·Scalar· requiredPhysical area fraction at final separation
ultimate_fraction—parameter·Scalar· requiredEffective area fraction at which the interface carries no load. Keep strictly below one so the softening function q stays positive.