From 92df355e69f36a2f851bb0969f74d3b8e7dc8a3b Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-braunschweig.de>
Date: Fri, 3 Sep 2021 11:35:53 +0200
Subject: [PATCH] Use unique pointer to CudaMemoryManager in Parameter

To avoid compiler errors, the destructor of Parameter must be defined in Parameter.cpp
---
 src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp | 4 +++-
 src/gpu/VirtualFluids_GPU/Parameter/Parameter.h   | 5 +++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 56bb66f1a..392afa3d4 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -55,6 +55,8 @@ Parameter::Parameter(const vf::basics::ConfigurationFile &configData, int number
     //initLBMSimulationParameter();
 }
 
+Parameter::~Parameter() = default;
+
 void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 {
    if (configData.contains("NumberOfDevices"))
@@ -2494,7 +2496,7 @@ void Parameter::setUseStreams() {
 
 bool Parameter::getUseStreams() { return this->useStreams; }
 
-std::shared_ptr<CudaStreamManager> &Parameter::getStreamManager() { return this->cudaStreamManager; }
+std::unique_ptr<CudaStreamManager> &Parameter::getStreamManager() { return this->cudaStreamManager; }
 
 void Parameter::findCornerNodesCommMultiGPU() { 
 	for (uint level = 0; level < parH.size(); level++) {
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index 813287d9c..d8832fb71 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -327,6 +327,7 @@ class VIRTUALFLUIDS_GPU_EXPORT Parameter
 {
 public:
     Parameter(const vf::basics::ConfigurationFile &configData, int numberOfProcesses, int myId);
+    ~Parameter();
     void initLBMSimulationParameter();
 
     std::shared_ptr<LBMSimulationParameter> getParH(int level);
@@ -856,12 +857,12 @@ private:
 
     // cuda streams
     bool useStreams { false };
-    std::shared_ptr<CudaStreamManager> cudaStreamManager;
+    std::unique_ptr<CudaStreamManager> cudaStreamManager;
 
 public:
     void setUseStreams();
     bool getUseStreams();
-    std::shared_ptr<CudaStreamManager> &getStreamManager();
+    std::unique_ptr<CudaStreamManager> &getStreamManager();
 
     void findCornerNodesCommMultiGPU();
     void findCornerNodesXY(int level);
-- 
GitLab