From c5011f993f7c8f59420520734eb80cc309ca78a1 Mon Sep 17 00:00:00 2001
From: Henry Korb <henry.korb@geo.uu.se>
Date: Tue, 20 Apr 2021 18:39:41 +0200
Subject: [PATCH] added bodyForce to cumulantK17CompChim

---
 apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp    | 18 +++++++-------
 .../CumulantK17chim/CumulantK17CompChim.cu    |  4 ++++
 .../CumulantK17CompChim_Device.cu             | 24 ++++++++++++++-----
 .../CumulantK17CompChim_Device.cuh            |  4 ++++
 4 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
index 6c260587c..b82e2211c 100644
--- a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
+++ b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
@@ -138,8 +138,8 @@ void multipleLevel(const std::string& configPath)
 
 	const real dx = D/real(nodes_per_D);
 
-	gridBuilder->addCoarseGrid(0.0, 0.0, 0.0
-								L_x,  L_y,  L_z, dx);
+	gridBuilder->addCoarseGrid(0.0, 0.0, 0.0,
+							   L_x,  L_y,  L_z, dx);
 
 	gridBuilder->setPeriodicBoundaryCondition(false, false, false);
 
@@ -203,15 +203,15 @@ void multipleLevel(const std::string& configPath)
         para->setTOut( timeStepOut );
         para->setTEnd( timeStepEnd );
 
-        para->setBodyForce( true );
+        para->setIsBodyForce( true );
 
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        gridBuilder->setVelocityBoundaryCondition(SideType::MX,  vx,  0.0, 0.0);
-        gridBuilder->setVelocityBoundaryCondition(SideType::PX,  vx,  0.0, 0.0);
-        gridBuilder->setVelocityBoundaryCondition(SideType::MY,  vx,  0.0, 0.0);
-        gridBuilder->setVelocityBoundaryCondition(SideType::PY,  vx,  0.0, 0.0);
-        gridBuilder->setVelocityBoundaryCondition(SideType::MZ,  vx,  0.0, 0.0);
-        gridBuilder->setVelocityBoundaryCondition(SideType::PZ,  vx,  0.0, 0.0);
+        gridBuilder->setVelocityBoundaryCondition(SideType::MX,  velocityLB,  0.0, 0.0);
+        gridBuilder->setVelocityBoundaryCondition(SideType::PX,  velocityLB,  0.0, 0.0);
+        gridBuilder->setVelocityBoundaryCondition(SideType::MY,  velocityLB,  0.0, 0.0);
+        gridBuilder->setVelocityBoundaryCondition(SideType::PY,  velocityLB,  0.0, 0.0);
+        gridBuilder->setVelocityBoundaryCondition(SideType::MZ,  velocityLB,  0.0, 0.0);
+        gridBuilder->setVelocityBoundaryCondition(SideType::PZ,  velocityLB,  0.0, 0.0);
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim.cu
index 38df36655..b97b27784 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim.cu
@@ -37,7 +37,11 @@ void CumulantK17CompChim::run()
 		para->getParD(level)->d0SP.f[0],
 		para->getParD(level)->size_Mat_SP,
 		level,
+		para->getIsBodyForce(),
 		para->getForcesDev(),
+		para->getParD(level)->forceX_SP,
+		para->getParD(level)->forceY_SP,
+		para->getParD(level)->forceZ_SP,
         para->getQuadricLimitersDev(),
 		para->getParD(level)->evenOrOdd);
 	getLastCudaError("LB_Kernel_CumulantK17CompChim execution failed");
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu
index 6b316deb8..1a217934a 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu
@@ -46,7 +46,11 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
 	real* distributions,
 	int size_Mat,
 	int level,
+    bool bodyForce,
 	real* forces,
+    real* bodyForceX,
+    real* bodyForceY,
+    real* bodyForceZ,
 	real* quadricLimiters,
 	bool isEvenTimestep)
 {
@@ -208,12 +212,20 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
         for (size_t i = 1; i <= level; i++) {
             factor *= c2o1;
         }
-        real fx = forces[0] / factor;
-        real fy = forces[1] / factor;
-        real fz = forces[2] / factor;
-        vvx += fx * c1o2;
-        vvy += fy * c1o2;
-        vvz += fz * c1o2;
+        
+        real fx = forces[0];
+        real fy = forces[1];
+        real fz = forces[2];
+
+        if( bodyForce ){
+            fx += bodyForceX[k];
+            fy += bodyForceY[k];
+            fz += bodyForceZ[k];
+        }
+        
+        vvx += fx * c1o2 / factor;
+        vvy += fy * c1o2 / factor;
+        vvz += fz * c1o2 / factor;
         ////////////////////////////////////////////////////////////////////////////////////
         // calculate the square of velocities for this lattice node
         real vx2 = vvx * vvx;
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cuh
index 557bc08b1..1d42d65f0 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cuh
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cuh
@@ -13,7 +13,11 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
 	real* distributions,
 	int size_Mat,
 	int level,
+	bool bodyForce,
 	real* forces,
+	real* bodyForceX,
+	real* bodyForceY,
+	real* bodyForceZ,
 	real* quadricLimiters,
 	bool isEvenTimestep);
 #endif
-- 
GitLab