model_grid_init Subroutine

public subroutine model_grid_init()

Uses

    • cam_logfile
    • string_utils
    • cam_abortutils
    • dynconst
    • cam_constituents
    • dyn_comp
    • vert_coord
    • pio
    • cam_initfiles
  • proc~~model_grid_init~~UsesGraph proc~model_grid_init model_grid_init cam_abortutils cam_abortutils proc~model_grid_init->cam_abortutils cam_constituents cam_constituents proc~model_grid_init->cam_constituents cam_initfiles cam_initfiles proc~model_grid_init->cam_initfiles cam_logfile cam_logfile proc~model_grid_init->cam_logfile dynconst dynconst proc~model_grid_init->dynconst module~dyn_comp dyn_comp proc~model_grid_init->module~dyn_comp pio pio proc~model_grid_init->pio string_utils string_utils proc~model_grid_init->string_utils vert_coord vert_coord proc~model_grid_init->vert_coord module~dyn_mpas_subdriver dyn_mpas_subdriver module~dyn_comp->module~dyn_mpas_subdriver iso_fortran_env iso_fortran_env module~dyn_mpas_subdriver->iso_fortran_env mpas_derived_types mpas_derived_types module~dyn_mpas_subdriver->mpas_derived_types mpas_kind_types mpas_kind_types module~dyn_mpas_subdriver->mpas_kind_types mpi mpi module~dyn_mpas_subdriver->mpi

Initialize various model grids (e.g., dynamics, physics) in terms of dynamics decomposition. Additionally, MPAS framework initialization and reading time-invariant (e.g., grid/mesh) variables are also being completed in this subroutine. (KCW, 2024-03-29)

Arguments

None

Calls

proc~~model_grid_init~~CallsGraph proc~model_grid_init model_grid_init dynconst_init dynconst_init proc~model_grid_init->dynconst_init endrun endrun proc~model_grid_init->endrun initial_file_get_id initial_file_get_id proc~model_grid_init->initial_file_get_id proc~define_cam_grid define_cam_grid proc~model_grid_init->proc~define_cam_grid proc~dyn_debug_print dyn_debug_print proc~model_grid_init->proc~dyn_debug_print proc~dyn_inquire_mesh_dimensions dyn_inquire_mesh_dimensions proc~model_grid_init->proc~dyn_inquire_mesh_dimensions proc~dyn_mpas_compute_unit_vector mpas_dynamical_core_type%dyn_mpas_compute_unit_vector proc~model_grid_init->proc~dyn_mpas_compute_unit_vector proc~dyn_mpas_init_phase3 mpas_dynamical_core_type%dyn_mpas_init_phase3 proc~model_grid_init->proc~dyn_mpas_init_phase3 proc~dyn_mpas_read_write_stream mpas_dynamical_core_type%dyn_mpas_read_write_stream proc~model_grid_init->proc~dyn_mpas_read_write_stream proc~init_physics_grid init_physics_grid proc~model_grid_init->proc~init_physics_grid proc~init_reference_pressure init_reference_pressure proc~model_grid_init->proc~init_reference_pressure stringify stringify proc~model_grid_init->stringify vert_coord_init vert_coord_init proc~model_grid_init->vert_coord_init proc~define_cam_grid->proc~dyn_debug_print proc~define_cam_grid->stringify cam_grid_attribute_register cam_grid_attribute_register proc~define_cam_grid->cam_grid_attribute_register cam_grid_register cam_grid_register proc~define_cam_grid->cam_grid_register check_allocate check_allocate proc~define_cam_grid->check_allocate horiz_coord_create horiz_coord_create proc~define_cam_grid->horiz_coord_create none~get_variable_pointer mpas_dynamical_core_type%get_variable_pointer proc~define_cam_grid->none~get_variable_pointer proc~dyn_grid_id dyn_grid_id proc~define_cam_grid->proc~dyn_grid_id proc~dyn_debug_print->stringify proc~dyn_inquire_mesh_dimensions->proc~dyn_debug_print proc~dyn_inquire_mesh_dimensions->stringify proc~dyn_mpas_get_global_mesh_dimension mpas_dynamical_core_type%dyn_mpas_get_global_mesh_dimension proc~dyn_inquire_mesh_dimensions->proc~dyn_mpas_get_global_mesh_dimension proc~dyn_mpas_get_local_mesh_dimension mpas_dynamical_core_type%dyn_mpas_get_local_mesh_dimension proc~dyn_inquire_mesh_dimensions->proc~dyn_mpas_get_local_mesh_dimension mpas_initialize_vectors mpas_initialize_vectors proc~dyn_mpas_compute_unit_vector->mpas_initialize_vectors proc~dyn_mpas_compute_unit_vector->none~get_variable_pointer proc~dyn_mpas_debug_print mpas_dynamical_core_type%dyn_mpas_debug_print proc~dyn_mpas_compute_unit_vector->proc~dyn_mpas_debug_print proc~dyn_mpas_get_pool_pointer mpas_dynamical_core_type%dyn_mpas_get_pool_pointer proc~dyn_mpas_compute_unit_vector->proc~dyn_mpas_get_pool_pointer mpas_bootstrap_framework_phase1 mpas_bootstrap_framework_phase1 proc~dyn_mpas_init_phase3->mpas_bootstrap_framework_phase1 mpas_bootstrap_framework_phase2 mpas_bootstrap_framework_phase2 proc~dyn_mpas_init_phase3->mpas_bootstrap_framework_phase2 mpas_pool_add_config mpas_pool_add_config proc~dyn_mpas_init_phase3->mpas_pool_add_config mpas_pool_add_dimension mpas_pool_add_dimension proc~dyn_mpas_init_phase3->mpas_pool_add_dimension mpas_pool_get_dimension mpas_pool_get_dimension proc~dyn_mpas_init_phase3->mpas_pool_get_dimension pio_file_is_open pio_file_is_open proc~dyn_mpas_init_phase3->pio_file_is_open proc~dyn_mpas_init_phase3->proc~dyn_mpas_debug_print proc~dyn_mpas_init_phase3->proc~dyn_mpas_get_pool_pointer proc~stringify stringify proc~dyn_mpas_init_phase3->proc~stringify mpas_closestream mpas_closestream proc~dyn_mpas_read_write_stream->mpas_closestream mpas_pool_destroy_pool mpas_pool_destroy_pool proc~dyn_mpas_read_write_stream->mpas_pool_destroy_pool mpas_readstream mpas_readstream proc~dyn_mpas_read_write_stream->mpas_readstream mpas_writestream mpas_writestream proc~dyn_mpas_read_write_stream->mpas_writestream postread_reindex postread_reindex proc~dyn_mpas_read_write_stream->postread_reindex postwrite_reindex postwrite_reindex proc~dyn_mpas_read_write_stream->postwrite_reindex prewrite_reindex prewrite_reindex proc~dyn_mpas_read_write_stream->prewrite_reindex proc~dyn_mpas_read_write_stream->proc~dyn_mpas_debug_print proc~dyn_mpas_exchange_halo mpas_dynamical_core_type%dyn_mpas_exchange_halo proc~dyn_mpas_read_write_stream->proc~dyn_mpas_exchange_halo proc~dyn_mpas_init_stream_with_pool mpas_dynamical_core_type%dyn_mpas_init_stream_with_pool proc~dyn_mpas_read_write_stream->proc~dyn_mpas_init_stream_with_pool proc~parse_stream_name parse_stream_name proc~dyn_mpas_read_write_stream->proc~parse_stream_name proc~init_physics_grid->proc~dyn_debug_print proc~init_physics_grid->stringify proc~init_physics_grid->check_allocate coord_indices coord_indices proc~init_physics_grid->coord_indices dyn_block_index dyn_block_index proc~init_physics_grid->dyn_block_index proc~init_physics_grid->none~get_variable_pointer phys_grid_init phys_grid_init proc~init_physics_grid->phys_grid_init proc~init_reference_pressure->proc~dyn_debug_print proc~init_reference_pressure->stringify add_vert_coord add_vert_coord proc~init_reference_pressure->add_vert_coord proc~init_reference_pressure->check_allocate proc~init_reference_pressure->none~get_variable_pointer ref_pres_init ref_pres_init proc~init_reference_pressure->ref_pres_init std_atm_pres std_atm_pres proc~init_reference_pressure->std_atm_pres 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~dyn_mpas_debug_print->proc~stringify proc~dyn_mpas_exchange_halo->proc~dyn_mpas_debug_print proc~dyn_mpas_exchange_halo->proc~stringify mpas_dmpar_exch_halo_field mpas_dmpar_exch_halo_field proc~dyn_mpas_exchange_halo->mpas_dmpar_exch_halo_field mpas_pool_get_field mpas_pool_get_field proc~dyn_mpas_exchange_halo->mpas_pool_get_field mpas_pool_get_field_info mpas_pool_get_field_info proc~dyn_mpas_exchange_halo->mpas_pool_get_field_info proc~dyn_mpas_get_global_mesh_dimension->none~get_variable_pointer proc~dyn_mpas_get_global_mesh_dimension->proc~dyn_mpas_debug_print 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 proc~dyn_mpas_get_local_mesh_dimension->none~get_variable_pointer proc~dyn_mpas_get_local_mesh_dimension->proc~dyn_mpas_debug_print mpas_pool_get_subpool mpas_pool_get_subpool proc~dyn_mpas_get_pool_pointer->mpas_pool_get_subpool proc~dyn_mpas_init_stream_with_pool->mpas_pool_add_config proc~dyn_mpas_init_stream_with_pool->pio_file_is_open proc~dyn_mpas_init_stream_with_pool->proc~dyn_mpas_debug_print proc~dyn_mpas_init_stream_with_pool->proc~parse_stream_name proc~dyn_mpas_init_stream_with_pool->proc~stringify mpas_createstream mpas_createstream proc~dyn_mpas_init_stream_with_pool->mpas_createstream mpas_pool_create_pool mpas_pool_create_pool proc~dyn_mpas_init_stream_with_pool->mpas_pool_create_pool proc~dyn_mpas_init_stream_with_pool->mpas_pool_get_field mpas_streamaddfield mpas_streamaddfield proc~dyn_mpas_init_stream_with_pool->mpas_streamaddfield none~add_stream_attribute add_stream_attribute proc~dyn_mpas_init_stream_with_pool->none~add_stream_attribute proc~dyn_mpas_check_variable_status mpas_dynamical_core_type%dyn_mpas_check_variable_status proc~dyn_mpas_init_stream_with_pool->proc~dyn_mpas_check_variable_status proc~index_unique index_unique proc~parse_stream_name->proc~index_unique proc~parse_stream_name_fragment parse_stream_name_fragment proc~parse_stream_name->proc~parse_stream_name_fragment none~add_stream_attribute_0d add_stream_attribute_0d none~add_stream_attribute->none~add_stream_attribute_0d none~add_stream_attribute_1d add_stream_attribute_1d none~add_stream_attribute->none~add_stream_attribute_1d proc~dyn_mpas_check_variable_status->pio_file_is_open proc~dyn_mpas_check_variable_status->proc~dyn_mpas_debug_print proc~dyn_mpas_check_variable_status->proc~stringify proc~dyn_mpas_check_variable_status->mpas_pool_get_field constituentnames constituentnames proc~dyn_mpas_check_variable_status->constituentnames pio_inq_varid pio_inq_varid proc~dyn_mpas_check_variable_status->pio_inq_varid pio_inq_varndims pio_inq_varndims proc~dyn_mpas_check_variable_status->pio_inq_varndims pio_inq_vartype pio_inq_vartype proc~dyn_mpas_check_variable_status->pio_inq_vartype proc~dyn_mpas_get_variable_pointer_c0->proc~dyn_mpas_get_pool_pointer 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_variable_pointer_c1->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_c1->mpas_pool_get_array 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_i0->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i0->mpas_pool_get_config 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_i1->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i2->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_i2->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_i3->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_i3->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_l0->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_l0->mpas_pool_get_config proc~dyn_mpas_get_variable_pointer_r0->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_r1->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r1->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r2->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r2->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r3->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r3->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r4->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r4->mpas_pool_get_array proc~dyn_mpas_get_variable_pointer_r5->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_get_variable_pointer_r5->mpas_pool_get_array none~add_stream_attribute_0d->proc~dyn_mpas_debug_print mpas_writestreamatt mpas_writestreamatt none~add_stream_attribute_0d->mpas_writestreamatt none~add_stream_attribute_1d->proc~dyn_mpas_debug_print none~add_stream_attribute_1d->mpas_writestreamatt

Variables

Type Visibility Attributes Name Initial
type(file_desc_t), private, pointer :: pio_file
character(len=*), private, parameter :: subname = 'dyn_grid::model_grid_init'

Source Code

    subroutine model_grid_init()
        ! Module(s) from CAM-SIMA.
        use cam_abortutils, only: endrun
        use cam_constituents, only: num_advected
        use cam_initfiles, only: initial_file_get_id
        use cam_logfile, only: debugout_debug, debugout_info, debugout_verbose
        use dyn_comp, only: dyn_debug_print, dyn_inquire_mesh_dimensions, mpas_dynamical_core, nvertlevels
        use dynconst, only: dynconst_init
        use string_utils, only: stringify
        use vert_coord, only: pver, vert_coord_init
        ! Module(s) from external libraries.
        use pio, only: file_desc_t

        character(*), parameter :: subname = 'dyn_grid::model_grid_init'
        type(file_desc_t), pointer :: pio_file

        call dyn_debug_print(debugout_debug, subname // ' entered')

        nullify(pio_file)

        ! Initialize mathematical and physical constants for dynamics.
        call dynconst_init()

        call dyn_debug_print(debugout_info, 'Initializing vertical coordinate indexes')

        ! Initialize vertical coordinate indexes.
        ! `pver` comes from CAM-SIMA namelist.
        ! `pverp` is set only after this call. Call it as soon as possible.
        call vert_coord_init(1, pver)

        ! Get PIO file descriptor for initial file.
        pio_file => initial_file_get_id()

        call dyn_debug_print(debugout_info, 'Initializing MPAS dynamical core (Phase 3/4)')

        ! Finish MPAS framework initialization, including
        ! the allocation of all blocks and fields managed by MPAS.
        call mpas_dynamical_core % init_phase3(num_advected, pio_file)

        call dyn_debug_print(debugout_info, 'Initializing MPAS mesh variables')

        ! Read time-invariant (e.g., grid/mesh) variables.
        call mpas_dynamical_core % read_write_stream(pio_file, 'r', 'invariant')

        nullify(pio_file)

        ! Compute local east, north and edge-normal unit vectors whenever time-invariant (e.g., grid/mesh) variables are read.
        call mpas_dynamical_core % compute_unit_vector()

        ! Inquire local and global mesh dimensions.
        call dyn_inquire_mesh_dimensions()

        ! Check for consistency in numbers of vertical layers.
        if (nvertlevels /= pver) then
            call dyn_debug_print(debugout_verbose, 'Number of vertical layers in CAM-SIMA namelist, pver = ' // &
                stringify([pver]))
            call dyn_debug_print(debugout_verbose, 'Number of vertical layers in initial file, nvertlevels = ' // &
                stringify([nvertlevels]))

            call endrun('Numbers of vertical layers mismatch', subname, __LINE__)
        end if

        call dyn_debug_print(debugout_info, 'Initializing reference pressure')

        ! Initialize reference pressure for use by physics.
        call init_reference_pressure()

        call dyn_debug_print(debugout_info, 'Initializing physics grid')

        ! Initialize physics grid.
        call init_physics_grid()

        call dyn_debug_print(debugout_info, 'Registering dynamics grid with CAM-SIMA')

        ! Register dynamics grid with CAM-SIMA.
        call define_cam_grid()

        call dyn_debug_print(debugout_debug, subname // ' completed')
    end subroutine model_grid_init