From a064c6f89ff37dd08c011e41c7851d1dcf8a4a54 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Fri, 4 May 2018 21:26:54 +0200
Subject: [PATCH] [PL] HM: Add nodal forces and hydraulic flow.

---
 .../HydroMechanics/HydroMechanicsProcess.cpp       | 14 ++++++++++++++
 ProcessLib/HydroMechanics/HydroMechanicsProcess.h  |  3 +++
 2 files changed, 17 insertions(+)

diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
index 7e7f6611832..7635c3790e4 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp
@@ -15,6 +15,7 @@
 #include "NumLib/DOF/ComputeSparsityPattern.h"
 #include "ProcessLib/HydroMechanics/CreateLocalAssemblers.h"
 #include "ProcessLib/Process.h"
+#include "ProcessLib/Utils/GlobalVectorUtils.h"
 
 #include "HydroMechanicsFEM.h"
 #include "HydroMechanicsProcessData.h"
@@ -41,6 +42,11 @@ HydroMechanicsProcess<DisplacementDim>::HydroMechanicsProcess(
               use_monolithic_scheme),
       _process_data(std::move(process_data))
 {
+    _nodal_forces = MeshLib::getOrCreateMeshProperty<double>(
+        mesh, "NodalForces", MeshLib::MeshItemType::Node, DisplacementDim);
+
+    _hydraulic_flow = MeshLib::getOrCreateMeshProperty<double>(
+        mesh, "HydraulicFlow", MeshLib::MeshItemType::Node, 1);
 }
 
 template <int DisplacementDim>
@@ -313,6 +319,14 @@ void HydroMechanicsProcess<DisplacementDim>::
         _global_assembler, &VectorMatrixAssembler::assembleWithJacobian,
         _local_assemblers, dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b,
         Jac, _coupled_solutions);
+
+    auto copyRhs = [&](int const variable_id, auto& output_vector) {
+        transformVariableFromGlobalVector(b, variable_id,
+                                          *_local_to_global_index_map,
+                                          output_vector, std::negate<double>());
+    };
+    copyRhs(0, *_hydraulic_flow);
+    copyRhs(1, *_nodal_forces);
 }
 
 template <int DisplacementDim>
diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
index f6ce3e4ced8..c85544c9da4 100644
--- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h
@@ -130,6 +130,9 @@ private:
     {
         return _use_monolithic_scheme || process_id == 1;
     }
+
+    MeshLib::PropertyVector<double>* _nodal_forces = nullptr;
+    MeshLib::PropertyVector<double>* _hydraulic_flow = nullptr;
 };
 
 extern template class HydroMechanicsProcess<2>;
-- 
GitLab