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 0000000000000000000000000000000000000000..0db7601f612203c04c2385193ebcb807fbd9796f --- /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 6dcfe609e7307c2340d3e0b3c364dc2ef2776a8a..9ef4eae17365d57c06eab5c12fee0efb1bcd06e8 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 5aa319a139c2f2b28bde86555a5d49e62d7437ce..575018be59ccf9011752b231f9342ab22a9f2194 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 6f91e8ec7d2ca2eea710759ffaaacb21e55f156e..e5cd081e40f17dc97ef9e3957a2d5e1486f6fe30 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", "[", "]");