1 #ifndef ERF_TERRAIN_METRIC_H_
2 #define ERF_TERRAIN_METRIC_H_
5 #include <AMReX_Geometry.H>
6 #include <AMReX_MultiFab.H>
15 amrex::MultiFab& z_phys_nd, amrex::MultiFab& z_phys_cc,
36 init_zlevels (amrex::Vector<amrex::Vector<amrex::Real>>& zlevels_stag,
37 amrex::Vector<amrex::Vector<amrex::Real>>& stretched_dz_h,
38 amrex::Vector<amrex::Gpu::DeviceVector<amrex::Real>>& stretched_dz_d,
39 amrex::Vector<amrex::Geometry>
const& geom,
40 amrex::Vector<amrex::IntVect>
const& ref_ratio,
86 amrex::MultiFab& z_phys_nd,
87 amrex::Vector<amrex::Real>
const& z_levels_h,
88 amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& phys_bc_type,
90 amrex::MultiFab
const* z_phys_interp =
nullptr);
104 amrex::MultiFab& z_phys_nd,
105 amrex::Vector<amrex::Real>
const& z_levels_h,
107 amrex::MultiFab
const* z_phys_interp =
nullptr);
127 amrex::MultiFab& z_phys_nd,
128 amrex::Vector<amrex::Real>
const& z_levels_h,
130 amrex::MultiFab
const* z_phys_interp);
158 amrex::Vector<amrex::Vector<amrex::Real>>
const& zlevels_stag,
159 amrex::Vector<amrex::Vector<amrex::Real>>& stretched_dz_h,
160 amrex::Vector<amrex::Gpu::DeviceVector<amrex::Real>>& stretched_dz_d);
176 AMREX_GPU_HOST_DEVICE
180 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
181 const amrex::Array4<const amrex::Real>& z_nd)
185 ( 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)
186 -z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
201 AMREX_GPU_HOST_DEVICE
205 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
206 const amrex::Array4<const amrex::Real>& z_nd)
210 ( 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)
211 -z_nd(i ,j,k) - z_nd(i ,j+1,k) - z_nd(i ,j,k+1) - z_nd(i ,j+1,k+1) );
226 AMREX_GPU_HOST_DEVICE
230 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
231 const amrex::Array4<const amrex::Real>& z_nd)
235 ( 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)
236 -z_nd(i,j ,k) - z_nd(i+1,j ,k) - z_nd(i,j ,k+1) - z_nd(i+1,j ,k+1) );
259 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
260 const amrex::Array4<const amrex::Real>& z_nd)
262 amrex::Real met_h_zeta =
myhalf * cellSizeInv[2] * ( (z_nd(i,j ,k+1) - z_nd(i,j ,k))
263 + (z_nd(i,j+1,k+1) - z_nd(i,j+1,k)) );
282 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
283 const amrex::Array4<const amrex::Real>& z_nd)
286 (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)) +
287 (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)) );
306 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
307 const amrex::Array4<const amrex::Real>& z_nd)
309 amrex::Real met_h_eta =
myhalf * cellSizeInv[1] * ( (z_nd(i,j+1,k ) - z_nd(i,j,k ))
310 + (z_nd(i,j+1,k+1) - z_nd(i,j,k+1)) );
329 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
330 const amrex::Array4<const amrex::Real>& z_nd)
332 amrex::Real met_h_zeta =
myhalf * cellSizeInv[2] * ( (z_nd(i ,j,k+1) - z_nd(i ,j,k ))
333 + (z_nd(i+1,j,k+1) - z_nd(i+1,j,k )) );
352 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
353 const amrex::Array4<const amrex::Real>& z_nd)
355 amrex::Real met_h_xi =
myhalf * cellSizeInv[0] * ( (z_nd(i+1,j,k ) - z_nd(i,j,k ))
356 + (z_nd(i+1,j,k+1) - z_nd(i,j,k+1)) );
375 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
376 const amrex::Array4<const amrex::Real>& z_nd)
379 ( (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)) +
380 (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)) );
399 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
400 const amrex::Array4<const amrex::Real>& z_nd)
403 ( (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)) +
404 (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)) );
423 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
424 const amrex::Array4<const amrex::Real>& z_nd)
426 amrex::Real met_h_xi =
myhalf * cellSizeInv[0] * ( (z_nd(i+1,j ,k) - z_nd(i,j ,k))
427 + (z_nd(i+1,j+1,k) - z_nd(i,j+1,k)) );
446 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
447 const amrex::Array4<const amrex::Real>& z_nd)
449 amrex::Real met_h_eta =
myhalf * cellSizeInv[1] * ( (z_nd(i ,j+1,k) - z_nd(i ,j,k))
450 + (z_nd(i+1,j+1,k) - z_nd(i+1,j,k)) );
475 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
476 const amrex::Array4<const amrex::Real>& z_nd)
479 amrex::Real met_h_zeta = dzInv * (z_nd(i,j,k+1) - z_nd(i,j,k));
498 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
499 const amrex::Array4<const amrex::Real>& z_nd)
503 ( z_nd(i+1,j,k) + z_nd(i+1,j,k+1)
504 -z_nd(i-1,j,k) - z_nd(i-1,j,k+1) );
523 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
524 const amrex::Array4<const amrex::Real>& z_nd)
528 ( z_nd(i,j+1,k) + z_nd(i,j+1,k+1)
529 -z_nd(i,j-1,k) - z_nd(i,j-1,k+1) );
550 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
551 const amrex::Array4<const amrex::Real>& z_nd)
555 -z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
574 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
575 const amrex::Array4<const amrex::Real>& z_nd)
579 ( z_nd(i+1,j+1,k) + z_nd(i+1,j ,k)
580 -z_nd(i-1,j+1,k) - z_nd(i-1,j ,k) );
599 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
600 const amrex::Array4<const amrex::Real>& z_nd)
603 amrex::Real met_h_eta = dyInv * ( z_nd(i,j+1,k) - z_nd(i,j,k) );
624 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
625 const amrex::Array4<const amrex::Real>& z_nd)
629 -z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
648 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
649 const amrex::Array4<const amrex::Real>& z_nd)
671 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
672 const amrex::Array4<const amrex::Real>& z_nd)
676 ( z_nd(i+1,j+1,k) + z_nd(i,j+1,k)
677 -z_nd(i+1,j-1,k) - z_nd(i,j-1,k) );
695 const amrex::Array4<const amrex::Real>& z_nd)
698 + z_nd(i+1,j ,k) + z_nd(i+1,j ,k+1)
699 + z_nd(i ,j+1,k) + z_nd(i ,j+1,k+1)
700 + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1));
719 const amrex::Array4<const amrex::Real>& z_nd)
722 + z_nd(i ,j+1,k) + z_nd(i+1,j+1,k) );
741 const amrex::Array4<const amrex::Real>& z_nd)
744 + z_nd(i+1,j ,k) + z_nd(i+1,j ,k+1)
745 + z_nd(i ,j+1,k) + z_nd(i ,j+1,k+1)
746 + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1));
751 +z_nd(i+1,j ,0) + z_nd(i+1,j+1,0));
753 return (z_cc - z0_cc);
781 const amrex::Array4<const amrex::Real>& u_arr,
782 const amrex::Array4<const amrex::Real>& v_arr,
783 const amrex::Array4<const amrex::Real>& mf_u,
784 const amrex::Array4<const amrex::Real>& mf_v,
785 const amrex::Array4<const amrex::Real>& z_nd,
786 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
806 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
808 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
813 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
815 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
846 const amrex::Array4<const amrex::Real>& u_arr,
847 const amrex::Array4<const amrex::Real>& v_arr,
848 const amrex::Array4<const amrex::Real>& mf_u,
849 const amrex::Array4<const amrex::Real>& mf_v,
850 const amrex::Array4<const amrex::Real>& z_nd,
851 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
871 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
873 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
878 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
880 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
916 const amrex::Array4<const amrex::Real>& u_arr,
917 const amrex::Array4<const amrex::Real>& v_arr,
918 const amrex::Array4<const amrex::Real>& mf_u,
919 const amrex::Array4<const amrex::Real>& mf_v,
920 const amrex::Array4<const amrex::Real>& z_nd,
921 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
935 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
937 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
942 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
944 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
975 const amrex::Array4<const amrex::Real>& u_arr,
976 const amrex::Array4<const amrex::Real>& v_arr,
977 const amrex::Array4<const amrex::Real>& mf_u,
978 const amrex::Array4<const amrex::Real>& mf_v,
979 const amrex::Array4<const amrex::Real>& z_nd,
980 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv)
994 myhalf * ( u_arr(i+1,j ,k-1) + u_arr(i+1,j ,k ) );
996 myhalf * ( u_arr(i ,j ,k-1) + u_arr(i ,j ,k ) );
1001 myhalf * ( v_arr(i ,j+1,k-1) + v_arr(i ,j+1,k ) );
1003 myhalf * ( v_arr(i ,j ,k-1) + v_arr(i ,j ,k ) );
1039 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv,
1040 const amrex::Array4<const amrex::Real>& zphys_arr,
1041 const amrex::Array4<amrex::Real>& phi1_arr,
1042 const amrex::Array4<amrex::Real>& phi2_arr,
1043 const amrex::Array4<amrex::Real>& phi3_arr)
1048 phi1_arr(i,j,klo) = -h_xi * flux * InvNorm;
1049 phi2_arr(i,j,klo) = -h_eta * flux * InvNorm;
1050 phi3_arr(i,j,klo) = flux * InvNorm;
1082 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>&
dxInv,
1083 const amrex::Array4<const amrex::Real>& zphys_arr,
1084 const amrex::Array4<const amrex::Real>& u_arr,
1085 const amrex::Array4<const amrex::Real>& v_arr,
1086 const amrex::Array4<const amrex::Real>& w_arr,
1087 const amrex::Array4<amrex::Real>& tau11_arr,
1088 const amrex::Array4<amrex::Real>& tau22_arr,
1089 const amrex::Array4<amrex::Real>& tau33_arr,
1090 const amrex::Array4<amrex::Real>& tau12_arr,
1091 const amrex::Array4<amrex::Real>& tau21_arr,
1092 const amrex::Array4<amrex::Real>& tau13_arr,
1093 const amrex::Array4<amrex::Real>& tau31_arr,
1094 const amrex::Array4<amrex::Real>& tau23_arr,
1095 const amrex::Array4<amrex::Real>& tau32_arr)
1098 amrex::Array1D<amrex::Real,0,2> n_hat;
1101 amrex::Array1D<amrex::Real,0,2> t_hat_1;
1102 amrex::Array1D<amrex::Real,0,2> t_hat_2;
1103 amrex::Array1D<amrex::Real,0,2> u_t_hat;
1106 amrex::Array1D<amrex::Real,0,2> a_hat;
1109 amrex::Array2D<amrex::Real,0,2,0,2> R_mat;
1118 n_hat(0) = Inormn*h_xi; n_hat(1) = Inormn*h_eta; n_hat(2) = -Inormn;
1125 t_hat_1(0) = -Inorm1; t_hat_2(0) =
zero;
1126 t_hat_1(1) =
zero; t_hat_2(1) = -Inorm2;
1127 t_hat_1(2) = -Inorm1*h_xi; t_hat_2(2) = -Inorm2*h_eta;
1131 amrex::Real mag1 = (u_arr(i,j,klo) + h_xi *w_arr(i,j,klo))*Inorm1;
1132 amrex::Real mag2 = (v_arr(i,j,klo) + h_eta*w_arr(i,j,klo))*Inorm2;
1133 for (
int icol(0); icol<3; ++icol) {
1134 u_t_hat(icol) = mag1*t_hat_1(icol) + mag2*t_hat_2(icol);
1135 Norm_u_t += u_t_hat(icol)*u_t_hat(icol);
1143 for (
int icol(0); icol<3; ++icol) {
1144 u_t_hat(icol) *= Inorm_u_t;
1148 a_hat(0) = n_hat(1)*u_t_hat(2) - n_hat(2)*u_t_hat(1);
1149 a_hat(1) = -(n_hat(0)*u_t_hat(2) - n_hat(2)*u_t_hat(0));
1150 a_hat(2) = n_hat(0)*u_t_hat(1) - n_hat(1)*u_t_hat(0);
1155 for (
int icol(0); icol<3; ++icol) {
1156 R_mat(icol,jrow) = u_t_hat(icol);
1159 for (
int icol(0); icol<3; ++icol) {
1160 R_mat(icol,jrow) = a_hat(icol);
1163 for (
int icol(0); icol<3; ++icol) {
1164 R_mat(icol,jrow) = n_hat(icol);
1171 amrex::Real T12 = (R_mat(0,0)*R_mat(2,1) + R_mat(2,0)*R_mat(0,1))*flux;
1172 amrex::Real T13 = (R_mat(0,0)*R_mat(2,2) + R_mat(0,2)*R_mat(2,0))*flux;
1173 amrex::Real T23 = (R_mat(0,1)*R_mat(2,2) + R_mat(0,2)*R_mat(2,1))*flux;
1176 tau11_arr(i,j,klo) = h_zeta*T11;
1177 tau22_arr(i,j,klo) = h_zeta*T22;
1178 tau33_arr(i,j,klo) = -h_xi*T13 - h_eta*T23 + T33;
1180 tau12_arr(i,j,klo) = h_zeta*T12;
1181 tau21_arr(i,j,klo) = h_zeta*T12;
1183 tau13_arr(i,j,klo) = -h_xi*T11 - h_eta*T12 + T13;
1184 tau31_arr(i,j,klo) = h_zeta*T13;
1186 tau23_arr(i,j,klo) = -h_xi*T12 - h_eta*T22 + T23;
1187 tau32_arr(i,j,klo) = h_zeta*T23;
constexpr amrex::Real two
Definition: ERF_Constants.H:10
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
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:780
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:598
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:497
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:573
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:281
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:549
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:474
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:623
AMREX_GPU_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:740
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:398
FineTerrain
Definition: ERF_TerrainMetrics.H:56
@ 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:694
FineTerrain which_fine_terrain()
Definition: ERF_TerrainMetrics.cpp:172
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_GPU_DEVICE AMREX_FORCE_INLINE void rotate_scalar_flux(const int &i, const int &j, const int &klo, 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:1035
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:204
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:258
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void rotate_stress_tensor(const int &i, const int &j, const int &klo, 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 > &tau11_arr, const amrex::Array4< amrex::Real > &tau22_arr, const amrex::Array4< amrex::Real > &tau33_arr, const amrex::Array4< amrex::Real > &tau12_arr, const amrex::Array4< amrex::Real > &tau21_arr, 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:1078
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:351
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:718
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:422
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_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:522
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_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:305
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:647
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:328
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:374
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:670
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:445
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:845
@ omega
Definition: ERF_Morrison.H:54