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 if (!need_to_test || u(
dom_lo.x,j,k) <= 0.) {
183 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dz_inv
184 + ( (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0]) * mfx );
186 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
187 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]) * mfx );
194 Box planexz = tbxxz; planexz.setSmall(0, planexz.bigEnd(0) );
195 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
199 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
200 Real mfx = mf_ux(i,j,0);
202 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
204 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
205 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dz_inv
206 - ( (-(8./3.) * w(i,j,k) + 3. * w(i-1,j,k) - (1./3.) * w(i-2,j,k))*dxInv[0]) * mfx );
208 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
209 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]) * mfx );
219 Box planexy = tbxxy; planexy.setBig(1, planexy.smallEnd(1) );
223 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
224 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
225 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
227 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
228 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
229 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx);
231 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
232 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
238 Box planexy = tbxxy; planexy.setSmall(1, planexy.bigEnd(1) );
242 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
243 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
244 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
246 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
247 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 +
248 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx);
250 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
251 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
258 Box planeyz = tbxyz; planeyz.setBig(1, planeyz.smallEnd(1) );
259 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
263 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
264 Real mfy = mf_vy(i,j,0);
266 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
268 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
269 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dz_inv
270 + ( (-(8./3.) * w(i,j-1,k) + 3. * w(i,j ,k) - (1./3.) * w(i,j+1,k))*dxInv[1]) * mfy );
272 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dz_inv
273 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]) * mfy );
279 Box planeyz = tbxyz; planeyz.setSmall(1, planeyz.bigEnd(1) );
280 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
284 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
285 Real mfy = mf_vy(i,j,0);
287 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
289 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
290 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dz_inv
291 - ( (-(8./3.) * w(i,j ,k) + 3. * w(i,j-1,k) - (1./3.) * w(i,j-2,k))*dxInv[1]) * mfy );
293 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dz_inv
294 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]) * mfy );
304 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2) );
307 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
309 Real dz0 = dz_ptr[k];
310 Real dz1 = dz_ptr[k+1];
311 Real idz0 = 1.0 / dz0;
312 Real f = (dz1 / dz0) + 2.0;
314 Real c3 = 2.0 / (f - f2);
318 Real mfx = mf_ux(i,j,0);
320 tau13(i,j,k) = 0.5 * ( (
c1 * u(i,j,k-1) +
c2 * u(i,j,k) + c3 * u(i,j,k+1))*idz0
321 + ( (w(i, j, k) - w(i-1, j, k))*dxInv[0]) * mfx );
327 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
330 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
332 Real dz0 = dz_ptr[k-1];
333 Real dz1 = dz_ptr[k-2];
334 Real idz0 = 1.0 / dz0;
335 Real f = (dz1 / dz0) + 2.0;
337 Real c3 = 2.0 / (f - f2);
341 Real mfx = mf_ux(i,j,0);
343 tau13(i,j,k) = 0.5 * ( -(
c1 * u(i,j,k) +
c2 * u(i,j,k-1) + c3 * u(i,j,k-2))*idz0
344 + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mfx );
350 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
353 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
355 Real dz0 = dz_ptr[k];
356 Real dz1 = dz_ptr[k+1];
357 Real idz0 = 1.0 / dz0;
358 Real f = (dz1 / dz0) + 2.0;
360 Real c3 = 2.0 / (f - f2);
364 Real mfy = mf_vy(i,j,0);
366 tau23(i,j,k) = 0.5 * ( (
c1 * v(i,j,k-1) +
c2 * v(i,j,k ) + c3 * v(i,j,k+1))*idz0
367 + ( (w(i, j, k) - w(i, j-1, k))*dxInv[1]) * mfy );
371 if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
373 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
376 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
378 Real dz0 = dz_ptr[k-1];
379 Real dz1 = dz_ptr[k-2];
380 Real idz0 = 1.0 / dz0;
381 Real f = (dz1 / dz0) + 2.0;
383 Real c3 = 2.0 / (f - f2);
387 Real mfy = mf_vy(i,j,0);
389 tau23(i,j,k) = 0.5 * ( -(
c1 * v(i,j,k ) +
c2 * v(i,j,k-1) + c3 * v(i,j,k-2))*idz0
390 + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mfy );
396 if (zl_u_dir && zl_v_dir) {
397 Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
400 ParallelFor(planecc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
401 Real dz0 = dz_ptr[k];
402 Real idz0 = 1.0 / dz0;
404 Real mfx = mf_mx(i,j,0);
405 Real mfy = mf_my(i,j,0);
407 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k) )*dxInv[0]) * mfx;
408 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k) )*dxInv[1]) * mfy;
409 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*idz0;
412 Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
415 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
416 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
417 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
419 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
420 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
428 if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
429 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
432 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
433 Real mfx = mf_ux(i,j,0);
435 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
437 tau13(i,j,k) = 0.5 * (u(i, j, k) - u(i , j, k-1))*dz_inv
438 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0] * mfx;
442 if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
443 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
446 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
447 Real mfy = mf_vy(i,j,0);
449 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
451 tau23(i,j,k) = 0.5 * (v(i, j, k) - v(i, j , k-1))*dz_inv
452 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy;
460 if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
461 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
464 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
465 Real mfx = mf_ux(i,j,0);
467 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
469 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
470 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mfx );
474 if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
475 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
478 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
479 Real mfy = mf_vy(i,j,0);
481 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
483 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dz_inv
484 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mfy );
493 ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
494 Real mfx = mf_mx(i,j,0);
495 Real mfy = mf_my(i,j,0);
497 Real dz_inv = 1.0 / dz_ptr[k];
499 tau11(i,j,k) = (u(i+1, j, k) - u(i, j, k))*dxInv[0] * mfx;
500 tau22(i,j,k) = (v(i, j+1, k) - v(i, j, k))*dxInv[1] * mfy;
501 tau33(i,j,k) = (w(i, j, k+1) - w(i, j, k))*dz_inv;
505 ParallelFor(tbxxy,tbxxz,tbxyz,
506 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
507 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
508 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
510 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
511 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
514 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
515 Real mfx = mf_ux(i,j,0);
517 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
519 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
520 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]) * mfx;
523 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
524 Real mfy = mf_vy(i,j,0);
526 Real dz_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
528 tau23(i,j,k) = 0.5 * (v(i, j, k) - v(i, j , k-1))*dz_inv
529 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy;
534 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
@ 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