continuity_step_split Subroutine

private 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.

Arguments

Type IntentOptional 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

Calls

proc~~continuity_step_split~~CallsGraph proc~continuity_step_split continuity_step_split proc~continuity_apply_meridional continuity_apply_meridional proc~continuity_step_split->proc~continuity_apply_meridional proc~continuity_apply_zonal continuity_apply_zonal proc~continuity_step_split->proc~continuity_apply_zonal proc~continuity_meridional_flux continuity_meridional_flux proc~continuity_step_split->proc~continuity_meridional_flux proc~continuity_zonal_flux continuity_zonal_flux proc~continuity_step_split->proc~continuity_zonal_flux local local proc~continuity_meridional_flux->local proc~ocean_bc_outer_face_tag ocean_bc_outer_face_tag proc~continuity_meridional_flux->proc~ocean_bc_outer_face_tag proc~ppm_cell_limiter ppm_cell_limiter proc~continuity_meridional_flux->proc~ppm_cell_limiter proc~ppm_limit_pos ppm_limit_pos proc~continuity_meridional_flux->proc~ppm_limit_pos proc~ppm_limited_slope ppm_limited_slope proc~continuity_meridional_flux->proc~ppm_limited_slope proc~ppm_mirror_h ppm_mirror_h proc~continuity_meridional_flux->proc~ppm_mirror_h proc~renormalise_meridional_flux_to_vhbt renormalise_meridional_flux_to_vhbt proc~continuity_meridional_flux->proc~renormalise_meridional_flux_to_vhbt proc~volcfl_face volcfl_face proc~continuity_meridional_flux->proc~volcfl_face proc~continuity_zonal_flux->local proc~continuity_zonal_flux->proc~ocean_bc_outer_face_tag proc~continuity_zonal_flux->proc~ppm_cell_limiter proc~continuity_zonal_flux->proc~ppm_limit_pos proc~continuity_zonal_flux->proc~ppm_limited_slope proc~continuity_zonal_flux->proc~ppm_mirror_h proc~renormalise_zonal_flux_to_uhbt renormalise_zonal_flux_to_uhbt proc~continuity_zonal_flux->proc~renormalise_zonal_flux_to_uhbt proc~continuity_zonal_flux->proc~volcfl_face proc~renormalise_meridional_flux_to_vhbt->local proc~renormalise_zonal_flux_to_uhbt->local

Source Code

   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