Test-only (no production caller): continuity-only split wrapper;
production runs the tracer-interleaved continuity_tracer_step_split.
Directionally-split (Lie) PPM continuity step over dt:
Standard Lie-split PPM continuity operator order.
Compared to the unsplit
continuity_compute_fluxes +
continuity_apply_fluxes pair, this form
relaxes the 2D-combined CFL constraint to the per-
direction CFL ≤ 1. For uniform h_layer and divergence-
free flow the two forms are bit-identical (no advection of
variation between substeps); they diverge under non-trivial
advection at O(dt²·||∇h||) — same order as a vanilla Strang
vs Lie split.
flux_h_layer ends the step holding the total horizontal
divergence summed over both substeps, ready for the
vertical-advection consumer.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics | |||
| type(continuity_t), | intent(inout) | :: | this | |||
| type(multilayer_state_t), | intent(inout) | :: | ms | |||
| real(kind=wp), | intent(in) | :: | dt |
subroutine continuity_step_split(grid, metrics, this, ms, dt) !! **Test-only** (no production caller): continuity-only split wrapper; !! production runs the tracer-interleaved `continuity_tracer_step_split`. !! Directionally-split (Lie) PPM continuity step over `dt`: !! !! 1. zonal flux Φx from current h !! 2. apply x-divergence: h ← h - dt·∂Φx/∂x !! 3. meridional flux Φy from the *updated* h !! 4. apply y-divergence: h ← h - dt·∂Φy/∂y !! !! Standard Lie-split PPM continuity operator order. !! Compared to the unsplit !! `continuity_compute_fluxes` + !! `continuity_apply_fluxes` pair, this form !! relaxes the 2D-combined CFL constraint to the per- !! direction CFL ≤ 1. For uniform `h_layer` and divergence- !! free flow the two forms are bit-identical (no advection of !! variation between substeps); they diverge under non-trivial !! advection at O(dt²·||∇h||) — same order as a vanilla Strang !! vs Lie split. !! !! `flux_h_layer` ends the step holding the *total* horizontal !! divergence summed over both substeps, ready for the !! vertical-advection consumer. type(hgrid_t), intent(in) :: grid type(ocean_metrics_t), intent(in) :: metrics type(continuity_t), intent(inout) :: this type(multilayer_state_t), intent(inout) :: ms real(wp), intent(in) :: dt call continuity_zonal_flux(grid, metrics, this, ms, dt) call continuity_apply_zonal(grid, metrics, ms, dt) call continuity_meridional_flux(grid, metrics, this, ms, dt) call continuity_apply_meridional(grid, metrics, ms, dt) end subroutine continuity_step_split