115 Gpu::DeviceVector<Real> d_wind_speed(
wind_speed.size());
116 Gpu::DeviceVector<Real> d_power(
wind_speed.size());
118 Gpu::copy(Gpu::hostToDevice,
power.begin(),
power.end(), d_power.begin());
120 Gpu::DeviceScalar<Real> d_total_power(0.0);
121 Real* d_total_power_ptr = d_total_power.dataPtr();
123 const Real* d_wind_speed_ptr = d_wind_speed.dataPtr();
124 const Real* d_power_ptr = d_power.dataPtr();
126 for ( MFIter mfi(cons_in,TilingIfNotGPU()); mfi.isValid(); ++mfi) {
128 auto SMark_array = mf_SMark.array(mfi);
129 auto Nturb_array = mf_Nturb.array(mfi);
130 auto u_vel = U_old.array(mfi);
131 auto v_vel = V_old.array(mfi);
132 Box tbx = mfi.nodaltilebox(0);
134 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
136 if(SMark_array(i,j,k,0) == 1.0) {
137 Real avg_vel = std::pow(u_vel(i,j,k)*u_vel(i,j,k) + v_vel(i,j,k)*v_vel(i,j,k),0.5);
138 Real turb_power =
interpolate_1d(d_wind_speed_ptr, d_power_ptr, avg_vel, n_spec_table);
139 turb_power = turb_power*Nturb_array(i,j,k,0);
140 Gpu::Atomic::Add(d_total_power_ptr,turb_power);
145 Real h_total_power = 0.0;
146 Gpu::copy(Gpu::deviceToHost, d_total_power.dataPtr(), d_total_power.dataPtr()+1, &h_total_power);
148 amrex::ParallelAllReduce::Sum(&h_total_power, 1, amrex::ParallelContext::CommunicatorAll());
150 if (ParallelDescriptor::IOProcessor()){
151 static std::ofstream file(
"power_output_Fitch.txt", std::ios::app);
153 if (!file.is_open()) {
154 std::cerr <<
"Error opening file!" << std::endl;
155 Abort(
"Could not open file to write power output in ERF_AdvanceSimpleAD.cpp");
157 file << time <<
" " << h_total_power <<
"\n";
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real interpolate_1d(const amrex::Real *alpha, const amrex::Real *beta, const amrex::Real alpha_interp, const int alpha_size)
Definition: ERF_Interpolation_1D.H:12
amrex::Real Real
Definition: ERF_ShocInterface.H:16
amrex::Vector< amrex::Real > yloc
Definition: ERF_Fitch.H:50
amrex::Vector< amrex::Real > xloc
Definition: ERF_Fitch.H:50
amrex::Vector< amrex::Real > thrust_coeff
Definition: ERF_Fitch.H:52
amrex::Vector< amrex::Real > power
Definition: ERF_Fitch.H:52
amrex::Real rotor_rad
Definition: ERF_Fitch.H:51
amrex::Real thrust_coeff_standing
Definition: ERF_Fitch.H:51
amrex::Real hub_height
Definition: ERF_Fitch.H:51
amrex::Vector< amrex::Real > wind_speed
Definition: ERF_Fitch.H:52
void get_turb_spec(amrex::Real &rotor_rad, amrex::Real &hub_height, amrex::Real &thrust_coeff_standing, amrex::Vector< amrex::Real > &wind_speed, amrex::Vector< amrex::Real > &thrust_coeff, amrex::Vector< amrex::Real > &power)
Definition: ERF_NullWindFarm.H:84
void get_turb_loc(amrex::Vector< amrex::Real > &xloc, amrex::Vector< amrex::Real > &yloc)
Definition: ERF_NullWindFarm.H:96