From 7e9d373c385d3be1cfc2fb9db53e99f721dd4fa4 Mon Sep 17 00:00:00 2001 From: David Schneller Date: Thu, 23 Jan 2025 19:28:36 +0100 Subject: [PATCH 1/3] Localize query --- src/input/EasiMeshSize.cpp | 12 +++++++----- src/input/EasiMeshSize.h | 8 ++++---- src/input/SimModSuite.h | 7 ++++--- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/input/EasiMeshSize.cpp b/src/input/EasiMeshSize.cpp index 73bbb6e..946946a 100644 --- a/src/input/EasiMeshSize.cpp +++ b/src/input/EasiMeshSize.cpp @@ -1,19 +1,20 @@ #include "EasiMeshSize.h" +#include #include #include #include -EasiMeshSize::EasiMeshSize() : parser(nullptr), model(nullptr), query(easi::Query(1, 3)) {} +EasiMeshSize::EasiMeshSize() : parser(nullptr), model(nullptr) {} EasiMeshSize::EasiMeshSize(VelocityAwareRefinementSettings refinementSettings, pGModel simModel, std::unordered_map groupMap) : refinementSettings(refinementSettings), simModel(simModel), parser(new easi::YAMLParser(3)), - groupMap(std::move(groupMap)), query(easi::Query(1, 3)) { + groupMap(std::move(groupMap)) { model = parser->parse(refinementSettings.getEasiFileName()); } -int EasiMeshSize::findGroup(std::array point) { +int EasiMeshSize::findGroup(const std::array& point) { // GR_containsPoint can be expensive for large geometry, // therefore we bypass it the simple case of one region if (groupMap.size() == 1) { @@ -31,7 +32,7 @@ int EasiMeshSize::findGroup(std::array point) { } std::tuple -EasiMeshSize::getTargetedFrequencyAndRegion(std::array point) { +EasiMeshSize::getTargetedFrequencyAndRegion(const std::array& point) { const auto& refinementRegions = refinementSettings.getRefinementRegions(); double targetedFrequency = 0.0; int bypassFindRegionAndUseGroup = 0; @@ -58,7 +59,7 @@ EasiMeshSize::getTargetedFrequencyAndRegion(std::array point) { return std::make_tuple(targetedFrequency, bypassFindRegionAndUseGroup); } -double EasiMeshSize::getMeshSize(std::array point) { +double EasiMeshSize::getMeshSize(const std::array& point) { if (!model) { logError() << "Model was not parsed correctly"; } @@ -71,6 +72,7 @@ double EasiMeshSize::getMeshSize(std::array point) { return defaultMeshSize; } + easi::Query query(1, 3); query.x(0, 0) = point[0]; query.x(0, 1) = point[1]; query.x(0, 2) = point[2]; diff --git a/src/input/EasiMeshSize.h b/src/input/EasiMeshSize.h index d6b7328..e5a982e 100644 --- a/src/input/EasiMeshSize.h +++ b/src/input/EasiMeshSize.h @@ -20,13 +20,13 @@ class EasiMeshSize { easi::YAMLParser* parser; easi::Component* model; // Unique ptr to model leads to segfault - easi::Query query; pGModel simModel; std::unordered_map groupMap; - int findGroup(std::array point); + int findGroup(const std::array& point); - std::tuple getTargetedFrequencyAndRegion(std::array point); + std::tuple + getTargetedFrequencyAndRegion(const std::array& point); public: EasiMeshSize(); @@ -34,7 +34,7 @@ class EasiMeshSize { EasiMeshSize(VelocityAwareRefinementSettings refinementSettings, pGModel simModel, std::unordered_map groupMap); - double getMeshSize(std::array point); + double getMeshSize(const std::array& point); }; #endif // PUMGEN_EASIMESHSIZE_H diff --git a/src/input/SimModSuite.h b/src/input/SimModSuite.h index ae75155..aa5501f 100644 --- a/src/input/SimModSuite.h +++ b/src/input/SimModSuite.h @@ -69,7 +69,7 @@ */ class SimModSuite : public FullStorageMeshData { private: - EasiMeshSize easiMeshSize; + std::shared_ptr easiMeshSize; pGModel m_model; pParMesh m_simMesh; @@ -587,7 +587,8 @@ class SimModSuite : public FullStorageMeshData { if (MeshAtt.velocityAwareRefinementSettings.isVelocityAwareRefinementOn()) { logInfo(PMU_rank()) << "Enabling velocity aware meshing"; - easiMeshSize = EasiMeshSize(MeshAtt.velocityAwareRefinementSettings, model, groupMap); + easiMeshSize = + std::make_shared(MeshAtt.velocityAwareRefinementSettings, model, groupMap); auto easiMeshSizeFunc = [](pSizeAttData sadata, void* userdata) { auto* easiMeshSize = static_cast(userdata); std::array pt{}; @@ -598,7 +599,7 @@ class SimModSuite : public FullStorageMeshData { return easiMeshSize->getMeshSize(pt); }; // set the user-defined function for isotropic size - MS_setSizeAttFunc(meshCase, "setCustomMeshSize", easiMeshSizeFunc, &easiMeshSize); + MS_setSizeAttFunc(meshCase, "setCustomMeshSize", easiMeshSizeFunc, easiMeshSize.get()); // Relative anisotropic size is set for the entire model through the // function anisoSize MS_setMeshSize(meshCase, GM_domain(model), MS_userDefinedType | 1, 0, "setCustomMeshSize"); From 418a4234b815251efab5f0af9209a8c1dd1a64bc Mon Sep 17 00:00:00 2001 From: David Schneller Date: Thu, 23 Jan 2025 19:33:20 +0100 Subject: [PATCH 2/3] Update CI --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 0ca035e..ee040be 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -17,7 +17,7 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -qq g++ openmpi-bin openmpi-common libopenmpi-dev hdf5-tools libhdf5-openmpi-103 libhdf5-openmpi-dev libnetcdf-dev + sudo apt-get install -qq g++ openmpi-bin openmpi-common libopenmpi-dev hdf5-tools libhdf5-openmpi-dev libnetcdf-dev - name: Configure PUMGen working-directory: ${{ github.workspace }} From 6155c73ed8a20bff2173514c87e36592d2bbcf5d Mon Sep 17 00:00:00 2001 From: David Schneller Date: Fri, 24 Jan 2025 13:47:13 +0100 Subject: [PATCH 3/3] Fix EasiMeshSize build --- src/input/EasiMeshSize.cpp | 2 +- src/input/EasiMeshSize.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/input/EasiMeshSize.cpp b/src/input/EasiMeshSize.cpp index 946946a..8417c93 100644 --- a/src/input/EasiMeshSize.cpp +++ b/src/input/EasiMeshSize.cpp @@ -14,7 +14,7 @@ EasiMeshSize::EasiMeshSize(VelocityAwareRefinementSettings refinementSettings, p model = parser->parse(refinementSettings.getEasiFileName()); } -int EasiMeshSize::findGroup(const std::array& point) { +int EasiMeshSize::findGroup(std::array point) { // GR_containsPoint can be expensive for large geometry, // therefore we bypass it the simple case of one region if (groupMap.size() == 1) { diff --git a/src/input/EasiMeshSize.h b/src/input/EasiMeshSize.h index e5a982e..e4aa96a 100644 --- a/src/input/EasiMeshSize.h +++ b/src/input/EasiMeshSize.h @@ -23,7 +23,7 @@ class EasiMeshSize { pGModel simModel; std::unordered_map groupMap; - int findGroup(const std::array& point); + int findGroup(std::array point); std::tuple getTargetedFrequencyAndRegion(const std::array& point);