42 auto domain =
m_geom.Domain();
43 int k_lo = domain.smallEnd(2);
44 int k_hi = domain.bigEnd(2);
56 auto ba =
tabs->boxArray();
57 auto dm =
tabs->DistributionMap();
58 auto ngrow =
tabs->nGrowVect();
61 fz.define(convert(ba, IntVect(0,0,1)), dm, 3, ngrow);
64 for (MFIter mfi(fz, TilingIfNotGPU()); mfi.isValid(); ++mfi) {
65 auto qpr_array =
qpr->const_array(mfi);
66 auto qps_array =
qps->const_array(mfi);
67 auto qpg_array =
qpg->const_array(mfi);
68 auto rho_array =
rho->const_array(mfi);
69 auto tabs_array =
tabs->const_array(mfi);
70 auto fz_array = fz.array(mfi);
72 const auto& box3d = mfi.tilebox();
74 ParallelFor(box3d, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
78 qpr_array, qps_array, qpg_array,
88 fz_array(i,j,k,0) = corrected_fluxes.
rain;
89 fz_array(i,j,k,1) = corrected_fluxes.
snow;
90 fz_array(i,j,k,2) = corrected_fluxes.
graupel;
96 Real max_reduced_flux;
98 auto const& ma_fz_arr = fz.const_arrays();
99 GpuTuple<Real> max = ParReduce(TypeList<ReduceOpMax>{},
102 [=] AMREX_GPU_DEVICE (
int box_no,
int i,
int j,
int k) noexcept
105 return { ma_fz_arr[box_no](i,j,k,0)
106 + ma_fz_arr[box_no](i,j,k,1)
107 + ma_fz_arr[box_no](i,j,k,2) };
109 max_reduced_flux = get<0>(max);
113 ParallelDescriptor::ReduceRealMax(max_reduced_flux);
117 coef /=
Real(n_substep);
118 dtn /=
Real(n_substep);
121 for (
int nsub(0); nsub<n_substep; ++nsub) {
122 for (MFIter mfi(*
qp,
TileNoZ()); mfi.isValid(); ++mfi) {
123 auto qpr_array =
qpr->array(mfi);
124 auto qps_array =
qps->array(mfi);
125 auto qpg_array =
qpg->array(mfi);
126 auto qp_array =
qp->array(mfi);
127 auto rho_array =
rho->const_array(mfi);
128 auto tabs_array =
tabs->const_array(mfi);
129 auto fz_array = fz.array(mfi);
131 auto rain_accum_array =
rain_accum->array(mfi);
132 auto snow_accum_array =
snow_accum->array(mfi);
135 const auto dJ_array = (
m_detJ_cc) ?
m_detJ_cc->const_array(mfi) : Array4<const Real>{};
137 const auto& tbx = mfi.tilebox();
138 const auto& tbz = mfi.tilebox(IntVect(0,0,1),IntVect(0));
141 ParallelFor(tbz, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
145 qpr_array, qps_array, qpg_array,
146 i, j, k, k_lo, k_hi);
149 vrain, vsnow, vgrau);
155 const Real detJ_donor = (dJ_array) ? dJ_array(i,j,donor_k) :
one;
164 rho_array(i,j,donor_k),
165 qpr_array(i,j,donor_k),
169 rho_array(i,j,donor_k),
170 qps_array(i,j,donor_k),
174 rho_array(i,j,donor_k),
175 qpg_array(i,j,donor_k),
182 {fz_array(i,j,k,0), fz_array(i,j,k,1), fz_array(i,j,k,2)},
184 rain_accum_array(i,j,k) = rain_accum_array(i,j,k) + surface_accum.
rain;
185 snow_accum_array(i,j,k) = snow_accum_array(i,j,k) + surface_accum.
snow;
186 graup_accum_array(i,j,k) = graup_accum_array(i,j,k) + surface_accum.
graupel;
191 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
194 Real dJinv = (dJ_array) ?
one/dJ_array(i,j,k) :
one;
200 rho_array(i,j,k), dJinv, coef);
202 rho_array(i,j,k), dJinv, coef);
204 rho_array(i,j,k), dJinv, coef);
206 qpr_array(i,j,k) = std::max(
Real(0.0), qpr_array(i,j,k) + dqpr);
207 qps_array(i,j,k) = std::max(
Real(0.0), qps_array(i,j,k) + dqps);
208 qpg_array(i,j,k) = std::max(
Real(0.0), qpg_array(i,j,k) + dqpg);
209 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