gm_tracer_advect_y Subroutine

private pure subroutine gm_tracer_advect_y(grid, metrics, this, ms, vflux, dt, budget_w)

Meridional twin of gm_tracer_advect_x.

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

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

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

Calls

proc~~gm_tracer_advect_y~~CallsGraph proc~gm_tracer_advect_y gm_tracer_advect_y proc~tracer_advect_meridional_one_impl tracer_advect_meridional_one_impl proc~gm_tracer_advect_y->proc~tracer_advect_meridional_one_impl local local proc~tracer_advect_meridional_one_impl->local proc~ppm_cell_limiter ppm_cell_limiter proc~tracer_advect_meridional_one_impl->proc~ppm_cell_limiter proc~ppm_limited_slope ppm_limited_slope proc~tracer_advect_meridional_one_impl->proc~ppm_limited_slope proc~ppm_mirror_h ppm_mirror_h proc~tracer_advect_meridional_one_impl->proc~ppm_mirror_h

Called by

proc~~gm_tracer_advect_y~~CalledByGraph proc~gm_tracer_advect_y gm_tracer_advect_y proc~continuity_gm_apply continuity_gm_apply proc~continuity_gm_apply->proc~gm_tracer_advect_y 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_y(grid, metrics, this, ms, vflux, dt, budget_w)
      !! Meridional twin of `gm_tracer_advect_x`.
      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) :: vflux(grid%nx_total, grid%ny_total + 1, ms%nz_ml)
         !! GM meridional 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_meridional_one_impl(grid%nx_total, grid%ny_total, ms%nz_ml, &
                                                   dt, metrics%iareaT, metrics%wet_T, ms%h_layer, &
                                                   ms%tracers(it)%hTr, vflux, &
                                                   this%h_face_left_y%data, this%h_face_right_y%data, &
                                                   budget_adv=ms%heat_budget_horiz_adv, budget_w=budget_w)
         case (TRACER_BUDGET_SALT)
            call tracer_advect_meridional_one_impl(grid%nx_total, grid%ny_total, ms%nz_ml, &
                                                   dt, metrics%iareaT, metrics%wet_T, ms%h_layer, &
                                                   ms%tracers(it)%hTr, vflux, &
                                                   this%h_face_left_y%data, this%h_face_right_y%data, &
                                                   budget_adv=ms%salt_budget_horiz_adv, budget_w=budget_w)
         case default
            call tracer_advect_meridional_one_impl(grid%nx_total, grid%ny_total, ms%nz_ml, &
                                                   dt, metrics%iareaT, metrics%wet_T, ms%h_layer, &
                                                   ms%tracers(it)%hTr, vflux, &
                                                   this%h_face_left_y%data, this%h_face_right_y%data)
         end select
      end do
   end subroutine gm_tracer_advect_y