Function for computing the slow RHS for the evolution equations for the density, potential temperature and momentum.
58 BL_PROFILE_REGION(
"erf_make_sources()");
72 const bool l_use_KE = tc.
use_tke;
75 const Box& domain = geom.Domain();
77 const GpuArray<Real, AMREX_SPACEDIM> dxInv = geom.InvCellSizeArray();
78 const GpuArray<Real, AMREX_SPACEDIM> dx = geom.CellSizeArray();
90 bool has_moisture = (solverChoice.
moisture_type != MoistureType::None);
95 Table1D<Real> dptr_r_plane, dptr_t_plane, dptr_qv_plane, dptr_qc_plane;
96 TableData<Real, 1> r_plane_tab, t_plane_tab, qv_plane_tab, qc_plane_tab;
97 bool compute_averages =
false;
98 compute_averages = compute_averages ||
101 if (compute_averages)
109 IntVect ng_c(S_data[
IntVars::cons].nGrowVect()); ng_c[2] = 1;
114 int ncomp = (!has_moisture) ? 2 :
RhoQ2_comp+1;
118 cons_ave.compute_averages(
ZDir(), cons_ave.field());
120 int ncell = cons_ave.ncell_line();
122 Gpu::HostVector< Real> r_plane_h(ncell);
123 Gpu::DeviceVector< Real> r_plane_d(ncell);
125 Gpu::HostVector< Real> t_plane_h(ncell);
126 Gpu::DeviceVector< Real> t_plane_d(ncell);
128 cons_ave.line_average(
Rho_comp , r_plane_h);
131 Gpu::copyAsync(Gpu::hostToDevice, r_plane_h.begin(), r_plane_h.end(), r_plane_d.begin());
132 Gpu::copyAsync(Gpu::hostToDevice, t_plane_h.begin(), t_plane_h.end(), t_plane_d.begin());
134 Real* dptr_r = r_plane_d.data();
135 Real* dptr_t = t_plane_d.data();
137 Box tdomain = domain; tdomain.grow(2,ng_c[2]);
138 r_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
139 t_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
143 dptr_r_plane = r_plane_tab.table();
144 dptr_t_plane = t_plane_tab.table();
145 ParallelFor(ncell, [=] AMREX_GPU_DEVICE (
int k) noexcept
147 dptr_r_plane(k-
offset) = dptr_r[k];
148 dptr_t_plane(k-
offset) = dptr_t[k];
153 Gpu::HostVector< Real> qv_plane_h(ncell), qc_plane_h(ncell);
154 Gpu::DeviceVector<Real> qv_plane_d(ncell), qc_plane_d(ncell);
157 cons_ave.line_average(
RhoQ1_comp, qv_plane_h);
158 Gpu::copyAsync(Gpu::hostToDevice, qv_plane_h.begin(), qv_plane_h.end(), qv_plane_d.begin());
161 cons_ave.line_average(
RhoQ2_comp, qc_plane_h);
162 Gpu::copyAsync(Gpu::hostToDevice, qc_plane_h.begin(), qc_plane_h.end(), qc_plane_d.begin());
164 Real* dptr_qv = qv_plane_d.data();
165 Real* dptr_qc = qc_plane_d.data();
167 qv_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
168 qc_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
170 dptr_qv_plane = qv_plane_tab.table();
171 dptr_qc_plane = qc_plane_tab.table();
172 ParallelFor(ncell, [=] AMREX_GPU_DEVICE (
int k) noexcept
174 dptr_qv_plane(k-
offset) = dptr_qv[k];
175 dptr_qc_plane(k-
offset) = dptr_qc[k];
184 int klo = domain.smallEnd(0);
185 int khi = domain.bigEnd(2);
186 int nk = khi - klo + 2;
187 Gpu::DeviceVector<Real> radiation_flux(nk,0.0);
188 Gpu::DeviceVector<Real> q_integral(nk,0.0);
189 Real* rad_flux = radiation_flux.data();
190 Real* q_int = q_integral.data();
212 #pragma omp parallel if (Gpu::notInLaunchRegion())
217 Box bx = mfi.tilebox();
219 const Array4<const Real>& cell_data = S_data[
IntVars::cons].array(mfi);
220 const Array4<const Real>& cell_prim = S_prim.array(mfi);
221 const Array4<Real> & cell_src = source.array(mfi);
223 const Array4<const Real>& r0 = r_hse.const_array(mfi);
225 const Array4<const Real>& z_cc_arr = z_phys_cc->const_array(mfi);
227 const Array4<const Real>& t_blank_arr = (terrain_blank) ? terrain_blank->const_array(mfi) :
228 Array4<const Real>{};
234 if (solverChoice.
rad_type != RadiationType::None && is_slow_step) {
235 auto const& qheating_arr = qheating_rates->const_array(mfi);
236 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
239 cell_src(i,j,k,
RhoTheta_comp) += cell_data(i,j,k,
Rho_comp) * ( qheating_arr(i,j,k,0) + qheating_arr(i,j,k,1) );
250 if ((is_slow_step && !use_Rayleigh_fast) || (!is_slow_step && use_Rayleigh_fast)) {
255 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
258 Real sinesq = d_sinesq_at_lev[k];
259 cell_src(i, j, k, n) -= dampcoef*sinesq * (
theta -
thetabar[k]) * cell_data(i,j,k,
nr);
271 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
273 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * dptr_rhotheta_src[k];
276 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
278 cell_src(i, j, k, n) += dptr_rhotheta_src[k];
290 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
292 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * dptr_rhoqt_src[k];
295 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
297 cell_src(i, j, k, n) += dptr_rhoqt_src[k];
309 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
311 Real dzInv = (z_cc_arr) ? 1.0/ (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) : 0.5*dxInv[2];
312 Real T_hi = dptr_t_plane(k+1) / dptr_r_plane(k+1);
313 Real T_lo = dptr_t_plane(k-1) / dptr_r_plane(k-1);
314 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
315 cell_src(i, j, k, n) -= cell_data(i,j,k,
nr) * wbar_cc * (T_hi - T_lo) * dzInv;
318 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
320 Real dzInv = (z_cc_arr) ? 1.0/ (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) : 0.5*dxInv[2];
321 Real T_hi = dptr_t_plane(k+1) / dptr_r_plane(k+1);
322 Real T_lo = dptr_t_plane(k-1) / dptr_r_plane(k-1);
323 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
324 cell_src(i, j, k, n) -= wbar_cc * (T_hi - T_lo) * dzInv;
336 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
338 Real dzInv = (z_cc_arr) ? 1.0/ (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) : 0.5*dxInv[2];
339 Real Qv_hi = dptr_qv_plane(k+1) / dptr_r_plane(k+1);
340 Real Qv_lo = dptr_qv_plane(k-1) / dptr_r_plane(k-1);
341 Real Qc_hi = dptr_qc_plane(k+1) / dptr_r_plane(k+1);
342 Real Qc_lo = dptr_qc_plane(k-1) / dptr_r_plane(k-1);
343 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
344 cell_src(i, j, k, nv ) -= cell_data(i,j,k,
nr) * wbar_cc * (Qv_hi - Qv_lo) * dzInv;
345 cell_src(i, j, k, nv+1) -= cell_data(i,j,k,
nr) * wbar_cc * (Qc_hi - Qc_lo) * dzInv;
348 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
350 Real dzInv = (z_cc_arr) ? 1.0/ (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) : 0.5*dxInv[2];
351 Real Qv_hi = dptr_qv_plane(k+1) / dptr_r_plane(k+1);
352 Real Qv_lo = dptr_qv_plane(k-1) / dptr_r_plane(k-1);
353 Real Qc_hi = dptr_qc_plane(k+1) / dptr_r_plane(k+1);
354 Real Qc_lo = dptr_qc_plane(k-1) / dptr_r_plane(k-1);
355 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
356 cell_src(i, j, k, nv ) -= wbar_cc * (Qv_hi - Qv_lo) * dzInv;
357 cell_src(i, j, k, nv+1) -= wbar_cc * (Qc_hi - Qc_lo) * dzInv;
365 if (l_use_ndiff && is_slow_step) {
369 const Array4<const Real>& mf_mx = mapfac[
MapFacType::m_x]->const_array(mfi);
370 const Array4<const Real>& mf_my = mapfac[
MapFacType::m_y]->const_array(mfi);
374 cell_data, cell_data, cell_src, mf_mx, mf_my);
378 cell_prim, cell_data, cell_src, mf_mx, mf_my);
381 if (l_use_KE && l_diff_KE) {
383 cell_prim, cell_data, cell_src, mf_mx, mf_my);
387 cell_prim, cell_data, cell_src, mf_mx, mf_my);
400 if (solverChoice.
pert_type == PerturbationType::Source && is_slow_step) {
402 const amrex::Array4<const amrex::Real>& pert_cell = turbPert.
pb_cell[level].const_array(mfi);
420 for (
int nt = 1; nt < n_sounding_times; nt++) {
423 if (itime_n == n_sounding_times-1) {
426 itime_np1 = itime_n+1;
429 coeff_n =
Real(1.0) - coeff_np1;
438 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
440 Real nudge = (coeff_n*theta_inp_sound_n[k] + coeff_np1*theta_inp_sound_np1[k]) - (dptr_t_plane(k)/dptr_r_plane(k));
442 cell_src(i, j, k, n) += cell_data(i, j, k,
nr) * nudge;
449 if (solverChoice.
terrain_type == TerrainType::ImmersedForcing &&
450 ((is_slow_step && !use_ImmersedForcing_fast) || (!is_slow_step && use_ImmersedForcing_fast)))
452 const Array4<const Real>& u =
xvel.array(mfi);
453 const Array4<const Real>& v =
yvel.array(mfi);
456 const Real* dx_arr = geom.CellSize();
457 const Real dx_x = dx_arr[0];
458 const Real dx_y = dx_arr[1];
459 const Real dx_z = dx_arr[2];
462 const Real drag_coefficient = alpha_h / std::pow(dx_x*dx_y*dx_z, 1./3.);
464 const Real U_s = 1.0;
476 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
478 const Real t_blank = t_blank_arr(i, j, k);
479 const Real t_blank_above = t_blank_arr(i, j, k+1);
480 const Real ux_cc_2r = 0.5 * (u(i ,j ,k+1) + u(i+1,j ,k+1));
481 const Real uy_cc_2r = 0.5 * (v(i ,j ,k+1) + v(i ,j+1,k+1));
482 const Real h_windspeed2r = std::sqrt(ux_cc_2r * ux_cc_2r + uy_cc_2r * uy_cc_2r);
488 if (init_surf_temp > 0.0) {
489 if (t_blank > 0 && (t_blank_above == 0.0)) {
490 const Real surf_temp = init_surf_temp + surf_heating_rate*time/3600;
492 cell_src(i, j, k-1,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
498 if (t_blank > 0 && (t_blank_above == 0.0)) {
501 Real psi_h_neighbor = 0.0;
502 Real ustar = h_windspeed2r * kappa / (std::log((1.5) * dx_z / z0) - psi_m);
503 const Real Olen = -ustar * ustar * ustar *
theta / (kappa * ggg * tflux + tiny);
504 const Real zeta = (0.5) * dx_z / Olen;
505 const Real zeta_neighbor = (1.5) * dx_z / Olen;
510 psi_h_neighbor = sfuns.
calc_psi_h(zeta_neighbor);
511 ustar = h_windspeed2r * kappa / (std::log((1.5) * dx_z / z0) - psi_m);
514 if (!(ustar > 0.0 && !std::isnan(ustar))) { ustar = 0.0; }
515 if (!(ustar < 2.0 && !std::isnan(ustar))) { ustar = 2.0; }
516 if (psi_h_neighbor > std::log(1.5 * dx_z / z0)) { psi_h_neighbor = std::log(1.5 * dx_z / z0); }
517 if (psi_h > std::log(0.5 * dx_z / z0)) { psi_h = std::log(0.5 * dx_z / z0); }
520 const Real thetastar =
theta * ustar * ustar / (kappa * ggg * Olen);
521 const Real surf_temp = theta_neighbor - thetastar / kappa * (std::log((1.5) * dx_z / z0) - psi_h_neighbor);
522 const Real tTarget = surf_temp + thetastar / kappa * (std::log((0.5) * dx_z / z0) - psi_h);
525 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt;
530 if (Olen_in != 1e-8){
531 if (t_blank > 0 && (t_blank_above == 0.0)) {
532 const Real Olen = Olen_in;
533 const Real zeta = (0.5) * dx_z / Olen;
534 const Real zeta_neighbor = (1.5) * dx_z / Olen;
540 const Real ustar = h_windspeed2r * kappa / (std::log((1.5) * dx_z / z0) - psi_m);
543 const Real thetastar =
theta * ustar * ustar / (kappa * ggg * Olen);
544 const Real surf_temp = theta_neighbor - thetastar / kappa * (std::log((1.5) * dx_z / z0) - psi_h_neighbor);
545 const Real tTarget = surf_temp + thetastar / kappa * (std::log((0.5) * dx_z / z0) - psi_h);
548 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt;
558 if ((solverChoice.
buildings_type == BuildingsType::ImmersedForcing ) &&
559 ((is_slow_step && !use_ImmersedForcing_fast) || (!is_slow_step && use_ImmersedForcing_fast)))
562 const Real* dx_arr = geom.CellSize();
563 const Real dx_x = dx_arr[0];
564 const Real dx_y = dx_arr[1];
567 const Real U_s = 1.0;
568 const Real min_t_blank = 0.005;
573 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
575 Real t_blank = t_blank_arr(i, j, k);
576 Real t_blank_below = t_blank_arr(i, j, k-1);
577 Real t_blank_above = t_blank_arr(i, j, k+1);
578 Real t_blank_north = t_blank_arr(i , j+1, k);
579 Real t_blank_south = t_blank_arr(i , j-1, k);
580 Real t_blank_east = t_blank_arr(i+1, j , k);
581 Real t_blank_west = t_blank_arr(i-1, j , k);
582 if (t_blank < min_t_blank) { t_blank = 0.0; }
583 if (t_blank_below < min_t_blank) { t_blank_below = 0.0; }
584 if (t_blank_north < min_t_blank) { t_blank_north = 0.0; }
585 if (t_blank_south < min_t_blank) { t_blank_south = 0.0; }
586 if (t_blank_east < min_t_blank) { t_blank_east = 0.0; }
587 if (t_blank_west < min_t_blank) { t_blank_west = 0.0; }
589 Real dx_z = (z_cc_arr) ? (z_cc_arr(i,j,k) - z_cc_arr(i,j,k-1)) : dx[2];
590 Real drag_coefficient = alpha_h / std::pow(dx_x*dx_y*dx_z, 1./3.);
593 if (init_surf_temp > 0.0) {
594 const Real surf_temp = init_surf_temp + surf_heating_rate*time/3600;
595 if (t_blank > 0 && (t_blank_above == 0.0) && (t_blank_below == 1.0)) {
597 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
599 }
else if (((t_blank > 0 && t_blank < t_blank_west && t_blank_east == 0.0) ||
600 (t_blank > 0 && t_blank < t_blank_east && t_blank_west == 0.0) ||
601 (t_blank > 0 && t_blank < t_blank_north && t_blank_south == 0.0) ||
602 (t_blank > 0 && t_blank < t_blank_south && t_blank_north == 0.0))) {
607 if ((t_blank < t_blank_north) && (t_blank_north == 1.0)) {
609 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
613 if ((t_blank < t_blank_south) && (t_blank_south == 1.0)) {
615 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
619 if ((t_blank < t_blank_east) && (t_blank_east == 1.0)) {
621 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
625 if ((t_blank < t_blank_west) && (t_blank_west == 1.0)) {
627 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
640 AMREX_ALWAYS_ASSERT((bx.smallEnd(2) == klo) && (bx.bigEnd(2) == khi));
647 Box xybx = makeSlab(bx,2,klo);
648 ParallelFor(xybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int ) noexcept
652 Real zi = 0.5 * (z_cc_arr(i,j,khi) + z_cc_arr(i,j,khi-1));
654 for (
int k(klo+1); k<=khi+1; ++k) {
657 Real dz = (z_cc_arr) ? 0.5 * (z_cc_arr(i,j,k) - z_cc_arr(i,j,k-2)) : dx[2];
658 q_int[lk] = q_int[lk-1] + krad * cell_data(i,j,k-1,
Rho_comp) * cell_data(i,j,k-1,
RhoQ2_comp) * dz;
661 if ( (qt_lo > qt_i) && (qt_hi < qt_i) ) {
662 zi = 0.5 * (z_cc_arr(i,j,k) + z_cc_arr(i,j,k-1));
668 Real q_int_inf = q_int[khi+1];
669 for (
int k(klo); k<=khi+1; ++k) {
671 Real z = 0.5 * (z_cc_arr(i,j,k) + z_cc_arr(i,j,k-1));
672 rad_flux[lk] = F1*std::exp(-q_int[lk]) + F0*std::exp(-(q_int_inf - q_int[lk]));
674 rad_flux[lk] +=
rhoi *
Cp_d * D * ( std::pow(z-zi,4./3.)/4. + zi*std::pow(z-zi,1./3.) ) ;
679 for (
int k(klo); k<=khi; ++k) {
682 Real dzInv = (z_cc_arr) ? 1.0/ (0.5 * (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1))) : dxInv[2];
685 Real dTdt = (rad_flux[lk+1] - rad_flux[lk]) * dzInv / (-cell_data(i,j,k,
Rho_comp)*
Cp_d);
void ApplySpongeZoneBCsForCC(const SpongeChoice &spongeChoice, const Geometry geom, const Box &bx, const Array4< Real > &cell_rhs, const Array4< const Real > &cell_data, const Array4< const Real > &r0, const Array4< const Real > &z_phys_cc)
Definition: ERF_ApplySpongeZoneBCs.cpp:7
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:20
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:12
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
constexpr amrex::Real R_d
Definition: ERF_Constants.H:10
@ thetabar
Definition: ERF_DataStruct.H:96
@ m_y
Definition: ERF_DataStruct.H:24
@ m_x
Definition: ERF_DataStruct.H:23
DirectionSelector< 2 > ZDir
Definition: ERF_DirectionSelector.H:38
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getExnergivenRTh(const amrex::Real rhotheta, const amrex::Real rdOcp, const amrex::Real qv=0.0)
Definition: ERF_EOS.H:156
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:40
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:43
#define NSCALARS
Definition: ERF_IndexDefines.H:16
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
#define RhoKE_comp
Definition: ERF_IndexDefines.H:38
void NumericalDiffusion_Scal(const Box &bx, const int start_comp, const int num_comp, const Real dt, const Real num_diff_coeff, const Array4< const Real > &prim_data, const Array4< const Real > &cell_data, const Array4< Real > &rhs, const Array4< const Real > &mfx_arr, const Array4< const Real > &mfy_arr)
Definition: ERF_NumericalDiffusion.cpp:18
AMREX_FORCE_INLINE IntVect offset(const int face_dir, const int normal)
Definition: ERF_ReadBndryPlanes.cpp:28
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11
Definition: ERF_PlaneAverage.H:14
@ r0_comp
Definition: ERF_IndexDefines.H:63
@ cons
Definition: ERF_IndexDefines.H:158
@ theta
Definition: ERF_MM5.H:20
@ qv
Definition: ERF_Kessler.H:28
@ nc
Definition: ERF_Morrison.H:44
@ nr
Definition: ERF_Morrison.H:45
@ xvel
Definition: ERF_IndexDefines.H:141
@ cons
Definition: ERF_IndexDefines.H:140
@ yvel
Definition: ERF_IndexDefines.H:142
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12
real(c_double), private rhoi
Definition: ERF_module_mp_morr_two_moment.F90:188
bool rayleigh_damp_T
Definition: ERF_DampingStruct.H:87
amrex::Real rayleigh_dampcoef
Definition: ERF_DampingStruct.H:88
RayleighDampingType rayleigh_damping_type
Definition: ERF_DampingStruct.H:101
amrex::Real if_init_surf_temp
Definition: ERF_DataStruct.H:1047
amrex::Real if_surf_temp_flux
Definition: ERF_DataStruct.H:1046
DampingChoice dampingChoice
Definition: ERF_DataStruct.H:993
RadiationType rad_type
Definition: ERF_DataStruct.H:1105
amrex::Real if_z0
Definition: ERF_DataStruct.H:1045
bool custom_rhotheta_forcing
Definition: ERF_DataStruct.H:1071
bool custom_w_subsidence
Definition: ERF_DataStruct.H:1073
bool nudging_from_input_sounding
Definition: ERF_DataStruct.H:1079
amrex::Real if_Cd_scalar
Definition: ERF_DataStruct.H:1042
bool immersed_forcing_substep
Definition: ERF_DataStruct.H:1038
amrex::Real if_Olen_in
Definition: ERF_DataStruct.H:1049
bool use_num_diff
Definition: ERF_DataStruct.H:1094
bool four_stream_radiation
Definition: ERF_DataStruct.H:1035
bool custom_moisture_forcing
Definition: ERF_DataStruct.H:1072
amrex::Real num_diff_coeff
Definition: ERF_DataStruct.H:1095
amrex::Real if_surf_heating_rate
Definition: ERF_DataStruct.H:1048
amrex::Vector< TurbChoice > turbChoice
Definition: ERF_DataStruct.H:995
MoistureType moisture_type
Definition: ERF_DataStruct.H:1101
bool custom_forcing_prim_vars
Definition: ERF_DataStruct.H:1075
static BuildingsType buildings_type
Definition: ERF_DataStruct.H:974
static TerrainType terrain_type
Definition: ERF_DataStruct.H:971
PerturbationType pert_type
Definition: ERF_DataStruct.H:1091
SpongeChoice spongeChoice
Definition: ERF_DataStruct.H:994
int ave_plane
Definition: ERF_DataStruct.H:1116
std::string sponge_type
Definition: ERF_SpongeStruct.H:58
Definition: ERF_TurbStruct.H:41
bool use_tke
Definition: ERF_TurbStruct.H:402
bool diffuse_tke_3D
Definition: ERF_TurbStruct.H:437
amrex::Vector< amrex::MultiFab > pb_cell
Definition: ERF_TurbPertStruct.H:640
void apply_tpi(const int &lev, const amrex::Box &vbx, const int &comp, const amrex::IndexType &m_ixtype, const amrex::Array4< amrex::Real > &src_arr, const amrex::Array4< amrex::Real const > &pert_cell)
Definition: ERF_TurbPertStruct.H:324
Definition: ERF_MOSTStress.H:41
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:91
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:105