The model’s OWN relative vorticity ζ = ∂v/∂x − ∂u/∂y, at the same
C-grid corners coriolis_adv computes it at (circulation/area
form, C1 slip factor), averaged corner -> cell centre. See
fill_vorticity_z_impl for the formula and why it replaced a
centred T-point stencil that differenced ocean velocity straight
against the zero stored at land faces (a spurious no-slip-like
vorticity sheet at every coast, even under the free-slip default).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(*), | intent(in) | :: | state_handle | |||
| real(kind=wp), | intent(inout) | :: | buf(:,:,:) |
subroutine fill_vorticity_z(state_handle, buf) !! The model's OWN relative vorticity ζ = ∂v/∂x − ∂u/∂y, at the same !! C-grid corners `coriolis_adv` computes it at (circulation/area !! form, C1 slip factor), averaged corner -> cell centre. See !! `fill_vorticity_z_impl` for the formula and why it replaced a !! centred T-point stencil that differenced ocean velocity straight !! against the zero stored at land faces (a spurious no-slip-like !! vorticity sheet at every coast, even under the free-slip default). class(*), intent(in) :: state_handle real(wp), intent(inout) :: buf(:, :, :) select type (state => state_handle) class is (ocean_state_t) if (.not. state%metrics%is_init) then call zero3_impl(buf) return end if call fill_vorticity_z_impl(state%multilayer%u_face_x_layer, & state%multilayer%v_face_y_layer, & state%metrics%dyCv, & state%metrics%dxCu, & state%metrics%wet_q, & state%metrics%wet_T, & state%metrics%iareaBu, & state%coriolis_adv%no_slip, & state%multilayer%nz_ml, buf) end select end subroutine fill_vorticity_z