47 const std::optional<HubConfig>& hubConfig = std::nullopt,
48 const std::optional<TowerConfig>&
towerConfig = std::nullopt,
49 const std::optional<FloatingConfig>&
floatingConfig = std::nullopt,
50 const std::optional<real> hubDragCoeff = std::nullopt,
51 const std::optional<real> hubSkinFrictionCoeff = std::nullopt,
52 const std::optional<real> towerDragCoeff = std::nullopt,
54 const std::optional<std::vector<real>>& bladeNormalCoefficients = std::nullopt)
55 : rotorSpeeds(rotorSpeeds),
56 hubDragCoeff(hubDragCoeff),
57 hubSkinFrictionCoeff(hubSkinFrictionCoeff),
58 towerDragCoeff(towerDragCoeff),
59 bladeNormalCoefficients(bladeNormalCoefficients),
65 throw std::runtime_error(
"ActuatorFarmStandalone::ActuatorFarmStandalone: rotor speeds need to have same length "
66 "as turbine positions!");
68 throw std::runtime_error(
"ActuatorFarmStandalone::ActuatorFarmStandalone: bladeNormalCoefficients need to have "
69 "same length as numberOfPointsPerBlade.");
72 throw std::runtime_error(
73 "Tower geometry is defined (tower points per turbine > 0), but towerDragCoeff is not provided!");
77 if (!hubDragCoeff.has_value())
78 throw std::runtime_error(
79 "Hub geometry is defined (hub points per turbine > 0), but hubDragCoeff is not provided!");
81 if (!hubSkinFrictionCoeff.has_value())
82 throw std::runtime_error(
"Hub geometry is defined (hub points per turbine > 0), but hubSkinFrictionCoeff is "
87 VF_LOG_WARNING(
"towerDragCoeff > 0 was provided, but no tower points per turbine exist → no tower forces will be applied.");
90 VF_LOG_WARNING(
"hubDragCoeff > 0 was provided, but no hub points per turbine exist → no hub forces will be applied.");
93 VF_LOG_WARNING(
"hubSkinFrictionCoeff > 0 was provided, but no hub points per turbine exist → no hub forces will be applied.");
96 VF_LOG_WARNING(
"towerDragCoeff is set to 0 → no tower drag forces will be applied despite existing tower geometry.");
100 if (hubDragCoeff.has_value() && hubDragCoeff.value() == 0.0)
101 VF_LOG_WARNING(
"hubDragCoeff is set to 0 → no hub drag forces will be applied despite existing hub geometry.");
103 if (hubSkinFrictionCoeff.has_value() && hubSkinFrictionCoeff.value() == 0.0)
104 VF_LOG_WARNING(
"hubSkinFrictionCoeff is set to 0 → no hub skin friction forces will be applied despite existing hub geometry.");
107 VF_LOG_INFO(
"rotor speed [rad/s] = {}", this->rotorSpeeds[0]);
110 VF_LOG_INFO(
"tower drag coefficient = {}", this->towerDragCoeff.value());
114 VF_LOG_INFO(
"hub drag coefficient = {}", this->hubDragCoeff.value());
115 VF_LOG_INFO(
"hub skin friction coefficient = {}", this->hubSkinFrictionCoeff.value());