diff --git a/src/gpu/VirtualFluids_GPU/CMakeLists.txt b/src/gpu/VirtualFluids_GPU/CMakeLists.txt index ed647cb406bca23ef90667b7d17171c7b3f46283..ffab484b28870fcc278e6aabbb4db618d30d0e99 100644 --- a/src/gpu/VirtualFluids_GPU/CMakeLists.txt +++ b/src/gpu/VirtualFluids_GPU/CMakeLists.txt @@ -24,5 +24,7 @@ if(BUILD_VF_UNIT_TESTS) set_source_files_properties(DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(Communication/ExchangeData27Test.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(BoundaryConditions/BoundaryConditionFactoryTest.cpp PROPERTIES LANGUAGE CUDA) + set_source_files_properties(Parameter/ParameterTest.cpp PROPERTIES LANGUAGE CUDA) target_include_directories(VirtualFluids_GPUTests PRIVATE "${VF_THIRD_DIR}/cuda_samples/") + target_include_directories(VirtualFluids_GPUTests PRIVATE "${VF_ROOT_DIR}/src/gpu/GridGenerator/") endif() diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp index b86d5657922deb9dca6e89574efc72766bcd16ce..bdd22ab27669363ef7b52ac1b16854e5fa25a3c8 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp +++ b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp @@ -4,9 +4,18 @@ #include <iostream> #include <string> +#include "LBM/Simulation.h" #include "Parameter.h" +#include "PointerDefinitions.h" #include "basics/config/ConfigurationFile.h" +#include "Factories/BoundaryConditionFactory.h" +#include "Factories/GridScalingFactory.h" +#include "Communication/Communicator.h" +#include "DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "GPU/CudaMemoryManager.h" +#include "gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" + TEST(ParameterTest, passingEmptyFileWithoutPath_ShouldNotThrow) { // assuming that the config files is stored parallel to this file. @@ -198,6 +207,72 @@ TEST(ParameterTest, userMissedSlashMultiGPU) EXPECT_THAT(para.getConcentration(), testing::Eq("gridPathTest/0/conc.dat")); } +class MockGridGenerator : public GridGenerator +{ + +public: + MockGridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, + std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::gpu::Communicator &communicator) + : GridGenerator(builder, para, cudaMemoryManager, communicator) + { + } + + void initalGridInformations() 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 }); + } + void allocArrays_CoordNeighborGeo() override{}; + void setBoundingBox() override{}; + void allocArrays_OffsetScale() override{}; + void allocArrays_BoundaryValues() override{}; + void allocArrays_BoundaryQs() override{}; +}; + +TEST(ParameterTest, whenCreatingParameterClassWithGridRefinement_afterCallingInitLBMSimulationParameter_shouldNotThrow) +{ + auto para = std::make_shared<Parameter>(); + para->setMaxLevel(2); + + para->setGridX({ 2, 8 }); + para->setGridY({ 2, 8 }); + para->setGridZ({ 2, 8 }); + para->setDistX({ 0, 0 }); + para->setDistY({ 0, 0 }); + para->setDistZ({ 0, 0 }); + + EXPECT_THAT(para->getParH(1), testing::Eq(nullptr)); // Parameter initialization incomplete + para->initLBMSimulationParameter(); + EXPECT_THAT(para->getParH(1), testing::Ne(nullptr)); +} + +TEST(ParameterTest, whenCreatingParameterClassWithGridRefinement_afterCallingSimulationConstructor_shouldNotThrow) +{ + spdlog::set_level(spdlog::level::warn); // avoids logger spam in output + + auto para = std::make_shared<Parameter>(); + para->setMaxLevel(2); + + SPtr<CudaMemoryManager> cudaMemoryManager = std::make_shared<CudaMemoryManager>(para); + vf::gpu::Communicator &communicator = vf::gpu::Communicator::getInstance(); + auto gridFactory = GridFactory::make(); + auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory); + SPtr<GridProvider> gridGenerator = + std::make_shared<MockGridGenerator>(gridBuilder, para, cudaMemoryManager, communicator); + BoundaryConditionFactory bcFactory = BoundaryConditionFactory(); + GridScalingFactory scalingFactory = GridScalingFactory(); + + EXPECT_THAT(para->getParH(1), testing::Eq(nullptr)); // Parameter initialization incomplete + // Simulation() calls para->initLBMSimulationParameter() --> that function completes the initialization of Parameter + Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory, &scalingFactory); + EXPECT_THAT(para->getParH(1), testing::Ne(nullptr)); + EXPECT_NO_THROW(cudaMemoryManager->cudaAllocLevelForcing(1)); // throws if para->getParH(1) is a null pointer +} + class ParameterTestCumulantK17 : public testing::Test { protected: