1 #ifndef ERF_TIMESTEP_UTILS_H_
2 #define ERF_TIMESTEP_UTILS_H_
7 #include <AMReX_REAL.H>
8 #include <AMReX_Array.H>
9 #include <AMReX_Array4.H>
10 #include <AMReX_Algorithm.H>
11 #include <AMReX_Math.H>
53 const amrex::Array4<const amrex::Real>& z_nd,
54 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxinv,
55 const bool l_terrain_aware,
56 const bool l_substepping,
63 if (l_terrain_aware) {
80 const amrex::Real Uacoustic =
third * c * std::sqrt( dxinv[0] * (dxinv[0] +
two * idz * amrex::Math::abs(h_xi )) );
81 const amrex::Real Vacoustic =
third * c * std::sqrt( dxinv[1] * (dxinv[1] +
two * idz * amrex::Math::abs(h_eta)) );
82 if ((nxc > 1) && (nyc == 1)) {
84 inv_dt = amrex::max(abs_u*dxinv[0] + Uacoustic,
86 }
else if ((nyc > 1) && (nxc == 1)) {
88 inv_dt = amrex::max(abs_v*dxinv[1] + Vacoustic,
92 inv_dt = amrex::max(abs_u*dxinv[0] + Uacoustic,
93 abs_v*dxinv[1] + Vacoustic,
101 const amrex::Real Uacoustic = c * amrex::Math::abs(dxinv[0] + idz * h_xi );
102 const amrex::Real Vacoustic = c * amrex::Math::abs(dxinv[1] + idz * h_eta);
103 const amrex::Real Oacoustic = c * amrex::Math::abs(idz);
104 if (nxc > 1 && nyc > 1) {
106 inv_dt = amrex::max(abs_u*dxinv[0] + Uacoustic,
107 abs_v*dxinv[1] + Vacoustic,
108 abs_w*idz + Oacoustic);
109 }
else if (nxc > 1) {
111 inv_dt = amrex::max(abs_u*dxinv[0] + Uacoustic,
112 abs_w*idz + Oacoustic);
113 }
else if (nyc > 1) {
115 inv_dt = amrex::max(abs_v*dxinv[1] + Vacoustic,
116 abs_w*idz + Oacoustic);
119 inv_dt = abs_w*idz + Oacoustic;
152 AMREX_GPU_HOST_DEVICE
159 const amrex::Array4<const amrex::Real>& z_nd,
160 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxinv,
161 const bool l_terrain_aware)
164 if (l_terrain_aware) {
168 return amrex::max(amrex::Math::abs(u)*dxinv[0],
169 amrex::Math::abs(v)*dxinv[1],
170 amrex::Math::abs(
w)*idz );
constexpr amrex::Real two
Definition: ERF_Constants.H:10
constexpr amrex::Real bogus_large_value
Definition: ERF_Constants.H:26
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real third
Definition: ERF_Constants.H:15
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtCellCenter(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:204
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtCellCenter(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:229
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtCellCenter(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:179
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_InvDt_Compressible(const int i, const int j, const int k, const amrex::Real c, const amrex::Real u, const amrex::Real v, const amrex::Real w, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxinv, const bool l_terrain_aware, const bool l_substepping, const int nxc=2, const int nyc=2)
Definition: ERF_TimestepUtils.H:48
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_InvDt_Anelastic(const int i, const int j, const int k, const amrex::Real u, const amrex::Real v, const amrex::Real w, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxinv, const bool l_terrain_aware)
Definition: ERF_TimestepUtils.H:155