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 | 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) | :: | 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 |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | private | :: | it |
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