From 7eb268b200d0234b1a5b836d0693074eabd11a4b Mon Sep 17 00:00:00 2001
From: Henry <henry.korb@geo.uu.se>
Date: Fri, 30 Sep 2022 10:44:58 +0200
Subject: [PATCH] allow to set blade radii before call to init of AL

---
 pythonbindings/src/gpu/submodules/actuator_line.cpp       | 1 +
 .../PreCollisionInteractor/ActuatorLine.cu                | 8 ++++++++
 .../PreCollisionInteractor/ActuatorLine.h                 | 2 ++
 3 files changed, 11 insertions(+)

diff --git a/pythonbindings/src/gpu/submodules/actuator_line.cpp b/pythonbindings/src/gpu/submodules/actuator_line.cpp
index fe305f658..0b65c655a 100644
--- a/pythonbindings/src/gpu/submodules/actuator_line.cpp
+++ b/pythonbindings/src/gpu/submodules/actuator_line.cpp
@@ -73,6 +73,7 @@ namespace actuator_line
         .def("get_blade_forces_x_device", [](ActuatorLine& al){ return arr({al.getNBlades(), al.getNBladeNodes()}, al.getBladeForcesXD()); } )
         .def("get_blade_forces_y_device", [](ActuatorLine& al){ return arr({al.getNBlades(), al.getNBladeNodes()}, al.getBladeForcesYD()); } )
         .def("get_blade_forces_z_device", [](ActuatorLine& al){ return arr({al.getNBlades(), al.getNBladeNodes()}, al.getBladeForcesZD()); } )
+        .def("set_preinit_blade_radii", [](ActuatorLine& al, arr radii){ al.setPreInitBladeRadii(static_cast<float *>(radii.request().ptr)); } )
         .def("set_blade_coords", [](ActuatorLine& al, arr coordsX, arr coordsY, arr coordsZ){ 
             al.setBladeCoords(static_cast<float *>(coordsX.request().ptr), static_cast<float *>(coordsY.request().ptr), static_cast<float *>(coordsZ.request().ptr)); } )
         .def("set_blade_velocities", [](ActuatorLine& al, arr velocitiesX, arr velocitiesY, arr velocitiesZ){ 
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu
index fefe21d37..f2257edb0 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu
@@ -369,6 +369,14 @@ void ActuatorLine::initBladeIndices(Parameter* para, CudaMemoryManager* cudaMemo
     }
     cudaMemoryManager->cudaCopyBladeIndicesHtoD(this);
 }
+void ActuatorLine::setPreInitBladeRadii(real* _bladeRadii)
+{
+    this->bladeRadiiPreInit = (real*) malloc(this->nBladeNodes*sizeof(real));
+    for(uint node=0; node<this->nBladeNodes; node++)
+    {
+        this->bladeRadiiPreInit[node] = _bladeRadii[node];
+    }
+}
 
 void ActuatorLine::initBoundingSphere(Parameter* para, CudaMemoryManager* cudaMemoryManager)
 {
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h
index 31f756484..73bbc5e4e 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h
@@ -88,6 +88,7 @@ public:
     void setOmega(real _omega){ this->omega = _omega; };
     void setAzimuth(real _azimuth){ this->azimuth = _azimuth; };
     void setYaw(real _yaw){ this->yaw = _yaw; };
+    void setPreInitBladeRadii(real* _bladeRadii);
     void setBladeCoords(real* _bladeCoordsX, real* _bladeCoordsY, real* _bladeCoordsZ);
     void setBladeVelocities(real* _bladeVelocitiesX, real* _bladeVelocitiesY, real* _bladeVelocitiesZ);
     void setBladeForces(real* _bladeForcesX, real* _bladeForcesY, real* _bladeForcesZ);
@@ -108,6 +109,7 @@ private:
     void calcForcesEllipticWing();
 
 public:
+    real* bladeRadiiPreInit;
     real* bladeRadiiH;
     real* bladeRadiiD;
     real* bladeCoordsXH, * bladeCoordsYH, * bladeCoordsZH;
-- 
GitLab