Compute the EB x-momentum stress on a staggered face.
469 velx = velx_arr(i,j,k);
472 amrex::Real v_vfrac_sum = v_vfrac_arr(i,j,k) + v_vfrac_arr(i,j+1,k) +
473 v_vfrac_arr(i-1,j,k) + v_vfrac_arr(i-1,j+1,k);
474 vely = (v_vfrac_sum >
eps) ?
475 (vely_arr(i,j,k) * v_vfrac_arr(i,j,k) + vely_arr(i,j+1,k) * v_vfrac_arr(i,j+1,k) +
476 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))
477 / v_vfrac_sum :
zero;
480 amrex::Real w_vfrac_sum = w_vfrac_arr(i,j,k) + w_vfrac_arr(i,j,k+1) +
481 w_vfrac_arr(i-1,j,k) + w_vfrac_arr(i-1,j,k+1);
483 (velz_arr(i,j,k) * w_vfrac_arr(i,j,k) + velz_arr(i,j,k+1) * w_vfrac_arr(i,j,k+1) +
484 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))
485 / w_vfrac_sum :
zero;
494 velx_tangent = velx - v_dot_n * nx;
495 vely_tangent = vely - v_dot_n * ny;
498 amrex::Real cc_vfrac_sum = cc_vfrac_arr(i-1,j,k) + cc_vfrac_arr(i,j,k);
499 rho = (cc_vfrac_sum >
eps) ?
500 (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))
501 / cc_vfrac_sum :
zero;
504 bool low_valid = cc_flag_arr(i-1,j,k).isSingleValued();
505 bool high_valid = cc_flag_arr(i,j,k).isSingleValued();
507 if (low_valid && high_valid) {
508 ustar =
myhalf * (u_star_arr(i-1,j,k) + u_star_arr(i,j,k));
509 wsp_mean =
myhalf * (umm_arr(i-1,j,0) + umm_arr(i,j,0));
510 }
else if (low_valid) {
511 ustar = u_star_arr(i-1,j,k);
512 wsp_mean = umm_arr(i-1,j,0);
513 }
else if (high_valid) {
514 ustar = u_star_arr(i,j,k);
515 wsp_mean = umm_arr(i,j,0);
521 }
else if (idir == 1) {
523 vely = vely_arr(i,j,k);
526 amrex::Real u_vfrac_sum = u_vfrac_arr(i,j,k) + u_vfrac_arr(i+1,j,k) +
527 u_vfrac_arr(i,j-1,k) + u_vfrac_arr(i+1,j-1,k);
528 velx = (u_vfrac_sum >
eps) ?
529 (velx_arr(i,j,k) * u_vfrac_arr(i,j,k) + velx_arr(i+1,j,k) * u_vfrac_arr(i+1,j,k) +
530 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))
531 / u_vfrac_sum :
zero;
534 amrex::Real w_vfrac_sum = w_vfrac_arr(i,j,k) + w_vfrac_arr(i,j,k+1) +
535 w_vfrac_arr(i,j-1,k) + w_vfrac_arr(i,j-1,k+1);
537 (velz_arr(i,j,k) * w_vfrac_arr(i,j,k) + velz_arr(i,j,k+1) * w_vfrac_arr(i,j,k+1) +
538 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))
539 / w_vfrac_sum :
zero;
548 velx_tangent = velx - v_dot_n * nx;
549 vely_tangent = vely - v_dot_n * ny;
552 amrex::Real cc_vfrac_sum = cc_vfrac_arr(i,j-1,k) + cc_vfrac_arr(i,j,k);
553 rho = (cc_vfrac_sum >
eps) ?
554 (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))
555 / cc_vfrac_sum :
zero;
558 bool low_valid = cc_flag_arr(i,j-1,k).isSingleValued();
559 bool high_valid = cc_flag_arr(i,j,k).isSingleValued();
561 if (low_valid && high_valid) {
562 ustar =
myhalf * (u_star_arr(i,j-1,k) + u_star_arr(i,j,k));
563 wsp_mean =
myhalf * (umm_arr(i,j-1,0) + umm_arr(i,j,0));
564 }
else if (low_valid) {
565 ustar = u_star_arr(i,j-1,k);
566 wsp_mean = umm_arr(i,j-1,0);
567 }
else if (high_valid) {
568 ustar = u_star_arr(i,j,k);
569 wsp_mean = umm_arr(i,j,0);
578 amrex::Real u_vfrac_sum = u_vfrac_arr(i,j,k-1) + u_vfrac_arr(i+1,j,k-1) +
579 u_vfrac_arr(i,j,k) + u_vfrac_arr(i+1,j,k);
580 velx = (u_vfrac_sum >
eps) ?
581 (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) +
582 velx_arr(i,j,k) * u_vfrac_arr(i,j,k) + velx_arr(i+1,j,k) * u_vfrac_arr(i+1,j,k))
583 / u_vfrac_sum :
zero;
586 amrex::Real v_vfrac_sum = v_vfrac_arr(i,j,k-1) + v_vfrac_arr(i,j+1,k-1) +
587 v_vfrac_arr(i,j,k) + v_vfrac_arr(i,j+1,k);
588 vely = (v_vfrac_sum >
eps) ?
589 (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) +
590 vely_arr(i,j,k) * v_vfrac_arr(i,j,k) + vely_arr(i,j+1,k) * v_vfrac_arr(i,j+1,k))
591 / v_vfrac_sum :
zero;
603 velx_tangent = velx - v_dot_n * nx;
604 vely_tangent = vely - v_dot_n * ny;
607 amrex::Real cc_vfrac_sum = cc_vfrac_arr(i,j,k-1) + cc_vfrac_arr(i,j,k);
608 rho = (cc_vfrac_sum >
eps) ?
609 (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))
610 / cc_vfrac_sum :
zero;
613 bool low_valid = cc_flag_arr(i,j,k-1).isSingleValued();
614 bool high_valid = cc_flag_arr(i,j,k).isSingleValued();
616 if (low_valid && high_valid) {
617 ustar =
myhalf * (u_star_arr(i,j,k-1) + u_star_arr(i,j,k));
618 wsp_mean =
myhalf * (umm_arr(i,j,0) + umm_arr(i,j,0));
619 }
else if (low_valid) {
620 ustar = u_star_arr(i,j,k-1);
621 wsp_mean = umm_arr(i,j,0);
622 }
else if (high_valid) {
623 ustar = u_star_arr(i,j,k);
624 wsp_mean = umm_arr(i,j,0);
631 wsp_mean = std::max(wsp_mean,
WSMIN);
638 amrex::Real wsp = std::sqrt(velx_tangent*velx_tangent+vely_tangent*vely_tangent);
640 amrex::Real num2 = wsp_mean * (velx_tangent-umean);
643 amrex::Real stressx = -
rho*ustar*ustar * (num1+num2)/(wsp_mean*wsp_mean);
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13