29 template<
typename InterpType_H,
typename InterpType_V>
34 const amrex::Array4<const amrex::Real>& rho_u,
35 const amrex::Array4<const amrex::Real>& rho_v,
36 const amrex::Array4<const amrex::Real>& Omega,
37 const amrex::Array4<const amrex::Real>& z_nd,
38 const amrex::Array4<const amrex::Real>& ax,
39 const amrex::Array4<const amrex::Real>& ,
40 const amrex::Array4<const amrex::Real>& az,
41 const amrex::Array4<const amrex::Real>& detJ,
42 InterpType_H interp_u_h,
43 InterpType_V interp_u_v,
44 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
45 const amrex::Array4<const amrex::Real>& mf_ux_inv,
46 const amrex::Array4<const amrex::Real>& mf_uy_inv,
47 const amrex::Array4<const amrex::Real>& mf_vx_inv)
50 auto dxInv = cellSizeInv[0], dyInv = cellSizeInv[1], dzInv = cellSizeInv[2];
62 rho_u_avg_hi =
myhalf * (rho_u(i+1, j, k) * mf_uy_inv(i+1, j, 0) + rho_u(i, j, k) * mf_uy_inv(i, j, 0));
63 rho_u_avg_lo =
myhalf * (rho_u(i-1, j, k) * mf_uy_inv(i-1, j, 0) + rho_u(i, j, k) * mf_uy_inv(i, j, 0));
65 interp_u_h.InterpolateInX(i+1,j,k,0,interp_hi,rho_u_avg_hi);
66 interp_u_h.InterpolateInX(i ,j,k,0,interp_lo,rho_u_avg_lo);
69 amrex::Real centFluxXXNext = rho_u_avg_hi * interp_hi *
myhalf * (ax(i,j,k) + ax(i+1,j,k));
70 amrex::Real centFluxXXPrev = rho_u_avg_lo * interp_lo *
myhalf * (ax(i,j,k) + ax(i-1,j,k));
76 rho_v_avg_hi =
myhalf * (rho_v(i, j+1, k) * mf_vx_inv(i, j+1, 0) + rho_v(i-1, j+1, k) * mf_vx_inv(i-1, j+1, 0));
77 rho_v_avg_lo =
myhalf * (rho_v(i, j , k) * mf_vx_inv(i, j , 0) + rho_v(i-1, j , k) * mf_vx_inv(i-1, j , 0));
79 interp_u_h.InterpolateInY(i,j+1,k,0,interp_hi,rho_v_avg_hi);
80 interp_u_h.InterpolateInY(i,j ,k,0,interp_lo,rho_v_avg_lo);
89 Omega_avg_hi =
myhalf * (Omega(i, j, k+1) + Omega(i-1, j, k+1));
90 Omega_avg_lo =
myhalf * (Omega(i, j, k ) + Omega(i-1, j, k ));
92 interp_u_v.InterpolateInZ(i,j,k+1,0,interp_hi,Omega_avg_hi);
93 interp_u_v.InterpolateInZ(i,j,k ,0,interp_lo,Omega_avg_lo);
95 amrex::Real edgeFluxXZNext = Omega_avg_hi * interp_hi *
myhalf * (az(i, j, k+1) + az(i-1, j, k+1));
96 amrex::Real edgeFluxXZPrev = Omega_avg_lo * interp_lo *
myhalf * (az(i, j, k ) + az(i-1, j, k ));
102 advectionSrc = (centFluxXXNext - centFluxXXPrev) *
dxInv * mfsq
103 + (edgeFluxXYNext - edgeFluxXYPrev) * dyInv * mfsq
104 + (edgeFluxXZNext - edgeFluxXZPrev) * dzInv;
105 advectionSrc /=
myhalf*(detJ(i,j,k) + detJ(i-1,j,k));
134 template<
typename InterpType_H,
typename InterpType_V>
139 const amrex::Array4<const amrex::Real>& rho_u,
140 const amrex::Array4<const amrex::Real>& rho_v,
141 const amrex::Array4<const amrex::Real>& Omega,
142 const amrex::Array4<const amrex::Real>& z_nd,
143 const amrex::Array4<const amrex::Real>& ,
144 const amrex::Array4<const amrex::Real>& ay,
145 const amrex::Array4<const amrex::Real>& az,
146 const amrex::Array4<const amrex::Real>& detJ,
147 InterpType_H interp_v_h,
148 InterpType_V interp_v_v,
149 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
150 const amrex::Array4<const amrex::Real>& mf_uy_inv,
151 const amrex::Array4<const amrex::Real>& mf_vx_inv,
152 const amrex::Array4<const amrex::Real>& mf_vy_inv)
155 auto dxInv = cellSizeInv[0], dyInv = cellSizeInv[1], dzInv = cellSizeInv[2];
167 rho_u_avg_hi =
myhalf * (rho_u(i+1, j, k) * mf_uy_inv(i+1, j, 0) + rho_u(i+1, j-1, k) * mf_uy_inv(i+1, j-1, 0));
168 rho_u_avg_lo =
myhalf * (rho_u(i , j, k) * mf_uy_inv(i , j, 0) + rho_u(i , j-1, k) * mf_uy_inv(i , j-1, 0));
170 interp_v_h.InterpolateInX(i+1,j,k,0,interp_hi,rho_u_avg_hi);
171 interp_v_h.InterpolateInX(i ,j,k,0,interp_lo,rho_u_avg_lo);
180 rho_v_avg_hi =
myhalf * (rho_v(i, j+1, k) * mf_vx_inv(i, j+1, 0) + rho_v(i, j, k) * mf_vx_inv(i, j, 0));
181 rho_v_avg_lo =
myhalf * (rho_v(i, j-1, k) * mf_vx_inv(i, j-1, 0) + rho_v(i, j, k) * mf_vx_inv(i, j, 0));
183 interp_v_h.InterpolateInY(i,j+1,k,0,interp_hi,rho_v_avg_hi);
184 interp_v_h.InterpolateInY(i,j ,k,0,interp_lo,rho_v_avg_lo);
187 amrex::Real centFluxYYNext = rho_v_avg_hi * interp_hi *
myhalf * (ay(i,j,k) + ay(i,j+1,k));
188 amrex::Real centFluxYYPrev = rho_v_avg_lo * interp_lo *
myhalf * (ay(i,j,k) + ay(i,j-1,k));
194 Omega_avg_hi =
myhalf * (Omega(i, j, k+1) + Omega(i, j-1, k+1));
195 Omega_avg_lo =
myhalf * (Omega(i, j, k ) + Omega(i, j-1, k ));
197 interp_v_v.InterpolateInZ(i,j,k+1,0,interp_hi,Omega_avg_hi);
198 interp_v_v.InterpolateInZ(i,j,k ,0,interp_lo,Omega_avg_lo);
200 amrex::Real edgeFluxYZNext = Omega_avg_hi * interp_hi *
myhalf * (az(i, j, k+1) + az(i, j-1, k+1));
201 amrex::Real edgeFluxYZPrev = Omega_avg_lo * interp_lo *
myhalf * (az(i, j, k ) + az(i, j-1, k ));
207 advectionSrc = (edgeFluxYXNext - edgeFluxYXPrev) *
dxInv * mfsq
208 + (centFluxYYNext - centFluxYYPrev) * dyInv * mfsq
209 + (edgeFluxYZNext - edgeFluxYZPrev) * dzInv;
210 advectionSrc /=
myhalf*(detJ(i,j,k) + detJ(i,j-1,k));
245 template<
typename InterpType_H,
typename InterpType_V,
typename WallInterpType>
250 const amrex::Array4<const amrex::Real>& rho_u,
251 const amrex::Array4<const amrex::Real>& rho_v,
252 const amrex::Array4<const amrex::Real>& Omega,
253 const amrex::Array4<const amrex::Real>&
w,
254 const amrex::Array4<const amrex::Real>& z_nd,
255 const amrex::Array4<const amrex::Real>& ,
256 const amrex::Array4<const amrex::Real>& ,
257 const amrex::Array4<const amrex::Real>& az,
258 const amrex::Array4<const amrex::Real>& detJ,
259 InterpType_H interp_omega_h,
260 InterpType_V interp_omega_v,
261 WallInterpType interp_omega_wall,
262 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
263 const amrex::Array4<const amrex::Real>& mf_mx,
264 const amrex::Array4<const amrex::Real>& mf_my,
265 const amrex::Array4<const amrex::Real>& mf_uy_inv,
266 const amrex::Array4<const amrex::Real>& mf_vx_inv,
268 const int lo_z_face,
const int hi_z_face)
271 auto dxInv = cellSizeInv[0], dyInv = cellSizeInv[1], dzInv = cellSizeInv[2];
283 rho_u_avg_hi =
myhalf * (rho_u(i+1, j, k) + rho_u(i+1, j, k-1)) * mf_uy_inv(i+1,j ,0);
284 rho_u_avg_lo =
myhalf * (rho_u(i , j, k) + rho_u(i , j, k-1)) * mf_uy_inv(i ,j ,0);
286 interp_omega_h.InterpolateInX(i+1,j,k,0,interp_hi,rho_u_avg_hi);
287 interp_omega_h.InterpolateInX(i ,j,k,0,interp_lo,rho_u_avg_lo);
296 rho_v_avg_hi =
myhalf * (rho_v(i, j+1, k) + rho_v(i, j+1, k-1)) * mf_vx_inv(i ,j+1,0);
297 rho_v_avg_lo =
myhalf * (rho_v(i, j , k) + rho_v(i, j , k-1)) * mf_vx_inv(i ,j ,0);
299 interp_omega_h.InterpolateInY(i,j+1,k,0,interp_hi,rho_v_avg_hi);
300 interp_omega_h.InterpolateInY(i,j ,k,0,interp_lo,rho_v_avg_lo);
309 Omega_avg_hi = (k == hi_z_face) ? Omega(i,j,k) * az(i,j,k) :
310 fourth * (Omega(i,j,k) + Omega(i,j,k+1)) * (az(i,j,k) + az(i,j,k+1));
317 if (k == hi_z_face) {
318 centFluxZZNext *=
w(i,j,k);
320 if (k == hi_z_face-1)
323 }
else if (k == hi_z_face-2 || k == lo_z_face+1) {
327 interp_omega_wall.InterpolateInZ(i,j,k+1,0,interp_hi,Omega_avg_hi,vert_adv_type);
330 interp_omega_v.InterpolateInZ(i,j,k+1,0,interp_hi,Omega_avg_hi);
332 centFluxZZNext *= interp_hi;
337 Omega_avg_lo = (k == 0) ? Omega(i,j,k) * az(i,j,k) :
338 fourth * (Omega(i,j,k) + Omega(i,j,k-1)) * (az(i,j,k) + az(i,j,k-1));
346 centFluxZZPrev *=
w(i,j,k);
348 if (k == lo_z_face+1) {
350 }
else if (k == lo_z_face+2 || k == hi_z_face-1) {
354 interp_omega_wall.InterpolateInZ(i,j,k,0,interp_lo,Omega_avg_lo,vert_adv_type);
357 interp_omega_v.InterpolateInZ(i,j,k,0,interp_lo,Omega_avg_lo);
359 centFluxZZPrev *= interp_lo;
366 advectionSrc = (edgeFluxZXNext - edgeFluxZXPrev) *
dxInv * mfsq
367 + (edgeFluxZYNext - edgeFluxZYPrev) * dyInv * mfsq
368 + (centFluxZZNext - centFluxZZPrev) * dzInv;
371 advectionSrc /= denom;
412 template<
typename InterpType_H,
typename InterpType_V,
typename WallInterpType>
415 const amrex::Array4<amrex::Real>& rho_u_rhs,
416 const amrex::Array4<amrex::Real>& rho_v_rhs,
417 const amrex::Array4<amrex::Real>& rho_w_rhs,
418 const amrex::Array4<const amrex::Real>& rho_u,
419 const amrex::Array4<const amrex::Real>& rho_v,
420 const amrex::Array4<const amrex::Real>& Omega,
421 const amrex::Array4<const amrex::Real>& u,
422 const amrex::Array4<const amrex::Real>& v,
423 const amrex::Array4<const amrex::Real>&
w,
424 const amrex::Array4<const amrex::Real>& z_nd,
425 const amrex::Array4<const amrex::Real>& ax,
426 const amrex::Array4<const amrex::Real>& ay,
427 const amrex::Array4<const amrex::Real>& az,
428 const amrex::Array4<const amrex::Real>& detJ,
429 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
430 const amrex::Array4<const amrex::Real>& mf_mx,
431 const amrex::Array4<const amrex::Real>& mf_ux_inv,
432 const amrex::Array4<const amrex::Real>& mf_vx_inv,
433 const amrex::Array4<const amrex::Real>& mf_my,
434 const amrex::Array4<const amrex::Real>& mf_uy_inv,
435 const amrex::Array4<const amrex::Real>& mf_vy_inv,
439 const int lo_z_face,
const int hi_z_face)
442 InterpType_H interp_u_h(u, upw_frac_h); InterpType_V interp_u_v(u, upw_frac_v);
443 InterpType_H interp_v_h(v, upw_frac_h); InterpType_V interp_v_v(v, upw_frac_v);
444 InterpType_H interp_w_h(
w, upw_frac_h); InterpType_V interp_w_v(
w, upw_frac_v);
445 WallInterpType interp_w_wall(
w, upw_frac_v);
448 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
450 rho_u_rhs(i, j, k) = -
AdvectionSrcForXMom(i, j, k, rho_u, rho_v, Omega, z_nd, ax, ay, az, detJ,
451 interp_u_h, interp_u_v,
452 cellSizeInv, mf_ux_inv, mf_uy_inv, mf_vx_inv);
456 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
458 rho_v_rhs(i, j, k) = -
AdvectionSrcForYMom(i, j, k, rho_u, rho_v, Omega, z_nd, ax, ay, az, detJ,
459 interp_v_h, interp_v_v,
460 cellSizeInv, mf_uy_inv, mf_vx_inv, mf_vy_inv);
464 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
466 rho_w_rhs(i, j, k) = -
AdvectionSrcForZMom(i, j, k, rho_u, rho_v, Omega,
w, z_nd, ax, ay, az, detJ,
467 interp_w_h, interp_w_v, interp_w_wall,
468 cellSizeInv, mf_mx, mf_my, mf_uy_inv, mf_vx_inv,
469 vert_adv_type, lo_z_face, hi_z_face);
507 template<
typename InterpType_H>
510 const amrex::Array4<amrex::Real>& rho_u_rhs,
511 const amrex::Array4<amrex::Real>& rho_v_rhs,
512 const amrex::Array4<amrex::Real>& rho_w_rhs,
513 const amrex::Array4<const amrex::Real>& rho_u,
514 const amrex::Array4<const amrex::Real>& rho_v,
515 const amrex::Array4<const amrex::Real>& Omega,
516 const amrex::Array4<const amrex::Real>& u,
517 const amrex::Array4<const amrex::Real>& v,
518 const amrex::Array4<const amrex::Real>&
w,
519 const amrex::Array4<const amrex::Real>& z_nd,
520 const amrex::Array4<const amrex::Real>& ax,
521 const amrex::Array4<const amrex::Real>& ay,
522 const amrex::Array4<const amrex::Real>& az,
523 const amrex::Array4<const amrex::Real>& detJ,
524 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
525 const amrex::Array4<const amrex::Real>& mf_mx,
526 const amrex::Array4<const amrex::Real>& mf_ux_inv,
527 const amrex::Array4<const amrex::Real>& mf_vx_inv,
528 const amrex::Array4<const amrex::Real>& mf_my,
529 const amrex::Array4<const amrex::Real>& mf_uy_inv,
530 const amrex::Array4<const amrex::Real>& mf_vy_inv,
534 const int lo_z_face,
const int hi_z_face)
537 AdvectionSrcForMomWrapper<InterpType_H,CENTERED2,UPWINDALL>(bxx, bxy, bxz,
538 rho_u_rhs, rho_v_rhs, rho_w_rhs,
539 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
541 mf_mx, mf_ux_inv, mf_vx_inv,
542 mf_my, mf_uy_inv, mf_vy_inv,
543 upw_frac_h, upw_frac_v,
544 vert_adv_type, lo_z_face, hi_z_face);
546 AdvectionSrcForMomWrapper<InterpType_H,UPWIND3,UPWINDALL>(bxx, bxy, bxz,
547 rho_u_rhs, rho_v_rhs, rho_w_rhs,
548 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
550 mf_mx, mf_ux_inv, mf_vx_inv,
551 mf_my, mf_uy_inv, mf_vy_inv,
552 upw_frac_h, upw_frac_v,
553 vert_adv_type, lo_z_face, hi_z_face);
555 AdvectionSrcForMomWrapper<InterpType_H,CENTERED4,UPWINDALL>(bxx, bxy, bxz,
556 rho_u_rhs, rho_v_rhs, rho_w_rhs,
557 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
559 mf_mx, mf_ux_inv, mf_vx_inv,
560 mf_my, mf_uy_inv, mf_vy_inv,
561 upw_frac_h, upw_frac_v,
562 vert_adv_type, lo_z_face, hi_z_face);
564 AdvectionSrcForMomWrapper<InterpType_H,UPWIND5,UPWINDALL>(bxx, bxy, bxz,
565 rho_u_rhs, rho_v_rhs, rho_w_rhs,
566 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
568 mf_mx, mf_ux_inv, mf_vx_inv,
569 mf_my, mf_uy_inv, mf_vy_inv,
570 upw_frac_h, upw_frac_v,
571 vert_adv_type, lo_z_face, hi_z_face);
573 AdvectionSrcForMomWrapper<InterpType_H,CENTERED6,UPWINDALL>(bxx, bxy, bxz,
574 rho_u_rhs, rho_v_rhs, rho_w_rhs,
575 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
577 mf_mx, mf_ux_inv, mf_vx_inv,
578 mf_my, mf_uy_inv, mf_vy_inv,
579 upw_frac_h, upw_frac_v,
580 vert_adv_type, lo_z_face, hi_z_face);
583 AdvectionSrcForMomWrapper<InterpType_H,WENO3,UPWINDALL>(bxx, bxy, bxz,
584 rho_u_rhs, rho_v_rhs, rho_w_rhs,
585 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
587 mf_mx, mf_ux_inv, mf_vx_inv,
588 mf_my, mf_uy_inv, mf_vy_inv,
589 upw_frac_h, upw_frac_v,
590 vert_adv_type, lo_z_face, hi_z_face);
592 AdvectionSrcForMomWrapper<InterpType_H,WENO_Z3,UPWINDALL>(bxx, bxy, bxz,
593 rho_u_rhs, rho_v_rhs, rho_w_rhs,
594 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
596 mf_mx, mf_ux_inv, mf_vx_inv,
597 mf_my, mf_uy_inv, mf_vy_inv,
598 upw_frac_h, upw_frac_v,
599 vert_adv_type, lo_z_face, hi_z_face);
601 AdvectionSrcForMomWrapper<InterpType_H,WENO_MZQ3,UPWINDALL>(bxx, bxy, bxz,
602 rho_u_rhs, rho_v_rhs, rho_w_rhs,
603 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
605 mf_mx, mf_ux_inv, mf_vx_inv,
606 mf_my, mf_uy_inv, mf_vy_inv,
607 upw_frac_h, upw_frac_v,
608 vert_adv_type, lo_z_face, hi_z_face);
610 AdvectionSrcForMomWrapper<InterpType_H,WENO5,UPWINDALL>(bxx, bxy, bxz,
611 rho_u_rhs, rho_v_rhs, rho_w_rhs,
612 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
614 mf_mx, mf_ux_inv, mf_vx_inv,
615 mf_my, mf_uy_inv, mf_vy_inv,
616 upw_frac_h, upw_frac_v,
617 vert_adv_type, lo_z_face, hi_z_face);
619 AdvectionSrcForMomWrapper<InterpType_H,WENO_Z5,UPWINDALL>(bxx, bxy, bxz,
620 rho_u_rhs, rho_v_rhs, rho_w_rhs,
621 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
623 mf_mx, mf_ux_inv, mf_vx_inv,
624 mf_my, mf_uy_inv, mf_vy_inv,
625 upw_frac_h, upw_frac_v,
626 vert_adv_type, lo_z_face, hi_z_face);
628 AdvectionSrcForMomWrapper<InterpType_H,WENO7,UPWINDALL>(bxx, bxy, bxz,
629 rho_u_rhs, rho_v_rhs, rho_w_rhs,
630 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
632 mf_mx, mf_ux_inv, mf_vx_inv,
633 mf_my, mf_uy_inv, mf_vy_inv,
634 upw_frac_h, upw_frac_v,
635 vert_adv_type, lo_z_face, hi_z_face);
637 AdvectionSrcForMomWrapper<InterpType_H,WENO_Z7,UPWINDALL>(bxx, bxy, bxz,
638 rho_u_rhs, rho_v_rhs, rho_w_rhs,
639 rho_u, rho_v, Omega, u, v,
w, z_nd, ax, ay, az, detJ,
641 mf_mx, mf_ux_inv, mf_vx_inv,
642 mf_my, mf_uy_inv, mf_vy_inv,
643 upw_frac_h, upw_frac_v,
644 vert_adv_type, lo_z_face, hi_z_face);
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real fourth
Definition: ERF_Constants.H:14
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
AdvType
Definition: ERF_IndexDefines.H:261
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
amrex::Real Real
Definition: ERF_ShocInterface.H:19
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:275
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_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:230
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:319
AMREX_ASSERT_WITH_MESSAGE(wbar_cutoff_min > wbar_cutoff_max, "ERROR: wbar_cutoff_min < wbar_cutoff_max")