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 );
171 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
172 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
173 - (met_h_eta)*GradUz*mfy
174 - (met_h_xi )*GradVz*mfx );
180 Box planexy = tbxxy; planexy.setSmall(0, planexy.bigEnd(0) );
184 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
185 Real inv_dist = (k == 0) ?
Real(2.0) / (z_nd(i,j,k+2) - z_nd(i,j,k )) :
186 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));
188 Real GradUz = (k == 0) ?
189 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
190 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
191 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
192 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
193 Real GradVz = (k == 0) ?
194 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
195 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
196 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
197 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
199 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
200 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
205 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
206 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
207 - (-(8./3.) * v(i,j,k) + 3. * v(i-1,j,k) - (1./3.) * v(i-2,j,k))*dxInv[0]*mfx
208 - (met_h_eta)*GradUz*mfy
209 - (met_h_xi )*GradVz*mfx );
211 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
212 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
213 - (met_h_eta)*GradUz*mfy
214 - (met_h_xi )*GradVz*mfx );
221 Box planexz = tbxxz; planexz.setBig(0, planexz.smallEnd(0) );
222 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
226 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
227 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
228 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
229 Real idz0 = 1.0 / dz0;
231 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
232 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
233 Real mfx = mf_ux(i,j,0);
238 Real du_dz = (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta;
239 if (!need_to_test || u(
dom_lo.x,j,k) <= 0.) {
240 tau13(i,j,k) = 0.5 * ( du_dz
241 + ( (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0]
242 - (met_h_xi)*GradWz ) * mfx );
251 tau13(i,j,k) = 0.5 * ( du_dz
252 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
253 - (met_h_xi)*GradWz ) * mfx );
257 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
262 Box planexz = tbxxz; planexz.setSmall(0, planexz.bigEnd(0) );
263 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
267 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
268 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
269 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
270 Real idz0 = 1.0 / dz0;
272 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
273 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
275 Real mfx = mf_ux(i,j,0);
280 Real du_dz = (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta;
281 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
282 tau13(i,j,k) = 0.5 * ( du_dz
283 - ( (-(8./3.) * w(i,j,k) + 3. * w(i-1,j,k) - (1./3.) * w(i-2,j,k))*dxInv[0]
284 - (met_h_xi)*GradWz ) * mfx );
286 tau13(i,j,k) = 0.5 * ( du_dz
287 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
288 - (met_h_xi)*GradWz ) * mfx );
292 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
300 Box planexy = tbxxy; planexy.setBig(1, planexy.smallEnd(1) );
304 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
305 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
306 Real idz0 = 1.0 / dz0;
308 Real GradUz = (k == 0) ?
309 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
310 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
311 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
312 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
313 Real GradVz = (k == 0) ?
314 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
315 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
316 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
317 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
319 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
320 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
325 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
326 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
327 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx
328 - (met_h_eta)*GradUz*mfy
329 - (met_h_xi )*GradVz*mfx );
331 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
332 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
333 - (met_h_eta)*GradUz*mfy
334 - (met_h_xi )*GradVz*mfx );
340 Box planexy = tbxxy; planexy.setSmall(1, planexy.bigEnd(1) );
344 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
345 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
346 Real idz0 = 1.0 / dz0;
348 Real GradUz = (k == 0) ?
349 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
350 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
351 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
352 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
353 Real GradVz = (k == 0) ?
354 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
355 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
356 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
357 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
359 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
360 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
365 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
366 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 +
367 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx
368 - (met_h_eta)*GradUz*mfy
369 - (met_h_xi )*GradVz*mfx );
371 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
372 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
373 - (met_h_eta)*GradUz*mfy
374 - (met_h_xi )*GradVz*mfx );
381 Box planeyz = tbxyz; planeyz.setBig(1, planeyz.smallEnd(1) );
382 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
386 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
387 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
388 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
389 Real idz0 = 1.0 / dz0;
391 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
392 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
394 Real mfy = mf_vy(i,j,0);
399 Real dv_dz = (v(i, j, k) - v(i, j, k-1))*dxInv[2]/met_h_zeta;
400 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
401 tau23(i,j,k) = 0.5 * ( dv_dz
402 + ( (-(8./3.) * w(i,j-1,k) + 3. * w(i,j ,k) - (1./3.) * w(i,j+1,k))*dxInv[1]
403 - (met_h_eta)*GradWz ) * mfy );
412 tau23(i,j,k) = 0.5 * ( dv_dz
413 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
414 - (met_h_eta)*GradWz ) * mfy );
418 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
422 Box planeyz = tbxyz; planeyz.setSmall(1, planeyz.bigEnd(1) );
423 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
427 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
428 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
429 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
430 Real idz0 = 1.0 / dz0;
432 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
433 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
435 Real mfy = mf_vy(i,j,0);
440 Real dv_dz = (v(i, j, k) - v(i, j, k-1))*dxInv[2]/met_h_zeta;
441 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
442 tau23(i,j,k) = 0.5 * ( dv_dz
443 - ( (-(8./3.) * w(i,j ,k) + 3. * w(i,j-1,k) - (1./3.) * w(i,j-2,k))*dxInv[1]
444 - (met_h_eta)*GradWz ) * mfy );
446 tau23(i,j,k) = 0.5 * ( dv_dz
447 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
448 - (met_h_eta)*GradWz ) * mfy );
452 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
460 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2) );
463 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
465 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
466 - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
467 Real dz1 = 0.5 * ( z_nd(i,j,k+2) + z_nd(i,j+1,k+2)
468 - z_nd(i,j,k+1) - z_nd(i,j+1,k+1) );
469 Real idz0 = 1.0 / dz0;
470 Real f = (dz1 / dz0) + 2.0;
472 Real c3 = 2.0 / (f - f2);
476 Real GradWz = 0.5 * idz0 * ( w(i,j,k+1) + w(i-1,j,k+1)
477 - w(i,j,k ) - w(i-1,j,k ) );
479 Real mfx = mf_ux(i,j,0);
485 Real du_dz = (
c1 * u(i,j,k-1) +
c2 * u(i,j,k) + c3 * u(i,j,k+1))*idz0;
486 tau13(i,j,k) = 0.5 * ( du_dz
487 + ( (w(i, j, k) - w(i-1, j, k))*dxInv[0]
488 - (met_h_xi)*GradWz ) * mfx );
491 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
496 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
499 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
501 Real dz0 = 0.5 * ( z_nd(i,j,k ) + z_nd(i,j+1,k )
502 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
503 Real dz1 = 0.5 * ( z_nd(i,j,k-1) + z_nd(i,j+1,k-1)
504 - z_nd(i,j,k-2) - z_nd(i,j+1,k-2) );
505 Real idz0 = 1.0 / dz0;
506 Real f = (dz1 / dz0) + 2.0;
508 Real c3 = 2.0 / (f - f2);
512 Real mfx = mf_ux(i,j,0);
514 Real du_dz = -(
c1 * u(i,j,k) +
c2 * u(i,j,k-1) + c3 * u(i,j,k-2))*idz0;
515 tau13(i,j,k) = 0.5 * ( du_dz
516 + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mfx );
519 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
524 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
527 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
529 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
530 - z_nd(i,j,k ) - z_nd(i+1,j,k ) );
531 Real dz1 = 0.5 * ( z_nd(i,j,k+2) + z_nd(i+1,j,k+2)
532 - z_nd(i,j,k+1) - z_nd(i+1,j,k+1) );
533 Real idz0 = 1.0 / dz0;
534 Real f = (dz1 / dz0) + 2.0;
536 Real c3 = 2.0 / (f - f2);
540 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
541 - w(i ,j ,k ) - w(i ,j-1,k ) );
543 Real mfy = mf_vy(i,j,0);
550 Real dv_dz = (
c1 * v(i,j,k-1) +
c2 * v(i,j,k ) + c3 * v(i,j,k+1))*idz0;
551 tau23(i,j,k) = 0.5 * ( dv_dz
552 + ( (w(i, j, k) - w(i, j-1, k))*dxInv[1]
553 - (met_h_eta)*GradWz ) * mfy );
556 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
559 if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
561 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
564 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
566 Real dz0 = 0.5 * ( z_nd(i,j,k ) + z_nd(i+1,j,k )
567 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
568 Real dz1 = 0.5 * ( z_nd(i,j,k-1) + z_nd(i+1,j,k-1)
569 - z_nd(i,j,k-2) - z_nd(i+1,j,k-2) );
570 Real idz0 = 1.0 / dz0;
571 Real f = (dz1 / dz0) + 2.0;
573 Real c3 = 2.0 / (f - f2);
577 Real mfy = mf_vy(i,j,0);
579 Real dv_dz = -(
c1 * v(i,j,k ) +
c2 * v(i,j,k-1) + c3 * v(i,j,k-2))*idz0;
580 tau23(i,j,k) = 0.5 * ( dv_dz
581 + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mfy );
584 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
589 if (zl_u_dir && zl_v_dir) {
590 Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
593 ParallelFor(planecc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
595 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)
596 - z_nd(i,j,k ) - z_nd(i,j+1,k ) - z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) );
597 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)
598 - 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) );
599 Real idz0 = 1.0 / dz0;
600 Real f = (dz1 / dz0) + 2.0;
602 Real c3 = 2.0 / (f - f2);
606 Real GradUz = 0.5 * idz0 * ( (
c1 * u(i ,j,k-1) +
c2 * u(i ,j,k) + c3 * u(i ,j,k+1))
607 + (
c1 * u(i-1,j,k-1) +
c2 * u(i-1,j,k) + c3 * u(i-1,j,k+1)) );
608 Real GradVz = 0.5 * idz0 * ( (
c1 * v(i,j ,k-1) +
c2 * v(i,j ,k) + c3 * v(i,j ,k+1))
609 + (
c1 * v(i,j-1,k-1) +
c2 * v(i,j-1,k) + c3 * v(i,j-1,k+1)) );
611 Real mfx = mf_mx(i,j,0);
612 Real mfy = mf_my(i,j,0);
614 Real met_h_xi,met_h_eta;
618 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k) )*dxInv[0]
619 - (met_h_xi)*GradUz ) * mfx;
620 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k) )*dxInv[1]
621 - (met_h_eta)*GradVz ) * mfy;
622 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*idz0;
626 Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
629 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
631 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k ) );
632 Real dz1 = ( z_nd(i,j,k+2) - z_nd(i,j,k+1) );
633 Real idz0 = 1.0 / dz0;
634 Real f = (dz1 / dz0) + 2.0;
636 Real c3 = 2.0 / (f - f2);
640 Real GradUz = 0.5 * idz0 * ( (
c1 * u(i,j ,k-1) +
c2 * u(i,j ,k) + c3 * u(i,j ,k+1))
641 + (
c1 * u(i,j-1,k-1) +
c2 * u(i,j-1,k) + c3 * u(i,j-1,k+1)) );
642 Real GradVz = 0.5 * idz0 * ( (
c1 * v(i ,j,k-1) +
c2 * v(i ,j,k) + c3 * v(i ,j,k+1))
643 + (
c1 * v(i-1,j,k-1) +
c2 * v(i-1,j,k) + c3 * v(i-1,j,k+1)) );
645 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
646 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
648 Real met_h_xi,met_h_eta;
652 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
653 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
654 - (met_h_eta)*GradUz*mfy
655 - (met_h_xi )*GradVz*mfx );
663 if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
664 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
667 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
668 Real mfx = mf_ux(i,j,0);
670 Real met_h_xi,met_h_zeta;
674 Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
675 - w(i ,j ,k ) - w(i-1,j ,k ) );
676 GradWz /= met_h_zeta;
678 Real du_dz = (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta;
679 tau13(i,j,k) = 0.5 * ( du_dz
680 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
681 - (met_h_xi)*GradWz ) * mfx);
684 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
687 if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
688 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
691 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
692 Real mfy = mf_vy(i,j,0);
694 Real met_h_eta,met_h_zeta;
698 Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
699 - w(i ,j ,k ) - w(i ,j-1,k ) );
700 GradWz /= met_h_zeta;
702 Real dv_dz = (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta;
703 tau23(i,j,k) = 0.5 * ( dv_dz
704 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
705 - (met_h_eta)*GradWz ) * mfy );
708 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
715 if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
716 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
719 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
720 Real mfx = mf_ux(i,j,0);
725 Real du_dz = (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta;
726 tau13(i,j,k) = 0.5 * ( du_dz
727 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mfx );
730 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
733 if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
734 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
737 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
738 Real mfy = mf_vy(i,j,0);
743 Real dv_dz = (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta;
744 tau23(i,j,k) = 0.5 * ( dv_dz
745 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mfy );
748 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
756 ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
757 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)
758 - 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) );
759 Real idz0 = 1.0 / dz0;
761 Real GradUz = (k == 0) ?
762 idz0 * ( u(i ,j ,k+1) + u(i-1,j ,k+1)
763 - u(i ,j ,k ) - u(i-1,j ,k ) ) :
764 0.5 * idz0 * ( u(i ,j ,k+1) + u(i-1,j ,k+1)
765 - u(i ,j ,k-1) - u(i-1,j ,k-1) );
766 Real GradVz = (k == 0) ?
767 idz0 * ( v(i ,j ,k+1) + v(i ,j-1,k+1)
768 - v(i ,j ,k ) - v(i ,j-1,k ) ) :
769 0.5 * idz0 * ( v(i ,j ,k+1) + v(i ,j-1,k+1)
770 - v(i ,j ,k-1) - v(i ,j-1,k-1) );
772 Real mfx = mf_mx(i,j,0);
773 Real mfy = mf_my(i,j,0);
775 Real met_h_xi,met_h_eta,met_h_zeta;
778 met_h_zeta = detJ(i,j,k);
780 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k))*dxInv[0] - met_h_xi*GradUz ) * mfx;
781 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k))*dxInv[1] - met_h_eta*GradVz ) * mfy;
782 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*dxInv[2]/met_h_zeta;
786 ParallelFor(tbxxy,tbxxz,tbxyz,
787 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
788 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
789 Real idz0 = 1.0 / dz0;
791 Real GradUz = (k == 0) ?
792 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
793 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
794 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
795 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
796 Real GradVz = (k == 0) ?
797 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
798 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
799 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
800 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
802 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
803 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
805 Real met_h_xi,met_h_eta;
809 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
810 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
811 - (met_h_eta)*GradUz*mfy
812 - (met_h_xi )*GradVz*mfx );
815 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
816 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
817 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
818 Real idz0 = 1.0 / dz0;
820 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
821 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
823 Real mfx = mf_ux(i,j,0);
825 Real met_h_xi,met_h_zeta;
829 Real du_dz = (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta;
830 tau13(i,j,k) = 0.5 * ( du_dz
831 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
832 - (met_h_xi)*GradWz ) * mfx );
835 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
837 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
838 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
839 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
840 Real idz0 = 1.0 / dz0;
842 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
843 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
845 Real mfy = mf_vy(i,j,0);
847 Real met_h_eta,met_h_zeta;
851 Real dv_dz = (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta;
852 tau23(i,j,k) = 0.5 * ( dv_dz
853 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
854 - (met_h_eta)*GradWz ) * mfy );
857 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
@ tau12
Definition: ERF_DataStruct.H:31
@ tau23
Definition: ERF_DataStruct.H:31
@ tau33
Definition: ERF_DataStruct.H:31
@ tau22
Definition: ERF_DataStruct.H:31
@ tau11
Definition: ERF_DataStruct.H:31
@ tau32
Definition: ERF_DataStruct.H:31
@ tau31
Definition: ERF_DataStruct.H:31
@ tau21
Definition: ERF_DataStruct.H:31
@ tau13
Definition: ERF_DataStruct.H:31
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