1 #ifndef ERF_TERRAIN_METRIC_H_
2 #define ERF_TERRAIN_METRIC_H_
5 #include <AMReX_Geometry.H>
6 #include <AMReX_MultiFab.H>
16 amrex::MultiFab& z_phys_nd, amrex::MultiFab& z_phys_cc,
47 init_zlevels (amrex::Vector<amrex::Vector<amrex::Real>>& zlevels_stag,
48 amrex::Vector<amrex::Vector<amrex::Real>>& stretched_dz_h,
49 amrex::Vector<amrex::Gpu::DeviceVector<amrex::Real>>& stretched_dz_d,
50 amrex::Vector<amrex::Geometry>
const& geom,
51 amrex::Vector<amrex::IntVect>
const& ref_ratio,
97 amrex::MultiFab& z_phys_nd,
98 amrex::Vector<amrex::Real>
const& z_levels_h,
99 amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& phys_bc_type,
101 amrex::MultiFab
const* z_phys_interp =
nullptr);
115 amrex::MultiFab& z_phys_nd,
116 amrex::Vector<amrex::Real>
const& z_levels_h,
118 amrex::MultiFab
const* z_phys_interp =
nullptr);
138 amrex::MultiFab& z_phys_nd,
139 amrex::Vector<amrex::Real>
const& z_levels_h,
141 amrex::MultiFab
const* z_phys_interp);
169 amrex::Vector<amrex::Vector<amrex::Real>>
const& zlevels_stag,
170 amrex::Vector<amrex::Vector<amrex::Real>>& stretched_dz_h,
171 amrex::Vector<amrex::Gpu::DeviceVector<amrex::Real>>& stretched_dz_d);
187 AMREX_GPU_HOST_DEVICE
191 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
192 const amrex::Array4<const amrex::Real>& z_nd)
196 ( z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k+1) + z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
197 - z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
212 AMREX_GPU_HOST_DEVICE
216 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
217 const amrex::Array4<const amrex::Real>& z_nd)
221 ( z_nd(i+1,j,k) + z_nd(i+1,j+1,k) + z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k+1)
222 - z_nd(i ,j,k) - z_nd(i ,j+1,k) - z_nd(i ,j,k+1) - z_nd(i ,j+1,k+1) );
237 AMREX_GPU_HOST_DEVICE
241 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
242 const amrex::Array4<const amrex::Real>& z_nd)
246 ( z_nd(i,j+1,k) + z_nd(i+1,j+1,k) + z_nd(i,j+1,k+1) + z_nd(i+1,j+1,k+1)
247 - z_nd(i,j ,k) - z_nd(i+1,j ,k) - z_nd(i,j ,k+1) - z_nd(i+1,j ,k+1) );
270 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
271 const amrex::Array4<const amrex::Real>& z_nd)
273 amrex::Real met_h_zeta =
myhalf * cellSizeInv[2] * ( (z_nd(i,j ,k+1) - z_nd(i,j ,k))
274 + (z_nd(i,j+1,k+1) - z_nd(i,j+1,k)) );
293 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
294 const amrex::Array4<const amrex::Real>& z_nd)
297 (z_nd(i+1,j ,k ) - z_nd(i-1,j ,k )) + (z_nd(i+1,j ,k+1) - z_nd(i-1,j ,k+1)) +
298 (z_nd(i+1,j+1,k ) - z_nd(i-1,j+1,k )) + (z_nd(i+1,j+1,k+1) - z_nd(i-1,j+1,k+1)) );
317 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
318 const amrex::Array4<const amrex::Real>& z_nd)
320 amrex::Real met_h_eta =
myhalf * cellSizeInv[1] * ( (z_nd(i,j+1,k ) - z_nd(i,j,k ))
321 + (z_nd(i,j+1,k+1) - z_nd(i,j,k+1)) );
340 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
341 const amrex::Array4<const amrex::Real>& z_nd)
343 amrex::Real met_h_zeta =
myhalf * cellSizeInv[2] * ( (z_nd(i ,j,k+1) - z_nd(i ,j,k ))
344 + (z_nd(i+1,j,k+1) - z_nd(i+1,j,k )) );
363 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
364 const amrex::Array4<const amrex::Real>& z_nd)
366 amrex::Real met_h_xi =
myhalf * cellSizeInv[0] * ( (z_nd(i+1,j,k ) - z_nd(i,j,k ))
367 + (z_nd(i+1,j,k+1) - z_nd(i,j,k+1)) );
386 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
387 const amrex::Array4<const amrex::Real>& z_nd)
390 ( (z_nd(i ,j+1,k ) - z_nd(i ,j-1,k )) + (z_nd(i ,j+1,k+1) - z_nd(i ,j-1,k+1)) +
391 (z_nd(i+1,j+1,k ) - z_nd(i+1,j-1,k )) + (z_nd(i+1,j+1,k+1) - z_nd(i+1,j-1,k+1)) );
410 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
411 const amrex::Array4<const amrex::Real>& z_nd)
414 ( (z_nd(i ,j ,k+1) - z_nd(i ,j ,k-1)) + (z_nd(i+1,j ,k+1) - z_nd(i+1,j ,k-1)) +
415 (z_nd(i ,j+1,k+1) - z_nd(i ,j+1,k-1)) + (z_nd(i+1,j+1,k+1) - z_nd(i+1,j+1,k-1)) );
434 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
435 const amrex::Array4<const amrex::Real>& z_nd)
437 amrex::Real met_h_xi =
myhalf * cellSizeInv[0] * ( (z_nd(i+1,j ,k) - z_nd(i,j ,k))
438 + (z_nd(i+1,j+1,k) - z_nd(i,j+1,k)) );
457 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
458 const amrex::Array4<const amrex::Real>& z_nd)
460 amrex::Real met_h_eta =
myhalf * cellSizeInv[1] * ( (z_nd(i ,j+1,k) - z_nd(i ,j,k))
461 + (z_nd(i+1,j+1,k) - z_nd(i+1,j,k)) );
486 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
487 const amrex::Array4<const amrex::Real>& z_nd)
490 amrex::Real met_h_zeta = dzInv * (z_nd(i,j,k+1) - z_nd(i,j,k));
509 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
510 const amrex::Array4<const amrex::Real>& z_nd)
514 ( z_nd(i+1,j,k) + z_nd(i+1,j,k+1)
515 - z_nd(i-1,j,k) - z_nd(i-1,j,k+1) );
534 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
535 const amrex::Array4<const amrex::Real>& z_nd)
539 ( z_nd(i,j+1,k) + z_nd(i,j+1,k+1)
540 - z_nd(i,j-1,k) - z_nd(i,j-1,k+1) );
561 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
562 const amrex::Array4<const amrex::Real>& z_nd)
566 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
585 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
586 const amrex::Array4<const amrex::Real>& z_nd)
590 ( z_nd(i+1,j+1,k) + z_nd(i+1,j ,k)
591 - z_nd(i-1,j+1,k) - z_nd(i-1,j ,k) );
610 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
611 const amrex::Array4<const amrex::Real>& z_nd)
614 amrex::Real met_h_eta = dyInv * ( z_nd(i,j+1,k) - z_nd(i,j,k) );
635 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
636 const amrex::Array4<const amrex::Real>& z_nd)
640 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
659 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
660 const amrex::Array4<const amrex::Real>& z_nd)
682 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
683 const amrex::Array4<const amrex::Real>& z_nd)
687 ( z_nd(i+1,j+1,k) + z_nd(i,j+1,k)
688 - z_nd(i+1,j-1,k) - z_nd(i,j-1,k) );
706 const amrex::Array4<const amrex::Real>& z_nd)
709 + z_nd(i+1,j ,k) + z_nd(i+1,j ,k+1)
710 + z_nd(i ,j+1,k) + z_nd(i ,j+1,k+1)
711 + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1));
730 const amrex::Array4<const amrex::Real>& z_nd)
733 + z_nd(i ,j+1,k) + z_nd(i+1,j+1,k) );
748 AMREX_GPU_HOST_DEVICE
752 const amrex::Array4<const amrex::Real>& z_nd)
755 + z_nd(i+1,j ,k) + z_nd(i+1,j ,k+1)
756 + z_nd(i ,j+1,k) + z_nd(i ,j+1,k+1)
757 + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1));
762 + z_nd(i+1,j ,0) + z_nd(i+1,j+1,0));
764 return (z_cc - z0_cc);
792 const amrex::Array4<const amrex::Real>& u_arr,
793 const amrex::Array4<const amrex::Real>& v_arr,
794 const amrex::Array4<const amrex::Real>& mf_u,
795 const amrex::Array4<const amrex::Real>& mf_v,
796 const amrex::Array4<const amrex::Real>& z_nd,
797 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
817 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
819 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
824 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
826 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
857 const amrex::Array4<const amrex::Real>& u_arr,
858 const amrex::Array4<const amrex::Real>& v_arr,
859 const amrex::Array4<const amrex::Real>& mf_u,
860 const amrex::Array4<const amrex::Real>& mf_v,
861 const amrex::Array4<const amrex::Real>& z_nd,
862 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
882 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
884 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
889 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
891 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
927 const amrex::Array4<const amrex::Real>& u_arr,
928 const amrex::Array4<const amrex::Real>& v_arr,
929 const amrex::Array4<const amrex::Real>& mf_u,
930 const amrex::Array4<const amrex::Real>& mf_v,
931 const amrex::Array4<const amrex::Real>& z_nd,
932 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
946 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
948 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
953 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
955 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
986 const amrex::Array4<const amrex::Real>& u_arr,
987 const amrex::Array4<const amrex::Real>& v_arr,
988 const amrex::Array4<const amrex::Real>& mf_u,
989 const amrex::Array4<const amrex::Real>& mf_v,
990 const amrex::Array4<const amrex::Real>& z_nd,
991 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
1005 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
1007 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
1012 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
1014 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
1051 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv,
1052 const amrex::Array4<const amrex::Real>& zphys_arr,
1053 const amrex::Array4<amrex::Real>& phi1_arr,
1054 const amrex::Array4<amrex::Real>& phi2_arr,
1055 const amrex::Array4<amrex::Real>& phi3_arr)
1060 phi1_arr(i,j,
klo) = -h_xi * flux * InvNorm;
1061 phi2_arr(i,j,
klo) = -h_eta * flux * InvNorm;
1062 phi3_arr(i,j,
klo) = flux * InvNorm;
1095 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv,
1096 const amrex::Array4<const amrex::Real>& zphys_arr,
1097 const amrex::Array4<const amrex::Real>& u_arr,
1098 const amrex::Array4<const amrex::Real>& v_arr,
1099 const amrex::Array4<const amrex::Real>& w_arr,
1100 const amrex::Array4<amrex::Real>& ,
1101 const amrex::Array4<amrex::Real>& ,
1102 const amrex::Array4<amrex::Real>& ,
1103 const amrex::Array4<amrex::Real>& ,
1104 const amrex::Array4<amrex::Real>& ,
1105 const amrex::Array4<amrex::Real>& tau13_arr,
1106 const amrex::Array4<amrex::Real>& tau31_arr,
1107 const amrex::Array4<amrex::Real>& tau23_arr,
1108 const amrex::Array4<amrex::Real>& tau32_arr)
1111 amrex::Array1D<amrex::Real,0,2> n_hat;
1114 amrex::Array1D<amrex::Real,0,2> u_t_hat;
1117 amrex::Array1D<amrex::Real,0,2> a_hat;
1120 amrex::Array2D<amrex::Real,0,2,0,2> R_mat;
1129 n_hat(0) = -Inormn*h_xi; n_hat(1) = -Inormn*h_eta; n_hat(2) = Inormn;
1134 + v_arr(i-1,j,
klo) + v_arr(i-1,j+1,
klo) );
1136 amrex::Real u_dot_n = n_hat(0)*u + n_hat(1)*v + n_hat(2)*
w;
1137 u_t_hat(0) = u - u_dot_n*n_hat(0);
1138 u_t_hat(1) = v - u_dot_n*n_hat(1);
1139 u_t_hat(2) =
w - u_dot_n*n_hat(2);
1141 + u_t_hat(1)*u_t_hat(1)
1142 + u_t_hat(2)*u_t_hat(2);
1150 for (
int icol(0); icol<3; ++icol) {
1151 u_t_hat(icol) *= Inorm_u_t;
1155 a_hat(0) = n_hat(1)*u_t_hat(2) - n_hat(2)*u_t_hat(1);
1156 a_hat(1) = -(n_hat(0)*u_t_hat(2) - n_hat(2)*u_t_hat(0));
1157 a_hat(2) = n_hat(0)*u_t_hat(1) - n_hat(1)*u_t_hat(0);
1162 for (
int jrow(0); jrow<3; ++jrow) {
1163 R_mat(icol,jrow) = u_t_hat(jrow);
1166 for (
int jrow(0); jrow<3; ++jrow) {
1167 R_mat(icol,jrow) = a_hat(jrow);
1170 for (
int jrow(0); jrow<3; ++jrow) {
1171 R_mat(icol,jrow) = n_hat(jrow);
1178 amrex::Real T12 = (R_mat(0,0)*R_mat(2,1) + R_mat(2,0)*R_mat(0,1))*flux;
1179 amrex::Real T13 = (R_mat(0,0)*R_mat(2,2) + R_mat(0,2)*R_mat(2,0))*flux;
1180 amrex::Real T23 = (R_mat(0,2)*R_mat(2,1) + R_mat(0,1)*R_mat(2,2))*flux;
1185 tau13_arr(i,j,
klo) = -h_xi*T11 - h_eta*T12 + T13;
1186 tau31_arr(i,j,
klo) = h_zeta*T13;
1188 tau23_arr(i,j,
klo) = -h_xi*T12 - h_eta*T22 + T23;
1189 tau32_arr(i,j,
klo) = h_zeta*T23;
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
const int klo
Definition: ERF_InitCustomPert_ABL.H:75
Dimensionless numeric literals and pure mathematical constants.
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:31
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:30
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:35
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:34
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real OmegaFromW(int &i, int &j, int &k, amrex::Real w, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &mf_u, const amrex::Array4< const amrex::Real > &mf_v, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:791
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtEdgeCenterJ(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:609
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtEdgeCenterK(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:508
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtEdgeCenterJ(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:584
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtIface(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:292
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterJ(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:560
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void rotate_scalar_flux(const int &i, const int &j, const int &klo, const int &, const amrex::Real &flux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &zphys_arr, const amrex::Array4< amrex::Real > &phi1_arr, const amrex::Array4< amrex::Real > &phi2_arr, const amrex::Array4< amrex::Real > &phi3_arr)
Definition: ERF_TerrainMetrics.H:1046
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterK(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:485
void init_zlevels(amrex::Vector< amrex::Vector< amrex::Real >> &zlevels_stag, amrex::Vector< amrex::Vector< amrex::Real >> &stretched_dz_h, amrex::Vector< amrex::Gpu::DeviceVector< amrex::Real >> &stretched_dz_d, amrex::Vector< amrex::Geometry > const &geom, amrex::Vector< amrex::IntVect > const &ref_ratio, const amrex::Real grid_stretching_ratio, const amrex::Real zsurf, const amrex::Real dz0)
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterI(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:634
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtKface(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:409
FineTerrain
Definition: ERF_TerrainMetrics.H:67
@ Transform
add the fine terrain as a correction that decays with height
@ None
caller has not prepared a fine mesh from the coarse level
@ Interpolate
use the coordinates interpolated from the coarse level as-is
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_Z_AtCellCenter(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:705
FineTerrain which_fine_terrain()
Definition: ERF_TerrainMetrics.cpp:412
void init_which_terrain_grid(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::Vector< amrex::Real > const &z_levels_h, FineTerrain fine_terrain=FineTerrain::None, amrex::MultiFab const *z_phys_interp=nullptr)
amrex::BoxArray join_boxes_stacked_in_z(const amrex::BoxArray &ba)
void init_fine_terrain_grid(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::Vector< amrex::Real > const &z_levels_h, FineTerrain fine_terrain, amrex::MultiFab const *z_phys_interp)
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:215
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtIface(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:269
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_Zrel_AtCellCenter(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:751
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtJface(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:362
void update_stretched_dz(int lev, amrex::Vector< amrex::Vector< amrex::Real >> const &zlevels_stag, amrex::Vector< amrex::Vector< amrex::Real >> &stretched_dz_h, amrex::Vector< amrex::Gpu::DeviceVector< amrex::Real >> &stretched_dz_d)
void make_terrain_fitted_coords(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::Vector< amrex::Real > const &z_levels_h, amrex::GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &phys_bc_type, FineTerrain fine_terrain=FineTerrain::None, amrex::MultiFab const *z_phys_interp=nullptr)
amrex::Real get_dzmin_terrain(amrex::MultiFab &z_phys_nd)
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_Z_AtWFace(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:729
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtKface(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:433
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:240
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtEdgeCenterK(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:533
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:190
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtIface(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:316
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtEdgeCenterI(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:658
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtJface(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:339
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtJface(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:385
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void rotate_stress_tensor(const int &i, const int &j, const int &klo, const int &, const amrex::Real &flux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &zphys_arr, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &w_arr, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &, const amrex::Array4< amrex::Real > &tau13_arr, const amrex::Array4< amrex::Real > &tau31_arr, const amrex::Array4< amrex::Real > &tau23_arr, const amrex::Array4< amrex::Real > &tau32_arr)
Definition: ERF_TerrainMetrics.H:1090
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtEdgeCenterI(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:681
void init_default_zphys(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::MultiFab &z_phys_cc, amrex::Real z_offset=zero)
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtKface(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:456
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real WFromOmega(int &i, int &j, int &k, amrex::Real omega, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &mf_u, const amrex::Array4< const amrex::Real > &mf_v, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:856
@ omega
Definition: ERF_Morrison.H:55