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:101
constexpr amrex::Real rhog
Definition: ERF_Constants.H:49
constexpr amrex::Real nzerog
Definition: ERF_Constants.H:78
constexpr amrex::Real cgrau
Definition: ERF_Constants.H:102
constexpr amrex::Real a_grau
Definition: ERF_Constants.H:61
constexpr amrex::Real PI
Definition: ERF_Constants.H:24
constexpr amrex::Real nzeror
Definition: ERF_Constants.H:76
constexpr amrex::Real rhos
Definition: ERF_Constants.H:48
constexpr amrex::Real rhor
Definition: ERF_Constants.H:47
constexpr amrex::Real a_rain
Definition: ERF_Constants.H:57
constexpr amrex::Real nzeros
Definition: ERF_Constants.H:77
constexpr amrex::Real a_snow
Definition: ERF_Constants.H:59
constexpr amrex::Real crain
Definition: ERF_Constants.H:100
Real rho_0
Definition: ERF_InitCustomPert_ABL.H:4
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:1028
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:809
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:983
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:955
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:873
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:999
@ qp
Definition: ERF_Kessler.H:32
@ rain_accum
Definition: ERF_Kessler.H:34
@ qpg
Definition: ERF_Morrison.H:41
@ qps
Definition: ERF_Morrison.H:40
@ graup_accum
Definition: ERF_Morrison.H:52
@ qpr
Definition: ERF_Morrison.H:39
@ snow_accum
Definition: ERF_Morrison.H:51
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