Function for computing the strain rates with terrain.
61 Box domain_xy = convert(domain, tbxxy.ixType());
62 Box domain_xz = convert(domain, tbxxz.ixType());
63 Box domain_yz = convert(domain, tbxyz.ixType());
65 const auto&
dom_lo = lbound(domain);
66 const auto&
dom_hi = ubound(domain);
68 auto dz_ptr = stretched_dz_d.data();
74 xl_v_dir = ( xl_v_dir && (tbxxy.smallEnd(0) == domain_xy.smallEnd(0)) );
79 xh_v_dir = ( xh_v_dir && (tbxxy.bigEnd(0) == domain_xy.bigEnd(0)) );
84 xl_w_dir = ( xl_w_dir && (tbxxz.smallEnd(0) == domain_xz.smallEnd(0)) );
89 xh_w_dir = ( xh_w_dir && (tbxxz.bigEnd(0) == domain_xz.bigEnd(0)) );
95 yl_u_dir = ( yl_u_dir && (tbxxy.smallEnd(1) == domain_xy.smallEnd(1)) );
100 yh_u_dir = ( yh_u_dir && (tbxxy.bigEnd(1) == domain_xy.bigEnd(1)) );
105 yl_w_dir = ( yl_w_dir && (tbxyz.smallEnd(1) == domain_yz.smallEnd(1)) );
110 yh_w_dir = ( yh_w_dir && (tbxyz.bigEnd(1) == domain_yz.bigEnd(1)) );
115 zl_u_dir = ( zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) );
119 zh_u_dir = ( zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2)) );
123 zl_v_dir = ( zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2)) );
127 zh_v_dir = ( zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2)) );
133 Box planexy = tbxxy; planexy.setBig(0, planexy.smallEnd(0) );
137 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
138 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
139 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
141 if (!need_to_test || u(
dom_lo.x,j,k) >= 0.) {
142 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
143 + (-(8./3.) * v(i-1,j,k) + 3. * v(i,j,k) - (1./3.) * v(i+1,j,k))*dxInv[0]*mfx);
145 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
146 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
152 Box planexy = tbxxy; planexy.setSmall(0, planexy.bigEnd(0) );
156 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
157 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
158 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
160 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
161 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
162 - (-(8./3.) * v(i,j,k) + 3. * v(i-1,j,k) - (1./3.) * v(i-2,j,k))*dxInv[0]*mfx);
164 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
165 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
172 Box planexz = tbxxz; planexz.setBig(0, planexz.smallEnd(0) );
173 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
177 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
178 Real mfx = mf_ux(i,j,0);
180 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
182 Real du_dz = (u(i, j, k) - u(i, j, k-1))*dz_inv;
183 if (!need_to_test || u(
dom_lo.x,j,k) <= 0.) {
184 tau13(i,j,k) = 0.5 * ( du_dz
185 + (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0] * mfx );
187 tau13(i,j,k) = 0.5 * ( du_dz
188 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0] * mfx );
192 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
197 Box planexz = tbxxz; planexz.setSmall(0, planexz.bigEnd(0) );
198 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
202 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
203 Real mfx = mf_ux(i,j,0);
205 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
207 Real du_dz = (u(i, j, k) - u(i, j, k-1))*dz_inv;
208 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
209 tau13(i,j,k) = 0.5 * ( du_dz
210 - (-(8./3.) * w(i,j,k) + 3. * w(i-1,j,k) - (1./3.) * w(i-2,j,k))*dxInv[0] * mfx );
212 tau13(i,j,k) = 0.5 * ( du_dz
213 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0] * mfx );
217 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
225 Box planexy = tbxxy; planexy.setBig(1, planexy.smallEnd(1) );
229 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
230 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
231 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
233 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
234 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
235 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx);
237 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
238 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
244 Box planexy = tbxxy; planexy.setSmall(1, planexy.bigEnd(1) );
248 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
249 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
250 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
252 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
253 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 +
254 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx);
256 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
257 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
264 Box planeyz = tbxyz; planeyz.setBig(1, planeyz.smallEnd(1) );
265 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
269 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
270 Real mfy = mf_vy(i,j,0);
272 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
274 Real dv_dz = (v(i, j, k) - v(i, j, k-1))*dz_inv;
275 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
276 tau23(i,j,k) = 0.5 * ( dv_dz
277 + (-(8./3.) * w(i,j-1,k) + 3. * w(i,j ,k) - (1./3.) * w(i,j+1,k))*dxInv[1] * mfy );
279 tau23(i,j,k) = 0.5 * ( dv_dz
280 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy );
284 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
288 Box planeyz = tbxyz; planeyz.setSmall(1, planeyz.bigEnd(1) );
289 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
293 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
294 Real mfy = mf_vy(i,j,0);
296 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
298 Real dv_dz = (v(i, j, k) - v(i, j, k-1))*dz_inv;
299 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
300 tau23(i,j,k) = 0.5 * ( dv_dz
301 - (-(8./3.) * w(i,j ,k) + 3. * w(i,j-1,k) - (1./3.) * w(i,j-2,k))*dxInv[1] * mfy );
303 tau23(i,j,k) = 0.5 * ( dv_dz
304 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy );
308 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
316 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2) );
319 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
321 Real dz0 = dz_ptr[k];
322 Real dz1 = dz_ptr[k+1];
323 Real idz0 = 1.0 / dz0;
324 Real f = (dz1 / dz0) + 2.0;
326 Real c3 = 2.0 / (f - f2);
330 Real mfx = mf_ux(i,j,0);
332 Real du_dz = (
c1 * u(i,j,k-1) +
c2 * u(i,j,k) + c3 * u(i,j,k+1))*idz0;
333 tau13(i,j,k) = 0.5 * ( du_dz
334 + (w(i, j, k) - w(i-1, j, k))*dxInv[0] * mfx );
337 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
342 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
345 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
347 Real dz0 = dz_ptr[k-1];
348 Real dz1 = dz_ptr[k-2];
349 Real idz0 = 1.0 / dz0;
350 Real f = (dz1 / dz0) + 2.0;
352 Real c3 = 2.0 / (f - f2);
356 Real mfx = mf_ux(i,j,0);
358 Real du_dz = -(
c1 * u(i,j,k) +
c2 * u(i,j,k-1) + c3 * u(i,j,k-2))*idz0;
359 tau13(i,j,k) = 0.5 * ( du_dz
360 + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mfx );
363 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
368 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
371 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
373 Real dz0 = dz_ptr[k];
374 Real dz1 = dz_ptr[k+1];
375 Real idz0 = 1.0 / dz0;
376 Real f = (dz1 / dz0) + 2.0;
378 Real c3 = 2.0 / (f - f2);
382 Real mfy = mf_vy(i,j,0);
384 Real dv_dz = (
c1 * v(i,j,k-1) +
c2 * v(i,j,k ) + c3 * v(i,j,k+1))*idz0;
385 tau23(i,j,k) = 0.5 * ( dv_dz
386 + (w(i, j, k) - w(i, j-1, k))*dxInv[1] * mfy );
389 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
392 if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
394 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
397 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
399 Real dz0 = dz_ptr[k-1];
400 Real dz1 = dz_ptr[k-2];
401 Real idz0 = 1.0 / dz0;
402 Real f = (dz1 / dz0) + 2.0;
404 Real c3 = 2.0 / (f - f2);
408 Real mfy = mf_vy(i,j,0);
410 Real dv_dz = -(
c1 * v(i,j,k ) +
c2 * v(i,j,k-1) + c3 * v(i,j,k-2))*idz0;
411 tau23(i,j,k) = 0.5 * ( dv_dz
412 + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mfy );
415 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
420 if (zl_u_dir && zl_v_dir) {
421 Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
424 ParallelFor(planecc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
425 Real dz0 = dz_ptr[k];
426 Real idz0 = 1.0 / dz0;
428 Real mfx = mf_mx(i,j,0);
429 Real mfy = mf_my(i,j,0);
431 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k) )*dxInv[0]) * mfx;
432 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k) )*dxInv[1]) * mfy;
433 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*idz0;
436 Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
439 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
440 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
441 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
443 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
444 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
452 if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
453 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
456 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
457 Real mfx = mf_ux(i,j,0);
459 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
461 Real du_dz = (u(i, j, k) - u(i , j, k-1))*dz_inv;
462 tau13(i,j,k) = 0.5 * ( du_dz
463 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0] * mfx );
466 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
469 if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
470 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
473 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
474 Real mfy = mf_vy(i,j,0);
476 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
478 Real dv_dz = (v(i, j, k) - v(i, j , k-1))*dz_inv;
479 tau23(i,j,k) = 0.5 * ( dv_dz
480 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy );
483 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
490 if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
491 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
494 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
495 Real mfx = mf_ux(i,j,0);
497 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
499 Real du_dz = (u(i, j, k) - u(i , j, k-1))*dz_inv;
500 tau13(i,j,k) = 0.5 * ( du_dz
501 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mfx );
504 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
507 if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
508 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
511 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
512 Real mfy = mf_vy(i,j,0);
514 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
516 Real dv_dz = (v(i, j, k) - v(i, j , k-1))*dz_inv;
517 tau23(i,j,k) = 0.5 * ( dv_dz
518 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mfy );
521 if (tau23i) tau23i(i,j,k) = 0.5 * dv_dz;
529 ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
530 Real mfx = mf_mx(i,j,0);
531 Real mfy = mf_my(i,j,0);
533 Real dz_inv = 1.0 / dz_ptr[k];
535 tau11(i,j,k) = (u(i+1, j, k) - u(i, j, k))*dxInv[0] * mfx;
536 tau22(i,j,k) = (v(i, j+1, k) - v(i, j, k))*dxInv[1] * mfy;
537 tau33(i,j,k) = (w(i, j, k+1) - w(i, j, k))*dz_inv;
541 ParallelFor(tbxxy,tbxxz,tbxyz,
542 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
543 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
544 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
546 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
547 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
550 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
551 Real mfx = mf_ux(i,j,0);
553 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
555 Real du_dz = (u(i, j, k) - u(i , j, k-1))*dz_inv;
556 tau13(i,j,k) = 0.5 * ( du_dz
557 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0] * mfx );
560 if (tau13i) tau13i(i,j,k) = 0.5 * du_dz;
562 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
563 Real mfy = mf_vy(i,j,0);
565 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
567 Real dv_dz = (v(i, j, k) - v(i, j , k-1))*dz_inv;
568 tau23(i,j,k) = 0.5 * ( dv_dz
569 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy );
572 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
@ 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