6 #ifndef ERF_FIRE_UTILS_H
7 #define ERF_FIRE_UTILS_H
9 #include <AMReX_MultiFab.H>
10 #include <AMReX_Geometry.H>
11 #include <AMReX_MFIter.H>
38 const amrex::MultiFab& S_atm,
39 const amrex::Geometry& )
41 using namespace amrex;
48 for (MFIter mfi(RH_out); mfi.isValid(); ++mfi) {
49 const Box& bx = mfi.tilebox();
50 Array4<Real> rh_arr = RH_out.array(mfi);
51 Array4<const Real> S_arr = S_atm.const_array(mfi);
54 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
const IntVect& iv) {
77 Real p_mbar =
p * 0.01_rt;
93 if (q_sat > 1.0e-10_rt) {
98 RH = amrex::min(1.0_rt, amrex::max(0.0_rt, RH));
100 rh_arr(i, j, k) = RH;
118 const amrex::MultiFab& S_atm)
120 using namespace amrex;
122 for (MFIter mfi(T_out); mfi.isValid(); ++mfi) {
123 const Box& bx = mfi.tilebox();
124 Array4<Real> t_arr = T_out.array(mfi);
125 Array4<const Real> S_arr = S_atm.const_array(mfi);
126 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
const IntVect& iv) {
138 t_arr(i, j, k) = (rho_th /
rho) * exner;
151 for (amrex::MFIter mfi(dst_2d); mfi.isValid(); ++mfi) {
152 amrex::Array4<amrex::Real> d = dst_2d.array(mfi);
153 amrex::Array4<const amrex::Real> s = src_3d.const_array(mfi);
155 d(iv[0], iv[1], 0) = s(iv[0], iv[1], 0);
176 void fire_host_copy(amrex::MultiFab& dst,
const amrex::MultiFab& src,
int ncomp = 1,
int nghost = 0)
178 AMREX_ALWAYS_ASSERT(dst.boxArray() == src.boxArray() && dst.DistributionMap() == src.DistributionMap());
179 amrex::MultiFab::Copy(dst, src, 0, 0, ncomp, nghost);
180 amrex::Gpu::streamSynchronize();
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:51
constexpr amrex::Real R_d
Definition: ERF_Constants.H:49
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getExnergivenP(const amrex::Real P, const amrex::Real rdOcp)
Definition: ERF_EOS.H:141
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getPgivenRTh(const amrex::Real rhotheta, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:81
void fire_copy_k0_plane(amrex::MultiFab &dst_2d, const amrex::MultiFab &src_3d)
Definition: ERF_FireUtils.H:149
void fire_host_copy(amrex::MultiFab &dst, const amrex::MultiFab &src, int ncomp=1, int nghost=0)
Copy a MultiFab between device and host-accessible memory, for an engine whose fire physics runs on t...
Definition: ERF_FireUtils.H:176
void compute_t_from_conservative(amrex::MultiFab &T_out, const amrex::MultiFab &S_atm)
Air temperature [K] at k = 0 from the conserved state.
Definition: ERF_FireUtils.H:117
void compute_rh_from_conservative(amrex::MultiFab &RH_out, const amrex::MultiFab &S_atm, const amrex::Geometry &)
Compute relative humidity from conserved atmospheric variables at k=0.
Definition: ERF_FireUtils.H:37
#define Rho_comp
Definition: ERF_IndexDefines.H:53
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:54
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:66
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_qsat_from_esat(amrex::Real esat, amrex::Real p)
Definition: ERF_MicrophysicsUtils.H:233
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real erf_esatw(amrex::Real t, bool use_empirical=false)
Definition: ERF_MicrophysicsUtils.H:159
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
@ rho
Definition: ERF_Kessler.H:25
@ theta
Definition: ERF_Kessler.H:26
@ qv
Definition: ERF_Kessler.H:31
@ p
Definition: ERF_WSM6.H:301
Definition: ERF_ConsoleIO.cpp:17