diff --git a/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.C b/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.C index e6381c543b85a280753e53e67f3ae812e09a6c85..20161147df03ba270214f9ca43515fa7d9415a3f 100644 --- a/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.C +++ b/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.C @@ -446,15 +446,15 @@ Foam::rotorDiskSource::rotorDiskSource inletVelocity_(vector::zero), tipEffect_(1.0), flap_(), - trim_(trimModel::New(*this, coeffs_)), - blade_(coeffs_.subDict("blade")), - profiles_(coeffs_.subDict("profiles")), x_(cells_.size(), vector::zero), R_(cells_.size(), I), invR_(cells_.size(), I), area_(cells_.size(), 0.0), coordSys_(false), - rMax_(0.0) + rMax_(0.0), + trim_(trimModel::New(*this, coeffs_)), + blade_(coeffs_.subDict("blade")), + profiles_(coeffs_.subDict("profiles")) { read(dict); } @@ -521,9 +521,16 @@ void Foam::rotorDiskSource::calculate scalar invDr = 0.0; blade_.interpolate(radius, twist, chord, i1, i2, invDr); + // flip geometric angle if blade is spinning in reverse (clockwise) + scalar alphaGeom = alphag[i] + twist; + if (omega_ < 0) + { + alphaGeom = mathematical::pi - alphaGeom; + } + // effective angle of attack scalar alphaEff = - mathematical::pi + atan2(Uc.z(), Uc.y()) - (alphag[i] + twist); + mathematical::pi + atan2(Uc.z(), Uc.y()) - alphaGeom; if (alphaEff > mathematical::pi) { diff --git a/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.H b/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.H index 2df09f9f7bb3224df9f5afebcffad5fd08dec50e..8e26425e10799c90efeb69da689bce5ad51fabaf 100644 --- a/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.H +++ b/src/fieldSources/basicSource/rotorDiskSource/rotorDiskSource.H @@ -149,6 +149,7 @@ protected: word rhoName_; //- Rotational speed [rad/s] + // Positive anti-clockwise when looking along -ve lift direction scalar omega_; //- Number of blades @@ -167,15 +168,6 @@ protected: //- Blade flap coefficients [rad/s] flapData flap_; - //- Trim model - autoPtr<trimModel> trim_; - - //- Blade data - bladeModel blade_; - - //- Profile data - profileModelList profiles_; - //- Cell centre positions in local rotor frame // (Cylindrical r, theta, z) List<point> x_; @@ -195,6 +187,15 @@ protected: //- Maximum radius scalar rMax_; + //- Trim model + autoPtr<trimModel> trim_; + + //- Blade data + bladeModel blade_; + + //- Profile data + profileModelList profiles_; + // Protected Member Functions