Function for computing the slow RHS for the evolution equations for the density, potential temperature and momentum.
59 BL_PROFILE_REGION(
"erf_make_sources()");
73 const bool l_use_KE = tc.
use_tke;
76 const Box& domain = geom.Domain();
78 const GpuArray<Real, AMREX_SPACEDIM> dxInv = geom.InvCellSizeArray();
79 const GpuArray<Real, AMREX_SPACEDIM> dx = geom.CellSizeArray();
91 bool has_moisture = (solverChoice.
moisture_type != MoistureType::None);
96 Table1D<Real> dptr_r_plane, dptr_t_plane, dptr_qv_plane, dptr_qc_plane;
97 TableData<Real, 1> r_plane_tab, t_plane_tab, qv_plane_tab, qc_plane_tab;
98 bool compute_averages =
false;
99 compute_averages = compute_averages ||
102 if (compute_averages)
110 IntVect ng_c(S_data[
IntVars::cons].nGrowVect()); ng_c[2] = 1;
115 int ncomp = (!has_moisture) ? 2 :
RhoQ2_comp+1;
119 cons_ave.compute_averages(
ZDir(), cons_ave.field());
121 int ncell = cons_ave.ncell_line();
123 Gpu::HostVector< Real> r_plane_h(ncell);
124 Gpu::DeviceVector< Real> r_plane_d(ncell);
126 Gpu::HostVector< Real> t_plane_h(ncell);
127 Gpu::DeviceVector< Real> t_plane_d(ncell);
129 cons_ave.line_average(
Rho_comp , r_plane_h);
132 Gpu::copyAsync(Gpu::hostToDevice, r_plane_h.begin(), r_plane_h.end(), r_plane_d.begin());
133 Gpu::copyAsync(Gpu::hostToDevice, t_plane_h.begin(), t_plane_h.end(), t_plane_d.begin());
135 Real* dptr_r = r_plane_d.data();
136 Real* dptr_t = t_plane_d.data();
138 Box tdomain = domain; tdomain.grow(2,ng_c[2]);
139 r_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
140 t_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
144 dptr_r_plane = r_plane_tab.table();
145 dptr_t_plane = t_plane_tab.table();
146 ParallelFor(ncell, [=] AMREX_GPU_DEVICE (
int k) noexcept
148 dptr_r_plane(k-
offset) = dptr_r[k];
149 dptr_t_plane(k-
offset) = dptr_t[k];
154 Gpu::HostVector< Real> qv_plane_h(ncell), qc_plane_h(ncell);
155 Gpu::DeviceVector<Real> qv_plane_d(ncell), qc_plane_d(ncell);
158 cons_ave.line_average(
RhoQ1_comp, qv_plane_h);
159 Gpu::copyAsync(Gpu::hostToDevice, qv_plane_h.begin(), qv_plane_h.end(), qv_plane_d.begin());
162 cons_ave.line_average(
RhoQ2_comp, qc_plane_h);
163 Gpu::copyAsync(Gpu::hostToDevice, qc_plane_h.begin(), qc_plane_h.end(), qc_plane_d.begin());
165 Real* dptr_qv = qv_plane_d.data();
166 Real* dptr_qc = qc_plane_d.data();
168 qv_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
169 qc_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
171 dptr_qv_plane = qv_plane_tab.table();
172 dptr_qc_plane = qc_plane_tab.table();
173 ParallelFor(ncell, [=] AMREX_GPU_DEVICE (
int k) noexcept
175 dptr_qv_plane(k-
offset) = dptr_qv[k];
176 dptr_qc_plane(k-
offset) = dptr_qc[k];
185 int klo = domain.smallEnd(0);
186 int khi = domain.bigEnd(2);
187 int nk = khi - klo + 2;
188 Gpu::DeviceVector<Real> radiation_flux(nk,0.0);
189 Gpu::DeviceVector<Real> q_integral(nk,0.0);
190 Real* rad_flux = radiation_flux.data();
191 Real* q_int = q_integral.data();
213 #pragma omp parallel if (Gpu::notInLaunchRegion())
218 Box bx = mfi.tilebox();
220 const Array4<const Real>& cell_data = S_data[
IntVars::cons].array(mfi);
221 const Array4<const Real>& cell_prim = S_prim.array(mfi);
222 const Array4<Real> & cell_src = source.array(mfi);
224 const Array4<const Real>& r0 = r_hse.const_array(mfi);
226 const Array4<const Real>& z_cc_arr = z_phys_cc->const_array(mfi);
228 const Array4<const Real>& t_blank_arr = (terrain_blank) ? terrain_blank->const_array(mfi) :
229 Array4<const Real>{};
235 if (solverChoice.
rad_type != RadiationType::None && is_slow_step) {
236 auto const& qheating_arr = qheating_rates->const_array(mfi);
237 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
240 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) );
251 if ((is_slow_step && !use_Rayleigh_fast) || (!is_slow_step && use_Rayleigh_fast)) {
256 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
259 Real sinesq = d_sinesq_at_lev[k];
260 cell_src(i, j, k, n) -= dampcoef*sinesq * (
theta -
thetabar[k]) * cell_data(i,j,k,
nr);
270 auto const& rhotheta_src_arr = rhotheta_src->const_array(mfi);
275 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
277 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhotheta_src_arr(i, j, k);
280 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
282 cell_src(i, j, k, n) += rhotheta_src_arr(i, j, k);
288 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
290 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhotheta_src_arr(0, 0, k);
293 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
295 cell_src(i, j, k, n) += rhotheta_src_arr(0, 0, k);
306 auto const& rhoqt_src_arr = rhoqt_src->const_array(mfi);
311 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
313 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhoqt_src_arr(i, j, k);
316 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
318 cell_src(i, j, k, n) += rhoqt_src_arr(i, j, k);
324 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
326 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhoqt_src_arr(0, 0, k);
329 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
331 cell_src(i, j, k, n) += rhoqt_src_arr(0, 0, k);
344 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
346 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];
347 Real T_hi = dptr_t_plane(k+1) / dptr_r_plane(k+1);
348 Real T_lo = dptr_t_plane(k-1) / dptr_r_plane(k-1);
349 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
350 cell_src(i, j, k, n) -= cell_data(i,j,k,
nr) * wbar_cc * (T_hi - T_lo) * dzInv;
353 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
355 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];
356 Real T_hi = dptr_t_plane(k+1) / dptr_r_plane(k+1);
357 Real T_lo = dptr_t_plane(k-1) / dptr_r_plane(k-1);
358 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
359 cell_src(i, j, k, n) -= wbar_cc * (T_hi - T_lo) * dzInv;
371 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
373 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];
374 Real Qv_hi = dptr_qv_plane(k+1) / dptr_r_plane(k+1);
375 Real Qv_lo = dptr_qv_plane(k-1) / dptr_r_plane(k-1);
376 Real Qc_hi = dptr_qc_plane(k+1) / dptr_r_plane(k+1);
377 Real Qc_lo = dptr_qc_plane(k-1) / dptr_r_plane(k-1);
378 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
379 cell_src(i, j, k, nv ) -= cell_data(i,j,k,
nr) * wbar_cc * (Qv_hi - Qv_lo) * dzInv;
380 cell_src(i, j, k, nv+1) -= cell_data(i,j,k,
nr) * wbar_cc * (Qc_hi - Qc_lo) * dzInv;
383 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
385 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];
386 Real Qv_hi = dptr_qv_plane(k+1) / dptr_r_plane(k+1);
387 Real Qv_lo = dptr_qv_plane(k-1) / dptr_r_plane(k-1);
388 Real Qc_hi = dptr_qc_plane(k+1) / dptr_r_plane(k+1);
389 Real Qc_lo = dptr_qc_plane(k-1) / dptr_r_plane(k-1);
390 Real wbar_cc = 0.5 * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
391 cell_src(i, j, k, nv ) -= wbar_cc * (Qv_hi - Qv_lo) * dzInv;
392 cell_src(i, j, k, nv+1) -= wbar_cc * (Qc_hi - Qc_lo) * dzInv;
400 if (l_use_ndiff && is_slow_step) {
404 const Array4<const Real>& mf_mx = mapfac[
MapFacType::m_x]->const_array(mfi);
405 const Array4<const Real>& mf_my = mapfac[
MapFacType::m_y]->const_array(mfi);
409 cell_data, cell_data, cell_src, mf_mx, mf_my);
413 cell_prim, cell_data, cell_src, mf_mx, mf_my);
416 if (l_use_KE && l_diff_KE) {
418 cell_prim, cell_data, cell_src, mf_mx, mf_my);
422 cell_prim, cell_data, cell_src, mf_mx, mf_my);
433 const Array4<const Real>& surface_state_arr = (*surface_state_at_lev).array(mfi);
441 if (solverChoice.
pert_type == PerturbationType::Source && is_slow_step) {
443 const amrex::Array4<const amrex::Real>& pert_cell = turbPert.
pb_cell[level].const_array(mfi);
461 for (
int nt = 1; nt < n_sounding_times; nt++) {
464 if (itime_n == n_sounding_times-1) {
467 itime_np1 = itime_n+1;
470 coeff_n =
Real(1.0) - coeff_np1;
479 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
481 Real nudge = (coeff_n*theta_inp_sound_n[k] + coeff_np1*theta_inp_sound_np1[k]) - (dptr_t_plane(k)/dptr_r_plane(k));
483 cell_src(i, j, k, n) += cell_data(i, j, k,
nr) * nudge;
490 if (solverChoice.
terrain_type == TerrainType::ImmersedForcing &&
491 ((is_slow_step && !use_ImmersedForcing_fast) || (!is_slow_step && use_ImmersedForcing_fast)))
493 const Array4<const Real>& u =
xvel.array(mfi);
494 const Array4<const Real>& v =
yvel.array(mfi);
497 const Real* dx_arr = geom.CellSize();
498 const Real dx_x = dx_arr[0];
499 const Real dx_y = dx_arr[1];
500 const Real dx_z = dx_arr[2];
503 const Real drag_coefficient = alpha_h / std::pow(dx_x*dx_y*dx_z, 1./3.);
505 const Real U_s = 1.0;
517 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
519 const Real t_blank = t_blank_arr(i, j, k);
520 const Real t_blank_above = t_blank_arr(i, j, k+1);
521 const Real ux_cc_2r = 0.5 * (u(i ,j ,k+1) + u(i+1,j ,k+1));
522 const Real uy_cc_2r = 0.5 * (v(i ,j ,k+1) + v(i ,j+1,k+1));
523 const Real h_windspeed2r = std::sqrt(ux_cc_2r * ux_cc_2r + uy_cc_2r * uy_cc_2r);
529 if (init_surf_temp > 0.0) {
530 if (t_blank > 0 && (t_blank_above == 0.0)) {
531 const Real surf_temp = init_surf_temp + surf_heating_rate*time/3600;
533 cell_src(i, j, k-1,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
539 if (t_blank > 0 && (t_blank_above == 0.0)) {
542 Real psi_h_neighbor = 0.0;
543 Real ustar = h_windspeed2r * kappa / (std::log((1.5) * dx_z / z0) - psi_m);
544 const Real Olen = -ustar * ustar * ustar *
theta / (kappa * ggg * tflux + tiny);
545 const Real zeta = (0.5) * dx_z / Olen;
546 const Real zeta_neighbor = (1.5) * dx_z / Olen;
551 psi_h_neighbor = sfuns.
calc_psi_h(zeta_neighbor);
552 ustar = h_windspeed2r * kappa / (std::log((1.5) * dx_z / z0) - psi_m);
555 if (!(ustar > 0.0 && !std::isnan(ustar))) { ustar = 0.0; }
556 if (!(ustar < 2.0 && !std::isnan(ustar))) { ustar = 2.0; }
557 if (psi_h_neighbor > std::log(1.5 * dx_z / z0)) { psi_h_neighbor = std::log(1.5 * dx_z / z0); }
558 if (psi_h > std::log(0.5 * dx_z / z0)) { psi_h = std::log(0.5 * dx_z / z0); }
561 const Real thetastar =
theta * ustar * ustar / (kappa * ggg * Olen);
562 const Real surf_temp = theta_neighbor - thetastar / kappa * (std::log((1.5) * dx_z / z0) - psi_h_neighbor);
563 const Real tTarget = surf_temp + thetastar / kappa * (std::log((0.5) * dx_z / z0) - psi_h);
566 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt;
571 if (Olen_in != 1e-8){
572 if (t_blank > 0 && (t_blank_above == 0.0)) {
573 const Real Olen = Olen_in;
574 const Real zeta = (0.5) * dx_z / Olen;
575 const Real zeta_neighbor = (1.5) * dx_z / Olen;
581 const Real ustar = h_windspeed2r * kappa / (std::log((1.5) * dx_z / z0) - psi_m);
584 const Real thetastar =
theta * ustar * ustar / (kappa * ggg * Olen);
585 const Real surf_temp = theta_neighbor - thetastar / kappa * (std::log((1.5) * dx_z / z0) - psi_h_neighbor);
586 const Real tTarget = surf_temp + thetastar / kappa * (std::log((0.5) * dx_z / z0) - psi_h);
589 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt;
599 if ((solverChoice.
buildings_type == BuildingsType::ImmersedForcing ) &&
600 ((is_slow_step && !use_ImmersedForcing_fast) || (!is_slow_step && use_ImmersedForcing_fast)))
603 const Real* dx_arr = geom.CellSize();
604 const Real dx_x = dx_arr[0];
605 const Real dx_y = dx_arr[1];
608 const Real U_s = 1.0;
609 const Real min_t_blank = 0.005;
614 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
616 Real t_blank = t_blank_arr(i, j, k);
617 Real t_blank_below = t_blank_arr(i, j, k-1);
618 Real t_blank_above = t_blank_arr(i, j, k+1);
619 Real t_blank_north = t_blank_arr(i , j+1, k);
620 Real t_blank_south = t_blank_arr(i , j-1, k);
621 Real t_blank_east = t_blank_arr(i+1, j , k);
622 Real t_blank_west = t_blank_arr(i-1, j , k);
623 if (t_blank < min_t_blank) { t_blank = 0.0; }
624 if (t_blank_below < min_t_blank) { t_blank_below = 0.0; }
625 if (t_blank_north < min_t_blank) { t_blank_north = 0.0; }
626 if (t_blank_south < min_t_blank) { t_blank_south = 0.0; }
627 if (t_blank_east < min_t_blank) { t_blank_east = 0.0; }
628 if (t_blank_west < min_t_blank) { t_blank_west = 0.0; }
630 Real dx_z = (z_cc_arr) ? (z_cc_arr(i,j,k) - z_cc_arr(i,j,k-1)) : dx[2];
631 Real drag_coefficient = alpha_h / std::pow(dx_x*dx_y*dx_z, 1./3.);
634 if (init_surf_temp > 0.0) {
635 const Real surf_temp = init_surf_temp + surf_heating_rate*time/3600;
636 if (t_blank > 0 && (t_blank_above == 0.0) && (t_blank_below == 1.0)) {
638 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
640 }
else if (((t_blank > 0 && t_blank < t_blank_west && t_blank_east == 0.0) ||
641 (t_blank > 0 && t_blank < t_blank_east && t_blank_west == 0.0) ||
642 (t_blank > 0 && t_blank < t_blank_north && t_blank_south == 0.0) ||
643 (t_blank > 0 && t_blank < t_blank_south && t_blank_north == 0.0))) {
648 if ((t_blank < t_blank_north) && (t_blank_north == 1.0)) {
650 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
654 if ((t_blank < t_blank_south) && (t_blank_south == 1.0)) {
656 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
660 if ((t_blank < t_blank_east) && (t_blank_east == 1.0)) {
662 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
666 if ((t_blank < t_blank_west) && (t_blank_west == 1.0)) {
668 cell_src(i, j, k,
RhoTheta_comp) -= drag_coefficient * U_s * bc_forcing_rt_srf;
681 AMREX_ALWAYS_ASSERT((bx.smallEnd(2) == klo) && (bx.bigEnd(2) == khi));
688 Box xybx = makeSlab(bx,2,klo);
689 ParallelFor(xybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int ) noexcept
693 Real zi = 0.5 * (z_cc_arr(i,j,khi) + z_cc_arr(i,j,khi-1));
695 for (
int k(klo+1); k<=khi+1; ++k) {
698 Real dz = (z_cc_arr) ? 0.5 * (z_cc_arr(i,j,k) - z_cc_arr(i,j,k-2)) : dx[2];
699 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;
702 if ( (qt_lo > qt_i) && (qt_hi < qt_i) ) {
703 zi = 0.5 * (z_cc_arr(i,j,k) + z_cc_arr(i,j,k-1));
709 Real q_int_inf = q_int[khi+1];
710 for (
int k(klo); k<=khi+1; ++k) {
712 Real z = 0.5 * (z_cc_arr(i,j,k) + z_cc_arr(i,j,k-1));
713 rad_flux[lk] = F1*std::exp(-q_int[lk]) + F0*std::exp(-(q_int_inf - q_int[lk]));
715 rad_flux[lk] +=
rhoi *
Cp_d * D * ( std::pow(z-zi,4./3.)/4. + zi*std::pow(z-zi,1./3.) ) ;
720 for (
int k(klo); k<=khi; ++k) {
723 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];
726 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
void ApplySurfaceTreatment_BulkCoeff_CC(const Box &bx, const Array4< Real > &cell_rhs, const Array4< const Real > &cons_state, const Array4< const Real > &z_phys_cc, const Array4< const Real > &surface_state_arr)
Definition: ERF_ApplySurfaceTreatment_BulkCoeff.cpp:60
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:97
@ m_y
Definition: ERF_DataStruct.H:25
@ m_x
Definition: ERF_DataStruct.H:24
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:1113
amrex::Real if_surf_temp_flux
Definition: ERF_DataStruct.H:1112
DampingChoice dampingChoice
Definition: ERF_DataStruct.H:1058
bool spatial_moisture_forcing
Definition: ERF_DataStruct.H:1145
RadiationType rad_type
Definition: ERF_DataStruct.H:1175
amrex::Real if_z0
Definition: ERF_DataStruct.H:1111
bool do_theta_advection
Definition: ERF_DataStruct.H:1140
bool custom_rhotheta_forcing
Definition: ERF_DataStruct.H:1137
bool custom_w_subsidence
Definition: ERF_DataStruct.H:1139
bool nudging_from_input_sounding
Definition: ERF_DataStruct.H:1149
amrex::Real if_Cd_scalar
Definition: ERF_DataStruct.H:1108
bool immersed_forcing_substep
Definition: ERF_DataStruct.H:1104
amrex::Real if_Olen_in
Definition: ERF_DataStruct.H:1115
bool use_num_diff
Definition: ERF_DataStruct.H:1164
bool four_stream_radiation
Definition: ERF_DataStruct.H:1101
bool custom_moisture_forcing
Definition: ERF_DataStruct.H:1138
amrex::Real num_diff_coeff
Definition: ERF_DataStruct.H:1165
amrex::Real if_surf_heating_rate
Definition: ERF_DataStruct.H:1114
amrex::Vector< TurbChoice > turbChoice
Definition: ERF_DataStruct.H:1060
MoistureType moisture_type
Definition: ERF_DataStruct.H:1171
bool custom_forcing_prim_vars
Definition: ERF_DataStruct.H:1143
static BuildingsType buildings_type
Definition: ERF_DataStruct.H:1039
static TerrainType terrain_type
Definition: ERF_DataStruct.H:1036
PerturbationType pert_type
Definition: ERF_DataStruct.H:1161
SpongeChoice spongeChoice
Definition: ERF_DataStruct.H:1059
static InitType init_type
Definition: ERF_DataStruct.H:1030
bool hindcast_surface_bcs
Definition: ERF_DataStruct.H:1216
bool spatial_rhotheta_forcing
Definition: ERF_DataStruct.H:1144
int ave_plane
Definition: ERF_DataStruct.H:1186
std::string sponge_type
Definition: ERF_SpongeStruct.H:58
Definition: ERF_TurbStruct.H:42
bool use_tke
Definition: ERF_TurbStruct.H:430
bool diffuse_tke_3D
Definition: ERF_TurbStruct.H:465
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:40
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:90
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTStress.H:104