From 4421c65043745989533b9c1ee77cdde9f3a24aa5 Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-bs.de> Date: Fri, 12 Aug 2022 13:29:57 +0000 Subject: [PATCH] GridScalingKernelManagerTest --- .../BoundaryConditionFactoryTest.cpp | 4 +- .../KernelManager/BCKernelManagerTest.cpp | 3 +- .../GridScalingKernelManager.cpp | 6 +- .../KernelManager/GridScalingKernelManager.h | 2 +- .../GridScalingKernelManagerTest.cpp | 74 +++++++++++++++++++ 5 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp b/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp index 599f92750..612f9be4f 100644 --- a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp +++ b/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp @@ -55,6 +55,8 @@ TEST(BoundaryConditionFactoryTest, defaultStressBC) EXPECT_THROW(bc(nullptr, nullptr, 0), std::bad_function_call); } +// tests for boundary conditions which are set by the user (tests both set and get functions) + bcFunction getVelocityBcTarget(BoundaryConditionFactory &bcFactory) { auto bc = bcFactory.getVelocityBoundaryConditionPost(); @@ -63,8 +65,6 @@ bcFunction getVelocityBcTarget(BoundaryConditionFactory &bcFactory) return bcTarget; } -// tests for boundary conditions which are set by the user (tests both set and get functions) - TEST(BoundaryConditionFactoryTest, velocityBC) { auto bcFactory = BoundaryConditionFactory(); diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp index 790eeb634..5b7e19c93 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp +++ b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp @@ -1,5 +1,4 @@ -#include <gmock/gmock-function-mocker.h> -#include <gmock/gmock-matchers.h> + #include <gmock/gmock.h> #include <stdexcept> diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp index 18e617697..1b2c699fe 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp +++ b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp @@ -49,10 +49,10 @@ GridScalingKernelManager::GridScalingKernelManager(SPtr<Parameter> parameter, Gr } checkScalingFunction(gridScalingFactory->getGridScalingFC(), this->para->getParD(0)->intFC, "scalingFineToCoarse"); this->scalingFineToCoarse = gridScalingFactory->getGridScalingFC(); + } else{ + if (gridScalingFactory && gridScalingFactory->getGridScalingFC() != nullptr) + VF_LOG_WARNING("A scaling function for fine to coarse was provided, although there is only one level."); } - - if(this->scalingFineToCoarse == nullptr) - VF_LOG_TRACE("Function for scalingFineToCoarse is nullptr"); } void GridScalingKernelManager::runFineToCoarseKernelLB(const int level, InterpolationCellFC* icellFC, int streamIndex) const{ diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h index 964ba78c2..9f2b18bd0 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h +++ b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h @@ -84,7 +84,7 @@ private: if (!scalingFunctionFC && scalingStruct.kFC > 0) throw std::runtime_error("The scaling function " + scalingName + " was not set!"); if (scalingFunctionFC && scalingStruct.kFC == 0) - VF_LOG_WARNING("The scaling function {} was set, although there is no refinement", scalingName); + VF_LOG_WARNING("The scaling function {} was provided, although there is no refinement.", scalingName); } SPtr<Parameter> para; diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp new file mode 100644 index 000000000..217ebd6f5 --- /dev/null +++ b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp @@ -0,0 +1,74 @@ +#include <gmock/gmock.h> +#include <stdexcept> + +#include "GridScalingKernelManager.h" +#include "Factories/GridScalingFactory.h" +#include "Parameter/Parameter.h" +#include "PointerDefinitions.h" + +class GridScalingKernelManagerTest_Initialization : public testing::Test +{ +protected: + GridScalingFactory scalingFactory; + SPtr<Parameter> para = std::make_shared<Parameter>(); + + void SetUp() override + { + para->setGridX({2, 8}); + para->setGridY({2, 8}); + para->setGridZ({2, 8}); + para->setDistX({0, 0}); + para->setDistY({0, 0}); + para->setDistZ({0, 0}); + } +}; + +TEST_F(GridScalingKernelManagerTest_Initialization, singleLevel) +{ + // only one level --> no scaling factory needed --> no error + para->initLBMSimulationParameter(); + para->getParD(0)->intFC.kFC = 100; + EXPECT_NO_THROW(GridScalingKernelManager(para, nullptr)); + + // only one level --> no scaling function needed --> no error + para->initLBMSimulationParameter(); + para->getParD(0)->intFC.kFC = 100; + EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory)); + + // only one level, but the user provided a scaling function anyway --> no error + para->initLBMSimulationParameter(); + scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleK17); + EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory)); +} + +TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevelNoScalingFunction) +{ + // multiple levels, but no interpolation nodes specified --> no scaling function needed --> no error + para->setMaxLevel(2); + para->initLBMSimulationParameter(); + EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory)); + + // multiple levels and interpolation nodes specified, but the user forgot to set the scalingFunction --> error + para->setMaxLevel(2); + para->initLBMSimulationParameter(); + para->getParD(0)->intFC.kFC = 100; + EXPECT_THROW(GridScalingKernelManager(para, &scalingFactory), std::runtime_error); +} + +TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevelNoScalingFactory) +{ + // multiple levels, but the user forgot the scaling factory --> error + para->setMaxLevel(2); + para->initLBMSimulationParameter(); + EXPECT_THROW(GridScalingKernelManager(para, nullptr), std::runtime_error); +} + +TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevelUnnecessaryScalingFunction) +{ + // multiple levels and NO interpolation nodes specified, but the user provided a scaling function anyway --> no error + para->setMaxLevel(2); + para->initLBMSimulationParameter(); + scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleRhoSq); + EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory)); +} + -- GitLab