Function for computing the strain rates with terrain.
57 Box domain_xy = convert(domain, tbxxy.ixType());
58 Box domain_xz = convert(domain, tbxxz.ixType());
59 Box domain_yz = convert(domain, tbxyz.ixType());
61 const auto&
dom_lo = lbound(domain);
62 const auto&
dom_hi = ubound(domain);
64 auto dz_ptr = stretched_dz_d.data();
70 xl_v_dir = ( xl_v_dir && (tbxxy.smallEnd(0) == domain_xy.smallEnd(0)) );
75 xh_v_dir = ( xh_v_dir && (tbxxy.bigEnd(0) == domain_xy.bigEnd(0)) );
80 xl_w_dir = ( xl_w_dir && (tbxxz.smallEnd(0) == domain_xz.smallEnd(0)) );
85 xh_w_dir = ( xh_w_dir && (tbxxz.bigEnd(0) == domain_xz.bigEnd(0)) );
91 yl_u_dir = ( yl_u_dir && (tbxxy.smallEnd(1) == domain_xy.smallEnd(1)) );
96 yh_u_dir = ( yh_u_dir && (tbxxy.bigEnd(1) == domain_xy.bigEnd(1)) );
101 yl_w_dir = ( yl_w_dir && (tbxyz.smallEnd(1) == domain_yz.smallEnd(1)) );
106 yh_w_dir = ( yh_w_dir && (tbxyz.bigEnd(1) == domain_yz.bigEnd(1)) );
111 zl_u_dir = ( zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) );
115 zh_u_dir = ( zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2)) );
119 zl_v_dir = ( zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2)) );
123 zh_v_dir = ( zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2)) );
130 Box planexy = tbxxy; planexy.setBig(0, planexy.smallEnd(0) );
133 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
134 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
135 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
137 if (!need_to_test || u(
dom_lo.x,j,k) >= 0.) {
138 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
139 + (-(8./3.) * v(i-1,j,k) + 3. * v(i,j,k) - (1./3.) * v(i+1,j,k))*dxInv[0]*mfx);
141 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
142 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
149 Box planexy = tbxxy; planexy.setSmall(0, planexy.bigEnd(0) );
152 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
153 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
154 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
156 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
157 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j-1, k) )*dxInv[1]*mfy
158 - (-(8./3.) * v(i,j,k) + 3. * v(i-1,j,k) - (1./3.) * v(i-2,j,k))*dxInv[0]*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);
169 Box planexz = tbxxz; planexz.setBig(0, planexz.smallEnd(0) );
170 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
173 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
174 Real mfx = mf_ux(i,j,0);
176 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
178 if (!need_to_test || u(
dom_lo.x,j,k) <= 0.) {
179 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dz_inv
180 + ( (-(8./3.) * w(i-1,j,k) + 3. * w(i,j,k) - (1./3.) * w(i+1,j,k))*dxInv[0]) * mfx );
182 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
183 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]) * mfx );
191 Box planexz = tbxxz; planexz.setSmall(0, planexz.bigEnd(0) );
192 planexz.setSmall(2, planexz.smallEnd(2)+1 ); planexz.setBig(2, planexz.bigEnd(2)-1 );
195 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
196 Real mfx = mf_ux(i,j,0);
198 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
200 if (!need_to_test || u(
dom_hi.x+1,j,k) <= 0.) {
201 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i, j, k-1))*dz_inv
202 - ( (-(8./3.) * w(i,j,k) + 3. * w(i-1,j,k) - (1./3.) * w(i-2,j,k))*dxInv[0]) * mfx );
204 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
205 + ( (w(i, j, k) - w(i-1, j, k ))*dxInv[0]) * mfx );
215 Box planexy = tbxxy; planexy.setBig(1, planexy.smallEnd(1) );
218 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
219 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
220 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
222 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
223 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
224 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx);
226 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
227 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
233 Box planexy = tbxxy; planexy.setSmall(1, planexy.bigEnd(1) );
236 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
237 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
238 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
240 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
241 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 +
242 + (v(i, j, k) - v(i-1, j, k))*dxInv[0]*mfx);
244 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
245 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
252 Box planeyz = tbxyz; planeyz.setBig(1, planeyz.smallEnd(1) );
253 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
256 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
257 Real mfy = mf_vy(i,j,0);
259 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
261 if (!need_to_test || v(i,
dom_lo.y,k) >= 0.) {
262 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dz_inv
263 + ( (-(8./3.) * w(i,j-1,k) + 3. * w(i,j ,k) - (1./3.) * w(i,j+1,k))*dxInv[1]) * mfy );
265 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dz_inv
266 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]) * mfy );
272 Box planeyz = tbxyz; planeyz.setSmall(1, planeyz.bigEnd(1) );
273 planeyz.setSmall(2, planeyz.smallEnd(2)+1 ); planeyz.setBig(2, planeyz.bigEnd(2)-1 );
276 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
277 Real mfy = mf_vy(i,j,0);
279 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
281 if (!need_to_test || v(i,
dom_hi.y+1,k) >= 0.) {
282 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j, k-1))*dz_inv
283 - ( (-(8./3.) * w(i,j ,k) + 3. * w(i,j-1,k) - (1./3.) * w(i,j-2,k))*dxInv[1]) * mfy );
285 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dz_inv
286 + ( (w(i, j, k) - w(i, j-1, k ))*dxInv[1]) * mfy );
296 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2) );
298 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
300 Real dz0 = dz_ptr[k];
301 Real dz1 = dz_ptr[k+1];
302 Real idz0 = 1.0 / dz0;
303 Real f = (dz1 / dz0) + 2.0;
305 Real c3 = 2.0 / (f - f2);
307 Real
c1 = -(1.0-f2)*c3;
309 Real mfx = mf_ux(i,j,0);
311 tau13(i,j,k) = 0.5 * ( (
c1 * u(i,j,k-1) +
c2 * u(i,j,k) + c3 * u(i,j,k+1))*idz0
312 + ( (w(i, j, k) - w(i-1, j, k))*dxInv[0]) * mfx );
318 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
320 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
322 Real dz0 = dz_ptr[k-1];
323 Real dz1 = dz_ptr[k-2];
324 Real idz0 = 1.0 / dz0;
325 Real f = (dz1 / dz0) + 2.0;
327 Real c3 = 2.0 / (f - f2);
329 Real
c1 = -(1.0-f2)*c3;
331 Real mfx = mf_ux(i,j,0);
333 tau13(i,j,k) = 0.5 * ( -(
c1 * u(i,j,k) +
c2 * u(i,j,k-1) + c3 * u(i,j,k-2))*idz0
334 + (w(i, j, k) - w(i-1, j, k))*dxInv[0]*mfx );
340 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
342 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
344 Real dz0 = dz_ptr[k];
345 Real dz1 = dz_ptr[k+1];
346 Real idz0 = 1.0 / dz0;
347 Real f = (dz1 / dz0) + 2.0;
349 Real c3 = 2.0 / (f - f2);
351 Real
c1 = -(1.0-f2)*c3;
353 Real mfy = mf_vy(i,j,0);
355 tau23(i,j,k) = 0.5 * ( (
c1 * v(i,j,k-1) +
c2 * v(i,j,k ) + c3 * v(i,j,k+1))*idz0
356 + ( (w(i, j, k) - w(i, j-1, k))*dxInv[1]) * mfy );
360 if (zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
362 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
364 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
366 Real dz0 = dz_ptr[k-1];
367 Real dz1 = dz_ptr[k-2];
368 Real idz0 = 1.0 / dz0;
369 Real f = (dz1 / dz0) + 2.0;
371 Real c3 = 2.0 / (f - f2);
373 Real
c1 = -(1.0-f2)*c3;
375 Real mfy = mf_vy(i,j,0);
377 tau23(i,j,k) = 0.5 * ( -(
c1 * v(i,j,k ) +
c2 * v(i,j,k-1) + c3 * v(i,j,k-2))*idz0
378 + (w(i, j, k) - w(i, j-1, k))*dxInv[1]*mfy );
384 if (zl_u_dir && zl_v_dir) {
385 Box planecc = bxcc; planecc.setBig(2, planecc.smallEnd(2) );
387 ParallelFor(planecc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
388 Real dz0 = dz_ptr[k];
389 Real idz0 = 1.0 / dz0;
391 Real mfx = mf_mx(i,j,0);
392 Real mfy = mf_my(i,j,0);
394 tau11(i,j,k) = ( (u(i+1, j, k) - u(i, j, k) )*dxInv[0]) * mfx;
395 tau22(i,j,k) = ( (v(i, j+1, k) - v(i, j, k) )*dxInv[1]) * mfy;
396 tau33(i,j,k) = ( w(i, j, k+1) - w(i, j, k) )*idz0;
399 Box planexy = tbxxy; planexy.setBig(2, planexy.smallEnd(2) );
401 ParallelFor(planexy,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
402 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
403 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
405 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
406 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
414 if (!zl_u_dir && (tbxxz.smallEnd(2) == domain_xz.smallEnd(2)) ) {
415 Box planexz = tbxxz; planexz.setBig(2, planexz.smallEnd(2));
417 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
418 Real mfx = mf_ux(i,j,0);
420 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
422 tau13(i,j,k) = 0.5 * (u(i, j, k) - u(i , j, k-1))*dz_inv
423 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0] * mfx;
427 if (!zl_v_dir && (tbxyz.smallEnd(2) == domain_yz.smallEnd(2))) {
428 Box planeyz = tbxyz; planeyz.setBig(2, planeyz.smallEnd(2) );
430 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
431 Real mfy = mf_vy(i,j,0);
433 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
435 tau23(i,j,k) = 0.5 * (v(i, j, k) - v(i, j , k-1))*dz_inv
436 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * mfy;
444 if (!zh_u_dir && (tbxxz.bigEnd(2) == domain_xz.bigEnd(2))) {
445 Box planexz = tbxxz; planexz.setSmall(2, planexz.bigEnd(2) );
447 ParallelFor(planexz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
448 Real mfx = mf_ux(i,j,0);
450 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
452 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
453 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]*mfx );
457 if (!zh_v_dir && (tbxyz.bigEnd(2) == domain_yz.bigEnd(2))) {
458 Box planeyz = tbxyz; planeyz.setSmall(2, planeyz.bigEnd(2) );
460 ParallelFor(planeyz,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
461 Real mfy = mf_vy(i,j,0);
463 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
465 tau23(i,j,k) = 0.5 * ( (v(i, j, k) - v(i, j , k-1))*dz_inv
466 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1]*mfy );
475 ParallelFor(bxcc, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
476 Real mfx = mf_mx(i,j,0);
477 Real mfy = mf_my(i,j,0);
479 Real dz_inv = 1.0 / dz_ptr[k];
481 tau11(i,j,k) = (u(i+1, j, k) - u(i, j, k))*dxInv[0] * mfx;
482 tau22(i,j,k) = (v(i, j+1, k) - v(i, j, k))*dxInv[1] * mfy;
483 tau33(i,j,k) = (w(i, j, k+1) - w(i, j, k))*dz_inv;
487 ParallelFor(tbxxy,tbxxz,tbxyz,
488 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
489 Real mfy = 0.5 * (mf_uy(i,j,0) + mf_uy(i ,j-1,0));
490 Real mfx = 0.5 * (mf_vx(i,j,0) + mf_vx(i-1,j ,0));
492 tau12(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j-1, k))*dxInv[1]*mfy
493 + (v(i, j, k) - v(i-1, j , k))*dxInv[0]*mfx);
496 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
497 Real mfx = mf_ux(i,j,0);
499 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
501 tau13(i,j,k) = 0.5 * ( (u(i, j, k) - u(i , j, k-1))*dz_inv
502 + (w(i, j, k) - w(i-1, j, k ))*dxInv[0]) * mfx;
505 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept {
506 Real mfy = mf_vy(i,j,0);
508 Real dz_inv = 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
510 tau23(i,j,k) = 0.5 * (v(i, j, k) - v(i, j , k-1))*dz_inv
511 + (w(i, j, k) - w(i, j-1, k ))*dxInv[1] * 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
@ 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