The tag an edge’s OUTER FACE behaves as for the no-normal-flow
closures (mass-flux zeroing in the continuity, the uhbt/vhbt
wall reconciliation, the lateral tracer-diffusion walls).
OBC_SPONGE is a WALL at its outer face — the relaxation band is
interior — so it maps to OBC_WALL; every other tag is returned
unchanged. The barotropic substep already closes a sponge face
(its select case default), so a closure that compared the RAW tag
with OBC_WALL left the slow continuity open while the barotropic
mode was shut: the layer flux through the face was never zeroed and
the ghost row beyond it acted as an unbudgeted mass reservoir (the
Southern Ocean 1-degree cut drew ~0.9 Sv through it and blew up at
day 573 once the ghost column had drained below its top layers).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | bc_type |
Raw per-edge tag ( |
pure integer function ocean_bc_outer_face_tag(bc_type) result(tag) !! The tag an edge's OUTER FACE behaves as for the no-normal-flow !! closures (mass-flux zeroing in the continuity, the `uhbt`/`vhbt` !! wall reconciliation, the lateral tracer-diffusion walls). !! !! `OBC_SPONGE` is a WALL at its outer face — the relaxation band is !! interior — so it maps to `OBC_WALL`; every other tag is returned !! unchanged. The barotropic substep already closes a sponge face !! (its `select case` default), so a closure that compared the RAW tag !! with `OBC_WALL` left the slow continuity open while the barotropic !! mode was shut: the layer flux through the face was never zeroed and !! the ghost row beyond it acted as an unbudgeted mass reservoir (the !! Southern Ocean 1-degree cut drew ~0.9 Sv through it and blew up at !! day 573 once the ghost column had drained below its top layers). integer, intent(in) :: bc_type !! Raw per-edge tag (`ocean_bc_face_tag_t%bc_type`). tag = bc_type if (bc_type == OBC_SPONGE) tag = OBC_WALL end function ocean_bc_outer_face_tag