From bfa0d6753f179fe5f435fa827af3a36081326213 Mon Sep 17 00:00:00 2001
From: peters <peters@irmb.tu-bs.de>
Date: Thu, 24 Jun 2021 17:07:47 +0200
Subject: [PATCH] Extend parametertest until multikernel input

---
 src/basics/config/ConfigurationFile.cpp               |  8 ++++++++
 src/basics/config/ConfigurationFile.h                 | 10 ++++------
 src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp     |  5 ++---
 src/gpu/VirtualFluids_GPU/Parameter/Parameter.h       |  2 +-
 src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp | 10 ++++++++++
 src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg |  5 +++++
 6 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/basics/config/ConfigurationFile.cpp b/src/basics/config/ConfigurationFile.cpp
index eae1a9226..026d13e15 100644
--- a/src/basics/config/ConfigurationFile.cpp
+++ b/src/basics/config/ConfigurationFile.cpp
@@ -65,6 +65,14 @@ bool ConfigurationFile::load(const std::string& file)
 
    return true;
 }
+
+//////////////////////////////////////////////////////////////////////////
+template<>
+bool ConfigurationFile::fromString<bool>(const std::string& str) const
+{
+   return str == "true";
+}
+
 //////////////////////////////////////////////////////////////////////////
 bool ConfigurationFile::contains(const std::string& key) const
 {
diff --git a/src/basics/config/ConfigurationFile.h b/src/basics/config/ConfigurationFile.h
index 4f608faab..8988d1065 100644
--- a/src/basics/config/ConfigurationFile.h
+++ b/src/basics/config/ConfigurationFile.h
@@ -103,17 +103,15 @@ std::vector<T> ConfigurationFile::getVector(const std::string& key) const
 template<class T>
 T ConfigurationFile::fromString(const std::string& str) const
 {
-   //boolean hack
-   if (str == "true")
-      return true;
-   else if (str == "false")
-      return false;
-   //////////////
    std::istringstream stream(str);
    T t;
    stream >> t;
    return t;
 }
+
+template<>
+bool ConfigurationFile::fromString<bool>(const std::string& str) const;
+
 //////////////////////////////////////////////////////////////////////////
 template<class T>
 T ConfigurationFile::getValue(const std::string& key) const
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 9d67bd9b3..8d163c0b6 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -425,7 +425,7 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
     }
 
     if (configData.contains("MultiKernelName"))
-        this->setMultiKernel(StringUtil::toStringVector(configData.getValue<std::string>("MultiKernelName")));
+        this->setMultiKernel(configData.getVector<std::string>("MultiKernelName"));
     else if (this->getMultiKernelOn()) {
         std::vector<std::string> tmp;
         for (int i = 0; i < this->getMaxLevel() + 1; i++) {
@@ -437,7 +437,6 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 
 void Parameter::initLBMSimulationParameter()
 {
-	factor_gridNZ  = 2;
 	coarse         = 0;
 	fine           = this->maxlevel;
 	parH.resize(this->maxlevel+1);
@@ -2685,7 +2684,7 @@ std::vector< int> Parameter::getMultiKernelLevel()
 {
 	return multiKernelLevel;
 }
-std::vector< std::string> Parameter::getMultiKernel()
+std::vector<std::string> Parameter::getMultiKernel()
 {
 	return multiKernel;
 }
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index 3e8d99490..e128f47e4 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -771,7 +771,7 @@ private:
     int diffMod{ 27 };
     int maxlevel{ 0 };
     int coarse, fine;
-    int factor_gridNZ;
+    int factor_gridNZ {2};
     int D3Qxx{ 27 };
     InitCondition ic;
     double memsizeGPU;
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
index 624dcefdd..b38b5ca2e 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
@@ -135,6 +135,16 @@ TEST(ParameterTest, check_all_Parameter_CanBePassedToConstructor)
     EXPECT_THAT(para.getDistY(), testing::ElementsAreArray({500, 501}));
     EXPECT_THAT(para.getDistZ(), testing::ElementsAreArray({600, 601}));
     EXPECT_THAT(para.getNeedInterface(), testing::ElementsAreArray({true, true, true, true, true, true}));
+
+    EXPECT_THAT(para.getMainKernel(), testing::Eq("KernelName"));
+    EXPECT_THAT(para.getMultiKernelOn(), testing::Eq(true));
+    EXPECT_THAT(para.getMultiKernelLevel(), testing::ElementsAreArray({3, 2, 1}));
+
+    std::vector<std::string> kernel {"Kernel1", "Kernel2", "Kernel3"};
+    auto kernel_actual = para.getMultiKernel();
+    for (size_t i = 0; i < kernel.size(); ++i) {
+        EXPECT_THAT(kernel_actual[i], testing::Eq(kernel[i]));
+    }
 }
 
 
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg b/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
index ae13ba02c..edae0daa0 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
+++ b/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg
@@ -87,3 +87,8 @@ DistX = 400 401
 DistY = 500 501
 DistZ = 600 601
 NeedInterface = true true true true true true
+
+MainKernelName = KernelName
+MultiKernelOn = true
+MultiKernelLevel = 3 2 1
+MultiKernelName = Kernel1 Kernel2 Kernel3
\ No newline at end of file
-- 
GitLab