dyn_mpas_get_global_mesh_dimension Subroutine

private subroutine dyn_mpas_get_global_mesh_dimension(self, ncells_global, nedges_global, nvertices_global, nvertlevels, ncells_max, nedges_max, sphere_radius)

Uses

    • mpas_dmpar
  • proc~~dyn_mpas_get_global_mesh_dimension~~UsesGraph proc~dyn_mpas_get_global_mesh_dimension mpas_dynamical_core_type%dyn_mpas_get_global_mesh_dimension mpas_dmpar mpas_dmpar proc~dyn_mpas_get_global_mesh_dimension->mpas_dmpar

This subroutine returns global mesh dimensions, including: * Numbers of global mesh cells, edges, vertices, and vertical levels across all tasks. * Maximum numbers of mesh cells and edges/vertices among all tasks. * Sphere radius. Ported and refactored for CAM-SIMA. (KCW, 2024-03-25)

Type Bound

mpas_dynamical_core_type

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out) :: ncells_global
integer, intent(out) :: nedges_global
integer, intent(out) :: nvertices_global
integer, intent(out) :: nvertlevels
integer, intent(out) :: ncells_max
integer, intent(out) :: nedges_max
real(kind=rkind), intent(out) :: sphere_radius

Calls

proc~~dyn_mpas_get_global_mesh_dimension~~CallsGraph proc~dyn_mpas_get_global_mesh_dimension mpas_dynamical_core_type%dyn_mpas_get_global_mesh_dimension mpas_dmpar_max_int mpas_dmpar_max_int proc~dyn_mpas_get_global_mesh_dimension->mpas_dmpar_max_int mpas_dmpar_sum_int mpas_dmpar_sum_int proc~dyn_mpas_get_global_mesh_dimension->mpas_dmpar_sum_int none~get_variable_pointer mpas_dynamical_core_type%get_variable_pointer proc~dyn_mpas_get_global_mesh_dimension->none~get_variable_pointer proc~dyn_mpas_debug_print mpas_dynamical_core_type%dyn_mpas_debug_print proc~dyn_mpas_get_global_mesh_dimension->proc~dyn_mpas_debug_print 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 proc~stringify stringify proc~dyn_mpas_debug_print->proc~stringify 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

Called by

proc~~dyn_mpas_get_global_mesh_dimension~~CalledByGraph proc~dyn_mpas_get_global_mesh_dimension mpas_dynamical_core_type%dyn_mpas_get_global_mesh_dimension proc~dyn_inquire_mesh_dimensions dyn_inquire_mesh_dimensions proc~dyn_inquire_mesh_dimensions->proc~dyn_mpas_get_global_mesh_dimension proc~model_grid_init model_grid_init proc~model_grid_init->proc~dyn_inquire_mesh_dimensions

Variables

Type Visibility Attributes Name Initial
integer, private, pointer :: maxedges_pointer
integer, private, pointer :: ncellssolve_pointer
integer, private, pointer :: nedgessolve_pointer
integer, private, pointer :: nverticessolve_pointer
integer, private, pointer :: nvertlevels_pointer
character(len=*), private, parameter :: subname = 'dyn_mpas_subdriver::dyn_mpas_get_global_mesh_dimension'

Source Code

    subroutine dyn_mpas_get_global_mesh_dimension(self, &
            ncells_global, nedges_global, nvertices_global, nvertlevels, ncells_max, nedges_max, &
            sphere_radius)
        ! Module(s) from MPAS.
        use mpas_dmpar, only: mpas_dmpar_max_int, mpas_dmpar_sum_int

        class(mpas_dynamical_core_type), intent(in) :: self
        integer, intent(out) :: ncells_global, nedges_global, nvertices_global, nvertlevels, ncells_max, nedges_max
        real(rkind), intent(out) :: sphere_radius

        character(*), parameter :: subname = 'dyn_mpas_subdriver::dyn_mpas_get_global_mesh_dimension'
        integer, pointer :: maxedges_pointer
        integer, pointer :: ncellssolve_pointer
        integer, pointer :: nedgessolve_pointer
        integer, pointer :: nverticessolve_pointer
        integer, pointer :: nvertlevels_pointer

        call self % debug_print(log_level_debug, subname // ' entered')

        nullify(maxedges_pointer)
        nullify(ncellssolve_pointer)
        nullify(nedgessolve_pointer)
        nullify(nverticessolve_pointer)
        nullify(nvertlevels_pointer)

        call self % debug_print(log_level_info, 'Inquiring global mesh dimensions')

        call self % get_variable_pointer(maxedges_pointer, 'dim', 'maxEdges')
        call self % get_variable_pointer(ncellssolve_pointer, 'dim', 'nCellsSolve')
        call self % get_variable_pointer(nedgessolve_pointer, 'dim', 'nEdgesSolve')
        call self % get_variable_pointer(nverticessolve_pointer, 'dim', 'nVerticesSolve')
        call self % get_variable_pointer(nvertlevels_pointer, 'dim', 'nVertLevels')

        call mpas_dmpar_sum_int(self % domain_ptr % dminfo, ncellssolve_pointer, ncells_global)
        call mpas_dmpar_sum_int(self % domain_ptr % dminfo, nedgessolve_pointer, nedges_global)
        call mpas_dmpar_sum_int(self % domain_ptr % dminfo, nverticessolve_pointer, nvertices_global)

        ! Vertical levels are not decomposed.
        ! All tasks have the same number of vertical levels.
        nvertlevels = nvertlevels_pointer

        call mpas_dmpar_max_int(self % domain_ptr % dminfo, ncellssolve_pointer, ncells_max)

        nedges_max = maxedges_pointer
        sphere_radius = self % domain_ptr % sphere_radius

        nullify(maxedges_pointer)
        nullify(ncellssolve_pointer)
        nullify(nedgessolve_pointer)
        nullify(nverticessolve_pointer)
        nullify(nvertlevels_pointer)

        call self % debug_print(log_level_debug, subname // ' completed')
    end subroutine dyn_mpas_get_global_mesh_dimension