5 #include <AMReX_Geometry.H>
6 #include <AMReX_MultiFab.H>
26 const WindFarmType& a_windfarm_type)
29 if (a_windfarm_type == WindFarmType::Fitch) {
31 amrex::Print() <<
"Fitch windfarm model!\n";
33 else if (a_windfarm_type == WindFarmType::EWP) {
35 amrex::Print() <<
"EWP windfarm model!\n";
37 else if (a_windfarm_type == WindFarmType::SimpleAD) {
39 amrex::Print() <<
"Simplified actuator disk windfarm model!\n";
41 else if (a_windfarm_type == WindFarmType::GeneralAD) {
42 SetModel<GeneralAD>();
43 amrex::Print() <<
"Generalized actuator disk windfarm model!\n";
46 amrex::Abort(
"WindFarm: Dont know this windfarm_type!") ;
60 std::string windfarm_spec_table,
61 bool x_y,
bool lat_lon,
90 bool x_y,
bool lat_lon,
112 const std::string windfarm_blade_table);
127 amrex::MultiFab& mf_Nturb,
128 std::unique_ptr<amrex::MultiFab>& z_phys_nd);
139 amrex::MultiFab& mf_SMark,
142 std::unique_ptr<amrex::MultiFab>& z_phys_cc);
152 amrex::MultiFab& mf_SMark,
153 const amrex::MultiFab& mf_Nturb,
154 std::unique_ptr<amrex::MultiFab>& z_phys_cc);
183 const double& dt_advance,
184 amrex::MultiFab& cons_in,
185 amrex::MultiFab& mf_vars_windfarm,
186 amrex::MultiFab& U_old,
187 amrex::MultiFab& V_old,
188 amrex::MultiFab& W_old,
189 const amrex::MultiFab& mf_Nturb,
190 const amrex::MultiFab& mf_SMark,
191 const double& time)
override
194 U_old, V_old, W_old, mf_Nturb, mf_SMark, time);
207 const amrex::Real& a_thrust_coeff_standing,
const amrex::Vector<amrex::Real>& a_wind_speed,
208 const amrex::Vector<amrex::Real>& a_thrust_coeff,
209 const amrex::Vector<amrex::Real>& a_power)
override
211 m_windfarm_model[0]->set_turb_spec(a_rotor_rad, a_hub_height, a_thrust_coeff_standing,
212 a_wind_speed, a_thrust_coeff, a_power);
221 const amrex::Vector<amrex::Real>& a_yloc)
override
242 const amrex::Vector<amrex::Real>& a_bld_twist,
243 const amrex::Vector<amrex::Real>& a_bld_chord)
override
245 m_windfarm_model[0]->set_blade_spec(a_bld_rad_loc, a_bld_twist, a_bld_chord);
255 const amrex::Vector<amrex::Vector<amrex::Real>>& a_bld_airfoil_Cl,
256 const amrex::Vector<amrex::Vector<amrex::Real>>& a_bld_airfoil_Cd)
override
258 m_windfarm_model[0]->set_blade_airfoil_spec(a_bld_airfoil_aoa, a_bld_airfoil_Cl, a_bld_airfoil_Cd);
270 const amrex::Vector<amrex::Real>& a_C_P,
271 const amrex::Vector<amrex::Real>& a_C_T,
272 const amrex::Vector<amrex::Real>& a_rotor_RPM,
273 const amrex::Vector<amrex::Real>& a_blade_pitch)
override
275 m_windfarm_model[0]->set_turb_spec_extra(a_velocity, a_C_P, a_C_T, a_rotor_RPM, a_blade_pitch);
290 template<
class NewWindFarmModel>
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullWindFarm.H:9
Manage a collection of wind turbine models.
Definition: ERF_WindFarm.H:17
amrex::Real my_turb_disk_angle
Definition: ERF_WindFarm.H:281
amrex::Vector< amrex::Real > yloc
Definition: ERF_WindFarm.H:280
virtual ~WindFarm()=default
amrex::Vector< amrex::Vector< amrex::Real > > bld_airfoil_Cl
Definition: ERF_WindFarm.H:285
amrex::Vector< amrex::Real > blade_pitch
Definition: ERF_WindFarm.H:287
WindFarm()
Definition: ERF_WindFarm.H:21
void set_turb_spec_extra(const amrex::Vector< amrex::Real > &a_velocity, const amrex::Vector< amrex::Real > &a_C_P, const amrex::Vector< amrex::Real > &a_C_T, const amrex::Vector< amrex::Real > &a_rotor_RPM, const amrex::Vector< amrex::Real > &a_blade_pitch) override
Set extra turbine specifications.
Definition: ERF_WindFarm.H:269
void read_windfarm_spec_table_extra(const std::string windfarm_spec_table_extra)
Read extra turbine specifications.
Definition: ERF_WindFarm.cpp:300
amrex::Vector< amrex::Vector< amrex::Real > > bld_airfoil_aoa
Definition: ERF_WindFarm.H:285
amrex::Vector< amrex::Real > velocity
Definition: ERF_WindFarm.H:287
void read_windfarm_blade_table(const std::string windfarm_blade_table)
Read the turbine blade table.
Definition: ERF_WindFarm.cpp:262
amrex::Vector< amrex::Real > wind_speed
Definition: ERF_WindFarm.H:283
void set_turb_loc(const amrex::Vector< amrex::Real > &a_xloc, const amrex::Vector< amrex::Real > &a_yloc) override
Set turbine locations.
Definition: ERF_WindFarm.H:220
void set_blade_spec(const amrex::Vector< amrex::Real > &a_bld_rad_loc, const amrex::Vector< amrex::Real > &a_bld_twist, const amrex::Vector< amrex::Real > &a_bld_chord) override
Set blade specifications.
Definition: ERF_WindFarm.H:241
void SetModel()
Create and set the specified windfarm model.
Definition: ERF_WindFarm.H:291
amrex::Vector< amrex::Real > C_P
Definition: ERF_WindFarm.H:287
amrex::Real hub_height
Definition: ERF_WindFarm.H:282
amrex::Vector< amrex::Real > zloc
Definition: ERF_WindFarm.H:280
amrex::Vector< amrex::Real > bld_twist
Definition: ERF_WindFarm.H:284
void fill_SMark_multifab_mesoscale_models(const amrex::Geometry &geom, amrex::MultiFab &mf_SMark, const amrex::MultiFab &mf_Nturb, std::unique_ptr< amrex::MultiFab > &z_phys_cc)
Fill the SMark MultiFab for mesoscale models.
Definition: ERF_WindFarm.cpp:557
void write_actuator_disks_vtk(const amrex::Geometry &geom, const amrex::Real &sampling_distance_by_D)
Write actuator disks to a VTK file.
Definition: ERF_WindFarm.cpp:843
amrex::Vector< amrex::Vector< amrex::Real > > bld_airfoil_Cd
Definition: ERF_WindFarm.H:285
amrex::Vector< amrex::Real > C_T
Definition: ERF_WindFarm.H:287
amrex::Vector< amrex::Real > thrust_coeff
Definition: ERF_WindFarm.H:283
void read_windfarm_spec_table(const std::string windfarm_spec_table)
Read the turbine specification table.
Definition: ERF_WindFarm.cpp:209
void read_windfarm_locations_table(const std::string windfarm_loc_table, bool x_y, bool lat_lon, const amrex::Real windfarm_x_shift=zero, const amrex::Real windfarm_y_shift=zero)
Read the turbine location table.
Definition: ERF_WindFarm.cpp:44
int n_bld_sections
Definition: ERF_WindFarm.H:286
WindFarm(int nlev, const WindFarmType &a_windfarm_type)
Definition: ERF_WindFarm.H:25
void advance(const amrex::Geometry &a_geom, const double &dt_advance, amrex::MultiFab &cons_in, amrex::MultiFab &mf_vars_windfarm, amrex::MultiFab &U_old, amrex::MultiFab &V_old, amrex::MultiFab &W_old, const amrex::MultiFab &mf_Nturb, const amrex::MultiFab &mf_SMark, const double &time) override
Advance the wind farm model in time.
Definition: ERF_WindFarm.H:182
void read_tables(std::string windfarm_loc_table, std::string windfarm_spec_table, bool x_y, bool lat_lon, const amrex::Real windfarm_x_shift=zero, const amrex::Real windfarm_y_shift=zero)
Read turbine location and specification tables.
Definition: ERF_WindFarm.cpp:19
amrex::Real nominal_power
Definition: ERF_WindFarm.H:282
void set_blade_airfoil_spec(const amrex::Vector< amrex::Vector< amrex::Real >> &a_bld_airfoil_aoa, const amrex::Vector< amrex::Vector< amrex::Real >> &a_bld_airfoil_Cl, const amrex::Vector< amrex::Vector< amrex::Real >> &a_bld_airfoil_Cd) override
Set blade airfoil specifications.
Definition: ERF_WindFarm.H:254
void init_windfarm_x_y(const std::string windfarm_loc_table)
Initialize wind farm using Cartesian coordinates.
Definition: ERF_WindFarm.cpp:178
amrex::Vector< amrex::Real > bld_chord
Definition: ERF_WindFarm.H:284
void init_windfarm_lat_lon(const std::string windfarm_loc_table, const amrex::Real windfarm_x_shift, const amrex::Real windfarm_y_shift)
Initialize wind farm using latitude and longitude coordinates.
Definition: ERF_WindFarm.cpp:71
void set_turb_spec(const amrex::Real &a_rotor_rad, const amrex::Real &a_hub_height, const amrex::Real &a_thrust_coeff_standing, const amrex::Vector< amrex::Real > &a_wind_speed, const amrex::Vector< amrex::Real > &a_thrust_coeff, const amrex::Vector< amrex::Real > &a_power) override
Set general turbine specifications.
Definition: ERF_WindFarm.H:206
amrex::Real thrust_coeff_standing
Definition: ERF_WindFarm.H:282
amrex::Vector< amrex::Real > xloc
Definition: ERF_WindFarm.H:280
void fill_Nturb_multifab(const amrex::Geometry &geom, amrex::MultiFab &mf_Nturb, std::unique_ptr< amrex::MultiFab > &z_phys_nd)
Fill the turbine count MultiFab.
Definition: ERF_WindFarm.cpp:432
void read_windfarm_airfoil_tables(const std::string windfarm_airfoil_tables, const std::string windfarm_blade_table)
Read the airfoil tables.
Definition: ERF_WindFarm.cpp:345
amrex::Real rotor_rad
Definition: ERF_WindFarm.H:282
void fill_SMark_multifab(const amrex::Geometry &geom, amrex::MultiFab &mf_SMark, const amrex::Real &sampling_distance_by_D, const amrex::Real &turb_disk_angle, std::unique_ptr< amrex::MultiFab > &z_phys_cc)
Fill the SMark MultiFab.
Definition: ERF_WindFarm.cpp:618
void write_turbine_locations_vtk()
Write turbine locations to a VTK file.
Definition: ERF_WindFarm.cpp:818
amrex::Vector< amrex::Real > rotor_RPM
Definition: ERF_WindFarm.H:287
amrex::Vector< amrex::Real > power
Definition: ERF_WindFarm.H:283
amrex::Vector< amrex::Real > bld_rad_loc
Definition: ERF_WindFarm.H:284
void set_turb_disk_angle(const amrex::Real &a_turb_disk_angle) override
Set the turbine disk angle.
Definition: ERF_WindFarm.H:230
amrex::Vector< std::unique_ptr< NullWindFarm > > m_windfarm_model
Definition: ERF_WindFarm.H:299