Function for computing the buoyancy term to be used in the evolution equation for the z-component of momentum in the slow integrator. There are three options for how buoyancy is computed (two are the same in the absence of moisture).
41 BL_PROFILE(
"make_buoyancy()");
43 const Array<Real,AMREX_SPACEDIM> grav{0.0, 0.0, -solverChoice.
gravity};
44 const GpuArray<Real,AMREX_SPACEDIM> grav_gpu{grav[0], grav[1], grav[2]};
46 const int klo = geom.Domain().smallEnd()[2];
47 const int khi = geom.Domain().bigEnd()[2] + 1;
49 Real rd_over_cp = solverChoice.
rdOcp;
58 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
60 for ( MFIter mfi(buoyancy,TilingIfNotGPU()); mfi.isValid(); ++mfi)
62 Box tbz = mfi.tilebox();
65 if (tbz.smallEnd(2) == klo) tbz.growLo(2,-1);
66 if (tbz.bigEnd(2) == khi) tbz.growHi(2,-1);
68 const Array4<const Real> & cell_data = S_data[
IntVars::cons].array(mfi);
69 const Array4<const Real> & cell_prim = S_prim.array(mfi);
70 const Array4< Real> & buoyancy_fab = buoyancy.array(mfi);
73 const Array4<const Real>& r0_arr = r0.const_array(mfi);
74 const Array4<const Real>& p0_arr = p0.const_array(mfi);
75 const Array4<const Real>& th0_arr = th0.const_array(mfi);
76 const Array4<const Real>& qv0_arr = qv0.const_array(mfi);
78 if ( anelastic && (solverChoice.
moisture_type == MoistureType::None) )
83 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
89 r0_arr,th0_arr,cell_data);
92 else if ( anelastic && (solverChoice.
moisture_type != MoistureType::None) )
97 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
103 r0_arr,th0_arr,qv0_arr,cell_data);
106 else if ( !anelastic && (solverChoice.
moisture_type == MoistureType::None) )
114 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
125 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
131 r0_arr,p0_arr,th0_arr,cell_data);
136 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
142 r0_arr,th0_arr,cell_data);
152 if ( (solverChoice.
moisture_type == MoistureType::Kessler_NoRain) ||
154 (solverChoice.
moisture_type == MoistureType::SAM_NoPrecip_NoIce) )
161 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
170 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
173 r0_arr,th0_arr,qv0_arr,p0_arr,
174 cell_prim,cell_data);
179 ParallelFor(tbz, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
182 r0_arr,th0_arr,qv0_arr,cell_prim);
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_rhopert(int &i, int &j, int &k, const int &n_qstate, amrex::Real const &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:69
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_anelastic(int &i, int &j, int &k, amrex::Real const &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:10
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Thpert(int &i, int &j, int &k, amrex::Real const &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_prim)
Definition: ERF_BuoyancyUtils.H:113
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_Thpert(int &i, int &j, int &k, const int &n_qstate, amrex::Real const &grav_gpu, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &cell_prim)
Definition: ERF_BuoyancyUtils.H:171
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_dry_Tpert(int &i, int &j, int &k, amrex::Real const &grav_gpu, amrex::Real const &rd_over_cp, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &p0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:87
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_Tpert(int &i, int &j, int &k, const int &n_qstate, amrex::Real const &grav_gpu, amrex::Real const &rd_over_cp, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &p0_arr, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:131
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real buoyancy_moist_anelastic(int &i, int &j, int &k, amrex::Real const &grav_gpu, amrex::Real const &rv_over_rd, const amrex::Array4< const amrex::Real > &r0_arr, const amrex::Array4< const amrex::Real > &th0_arr, const amrex::Array4< const amrex::Real > &qv0_arr, const amrex::Array4< const amrex::Real > &cell_data)
Definition: ERF_BuoyancyUtils.H:30
constexpr amrex::Real R_v
Definition: ERF_Constants.H:11
constexpr amrex::Real R_d
Definition: ERF_Constants.H:10
@ qv0_comp
Definition: ERF_IndexDefines.H:67
@ p0_comp
Definition: ERF_IndexDefines.H:64
@ th0_comp
Definition: ERF_IndexDefines.H:66
@ r0_comp
Definition: ERF_IndexDefines.H:63
@ cons
Definition: ERF_IndexDefines.H:150
amrex::Real rdOcp
Definition: ERF_DataStruct.H:711
amrex::Real gravity
Definition: ERF_DataStruct.H:709
MoistureType moisture_type
Definition: ERF_DataStruct.H:759
int buoyancy_type
Definition: ERF_DataStruct.H:690