From 5ede00b09662588b1d797d1685a1520c2851d6e0 Mon Sep 17 00:00:00 2001 From: Max Jaeschke <max.jaeschke@htwk-leipzig.de> Date: Wed, 4 Sep 2024 10:02:06 +0200 Subject: [PATCH] HeatTransportBHE Add optional mass lumping --- .../processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md | 3 +++ .../HeatTransportBHE/CreateHeatTransportBHEProcess.cpp | 6 +++++- ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h | 4 ++++ .../HeatTransportBHELocalAssemblerSoil-impl.h | 5 ++++- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md diff --git a/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md new file mode 100644 index 00000000000..0db7601f612 --- /dev/null +++ b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/t_mass_lumping.md @@ -0,0 +1,3 @@ +The default setting is false. +If set, mass lumping is applied to the BHE connected soil elements. +With mass lumping, the non-physical oscillation of temperatures in the direct vicinity of the BHE can be improved. diff --git a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp index 6dcfe609e73..9ef4eae1736 100644 --- a/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp +++ b/ProcessLib/HeatTransportBHE/CreateHeatTransportBHEProcess.cpp @@ -176,6 +176,10 @@ std::unique_ptr<Process> createHeatTransportBHEProcess( //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__use_server_communication} config.getConfigParameter<bool>("use_server_communication", false); + auto const mass_lumping = + //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__mass_lumping} + config.getConfigParameter<bool>("mass_lumping", false); + auto const using_algebraic_bc = //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__use_algebraic_bc} config.getConfigParameter<bool>("use_algebraic_bc", false); @@ -331,7 +335,7 @@ std::unique_ptr<Process> createHeatTransportBHEProcess( HeatTransportBHEProcessData process_data( std::move(media_map), std::move(bhes), py_object, using_tespy, - using_server_communication, + using_server_communication, mass_lumping, {using_algebraic_bc, weighting_factor, is_linear}); SecondaryVariableCollection secondary_variables; diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h index 5aa319a139c..575018be59c 100644 --- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h +++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcessData.h @@ -41,12 +41,14 @@ struct HeatTransportBHEProcessData final nullptr, const bool use_tespy = false, const bool use_server_communication = false, + const bool mass_lumping = false, AlgebraicBCSetting algebraicBCSetting = {false, 100.0, false}) : media_map(media_map_), _vec_BHE_property(std::move(vec_BHEs_)), py_bc_object(py_bc_object_), _use_tespy(use_tespy), _use_server_communication(use_server_communication), + _mass_lumping(mass_lumping), _algebraic_BC_Setting(algebraicBCSetting) { } @@ -64,6 +66,8 @@ struct HeatTransportBHEProcessData final const bool _use_server_communication; + const bool _mass_lumping; + AlgebraicBCSetting const _algebraic_BC_Setting; }; } // namespace ProcessLib::HeatTransportBHE diff --git a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h index 6f91e8ec7d2..e5cd081e40f 100644 --- a/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h +++ b/ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil-impl.h @@ -183,7 +183,10 @@ void HeatTransportBHELocalAssemblerSoil<ShapeFunction>::assemble( (density_s * heat_capacity_s * (1 - porosity) + density_f * heat_capacity_f * porosity); } - + if (_process_data._mass_lumping) + { + local_M = local_M.colwise().sum().eval().asDiagonal(); + } // debugging // std::string sep = "\n----------------------------------------\n"; // Eigen::IOFormat CleanFmt(4, 0, ", ", "\n", "[", "]"); -- GitLab