Compute the EB x-momentum stress on a staggered face.
480 velx = velx_arr(i,j,k);
483 amrex::Real v_vfrac_sum = v_vfrac_arr(i,j,k) + v_vfrac_arr(i,j+1,k) +
484 v_vfrac_arr(i-1,j,k) + v_vfrac_arr(i-1,j+1,k);
485 vely = (v_vfrac_sum >
eps) ?
486 (vely_arr(i,j,k) * v_vfrac_arr(i,j,k) + vely_arr(i,j+1,k) * v_vfrac_arr(i,j+1,k) +
487 vely_arr(i-1,j,k) * v_vfrac_arr(i-1,j,k) + vely_arr(i-1,j+1,k) * v_vfrac_arr(i-1,j+1,k))
488 / v_vfrac_sum :
zero;
491 amrex::Real w_vfrac_sum = w_vfrac_arr(i,j,k) + w_vfrac_arr(i,j,k+1) +
492 w_vfrac_arr(i-1,j,k) + w_vfrac_arr(i-1,j,k+1);
494 (velz_arr(i,j,k) * w_vfrac_arr(i,j,k) + velz_arr(i,j,k+1) * w_vfrac_arr(i,j,k+1) +
495 velz_arr(i-1,j,k) * w_vfrac_arr(i-1,j,k) + velz_arr(i-1,j,k+1) * w_vfrac_arr(i-1,j,k+1))
496 / w_vfrac_sum :
zero;
505 velx_tangent = velx - v_dot_n *
nx;
506 vely_tangent = vely - v_dot_n *
ny;
509 amrex::Real cc_vfrac_sum = cc_vfrac_arr(i-1,j,k) + cc_vfrac_arr(i,j,k);
510 rho = (cc_vfrac_sum >
eps) ?
511 (cons_arr(i-1,j,k,
Rho_comp) * cc_vfrac_arr(i-1,j,k) + cons_arr(i,j,k,
Rho_comp) * cc_vfrac_arr(i,j,k))
512 / cc_vfrac_sum :
zero;
515 bool low_valid = cc_flag_arr(i-1,j,k).isSingleValued();
516 bool high_valid = cc_flag_arr(i,j,k).isSingleValued();
518 if (low_valid && high_valid) {
519 ustar =
myhalf * (u_star_arr(i-1,j,k) + u_star_arr(i,j,k));
520 wsp_mean =
myhalf * (umm_arr(i-1,j,0) + umm_arr(i,j,0));
521 }
else if (low_valid) {
522 ustar = u_star_arr(i-1,j,k);
523 wsp_mean = umm_arr(i-1,j,0);
524 }
else if (high_valid) {
525 ustar = u_star_arr(i,j,k);
526 wsp_mean = umm_arr(i,j,0);
532 }
else if (idir == 1) {
534 vely = vely_arr(i,j,k);
537 amrex::Real u_vfrac_sum = u_vfrac_arr(i,j,k) + u_vfrac_arr(i+1,j,k) +
538 u_vfrac_arr(i,j-1,k) + u_vfrac_arr(i+1,j-1,k);
539 velx = (u_vfrac_sum >
eps) ?
540 (velx_arr(i,j,k) * u_vfrac_arr(i,j,k) + velx_arr(i+1,j,k) * u_vfrac_arr(i+1,j,k) +
541 velx_arr(i,j-1,k) * u_vfrac_arr(i,j-1,k) + velx_arr(i+1,j-1,k) * u_vfrac_arr(i+1,j-1,k))
542 / u_vfrac_sum :
zero;
545 amrex::Real w_vfrac_sum = w_vfrac_arr(i,j,k) + w_vfrac_arr(i,j,k+1) +
546 w_vfrac_arr(i,j-1,k) + w_vfrac_arr(i,j-1,k+1);
548 (velz_arr(i,j,k) * w_vfrac_arr(i,j,k) + velz_arr(i,j,k+1) * w_vfrac_arr(i,j,k+1) +
549 velz_arr(i,j-1,k) * w_vfrac_arr(i,j-1,k) + velz_arr(i,j-1,k+1) * w_vfrac_arr(i,j-1,k+1))
550 / w_vfrac_sum :
zero;
559 velx_tangent = velx - v_dot_n *
nx;
560 vely_tangent = vely - v_dot_n *
ny;
563 amrex::Real cc_vfrac_sum = cc_vfrac_arr(i,j-1,k) + cc_vfrac_arr(i,j,k);
564 rho = (cc_vfrac_sum >
eps) ?
565 (cons_arr(i,j-1,k,
Rho_comp) * cc_vfrac_arr(i,j-1,k) + cons_arr(i,j,k,
Rho_comp) * cc_vfrac_arr(i,j,k))
566 / cc_vfrac_sum :
zero;
569 bool low_valid = cc_flag_arr(i,j-1,k).isSingleValued();
570 bool high_valid = cc_flag_arr(i,j,k).isSingleValued();
572 if (low_valid && high_valid) {
573 ustar =
myhalf * (u_star_arr(i,j-1,k) + u_star_arr(i,j,k));
574 wsp_mean =
myhalf * (umm_arr(i,j-1,0) + umm_arr(i,j,0));
575 }
else if (low_valid) {
576 ustar = u_star_arr(i,j-1,k);
577 wsp_mean = umm_arr(i,j-1,0);
578 }
else if (high_valid) {
579 ustar = u_star_arr(i,j,k);
580 wsp_mean = umm_arr(i,j,0);
589 amrex::Real u_vfrac_sum = u_vfrac_arr(i,j,k-1) + u_vfrac_arr(i+1,j,k-1) +
590 u_vfrac_arr(i,j,k) + u_vfrac_arr(i+1,j,k);
591 velx = (u_vfrac_sum >
eps) ?
592 (velx_arr(i,j,k-1) * u_vfrac_arr(i,j,k-1) + velx_arr(i+1,j,k-1) * u_vfrac_arr(i+1,j,k-1) +
593 velx_arr(i,j,k) * u_vfrac_arr(i,j,k) + velx_arr(i+1,j,k) * u_vfrac_arr(i+1,j,k))
594 / u_vfrac_sum :
zero;
597 amrex::Real v_vfrac_sum = v_vfrac_arr(i,j,k-1) + v_vfrac_arr(i,j+1,k-1) +
598 v_vfrac_arr(i,j,k) + v_vfrac_arr(i,j+1,k);
599 vely = (v_vfrac_sum >
eps) ?
600 (vely_arr(i,j,k-1) * v_vfrac_arr(i,j,k-1) + vely_arr(i,j+1,k-1) * v_vfrac_arr(i,j+1,k-1) +
601 vely_arr(i,j,k) * v_vfrac_arr(i,j,k) + vely_arr(i,j+1,k) * v_vfrac_arr(i,j+1,k))
602 / v_vfrac_sum :
zero;
614 velx_tangent = velx - v_dot_n *
nx;
615 vely_tangent = vely - v_dot_n *
ny;
618 amrex::Real cc_vfrac_sum = cc_vfrac_arr(i,j,k-1) + cc_vfrac_arr(i,j,k);
619 rho = (cc_vfrac_sum >
eps) ?
620 (cons_arr(i,j,k-1,
Rho_comp) * cc_vfrac_arr(i,j,k-1) + cons_arr(i,j,k,
Rho_comp) * cc_vfrac_arr(i,j,k))
621 / cc_vfrac_sum :
zero;
624 bool low_valid = cc_flag_arr(i,j,k-1).isSingleValued();
625 bool high_valid = cc_flag_arr(i,j,k).isSingleValued();
627 if (low_valid && high_valid) {
628 ustar =
myhalf * (u_star_arr(i,j,k-1) + u_star_arr(i,j,k));
629 wsp_mean =
myhalf * (umm_arr(i,j,0) + umm_arr(i,j,0));
630 }
else if (low_valid) {
631 ustar = u_star_arr(i,j,k-1);
632 wsp_mean = umm_arr(i,j,0);
633 }
else if (high_valid) {
634 ustar = u_star_arr(i,j,k);
635 wsp_mean = umm_arr(i,j,0);
642 wsp_mean = std::max(wsp_mean,
WSMIN);
649 amrex::Real wsp = std::sqrt(velx_tangent*velx_tangent+vely_tangent*vely_tangent);
651 amrex::Real num2 = wsp_mean * (velx_tangent-umean);
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41