diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp index 7e7f6611832225109ae27369764dd51d8074f850..7635c3790e447956e540c48004415dabde48458c 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 f6ce3e4ced8a2e4e53622f5ee84995c5219b16c6..c85544c9da44541f1baa443947d04b40bd65a5e4 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>;