dyn_init Subroutine

public subroutine dyn_init(cam_runtime_opts, dyn_in, dyn_out)

Uses

    • inic_analytic
    • cam_logfile
    • cam_control_mod
    • string_utils
    • cam_abortutils
    • time_manager
    • cam_thermo_formula
    • runtime_obj
    • cam_constituents
    • physics_types
    • cam_pio_utils
    • air_composition
    • pio
    • cam_initfiles
    • phys_vars_init_check
  • proc~~dyn_init~~UsesGraph proc~dyn_init dyn_init air_composition air_composition proc~dyn_init->air_composition cam_abortutils cam_abortutils proc~dyn_init->cam_abortutils cam_constituents cam_constituents proc~dyn_init->cam_constituents cam_control_mod cam_control_mod proc~dyn_init->cam_control_mod cam_initfiles cam_initfiles proc~dyn_init->cam_initfiles cam_logfile cam_logfile proc~dyn_init->cam_logfile cam_pio_utils cam_pio_utils proc~dyn_init->cam_pio_utils cam_thermo_formula cam_thermo_formula proc~dyn_init->cam_thermo_formula inic_analytic inic_analytic proc~dyn_init->inic_analytic phys_vars_init_check phys_vars_init_check proc~dyn_init->phys_vars_init_check physics_types physics_types proc~dyn_init->physics_types pio pio proc~dyn_init->pio runtime_obj runtime_obj proc~dyn_init->runtime_obj string_utils string_utils proc~dyn_init->string_utils time_manager time_manager proc~dyn_init->time_manager

Initialize MPAS dynamical core by one of the following: 1. Setting analytic initial condition; 2. Reading initial condition from a file; 3. Restarting from a file. (KCW, 2024-05-28)

Arguments

Type IntentOptional Attributes Name
type(runtime_options), intent(in) :: cam_runtime_opts
type(dyn_import_t), intent(in) :: dyn_in
type(dyn_export_t), intent(in) :: dyn_out

Calls

proc~~dyn_init~~CallsGraph proc~dyn_init dyn_init analytic_ic_active analytic_ic_active proc~dyn_init->analytic_ic_active check_allocate check_allocate proc~dyn_init->check_allocate clean_iodesc_list clean_iodesc_list proc~dyn_init->clean_iodesc_list const_is_water_species const_is_water_species proc~dyn_init->const_is_water_species const_name const_name proc~dyn_init->const_name get_step_size get_step_size proc~dyn_init->get_step_size initial_file_get_id initial_file_get_id proc~dyn_init->initial_file_get_id proc~check_topography_data check_topography_data proc~dyn_init->proc~check_topography_data proc~dyn_debug_print dyn_debug_print proc~dyn_init->proc~dyn_debug_print proc~dyn_exchange_constituent_states dyn_exchange_constituent_states proc~dyn_init->proc~dyn_exchange_constituent_states proc~dyn_mpas_define_scalar mpas_dynamical_core_type%dyn_mpas_define_scalar proc~dyn_init->proc~dyn_mpas_define_scalar proc~dyn_mpas_init_phase4 mpas_dynamical_core_type%dyn_mpas_init_phase4 proc~dyn_init->proc~dyn_mpas_init_phase4 proc~dyn_mpas_map_mpas_scalar_index mpas_dynamical_core_type%dyn_mpas_map_mpas_scalar_index proc~dyn_init->proc~dyn_mpas_map_mpas_scalar_index proc~dyn_mpas_read_write_stream mpas_dynamical_core_type%dyn_mpas_read_write_stream proc~dyn_init->proc~dyn_mpas_read_write_stream proc~mark_variables_as_initialized mark_variables_as_initialized proc~dyn_init->proc~mark_variables_as_initialized proc~set_analytic_initial_condition set_analytic_initial_condition proc~dyn_init->proc~set_analytic_initial_condition stringify stringify proc~dyn_init->stringify thermodynamic_active_species_ice_idx thermodynamic_active_species_ice_idx proc~dyn_init->thermodynamic_active_species_ice_idx thermodynamic_active_species_ice_idx_dycore thermodynamic_active_species_ice_idx_dycore proc~dyn_init->thermodynamic_active_species_ice_idx_dycore thermodynamic_active_species_idx thermodynamic_active_species_idx proc~dyn_init->thermodynamic_active_species_idx thermodynamic_active_species_idx_dycore thermodynamic_active_species_idx_dycore proc~dyn_init->thermodynamic_active_species_idx_dycore thermodynamic_active_species_liq_idx thermodynamic_active_species_liq_idx proc~dyn_init->thermodynamic_active_species_liq_idx thermodynamic_active_species_liq_idx_dycore thermodynamic_active_species_liq_idx_dycore proc~dyn_init->thermodynamic_active_species_liq_idx_dycore topo_file_get_id topo_file_get_id proc~dyn_init->topo_file_get_id proc~check_topography_data->check_allocate proc~check_topography_data->proc~dyn_debug_print cam_read_field cam_read_field proc~check_topography_data->cam_read_field endrun endrun proc~check_topography_data->endrun none~get_variable_pointer mpas_dynamical_core_type%get_variable_pointer proc~check_topography_data->none~get_variable_pointer pio_file_is_open pio_file_is_open proc~check_topography_data->pio_file_is_open proc~dyn_debug_print->stringify proc~dyn_exchange_constituent_states->check_allocate proc~dyn_exchange_constituent_states->const_is_water_species proc~dyn_exchange_constituent_states->proc~dyn_debug_print proc~dyn_exchange_constituent_states->proc~dyn_mpas_map_mpas_scalar_index cam_constituents_array cam_constituents_array proc~dyn_exchange_constituent_states->cam_constituents_array const_is_dry const_is_dry proc~dyn_exchange_constituent_states->const_is_dry proc~dyn_exchange_constituent_states->endrun proc~dyn_exchange_constituent_states->none~get_variable_pointer pdel pdel proc~dyn_exchange_constituent_states->pdel pdeldry pdeldry proc~dyn_exchange_constituent_states->pdeldry proc~dyn_mpas_exchange_halo mpas_dynamical_core_type%dyn_mpas_exchange_halo proc~dyn_exchange_constituent_states->proc~dyn_mpas_exchange_halo proc~dyn_mpas_map_constituent_index mpas_dynamical_core_type%dyn_mpas_map_constituent_index proc~dyn_exchange_constituent_states->proc~dyn_mpas_map_constituent_index proc~reverse reverse proc~dyn_exchange_constituent_states->proc~reverse constituentnames constituentnames proc~dyn_mpas_define_scalar->constituentnames mpas_pool_add_dimension mpas_pool_add_dimension proc~dyn_mpas_define_scalar->mpas_pool_add_dimension mpas_pool_get_field mpas_pool_get_field proc~dyn_mpas_define_scalar->mpas_pool_get_field proc~dyn_mpas_debug_print mpas_dynamical_core_type%dyn_mpas_debug_print proc~dyn_mpas_define_scalar->proc~dyn_mpas_debug_print proc~dyn_mpas_get_pool_pointer mpas_dynamical_core_type%dyn_mpas_get_pool_pointer proc~dyn_mpas_define_scalar->proc~dyn_mpas_get_pool_pointer proc~index_unique index_unique proc~dyn_mpas_define_scalar->proc~index_unique proc~stringify stringify proc~dyn_mpas_define_scalar->proc~stringify atm_build_halo_groups atm_build_halo_groups proc~dyn_mpas_init_phase4->atm_build_halo_groups atm_mpas_init_block atm_mpas_init_block proc~dyn_mpas_init_phase4->atm_mpas_init_block attlists attlists proc~dyn_mpas_init_phase4->attlists exchange_halo_group exchange_halo_group proc~dyn_mpas_init_phase4->exchange_halo_group mpas_allocate_scratch_field mpas_allocate_scratch_field proc~dyn_mpas_init_phase4->mpas_allocate_scratch_field mpas_atm_dynamics_init mpas_atm_dynamics_init proc~dyn_mpas_init_phase4->mpas_atm_dynamics_init mpas_atm_set_dims mpas_atm_set_dims proc~dyn_mpas_init_phase4->mpas_atm_set_dims mpas_atm_threading_init mpas_atm_threading_init proc~dyn_mpas_init_phase4->mpas_atm_threading_init mpas_constants_compute_derived mpas_constants_compute_derived proc~dyn_mpas_init_phase4->mpas_constants_compute_derived mpas_get_clock_time mpas_get_clock_time proc~dyn_mpas_init_phase4->mpas_get_clock_time mpas_get_time mpas_get_time proc~dyn_mpas_init_phase4->mpas_get_time mpas_modify_att mpas_modify_att proc~dyn_mpas_init_phase4->mpas_modify_att proc~dyn_mpas_init_phase4->mpas_pool_get_field mpas_pool_initialize_time_levels mpas_pool_initialize_time_levels proc~dyn_mpas_init_phase4->mpas_pool_initialize_time_levels mpas_string_replace mpas_string_replace proc~dyn_mpas_init_phase4->mpas_string_replace none~almost_divisible almost_divisible proc~dyn_mpas_init_phase4->none~almost_divisible proc~dyn_mpas_init_phase4->none~get_variable_pointer proc~dyn_mpas_init_phase4->proc~dyn_mpas_debug_print proc~dyn_mpas_init_phase4->proc~dyn_mpas_get_pool_pointer proc~dyn_mpas_init_phase4->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_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~mark_variables_as_initialized->const_name proc~mark_variables_as_initialized->proc~dyn_debug_print mark_as_initialized mark_as_initialized proc~mark_variables_as_initialized->mark_as_initialized proc~set_analytic_initial_condition->proc~dyn_debug_print none~final_shared_variables final_shared_variables proc~set_analytic_initial_condition->none~final_shared_variables none~init_shared_variables init_shared_variables proc~set_analytic_initial_condition->none~init_shared_variables none~set_mpas_state_rho_base_theta_base set_mpas_state_rho_base_theta_base proc~set_analytic_initial_condition->none~set_mpas_state_rho_base_theta_base none~set_mpas_state_rho_theta set_mpas_state_rho_theta proc~set_analytic_initial_condition->none~set_mpas_state_rho_theta none~set_mpas_state_scalars set_mpas_state_scalars proc~set_analytic_initial_condition->none~set_mpas_state_scalars none~set_mpas_state_u set_mpas_state_u proc~set_analytic_initial_condition->none~set_mpas_state_u none~set_mpas_state_w set_mpas_state_w proc~set_analytic_initial_condition->none~set_mpas_state_w none~almost_equal almost_equal none~almost_divisible->none~almost_equal 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 none~init_shared_variables->check_allocate none~init_shared_variables->proc~dyn_debug_print none~init_shared_variables->endrun none~init_shared_variables->none~get_variable_pointer none~init_shared_variables->proc~reverse cam_grid_get_latvals cam_grid_get_latvals none~init_shared_variables->cam_grid_get_latvals cam_grid_get_lonvals cam_grid_get_lonvals none~init_shared_variables->cam_grid_get_lonvals cam_grid_id cam_grid_id none~init_shared_variables->cam_grid_id none~set_mpas_state_rho_base_theta_base->check_allocate none~set_mpas_state_rho_base_theta_base->proc~dyn_debug_print none~set_mpas_state_rho_base_theta_base->none~get_variable_pointer none~set_mpas_state_rho_base_theta_base->proc~dyn_mpas_exchange_halo none~p_by_hypsometric_equation p_by_hypsometric_equation none~set_mpas_state_rho_base_theta_base->none~p_by_hypsometric_equation none~theta_by_poisson_equation theta_by_poisson_equation none~set_mpas_state_rho_base_theta_base->none~theta_by_poisson_equation none~set_mpas_state_rho_theta->check_allocate none~set_mpas_state_rho_theta->proc~dyn_debug_print none~set_mpas_state_rho_theta->none~get_variable_pointer none~set_mpas_state_rho_theta->proc~dyn_mpas_exchange_halo none~set_mpas_state_rho_theta->proc~reverse dyn_set_inic_col dyn_set_inic_col none~set_mpas_state_rho_theta->dyn_set_inic_col none~set_mpas_state_rho_theta->none~p_by_hypsometric_equation none~set_mpas_state_rho_theta->none~theta_by_poisson_equation none~set_mpas_state_scalars->check_allocate none~set_mpas_state_scalars->proc~dyn_debug_print none~set_mpas_state_scalars->none~get_variable_pointer none~set_mpas_state_scalars->proc~dyn_mpas_exchange_halo none~set_mpas_state_scalars->proc~dyn_mpas_map_constituent_index none~set_mpas_state_scalars->proc~reverse none~set_mpas_state_scalars->dyn_set_inic_col proc~dyn_mpas_get_constituent_name mpas_dynamical_core_type%dyn_mpas_get_constituent_name none~set_mpas_state_scalars->proc~dyn_mpas_get_constituent_name none~set_mpas_state_u->check_allocate none~set_mpas_state_u->proc~dyn_debug_print none~set_mpas_state_u->none~get_variable_pointer none~set_mpas_state_u->proc~reverse none~set_mpas_state_u->dyn_set_inic_col proc~dyn_mpas_compute_edge_wind mpas_dynamical_core_type%dyn_mpas_compute_edge_wind none~set_mpas_state_u->proc~dyn_mpas_compute_edge_wind none~set_mpas_state_w->proc~dyn_debug_print none~set_mpas_state_w->none~get_variable_pointer none~set_mpas_state_w->proc~dyn_mpas_exchange_halo proc~dyn_mpas_debug_print->proc~stringify proc~dyn_mpas_exchange_halo->mpas_pool_get_field 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_info mpas_pool_get_field_info proc~dyn_mpas_exchange_halo->mpas_pool_get_field_info 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_get_field 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_add_config mpas_pool_add_config proc~dyn_mpas_init_stream_with_pool->mpas_pool_add_config mpas_pool_create_pool mpas_pool_create_pool proc~dyn_mpas_init_stream_with_pool->mpas_pool_create_pool 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~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->constituentnames proc~dyn_mpas_check_variable_status->mpas_pool_get_field 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 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_compute_edge_wind->none~get_variable_pointer proc~dyn_mpas_compute_edge_wind->proc~dyn_mpas_debug_print proc~dyn_mpas_compute_edge_wind->proc~dyn_mpas_exchange_halo 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->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_i1->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_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
character(len=std_name_len), private, allocatable :: constituent_name(:)
integer, private :: coupling_time_interval
integer, private :: i
integer, private :: ierr
logical, private, allocatable :: is_water_species(:)
type(file_desc_t), private, pointer :: pio_init_file
type(file_desc_t), private, pointer :: pio_topo_file
character(len=*), private, parameter :: subname = 'dyn_comp::dyn_init'

Source Code

    subroutine dyn_init(cam_runtime_opts, dyn_in, dyn_out)
        ! Module(s) from CAM-SIMA.
        use air_composition, only: thermodynamic_active_species_num, &
                                   thermodynamic_active_species_liq_num, &
                                   thermodynamic_active_species_ice_num, &
                                   thermodynamic_active_species_idx, thermodynamic_active_species_idx_dycore, &
                                   thermodynamic_active_species_liq_idx, thermodynamic_active_species_liq_idx_dycore, &
                                   thermodynamic_active_species_ice_idx, thermodynamic_active_species_ice_idx_dycore
        use cam_abortutils, only: check_allocate
        use cam_constituents, only: const_name, const_is_water_species, num_advected, readtrace
        use cam_control_mod, only: initial_run
        use cam_initfiles, only: initial_file_get_id, topo_file_get_id
        use cam_logfile, only: debugout_debug, debugout_info
        use cam_pio_utils, only: clean_iodesc_list
        use cam_thermo_formula, only: energy_formula_dycore, energy_formula_dycore_mpas
        use inic_analytic, only: analytic_ic_active
        use physics_types, only: dycore_energy_consistency_adjust
        use runtime_obj, only: runtime_options
        use string_utils, only: stringify
        use time_manager, only: get_step_size
        ! Module(s) from CCPP.
        use phys_vars_init_check, only: std_name_len
        ! Module(s) from external libraries.
        use pio, only: file_desc_t

        type(runtime_options), intent(in) :: cam_runtime_opts
        type(dyn_import_t), intent(in) :: dyn_in
        type(dyn_export_t), intent(in) :: dyn_out

        character(*), parameter :: subname = 'dyn_comp::dyn_init'
        character(std_name_len), allocatable :: constituent_name(:)
        integer :: coupling_time_interval
        integer :: i
        integer :: ierr
        logical, allocatable :: is_water_species(:)
        type(file_desc_t), pointer :: pio_init_file
        type(file_desc_t), pointer :: pio_topo_file

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

        nullify(pio_init_file)
        nullify(pio_topo_file)

        ! Set the energy formula of dynamical core to MPAS for use in `cam_thermo`.
        energy_formula_dycore = energy_formula_dycore_mpas

        ! The total energy of dynamical core, which uses "MPAS formula" as set above, is not consistent with
        ! that of CAM physics, which uses "FV formula". Therefore, temperature and temperature tendency adjustments
        ! are needed at the end of each physics time step.
        dycore_energy_consistency_adjust = .true.

        allocate(constituent_name(num_advected), stat=ierr)
        call check_allocate(ierr, subname, 'constituent_name(num_advected)', 'dyn_comp', __LINE__)

        allocate(is_water_species(num_advected), stat=ierr)
        call check_allocate(ierr, subname, 'is_water_species(num_advected)', 'dyn_comp', __LINE__)

        do i = 1, num_advected
            constituent_name(i) = const_name(i)
            is_water_species(i) = const_is_water_species(i)
        end do

        call dyn_debug_print(debugout_info, 'Defining MPAS scalars and scalar tendencies')

        ! Inform MPAS about constituent names and their corresponding waterness.
        call mpas_dynamical_core % define_scalar(constituent_name, is_water_species)

        deallocate(constituent_name)
        deallocate(is_water_species)

        ! Provide mapping information between MPAS scalars and constituent names to CAM-SIMA.
        do i = 1, thermodynamic_active_species_num
            thermodynamic_active_species_idx_dycore(i) = &
                mpas_dynamical_core % map_mpas_scalar_index(thermodynamic_active_species_idx(i))
        end do

        do i = 1, thermodynamic_active_species_liq_num
            thermodynamic_active_species_liq_idx_dycore(i) = &
                mpas_dynamical_core % map_mpas_scalar_index(thermodynamic_active_species_liq_idx(i))
        end do

        do i = 1, thermodynamic_active_species_ice_num
            thermodynamic_active_species_ice_idx_dycore(i) = &
                mpas_dynamical_core % map_mpas_scalar_index(thermodynamic_active_species_ice_idx(i))
        end do

        call dyn_debug_print(debugout_debug, 'thermodynamic_active_species_num = ' // &
            stringify([thermodynamic_active_species_num]))
        call dyn_debug_print(debugout_debug, 'thermodynamic_active_species_liq_num = ' // &
            stringify([thermodynamic_active_species_liq_num]))
        call dyn_debug_print(debugout_debug, 'thermodynamic_active_species_ice_num = ' // &
            stringify([thermodynamic_active_species_ice_num]))

        call dyn_debug_print(debugout_debug, 'thermodynamic_active_species_idx_dycore = [' // &
            stringify(thermodynamic_active_species_idx_dycore) // ']')
        call dyn_debug_print(debugout_debug, 'thermodynamic_active_species_liq_idx_dycore = [' // &
            stringify(thermodynamic_active_species_liq_idx_dycore) // ']')
        call dyn_debug_print(debugout_debug, 'thermodynamic_active_species_ice_idx_dycore = [' // &
            stringify(thermodynamic_active_species_ice_idx_dycore) // ']')

        pio_init_file => initial_file_get_id()
        pio_topo_file => topo_file_get_id()

        if (initial_run) then
            ! Run type is initial run.

            call dyn_debug_print(debugout_info, 'Checking for consistency in topography data')

            call check_topography_data(pio_topo_file)

            if (analytic_ic_active()) then
                call dyn_debug_print(debugout_info, 'Initializing MPAS state variables by setting analytic initial condition')

                call set_analytic_initial_condition()
            else
                call dyn_debug_print(debugout_info, 'Initializing MPAS state variables by reading initial condition from a file')

                ! Perform default initialization for all constituents.
                ! Subsequently, they can be overridden depending on the namelist option (below) and
                ! the actual availability (checked and handled by MPAS).
                call dyn_exchange_constituent_states(direction='e', exchange=.true., conversion=.false.)

                ! Namelist option that controls if constituents are to be read from a file.
                if (readtrace) then
                    ! Read variables that belong to the "input" stream in MPAS.
                    call mpas_dynamical_core % read_write_stream(pio_init_file, 'r', 'input')
                else
                    ! Read variables that belong to the "input" stream in MPAS, excluding constituents.
                    call mpas_dynamical_core % read_write_stream(pio_init_file, 'r', 'input-scalars')
                end if
            end if
        else
            ! Run type is branch or restart run.

            call dyn_debug_print(debugout_info, 'Initializing MPAS state variables by restarting from a file')

            ! Read variables that belong to the "input" and "restart" streams in MPAS.
            call mpas_dynamical_core % read_write_stream(pio_init_file, 'r', 'input+restart')
        end if

        call clean_iodesc_list()
        call mark_variables_as_initialized()

        nullify(pio_init_file)
        nullify(pio_topo_file)

        ! This is the time interval for dynamics-physics coupling in CAM-SIMA.
        ! Each time MPAS dynamical core is called to run, it will integrate with time for this specific interval,
        ! then yield control back to the caller.
        coupling_time_interval = get_step_size()

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

        ! Finish MPAS dynamical core initialization. After this point, MPAS dynamical core is ready for time integration.
        call mpas_dynamical_core % init_phase4(coupling_time_interval)

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