ocean_dyn_flush_tracer_window Subroutine

public subroutine ocean_dyn_flush_tracer_window(grid, metrics, dyn, ct, ms, bc)

Mandatory end-of-segment flush of the windowed tracer-advect accumulators (spec §(c) — MOM6’s n == n_max). Drains any OPEN accumulation window (t_dyn_rel_adv > 0) so no Lagrangian-advanced h_layer is ever paired with FROZEN hTr at an output write, a restart checkpoint, or the end of a run segment whose length is not an exact multiple of dt_tracer_advect_ratio.

Hard no-op at dt_tracer_advect_ratio <= 1 (ratio = 1 never accumulates ⇒ t_dyn_rel_adv stays 0 ⇒ bit-identical). Idempotent: the drain resets the accumulators + clock, so a redundant flush over an already-empty window reconstructs hprev = h_end (div of the zeroed accumulators) and drains zero transport — an exact no-op.

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(ocean_metrics_t), intent(in) :: metrics
type(ocean_dyn_t), intent(in) :: dyn
type(continuity_t), intent(inout) :: ct
type(multilayer_state_t), intent(inout) :: ms
type(ocean_bc_state_t), intent(in), optional :: bc

Calls

proc~~ocean_dyn_flush_tracer_window~~CallsGraph proc~ocean_dyn_flush_tracer_window ocean_dyn_flush_tracer_window proc~continuity_tracer_drain continuity_tracer_drain proc~ocean_dyn_flush_tracer_window->proc~continuity_tracer_drain proc~drain_avail_limit drain_avail_limit proc~continuity_tracer_drain->proc~drain_avail_limit proc~drain_avail_scale_x drain_avail_scale_x proc~continuity_tracer_drain->proc~drain_avail_scale_x proc~drain_avail_scale_y drain_avail_scale_y proc~continuity_tracer_drain->proc~drain_avail_scale_y proc~drain_copy_3d drain_copy_3d proc~continuity_tracer_drain->proc~drain_copy_3d proc~drain_fill_conc drain_fill_conc proc~continuity_tracer_drain->proc~drain_fill_conc proc~drain_limit_x drain_limit_x proc~continuity_tracer_drain->proc~drain_limit_x proc~drain_limit_y drain_limit_y proc~continuity_tracer_drain->proc~drain_limit_y proc~drain_parabola_x drain_parabola_x proc~continuity_tracer_drain->proc~drain_parabola_x proc~drain_parabola_y drain_parabola_y proc~continuity_tracer_drain->proc~drain_parabola_y proc~drain_reconstruct_hprev drain_reconstruct_hprev proc~continuity_tracer_drain->proc~drain_reconstruct_hprev proc~drain_rescale_htr drain_rescale_hTr proc~continuity_tracer_drain->proc~drain_rescale_htr proc~drain_rescale_htr_budget drain_rescale_hTr_budget proc~continuity_tracer_drain->proc~drain_rescale_htr_budget proc~drain_subtract_3d drain_subtract_3d proc~continuity_tracer_drain->proc~drain_subtract_3d proc~drain_swept_flux_x drain_swept_flux_x proc~continuity_tracer_drain->proc~drain_swept_flux_x proc~drain_swept_flux_x_weno drain_swept_flux_x_weno proc~continuity_tracer_drain->proc~drain_swept_flux_x_weno proc~drain_swept_flux_y drain_swept_flux_y proc~continuity_tracer_drain->proc~drain_swept_flux_y proc~drain_swept_flux_y_weno drain_swept_flux_y_weno proc~continuity_tracer_drain->proc~drain_swept_flux_y_weno proc~drain_update_h_x drain_update_h_x proc~continuity_tracer_drain->proc~drain_update_h_x proc~drain_update_h_y drain_update_h_y proc~continuity_tracer_drain->proc~drain_update_h_y proc~drain_update_tracer_x drain_update_tracer_x proc~continuity_tracer_drain->proc~drain_update_tracer_x proc~drain_update_tracer_x_budget drain_update_tracer_x_budget proc~continuity_tracer_drain->proc~drain_update_tracer_x_budget proc~drain_update_tracer_y drain_update_tracer_y proc~continuity_tracer_drain->proc~drain_update_tracer_y proc~drain_update_tracer_y_budget drain_update_tracer_y_budget proc~continuity_tracer_drain->proc~drain_update_tracer_y_budget proc~drain_wrap_centre drain_wrap_centre proc~continuity_tracer_drain->proc~drain_wrap_centre proc~drain_wrap_face_x drain_wrap_face_x proc~continuity_tracer_drain->proc~drain_wrap_face_x proc~drain_wrap_face_y drain_wrap_face_y proc~continuity_tracer_drain->proc~drain_wrap_face_y proc~drain_zero_3d drain_zero_3d proc~continuity_tracer_drain->proc~drain_zero_3d proc~ocean_halo_is_decomposed_x ocean_halo_is_decomposed_x proc~continuity_tracer_drain->proc~ocean_halo_is_decomposed_x proc~ocean_halo_is_decomposed_y ocean_halo_is_decomposed_y proc~continuity_tracer_drain->proc~ocean_halo_is_decomposed_y reduce reduce proc~continuity_tracer_drain->reduce local local proc~drain_avail_limit->local proc~drain_avail_scale_x->local proc~drain_avail_scale_y->local proc~drain_limit_x->local proc~drain_limit_y->local proc~drain_parabola_x->local proc~ppm_cell_limiter ppm_cell_limiter proc~drain_parabola_x->proc~ppm_cell_limiter proc~ppm_limited_slope ppm_limited_slope proc~drain_parabola_x->proc~ppm_limited_slope proc~ppm_mirror_h ppm_mirror_h proc~drain_parabola_x->proc~ppm_mirror_h proc~drain_parabola_y->local proc~drain_parabola_y->proc~ppm_cell_limiter proc~drain_parabola_y->proc~ppm_limited_slope proc~drain_parabola_y->proc~ppm_mirror_h proc~drain_reconstruct_hprev->local proc~drain_rescale_htr_budget->local proc~drain_swept_flux_x->local proc~drain_swept_flux_x_weno->local proc~weno_face_conc_x weno_face_conc_x proc~drain_swept_flux_x_weno->proc~weno_face_conc_x proc~drain_swept_flux_y->local proc~drain_swept_flux_y_weno->local proc~weno_face_conc_y weno_face_conc_y proc~drain_swept_flux_y_weno->proc~weno_face_conc_y interface~fold_north_centre fold_north_centre proc~drain_wrap_centre->interface~fold_north_centre proc~ocean_periodic_wrap_centre_3d ocean_periodic_wrap_centre_3d proc~drain_wrap_centre->proc~ocean_periodic_wrap_centre_3d interface~fold_north_u_face fold_north_u_face proc~drain_wrap_face_x->interface~fold_north_u_face proc~ocean_periodic_wrap_face_x_3d ocean_periodic_wrap_face_x_3d proc~drain_wrap_face_x->proc~ocean_periodic_wrap_face_x_3d interface~fold_north_v_face fold_north_v_face proc~drain_wrap_face_y->interface~fold_north_v_face proc~ocean_periodic_wrap_face_y_3d ocean_periodic_wrap_face_y_3d proc~drain_wrap_face_y->proc~ocean_periodic_wrap_face_y_3d proc~fold_north_centre_2d fold_north_centre_2d interface~fold_north_centre->proc~fold_north_centre_2d proc~fold_north_centre_3d fold_north_centre_3d interface~fold_north_centre->proc~fold_north_centre_3d proc~fold_north_u_face_2d fold_north_u_face_2d interface~fold_north_u_face->proc~fold_north_u_face_2d proc~fold_north_u_face_3d fold_north_u_face_3d interface~fold_north_u_face->proc~fold_north_u_face_3d proc~fold_north_v_face_2d fold_north_v_face_2d interface~fold_north_v_face->proc~fold_north_v_face_2d proc~fold_north_v_face_3d fold_north_v_face_3d interface~fold_north_v_face->proc~fold_north_v_face_3d proc~weno_face_conc_x->proc~ppm_mirror_h proc~plm_face_swept plm_face_swept proc~weno_face_conc_x->proc~plm_face_swept proc~recon_rung_for_face recon_rung_for_face proc~weno_face_conc_x->proc~recon_rung_for_face proc~weno5_face_swept weno5_face_swept proc~weno_face_conc_x->proc~weno5_face_swept proc~weno7_face_swept weno7_face_swept proc~weno_face_conc_x->proc~weno7_face_swept proc~weno9_face_swept weno9_face_swept proc~weno_face_conc_x->proc~weno9_face_swept proc~weno_face_conc_y->proc~ppm_mirror_h proc~weno_face_conc_y->proc~plm_face_swept proc~weno_face_conc_y->proc~recon_rung_for_face proc~weno_face_conc_y->proc~weno5_face_swept proc~weno_face_conc_y->proc~weno7_face_swept proc~weno_face_conc_y->proc~weno9_face_swept proc~fold_north_v_face_2d->local proc~fold_north_v_face_3d->local

Called by

proc~~ocean_dyn_flush_tracer_window~~CalledByGraph proc~ocean_dyn_flush_tracer_window ocean_dyn_flush_tracer_window proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~ocean_dyn_flush_tracer_window proc~rdb_ocean_set_tracer rdb_ocean_set_tracer proc~rdb_ocean_set_tracer->proc~ocean_dyn_flush_tracer_window proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Source Code

   subroutine ocean_dyn_flush_tracer_window(grid, metrics, dyn, ct, ms, bc)
      !! Mandatory end-of-segment flush of the windowed tracer-advect
      !! accumulators (spec §(c) — MOM6's `n == n_max`).  Drains any OPEN
      !! accumulation window (`t_dyn_rel_adv > 0`) so no Lagrangian-advanced
      !! `h_layer` is ever paired with FROZEN `hTr` at an output write, a
      !! restart checkpoint, or the end of a run segment whose length is not
      !! an exact multiple of `dt_tracer_advect_ratio`.
      !!
      !! Hard no-op at `dt_tracer_advect_ratio <= 1` (ratio = 1 never
      !! accumulates ⇒ `t_dyn_rel_adv` stays 0 ⇒ bit-identical).  Idempotent:
      !! the drain resets the accumulators + clock, so a redundant flush over
      !! an already-empty window reconstructs `hprev = h_end` (div of the
      !! zeroed accumulators) and drains zero transport — an exact no-op.
      type(hgrid_t), intent(in) :: grid
      type(ocean_metrics_t), intent(in) :: metrics
      type(ocean_dyn_t), intent(in) :: dyn
      type(continuity_t), intent(inout) :: ct
      type(multilayer_state_t), intent(inout) :: ms
      type(ocean_bc_state_t), intent(in), optional :: bc

      if (dyn%dt_tracer_advect_ratio <= 1) return
      if (ct%t_dyn_rel_adv <= 0.0_wp) return

      if (present(bc)) then
         call continuity_tracer_drain(grid, metrics, ct, ms, dyn%dt_tracer_advect_ratio, bc=bc)
      else
         call continuity_tracer_drain(grid, metrics, ct, ms, dyn%dt_tracer_advect_ratio)
      end if
   end subroutine ocean_dyn_flush_tracer_window