From 300513a4dd964260021bae290b5f2258c2ff96f2 Mon Sep 17 00:00:00 2001
From: HenrikAsmuth <henrik.asmuth@geo.uu.se>
Date: Wed, 7 Dec 2022 15:36:15 +0100
Subject: [PATCH] Add check for epsilon in ActuatorFarm

---
 .../VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu  | 4 +---
 .../VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h   | 3 +++
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
index 4a9e31993..3e553ad68 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu
@@ -483,8 +483,6 @@ void ActuatorFarm::initBoundingSpheres(Parameter* para, CudaMemoryManager* cudaM
 {
     std::vector<int> nodesInSpheres;
 
-    real dx = para->getScaledLengthRatio(this->level);
-
     for(uint turbine=0; turbine<this->numberOfTurbines; turbine++)
     {
         real sphereRadius = c1o2*this->diametersH[turbine]+c4o1*this->epsilon;
@@ -495,7 +493,7 @@ void ActuatorFarm::initBoundingSpheres(Parameter* para, CudaMemoryManager* cudaM
 
         real sphereRadiusSqrd = sphereRadius*sphereRadius;
             
-        uint minimumNumberOfNodesPerSphere = (uint)(c4o3*cPi*pow(sphereRadius, c3o1)/pow(dx, c3o1));
+        uint minimumNumberOfNodesPerSphere = (uint)(c4o3*cPi*pow(sphereRadius-this->deltaX, c3o1)/pow(this->deltaX, c3o1));
         uint nodesInThisSphere = 0;
 
         for (uint j = 1; j <= para->getParH(this->level)->numberOfNodes; j++)
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
index 5dcd2fc59..3d05ebea7 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h
@@ -38,6 +38,9 @@ public:
         this->deltaX = _deltaX*exp2(-this->level);
         this->invEpsilonSqrd = 1/(epsilon*epsilon);
         this->invDeltaX = c1o1/this->deltaX;
+     
+        if(this->epsilon<this->deltaX)
+            throw std::runtime_error("ActuatorFarm::ActuatorFarm: epsilon needs to be larger than dx!");
     }
 
     virtual  ~ActuatorFarm()
-- 
GitLab