Skip to content
Snippets Groups Projects
Commit f8598dd0 authored by Hkorb's avatar Hkorb
Browse files

bug fixes in ActuatorFarm

parent 2f179ab7
No related branches found
No related tags found
1 merge request!170Kernel templetization and efficiency improvements
......@@ -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;
......
......@@ -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
##################################################
......@@ -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];
}
}
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment