From 5381cd668803c26fe21d34e874fb4259adc4df8a Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-bs.de> Date: Tue, 31 May 2022 12:05:26 +0000 Subject: [PATCH] Add tests for splitting the indices FC into border and bulk --- .../IndexRearrangementForStreamsTest.cpp | 93 +++++++++++++++++-- 1 file changed, 83 insertions(+), 10 deletions(-) diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp index 2c2512e6e..2982aa5c4 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp @@ -11,6 +11,16 @@ #include <gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h> #include <gpu/GridGenerator/grid/GridImp.h> +template <typename T> +bool vectorsAreEqual(T *vector1, std::vector<T> vectorExpected) +{ + for (uint i = 0; i < vectorExpected.size(); i++) { + if (vector1[i] != vectorExpected[i]) + return false; + } + return true; +} + class LevelGridBuilderDouble : public LevelGridBuilder { private: @@ -83,6 +93,21 @@ struct CFBorderBulk { std::vector<real> offsetCFz_Bulk_expected = { 1001, 1003, 1005, 1007 }; }; +struct FCBorderBulk { + // data to work on + std::vector<uint> fluidNodeIndicesBorder = { 110, 111, 112, 113, 114, 115, 116 }; + std::vector<uint> iCellFCC = { 11, 111, 13, 113, 15, 115, 17 }; + std::vector<uint> iCellFCF = { 12, 112, 14, 114, 16, 116, 18 }; + uint sizeOfICellFC = (uint)iCellFCC.size(); + int level = 1; + + // expected data + std::vector<uint> iCellFccBorder_expected = { 111, 113, 115 }; + std::vector<uint> iCellFccBulk_expected = { 11, 13, 15, 17 }; + std::vector<uint> iCellFcfBorder_expected = { 112, 114, 116 }; + std::vector<uint> iCellFcfBulk_expected = { 12, 14, 16, 18 }; +}; + static SPtr<Parameter> initParameterClass() { std::filesystem::path filePath = __FILE__; // assuming that the config file is stored parallel to this file. @@ -92,16 +117,6 @@ static SPtr<Parameter> initParameterClass() return std::make_shared<Parameter>(config, 1, 0); } -template <typename T> -bool vectorsAreEqual(T *vector1, std::vector<T> vectorExpected) -{ - for (uint i = 0; i < vectorExpected.size(); i++) { - if (vector1[i] != vectorExpected[i]) - return false; - } - return true; -} - class IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest : public testing::Test { public: @@ -141,6 +156,39 @@ private: } }; +class IndexRearrangementForStreamsTest_IndicesFCBorderBulkTest : public testing::Test +{ +public: + FCBorderBulk fc; + SPtr<Parameter> para; + +private: + static std::unique_ptr<IndexRearrangementForStreams> createTestSubjectFCBorderBulk(FCBorderBulk &fc, + std::shared_ptr<Parameter> para) + { + SPtr<GridImpDouble> grid = + GridImpDouble::makeShared(nullptr, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, nullptr, Distribution(), 1); + grid->setFluidNodeIndicesBorder(fc.fluidNodeIndicesBorder); + std::shared_ptr<LevelGridBuilderDouble> builder = std::make_shared<LevelGridBuilderDouble>(grid); + + para->setMaxLevel(fc.level + 1); // setMaxLevel resizes parH and parD + para->parH[fc.level] = std::make_shared<LBMSimulationParameter>(); + para->parD[fc.level] = std::make_shared<LBMSimulationParameter>(); + para->getParH(fc.level)->intFC.ICellFCC = &(fc.iCellFCC.front()); + para->getParH(fc.level)->intFC.ICellFCF = &(fc.iCellFCF.front()); + para->getParH(fc.level)->intFC.kFC = fc.sizeOfICellFC; + + return std::make_unique<IndexRearrangementForStreams>(para, builder); + }; + + void SetUp() override + { + para = initParameterClass(); + auto testSubject = createTestSubjectFCBorderBulk(fc, para); + testSubject->splitFineToCoarseIntoBorderAndBulk(fc.level); + } +}; + TEST_F(IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest, splitCoarseToFineIntoBorderAndBulk) { EXPECT_THAT(para->getParH(cf.level)->intCFBorder.kCF + para->getParH(cf.level)->intCFBulk.kCF, @@ -173,3 +221,28 @@ TEST_F(IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest, splitCoarseToFi EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.zOffCF, cf.offsetCFz_Border_expected)); EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.zOffCF, cf.offsetCFz_Bulk_expected)); } + +TEST_F(IndexRearrangementForStreamsTest_IndicesFCBorderBulkTest, splitFineToCoarseIntoBorderAndBulk) +{ + EXPECT_THAT(para->getParH(fc.level)->intFCBorder.kFC + para->getParH(fc.level)->intFCBulk.kFC, + testing::Eq(fc.sizeOfICellFC)) + << "The number of interpolation cells from coarse to fine changed during reordering."; + + // check coarse to fine border (coarse nodes) + EXPECT_THAT(para->getParH(fc.level)->intFCBorder.kFC, testing::Eq((uint)fc.iCellFccBorder_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(fc.level)->intFCBorder.ICellFCC, fc.iCellFccBorder_expected)) + << "intFCBorder.ICellFCC does not match the expected border vector"; + // check coarse to fine border (fine nodes) + EXPECT_THAT(para->getParH(fc.level)->intFCBorder.kFC, testing::Eq((uint)fc.iCellFcfBorder_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(fc.level)->intFCBorder.ICellFCF, fc.iCellFcfBorder_expected)) + << "intFCBorder.ICellFCF does not match the expected border vector"; + + // check coarse to fine bulk (coarse nodes) + EXPECT_THAT(para->getParH(fc.level)->intFCBulk.kFC, testing::Eq((uint)fc.iCellFccBulk_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(fc.level)->intFCBulk.ICellFCC, fc.iCellFccBulk_expected)) + << "intFCBulk.ICellFCC does not match the expected bulk vector"; + // check coarse to fine bulk (fine nodes) + EXPECT_THAT(para->getParH(fc.level)->intFCBulk.kFC, testing::Eq((uint)fc.iCellFcfBulk_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(fc.level)->intFCBulk.ICellFCF, fc.iCellFcfBulk_expected)) + << "intFCBulk.ICellFCF does not match the expected bulk vector"; +} \ No newline at end of file -- GitLab