74 const bool l_use_terrain_fitted_coords = (solverChoice.
mesh_type != MeshType::ConstantDz);
76 const Box domain = geom.Domain();
77 const int domain_klo = domain.smallEnd(2);
78 const int domain_khi = domain.bigEnd(2);
80 const GpuArray<Real, AMREX_SPACEDIM> dxInv = geom.InvCellSizeArray();
85 for ( MFIter mfi(p); mfi.isValid(); ++mfi)
87 Box tbx = mfi.nodaltilebox(0);
88 Box tby = mfi.nodaltilebox(1);
89 Box tbz = mfi.nodaltilebox(2);
92 if (tbz.smallEnd(2) == domain_klo) {
95 if (tbz.bigEnd(2) == domain_khi+1) {
100 const Array4<const Real>& z_nd_arr = z_phys_nd->const_array(mfi);
101 const Array4<const Real>& z_cc_arr = z_phys_cc->const_array(mfi);
103 const Array4<const Real>& p_arr = p.const_array(mfi);
105 const Array4< Real>& gpx_arr = gradp[
GpVars::gpx].array(mfi);
106 const Array4< Real>& gpy_arr = gradp[
GpVars::gpy].array(mfi);
107 const Array4< Real>& gpz_arr = gradp[
GpVars::gpz].array(mfi);
109 ParallelFor(tbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
112 Real
gpx = dxInv[0] * (p_arr(i,j,k) - p_arr(i-1,j,k));
114 if (l_use_terrain_fitted_coords) {
115 Real met_h_xi = (z_cc_arr(i,j,k) - z_cc_arr(i-1,j,k)) * dxInv[0];
117 Real dz_phys_hi, dz_phys_lo;
120 dz_phys_hi = z_cc_arr(i ,j,k+1) - z_cc_arr(i ,j,k );
121 dz_phys_lo = z_cc_arr(i-1,j,k+1) - z_cc_arr(i-1,j,k );
122 gpz_hi = (p_arr(i ,j,k+1) - p_arr(i ,j,k )) / dz_phys_hi;
123 gpz_lo = (p_arr(i-1,j,k+1) - p_arr(i-1,j,k )) / dz_phys_lo;
124 }
else if (k==domain_khi) {
125 dz_phys_hi = z_cc_arr(i ,j,k ) - z_cc_arr(i ,j,k-1);
126 dz_phys_lo = z_cc_arr(i-1,j,k ) - z_cc_arr(i-1,j,k-1);
127 gpz_hi = (p_arr(i ,j,k ) - p_arr(i ,j,k-1)) / dz_phys_hi;
128 gpz_lo = (p_arr(i-1,j,k ) - p_arr(i-1,j,k-1)) / dz_phys_lo;
130 dz_phys_hi = z_cc_arr(i ,j,k+1) - z_cc_arr(i ,j,k-1);
131 dz_phys_lo = z_cc_arr(i-1,j,k+1) - z_cc_arr(i-1,j,k-1);
132 gpz_hi = (p_arr(i ,j,k+1) - p_arr(i ,j,k-1)) / dz_phys_hi;
133 gpz_lo = (p_arr(i-1,j,k+1) - p_arr(i-1,j,k-1)) / dz_phys_lo;
135 Real gpx_metric = met_h_xi * 0.5 * (gpz_hi + gpz_lo);
138 gpx_arr(i,j,k) =
gpx;
141 ParallelFor(tby, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
144 Real
gpy = dxInv[1] * (p_arr(i,j,k) - p_arr(i,j-1,k));
146 if (l_use_terrain_fitted_coords) {
147 Real met_h_eta = (z_cc_arr(i,j,k) - z_cc_arr(i,j-1,k)) * dxInv[1];
149 Real dz_phys_hi, dz_phys_lo;
152 dz_phys_hi = z_cc_arr(i,j ,k+1) - z_cc_arr(i,j ,k );
153 dz_phys_lo = z_cc_arr(i,j-1,k+1) - z_cc_arr(i,j-1,k );
154 gpz_hi = (p_arr(i,j ,k+1) - p_arr(i,j ,k )) / dz_phys_hi;
155 gpz_lo = (p_arr(i,j-1,k+1) - p_arr(i,j-1,k )) / dz_phys_lo;
156 }
else if (k==domain_khi) {
157 dz_phys_hi = z_cc_arr(i,j ,k ) - z_cc_arr(i,j ,k-1);
158 dz_phys_lo = z_cc_arr(i,j-1,k ) - z_cc_arr(i,j-1,k-1);
159 gpz_hi = (p_arr(i,j ,k ) - p_arr(i,j ,k-1)) / dz_phys_hi;
160 gpz_lo = (p_arr(i,j-1,k ) - p_arr(i,j-1,k-1)) / dz_phys_lo;
162 dz_phys_hi = z_cc_arr(i,j ,k+1) - z_cc_arr(i,j ,k-1);
163 dz_phys_lo = z_cc_arr(i,j-1,k+1) - z_cc_arr(i,j-1,k-1);
164 gpz_hi = (p_arr(i,j ,k+1) - p_arr(i,j ,k-1)) / dz_phys_hi;
165 gpz_lo = (p_arr(i,j-1,k+1) - p_arr(i,j-1,k-1)) / dz_phys_lo;
167 Real gpy_metric = met_h_eta * 0.5 * (gpz_hi + gpz_lo);
171 gpy_arr(i,j,k) =
gpy;
174 ParallelFor(tbz, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
177 gpz_arr(i,j,k) = dxInv[2] * ( p_arr(i,j,k)-p_arr(i,j,k-1) ) / met_h_zeta;
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:182
@ gpz
Definition: ERF_IndexDefines.H:152
@ gpy
Definition: ERF_IndexDefines.H:151
@ gpx
Definition: ERF_IndexDefines.H:150
static MeshType mesh_type
Definition: ERF_DataStruct.H:665