fix(elements): reject rounded loss of Hex8 bulk stiffness
This commit is contained in:
@@ -92,6 +92,16 @@ Result<Hex8Element> Hex8Element::Create(EntityIndex index,
|
||||
return Result<Hex8Element>::Failure(
|
||||
candidate.Failure("Hex8 Lame moduli must remain finite with "
|
||||
"representable positive shear modulus."));
|
||||
// Validate the rounded moduli actually used by the kernel, not merely the
|
||||
// positive exact-real E/nu formula: cancellation near nu=-1 can erase bulk.
|
||||
const double bulk = candidate.lambda_ + (2.0 * candidate.mu_) / 3.0;
|
||||
const double volumetric_stress =
|
||||
3.0 * candidate.lambda_ + 2.0 * candidate.mu_;
|
||||
if (!std::isfinite(bulk) || bulk <= 0.0 ||
|
||||
!std::isfinite(volumetric_stress) || volumetric_stress <= 0.0)
|
||||
return Result<Hex8Element>::Failure(
|
||||
candidate.Failure("Hex8 rounded Lame moduli require finite "
|
||||
"representable positive bulk stiffness."));
|
||||
if (density && (!std::isfinite(*density) || *density <= 0.0))
|
||||
return Result<Hex8Element>::Failure(candidate.Failure(
|
||||
"Hex8 reference density must be finite and positive."));
|
||||
|
||||
Reference in New Issue
Block a user