From 344a6fba746f4636e04914d4cae5bac9eefa089d Mon Sep 17 00:00:00 2001 From: Max Jaeschke <max.jaeschke@htwk-leipzig.de> Date: Wed, 18 Dec 2024 11:12:28 +0100 Subject: [PATCH] Filter BHE and soil elements Sort soil and bhe elements only, if they are unsorted --- .../HeatTransportBHEProcess.cpp | 27 +++++++++++++++++++ .../HeatTransportBHEProcess.h | 4 +++ 2 files changed, 31 insertions(+) diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp index 9629290a4e8..9e70b86e9e0 100644 --- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp +++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp @@ -161,6 +161,33 @@ void HeatTransportBHEProcess::initializeConcreteProcess( // Create BHE boundary conditions for each of the BHEs createBHEBoundaryConditionTopBottom(_bheMeshData.BHE_nodes); + // Store BHE and soil elements to split the assembly and use the matrix + // cache in the linear case only for soil elements + if (_process_data._algebraic_BC_Setting._is_linear) + { + _bhes_element_ids = _bheMeshData.BHE_elements | ranges::views::join | + MeshLib::views::ids | ranges::to<std::vector>; + + // sort bhe elements if needed + if (!std::is_sorted(_bhes_element_ids.begin(), _bhes_element_ids.end())) + { + std::sort(_bhes_element_ids.begin(), _bhes_element_ids.end()); + } + + _soil_element_ids = mesh.getElements() | MeshLib::views::ids | + ranges::to<std::vector>(); + + // sort soil elements if needed + if (!std::is_sorted(_soil_element_ids.begin(), _soil_element_ids.end())) + { + std::sort(_soil_element_ids.begin(), _soil_element_ids.end()); + } + + _soil_element_ids = ranges::views::set_difference(_soil_element_ids, + _bhes_element_ids) | + ranges::to<std::vector>(); + } + if (_process_data._mass_lumping) { std::vector<std::size_t> const bhes_node_ids = diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h index 27a45147f9b..66e45c4d791 100644 --- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h +++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h @@ -126,6 +126,10 @@ private: const BHEMeshData _bheMeshData; AssembledMatrixCache _asm_mat_cache; + + std::vector<std::size_t> _bhes_element_ids; + + std::vector<std::size_t> _soil_element_ids; }; } // namespace HeatTransportBHE } // namespace ProcessLib -- GitLab