ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ERF_ComputeStrain_T.cpp File Reference
#include <ERF_Diffusion.H>
#include <ERF_TerrainMetrics.H>
Include dependency graph for ERF_ComputeStrain_T.cpp:

Functions

void ComputeStrain_T (Box bxcc, Box tbxxy, Box tbxxz, Box tbxyz, Box domain, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &w, Array4< Real > &tau11, Array4< Real > &tau22, Array4< Real > &tau33, Array4< Real > &tau12, Array4< Real > &tau21, Array4< Real > &tau13, Array4< Real > &tau31, Array4< Real > &tau23, Array4< Real > &tau32, const Array4< const Real > &z_nd, const Array4< const Real > &detJ, const BCRec *bc_ptr, const GpuArray< Real, AMREX_SPACEDIM > &dxInv, const Array4< const Real > &mf_mx, const Array4< const Real > &mf_ux, const Array4< const Real > &mf_vx, const Array4< const Real > &mf_my, const Array4< const Real > &mf_uy, const Array4< const Real > &mf_vy)
 

Function Documentation

◆ ComputeStrain_T()

void ComputeStrain_T ( Box  bxcc,
Box  tbxxy,
Box  tbxxz,
Box  tbxyz,
Box  domain,
const Array4< const Real > &  u,
const Array4< const Real > &  v,
const Array4< const Real > &  w,
Array4< Real > &  tau11,
Array4< Real > &  tau22,
Array4< Real > &  tau33,
Array4< Real > &  tau12,
Array4< Real > &  tau21,
Array4< Real > &  tau13,
Array4< Real > &  tau31,
Array4< Real > &  tau23,
Array4< Real > &  tau32,
const Array4< const Real > &  z_nd,
const Array4< const Real > &  detJ,
const BCRec *  bc_ptr,
const GpuArray< Real, AMREX_SPACEDIM > &  dxInv,
const Array4< const Real > &  mf_mx,
const Array4< const Real > &  mf_ux,
const Array4< const Real > &  mf_vx,
const Array4< const Real > &  mf_my,
const Array4< const Real > &  mf_uy,
const Array4< const Real > &  mf_vy 
)

Function for computing the strain rates with terrain.

Parameters
[in]bxcccell center box for tau_ii
[in]tbxxynodal xy box for tau_12
[in]tbxxznodal xz box for tau_13
[in]tbxyznodal yz box for tau_23
[in]ux-direction velocity
[in]vy-direction velocity
[in]wz-direction velocity
[out]tau1111 strain
[out]tau2222 strain
[out]tau3333 strain
[out]tau1212 strain
[out]tau1313 strain
[out]tau2121 strain
[out]tau2323 strain
[out]tau3131 strain
[out]tau3232 strain
[in]z_ndnodal array of physical z heights
[in]bc_ptrcontainer with boundary condition types
[in]dxInvinverse cell size array
[in]mf_mxmap factor at cell center
[in]mf_uxmap factor at x-face
[in]mf_vxmap factor at y-face
[in]mf_mymap factor at cell center
[in]mf_uymap factor at x-face
[in]mf_vymap factor at y-face
55 {
56  // Convert domain to each index type to test if we are on dirichlet boundary
57  Box domain_xy = convert(domain, tbxxy.ixType());
58  Box domain_xz = convert(domain, tbxxz.ixType());
59  Box domain_yz = convert(domain, tbxyz.ixType());
60 
61  const auto& dom_lo = lbound(domain);
62  const auto& dom_hi = ubound(domain);
63 
64  // Dirichlet on left or right plane
65  bool xl_v_dir = ( (bc_ptr[BCVars::yvel_bc].lo(0) == ERFBCType::ext_dir) ||
66  (bc_ptr[BCVars::yvel_bc].lo(0) == ERFBCType::ext_dir_upwind) ||
67  (bc_ptr[BCVars::yvel_bc].lo(0) == ERFBCType::ext_dir_ingested) );
68  xl_v_dir = ( xl_v_dir && (tbxxy.smallEnd(0) == domain_xy.smallEnd(0)) );
69 
70  bool xh_v_dir = ( (bc_ptr[BCVars::yvel_bc].hi(0) == ERFBCType::ext_dir) ||
71  (bc_ptr[BCVars::yvel_bc].hi(0) == ERFBCType::ext_dir_upwind) ||
72  (bc_ptr[BCVars::yvel_bc].hi(0) == ERFBCType::ext_dir_ingested) );
73  xh_v_dir = ( xh_v_dir && (tbxxy.bigEnd(0) == domain_xy.bigEnd(0)) );
74 
75  bool xl_w_dir = ( (bc_ptr[BCVars::zvel_bc].lo(0) == ERFBCType::ext_dir) ||
76  (bc_ptr[BCVars::zvel_bc].lo(0) == ERFBCType::ext_dir_upwind) ||
77  (bc_ptr[BCVars::zvel_bc].lo(0) == ERFBCType::ext_dir_ingested) );
78  xl_w_dir = ( xl_w_dir && (tbxxz.smallEnd(0) == domain_xz.smallEnd(0)) );
79 
80  bool xh_w_dir = ( (bc_ptr[BCVars::zvel_bc].hi(0) == ERFBCType::ext_dir) ||
81  (bc_ptr[BCVars::zvel_bc].hi(0) == ERFBCType::ext_dir_upwind) ||
82  (bc_ptr[BCVars::zvel_bc].hi(0) == ERFBCType::ext_dir_ingested) );
83  xh_w_dir = ( xh_w_dir && (tbxxz.bigEnd(0) == domain_xz.bigEnd(0)) );
84 
85  // Dirichlet on front or back plane
86  bool yl_u_dir = ( (bc_ptr[BCVars::xvel_bc].lo(1) == ERFBCType::ext_dir) ||
87  (bc_ptr[BCVars::xvel_bc].lo(1) == ERFBCType::ext_dir_upwind) ||
88  (bc_ptr[BCVars::xvel_bc].lo(1) == ERFBCType::ext_dir_ingested) );
89  yl_u_dir = ( yl_u_dir && (tbxxy.smallEnd(1) == domain_xy.smallEnd(1)) );
90 
91  bool yh_u_dir = ( (bc_ptr[BCVars::xvel_bc].hi(1) == ERFBCType::ext_dir) ||
92  (bc_ptr[BCVars::xvel_bc].hi(1) == ERFBCType::ext_dir_upwind) ||
93  (bc_ptr[BCVars::xvel_bc].hi(1) == ERFBCType::ext_dir_ingested) );
94  yh_u_dir = ( yh_u_dir && (tbxxy.bigEnd(1) == domain_xy.bigEnd(1)) );
95 
96  bool yl_w_dir = ( (bc_ptr[BCVars::zvel_bc].lo(1) == ERFBCType::ext_dir) ||
97  (bc_ptr[BCVars::zvel_bc].lo(1) == ERFBCType::ext_dir_upwind) ||
98  (bc_ptr[BCVars::zvel_bc].lo(1) == ERFBCType::ext_dir_ingested) );
99  yl_w_dir = ( yl_w_dir && (tbxyz.smallEnd(1) == domain_yz.smallEnd(1)) );
100 
101  bool yh_w_dir = ( (bc_ptr[BCVars::zvel_bc].hi(1) == ERFBCType::ext_dir) ||
102  (bc_ptr[BCVars::zvel_bc].hi(1) == ERFBCType::ext_dir_upwind) ||
103  (bc_ptr[BCVars::zvel_bc].hi(1) == ERFBCType::ext_dir_ingested) );
104  yh_w_dir = ( yh_w_dir && (tbxyz.bigEnd(1) == domain_yz.bigEnd(1)) );
105 
106  // Dirichlet on top or bottom plane
107  bool zl_u_dir = ( (bc_ptr[BCVars::xvel_bc].lo(2) == ERFBCType::ext_dir) ||
108  (bc_ptr[BCVars::xvel_bc].lo(2) == ERFBCType::ext_dir_ingested) );
109  zl_u_dir = ( zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) );
110 
111  bool zh_u_dir = ( (bc_ptr[BCVars::xvel_bc].hi(2) == ERFBCType::ext_dir) ||
112  (bc_ptr[BCVars::xvel_bc].hi(2) == ERFBCType::ext_dir_ingested) );
113  zh_u_dir = ( zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2)) );
114 
115  bool zl_v_dir = ( (bc_ptr[BCVars::yvel_bc].lo(2) == ERFBCType::ext_dir) ||
116  (bc_ptr[BCVars::yvel_bc].lo(2) == ERFBCType::ext_dir_ingested) );
117  zl_v_dir = ( zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2)) );
118 
119  bool zh_v_dir = ( (bc_ptr[BCVars::yvel_bc].hi(2) == ERFBCType::ext_dir) ||
120  (bc_ptr[BCVars::yvel_bc].hi(2) == ERFBCType::ext_dir_ingested) );
121  zh_v_dir = ( zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2)) );
122 
123  //***********************************************************************************
124  // X-Dirichlet
125  //***********************************************************************************
126  if (xl_v_dir)
127  {
128  Box planexy = tbxxy; planexy.setBig(0, planexy.smallEnd(0) );
129  tbxxy.growLo(0,-1);
130  bool need_to_test = (bc_ptr[BCVars::yvel_bc].lo(0) == ERFBCType::ext_dir_upwind) ? true : false;
131 
132  ParallelFor(planexy,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
133  Real GradUz = 0.25 * dxInv[2] * ( u(i ,j ,k+1)/mf_uy(i,j,0) + u(i ,j-1,k+1)/mf_uy(i,j-1,0)
134  -u(i ,j ,k-1)/mf_uy(i,j,0) - u(i ,j-1,k-1)/mf_uy(i,j-1,0) );
135  Real GradVz = 0.25 * dxInv[2] * ( v(i ,j ,k+1)/mf_vx(i,j,0) + v(i-1,j ,k+1)/mf_vx(i-1,j,0)
136  -v(i ,j ,k-1)/mf_vx(i,j,0) - v(i-1,j ,k-1)/mf_vx(i-1,j,0) );
137 
138  Real met_h_xi = Compute_h_xi_AtEdgeCenterK (i,j,k,dxInv,z_nd);
139  Real met_h_eta = Compute_h_eta_AtEdgeCenterK (i,j,k,dxInv,z_nd);
140  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterK(i,j,k,dxInv,z_nd);
141 
142  if (!need_to_test || u(dom_lo.x,j,k) >= 0.) {
143  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i, j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
144  + (-(8./3.) * v(i-1,j,k)/mf_vx(i-1,j,0) + 3. * v(i,j,k)/mf_vx(i,j,0) - (1./3.) * v(i+1,j,k)/mf_vx(i+1,j,0))*dxInv[0]
145  - (met_h_eta/met_h_zeta)*GradUz
146  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
147  } else {
148  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i , j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
149  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j , k)/mf_vx(i-1,j,0))*dxInv[0]
150  - (met_h_eta/met_h_zeta)*GradUz
151  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
152  }
153  tau21(i,j,k) = tau12(i,j,k);
154  });
155  }
156  if (xh_v_dir)
157  {
158  Box planexy = tbxxy; planexy.setSmall(0, planexy.bigEnd(0) );
159  tbxxy.growHi(0,-1);
160  bool need_to_test = (bc_ptr[BCVars::yvel_bc].hi(0) == ERFBCType::ext_dir_upwind) ? true : false;
161 
162  ParallelFor(planexy,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
163  Real GradUz = 0.25 * dxInv[2] * ( u(i ,j ,k+1)/mf_uy(i,j,0) + u(i ,j-1,k+1)/mf_uy(i,j-1,0)
164  -u(i ,j ,k-1)/mf_uy(i,j,0) - u(i ,j-1,k-1)/mf_uy(i,j-1,0) );
165  Real GradVz = 0.25 * dxInv[2] * ( v(i ,j ,k+1)/mf_vx(i,j,0) + v(i-1,j ,k+1)/mf_vx(i-1,j,0)
166  -v(i ,j ,k-1)/mf_vx(i,j,0) - v(i-1,j ,k-1)/mf_vx(i-1,j,0) );
167 
168  Real met_h_xi = Compute_h_xi_AtEdgeCenterK (i,j,k,dxInv,z_nd);
169  Real met_h_eta = Compute_h_eta_AtEdgeCenterK (i,j,k,dxInv,z_nd);
170  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterK(i,j,k,dxInv,z_nd);
171 
172  if (!need_to_test || u(dom_hi.x+1,j,k) <= 0.) {
173  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i, j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
174  - (-(8./3.) * v(i,j,k)/mf_vx(i,j,0) + 3. * v(i-1,j,k)/mf_vx(i-1,j,0) - (1./3.) * v(i-2,j,k)/mf_vx(i-2,j,0))*dxInv[0]
175  - (met_h_eta/met_h_zeta)*GradUz
176  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
177  } else {
178  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i , j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
179  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j , k)/mf_vx(i-1,j,0))*dxInv[0]
180  - (met_h_eta/met_h_zeta)*GradUz
181  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
182  }
183  tau21(i,j,k) = tau12(i,j,k);
184  });
185  }
186 
187  if (xl_w_dir)
188  {
189  Box planexz = tbxxz; planexz.setBig(0, planexz.smallEnd(0) );
190  planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
191  tbxxz.growLo(0,-1);
192  bool need_to_test = (bc_ptr[BCVars::zvel_bc].lo(0) == ERFBCType::ext_dir_upwind) ? true : false;
193 
194  ParallelFor(planexz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
195  Real GradWz = 0.25 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
196  - w(i ,j ,k-1) - w(i-1,j ,k-1) );
197 
198  Real met_h_xi = Compute_h_xi_AtEdgeCenterJ (i,j,k,dxInv,z_nd);
199  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
200 
201  if (!need_to_test || u(dom_lo.x,j,k) <= 0.) {
202  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta
203  +( (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0]
204  -(met_h_xi/met_h_zeta)*GradWz) * mf_ux(i,j,0) );
205  } else {
206  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
207  + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
208  - (met_h_xi/met_h_zeta)*GradWz ) * mf_ux(i,j,0) );
209  }
210  tau31(i,j,k) = tau13(i,j,k);
211  });
212  }
213 
214  if (xh_w_dir)
215  {
216  Box planexz = tbxxz; planexz.setSmall(0, planexz.bigEnd(0) );
217  planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
218  tbxxz.growHi(0,-1);
219  bool need_to_test = (bc_ptr[BCVars::zvel_bc].hi(0) == ERFBCType::ext_dir_upwind) ? true : false;
220 
221  ParallelFor(planexz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
222  Real GradWz = 0.25 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
223  - w(i ,j ,k-1) - w(i-1,j ,k-1) );
224 
225  Real met_h_xi = Compute_h_xi_AtEdgeCenterJ (i,j,k,dxInv,z_nd);
226  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
227 
228  if (!need_to_test || u(dom_hi.x+1,j,k) <= 0.) {
229  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta
230  - ( (-(8./3.) * w(i,j,k) + 3. * w(i-1,j,k) - (1./3.) * w(i-2,j,k))*dxInv[0]
231  - (met_h_xi/met_h_zeta)*GradWz ) * mf_ux(i,j,0) );
232  } else {
233  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
234  + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
235  - (met_h_xi/met_h_zeta)*GradWz ) * mf_ux(i,j,0) );
236  }
237  tau31(i,j,k) = tau13(i,j,k);
238  });
239  }
240 
241  //***********************************************************************************
242  // Y-Dirichlet
243  //***********************************************************************************
244  if (yl_u_dir) {
245  Box planexy = tbxxy; planexy.setBig(1, planexy.smallEnd(1) );
246  tbxxy.growLo(1,-1);
247  bool need_to_test = (bc_ptr[BCVars::xvel_bc].lo(1) == ERFBCType::ext_dir_upwind) ? true : false;
248 
249  ParallelFor(planexy,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
250  Real GradUz = 0.25 * dxInv[2] * ( u(i ,j ,k+1)/mf_uy(i,j,0) + u(i ,j-1,k+1)/mf_uy(i,j-1,0)
251  -u(i ,j ,k-1)/mf_uy(i,j,0) - u(i ,j-1,k-1)/mf_uy(i,j-1,0) );
252  Real GradVz = 0.25 * dxInv[2] * ( v(i ,j ,k+1)/mf_vx(i,j,0) + v(i-1,j ,k+1)/mf_vx(i-1,j,0)
253  -v(i ,j ,k-1)/mf_vx(i,j,0) - v(i-1,j ,k-1)/mf_vx(i-1,j,0) );
254 
255  Real met_h_xi = Compute_h_xi_AtEdgeCenterK (i,j,k,dxInv,z_nd);
256  Real met_h_eta = Compute_h_eta_AtEdgeCenterK (i,j,k,dxInv,z_nd);
257  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterK(i,j,k,dxInv,z_nd);
258 
259  if (!need_to_test || v(i,dom_lo.y,k) >= 0.) {
260  tau12(i,j,k) = 0.5 * ( (-(8./3.) * u(i,j-1,k)/mf_uy(i,j-1,0) + 3. * u(i,j,k)/mf_uy(i,j,0) - (1./3.) * u(i,j+1,k)/mf_uy(i,j+1,0))*dxInv[1]
261  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j, k)/mf_vx(i,j,0))*dxInv[0]
262  - (met_h_eta/met_h_zeta)*GradUz
263  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
264  } else {
265  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i , j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
266  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j , k)/mf_vx(i-1,j,0))*dxInv[0]
267  - (met_h_eta/met_h_zeta)*GradUz
268  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
269  }
270  tau21(i,j,k) = tau12(i,j,k);
271  });
272  }
273  if (yh_u_dir) {
274  Box planexy = tbxxy; planexy.setSmall(1, planexy.bigEnd(1) );
275  tbxxy.growHi(1,-1);
276  bool need_to_test = (bc_ptr[BCVars::xvel_bc].hi(1) == ERFBCType::ext_dir_upwind) ? true : false;
277 
278  ParallelFor(planexy,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
279  Real GradUz = 0.25 * dxInv[2] * ( u(i ,j ,k+1)/mf_uy(i,j,0) + u(i ,j-1,k+1)/mf_uy(i,j-1,0)
280  -u(i ,j ,k-1)/mf_uy(i,j,0) - u(i ,j-1,k-1)/mf_uy(i,j-1,0) );
281  Real GradVz = 0.25 * dxInv[2] * ( v(i ,j ,k+1)/mf_vx(i,j,0) + v(i-1,j ,k+1)/mf_vx(i-1,j,0)
282  -v(i ,j ,k-1)/mf_vx(i,j,0) - v(i-1,j ,k-1)/mf_vx(i-1,j,0) );
283 
284  Real met_h_xi = Compute_h_xi_AtEdgeCenterK (i,j,k,dxInv,z_nd);
285  Real met_h_eta = Compute_h_eta_AtEdgeCenterK (i,j,k,dxInv,z_nd);
286  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterK(i,j,k,dxInv,z_nd);
287 
288  if (!need_to_test || v(i,dom_hi.y+1,k) >= 0.) {
289  tau12(i,j,k) = 0.5 * ( -(-(8./3.) * u(i,j,k)/mf_uy(i,j,0) + 3. * u(i,j-1,k)/mf_uy(i,j-1,0) - (1./3.) * u(i,j-2,k)/mf_uy(i,j-2,0))*dxInv[1] +
290  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j, k)/mf_vx(i-1,j,0))*dxInv[0]
291  - (met_h_eta/met_h_zeta)*GradUz
292  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
293  } else {
294  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i , j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
295  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j , k)/mf_vx(i-1,j,0))*dxInv[0]
296  - (met_h_eta/met_h_zeta)*GradUz
297  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
298  }
299  tau21(i,j,k) = tau12(i,j,k);
300  });
301  }
302 
303  if (yl_w_dir) {
304  Box planeyz = tbxyz; planeyz.setBig(1, planeyz.smallEnd(1) );
305  planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
306  tbxyz.growLo(1,-1);
307  bool need_to_test = (bc_ptr[BCVars::zvel_bc].lo(1) == ERFBCType::ext_dir_upwind) ? true : false;
308 
309  ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
310  Real GradWz = 0.25 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
311  - w(i ,j ,k-1) - w(i ,j-1,k-1) );
312 
313  Real met_h_eta = Compute_h_eta_AtEdgeCenterI (i,j,k,dxInv,z_nd);
314  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
315 
316  if (!need_to_test || v(i,dom_lo.y,k) >= 0.) {
317  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dxInv[2]/met_h_zeta
318  + ( (-(8./3.) * w(i,j-1,k) + 3. * w(i,j ,k) - (1./3.) * w(i,j+1,k))*dxInv[1]*mf_vy(i,j,0)
319  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
320  } else {
321  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
322  + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
323  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
324  }
325  tau32(i,j,k) = tau23(i,j,k);
326  });
327  }
328  if (yh_w_dir) {
329  Box planeyz = tbxyz; planeyz.setSmall(1, planeyz.bigEnd(1) );
330  planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
331  tbxyz.growHi(1,-1);
332  bool need_to_test = (bc_ptr[BCVars::zvel_bc].hi(1) == ERFBCType::ext_dir_upwind) ? true : false;
333 
334  ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
335  Real GradWz = 0.25 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
336  - w(i ,j ,k-1) - w(i ,j-1,k-1) );
337 
338  Real met_h_eta = Compute_h_eta_AtEdgeCenterI (i,j,k,dxInv,z_nd);
339  Real met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
340 
341  if (!need_to_test || v(i,dom_hi.y+1,k) >= 0.) {
342  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dxInv[2]/met_h_zeta
343  - ( (-(8./3.) * w(i,j ,k) + 3. * w(i,j-1,k) - (1./3.) * w(i,j-2,k))*dxInv[1]
344  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
345  } else {
346  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
347  + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
348  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
349  }
350  tau32(i,j,k) = tau23(i,j,k);
351  });
352  }
353 
354  //***********************************************************************************
355  // Z-Dirichlet
356  //***********************************************************************************
357  if (zl_u_dir) {
358  Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2) );
359  tbxxz.growLo(2,-1);
360  ParallelFor(planexz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
361  Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
362  - w(i ,j ,k ) - w(i-1,j ,k ) );
363 
364  Real met_h_xi,met_h_zeta;
365  met_h_xi = Compute_h_xi_AtEdgeCenterJ (i,j,k,dxInv,z_nd);
366  met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
367 
368  tau13(i,j,k) = 0.5 * ( (-(8./3.) * u(i,j,k-1) + 3. * u(i,j,k) - (1./3.) * u(i,j,k+1))*dxInv[2]/met_h_zeta
369  + ( (w(i, j, k) - w(i-1, j, k))*dxInv[0]
370  - (met_h_xi/met_h_zeta)*GradWz ) * mf_ux(i,j,0) );
371  tau31(i,j,k) = tau13(i,j,k);
372  });
373  }
374  if (zh_u_dir) {
375  Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
376  tbxxz.growHi(2,-1);
377  ParallelFor(planexz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
378  Real met_h_zeta;
379  met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
380 
381  tau13(i,j,k) = 0.5 * ( -(-(8./3.) * u(i,j,k) + 3. * u(i,j,k-1) - (1./3.) * u(i,j,k-2))*dxInv[2]/met_h_zeta
382  + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mf_ux(i,j,0) );
383  tau31(i,j,k) = tau13(i,j,k);
384  });
385  }
386 
387  if (zl_v_dir) {
388  Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
389  tbxyz.growLo(2,-1);
390  ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
391  Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
392  - w(i ,j ,k ) - w(i ,j-1,k ) );
393 
394  Real met_h_eta,met_h_zeta;
395  met_h_eta = Compute_h_eta_AtEdgeCenterI (i,j,k,dxInv,z_nd);
396  met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
397 
398  tau23(i,j,k) = 0.5 * ( (-(8./3.) * v(i,j,k-1) + 3. * v(i,j,k ) - (1./3.) * v(i,j,k+1))*dxInv[2]/met_h_zeta
399  + ( (w(i, j, k) - w(i, j-1, k))*dxInv[1]
400  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
401  tau32(i,j,k) = tau23(i,j,k);
402  });
403  }
404  if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
405  Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
406  tbxyz.growHi(2,-1);
407  ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
408  Real met_h_zeta;
409  met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
410 
411  tau23(i,j,k) = 0.5 * ( -(-(8./3.) * v(i,j,k ) + 3. * v(i,j,k-1) - (1./3.) * v(i,j,k-2))*dxInv[2]/met_h_zeta
412  + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mf_vy(i,j,0) );
413  tau32(i,j,k) = tau23(i,j,k);
414  });
415  }
416 
417  // HO derivatives w/ Dirichlet BC (\partival <var> / \partial z from terrain transform)
418  if (zl_u_dir && zl_v_dir) {
419  Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
420  bxcc.growLo(2,-1);
421  ParallelFor(planecc, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
422  Real GradUz = 0.5 * dxInv[2] * ( (-(8./3.) * u(i ,j,k-1) + 3. * u(i ,j,k) - (1./3.) * u(i ,j,k+1))
423  + (-(8./3.) * u(i-1,j,k-1) + 3. * u(i-1,j,k) - (1./3.) * u(i-1,j,k+1)) );
424  Real GradVz = 0.5 * dxInv[2] * ( (-(8./3.) * v(i,j ,k-1) + 3. * v(i,j ,k) - (1./3.) * v(i,j ,k+1))
425  + (-(8./3.) * v(i,j-1,k-1) + 3. * v(i,j-1,k) - (1./3.) * v(i,j-1,k+1)) );
426 
427  Real met_h_xi,met_h_eta,met_h_zeta;
428  met_h_xi = Compute_h_xi_AtCellCenter (i,j,k,dxInv,z_nd);
429  met_h_eta = Compute_h_eta_AtCellCenter (i,j,k,dxInv,z_nd);
430  met_h_zeta = detJ(i,j,k);
431 
432  tau11(i,j,k) = ( (u(i+1, j, k)/mf_ux(i+1,j,0) - u(i, j, k)/mf_ux(i,j,0))*dxInv[0]
433  - (met_h_xi/met_h_zeta)*GradUz ) * mf_ux(i,j,0)*mf_ux(i,j,0);
434  tau22(i,j,k) = ( (v(i, j+1, k)/mf_vy(i,j+1,0) - v(i, j, k)/mf_vy(i,j,0))*dxInv[1]
435  - (met_h_eta/met_h_zeta)*GradVz ) * mf_vy(i,j,0)*mf_vy(i,j,0);
436  tau33(i,j,k) = (w(i, j, k+1) - w(i, j, k))*dxInv[2]/met_h_zeta;
437  });
438 
439  Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
440  tbxxy.growLo(2,-1);
441  ParallelFor(planexy,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
442  Real GradUz = 0.5 * dxInv[2] * ( (-(8./3.) * u(i,j ,k-1) + 3. * u(i,j ,k) - (1./3.) * u(i,j ,k+1))
443  + (-(8./3.) * u(i,j-1,k-1) + 3. * u(i,j-1,k) - (1./3.) * u(i,j-1,k+1)) );
444  Real GradVz = 0.5 * dxInv[2] * ( (-(8./3.) * v(i ,j,k-1) + 3. * v(i ,j,k) - (1./3.) * v(i ,j,k+1))
445  + (-(8./3.) * v(i-1,j,k-1) + 3. * v(i-1,j,k) - (1./3.) * v(i-1,j,k+1)) );
446 
447  Real met_h_xi,met_h_eta,met_h_zeta;
448  met_h_xi = Compute_h_xi_AtEdgeCenterK (i,j,k,dxInv,z_nd);
449  met_h_eta = Compute_h_eta_AtEdgeCenterK (i,j,k,dxInv,z_nd);
450  met_h_zeta = Compute_h_zeta_AtEdgeCenterK(i,j,k,dxInv,z_nd);
451 
452  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i , j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
453  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j , k)/mf_vx(i-1,j,0))*dxInv[0]
454  - (met_h_eta/met_h_zeta)*GradUz
455  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_uy(i,j,0);
456  tau21(i,j,k) = tau12(i,j,k);
457  });
458  }
459 
460  //***********************************************************************************
461  // Z-lo w/out Z-Dirichlet (GradWz extrapolation)
462  //***********************************************************************************
463  if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
464  Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
465  tbxxz.growLo(2,-1);
466  ParallelFor(planexz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
467  Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
468  - w(i ,j ,k ) - w(i-1,j ,k ) );
469 
470  Real met_h_xi,met_h_zeta;
471  met_h_xi = Compute_h_xi_AtEdgeCenterJ (i,j,k,dxInv,z_nd);
472  met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
473 
474  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
475  + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
476  - (met_h_xi/met_h_zeta)*GradWz ) * mf_ux(i,j,0) );
477  tau31(i,j,k) = tau13(i,j,k);
478  });
479  }
480  if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
481  Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
482  tbxyz.growLo(2,-1);
483  ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
484  Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
485  - w(i ,j ,k ) - w(i ,j-1,k ) );
486 
487  Real met_h_eta,met_h_zeta;
488  met_h_eta = Compute_h_eta_AtEdgeCenterI (i,j,k,dxInv,z_nd);
489  met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
490 
491  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
492  + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
493  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
494  tau32(i,j,k) = tau23(i,j,k);
495  });
496  }
497 
498  //***********************************************************************************
499  // Z-hi w/out Z-Dirichlet (h_xi = h_eta = 0)
500  //***********************************************************************************
501  if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
502  Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
503  tbxxz.growHi(2,-1);
504  ParallelFor(planexz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
505  Real met_h_zeta;
506  met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
507 
508  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
509  + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mf_ux(i,j,0) );
510  tau31(i,j,k) = tau13(i,j,k);
511  });
512  }
513  if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
514  Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
515  tbxyz.growHi(2,-1);
516  ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
517  Real met_h_zeta;
518  met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
519 
520  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
521  + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mf_vy(i,j,0) );
522  tau32(i,j,k) = tau23(i,j,k);
523  });
524  }
525 
526  //***********************************************************************************
527  // Fill the interior cells
528  //***********************************************************************************
529  // Cell centered strains
530  ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
531  Real GradUz = 0.25 * dxInv[2] * ( u(i ,j ,k+1)/mf_ux(i,j,0) + u(i-1,j ,k+1)/mf_ux(i-1,j,0)
532  -u(i ,j ,k-1)/mf_ux(i,j,0) - u(i-1,j ,k-1)/mf_ux(i-1,j,0) );
533  Real GradVz = 0.25 * dxInv[2] * ( v(i ,j ,k+1)/mf_vy(i,j,0) + v(i ,j-1,k+1)/mf_vy(i,j-1,0)
534  -v(i ,j ,k-1)/mf_vy(i,j,0) - v(i ,j-1,k-1)/mf_vy(i,j-1,0) );
535 
536  Real met_h_xi,met_h_eta,met_h_zeta;
537  met_h_xi = Compute_h_xi_AtCellCenter (i,j,k,dxInv,z_nd);
538  met_h_eta = Compute_h_eta_AtCellCenter (i,j,k,dxInv,z_nd);
539  met_h_zeta = detJ(i,j,k);
540 
541  tau11(i,j,k) = ( (u(i+1, j, k)/mf_ux(i+1,j,0) - u(i, j, k)/mf_ux(i,j,0))*dxInv[0]
542  - (met_h_xi/met_h_zeta)*GradUz ) * mf_mx(i,j,0)*mf_mx(i,j,0);
543  tau22(i,j,k) = ( (v(i, j+1, k)/mf_vy(i,j+1,0) - v(i, j, k)/mf_vy(i,j,0))*dxInv[1]
544  - (met_h_eta/met_h_zeta)*GradVz ) * mf_my(i,j,0)*mf_my(i,j,0);
545  tau33(i,j,k) = (w(i, j, k+1) - w(i, j, k))*dxInv[2]/met_h_zeta;
546  });
547 
548  // Off-diagonal strains
549  ParallelFor(tbxxy,tbxxz,tbxyz,
550  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
551  Real GradUz = 0.25 * dxInv[2] * ( u(i ,j ,k+1)/mf_uy(i,j,0) + u(i ,j-1,k+1)/mf_uy(i,j-1,0)
552  -u(i ,j ,k-1)/mf_uy(i,j,0) - u(i ,j-1,k-1)/mf_uy(i,j-1,0) );
553  Real GradVz = 0.25 * dxInv[2] * ( v(i ,j ,k+1)/mf_vx(i,j,0) + v(i-1,j ,k+1)/mf_vx(i-1,j,0)
554  -v(i ,j ,k-1)/mf_vx(i,j,0) - v(i-1,j ,k-1)/mf_vx(i-1,j,0) );
555 
556  Real met_h_xi,met_h_eta,met_h_zeta;
557  met_h_xi = Compute_h_xi_AtEdgeCenterK (i,j,k,dxInv,z_nd);
558  met_h_eta = Compute_h_eta_AtEdgeCenterK (i,j,k,dxInv,z_nd);
559  met_h_zeta = Compute_h_zeta_AtEdgeCenterK(i,j,k,dxInv,z_nd);
560 
561  tau12(i,j,k) = 0.5 * ( (u(i, j, k)/mf_uy(i,j,0) - u(i , j-1, k)/mf_uy(i,j-1,0))*dxInv[1]
562  + (v(i, j, k)/mf_vx(i,j,0) - v(i-1, j , k)/mf_vx(i-1,j,0))*dxInv[0]
563  - (met_h_eta/met_h_zeta)*GradUz
564  - (met_h_xi /met_h_zeta)*GradVz ) * mf_ux(i,j,0)*mf_ux(i,j,0);
565  tau21(i,j,k) = tau12(i,j,k);
566  },
567  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
568  Real GradWz = 0.25 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
569  - w(i ,j ,k-1) - w(i-1,j ,k-1) );
570 
571  Real met_h_xi,met_h_zeta;
572  met_h_xi = Compute_h_xi_AtEdgeCenterJ (i,j,k,dxInv,z_nd);
573  met_h_zeta = Compute_h_zeta_AtEdgeCenterJ(i,j,k,dxInv,z_nd);
574 
575  tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
576  + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
577  - (met_h_xi/met_h_zeta)*GradWz ) * mf_ux(i,j,0) );
578  tau31(i,j,k) = tau13(i,j,k);
579  },
580  [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept {
581  Real GradWz = 0.25 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
582  - w(i ,j ,k-1) - w(i ,j-1,k-1) );
583 
584  Real met_h_eta,met_h_zeta;
585  met_h_eta = Compute_h_eta_AtEdgeCenterI (i,j,k,dxInv,z_nd);
586  met_h_zeta = Compute_h_zeta_AtEdgeCenterI(i,j,k,dxInv,z_nd);
587 
588  tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
589  + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
590  - (met_h_eta/met_h_zeta)*GradWz ) * mf_vy(i,j,0) );
591  tau32(i,j,k) = tau23(i,j,k);
592  });
593 }
@ tau12
Definition: ERF_DataStruct.H:26
@ tau23
Definition: ERF_DataStruct.H:26
@ tau33
Definition: ERF_DataStruct.H:26
@ tau22
Definition: ERF_DataStruct.H:26
@ tau11
Definition: ERF_DataStruct.H:26
@ tau32
Definition: ERF_DataStruct.H:26
@ tau31
Definition: ERF_DataStruct.H:26
@ tau21
Definition: ERF_DataStruct.H:26
@ tau13
Definition: ERF_DataStruct.H:26
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:244
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:290
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:276
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:231
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:320
AMREX_GPU_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:77
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:259
AMREX_GPU_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:62
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:347
@ zvel_bc
Definition: ERF_IndexDefines.H:89
@ yvel_bc
Definition: ERF_IndexDefines.H:88
@ xvel_bc
Definition: ERF_IndexDefines.H:87
@ ext_dir_ingested
Definition: ERF_IndexDefines.H:212
@ ext_dir
Definition: ERF_IndexDefines.H:209
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:217

Referenced by ERF::advance_dycore(), and erf_make_tau_terms().

Here is the call graph for this function:
Here is the caller graph for this function: