From bd2123ce58e83a7abf52137e70287b55f82d4a21 Mon Sep 17 00:00:00 2001
From: "TESLA03\\Master" <a.wellmann@tu-bs.de>
Date: Wed, 16 Jun 2021 12:35:40 +0200
Subject: [PATCH] Revert LBCalcMacCompSP27 to old version

---
 src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu | 220 +++++++++++++++++++--
 1 file changed, 200 insertions(+), 20 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu b/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
index 562140eb2..547b20745 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
@@ -264,26 +264,206 @@ extern "C" __global__ void LBCalcMacCompSP27(real *vxD, real *vyD, real *vzD, re
                                              unsigned int *neighborZ, unsigned int size_Mat, real *distributions,
                                              bool isEvenTimestep)
 {
-    const unsigned k = vf::gpu::getNodeIndex();
-
-    pressD[k] = c0o1;
-    rhoD[k]   = c0o1;
-    vxD[k]    = c0o1;
-    vyD[k]    = c0o1;
-    vzD[k]    = c0o1;
-
-    if (!vf::gpu::isValidFluidNode(k, size_Mat, geoD[k]))
-        return;
-
-    vf::gpu::DistributionWrapper distr_wrapper(distributions, size_Mat, isEvenTimestep, k, neighborX, neighborY,
-                                               neighborZ);
-    const auto &distribution = distr_wrapper.distribution;
-
-    rhoD[k]   = vf::lbm::getDensity(distribution.f);
-    vxD[k]    = vf::lbm::getCompressibleVelocityX1(distribution.f, rhoD[k]);
-    vyD[k]    = vf::lbm::getCompressibleVelocityX2(distribution.f, rhoD[k]);
-    vzD[k]    = vf::lbm::getCompressibleVelocityX3(distribution.f, rhoD[k]);
-    pressD[k] = vf::lbm::getPressure(distribution.f, rhoD[k], vxD[k], vyD[k], vzD[k]); 
+    //const unsigned k = vf::gpu::getNodeIndex();
+
+    //pressD[k] = c0o1;
+    //rhoD[k]   = c0o1;
+    //vxD[k]    = c0o1;
+    //vyD[k]    = c0o1;
+    //vzD[k]    = c0o1;
+
+    //if (!vf::gpu::isValidFluidNode(k, size_Mat, geoD[k]))
+    //    return;
+
+    //vf::gpu::DistributionWrapper distr_wrapper(distributions, size_Mat, isEvenTimestep, k, neighborX, neighborY,
+    //                                           neighborZ);
+    //const auto &distribution = distr_wrapper.distribution;
+
+    //rhoD[k]   = vf::lbm::getDensity(distribution.f);
+    //vxD[k]    = vf::lbm::getCompressibleVelocityX1(distribution.f, rhoD[k]);
+    //vyD[k]    = vf::lbm::getCompressibleVelocityX2(distribution.f, rhoD[k]);
+    //vzD[k]    = vf::lbm::getCompressibleVelocityX3(distribution.f, rhoD[k]);
+    //pressD[k] = vf::lbm::getPressure(distribution.f, rhoD[k], vxD[k], vyD[k], vzD[k]); 
+
+
+   // old stuff
+   Distributions27 D;
+    if (isEvenTimestep == true)
+   {
+      D.f[dirE   ] = &distributions[dirE   *size_Mat];
+      D.f[dirW   ] = &distributions[dirW   *size_Mat];
+      D.f[dirN   ] = &distributions[dirN   *size_Mat];
+      D.f[dirS   ] = &distributions[dirS   *size_Mat];
+      D.f[dirT   ] = &distributions[dirT   *size_Mat];
+      D.f[dirB   ] = &distributions[dirB   *size_Mat];
+      D.f[dirNE  ] = &distributions[dirNE  *size_Mat];
+      D.f[dirSW  ] = &distributions[dirSW  *size_Mat];
+      D.f[dirSE  ] = &distributions[dirSE  *size_Mat];
+      D.f[dirNW  ] = &distributions[dirNW  *size_Mat];
+      D.f[dirTE  ] = &distributions[dirTE  *size_Mat];
+      D.f[dirBW  ] = &distributions[dirBW  *size_Mat];
+      D.f[dirBE  ] = &distributions[dirBE  *size_Mat];
+      D.f[dirTW  ] = &distributions[dirTW  *size_Mat];
+      D.f[dirTN  ] = &distributions[dirTN  *size_Mat];
+      D.f[dirBS  ] = &distributions[dirBS  *size_Mat];
+      D.f[dirBN  ] = &distributions[dirBN  *size_Mat];
+      D.f[dirTS  ] = &distributions[dirTS  *size_Mat];
+      D.f[dirZERO] = &distributions[dirZERO*size_Mat];
+      D.f[dirTNE ] = &distributions[dirTNE *size_Mat];
+      D.f[dirTSW ] = &distributions[dirTSW *size_Mat];
+      D.f[dirTSE ] = &distributions[dirTSE *size_Mat];
+      D.f[dirTNW ] = &distributions[dirTNW *size_Mat];
+      D.f[dirBNE ] = &distributions[dirBNE *size_Mat];
+      D.f[dirBSW ] = &distributions[dirBSW *size_Mat];
+      D.f[dirBSE ] = &distributions[dirBSE *size_Mat];
+      D.f[dirBNW ] = &distributions[dirBNW *size_Mat];
+   } 
+   else
+   {
+      D.f[dirW   ] = &distributions[dirE   *size_Mat];
+      D.f[dirE   ] = &distributions[dirW   *size_Mat];
+      D.f[dirS   ] = &distributions[dirN   *size_Mat];
+      D.f[dirN   ] = &distributions[dirS   *size_Mat];
+      D.f[dirB   ] = &distributions[dirT   *size_Mat];
+      D.f[dirT   ] = &distributions[dirB   *size_Mat];
+      D.f[dirSW  ] = &distributions[dirNE  *size_Mat];
+      D.f[dirNE  ] = &distributions[dirSW  *size_Mat];
+      D.f[dirNW  ] = &distributions[dirSE  *size_Mat];
+      D.f[dirSE  ] = &distributions[dirNW  *size_Mat];
+      D.f[dirBW  ] = &distributions[dirTE  *size_Mat];
+      D.f[dirTE  ] = &distributions[dirBW  *size_Mat];
+      D.f[dirTW  ] = &distributions[dirBE  *size_Mat];
+      D.f[dirBE  ] = &distributions[dirTW  *size_Mat];
+      D.f[dirBS  ] = &distributions[dirTN  *size_Mat];
+      D.f[dirTN  ] = &distributions[dirBS  *size_Mat];
+      D.f[dirTS  ] = &distributions[dirBN  *size_Mat];
+      D.f[dirBN  ] = &distributions[dirTS  *size_Mat];
+      D.f[dirZERO] = &distributions[dirZERO*size_Mat];
+      D.f[dirTNE ] = &distributions[dirBSW *size_Mat];
+      D.f[dirTSW ] = &distributions[dirBNE *size_Mat];
+      D.f[dirTSE ] = &distributions[dirBNW *size_Mat];
+      D.f[dirTNW ] = &distributions[dirBSE *size_Mat];
+      D.f[dirBNE ] = &distributions[dirTSW *size_Mat];
+      D.f[dirBSW ] = &distributions[dirTNE *size_Mat];
+      D.f[dirBSE ] = &distributions[dirTNW *size_Mat];
+      D.f[dirBNW ] = &distributions[dirTSE *size_Mat];
+   }
+   ////////////////////////////////////////////////////////////////////////////////
+   const unsigned  x = threadIdx.x;  // Globaler x-Index 
+   const unsigned  y = blockIdx.x;   // Globaler y-Index 
+   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+
+   const unsigned nx = blockDim.x;
+   const unsigned ny = gridDim.x;
+
+   const unsigned k = nx*(ny*z + y) + x;
+   //////////////////////////////////////////////////////////////////////////
+   if(k<size_Mat)
+   {
+      //////////////////////////////////////////////////////////////////////////
+      //index
+      unsigned int kzero= k;
+      unsigned int ke   = k;
+      unsigned int kw   = neighborX[k];
+      unsigned int kn   = k;
+      unsigned int ks   = neighborY[k];
+      unsigned int kt   = k;
+      unsigned int kb   = neighborZ[k];
+      unsigned int ksw  = neighborY[kw];
+      unsigned int kne  = k;
+      unsigned int kse  = ks;
+      unsigned int knw  = kw;
+      unsigned int kbw  = neighborZ[kw];
+      unsigned int kte  = k;
+      unsigned int kbe  = kb;
+      unsigned int ktw  = kw;
+      unsigned int kbs  = neighborZ[ks];
+      unsigned int ktn  = k;
+      unsigned int kbn  = kb;
+      unsigned int kts  = ks;
+      unsigned int ktse = ks;
+      unsigned int kbnw = kbw;
+      unsigned int ktnw = kw;
+      unsigned int kbse = kbs;
+      unsigned int ktsw = ksw;
+      unsigned int kbne = kb;
+      unsigned int ktne = k;
+      unsigned int kbsw = neighborZ[ksw];
+      //////////////////////////////////////////////////////////////////////////
+      pressD[k] = c0o1;
+	  rhoD[k]   = c0o1;
+	  vxD[k]    = c0o1;
+	  vyD[k]    = c0o1;
+	  vzD[k]    = c0o1;
+
+      if(geoD[k] == GEO_FLUID)
+      {
+         rhoD[k]    =   (D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
+                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
+                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
+                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
+                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
+                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
+                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
+                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
+                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
+                        (D.f[dirZERO])[kzero]+ 
+                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
+                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
+                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
+                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
+
+         vxD[k]     =  ((D.f[dirE   ])[ke  ]- (D.f[dirW   ])[kw  ]+ 
+                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]+
+                        (D.f[dirSE  ])[kse ]- (D.f[dirNW  ])[knw ]+
+                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]+
+                        (D.f[dirBE  ])[kbe ]- (D.f[dirTW  ])[ktw ]+
+                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]+ 
+                        (D.f[dirTSE ])[ktse]- (D.f[dirTNW ])[ktnw]+ 
+                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]+ 
+                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw])/(c1o1+rhoD[k]);
+
+         vyD[k]     =  ((D.f[dirN   ])[kn  ]- (D.f[dirS   ])[ks  ]+
+                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]-
+                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
+                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]+
+                        (D.f[dirBN  ])[kbn ]- (D.f[dirTS  ])[kts ]+
+                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]- 
+                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
+                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
+                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw])/(c1o1+rhoD[k]);
+
+         vzD[k]     =  ((D.f[dirT   ])[kt  ]- (D.f[dirB   ])[kb  ]+
+                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]-
+                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
+                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]-
+                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
+                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
+                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]- 
+                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
+                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw])/(c1o1+rhoD[k]);
+
+         pressD[k]  =  ((D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
+                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
+                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
+                        2.f*(
+                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
+                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
+                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
+                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
+                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
+                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ])+
+                        3.f*(
+                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
+                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
+                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
+                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw])-
+                        rhoD[k]-(vxD[k] * vxD[k] + vyD[k] * vyD[k] + vzD[k] * vzD[k]) * (c1o1+rhoD[k])) * c1o2+rhoD[k]; // times zero for incompressible case   
+         //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
+
+      }
+   }
+
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-- 
GitLab