55 const std::vector<real>& rotorSpeeds,
58 const std::vector<real>& polarAngleOfAttackDeg,
59 const std::vector<real>& polarLiftCoefficient,
60 const std::vector<real>& polarDragCoefficient,
63 real bladeMountingPoint,
66 bool flagFlowCurvature =
false,
67 bool flagEndEffects =
false
72 rotorSpeeds(rotorSpeeds),
73 rotorHeight(rotorHeight),
74 bladeChord(bladeChord),
75 bladePitch(bladePitch),
76 bladeMountingPoint(bladeMountingPoint),
77 velocityInlet(velocityInlet),
78 flagFlowCurvature(flagFlowCurvature),
79 flagEndEffects(flagEndEffects),
80 polarAngleOfAttackDeg(polarAngleOfAttackDeg),
81 polarLiftCoefficient(polarLiftCoefficient),
82 polarDragCoefficient(polarDragCoefficient),
84 endEffectsDistribution(flagEndEffects ? computeEndEffectsDistribution(rotorHeight, bladeChord,
numberOfPointsPerBlade)
90 throw std::runtime_error(
"ActuatorFarmStandaloneVAWT::ActuatorFarmStandaloneVAWT: numberOfPointsPerBlade "
93 throw std::runtime_error(
"ActuatorFarmStandaloneVAWT::ActuatorFarmStandaloneVAWT: rotor speeds need to have "
94 "same length as turbine positions!");
95 if (this->rotorHeight <= vf::basics::constant::c0o1)
96 throw std::runtime_error(
"ActuatorFarmStandaloneVAWT::ActuatorFarmStandaloneVAWT: rotorHeight needs to be positive!");
97 if (this->bladeChord <= vf::basics::constant::c0o1)
98 throw std::runtime_error(
"ActuatorFarmStandaloneVAWT::ActuatorFarmStandaloneVAWT: bladeChord needs to be positive!");
99 if (this->polarAngleOfAttackDeg.size() !=
this->polarLiftCoefficient.size() ||
this->polarAngleOfAttackDeg.size() !=
this->polarDragCoefficient.size() ||
this->polarAngleOfAttackDeg.empty())
100 throw std::runtime_error(
"ActuatorFarmStandaloneVAWT::ActuatorFarmStandaloneVAWT: polarAngleOfAttackDeg/polarLiftCoefficient/polarDragCoefficient vectors need "
101 "same non-zero size!");
102 if (!std::is_sorted(this->polarAngleOfAttackDeg.begin(),
this->polarAngleOfAttackDeg.end()))
103 throw std::runtime_error(
"ActuatorFarmStandaloneVAWT::ActuatorFarmStandaloneVAWT: polarAngleOfAttackDeg values need to be sorted "
104 "in ascending order.");
108 VF_LOG_INFO(
"rotorHeight [m] = {}", this->rotorHeight);
109 VF_LOG_INFO(
"bladeChord [m] = {}", this->bladeChord);
110 VF_LOG_INFO(
"bladePitch [rad] = {}", this->bladePitch);
111 VF_LOG_INFO(
"mounting point = {}", this->bladeMountingPoint);
113 VF_LOG_INFO(
"flow curvature = {}", this->flagFlowCurvature ?
"on" :
"off");
114 VF_LOG_INFO(
"end effects = {}", this->flagEndEffects ?
"on" :
"off");
146 std::vector<real> forceTangential, forceNormal, angleOfAttackDeg, azimuthDeg;