Function for computing the strain rates with terrain.
58 Box domain_xy = convert(domain, tbxxy.ixType());
59 Box domain_xz = convert(domain, tbxxz.ixType());
60 Box domain_yz = convert(domain, tbxyz.ixType());
62 const auto&
dom_lo = lbound(domain);
63 const auto&
dom_hi = ubound(domain);
69 xl_v_dir = ( xl_v_dir && (tbxxy.smallEnd(0) == domain_xy.smallEnd(0)) );
74 xh_v_dir = ( xh_v_dir && (tbxxy.bigEnd(0) == domain_xy.bigEnd(0)) );
79 xl_w_dir = ( xl_w_dir && (tbxxz.smallEnd(0) == domain_xz.smallEnd(0)) );
84 xh_w_dir = ( xh_w_dir && (tbxxz.bigEnd(0) == domain_xz.bigEnd(0)) );
90 yl_u_dir = ( yl_u_dir && (tbxxy.smallEnd(1) == domain_xy.smallEnd(1)) );
95 yh_u_dir = ( yh_u_dir && (tbxxy.bigEnd(1) == domain_xy.bigEnd(1)) );
100 yl_w_dir = ( yl_w_dir && (tbxyz.smallEnd(1) == domain_yz.smallEnd(1)) );
105 yh_w_dir = ( yh_w_dir && (tbxyz.bigEnd(1) == domain_yz.bigEnd(1)) );
110 zl_u_dir = ( zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) );
114 zh_u_dir = ( zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2)) );
118 zl_v_dir = ( zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2)) );
122 zh_v_dir = ( zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2)) );
129 Box planexy = tbxxy; planexy.setBig(0, planexy.smallEnd(0) );
133 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
134 Real inv_dist = (k == 0) ?
Real(2.0) / (z_nd(i,j,k+2) - z_nd(i,j,k )) :
135 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));
137 Real GradUz = (k == 0) ?
138 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
139 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
140 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
141 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
142 Real GradVz = (k == 0) ?
143 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
144 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
145 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
146 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
148 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
149 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
154 if (!need_to_test || u(
dom_lo.x,j,k) >= 0.) {
155 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
156 + (-(8./3.) * v(i-1,j,k) + 3. * v(i,j,k) - (1./3.) * v(i+1,j,k))*dxInv[0]*mfx
157 - (met_h_eta)*GradUz*mfy
158 - (met_h_xi )*GradVz*mfx );
160 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
161 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
162 - (met_h_eta)*GradUz*mfy
163 - (met_h_xi )*GradVz*mfx );
170 Box planexy = tbxxy; planexy.setSmall(0, planexy.bigEnd(0) );
174 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
175 Real inv_dist = (k == 0) ?
Real(2.0) / (z_nd(i,j,k+2) - z_nd(i,j,k )) :
176 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));
178 Real GradUz = (k == 0) ?
179 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
180 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
181 inv_dist * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
182 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
183 Real GradVz = (k == 0) ?
184 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
185 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
186 inv_dist * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
187 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
189 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
190 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
195 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
196 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
197 - (-(8./3.) * v(i,j,k) + 3. * v(i-1,j,k) - (1./3.) * v(i-2,j,k))*dxInv[0]*mfx
198 - (met_h_eta)*GradUz*mfy
199 - (met_h_xi )*GradVz*mfx );
201 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
202 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
203 - (met_h_eta)*GradUz*mfy
204 - (met_h_xi )*GradVz*mfx );
212 Box planexz = tbxxz; planexz.setBig(0, planexz.smallEnd(0) );
213 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
217 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
218 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
219 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
220 Real idz0 = 1.0 / dz0;
222 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
223 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
224 Real mfx = mf_ux(i,j,0);
229 if (!need_to_test || u(
dom_lo.x,j,k) <= 0.) {
230 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dxInv[2]/met_h_zeta
231 + ( (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0]
232 - (met_h_xi)*GradWz ) * mfx );
234 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
235 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
236 - (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) );
428 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
430 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
431 - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
432 Real dz1 = 0.5 * ( z_nd(i,j,k+2) + z_nd(i,j+1,k+2)
433 - z_nd(i,j,k+1) - z_nd(i,j+1,k+1) );
434 Real idz0 = 1.0 / dz0;
435 Real f = (dz1 / dz0) + 2.0;
437 Real c3 = 2.0 / (f - f2);
441 Real GradWz = 0.5 * idz0 * ( w(i,j,k+1) + w(i-1,j,k+1)
442 - w(i,j,k ) - w(i-1,j,k ) );
444 Real mfx = mf_ux(i,j,0);
451 tau13(i,j,k) = 0.5 * ( (
c1 * u(i,j,k-1) +
c2 * u(i,j,k) + c3 * u(i,j,k+1))*idz0
452 + ( (w(i, j, k) - w(i-1, j, k))*dxInv[0]
453 - (met_h_xi)*GradWz ) * mfx );
459 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
461 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
463 Real dz0 = 0.5 * ( z_nd(i,j,k ) + z_nd(i,j+1,k )
464 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
465 Real dz1 = 0.5 * ( z_nd(i,j,k-1) + z_nd(i,j+1,k-1)
466 - z_nd(i,j,k-2) - z_nd(i,j+1,k-2) );
467 Real idz0 = 1.0 / dz0;
468 Real f = (dz1 / dz0) + 2.0;
470 Real c3 = 2.0 / (f - f2);
474 Real mfx = mf_ux(i,j,0);
476 tau13(i,j,k) = 0.5 * ( -(
c1 * u(i,j,k) +
c2 * u(i,j,k-1) + c3 * u(i,j,k-2))*idz0
477 + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mfx );
483 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
485 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
487 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
488 - z_nd(i,j,k ) - z_nd(i+1,j,k ) );
489 Real dz1 = 0.5 * ( z_nd(i,j,k+2) + z_nd(i+1,j,k+2)
490 - z_nd(i,j,k+1) - z_nd(i+1,j,k+1) );
491 Real idz0 = 1.0 / dz0;
492 Real f = (dz1 / dz0) + 2.0;
494 Real c3 = 2.0 / (f - f2);
498 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
499 - w(i ,j ,k ) - w(i ,j-1,k ) );
501 Real mfy = mf_vy(i,j,0);
508 tau23(i,j,k) = 0.5 * ( (
c1 * v(i,j,k-1) +
c2 * v(i,j,k ) + c3 * v(i,j,k+1))*idz0
509 + ( (w(i, j, k) - w(i, j-1, k))*dxInv[1]
510 - (met_h_eta)*GradWz ) * mfy );
514 if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
516 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
518 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
520 Real dz0 = 0.5 * ( z_nd(i,j,k ) + z_nd(i+1,j,k )
521 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
522 Real dz1 = 0.5 * ( z_nd(i,j,k-1) + z_nd(i+1,j,k-1)
523 - z_nd(i,j,k-2) - z_nd(i+1,j,k-2) );
524 Real idz0 = 1.0 / dz0;
525 Real f = (dz1 / dz0) + 2.0;
527 Real c3 = 2.0 / (f - f2);
531 Real mfy = mf_vy(i,j,0);
533 tau23(i,j,k) = 0.5 * ( -(
c1 * v(i,j,k ) +
c2 * v(i,j,k-1) + c3 * v(i,j,k-2))*idz0
534 + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mfy );
540 if (zl_u_dir && zl_v_dir) {
541 Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
543 ParallelFor(planecc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
545 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)
546 - z_nd(i,j,k ) - z_nd(i,j+1,k ) - z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) );
547 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)
548 - 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) );
549 Real idz0 = 1.0 / dz0;
550 Real f = (dz1 / dz0) + 2.0;
552 Real c3 = 2.0 / (f - f2);
556 Real GradUz = 0.5 * idz0 * ( (
c1 * u(i ,j,k-1) +
c2 * u(i ,j,k) + c3 * u(i ,j,k+1))
557 + (
c1 * u(i-1,j,k-1) +
c2 * u(i-1,j,k) + c3 * u(i-1,j,k+1)) );
558 Real GradVz = 0.5 * idz0 * ( (
c1 * v(i,j ,k-1) +
c2 * v(i,j ,k) + c3 * v(i,j ,k+1))
559 + (
c1 * v(i,j-1,k-1) +
c2 * v(i,j-1,k) + c3 * v(i,j-1,k+1)) );
561 Real mfx = mf_mx(i,j,0);
562 Real mfy = mf_my(i,j,0);
564 Real met_h_xi,met_h_eta;
568 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k) )*dxInv[0]
569 - (met_h_xi)*GradUz ) * mfx;
570 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k) )*dxInv[1]
571 - (met_h_eta)*GradVz ) * mfy;
572 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*idz0;
576 Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
578 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
580 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k ) );
581 Real dz1 = ( z_nd(i,j,k+2) - z_nd(i,j,k+1) );
582 Real idz0 = 1.0 / dz0;
583 Real f = (dz1 / dz0) + 2.0;
585 Real c3 = 2.0 / (f - f2);
589 Real GradUz = 0.5 * idz0 * ( (
c1 * u(i,j ,k-1) +
c2 * u(i,j ,k) + c3 * u(i,j ,k+1))
590 + (
c1 * u(i,j-1,k-1) +
c2 * u(i,j-1,k) + c3 * u(i,j-1,k+1)) );
591 Real GradVz = 0.5 * idz0 * ( (
c1 * v(i ,j,k-1) +
c2 * v(i ,j,k) + c3 * v(i ,j,k+1))
592 + (
c1 * v(i-1,j,k-1) +
c2 * v(i-1,j,k) + c3 * v(i-1,j,k+1)) );
594 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
595 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
597 Real met_h_xi,met_h_eta;
601 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
602 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
603 - (met_h_eta)*GradUz*mfy
604 - (met_h_xi )*GradVz*mfx );
612 if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
613 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
615 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
616 Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
617 - w(i ,j ,k ) - w(i-1,j ,k ) );
619 Real mfx = mf_ux(i,j,0);
621 Real met_h_xi,met_h_zeta;
625 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
626 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
627 - (met_h_xi/met_h_zeta)*GradWz ) * mfx);
631 if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
632 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
634 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
635 Real GradWz = 0.5 * dxInv[2] * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
636 - w(i ,j ,k ) - w(i ,j-1,k ) );
638 Real mfy = mf_vy(i,j,0);
640 Real met_h_eta,met_h_zeta;
644 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
645 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
646 - (met_h_eta/met_h_zeta)*GradWz ) * mfy );
654 if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
655 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
657 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
658 Real mfx = mf_ux(i,j,0);
663 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
664 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mfx );
668 if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
669 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
671 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
672 Real mfy = mf_vy(i,j,0);
677 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
678 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mfy );
687 ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
688 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)
689 - 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) );
690 Real idz0 = 1.0 / dz0;
692 Real GradUz = (k == 0) ?
693 idz0 * ( u(i ,j ,k+1) + u(i-1,j ,k+1)
694 - u(i ,j ,k ) - u(i-1,j ,k ) ) :
695 0.5 * idz0 * ( u(i ,j ,k+1) + u(i-1,j ,k+1)
696 - u(i ,j ,k-1) - u(i-1,j ,k-1) );
697 Real GradVz = (k == 0) ?
698 idz0 * ( v(i ,j ,k+1) + v(i ,j-1,k+1)
699 - v(i ,j ,k ) - v(i ,j-1,k ) ) :
700 0.5 * idz0 * ( v(i ,j ,k+1) + v(i ,j-1,k+1)
701 - v(i ,j ,k-1) - v(i ,j-1,k-1) );
703 Real mfx = mf_mx(i,j,0);
704 Real mfy = mf_my(i,j,0);
706 Real met_h_xi,met_h_eta,met_h_zeta;
709 met_h_zeta = detJ(i,j,k);
711 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k))*dxInv[0] - met_h_xi*GradUz ) * mfx;
712 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k))*dxInv[1] - met_h_eta*GradVz ) * mfy;
713 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*dxInv[2]/met_h_zeta;
717 ParallelFor(tbxxy,tbxxz,tbxyz,
718 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
719 Real dz0 = ( z_nd(i,j,k+1) - z_nd(i,j,k-1) );
720 Real idz0 = 1.0 / dz0;
722 Real GradUz = (k == 0) ?
723 idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
724 - u(i ,j ,k ) - u(i ,j-1,k ) ) :
725 0.5 * idz0 * ( u(i ,j ,k+1) + u(i ,j-1,k+1)
726 - u(i ,j ,k-1) - u(i ,j-1,k-1) );
727 Real GradVz = (k == 0) ?
728 idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
729 - v(i ,j ,k ) - v(i-1,j ,k ) ) :
730 0.5 * idz0 * ( v(i ,j ,k+1) + v(i-1,j ,k+1)
731 - v(i ,j ,k-1) - v(i-1,j ,k-1) );
733 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
734 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
736 Real met_h_xi,met_h_eta;
740 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
741 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx
742 - (met_h_eta)*GradUz*mfy
743 - (met_h_xi)*GradVz*mfx );
746 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
747 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
748 - z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
749 Real idz0 = 1.0 / dz0;
751 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i-1,j ,k+1)
752 - w(i ,j ,k-1) - w(i-1,j ,k-1) );
754 Real mfx = mf_ux(i,j,0);
756 Real met_h_xi,met_h_zeta;
760 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dxInv[2]/met_h_zeta
761 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]
762 - (met_h_xi)*GradWz ) * mfx );
765 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
766 Real dz0 = 0.5 * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
767 - z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
768 Real idz0 = 1.0 / dz0;
770 Real GradWz = 0.5 * idz0 * ( w(i ,j ,k+1) + w(i ,j-1,k+1)
771 - w(i ,j ,k-1) - w(i ,j-1,k-1) );
773 Real mfy = mf_vy(i,j,0);
775 Real met_h_eta,met_h_zeta;
779 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dxInv[2]/met_h_zeta
780 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]
781 - (met_h_eta)*GradWz ) * mfy );
@ 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
const auto & dom_hi
Definition: ERF_DiffSetup.H:10
const auto & dom_lo
Definition: ERF_DiffSetup.H:9
amrex::Real Real
Definition: ERF_ShocInterface.H:16
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_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
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:211