Function for computing the strain rates with terrain.
62 Box domain_xy = convert(domain, tbxxy.ixType());
63 Box domain_xz = convert(domain, tbxxz.ixType());
64 Box domain_yz = convert(domain, tbxyz.ixType());
66 const auto&
dom_lo = lbound(domain);
67 const auto&
dom_hi = ubound(domain);
73 xl_v_dir = ( xl_v_dir && (tbxxy.smallEnd(0) == domain_xy.smallEnd(0)) );
78 xh_v_dir = ( xh_v_dir && (tbxxy.bigEnd(0) == domain_xy.bigEnd(0)) );
83 xl_w_dir = ( xl_w_dir && (tbxxz.smallEnd(0) == domain_xz.smallEnd(0)) );
88 xh_w_dir = ( xh_w_dir && (tbxxz.bigEnd(0) == domain_xz.bigEnd(0)) );
94 yl_u_dir = ( yl_u_dir && (tbxxy.smallEnd(1) == domain_xy.smallEnd(1)) );
99 yh_u_dir = ( yh_u_dir && (tbxxy.bigEnd(1) == domain_xy.bigEnd(1)) );
104 yl_w_dir = ( yl_w_dir && (tbxyz.smallEnd(1) == domain_yz.smallEnd(1)) );
109 yh_w_dir = ( yh_w_dir && (tbxyz.bigEnd(1) == domain_yz.bigEnd(1)) );
114 zl_u_dir = ( zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) );
118 zh_u_dir = ( zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2)) );
122 zl_v_dir = ( zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2)) );
126 zh_v_dir = ( zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2)) );
132 Box planexy = tbxxy; planexy.setBig(0, planexy.smallEnd(0) );
136 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
137 Real inv_dist = (k == 0) ?
Real(2.0) / (z_nd(i,j,k+2) - z_nd(i,j,k )) :
138 Real(2.0) / (z_nd(i,j,k+2) + z_nd(i,j,k+1) - z_nd(i,j,k) - z_nd(i,j,k-1));
140 Real GradUz = (k == 0) ?
141 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
142 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
143 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
144 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
145 Real GradVz = (k == 0) ?
146 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
147 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
148 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
149 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
151 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
152 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
157 if (!need_to_test || u(
dom_lo.x,j,k) >= 0.) {
158 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
159 + (-(8./3.) * v(i-1,j,k) + 3. * v(i,j,k) - (1./3.) * v(i+1,j,k))*dxInv[0]*mfx
160 - (met_h_eta)*GradUz*mfy
161 - (met_h_xi )*GradVz*mfx );
163 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
164 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
165 - (met_h_eta)*GradUz*mfy
166 - (met_h_xi )*GradVz*mfx );
172 Box planexy = tbxxy; planexy.setSmall(0, planexy.bigEnd(0) );
176 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
177 Real inv_dist = (k == 0) ?
Real(2.0) / (z_nd(i,j,k+2) - z_nd(i,j,k )) :
178 Real(2.0) / (z_nd(i,j,k+2) + z_nd(i,j,k+1) - z_nd(i,j,k) - z_nd(i,j,k-1));
180 Real GradUz = (k == 0) ?
181 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
182 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
183 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
184 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
185 Real GradVz = (k == 0) ?
186 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
187 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
188 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
189 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
191 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
192 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
197 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
198 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
199 - (-(8./3.) * v(i,j,k) + 3. * v(i-1,j,k) - (1./3.) * v(i-2,j,k))*dxInv[0]*mfx
200 - (met_h_eta)*GradUz*mfy
201 - (met_h_xi )*GradVz*mfx );
203 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
204 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
205 - (met_h_eta)*GradUz*mfy
206 - (met_h_xi )*GradVz*mfx );
213 Box planexz = tbxxz; planexz.setBig(0, planexz.smallEnd(0) );
214 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
218 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
219 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
220 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
221 Real idz0 = 1.0 / dz0;
223 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
224 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
225 Real mfx = mf_ux(i,j,0);
230 if (!need_to_test || u(
dom_lo.x,j,k) <= 0.) {
231 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta
232 + ( (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0]
233 - (met_h_xi)*GradWz ) * mfx );
235 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
236 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
237 - (met_h_xi)*GradWz ) * mfx );
244 Box planexz = tbxxz; planexz.setSmall(0, planexz.bigEnd(0) );
245 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
249 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
250 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
251 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
252 Real idz0 = 1.0 / dz0;
254 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
255 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
257 Real mfx = mf_ux(i,j,0);
262 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
263 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta
264 - ( (-(8./3.) * w(i,j,k) + 3. * w(i-1,j,k) - (1./3.) * w(i-2,j,k))*dxInv[0]
265 - (met_h_xi)*GradWz ) * mfx );
267 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
268 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
269 - (met_h_xi)*GradWz ) * mfx );
279 Box planexy = tbxxy; planexy.setBig(1, planexy.smallEnd(1) );
283 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
284 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
285 Real idz0 = 1.0 / dz0;
287 Real GradUz = (k == 0) ?
288 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
289 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
290 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
291 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
292 Real GradVz = (k == 0) ?
293 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
294 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
295 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
296 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
298 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
299 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
304 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
305 tau12(i,j,k) = 0.5 * ( (-(8./3.) * u(i,j-1,k) + 3. * u(i,j,k) - (1./3.) * u(i,j+1,k))*dxInv[1]*mfy
306 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx
307 - (met_h_eta)*GradUz*mfy
308 - (met_h_xi )*GradVz*mfx );
310 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
311 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
312 - (met_h_eta)*GradUz*mfy
313 - (met_h_xi )*GradVz*mfx );
319 Box planexy = tbxxy; planexy.setSmall(1, planexy.bigEnd(1) );
323 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
324 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
325 Real idz0 = 1.0 / dz0;
327 Real GradUz = (k == 0) ?
328 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
329 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
330 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
331 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
332 Real GradVz = (k == 0) ?
333 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
334 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
335 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
336 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
338 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
339 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
344 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
345 tau12(i,j,k) = 0.5 * ( -(-(8./3.) * u(i,j,k) + 3. * u(i,j-1,k) - (1./3.) * u(i,j-2,k))*dxInv[1]*mfy +
346 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx
347 - (met_h_eta)*GradUz*mfy
348 - (met_h_xi )*GradVz*mfx );
350 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
351 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
352 - (met_h_eta)*GradUz*mfy
353 - (met_h_xi )*GradVz*mfx );
360 Box planeyz = tbxyz; planeyz.setBig(1, planeyz.smallEnd(1) );
361 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
365 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
366 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
367 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
368 Real idz0 = 1.0 / dz0;
370 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
371 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
373 Real mfy = mf_vy(i,j,0);
378 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
379 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dxInv[2]/met_h_zeta
380 + ( (-(8./3.) * w(i,j-1,k) + 3. * w(i,j ,k) - (1./3.) * w(i,j+1,k))*dxInv[1]
381 - (met_h_eta)*GradWz ) * mfy );
383 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
384 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
385 - (met_h_eta)*GradWz ) * mfy );
391 Box planeyz = tbxyz; planeyz.setSmall(1, planeyz.bigEnd(1) );
392 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
396 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
397 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
398 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
399 Real idz0 = 1.0 / dz0;
401 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
402 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
404 Real mfy = mf_vy(i,j,0);
409 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
410 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dxInv[2]/met_h_zeta
411 - ( (-(8./3.) * w(i,j ,k) + 3. * w(i,j-1,k) - (1./3.) * w(i,j-2,k))*dxInv[1]
412 - (met_h_eta)*GradWz ) * mfy );
414 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
415 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
416 - (met_h_eta)*GradWz ) * mfy );
426 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2) );
429 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
431 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
432 - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
433 Real dz1 = 0.5 * ( z_nd(i,j,k+2) + z_nd(i,j+1,k+2)
434 - z_nd(i,j,k+1) - z_nd(i,j+1,k+1) );
435 Real idz0 = 1.0 / dz0;
436 Real f = (dz1 / dz0) + 2.0;
438 Real c3 = 2.0 / (f - f2);
442 Real GradWz = 0.5 * idz0 * ( w(i,j,k+1) + w(i-1,j,k+1)
443 - w(i,j,k ) - w(i-1,j,k ) );
445 Real mfx = mf_ux(i,j,0);
452 tau13(i,j,k) = 0.5 * ( (
c1 * u(i,j,k-1) +
c2 * u(i,j,k) + c3 * u(i,j,k+1))*idz0
453 + ( (w(i, j, k) - w(i-1, j, k))*dxInv[0]
454 - (met_h_xi)*GradWz ) * mfx );
460 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
463 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
465 Real dz0 = 0.5 * ( z_nd(i,j,k ) + z_nd(i,j+1,k )
466 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
467 Real dz1 = 0.5 * ( z_nd(i,j,k-1) + z_nd(i,j+1,k-1)
468 - z_nd(i,j,k-2) - z_nd(i,j+1,k-2) );
469 Real idz0 = 1.0 / dz0;
470 Real f = (dz1 / dz0) + 2.0;
472 Real c3 = 2.0 / (f - f2);
476 Real mfx = mf_ux(i,j,0);
478 tau13(i,j,k) = 0.5 * ( -(
c1 * u(i,j,k) +
c2 * u(i,j,k-1) + c3 * u(i,j,k-2))*idz0
479 + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mfx );
485 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
488 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
490 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
491 - z_nd(i,j,k ) - z_nd(i+1,j,k ) );
492 Real dz1 = 0.5 * ( z_nd(i,j,k+2) + z_nd(i+1,j,k+2)
493 - z_nd(i,j,k+1) - z_nd(i+1,j,k+1) );
494 Real idz0 = 1.0 / dz0;
495 Real f = (dz1 / dz0) + 2.0;
497 Real c3 = 2.0 / (f - f2);
501 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
502 - w(i ,j ,k ) - w(i ,j-1,k ) );
504 Real mfy = mf_vy(i,j,0);
511 tau23(i,j,k) = 0.5 * ( (
c1 * v(i,j,k-1) +
c2 * v(i,j,k ) + c3 * v(i,j,k+1))*idz0
512 + ( (w(i, j, k) - w(i, j-1, k))*dxInv[1]
513 - (met_h_eta)*GradWz ) * mfy );
517 if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
519 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
522 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
524 Real dz0 = 0.5 * ( z_nd(i,j,k ) + z_nd(i+1,j,k )
525 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
526 Real dz1 = 0.5 * ( z_nd(i,j,k-1) + z_nd(i+1,j,k-1)
527 - z_nd(i,j,k-2) - z_nd(i+1,j,k-2) );
528 Real idz0 = 1.0 / dz0;
529 Real f = (dz1 / dz0) + 2.0;
531 Real c3 = 2.0 / (f - f2);
535 Real mfy = mf_vy(i,j,0);
537 tau23(i,j,k) = 0.5 * ( -(
c1 * v(i,j,k ) +
c2 * v(i,j,k-1) + c3 * v(i,j,k-2))*idz0
538 + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mfy );
544 if (zl_u_dir && zl_v_dir) {
545 Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
548 ParallelFor(planecc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
550 Real dz0 = 0.25 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1) + z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k+1)
551 - z_nd(i,j,k ) - z_nd(i,j+1,k ) - z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) );
552 Real dz1 = 0.25 * ( z_nd(i,j,k+2) + z_nd(i,j+1,k+2) + z_nd(i+1,j,k+2) + z_nd(i+1,j+1,k+2)
553 - z_nd(i,j,k+1) - z_nd(i,j+1,k+1) - z_nd(i+1,j,k+1) - z_nd(i+1,j+1,k+1) );
554 Real idz0 = 1.0 / dz0;
555 Real f = (dz1 / dz0) + 2.0;
557 Real c3 = 2.0 / (f - f2);
561 Real GradUz = 0.5 * idz0 * ( (
c1 * u(i ,j,k-1) +
c2 * u(i ,j,k) + c3 * u(i ,j,k+1))
562 + (
c1 * u(i-1,j,k-1) +
c2 * u(i-1,j,k) + c3 * u(i-1,j,k+1)) );
563 Real GradVz = 0.5 * idz0 * ( (
c1 * v(i,j ,k-1) +
c2 * v(i,j ,k) + c3 * v(i,j ,k+1))
564 + (
c1 * v(i,j-1,k-1) +
c2 * v(i,j-1,k) + c3 * v(i,j-1,k+1)) );
566 Real mfx = mf_mx(i,j,0);
567 Real mfy = mf_my(i,j,0);
569 Real met_h_xi,met_h_eta;
573 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k) )*dxInv[0]
574 - (met_h_xi)*GradUz ) * mfx;
575 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k) )*dxInv[1]
576 - (met_h_eta)*GradVz ) * mfy;
577 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*idz0;
581 Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
584 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
586 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k ) );
587 Real dz1 = ( z_nd(i,j,k+2) - z_nd(i,j,k+1) );
588 Real idz0 = 1.0 / dz0;
589 Real f = (dz1 / dz0) + 2.0;
591 Real c3 = 2.0 / (f - f2);
595 Real GradUz = 0.5 * idz0 * ( (
c1 * u(i,j ,k-1) +
c2 * u(i,j ,k) + c3 * u(i,j ,k+1))
596 + (
c1 * u(i,j-1,k-1) +
c2 * u(i,j-1,k) + c3 * u(i,j-1,k+1)) );
597 Real GradVz = 0.5 * idz0 * ( (
c1 * v(i ,j,k-1) +
c2 * v(i ,j,k) + c3 * v(i ,j,k+1))
598 + (
c1 * v(i-1,j,k-1) +
c2 * v(i-1,j,k) + c3 * v(i-1,j,k+1)) );
600 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
601 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
603 Real met_h_xi,met_h_eta;
607 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
608 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
609 - (met_h_eta)*GradUz*mfy
610 - (met_h_xi )*GradVz*mfx );
618 if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
619 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
622 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
623 Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
624 - w(i ,j ,k ) - w(i-1,j ,k ) );
626 Real mfx = mf_ux(i,j,0);
628 Real met_h_xi,met_h_zeta;
632 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
633 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
634 - (met_h_xi/met_h_zeta)*GradWz ) * mfx);
638 if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
639 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
642 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
643 Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
644 - w(i ,j ,k ) - w(i ,j-1,k ) );
646 Real mfy = mf_vy(i,j,0);
648 Real met_h_eta,met_h_zeta;
652 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
653 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
654 - (met_h_eta/met_h_zeta)*GradWz ) * mfy );
662 if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
663 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
666 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
667 Real mfx = mf_ux(i,j,0);
672 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
673 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mfx );
677 if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
678 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
681 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
682 Real mfy = mf_vy(i,j,0);
687 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
688 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mfy );
697 ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
698 Real dz0 = 0.25 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1) + z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k+1)
699 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) - z_nd(i+1,j,k-1) - z_nd(i+1,j+1,k-1) );
700 Real idz0 = 1.0 / dz0;
702 Real GradUz = (k == 0) ?
703 idz0 * ( u(i ,j ,k+1) + u(i-1,j ,k+1)
704 - u(i ,j ,k ) - u(i-1,j ,k ) ) :
705 0.5 * idz0 * ( u(i ,j ,k+1) + u(i-1,j ,k+1)
706 - u(i ,j ,k-1) - u(i-1,j ,k-1) );
707 Real GradVz = (k == 0) ?
708 idz0 * ( v(i ,j ,k+1) + v(i ,j-1,k+1)
709 - v(i ,j ,k ) - v(i ,j-1,k ) ) :
710 0.5 * idz0 * ( v(i ,j ,k+1) + v(i ,j-1,k+1)
711 - v(i ,j ,k-1) - v(i ,j-1,k-1) );
713 Real mfx = mf_mx(i,j,0);
714 Real mfy = mf_my(i,j,0);
716 Real met_h_xi,met_h_eta,met_h_zeta;
719 met_h_zeta = detJ(i,j,k);
721 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k))*dxInv[0] - met_h_xi*GradUz ) * mfx;
722 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k))*dxInv[1] - met_h_eta*GradVz ) * mfy;
723 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*dxInv[2]/met_h_zeta;
727 ParallelFor(tbxxy,tbxxz,tbxyz,
728 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
729 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
730 Real idz0 = 1.0 / dz0;
732 Real GradUz = (k == 0) ?
733 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
734 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
735 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
736 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
737 Real GradVz = (k == 0) ?
738 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
739 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
740 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
741 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
743 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
744 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
746 Real met_h_xi,met_h_eta;
750 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
751 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
752 - (met_h_eta)*GradUz*mfy
753 - (met_h_xi)*GradVz*mfx );
756 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
757 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
758 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
759 Real idz0 = 1.0 / dz0;
761 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
762 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
764 Real mfx = mf_ux(i,j,0);
766 Real met_h_xi,met_h_zeta;
770 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
771 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
772 - (met_h_xi)*GradWz ) * mfx );
775 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
776 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
777 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
778 Real idz0 = 1.0 / dz0;
780 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
781 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
783 Real mfy = mf_vy(i,j,0);
785 Real met_h_eta,met_h_zeta;
789 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
790 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
791 - (met_h_eta)*GradWz ) * mfy );
796 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
@ tau12
Definition: ERF_DataStruct.H:30
@ tau23
Definition: ERF_DataStruct.H:30
@ tau33
Definition: ERF_DataStruct.H:30
@ tau22
Definition: ERF_DataStruct.H:30
@ tau11
Definition: ERF_DataStruct.H:30
@ tau32
Definition: ERF_DataStruct.H:30
@ tau31
Definition: ERF_DataStruct.H:30
@ tau21
Definition: ERF_DataStruct.H:30
@ tau13
Definition: ERF_DataStruct.H:30
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real ComputeSmnSmn(int &i, int &j, int &k, const amrex::Array4< amrex::Real const > &tau11, const amrex::Array4< amrex::Real const > &tau22, const amrex::Array4< amrex::Real const > &tau33, const amrex::Array4< amrex::Real const > &tau12, const amrex::Array4< amrex::Real const > &tau13, const amrex::Array4< amrex::Real const > &tau23)
Definition: ERF_EddyViscosity.H:63
const auto & dom_hi
Definition: ERF_SetupVertDiff.H:2
const auto & dom_lo
Definition: ERF_SetupVertDiff.H:1
amrex::Real Real
Definition: ERF_ShocInterface.H:19
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:241
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:287
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:273
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:317
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:83
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:256
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:68
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:344
@ 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
real(c_double), parameter c2
Definition: ERF_module_model_constants.F90:35
real(c_double), private c1
Definition: ERF_module_mp_morr_two_moment.F90:212