From d6580b204df693410f1723ec3a5ae7838ba4b819 Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Fri, 11 Sep 2026 16:55:17 +0200 Subject: [PATCH 1/2] support von mises stress in HyperelasticMaterial --- .../fem/hyperelastic/HyperelasticMaterial.h | 9 +++++--- .../fem/hyperelastic/HyperelasticMaterial.inl | 21 +++++++++++++++++++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ .../HyperelasticityFEMForceField.scn | 2 ++ 10 files changed, 43 insertions(+), 3 deletions(-) diff --git a/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.h b/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.h index c26ab32f1c8..97977cb18e1 100644 --- a/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.h +++ b/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.h @@ -22,10 +22,10 @@ #pragma once #include +#include #include #include #include -#include #if !defined(SOFA_COMPONENT_SOLIDMECHANICS_FEM_HYPERELASTIC_HYPERELASTIC_MATERIAL_CPP) #include @@ -35,10 +35,10 @@ namespace sofa::component::solidmechanics::fem::hyperelastic { template -class HyperelasticMaterial : public virtual sofa::core::objectmodel::BaseObject +class HyperelasticMaterial : public elastic::CauchyStressEvaluator { public: - SOFA_ABSTRACT_CLASS(HyperelasticMaterial, sofa::core::objectmodel::BaseObject); + SOFA_ABSTRACT_CLASS(HyperelasticMaterial, elastic::CauchyStressEvaluator); using DataTypes = TDataTypes; protected: @@ -49,6 +49,7 @@ class HyperelasticMaterial : public virtual sofa::core::objectmodel::BaseObject using DeformationGradient = sofa::type::Mat; using RightCauchyGreenTensor = sofa::type::Mat; using StressTensor = sofa::type::Mat; + using StressVoigtVector = typename elastic::CauchyStressEvaluator::StressVoigtVector; using ElasticityTensor = sofa::type::FullySymmetric4Tensor; using TangentModulus = MajorSymmetric4Tensor; @@ -71,6 +72,8 @@ class HyperelasticMaterial : public virtual sofa::core::objectmodel::BaseObject */ virtual TangentModulus materialTangentModulus(Strain& strain) = 0; + StressVoigtVector computeStress(const DeformationGradient& F, sofa::Size elementId) override; + }; #if !defined(SOFA_COMPONENT_SOLIDMECHANICS_FEM_HYPERELASTIC_HYPERELASTIC_MATERIAL_CPP) diff --git a/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.inl b/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.inl index 225513ef0c0..28024c3ece2 100644 --- a/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.inl +++ b/Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/HyperelasticMaterial.inl @@ -36,4 +36,25 @@ void HyperelasticMaterial::init() } } +template +auto HyperelasticMaterial::computeStress(const DeformationGradient& F, sofa::Size elementId) -> StressVoigtVector +{ + SOFA_UNUSED(elementId); + + Strain strain(deformationGradient, F); + const auto P = this->firstPiolaKirchhoffStress(strain); + const auto J = strain.getDeterminantDeformationGradient(); + assert(std::abs(J) > std::numeric_limits::epsilon()); + const auto sigma = (static_cast(1)/J) * P * F.transposed(); + + StressVoigtVector stressVoigt; + for (sofa::Size i = 0; i < type::NumberOfIndependentElements; ++i) + { + const auto [p, q] = type::toTensorIndices(i); + stressVoigt[i] = (p == q) ? sigma(p, q) : static_cast(0.5) * (sigma(p, q) + sigma(q, p)); + } + + return stressVoigt; +} + } // namespace elasticity diff --git a/examples/Validation/cantilever_beam/hexahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/hexahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn index 48cb648f56b..c3c42c9282e 100644 --- a/examples/Validation/cantilever_beam/hexahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/hexahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn @@ -9,4 +9,6 @@ + diff --git a/examples/Validation/cantilever_beam/hexahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/hexahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn index 75bbfd8107b..15d033377d5 100644 --- a/examples/Validation/cantilever_beam/hexahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/hexahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn @@ -7,5 +7,7 @@ + diff --git a/examples/Validation/cantilever_beam/hexahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/hexahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn index 4f8e213cf4f..05a5f17f283 100644 --- a/examples/Validation/cantilever_beam/hexahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/hexahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn @@ -9,5 +9,7 @@ + diff --git a/examples/Validation/cantilever_beam/hexahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/hexahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn index 26d221c61b8..605d7a5dc8e 100644 --- a/examples/Validation/cantilever_beam/hexahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/hexahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn @@ -7,5 +7,7 @@ + diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn index 2d7cbda3f67..efe02054e5d 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn @@ -15,6 +15,8 @@ + diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn index 8234a43ee78..9fc02dbbed6 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn @@ -13,6 +13,8 @@ + diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn index 1228b5a5f02..4e711b2cece 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn @@ -15,6 +15,8 @@ + diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn index 02886d334dd..1045c6dc631 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn @@ -13,6 +13,8 @@ + From 69c8d01c8337a947ac12432a9b311664c1ffffc9 Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Tue, 15 Sep 2026 08:19:14 +0200 Subject: [PATCH 2/2] Fix tetrahedron scenes Co-authored-by: Themis Skamagkis <70031729+th-skam@users.noreply.github.com> --- .../svk/parallel/assembled/HyperelasticityFEMForceField.scn | 2 +- .../svk/parallel/matrixfree/HyperelasticityFEMForceField.scn | 2 +- .../svk/sequential/assembled/HyperelasticityFEMForceField.scn | 2 +- .../svk/sequential/matrixfree/HyperelasticityFEMForceField.scn | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn index efe02054e5d..da1a835e7c7 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/assembled/HyperelasticityFEMForceField.scn @@ -15,7 +15,7 @@ - diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn index 9fc02dbbed6..de09dd05590 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/parallel/matrixfree/HyperelasticityFEMForceField.scn @@ -13,7 +13,7 @@ - diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn index 4e711b2cece..ba9a86c134a 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/assembled/HyperelasticityFEMForceField.scn @@ -15,7 +15,7 @@ - diff --git a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn index 1045c6dc631..6b768ed067d 100644 --- a/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn +++ b/examples/Validation/cantilever_beam/tetrahedron/svk/sequential/matrixfree/HyperelasticityFEMForceField.scn @@ -13,7 +13,7 @@ -