From 9daf3c22f8734d0991d308de89e358f6f7b84a7b Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-bs.de>
Date: Mon, 11 Jul 2022 08:06:44 +0000
Subject: [PATCH] Simplify creation of kernel managers

---
 .../KernelManager/ADKernelManager.cpp         |  9 ----
 .../KernelManager/ADKernelManager.h           | 54 ++++++++-----------
 .../KernelManager/BCKernelManager.h           | 10 ++--
 .../KernelManager/LBKernelManager.cpp         | 26 ++-------
 .../KernelManager/LBKernelManager.h           | 14 ++---
 src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp  | 12 ++---
 src/gpu/VirtualFluids_GPU/LBM/Simulation.h    |  6 +--
 7 files changed, 44 insertions(+), 87 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
index 8ea8b5859..53c7707b6 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
@@ -165,13 +165,4 @@ void ADKernelManager::printAD(SPtr<CudaMemoryManager> cudaMemoryManager)
     cudaMemoryManager->cudaCopyConcentrationDeviceToHost();
 }
 
-SPtr<ADKernelManager> ADKernelManager::make(SPtr<Parameter> parameter){
-    return SPtr<ADKernelManager>(new ADKernelManager(parameter));
-}
-
 ADKernelManager::ADKernelManager(SPtr<Parameter> parameter): para(parameter){}
-
-ADKernelManager::ADKernelManager(const ADKernelManager&)
-{
-
-}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
index 3c781b297..d48b2ff06 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
@@ -33,8 +33,8 @@
 #ifndef ADVECTION_DIFFUSION_H
 #define ADVECTION_DIFFUSION_H
 
-#include "PointerDefinitions.h"
 #include "Core/DataTypes.h"
+#include "PointerDefinitions.h"
 #include "VirtualFluids_GPU_export.h"
 
 //! \brief Class forwarding for Parameter, DataWriter and CudaMemoryManager
@@ -43,44 +43,36 @@ class CudaMemoryManager;
 
 //! \class ADKernelManager
 //! \brief manage the advection diffusion kernel calls
-class VIRTUALFLUIDS_GPU_EXPORT ADKernelManager{
+class VIRTUALFLUIDS_GPU_EXPORT ADKernelManager
+{
 
 public:
+    //! Class constructor
+    //! \param parameter shared pointer to instance of class Parameter
+    ADKernelManager(SPtr<Parameter> parameter);
+    
+    //! \brief initialize the Advection Diffusion distributions
+    //! \param para instance of class Parameter
+    void initAD();
 
-//! \brief makes an object of ADKernelManager
-//! \param para shared pointer to instance of class Parameter
-static SPtr<ADKernelManager> make(SPtr<Parameter> parameter);
-
-//! \brief initialize the Advection Diffusion distributions
-//! \param para instance of class Parameter
-void initAD();
-
-//! \brief set initial concentration values at all nodes
-//! \param para instance of class Parameter
-//! \param cudaManager instance of class CudaMemoryManager
-void setInitialNodeValuesAD(SPtr<CudaMemoryManager> cudaMemoryManager);
-
-//! \brief calculate the state of the next time step of the Advection Diffusion distributions
-//! \param para instance of class Parameter
-void runADcollisionKernel();
+    //! \brief set initial concentration values at all nodes
+    //! \param para instance of class Parameter
+    //! \param cudaManager instance of class CudaMemoryManager
+    void setInitialNodeValuesAD(SPtr<CudaMemoryManager> cudaMemoryManager);
 
-//! \brief calls the device function of the slip boundary condition for advection diffusion
-void runADslipBCKernel();
+    //! \brief calculate the state of the next time step of the Advection Diffusion distributions
+    //! \param para instance of class Parameter
+    void runADcollisionKernel();
 
-//! \brief copy the concentration from device to host and writes VTK file with concentration
-//! \param para instance of class Parameter
-//! \param cudaManager instance of class CudaMemoryManager
-void printAD(SPtr<CudaMemoryManager> cudaMemoryManager);
+    //! \brief calls the device function of the slip boundary condition for advection diffusion
+    void runADslipBCKernel();
 
+    //! \brief copy the concentration from device to host and writes VTK file with concentration
+    //! \param para instance of class Parameter
+    //! \param cudaManager instance of class CudaMemoryManager
+    void printAD(SPtr<CudaMemoryManager> cudaMemoryManager);
 
 private:
-    //! Class constructor
-    //! \param parameter shared pointer to instance of class Parameter
-    ADKernelManager(SPtr<Parameter> parameter);
-    //! Class copy constructor
-    //! \param ADKernelManager is a reference to ADKernelManager object
-    ADKernelManager(const ADKernelManager&);
-
     //! \property para is a shared pointer to an object of Parameter
     SPtr<Parameter> para;
 };
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
index 68b9fa5f0..a519d40cf 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
@@ -26,7 +26,7 @@
 //  You should have received a copy of the GNU General Public License along
 //  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
 //
-//! \file LBKernelManager.h
+//! \file BCKernelManager.h
 //! \ingroup KernelManager
 //! \author Martin Schoenherr
 //=======================================================================================
@@ -49,8 +49,8 @@ struct ParameterStruct;
 using boundaryCondition = std::function<void(ParameterStruct *, QforBoundaryConditions *)>;
 using boundaryConditionPara = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
 
-//! \class LBKernelManager
-//! \brief manage the cuda kernel calls
+//! \class BCKernelManager
+//! \brief manage the cuda kernel calls to boundary conditions
 class VIRTUALFLUIDS_GPU_EXPORT BCKernelManager
 {
 public:
@@ -64,10 +64,10 @@ public:
     //! \brief calls the device function of the geometry boundary condition (post-collision)
     void runGeoBCKernelPost(const int level) const;
 
-    //! \brief calls the device function of the slip boundary condition
+    //! \brief calls the device function of the slip boundary condition (post-collision)
     void runSlipBCKernelPost(const int level) const;
 
-    //! \brief calls the device function of the no-slip boundary condition
+    //! \brief calls the device function of the no-slip boundary condition (post-collision)
     void runNoSlipBCKernelPost(const int level) const;
 
     //! \brief calls the device function of the pressure boundary condition (pre-collision)
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp
index 6ed36f4eb..1d94c73f5 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp
@@ -104,27 +104,7 @@ void LBKernelManager::calculateMacroscopicValues(SPtr<Parameter> para)
     }
 }
 
+LBKernelManager::LBKernelManager(SPtr<Parameter> parameter): parameter(parameter)
+{
+}
 
-
-
-
-
-
-
-
-
-
-// SPtr<LBKernelManager> LBKernelManager::make(SPtr<Parameter> parameter)
-// {
-//     return SPtr<LBKernelManager>(new LBKernelManager(parameter));
-// }
-
-// LBKernelManager::LBKernelManager(SPtr<Parameter> parameter)
-// {
-//     this->parameter = parameter;
-// }
-
-// LBKernelManager::LBKernelManager(const LBKernelManager&)
-// {
-
-// }
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h
index 29ccf0306..d023457fe 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h
@@ -45,10 +45,10 @@ class Parameter;
 class VIRTUALFLUIDS_GPU_EXPORT LBKernelManager
 {
 public:
-    //! \brief makes an object of LBKernelManager
-    //! \param para shared pointer to instance of class Parameter
-    static SPtr<LBKernelManager> make(std::shared_ptr<Parameter> parameter);
-    
+    //! Class constructor
+    //! \param parameter shared pointer to instance of class Parameter
+    LBKernelManager(SPtr<Parameter> parameter);
+
     //! \brief calls the device function of the lattice Boltzmann kernel
     void runLBMKernel(SPtr<Parameter> para);
 
@@ -56,12 +56,6 @@ public:
     void calculateMacroscopicValues(SPtr<Parameter> para);
 
 private:
-    //! Class constructor
-    //! \param parameter shared pointer to instance of class Parameter
-    LBKernelManager(SPtr<Parameter> parameter);
-    //! Class copy constructor
-    //! \param LBKernelManager is a reference to LBKernelManager object
-    LBKernelManager(const LBKernelManager&);
 
     //! \property para is a shared pointer to an object of Parameter
     SPtr<Parameter> parameter;
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
index f688e933d..d9d8f0e5b 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
@@ -60,9 +60,9 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, SPt
     this->gridProvider      = gridProvider;
     this->cudaMemoryManager = cudaMemoryManager;
     this->para              = para;
-    this->cudaKernelManager = LBKernelManager::make(para);
-    this->adKernelManager   = ADKernelManager::make(para);
-    this->bcKernelManager = std::make_shared<BCKernelManager>(para, bcFactory);
+    this->lbKernelManager   = std::make_shared<LBKernelManager>(para);
+    this->adKernelManager   = std::make_shared<ADKernelManager>(para);
+    this->bcKernelManager   = std::make_shared<BCKernelManager>(para, bcFactory);
 
 
     para->initParameter();
@@ -112,7 +112,7 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, SPt
     //////////////////////////////////////////////////////////////////////////
     // print initialized grid
     output << "Print files Init...";
-    dataWriter->writeInit(para, cudaMemoryManager, cudaKernelManager, adKernelManager.get());
+    dataWriter->writeInit(para, cudaMemoryManager, lbKernelManager, adKernelManager.get());
     output << "done.\n";
 
     //////////////////////////////////////////////////////////////////////////
@@ -143,7 +143,7 @@ void Simulation::run()
 
         ////////////////////////////////////////////////////////////////////////////////
         // LBM Kernel
-        cudaKernelManager->runLBMKernel(para);
+        lbKernelManager->runLBMKernel(para);
 
         ////////////////////////////////////////////////////////////////////////////////
         // velocity boundary condition
@@ -171,7 +171,7 @@ void Simulation::run()
             // IO
             if (para->getPrintFiles()) {
                 output << "File IO for t=" << timestep << "...";
-                dataWriter->writeTimestep(para, cudaMemoryManager, cudaKernelManager, adKernelManager.get(), timestep);
+                dataWriter->writeTimestep(para, cudaMemoryManager, lbKernelManager, adKernelManager.get(), timestep);
                 output << "done.\n";
             }
             timer->start();
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
index 1130b5da0..ca61f9828 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
+++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
@@ -74,10 +74,10 @@ protected:
     //! \property cudaMemoryManager is a shared pointer to an object of CudaMemoryManager
     SPtr<CudaMemoryManager> cudaMemoryManager;
     //! \property cudaKernelManager is a shared pointer to an object of LBKernelManager
-    SPtr<LBKernelManager> cudaKernelManager;
+    SPtr<LBKernelManager> lbKernelManager;
     //! \property adKernelManager is a shared pointer to an object of ADKernelManager
-    std::shared_ptr<ADKernelManager> adKernelManager;
+    SPtr<ADKernelManager> adKernelManager;
     //! \property bcKernelManager is a shared pointer to an object of BCKernelManager
-    std::shared_ptr<BCKernelManager> bcKernelManager;
+    SPtr<BCKernelManager> bcKernelManager;
 };
 #endif
-- 
GitLab