dyn_mpas_compute_cell_relative_vorticity Subroutine

private subroutine dyn_mpas_compute_cell_relative_vorticity(self, cell_relative_vorticity)

MPAS uses staggered C-grid for spatial discretization, where relative vorticities are located at vertex points because wind vectors are located at edge points. However, physics schemes that use relative vorticities as input usually want them at cell points instead. This subroutine computes the relative vorticity at each cell point from its surrounding vertex points and returns the results.

Type Bound

mpas_dynamical_core_type

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: cell_relative_vorticity(:,:)

Calls

proc~~dyn_mpas_compute_cell_relative_vorticity~~CallsGraph proc~dyn_mpas_compute_cell_relative_vorticity mpas_dynamical_core_type%dyn_mpas_compute_cell_relative_vorticity none~get_variable_pointer mpas_dynamical_core_type%get_variable_pointer proc~dyn_mpas_compute_cell_relative_vorticity->none~get_variable_pointer proc~regrid_from_vertex_to_cell regrid_from_vertex_to_cell proc~dyn_mpas_compute_cell_relative_vorticity->proc~regrid_from_vertex_to_cell proc~dyn_mpas_get_variable_pointer_c0 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_c0 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_c0 proc~dyn_mpas_get_variable_pointer_c1 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_c1 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_c1 proc~dyn_mpas_get_variable_pointer_i0 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_i0 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_i0 proc~dyn_mpas_get_variable_pointer_i1 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_i1 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_i1 proc~dyn_mpas_get_variable_pointer_i2 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_i2 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_i2 proc~dyn_mpas_get_variable_pointer_i3 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_i3 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_i3 proc~dyn_mpas_get_variable_pointer_l0 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_l0 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_l0 proc~dyn_mpas_get_variable_pointer_r0 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_r0 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_r0 proc~dyn_mpas_get_variable_pointer_r1 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_r1 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_r1 proc~dyn_mpas_get_variable_pointer_r2 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_r2 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_r2 proc~dyn_mpas_get_variable_pointer_r3 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_r3 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_r3 proc~dyn_mpas_get_variable_pointer_r4 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_r4 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_r4 proc~dyn_mpas_get_variable_pointer_r5 mpas_dynamical_core_type%dyn_mpas_get_variable_pointer_r5 none~get_variable_pointer->proc~dyn_mpas_get_variable_pointer_r5 mpas_pool_get_array mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_c0->mpas_pool_get_array mpas_pool_get_config mpas_pool_get_config proc~dyn_mpas_get_variable_pointer_c0->mpas_pool_get_config proc~dyn_mpas_get_pool_pointer mpas_dynamical_core_type%dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_c0->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_c1->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_c1->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_i0->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i0->mpas_pool_get_config mpas_pool_get_dimension mpas_pool_get_dimension proc~dyn_mpas_get_variable_pointer_i0->mpas_pool_get_dimension proc~dyn_mpas_get_variable_pointer_i0->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_i1->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i1->mpas_pool_get_dimension proc~dyn_mpas_get_variable_pointer_i1->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_i2->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i2->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_i3->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i3->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_l0->mpas_pool_get_config proc~dyn_mpas_get_variable_pointer_l0->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r0->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r0->mpas_pool_get_config proc~dyn_mpas_get_variable_pointer_r0->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r1->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r1->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r2->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r2->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r3->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r3->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r4->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r4->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r5->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r5->proc~dyn_mpas_get_pool_pointer mpas_pool_get_subpool mpas_pool_get_subpool proc~dyn_mpas_get_pool_pointer->mpas_pool_get_subpool

Variables

Type Visibility Attributes Name Initial
real(kind=rkind), private, pointer :: areacell(:)
integer, private :: i
integer, private :: ierr
integer, private :: k
real(kind=rkind), private, pointer :: kiteareasonvertex(:,:)
integer, private, pointer :: kiteforcell(:,:)
integer, private, pointer :: ncellssolve
integer, private, pointer :: nedgesoncell(:)
integer, private, pointer :: nvertlevels
character(len=*), private, parameter :: subname = 'dyn_mpas_subdriver::dyn_mpas_compute_cell_relative_vorticity'
integer, private, pointer :: verticesoncell(:,:)
real(kind=rkind), private, pointer :: vorticity(:,:)

Source Code

    subroutine dyn_mpas_compute_cell_relative_vorticity(self, cell_relative_vorticity)
        class(mpas_dynamical_core_type), intent(in) :: self
        real(rkind), allocatable, intent(out) :: cell_relative_vorticity(:, :)

        character(*), parameter :: subname = 'dyn_mpas_subdriver::dyn_mpas_compute_cell_relative_vorticity'
        integer :: i, k
        integer :: ierr
        integer, pointer :: ncellssolve, nvertlevels
        integer, pointer :: kiteforcell(:, :), nedgesoncell(:), verticesoncell(:, :)
        real(rkind), pointer :: areacell(:), kiteareasonvertex(:, :), vorticity(:, :)

        nullify(ncellssolve, nvertlevels)
        nullify(kiteforcell, nedgesoncell, verticesoncell)
        nullify(areacell, kiteareasonvertex, vorticity)

        ! Input.
        call self % get_variable_pointer(ncellssolve, 'dim', 'nCellsSolve')
        call self % get_variable_pointer(nvertlevels, 'dim', 'nVertLevels')

        call self % get_variable_pointer(kiteforcell, 'mesh', 'kiteForCell')
        call self % get_variable_pointer(nedgesoncell, 'mesh', 'nEdgesOnCell')
        call self % get_variable_pointer(verticesoncell, 'mesh', 'verticesOnCell')

        call self % get_variable_pointer(areacell, 'mesh', 'areaCell')
        call self % get_variable_pointer(kiteareasonvertex, 'mesh', 'kiteAreasOnVertex')
        call self % get_variable_pointer(vorticity, 'diag', 'vorticity')

        ! Output.
        allocate(cell_relative_vorticity(nvertlevels, ncellssolve), stat=ierr)

        if (ierr /= 0) then
            call self % model_error('Failed to allocate cell_relative_vorticity', subname, __LINE__)
        end if

        do i = 1, ncellssolve
            do k = 1, nvertlevels
                cell_relative_vorticity(k, i) = regrid_from_vertex_to_cell(i, k, &
                    nedgesoncell, verticesoncell, kiteforcell, kiteareasonvertex, areacell, &
                    vorticity)
            end do
        end do

        nullify(ncellssolve, nvertlevels)
        nullify(kiteforcell, nedgesoncell, verticesoncell)
        nullify(areacell, kiteareasonvertex, vorticity)
    end subroutine dyn_mpas_compute_cell_relative_vorticity