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