MOM6 swept-volume continuity-PPM face thickness (Lin & Rood
/ MOM_continuity_PPM flux_elem). Integrates the donor
cell’s reconstructed parabola over the swept volume rather
than sampling the edge value, adding the O(CFL) correction:
h_face = h_edge + CFL·(0.5·dh + curv3·(CFL − 1.5))
h_edge is the donor’s downwind-facing PPM edge value (the
CFL→0 limit), dh is the donor’s left-minus-right edge
difference in the swept (upwind→downwind) orientation
(MOM6 h_L − h_R for u>0, h_R_p1 − h_L_p1 for u<0), and
curv3 = (h_L + h_R) − 2·h_centre is the parabola curvature
measure. CFL = |u|·dt·dy_Cu·IareaT of the DONOR cell.
At CFL = 0 this returns exactly h_edge — i.e. the current
CFL-free edge-value pick — so vol_cfl = .false. (which never
calls this) and the CFL = 0 limit are bit-identical.
Consumer: rdb_ice_transport (sea-ice PR 4b) reuses this for the
category-summed total-mass face transport — bit-for-bit SIS2’s
zonal_mass_flux/meridional_mass_flux face integral
(SIS_continuity.F90:1168).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | h_edge |
downwind-facing donor PPM edge value |
||
| real(kind=wp), | intent(in) | :: | dh |
swept-oriented donor edge difference |
||
| real(kind=wp), | intent(in) | :: | curv3 |
donor parabola curvature (h_L+h_R−2h) |
||
| real(kind=wp), | intent(in) | :: | cfl |
donor-cell Courant number (>= 0) |
pure elemental function volcfl_face(h_edge, dh, curv3, cfl) result(h_face) !$acc routine seq !! MOM6 swept-volume continuity-PPM face thickness (Lin & Rood !! / MOM_continuity_PPM `flux_elem`). Integrates the donor !! cell's reconstructed parabola over the swept volume rather !! than sampling the edge value, adding the O(CFL) correction: !! !! `h_face = h_edge + CFL·(0.5·dh + curv3·(CFL − 1.5))` !! !! `h_edge` is the donor's downwind-facing PPM edge value (the !! CFL→0 limit), `dh` is the donor's left-minus-right edge !! difference *in the swept (upwind→downwind) orientation* !! (MOM6 `h_L − h_R` for u>0, `h_R_p1 − h_L_p1` for u<0), and !! `curv3 = (h_L + h_R) − 2·h_centre` is the parabola curvature !! measure. `CFL = |u|·dt·dy_Cu·IareaT` of the DONOR cell. !! !! At `CFL = 0` this returns exactly `h_edge` — i.e. the current !! CFL-free edge-value pick — so `vol_cfl = .false.` (which never !! calls this) and the `CFL = 0` limit are bit-identical. !! !! Consumer: `rdb_ice_transport` (sea-ice PR 4b) reuses this for the !! category-summed total-mass face transport — bit-for-bit SIS2's !! `zonal_mass_flux`/`meridional_mass_flux` face integral !! (`SIS_continuity.F90:1168`). real(wp), intent(in) :: h_edge !! downwind-facing donor PPM edge value real(wp), intent(in) :: dh !! swept-oriented donor edge difference real(wp), intent(in) :: curv3 !! donor parabola curvature (h_L+h_R−2h) real(wp), intent(in) :: cfl !! donor-cell Courant number (>= 0) real(wp) :: h_face h_face = h_edge + cfl*(0.5_wp*dh + curv3*(cfl - 1.5_wp)) end function volcfl_face