From 71f425f4247be8b018a73d5f08f7d16bdefe44fd Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Thu, 28 Dec 2023 14:23:07 +0100
Subject: [PATCH] [PL/LD] Add volume ratio to def. gradient output

Uses vectorized tensor determinant.
---
 ProcessLib/LargeDeformation/ConstitutiveRelations/Base.h | 8 ++++++--
 ProcessLib/LargeDeformation/LargeDeformationFEM.h        | 3 +++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/ProcessLib/LargeDeformation/ConstitutiveRelations/Base.h b/ProcessLib/LargeDeformation/ConstitutiveRelations/Base.h
index 004e8170611..5a6c28d48df 100644
--- a/ProcessLib/LargeDeformation/ConstitutiveRelations/Base.h
+++ b/ProcessLib/LargeDeformation/ConstitutiveRelations/Base.h
@@ -132,13 +132,17 @@ struct DeformationGradientData
     // TODO Move initialization to the local assembler.
     MaterialPropertyLib::Tensor<DisplacementDim> deformation_gradient =
         MaterialPropertyLib::Tensor<DisplacementDim>::Zero();
+    double volume_ratio = 0;
 
     static auto reflect()
     {
         using Self = DeformationGradientData<DisplacementDim>;
 
-        return ProcessLib::Reflection::reflectWithName(
-            "deformation_gradient", &Self::deformation_gradient);
+        return std::tuple{
+            ProcessLib::Reflection::makeReflectionData(
+                "deformation_gradient", &Self::deformation_gradient),
+            ProcessLib::Reflection::makeReflectionData("volume_ratio",
+                                                       &Self::volume_ratio)};
     }
 };
 
diff --git a/ProcessLib/LargeDeformation/LargeDeformationFEM.h b/ProcessLib/LargeDeformation/LargeDeformationFEM.h
index f6d8a4abebd..d54fcd6bf03 100644
--- a/ProcessLib/LargeDeformation/LargeDeformationFEM.h
+++ b/ProcessLib/LargeDeformation/LargeDeformationFEM.h
@@ -239,6 +239,9 @@ public:
         output_data.eps_data.eps = B * u;
         output_data.deformation_gradient_data.deformation_gradient =
             grad_u + MathLib::VectorizedTensor::identity<DisplacementDim>();
+        output_data.deformation_gradient_data.volume_ratio =
+            MathLib::VectorizedTensor::determinant(
+                output_data.deformation_gradient_data.deformation_gradient);
 
         CS.eval(
             models, t, dt, x_position,              //
-- 
GitLab