1 #ifndef ERF_FIRE_PRECIP_H
2 #define ERF_FIRE_PRECIP_H
4 #include <AMReX_GpuQualifiers.H>
5 #include <AMReX_MultiFab.H>
6 #include <AMReX_MFIter.H>
7 #include <AMReX_REAL.H>
41 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
47 const amrex::Real d = accum_now_kgm2 - accum_prev_kgm2;
67 using namespace amrex;
68 accum_2d.setVal(
Real(0.0));
82 for (MFIter mfi(accum_2d,
false); mfi.isValid(); ++mfi) {
83 Array4<Real> a = accum_2d.array(mfi);
84 Array4<const Real>
total = has_total ? sources.
total.
accum->const_array(mfi) : Array4<const Real>{};
85 Array4<const Real>
rain = has_rain ? sources.
rain.
accum->const_array(mfi) : Array4<const Real>{};
86 Array4<const Real>
snow = has_snow ? sources.
snow.
accum->const_array(mfi) : Array4<const Real>{};
87 Array4<const Real>
graupel = has_graupel ? sources.
graupel.
accum->const_array(mfi) : Array4<const Real>{};
88 Array4<const Real>
hail = has_hail ? sources.
hail.
accum->const_array(mfi) : Array4<const Real>{};
89 ParallelFor(mfi.tilebox(), [=] AMREX_GPU_DEVICE (
const IntVect& iv) noexcept
91 const int i = iv[0], j = iv[1];
97 if (has_rain) { v +=
rain(i, j,
klo) * f_rain; }
98 if (has_snow) { v +=
snow(i, j,
klo) * f_snow; }
99 if (has_graupel) { v +=
graupel(i, j,
klo) * f_graupel; }
100 if (has_hail) { v +=
hail(i, j,
klo) * f_hail; }
116 amrex::MultiFab& prev_2d,
117 const amrex::MultiFab& now_2d,
121 using namespace amrex;
122 for (MFIter mfi(rate_2d,
false); mfi.isValid(); ++mfi) {
123 Array4<Real> r = rate_2d.array(mfi);
124 Array4<Real>
p = prev_2d.array(mfi);
125 Array4<const Real> n = now_2d.const_array(mfi);
126 ParallelFor(mfi.tilebox(), [=] AMREX_GPU_DEVICE (
const IntVect& iv) noexcept
128 const int i = iv[0], j = iv[1];
130 p(i, j, 0) = n(i, j, 0);
void fire_precip_rate_from_accum(amrex::MultiFab &rate_2d, amrex::MultiFab &prev_2d, const amrex::MultiFab &now_2d, amrex::Real dt_s, bool prev_valid)
Rain rate [mm/hr] of every column over the step just taken, and roll the snapshot forward.
Definition: ERF_FirePrecip.H:115
void fire_surface_precip_accum_k0(amrex::MultiFab &accum_2d, const SurfacePrecipAccumulationSources &sources, int klo)
Total liquid-water-equivalent surface precipitation accumulation [kg/m2] of every column,...
Definition: ERF_FirePrecip.H:63
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real fire_precip_rate_mm_hr(amrex::Real accum_now_kgm2, amrex::Real accum_prev_kgm2, amrex::Real dt_s) noexcept
Rain rate [mm/hr] from the change of the surface accumulation over one step.
Definition: ERF_FirePrecip.H:42
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);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool surface_precip_has_source(const SurfacePrecipAccumulationSource &src) noexcept
Definition: ERF_SurfacePrecipitation.H:43
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool surface_precip_has_any_source(const SurfacePrecipAccumulationSources &src) noexcept
Definition: ERF_SurfacePrecipitation.H:61
@ graupel
Definition: ERF_NOAHMP_Fields.H:140
@ rain
Definition: ERF_NOAHMP_Fields.H:138
@ total
Definition: ERF_NOAHMP_Fields.H:137
@ hail
Definition: ERF_NOAHMP_Fields.H:141
@ snow
Definition: ERF_NOAHMP_Fields.H:139
@ p
Definition: ERF_WSM6.H:301
Definition: ERF_ConsoleIO.cpp:17
const amrex::MultiFab * accum
Definition: ERF_SurfacePrecipitation.H:21
amrex::Real native_to_kg_m2
Definition: ERF_SurfacePrecipitation.H:22
Definition: ERF_SurfacePrecipitation.H:34
SurfacePrecipAccumulationSource rain
Definition: ERF_SurfacePrecipitation.H:36
SurfacePrecipAccumulationSource snow
Definition: ERF_SurfacePrecipitation.H:37
SurfacePrecipAccumulationSource hail
Definition: ERF_SurfacePrecipitation.H:39
SurfacePrecipAccumulationSource total
Definition: ERF_SurfacePrecipitation.H:35
SurfacePrecipAccumulationSource graupel
Definition: ERF_SurfacePrecipitation.H:38