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,
96 amrex::MultiFab& z_phys_nd,
97 amrex::Vector<amrex::Real>
const& z_levels_h,
98 amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& phys_bc_type,
100 amrex::MultiFab
const* z_phys_interp =
nullptr);
105 const amrex::MultiFab& z_phys_nd,
106 const amrex::Vector<amrex::Real>& z_levels_h);
111 const amrex::Geometry& geom,
112 const amrex::MultiFab& z_phys_nd);
126 amrex::MultiFab& z_phys_nd,
127 amrex::Vector<amrex::Real>
const& z_levels_h,
129 amrex::MultiFab
const* z_phys_interp =
nullptr);
149 amrex::MultiFab& z_phys_nd,
150 amrex::Vector<amrex::Real>
const& z_levels_h,
152 amrex::MultiFab
const* z_phys_interp);
180 amrex::Vector<amrex::Vector<amrex::Real>>
const& zlevels_stag,
181 amrex::Vector<amrex::Vector<amrex::Real>>& stretched_dz_h,
182 amrex::Vector<amrex::Gpu::DeviceVector<amrex::Real>>& stretched_dz_d);
198 AMREX_GPU_HOST_DEVICE
202 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
203 const amrex::Array4<const amrex::Real>& z_nd)
207 ( 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)
208 - z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
223 AMREX_GPU_HOST_DEVICE
227 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
228 const amrex::Array4<const amrex::Real>& z_nd)
232 ( 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)
233 - z_nd(i ,j,k) - z_nd(i ,j+1,k) - z_nd(i ,j,k+1) - z_nd(i ,j+1,k+1) );
248 AMREX_GPU_HOST_DEVICE
252 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
253 const amrex::Array4<const amrex::Real>& z_nd)
257 ( 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)
258 - z_nd(i,j ,k) - z_nd(i+1,j ,k) - z_nd(i,j ,k+1) - z_nd(i+1,j ,k+1) );
281 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
282 const amrex::Array4<const amrex::Real>& z_nd)
284 amrex::Real met_h_zeta =
myhalf * cellSizeInv[2] * ( (z_nd(i,j ,k+1) - z_nd(i,j ,k))
285 + (z_nd(i,j+1,k+1) - z_nd(i,j+1,k)) );
300 AMREX_GPU_HOST_DEVICE
304 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
305 const amrex::Array4<const amrex::Real>& z_nd)
308 (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)) +
309 (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)) );
328 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
329 const amrex::Array4<const amrex::Real>& z_nd)
331 amrex::Real met_h_eta =
myhalf * cellSizeInv[1] * ( (z_nd(i,j+1,k ) - z_nd(i,j,k ))
332 + (z_nd(i,j+1,k+1) - z_nd(i,j,k+1)) );
351 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
352 const amrex::Array4<const amrex::Real>& z_nd)
354 amrex::Real met_h_zeta =
myhalf * cellSizeInv[2] * ( (z_nd(i ,j,k+1) - z_nd(i ,j,k ))
355 + (z_nd(i+1,j,k+1) - z_nd(i+1,j,k )) );
374 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
375 const amrex::Array4<const amrex::Real>& z_nd)
377 amrex::Real met_h_xi =
myhalf * cellSizeInv[0] * ( (z_nd(i+1,j,k ) - z_nd(i,j,k ))
378 + (z_nd(i+1,j,k+1) - z_nd(i,j,k+1)) );
393 AMREX_GPU_HOST_DEVICE
397 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
398 const amrex::Array4<const amrex::Real>& z_nd)
401 ( (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)) +
402 (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)) );
417 AMREX_GPU_HOST_DEVICE
421 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
422 const amrex::Array4<const amrex::Real>& z_nd)
425 ( (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)) +
426 (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)) );
441 AMREX_GPU_HOST_DEVICE
445 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
446 const amrex::Array4<const amrex::Real>& z_nd)
448 amrex::Real met_h_xi =
myhalf * cellSizeInv[0] * ( (z_nd(i+1,j ,k) - z_nd(i,j ,k))
449 + (z_nd(i+1,j+1,k) - z_nd(i,j+1,k)) );
464 AMREX_GPU_HOST_DEVICE
468 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
469 const amrex::Array4<const amrex::Real>& z_nd)
471 amrex::Real met_h_eta =
myhalf * cellSizeInv[1] * ( (z_nd(i ,j+1,k) - z_nd(i ,j,k))
472 + (z_nd(i+1,j+1,k) - z_nd(i+1,j,k)) );
497 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
498 const amrex::Array4<const amrex::Real>& z_nd)
501 amrex::Real met_h_zeta = dzInv * (z_nd(i,j,k+1) - z_nd(i,j,k));
520 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
521 const amrex::Array4<const amrex::Real>& z_nd)
525 ( z_nd(i+1,j,k) + z_nd(i+1,j,k+1)
526 - z_nd(i-1,j,k) - z_nd(i-1,j,k+1) );
545 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
546 const amrex::Array4<const amrex::Real>& z_nd)
550 ( z_nd(i,j+1,k) + z_nd(i,j+1,k+1)
551 - z_nd(i,j-1,k) - z_nd(i,j-1,k+1) );
572 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
573 const amrex::Array4<const amrex::Real>& z_nd)
577 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
596 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
597 const amrex::Array4<const amrex::Real>& z_nd)
601 ( z_nd(i+1,j+1,k) + z_nd(i+1,j ,k)
602 - z_nd(i-1,j+1,k) - z_nd(i-1,j ,k) );
621 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
622 const amrex::Array4<const amrex::Real>& z_nd)
625 amrex::Real met_h_eta = dyInv * ( z_nd(i,j+1,k) - z_nd(i,j,k) );
646 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
647 const amrex::Array4<const amrex::Real>& z_nd)
651 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
670 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
671 const amrex::Array4<const amrex::Real>& z_nd)
693 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
694 const amrex::Array4<const amrex::Real>& z_nd)
698 ( z_nd(i+1,j+1,k) + z_nd(i,j+1,k)
699 - z_nd(i+1,j-1,k) - z_nd(i,j-1,k) );
717 const amrex::Array4<const amrex::Real>& z_nd)
720 + z_nd(i+1,j ,k) + z_nd(i+1,j ,k+1)
721 + z_nd(i ,j+1,k) + z_nd(i ,j+1,k+1)
722 + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1));
737 AMREX_GPU_HOST_DEVICE
741 const amrex::Array4<const amrex::Real>& z_nd)
744 + z_nd(i ,j+1,k) + z_nd(i+1,j+1,k) );
759 AMREX_GPU_HOST_DEVICE
763 const amrex::Array4<const amrex::Real>& z_nd)
766 + z_nd(i+1,j ,k) + z_nd(i+1,j ,k+1)
767 + z_nd(i ,j+1,k) + z_nd(i ,j+1,k+1)
768 + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1));
773 + z_nd(i+1,j ,0) + z_nd(i+1,j+1,0));
775 return (z_cc - z0_cc);
803 const amrex::Array4<const amrex::Real>& u_arr,
804 const amrex::Array4<const amrex::Real>& v_arr,
805 const amrex::Array4<const amrex::Real>& mf_u,
806 const amrex::Array4<const amrex::Real>& mf_v,
807 const amrex::Array4<const amrex::Real>& z_nd,
808 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
828 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
830 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
835 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
837 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
868 const amrex::Array4<const amrex::Real>& u_arr,
869 const amrex::Array4<const amrex::Real>& v_arr,
870 const amrex::Array4<const amrex::Real>& mf_u,
871 const amrex::Array4<const amrex::Real>& mf_v,
872 const amrex::Array4<const amrex::Real>& z_nd,
873 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
893 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
895 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
900 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
902 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
938 const amrex::Array4<const amrex::Real>& u_arr,
939 const amrex::Array4<const amrex::Real>& v_arr,
940 const amrex::Array4<const amrex::Real>& mf_u,
941 const amrex::Array4<const amrex::Real>& mf_v,
942 const amrex::Array4<const amrex::Real>& z_nd,
943 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
957 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
959 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
964 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
966 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
997 const amrex::Array4<const amrex::Real>& u_arr,
998 const amrex::Array4<const amrex::Real>& v_arr,
999 const amrex::Array4<const amrex::Real>& mf_u,
1000 const amrex::Array4<const amrex::Real>& mf_v,
1001 const amrex::Array4<const amrex::Real>& z_nd,
1002 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
1016 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
1018 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
1023 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
1025 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
1062 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv,
1063 const amrex::Array4<const amrex::Real>& zphys_arr,
1064 const amrex::Array4<amrex::Real>& phi1_arr,
1065 const amrex::Array4<amrex::Real>& phi2_arr,
1066 const amrex::Array4<amrex::Real>& phi3_arr)
1071 phi1_arr(i,j,
klo) = -h_xi * flux * InvNorm;
1072 phi2_arr(i,j,
klo) = -h_eta * flux * InvNorm;
1073 phi3_arr(i,j,
klo) = flux * InvNorm;
1106 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv,
1107 const amrex::Array4<const amrex::Real>& zphys_arr,
1108 const amrex::Array4<const amrex::Real>& u_arr,
1109 const amrex::Array4<const amrex::Real>& v_arr,
1110 const amrex::Array4<const amrex::Real>& w_arr,
1111 const amrex::Array4<amrex::Real>& ,
1112 const amrex::Array4<amrex::Real>& ,
1113 const amrex::Array4<amrex::Real>& ,
1114 const amrex::Array4<amrex::Real>& ,
1115 const amrex::Array4<amrex::Real>& ,
1116 const amrex::Array4<amrex::Real>& tau13_arr,
1117 const amrex::Array4<amrex::Real>& tau31_arr,
1118 const amrex::Array4<amrex::Real>& tau23_arr,
1119 const amrex::Array4<amrex::Real>& tau32_arr)
1122 amrex::Array1D<amrex::Real,0,2> n_hat;
1125 amrex::Array1D<amrex::Real,0,2> u_t_hat;
1128 amrex::Array1D<amrex::Real,0,2> a_hat;
1131 amrex::Array2D<amrex::Real,0,2,0,2> R_mat;
1140 n_hat(0) = -Inormn*h_xi; n_hat(1) = -Inormn*h_eta; n_hat(2) = Inormn;
1145 + v_arr(i-1,j,
klo) + v_arr(i-1,j+1,
klo) );
1147 amrex::Real u_dot_n = n_hat(0)*u + n_hat(1)*v + n_hat(2)*
w;
1148 u_t_hat(0) = u - u_dot_n*n_hat(0);
1149 u_t_hat(1) = v - u_dot_n*n_hat(1);
1150 u_t_hat(2) =
w - u_dot_n*n_hat(2);
1152 + u_t_hat(1)*u_t_hat(1)
1153 + u_t_hat(2)*u_t_hat(2);
1161 for (
int icol(0); icol<3; ++icol) {
1162 u_t_hat(icol) *= Inorm_u_t;
1166 a_hat(0) = n_hat(1)*u_t_hat(2) - n_hat(2)*u_t_hat(1);
1167 a_hat(1) = -(n_hat(0)*u_t_hat(2) - n_hat(2)*u_t_hat(0));
1168 a_hat(2) = n_hat(0)*u_t_hat(1) - n_hat(1)*u_t_hat(0);
1173 for (
int jrow(0); jrow<3; ++jrow) {
1174 R_mat(icol,jrow) = u_t_hat(jrow);
1177 for (
int jrow(0); jrow<3; ++jrow) {
1178 R_mat(icol,jrow) = a_hat(jrow);
1181 for (
int jrow(0); jrow<3; ++jrow) {
1182 R_mat(icol,jrow) = n_hat(jrow);
1189 amrex::Real T12 = (R_mat(0,0)*R_mat(2,1) + R_mat(2,0)*R_mat(0,1))*flux;
1190 amrex::Real T13 = (R_mat(0,0)*R_mat(2,2) + R_mat(0,2)*R_mat(2,0))*flux;
1191 amrex::Real T23 = (R_mat(0,2)*R_mat(2,1) + R_mat(0,1)*R_mat(2,2))*flux;
1196 tau13_arr(i,j,
klo) = -h_xi*T11 - h_eta*T12 + T13;
1197 tau31_arr(i,j,
klo) = h_zeta*T13;
1199 tau23_arr(i,j,
klo) = -h_xi*T12 - h_eta*T22 + T23;
1200 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_KE.H:9
Dimensionless numeric literals and pure mathematical constants.
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:38
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:42
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:23
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:802
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:620
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:519
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 dz0)
AMREX_GPU_HOST_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:444
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:595
AMREX_GPU_HOST_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:396
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:571
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:1057
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:496
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:645
void validate_flat_terrain(int lev, const amrex::MultiFab &z_phys_nd, const amrex::Vector< amrex::Real > &z_levels_h)
FineTerrain
Definition: ERF_TerrainMetrics.H:66
@ 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
void validate_flat_top(int lev, const amrex::Geometry &geom, const amrex::MultiFab &z_phys_nd)
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:716
FineTerrain which_fine_terrain()
Definition: ERF_TerrainMetrics.cpp:528
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:226
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:280
AMREX_GPU_HOST_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:467
AMREX_GPU_HOST_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:420
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:762
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:373
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_GPU_HOST_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:740
amrex::Real get_dzmin_terrain(amrex::MultiFab &z_phys_nd)
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:251
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:544
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:201
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:327
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:669
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:350
AMREX_GPU_HOST_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:303
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:1101
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:692
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 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:867
@ omega
Definition: ERF_Morrison.H:57