48 auto domain =
m_geom.Domain();
49 int k_lo = domain.smallEnd(2);
50 int k_hi = domain.bigEnd(2);
62 auto ba =
tabs->boxArray();
63 auto dm =
tabs->DistributionMap();
64 auto ngrow =
tabs->nGrowVect();
67 fz.define(convert(ba, IntVect(0,0,1)), dm, 3, ngrow);
70 for (MFIter mfi(fz, TilingIfNotGPU()); mfi.isValid(); ++mfi) {
71 auto qpr_array =
qpr->const_array(mfi);
72 auto qps_array =
qps->const_array(mfi);
73 auto qpg_array =
qpg->const_array(mfi);
74 auto rho_array =
rho->const_array(mfi);
75 auto tabs_array =
tabs->const_array(mfi);
76 auto fz_array = fz.array(mfi);
78 const auto& box3d = mfi.tilebox();
80 ParallelFor(box3d, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
84 qpr_array, qps_array, qpg_array,
94 fz_array(i,j,k,0) = corrected_fluxes.
rain;
95 fz_array(i,j,k,1) = corrected_fluxes.
snow;
96 fz_array(i,j,k,2) = corrected_fluxes.
graupel;
102 Real max_reduced_flux;
104 auto const& ma_fz_arr = fz.const_arrays();
105 GpuTuple<Real> max = ParReduce(TypeList<ReduceOpMax>{},
108 [=] AMREX_GPU_DEVICE (
int box_no,
int i,
int j,
int k) noexcept
111 return { ma_fz_arr[box_no](i,j,k,0)
112 + ma_fz_arr[box_no](i,j,k,1)
113 + ma_fz_arr[box_no](i,j,k,2) };
115 max_reduced_flux = get<0>(max);
119 ParallelDescriptor::ReduceRealMax(max_reduced_flux);
123 coef /=
Real(n_substep);
124 dtn /=
Real(n_substep);
127 for (
int nsub(0); nsub<n_substep; ++nsub)
135 for (MFIter mfi(*
qp,
TileNoZ()); mfi.isValid(); ++mfi) {
136 auto qpr_array =
qpr->array(mfi);
137 auto qps_array =
qps->array(mfi);
138 auto qpg_array =
qpg->array(mfi);
139 auto qp_array =
qp->array(mfi);
140 auto rho_array =
rho->const_array(mfi);
141 auto tabs_array =
tabs->const_array(mfi);
142 auto fz_array = fz.array(mfi);
144 auto rain_accum_array =
rain_accum->array(mfi);
145 auto snow_accum_array =
snow_accum->array(mfi);
148 const auto dJ_array = (
m_detJ_cc) ?
m_detJ_cc->const_array(mfi) : Array4<const Real>{};
150 const auto& tbx = mfi.tilebox();
151 const auto& tbz = mfi.tilebox(IntVect(0,0,1),IntVect(0));
154 ParallelFor(tbz, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
158 qpr_array, qps_array, qpg_array,
159 i, j, k, k_lo, k_hi);
162 vrain, vsnow, vgrau);
168 const Real detJ_donor = (dJ_array) ? dJ_array(i,j,donor_k) :
one;
177 rho_array(i,j,donor_k),
178 qpr_array(i,j,donor_k),
182 rho_array(i,j,donor_k),
183 qps_array(i,j,donor_k),
187 rho_array(i,j,donor_k),
188 qpg_array(i,j,donor_k),
195 {fz_array(i,j,k,0), fz_array(i,j,k,1), fz_array(i,j,k,2)},
197 rain_accum_array(i,j,k) = rain_accum_array(i,j,k) + surface_accum.
rain;
198 snow_accum_array(i,j,k) = snow_accum_array(i,j,k) + surface_accum.
snow;
199 graup_accum_array(i,j,k) = graup_accum_array(i,j,k) + surface_accum.
graupel;
204 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
207 Real dJinv = (dJ_array) ?
one/dJ_array(i,j,k) :
one;
213 rho_array(i,j,k), dJinv, coef);
215 rho_array(i,j,k), dJinv, coef);
217 rho_array(i,j,k), dJinv, coef);
219 qpr_array(i,j,k) = std::max(
Real(0.0), qpr_array(i,j,k) + dqpr);
220 qps_array(i,j,k) = std::max(
Real(0.0), qps_array(i,j,k) + dqps);
221 qpg_array(i,j,k) = std::max(
Real(0.0), qpg_array(i,j,k) + dqpg);
222 qp_array(i,j,k) = qpr_array(i,j,k) + qps_array(i,j,k) + qpg_array(i,j,k);
constexpr amrex::Real csnow
Definition: ERF_Constants.H:125
constexpr amrex::Real nzerog
Definition: ERF_Constants.H:102
constexpr amrex::Real cgrau
Definition: ERF_Constants.H:126
constexpr amrex::Real a_grau
Definition: ERF_Constants.H:85
constexpr amrex::Real PI
Definition: ERF_Constants.H:42
constexpr amrex::Real nzeror
Definition: ERF_Constants.H:100
constexpr amrex::Real a_rain
Definition: ERF_Constants.H:81
constexpr amrex::Real nzeros
Definition: ERF_Constants.H:101
constexpr amrex::Real a_snow
Definition: ERF_Constants.H:83
constexpr amrex::Real crain
Definition: ERF_Constants.H:124
Real rho_0
Definition: ERF_InitCustomPert_ABL.H:4
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipFluxComponents sam_precip_component_fluxes_from_face_state(const SAMPrecipComponentFaceState &face_state, const amrex::Real &vrain, const amrex::Real &vsnow, const amrex::Real &vgrau) noexcept
Definition: ERF_SAMUtils.H:945
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMSurfaceAccumulation sam_surface_accumulation_from_component_fluxes(const SAMPrecipFluxComponents &component_fluxes, const amrex::Real &dtn) noexcept
Definition: ERF_SAMUtils.H:1015
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_limit_precip_component_flux(const amrex::Real &raw_flux, const amrex::Real &rho_donor, const amrex::Real &q_donor, const amrex::Real &detJ_donor, const amrex::Real &coef) noexcept
Definition: ERF_SAMUtils.H:987
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipComponentFaceState sam_precip_component_face_state(const amrex::Array4< const amrex::Real > &rho_array, const amrex::Array4< const amrex::Real > &tabs_array, const amrex::Array4< const amrex::Real > &qpr_array, const amrex::Array4< const amrex::Real > &qps_array, const amrex::Array4< const amrex::Real > &qpg_array, const int &i, const int &j, const int &k, const int &k_lo, const int &k_hi) noexcept
Definition: ERF_SAMUtils.H:864
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int sam_precip_face_donor_k(const int &face_k, const int &k_lo, const int &k_hi) noexcept
Definition: ERF_SAMUtils.H:801
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE SAMPrecipFluxComponents sam_precip_flux_components_density_corrected(const SAMPrecipFluxComponents &precip_fluxes, const amrex::Real &rho_0, const amrex::Real &rho_avg) noexcept
Definition: ERF_SAMUtils.H:972
@ qp
Definition: ERF_Kessler.H:33
@ rain_accum
Definition: ERF_Kessler.H:35
@ qpg
Definition: ERF_Morrison.H:42
@ qps
Definition: ERF_Morrison.H:41
@ graup_accum
Definition: ERF_Morrison.H:53
@ qpr
Definition: ERF_Morrison.H:40
@ snow_accum
Definition: ERF_Morrison.H:52
Definition: ERF_SAMUtils.H:124
amrex::Real rho_avg
Definition: ERF_SAMUtils.H:125
Definition: ERF_SAMUtils.H:145
amrex::Real snow
Definition: ERF_SAMUtils.H:147
amrex::Real rain
Definition: ERF_SAMUtils.H:146
amrex::Real graupel
Definition: ERF_SAMUtils.H:148
Definition: ERF_SAMUtils.H:139
amrex::Real rain
Definition: ERF_SAMUtils.H:140
amrex::Real snow
Definition: ERF_SAMUtils.H:141
amrex::Real graupel
Definition: ERF_SAMUtils.H:142