From 1ff3c76711ea32978c50f075ffa44612a6af6c89 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Mon, 12 Aug 2024 17:16:21 +0200 Subject: [PATCH] [PL/HM] Use assembly mixins residuum output --- .../HydroMechanics/HydroMechanicsProcess.cpp | 53 ++++++++----------- .../HydroMechanics/HydroMechanicsProcess.h | 7 +-- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp index fb1b871093f..eabd64447c1 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp @@ -45,12 +45,6 @@ HydroMechanicsProcess<DisplacementDim>::HydroMechanicsProcess( *_jacobian_assembler}, process_data_(std::move(process_data)) { - nodal_forces_ = MeshLib::getOrCreateMeshProperty<double>( - mesh, "NodalForces", MeshLib::MeshItemType::Node, DisplacementDim); - - hydraulic_flow_ = MeshLib::getOrCreateMeshProperty<double>( - mesh, "MassFlowRate", MeshLib::MeshItemType::Node, 1); - _integration_point_writer.emplace_back( std::make_unique<MeshLib::IntegrationPointWriter>( "sigma_ip", @@ -339,31 +333,6 @@ void HydroMechanicsProcess<DisplacementDim>:: AssemblyMixin<HydroMechanicsProcess<DisplacementDim>>::assembleWithJacobian( t, dt, x, x_prev, process_id, b, Jac); - - auto const dof_tables = getDOFTables(x.size()); - auto copyRhs = [&](int const variable_id, auto& output_vector) - { - if (use_monolithic_scheme) - { - transformVariableFromGlobalVector(b, variable_id, *dof_tables[0], - output_vector, - std::negate<double>()); - } - else - { - transformVariableFromGlobalVector(b, 0, *dof_tables[process_id], - output_vector, - std::negate<double>()); - } - }; - if (process_id == process_data_.hydraulic_process_id) - { - copyRhs(0, *hydraulic_flow_); - } - if (process_id == process_data_.mechanics_related_process_id) - { - copyRhs(1, *nodal_forces_); - } } template <int DisplacementDim> @@ -382,6 +351,28 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( } } +template <int DisplacementDim> +std::vector<std::vector<std::string>> +HydroMechanicsProcess<DisplacementDim>::initializeAssemblyOnSubmeshes( + std::vector<std::reference_wrapper<MeshLib::Mesh>> const& meshes) +{ + INFO("HydroMechanicsProcess initializeSubmeshOutput()."); + std::vector<std::vector<std::string>> per_process_residuum_names; + if (_process_variables.size() == 1) // monolithic + { + per_process_residuum_names = {{"MassFlowRate", "NodalForces"}}; + } + else // staggered + { + per_process_residuum_names = {{"MassFlowRate"}, {"NodalForces"}}; + } + + AssemblyMixin<HydroMechanicsProcess<DisplacementDim>>:: + initializeAssemblyOnSubmeshes(meshes, per_process_residuum_names); + + return per_process_residuum_names; +} + template <int DisplacementDim> void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( std::vector<GlobalVector*> const& x, diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h index b47cbca7dbb..033e1f02db5 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h @@ -113,6 +113,10 @@ private: NumLib::LocalToGlobalIndexMap const& getDOFTable( const int process_id) const override; + std::vector<std::vector<std::string>> initializeAssemblyOnSubmeshes( + std::vector<std::reference_wrapper<MeshLib::Mesh>> const& meshes) + override; + bool isMonolithicSchemeUsed() const override { return process_data_.isMonolithicSchemeUsed(); @@ -154,9 +158,6 @@ private: { return process_id == process_data_.mechanics_related_process_id; } - - MeshLib::PropertyVector<double>* nodal_forces_ = nullptr; - MeshLib::PropertyVector<double>* hydraulic_flow_ = nullptr; }; extern template class HydroMechanicsProcess<2>; -- GitLab