diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h b/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h index e69ad42bddc4c14b6ed541eddf344963ec9db97f..7f232f4510df80f7bba5cfe7457b63ff83057488 100644 --- a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h +++ b/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h @@ -142,11 +142,11 @@ public: // void setOutflowBoundaryCondition(...); // TODO: // https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16 - [[nodiscard]] boundaryCondition getVelocityBoundaryConditionPost(bool isGeometryBC = false) const; - [[nodiscard]] boundaryCondition getNoSlipBoundaryConditionPost(bool isGeometryBC = false) const; - [[nodiscard]] boundaryCondition getSlipBoundaryConditionPost(bool isGeometryBC = false) const; - [[nodiscard]] boundaryCondition getPressureBoundaryConditionPre() const; - [[nodiscard]] boundaryCondition getGeometryBoundaryConditionPost() const; + [[nodiscard]] virtual boundaryCondition getVelocityBoundaryConditionPost(bool isGeometryBC = false) const; + [[nodiscard]] virtual boundaryCondition getNoSlipBoundaryConditionPost(bool isGeometryBC = false) const; + [[nodiscard]] virtual boundaryCondition getSlipBoundaryConditionPost(bool isGeometryBC = false) const; + [[nodiscard]] virtual boundaryCondition getPressureBoundaryConditionPre() const; + [[nodiscard]] virtual boundaryCondition getGeometryBoundaryConditionPost() const; [[nodiscard]] boundaryConditionWithParameter getStressBoundaryConditionPost() const; diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h index 423a9cc9056281a3a2a135ae32fa26cc47f93967..ed31dd79ac7ddccf08c2c7869ecf573d850ef3f2 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h +++ b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h @@ -105,10 +105,10 @@ private: SPtr<Parameter> para; + boundaryCondition pressureBoundaryConditionPre = nullptr; boundaryCondition velocityBoundaryConditionPost = nullptr; boundaryCondition noSlipBoundaryConditionPost = nullptr; boundaryCondition slipBoundaryConditionPost = nullptr; - boundaryCondition pressureBoundaryConditionPre = nullptr; boundaryCondition geometryBoundaryConditionPost = nullptr; boundaryConditionWithParameter stressBoundaryConditionPost = nullptr; }; diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp index 44e42b584083c830fedc583f8de67af9b29e4152..790eeb63437a4dcf627747304ab1c08f067b8b74 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp +++ b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp @@ -1,4 +1,5 @@ #include <gmock/gmock-function-mocker.h> +#include <gmock/gmock-matchers.h> #include <gmock/gmock.h> #include <stdexcept> @@ -66,3 +67,40 @@ TEST_F(BCKernelManagerTest_BCsNotSpecified, stressBoundaryConditionPost_NotSpeci para->getParD(0)->stressBC.numberOfBCnodes = 0; EXPECT_NO_THROW(BCKernelManager(para, &bcFactory)); } + +class BoundaryConditionFactoryMock : public BoundaryConditionFactory +{ +public: + mutable uint numberOfCalls = 0; + + [[nodiscard]] boundaryCondition getVelocityBoundaryConditionPost(bool) const override + { + return [this](LBMSimulationParameter *, QforBoundaryConditions *) { numberOfCalls++; }; + } +}; + +class BCKernelManagerTest_runBCs : public testing::Test +{ +protected: + BoundaryConditionFactoryMock bcFactory; + SPtr<Parameter> para = std::make_shared<Parameter>(); + UPtr<BCKernelManager> sut; + + void SetUp() override + { + para->initLBMSimulationParameter(); + sut = std::make_unique<BCKernelManager>(para, &bcFactory); + } +}; + +TEST_F(BCKernelManagerTest_runBCs, runVelocityBCKernelPost) +{ + para->getParD(0)->velocityBC.numberOfBCnodes = 1; + sut->runVelocityBCKernelPost(0); + EXPECT_THAT(bcFactory.numberOfCalls, testing::Eq(1)); + + bcFactory.numberOfCalls = 0; + para->getParD(0)->velocityBC.numberOfBCnodes = 0; + sut->runVelocityBCKernelPost(0); + EXPECT_THAT(bcFactory.numberOfCalls, testing::Eq(0)); +} \ No newline at end of file