Function for computing the slow RHS for the evolution equations for the density, potential temperature and momentum.
70 BL_PROFILE_REGION(
"erf_make_sources()");
72 Real time =
static_cast<Real>(time_d);
86 const bool l_use_KE = tc.
use_tke;
89 const Box& domain = geom.Domain();
91 const GpuArray<Real, AMREX_SPACEDIM>
dxInv = geom.InvCellSizeArray();
92 const GpuArray<Real, AMREX_SPACEDIM>
dx = geom.CellSizeArray();
112 "erf.forest_canopy_tke needs the forest drag field and the old state in make_sources");
117 Table1D<Real> dptr_r_plane, dptr_t_plane, dptr_qv_plane, dptr_qc_plane;
118 Table1D<Real> dptr_r_plane_if, dptr_t_plane_if;
119 TableData<Real, 1> r_plane_tab, t_plane_tab, qv_plane_tab, qc_plane_tab;
121 bool use_immersed_forcing = (solverChoice.
terrain_type == TerrainType::ImmersedForcing ||
126 if (use_immersed_forcing && r_plane_avg && t_plane_avg) {
128 dptr_r_plane_if = r_plane_avg;
129 dptr_t_plane_if = t_plane_avg;
133 bool compute_averages = (is_slow_step && dptr_wbar_sub);
135 if (compute_averages)
147 IntVect ng_c(S_data[
IntVars::cons].nGrowVect()); ng_c[2] = 1;
152 int ncomp = (!has_moisture) ? 2 :
RhoQ2_comp+1;
156 cons_ave.compute_averages(
ZDir(), cons_ave.field());
158 int ncell = cons_ave.ncell_line();
160 Gpu::HostVector< Real> r_plane_h(ncell);
161 Gpu::DeviceVector< Real> r_plane_d(ncell);
163 Gpu::HostVector< Real> t_plane_h(ncell);
164 Gpu::DeviceVector< Real> t_plane_d(ncell);
166 cons_ave.line_average(
Rho_comp , r_plane_h);
169 Gpu::copyAsync(Gpu::hostToDevice, r_plane_h.begin(), r_plane_h.end(), r_plane_d.begin());
170 Gpu::copyAsync(Gpu::hostToDevice, t_plane_h.begin(), t_plane_h.end(), t_plane_d.begin());
172 Real* dptr_r = r_plane_d.data();
173 Real* dptr_t = t_plane_d.data();
175 Box tdomain = domain; tdomain.grow(2,ng_c[2]);
176 r_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
177 t_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
181 dptr_r_plane = r_plane_tab.table();
182 dptr_t_plane = t_plane_tab.table();
183 ParallelFor(ncell, [=] AMREX_GPU_DEVICE (
int k) noexcept
185 dptr_r_plane(k-
offset) = dptr_r[k];
186 dptr_t_plane(k-
offset) = dptr_t[k];
191 Gpu::HostVector< Real> qv_plane_h(ncell), qc_plane_h(ncell);
192 Gpu::DeviceVector<Real> qv_plane_d(ncell), qc_plane_d(ncell);
195 cons_ave.line_average(
RhoQ1_comp, qv_plane_h);
196 Gpu::copyAsync(Gpu::hostToDevice, qv_plane_h.begin(), qv_plane_h.end(), qv_plane_d.begin());
199 cons_ave.line_average(
RhoQ2_comp, qc_plane_h);
200 Gpu::copyAsync(Gpu::hostToDevice, qc_plane_h.begin(), qc_plane_h.end(), qc_plane_d.begin());
202 Real* dptr_qv = qv_plane_d.data();
203 Real* dptr_qc = qc_plane_d.data();
205 qv_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
206 qc_plane_tab.resize({tdomain.smallEnd(2)}, {tdomain.bigEnd(2)});
208 dptr_qv_plane = qv_plane_tab.table();
209 dptr_qc_plane = qc_plane_tab.table();
210 ParallelFor(ncell, [=] AMREX_GPU_DEVICE (
int k) noexcept
212 dptr_qv_plane(k-
offset) = dptr_qv[k];
213 dptr_qc_plane(k-
offset) = dptr_qc[k];
228 int klo = domain.smallEnd(2);
229 int khi = domain.bigEnd(2);
252 #pragma omp parallel if (Gpu::notInLaunchRegion())
257 Box bx = mfi.tilebox();
259 const Array4<const Real>& cell_data = S_data[
IntVars::cons].array(mfi);
260 const Array4<const Real>& cell_prim = S_prim.array(mfi);
261 const Array4<Real> & cell_src = source.array(mfi);
263 const Array4<const Real>&
r0 = r_hse.const_array(mfi);
264 const Array4<const Real>& th0 = th_hse.const_array(mfi);
265 const Array4<const Real>& qv0 = qv_hse.const_array(mfi);
267 const Array4<const Real>& z_cc_arr = z_phys_cc->const_array(mfi);
269 const Array4<const Real>& t_blank_arr = (terrain_blank) ? terrain_blank->const_array(mfi) :
270 Array4<const Real>{};
301 is_slow_step && qheating_rates !=
nullptr) {
302 auto const& qheating_arr = qheating_rates->const_array(mfi);
303 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
307 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) );
317 if ((is_slow_step && !use_Rayleigh_fast) || (!is_slow_step && use_Rayleigh_fast)) {
322 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
325 Real sinesq = d_sinesq_at_lev[k];
326 cell_src(i, j, k, n) -= dampcoef*sinesq * (
theta -
thetabar[k]) * cell_data(i,j,k,
nr);
336 auto const& rhotheta_src_arr = rhotheta_src->const_array(mfi);
341 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
343 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhotheta_src_arr(i, j, k);
346 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
348 cell_src(i, j, k, n) += rhotheta_src_arr(i, j, k);
354 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
356 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhotheta_src_arr(0, 0, k);
359 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
361 cell_src(i, j, k, n) += rhotheta_src_arr(0, 0, k);
372 auto const& rhoqt_src_arr = rhoqt_src->const_array(mfi);
377 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
379 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhoqt_src_arr(i, j, k);
382 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
384 cell_src(i, j, k, n) += rhoqt_src_arr(i, j, k);
390 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
392 cell_src(i, j, k, n) += cell_data(i,j,k,
nr) * rhoqt_src_arr(0, 0, k);
395 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
397 cell_src(i, j, k, n) += rhoqt_src_arr(0, 0, k);
411 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
413 Real dzInv = (z_cc_arr) ?
one/ (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) :
myhalf*
dxInv[2];
414 Real T_hi = dptr_t_plane(k+1) / dptr_r_plane(k+1);
415 Real T_lo = dptr_t_plane(k-1) / dptr_r_plane(k-1);
416 Real wbar_cc =
myhalf * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
417 cell_src(i, j, k, n) -= cell_data(i,j,k,
nr) * wbar_cc * (T_hi - T_lo) * dzInv;
429 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
431 Real dzInv = (z_cc_arr) ?
one/ (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) :
myhalf*
dxInv[2];
432 Real Qv_hi = dptr_qv_plane(k+1) / dptr_r_plane(k+1);
433 Real Qv_lo = dptr_qv_plane(k-1) / dptr_r_plane(k-1);
434 Real Qc_hi = dptr_qc_plane(k+1) / dptr_r_plane(k+1);
435 Real Qc_lo = dptr_qc_plane(k-1) / dptr_r_plane(k-1);
436 Real wbar_cc =
myhalf * (dptr_wbar_sub[k] + dptr_wbar_sub[k+1]);
437 cell_src(i, j, k, nv ) -= cell_data(i,j,k,
nr) * wbar_cc * (Qv_hi - Qv_lo) * dzInv;
438 cell_src(i, j, k, nv+1) -= cell_data(i,j,k,
nr) * wbar_cc * (Qc_hi - Qc_lo) * dzInv;
445 if (l_use_ndiff && is_slow_step)
447 const Array4<const Real>& mf_mx = mapfac[
MapFacType::m_x]->const_array(mfi);
448 const Array4<const Real>& mf_my = mapfac[
MapFacType::m_y]->const_array(mfi);
452 cell_data, cell_data, cell_src, mf_mx, mf_my);
456 cell_prim, cell_data, cell_src, mf_mx, mf_my);
459 if (l_use_KE && l_diff_KE) {
461 cell_prim, cell_data, cell_src, mf_mx, mf_my);
465 cell_prim, cell_data, cell_src, mf_mx, mf_my);
481 const amrex::Array4<const amrex::Real>& pert_cell = turbPert.
pb_cell[level].const_array(mfi);
488 if (use_canopy_tke) {
490 xvel.const_array(mfi),
yvel.const_array(mfi),
zvel.const_array(mfi),
491 forest_drag->const_array(mfi), t_blank_arr,
498 if (solverChoice.
terrain_type == TerrainType::ImmersedForcing &&
499 ((is_slow_step && !use_ImmersedForcing_fast) || (!is_slow_step && use_ImmersedForcing_fast))) {
501 const Array4<const Real>& u =
xvel.array(mfi);
502 const Array4<const Real>& v =
yvel.array(mfi);
506 const Array4<Real> wall_hfx = (ib_wall_hfx) ? ib_wall_hfx->array(mfi) : Array4<Real>{};
507 const Array4<Real> wall_kt = (ib_wall_ktarget) ? ib_wall_ktarget->array(mfi) : Array4<Real>{};
508 const auto& tc_lev = solverChoice.
turbChoice[level];
511 geom, solverChoice, dptr_r_plane_if, dptr_t_plane_if,
512 static_cast<Real>(dt),
static_cast<Real>(time),
516 cell_src, geom, solverChoice, dptr_r_plane_if, dptr_t_plane_if, time);
524 ((is_slow_step && !use_ImmersedForcing_fast) || (!is_slow_step && use_ImmersedForcing_fast))) {
526 const Array4<const Real>& u =
xvel.array(mfi);
527 const Array4<const Real>& v =
yvel.array(mfi);
528 const Array4<const Real>&
w =
zvel.array(mfi);
532 cell_src, geom, solverChoice, dptr_r_plane_if, dptr_t_plane_if, time);
547 Box xybx = makeSlab(bx,2,
klo);
549 AMREX_GPU_DEVICE(
int i,
int j,
int ) noexcept
562 for (
int k(
klo+1); k<=
khi+1; ++k) {
564 Real dz = (z_cc_arr) ?
myhalf * (z_cc_arr(i,j,k) - z_cc_arr(i,j,k-2)) :
dx[2];
568 if ( (qt_lo > qt_i) && (qt_hi < qt_i) ) {
569 zi =
myhalf * (z_cc_arr(i,j,k) + z_cc_arr(i,j,k-1));
580 Real flux_lo = F1*std::exp(-q_int) + F0*std::exp(-(q_int_inf - q_int));
585 for (
int k(
klo); k<=
khi; ++k) {
587 Real dz = (z_cc_arr) ?
myhalf * (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1)) :
dx[2];
590 Real z_hi =
myhalf * (z_cc_arr(i,j,k+1) + z_cc_arr(i,j,k));
591 Real flux_hi = F1*std::exp(-q_int) + F0*std::exp(-(q_int_inf - q_int));
597 Real dzInv = (z_cc_arr) ?
one/ (
myhalf * (z_cc_arr(i,j,k+1) - z_cc_arr(i,j,k-1))) :
dxInv[2];
600 Real dTdt = (flux_hi - flux_lo) * 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 > &th0, const Array4< const Real > &qv0, const Array4< const Real > &z_phys_cc, int n_qstate)
Apply sponge zone damping to cell-centered state variables.
Definition: ERF_ApplySpongeZoneBCs.cpp:21
AMREX_INLINE void AddCanopyTKESources(const amrex::Box &bx, const amrex::Array4< amrex::Real > &cell_src, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_old, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< const amrex::Real > &f_arr, const amrex::Array4< const amrex::Real > &t_blank_arr, const CanopyTurbulence &canopy, amrex::Real dt)
Definition: ERF_CanopyTurbulence.H:128
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:51
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:57
@ thetabar
Definition: ERF_DataStruct.H:207
@ m_y
Definition: ERF_DataStruct.H:39
@ m_x
Definition: ERF_DataStruct.H:38
DirectionSelector< 2 > ZDir
Definition: ERF_DirectionSelector.H:55
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getExnergivenRTh(const amrex::Real rhotheta, const amrex::Real rdOcp, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:156
void ImmersedForcingTerrain_Scalar(const Box &bx, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &cell_data, const Array4< const Real > &t_blank_arr, const Array4< const Real > &z_cc_arr, const Array4< Real > &cell_src, const Geometry &geom, const SolverChoice &solverChoice, const Table1D< Real > &r_avg, const Table1D< Real > &t_avg, const Real time)
Definition: ERF_ImmersedForcing.cpp:1217
void ImmersedForcingTerrain_Scalar_FractionStress(const Box &bx, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &cell_data, const Array4< const Real > &t_blank_arr, const Array4< Real > &cell_src, const Array4< Real > &wall_hfx, const Array4< Real > &wall_ktarget, const Geometry &geom, const SolverChoice &solverChoice, const Table1D< Real > &r_avg, const Table1D< Real > &t_avg, const Real dt, const Real time, const bool wall_tke, const Real Cmu0)
Definition: ERF_ImmersedForcing.cpp:497
void ImmersedForcingBuildings_Scalar(const Box &bx, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &w, const Array4< const Real > &cell_data, const Array4< const Real > &t_blank_arr, const Array4< const Real > &z_cc_arr, const Array4< Real > &cell_src, const Geometry &geom, const SolverChoice &solverChoice, const Table1D< Real > &r_avg, const Table1D< Real > &t_avg, const Real time)
Definition: ERF_ImmersedForcing.cpp:1363
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:57
#define Rho_comp
Definition: ERF_IndexDefines.H:53
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:54
#define NDRY
Definition: ERF_IndexDefines.H:15
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:67
#define NSCALARS
Definition: ERF_IndexDefines.H:26
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:79
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:66
#define RhoKE_comp
Definition: ERF_IndexDefines.H:55
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
const Real dx
Definition: ERF_InitCustomPert_ABL.H:44
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(axis >=0 &&axis< AMREX_SPACEDIM, "prob.axis must be 0, 1 or 2")
const int khi
Definition: ERF_InitCustomPert_Bubble.H:25
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
const int klo
Definition: ERF_InitCustomPert_KE.H:9
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
constexpr amrex::Real three
Definition: ERF_NumericalConstants.H:39
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
void NumericalDiffusion_Scal(const Box &bx, const int start_comp, const int num_comp, const double 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
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:23
AMREX_FORCE_INLINE IntVect offset(const int face_dir, const int normal)
Definition: ERF_ReadBndryPlanes.cpp:36
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11
Definition: ERF_PlaneAverage.H:14
@ qv0_comp
Definition: ERF_IndexDefines.H:101
@ th0_comp
Definition: ERF_IndexDefines.H:100
@ r0_comp
Definition: ERF_IndexDefines.H:97
@ cons
Definition: ERF_IndexDefines.H:272
@ None
Definition: ERF_LSM_Types.H:6
@ theta
Definition: ERF_Kessler.H:26
@ qv
Definition: ERF_Kessler.H:31
@ nr
Definition: ERF_Morrison.H:48
@ xvel
Definition: ERF_IndexDefines.H:255
@ cons
Definition: ERF_IndexDefines.H:254
@ zvel
Definition: ERF_IndexDefines.H:257
@ yvel
Definition: ERF_IndexDefines.H:256
@ dz
Definition: ERF_AdvanceWDM6.cpp:273
@ zi
Definition: ERF_AdvanceWDM6.cpp:277
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real wall_tke(const WallState &w, amrex::Real beta, amrex::Real dz, amrex::Real z0, amrex::Real theta, amrex::Real Cmu0) noexcept
Definition: ERF_ImmersedWallCell.H:251
real(c_double), private rhoi
Definition: ERF_module_mp_morr_two_moment.F90:188
real(kind=kind_phys), parameter, private r0
Definition: ERF_module_mp_wdm6.F90:75
bool enabled
erf.forest_canopy_tke: add the canopy terms to the k-eqn RANS model
Definition: ERF_CanopyTurbStruct.H:18
RayleighDampingType rayleigh_damping_type
Selected Rayleigh damping time-integration treatment.
Definition: ERF_DampingStruct.H:111
amrex::Real rayleigh_dampcoef
Rayleigh damping inverse time scale [1/s].
Definition: ERF_DampingStruct.H:98
bool rayleigh_damp_T
Whether Rayleigh damping is applied to potential temperature.
Definition: ERF_DampingStruct.H:97
amrex::Vector< TurbChoice > turbChoice
Turbulence options for each AMR level.
Definition: ERF_DataStruct.H:2620
bool if_fraction_stress
erf.if_wall_form = fraction_stress: the wall stress of ERF_ImmersedWallCell.H in the wall cell of eac...
Definition: ERF_DataStruct.H:2714
MoistureType moisture_type
Moisture or microphysics model.
Definition: ERF_DataStruct.H:2942
int ave_plane
Averaging plane index used by diagnostics.
Definition: ERF_DataStruct.H:2990
bool use_building_immersed_forcing(const amrex::Geometry &geom) const noexcept
Definition: ERF_DataStruct.H:2808
amrex::Real num_diff_coeff
Numerical diffusion coefficient after input scaling.
Definition: ERF_DataStruct.H:2939
bool do_theta_advection
Whether custom vertical subsidence is applied to rho-theta.
Definition: ERF_DataStruct.H:2753
bool spatial_moisture_forcing
Whether spatially varying moisture forcing is enabled.
Definition: ERF_DataStruct.H:2758
static MeshType mesh_type
Vertical mesh representation.
Definition: ERF_DataStruct.H:2604
SpongeChoice spongeChoice
Sponge-layer options.
Definition: ERF_DataStruct.H:2619
bool four_stream_radiation
Whether the four-stream radiation approximation is enabled.
Definition: ERF_DataStruct.H:2692
DampingChoice dampingChoice
Damping-related options.
Definition: ERF_DataStruct.H:2618
bool if_wall_tke
Hold the k-eqn TKE of the fraction-stress wall cell at its flat-ground wall value (ib_wall::wall_tke)...
Definition: ERF_DataStruct.H:2716
static TerrainType terrain_type
Terrain or immersed-boundary representation.
Definition: ERF_DataStruct.H:2589
CanopyTurbulence canopyTurb
Definition: ERF_DataStruct.H:3040
static BuildingsType buildings_type
Building representation.
Definition: ERF_DataStruct.H:2595
bool custom_rhotheta_forcing
Whether custom rho-theta forcing is enabled.
Definition: ERF_DataStruct.H:2750
bool spatial_rhotheta_forcing
Whether spatially varying rho-theta forcing is enabled.
Definition: ERF_DataStruct.H:2757
bool use_source_perturbation(int lev) const
Query whether source-term turbulent perturbations are enabled on a level.
Definition: ERF_DataStruct.H:2845
bool custom_w_subsidence
Whether custom vertical subsidence is enabled.
Definition: ERF_DataStruct.H:2752
bool custom_moisture_forcing
Whether custom moisture forcing is enabled.
Definition: ERF_DataStruct.H:2751
RadiationType rad_type
Radiation model.
Definition: ERF_DataStruct.H:2956
bool immersed_forcing_substep
Whether immersed-forcing source terms are applied only during substeps.
Definition: ERF_DataStruct.H:2695
bool custom_forcing_prim_vars
Whether custom forcing operates on primitive variables.
Definition: ERF_DataStruct.H:2756
bool use_num_diff
Whether sixth-order numerical diffusion is enabled.
Definition: ERF_DataStruct.H:2938
static SpongeType sponge_type
Selected sponge damping model.
Definition: ERF_SpongeStruct.H:100
Definition: ERF_TurbStruct.H:119
bool diffuse_tke_3D
Whether three-dimensional numerical diffusion is applied to TKE/QKE.
Definition: ERF_TurbStruct.H:1067
bool use_tke
Whether any TKE or QKE closure is active.
Definition: ERF_TurbStruct.H:983
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, const amrex::Real scale=one)
Apply stored turbulent perturbations to a source or state array.
Definition: ERF_TurbPertStruct.H:620
amrex::Vector< amrex::MultiFab > pb_cell
Per-cell perturbation amplitude storage.
Definition: ERF_TurbPertStruct.H:926