gm_tracer_advect_x Subroutine

private pure subroutine gm_tracer_advect_x(grid, metrics, this, ms, uflux, dt, budget_w)

Zonal PPM tracer advection of every horizontally-advected tracer by the GM bolus flux uflux (the resolved path’s own kernel, tracer_advect_zonal_one_impl; heat/salt budgets weighted by budget_w). No OBC ghost override: continuity_gm_apply has closed every non-periodic edge face.

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) :: uflux(grid%nx_total+1,grid%ny_total,ms%nz_ml)

GM zonal bolus transport (m^3/s).

real(kind=wp), intent(in) :: dt
real(kind=wp), intent(in) :: budget_w

Calls

proc~~gm_tracer_advect_x~~CallsGraph proc~gm_tracer_advect_x gm_tracer_advect_x proc~tracer_advect_zonal_one_impl tracer_advect_zonal_one_impl proc~gm_tracer_advect_x->proc~tracer_advect_zonal_one_impl local local proc~tracer_advect_zonal_one_impl->local proc~ppm_cell_limiter ppm_cell_limiter proc~tracer_advect_zonal_one_impl->proc~ppm_cell_limiter proc~ppm_limited_slope ppm_limited_slope proc~tracer_advect_zonal_one_impl->proc~ppm_limited_slope proc~ppm_mirror_h ppm_mirror_h proc~tracer_advect_zonal_one_impl->proc~ppm_mirror_h

Called by

proc~~gm_tracer_advect_x~~CalledByGraph proc~gm_tracer_advect_x gm_tracer_advect_x proc~continuity_gm_apply continuity_gm_apply proc~continuity_gm_apply->proc~gm_tracer_advect_x proc~run_gm_step run_gm_step proc~run_gm_step->proc~continuity_gm_apply proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~run_gm_step proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step

Variables

Type Visibility Attributes Name Initial
integer, private :: it

Source Code

   pure subroutine gm_tracer_advect_x(grid, metrics, this, ms, uflux, dt, budget_w)
      !! Zonal PPM tracer advection of every horizontally-advected tracer by
      !! the GM bolus flux `uflux` (the resolved path's own kernel,
      !! `tracer_advect_zonal_one_impl`; heat/salt budgets weighted by
      !! `budget_w`).  No OBC ghost override: `continuity_gm_apply` has
      !! closed every non-periodic edge face.
      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) :: uflux(grid%nx_total + 1, grid%ny_total, ms%nz_ml)
         !! GM zonal bolus transport (m^3/s).
      real(wp), intent(in) :: dt, budget_w
      integer :: it
      if (.not. allocated(ms%tracers)) return
      do it = 1, size(ms%tracers)
         if (.not. ms%tracers(it)%do_horizontal_advection) cycle
         select case (ms%tracers(it)%budget_id)
         case (TRACER_BUDGET_HEAT)
            call tracer_advect_zonal_one_impl(grid%nx_total, grid%ny_total, ms%nz_ml, &
                                              dt, metrics%iareaT, metrics%wet_T, ms%h_layer, &
                                              ms%tracers(it)%hTr, uflux, &
                                              this%h_face_left_x%data, this%h_face_right_x%data, &
                                              budget_adv=ms%heat_budget_horiz_adv, budget_w=budget_w)
         case (TRACER_BUDGET_SALT)
            call tracer_advect_zonal_one_impl(grid%nx_total, grid%ny_total, ms%nz_ml, &
                                              dt, metrics%iareaT, metrics%wet_T, ms%h_layer, &
                                              ms%tracers(it)%hTr, uflux, &
                                              this%h_face_left_x%data, this%h_face_right_x%data, &
                                              budget_adv=ms%salt_budget_horiz_adv, budget_w=budget_w)
         case default
            call tracer_advect_zonal_one_impl(grid%nx_total, grid%ny_total, ms%nz_ml, &
                                              dt, metrics%iareaT, metrics%wet_T, ms%h_layer, &
                                              ms%tracers(it)%hTr, uflux, &
                                              this%h_face_left_x%data, this%h_face_right_x%data)
         end select
      end do
   end subroutine gm_tracer_advect_x