diff --git a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp index 117287abf2378e1416aa7fe1c8275c265233e294..df18067a764151a1b9af50a4f2e46b3a0d46484e 100644 --- a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp +++ b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp @@ -96,7 +96,7 @@ void multipleLevel(const std::string& configPath) const real velocity = config.getValue<real>("Velocity"); - const real L_x = 16*reference_diameter; + const real L_x = 24*reference_diameter; const real L_y = 6*reference_diameter; const real L_z = 6*reference_diameter; @@ -128,11 +128,11 @@ void multipleLevel(const std::string& configPath) gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, L_x, L_y, L_z, dx); - // gridBuilder->setNumberOfLayers(4,0); - // gridBuilder->addGrid( new Cuboid( turbPos[0]-1.5*reference_diameter, turbPos[1]-1.5*reference_diameter, turbPos[2]-1.5*reference_diameter, - // turbPos[0]+10.0*reference_diameter, turbPos[1]+1.5*reference_diameter, turbPos[2]+1.5*reference_diameter) , 1 ); - // para->setMaxLevel(2); - // scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible); + gridBuilder->setNumberOfLayers(4,0); + gridBuilder->addGrid( new Cuboid( turbPos[0]-1.5*reference_diameter, turbPos[1]-1.5*reference_diameter, turbPos[2]-1.5*reference_diameter, + turbPos[0]+10.0*reference_diameter, turbPos[1]+1.5*reference_diameter, turbPos[2]+1.5*reference_diameter) , 1 ); + para->setMaxLevel(2); + scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible); gridBuilder->setPeriodicBoundaryCondition(false, false, false); @@ -157,9 +157,6 @@ void multipleLevel(const std::string& configPath) para->setPrintFiles(true); - para->setMaxLevel(1); - - para->setVelocityLB(velocityLB); para->setViscosityLB(viscosityLB); para->setVelocityRatio( dx / dt ); @@ -173,10 +170,12 @@ void multipleLevel(const std::string& configPath) vz = (real)0.0; }); + para->setTimestepStartOut( uint(tStartOut/dt) ); para->setTimestepOut( uint(tOut/dt) ); para->setTimestepEnd( uint(tEnd/dt) ); para->setIsBodyForce( true ); + para->setUseStreams( true ); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -196,12 +195,14 @@ void multipleLevel(const std::string& configPath) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real epsilon = 5.f; // width of gaussian smearing - real density = 1.225f; - int level = 0; - uint nBlades = 3; - uint nBladeNodes = 32; - real omega = 1.0f; + int level = 1; // grid level at which the turbine samples velocities and distributes forces + const real epsilon = dx*exp2(-level)*1.5; // width of gaussian smearing + const real density = 1.225f; + const uint nBlades = 3; + const uint nBladeNodes = 32; + const real tipspeed_ratio = 7.5f; // tipspeed ratio = angular vel * radius / inflow vel + const real omega = 2*tipspeed_ratio*velocity/reference_diameter; + SPtr<ActuatorFarm> actuator_farm = std::make_shared<ActuatorFarm>(nBlades, density, nBladeNodes, epsilon, level, dt, dx, true); std::vector<real> bladeRadii; diff --git a/apps/gpu/LBM/ActuatorLine/configActuatorLine.txt b/apps/gpu/LBM/ActuatorLine/configActuatorLine.txt index d4be0a6dba11d311d075c5496204cbb0f5d27c21..5799f24716777295b2f835ab00561ff767ba87b9 100644 --- a/apps/gpu/LBM/ActuatorLine/configActuatorLine.txt +++ b/apps/gpu/LBM/ActuatorLine/configActuatorLine.txt @@ -11,7 +11,7 @@ ReferenceDiameter=126 NodesPerDiameter=32 Velocity=9 ################################################## -tStartOut=500 +tStartOut=100 tOut=100 tEnd=1000 ################################################## @@ -21,4 +21,14 @@ tStartAveraging=100 tAveraging=100 tTmpAveraging=100 tStartOutProbe=100 -tOutProbe=100 \ No newline at end of file +tOutProbe=100 + +################################################## +#TurbulenceModel = QR +#SGSconstant = 0.3333333 +# +#QuadricLimiterP = 100000.0 +#QuadricLimiterM = 100000.0 +#QuadricLimiterD = 100000.0 +################################################## + diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu index 75c6ee9cfd61e694eb8f229b04e8e2e2e1b4d4b7..ef74653d6955c0613f0c0388039c7ecce742dcf5 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu @@ -341,7 +341,7 @@ void ActuatorFarm::calcForcesEllipticWing() real phi; real Cl = c1o1; real Cd = c0o1; - real c0 = c1o1; + real c0 = 20*c1o10; real c, Cn, Ct; for(uint turbine=0; turbine<this->numberOfTurbines; turbine++) { @@ -361,11 +361,15 @@ void ActuatorFarm::calcForcesEllipticWing() c = c0 * sqrt( c1o1- tmp*tmp ); Cn = Cl*cos(phi)+Cd*sin(phi); Ct = Cl*sin(phi)-Cd*cos(phi); - this->bladeForcesXH[node] = -c1o2*u_rel_sq*c*this->density*Cn; - this->bladeForcesYH[node] = -c1o2*u_rel_sq*c*this->density*Ct; + real fx = c1o2*u_rel_sq*c*this->density*Cn; + real fy = c1o2*u_rel_sq*c*this->density*Ct; + this->bladeForcesXH[node] = -fx; + this->bladeForcesYH[node] = -fy; this->bladeForcesZH[node] = c0o1; + // printf("u %f v %f fx %f fy %f \n", u_rel, v_rel, fx, fy); } } + azimuthsH[turbine] = azimuthsH[turbine]+deltaT*omegasH[turbine]; } } diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h index 12b552d239af5ff9399bec8afd8171477afd3099..d5b089177e1c994036cbe95c7ec6b5e08b6abb15 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h @@ -32,8 +32,8 @@ public: numberOfNodes(0), PreCollisionInteractor() { - this->deltaT = _deltaX/pow(2,this->level); - this->deltaX = _deltaX/pow(2,this->level); + this->deltaT = _deltaT*exp2(-this->level); + this->deltaX = _deltaX*exp2(-this->level); this->invEpsilonSqrd = 1/(epsilon*epsilon); this->invDeltaX = c1o1/this->deltaX; }