dyn_mpas_subdriver Module

This module, the MPAS subdriver, manages the life cycle (i.e., initialization, running, and finalization) of MPAS as a dynamical core within CAM-SIMA as well as potentially other host models.

It is a ground-up implementation that not only adheres to the Fortran 2018 standard, but also incorporates a modern object-oriented design. As such, the implementation details of MPAS are abstracted away from CAM-SIMA, which enables a more stable interface between the two.

Users should begin by creating an "instance" of MPAS dynamical core from the mpas_dynamical_core_type derived type. Then, interaction with the instance is done through its public type-bound procedures. Developers wishing to integrate MPAS dynamical core into other host models could take advantage of the object-oriented design to add new functionalities or modify existing ones simply by extending the mpas_dynamical_core_type derived type.


Uses

  • module~~dyn_mpas_subdriver~~UsesGraph module~dyn_mpas_subdriver 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

Used by

  • module~~dyn_mpas_subdriver~~UsedByGraph module~dyn_mpas_subdriver dyn_mpas_subdriver module~dyn_comp dyn_comp module~dyn_comp->module~dyn_mpas_subdriver proc~define_cam_grid define_cam_grid proc~define_cam_grid->module~dyn_mpas_subdriver proc~define_cam_grid->module~dyn_comp proc~dynamics_to_physics_coupling dynamics_to_physics_coupling proc~dynamics_to_physics_coupling->module~dyn_mpas_subdriver proc~dynamics_to_physics_coupling->module~dyn_comp proc~init_physics_grid init_physics_grid proc~init_physics_grid->module~dyn_mpas_subdriver proc~init_physics_grid->module~dyn_comp proc~init_reference_pressure init_reference_pressure proc~init_reference_pressure->module~dyn_mpas_subdriver proc~init_reference_pressure->module~dyn_comp proc~physics_to_dynamics_coupling physics_to_dynamics_coupling proc~physics_to_dynamics_coupling->module~dyn_mpas_subdriver proc~physics_to_dynamics_coupling->module~dyn_comp none~init_shared_variables~2 init_shared_variables none~init_shared_variables~2->module~dyn_comp none~init_shared_variables~3 init_shared_variables none~init_shared_variables~3->module~dyn_comp none~set_mpas_physics_tendency_rho set_mpas_physics_tendency_rho none~set_mpas_physics_tendency_rho->module~dyn_comp none~set_mpas_physics_tendency_rtheta set_mpas_physics_tendency_rtheta none~set_mpas_physics_tendency_rtheta->module~dyn_comp none~set_mpas_physics_tendency_ru set_mpas_physics_tendency_ru none~set_mpas_physics_tendency_ru->module~dyn_comp none~set_physics_state_column set_physics_state_column none~set_physics_state_column->module~dyn_comp none~set_physics_state_external set_physics_state_external none~set_physics_state_external->module~dyn_comp proc~model_grid_init model_grid_init proc~model_grid_init->module~dyn_comp proc~stepon_final stepon_final proc~stepon_final->module~dyn_comp proc~stepon_init stepon_init proc~stepon_init->module~dyn_comp proc~stepon_run2 stepon_run2 proc~stepon_run2->module~dyn_comp proc~stepon_run3 stepon_run3 proc~stepon_run3->module~dyn_comp proc~stepon_timestep_init stepon_timestep_init proc~stepon_timestep_init->module~dyn_comp

Variables

Type Visibility Attributes Name Initial
type(var_info_type), private, parameter :: input_var_info_list(*) = [var_info_type('Time', 'real', 0), var_info_type('initial_time', 'character', 0), var_info_type('rho', 'real', 2), var_info_type('rho_base', 'real', 2), var_info_type('scalars', 'real', 3), var_info_type('theta', 'real', 2), var_info_type('theta_base', 'real', 2), var_info_type('u', 'real', 2), var_info_type('w', 'real', 2), var_info_type('xtime', 'character', 0)]

This list corresponds to the "input" stream in MPAS registry. It consists of variables that are members of the "diag" and "state" struct. Only variables that are specific to the "input" stream are included.

type(var_info_type), private, parameter :: invariant_var_info_list(*) = [var_info_type('angleEdge', 'real', 1), var_info_type('areaCell', 'real', 1), var_info_type('areaTriangle', 'real', 1), var_info_type('bdyMaskCell', 'integer', 1), var_info_type('bdyMaskEdge', 'integer', 1), var_info_type('bdyMaskVertex', 'integer', 1), var_info_type('cellTangentPlane', 'real', 3), var_info_type('cell_gradient_coef_x', 'real', 2), var_info_type('cell_gradient_coef_y', 'real', 2), var_info_type('cellsOnCell', 'integer', 2), var_info_type('cellsOnEdge', 'integer', 2), var_info_type('cellsOnVertex', 'integer', 2), var_info_type('cf1', 'real', 0), var_info_type('cf2', 'real', 0), var_info_type('cf3', 'real', 0), var_info_type('coeffs_reconstruct', 'real', 3), var_info_type('dcEdge', 'real', 1), var_info_type('defc_a', 'real', 2), var_info_type('defc_b', 'real', 2), var_info_type('deriv_two', 'real', 3), var_info_type('dss', 'real', 2), var_info_type('dvEdge', 'real', 1), var_info_type('dzu', 'real', 1), var_info_type('edgeNormalVectors', 'real', 2), var_info_type('edgesOnCell', 'integer', 2), var_info_type('edgesOnEdge', 'integer', 2), var_info_type('edgesOnVertex', 'integer', 2), var_info_type('fEdge', 'real', 1), var_info_type('fVertex', 'real', 1), var_info_type('fzm', 'real', 1), var_info_type('fzp', 'real', 1), var_info_type('indexToCellID', 'integer', 1), var_info_type('indexToEdgeID', 'integer', 1), var_info_type('indexToVertexID', 'integer', 1), var_info_type('kiteAreasOnVertex', 'real', 2), var_info_type('latCell', 'real', 1), var_info_type('latEdge', 'real', 1), var_info_type('latVertex', 'real', 1), var_info_type('localVerticalUnitVectors', 'real', 2), var_info_type('lonCell', 'real', 1), var_info_type('lonEdge', 'real', 1), var_info_type('lonVertex', 'real', 1), var_info_type('meshDensity', 'real', 1), var_info_type('nEdgesOnCell', 'integer', 1), var_info_type('nEdgesOnEdge', 'integer', 1), var_info_type('nominalMinDc', 'real', 0), var_info_type('qv_init', 'real', 1), var_info_type('rdzu', 'real', 1), var_info_type('rdzw', 'real', 1), var_info_type('t_init', 'real', 2), var_info_type('u_init', 'real', 1), var_info_type('v_init', 'real', 1), var_info_type('verticesOnCell', 'integer', 2), var_info_type('verticesOnEdge', 'integer', 2), var_info_type('weightsOnEdge', 'real', 2), var_info_type('xCell', 'real', 1), var_info_type('xEdge', 'real', 1), var_info_type('xVertex', 'real', 1), var_info_type('yCell', 'real', 1), var_info_type('yEdge', 'real', 1), var_info_type('yVertex', 'real', 1), var_info_type('zCell', 'real', 1), var_info_type('zEdge', 'real', 1), var_info_type('zVertex', 'real', 1), var_info_type('zb', 'real', 3), var_info_type('zb3', 'real', 3), var_info_type('zgrid', 'real', 2), var_info_type('zxu', 'real', 2), var_info_type('zz', 'real', 2)]

This list corresponds to the "invariant" stream in MPAS registry. It consists of variables that are members of the "mesh" struct.

integer, private, parameter :: log_level_debug = 3

Log elaborate information about the inner workings of MPAS dynamical core, which may be useful for diagnosing issues. However, the log volume may be very large.

integer, private, parameter :: log_level_info = 1

Log plain and user-friendly information about the status of MPAS dynamical core. Public procedures should start with this log level.

integer, private, parameter :: log_level_quiet = 0

Log nothing.

integer, private, parameter :: log_level_verbose = 2

Same as the above, but for private procedures.

integer, public, parameter :: mpas_dynamical_core_real_kind = rkind

The native floating-point precision of MPAS dynamical core.

type(var_info_type), private, parameter :: output_var_info_list(*) = [var_info_type('divergence', 'real', 2), var_info_type('pressure', 'real', 2), var_info_type('relhum', 'real', 2), var_info_type('surface_pressure', 'real', 1), var_info_type('uReconstructMeridional', 'real', 2), var_info_type('uReconstructZonal', 'real', 2), var_info_type('vorticity', 'real', 2)]

This list corresponds to the "output" stream in MPAS registry. It consists of variables that are members of the "diag" struct. Only variables that are specific to the "output" stream are included.

type(var_info_type), private, parameter :: restart_var_info_list(*) = [var_info_type('exner', 'real', 2), var_info_type('exner_base', 'real', 2), var_info_type('pressure_base', 'real', 2), var_info_type('pressure_p', 'real', 2), var_info_type('rho_p', 'real', 2), var_info_type('rho_zz', 'real', 2), var_info_type('rtheta_base', 'real', 2), var_info_type('rtheta_p', 'real', 2), var_info_type('ru', 'real', 2), var_info_type('ru_p', 'real', 2), var_info_type('rw', 'real', 2), var_info_type('rw_p', 'real', 2), var_info_type('theta_m', 'real', 2)]

This list corresponds to the "restart" stream in MPAS registry. It consists of variables that are members of the "diag" and "state" struct. Only variables that are specific to the "restart" stream are included.


Abstract Interfaces

abstract interface

  • private subroutine model_error_if(message, file, line)

    This procedure interface is modeled after the endrun subroutine from CAM-SIMA. It will be called whenever MPAS dynamical core encounters a fatal error and cannot continue.

    Arguments

    Type IntentOptional Attributes Name
    character(len=*), intent(in) :: message
    character(len=*), intent(in), optional :: file
    integer, intent(in), optional :: line

Derived Types

type, public :: mpas_dynamical_core_type

The "class" of MPAS dynamical core. Important data structures like the internal states of MPAS dynamical core are encapsulated inside this derived type to prevent misuse. Type-bound procedures provide stable and well-defined APIs for CAM-SIMA to interact with MPAS dynamical core.

Components

Type Visibility Attributes Name Initial
character(len=strkind), private, allocatable :: constituent_name(:)
type(core_type), private, pointer :: corelist => null()
integer, private :: coupling_time_interval = 0
type(domain_type), private, pointer :: domain_ptr => null()
integer, private, allocatable :: index_constituent_to_mpas_scalar(:)
integer, private, allocatable :: index_mpas_scalar_to_constituent(:)
logical, private, allocatable :: is_water_species(:)
integer, private :: log_level = log_level_quiet
integer, private :: log_unit = output_unit
procedure(model_error_if), private, nopass, pointer :: model_error => null()
integer, private :: mpi_comm = mpi_comm_null
integer, private :: mpi_rank = 0
logical, private :: mpi_rank_root = .false.
integer, private :: number_of_constituents = 0
integer, private :: number_of_time_steps = 0

Type-Bound Procedures

procedure, private, pass :: check_variable_status => dyn_mpas_check_variable_status
procedure, public, pass :: compute_edge_wind => dyn_mpas_compute_edge_wind
procedure, public, pass :: compute_unit_vector => dyn_mpas_compute_unit_vector
procedure, public, pass :: debug_print => dyn_mpas_debug_print
procedure, public, pass :: define_scalar => dyn_mpas_define_scalar
procedure, public, pass :: exchange_halo => dyn_mpas_exchange_halo
procedure, public, pass :: final => dyn_mpas_final
procedure, public, pass :: get_constituent_index => dyn_mpas_get_constituent_index
procedure, public, pass :: get_constituent_name => dyn_mpas_get_constituent_name
procedure, public, pass :: get_global_mesh_dimension => dyn_mpas_get_global_mesh_dimension
procedure, public, pass :: get_local_mesh_dimension => dyn_mpas_get_local_mesh_dimension
procedure, private, pass :: get_pool_pointer => dyn_mpas_get_pool_pointer
generic, public :: get_variable_pointer => get_variable_pointer_c0, get_variable_pointer_c1, get_variable_pointer_i0, get_variable_pointer_i1, get_variable_pointer_i2, get_variable_pointer_i3, get_variable_pointer_l0, get_variable_pointer_r0, get_variable_pointer_r1, get_variable_pointer_r2, get_variable_pointer_r3, get_variable_pointer_r4, get_variable_pointer_r5
procedure, private, pass :: get_variable_pointer_c0 => dyn_mpas_get_variable_pointer_c0
procedure, private, pass :: get_variable_pointer_c1 => dyn_mpas_get_variable_pointer_c1
procedure, private, pass :: get_variable_pointer_i0 => dyn_mpas_get_variable_pointer_i0
procedure, private, pass :: get_variable_pointer_i1 => dyn_mpas_get_variable_pointer_i1
procedure, private, pass :: get_variable_pointer_i2 => dyn_mpas_get_variable_pointer_i2
procedure, private, pass :: get_variable_pointer_i3 => dyn_mpas_get_variable_pointer_i3
procedure, private, pass :: get_variable_pointer_l0 => dyn_mpas_get_variable_pointer_l0
procedure, private, pass :: get_variable_pointer_r0 => dyn_mpas_get_variable_pointer_r0
procedure, private, pass :: get_variable_pointer_r1 => dyn_mpas_get_variable_pointer_r1
procedure, private, pass :: get_variable_pointer_r2 => dyn_mpas_get_variable_pointer_r2
procedure, private, pass :: get_variable_pointer_r3 => dyn_mpas_get_variable_pointer_r3
procedure, private, pass :: get_variable_pointer_r4 => dyn_mpas_get_variable_pointer_r4
procedure, private, pass :: get_variable_pointer_r5 => dyn_mpas_get_variable_pointer_r5
generic, public :: get_variable_value => get_variable_value_c0, get_variable_value_c1, get_variable_value_i0, get_variable_value_i1, get_variable_value_i2, get_variable_value_i3, get_variable_value_l0, get_variable_value_r0, get_variable_value_r1, get_variable_value_r2, get_variable_value_r3, get_variable_value_r4, get_variable_value_r5
procedure, private, pass :: get_variable_value_c0 => dyn_mpas_get_variable_value_c0
procedure, private, pass :: get_variable_value_c1 => dyn_mpas_get_variable_value_c1
procedure, private, pass :: get_variable_value_i0 => dyn_mpas_get_variable_value_i0
procedure, private, pass :: get_variable_value_i1 => dyn_mpas_get_variable_value_i1
procedure, private, pass :: get_variable_value_i2 => dyn_mpas_get_variable_value_i2
procedure, private, pass :: get_variable_value_i3 => dyn_mpas_get_variable_value_i3
procedure, private, pass :: get_variable_value_l0 => dyn_mpas_get_variable_value_l0
procedure, private, pass :: get_variable_value_r0 => dyn_mpas_get_variable_value_r0
procedure, private, pass :: get_variable_value_r1 => dyn_mpas_get_variable_value_r1
procedure, private, pass :: get_variable_value_r2 => dyn_mpas_get_variable_value_r2
procedure, private, pass :: get_variable_value_r3 => dyn_mpas_get_variable_value_r3
procedure, private, pass :: get_variable_value_r4 => dyn_mpas_get_variable_value_r4
procedure, private, pass :: get_variable_value_r5 => dyn_mpas_get_variable_value_r5
procedure, public, pass :: init_phase1 => dyn_mpas_init_phase1
procedure, public, pass :: init_phase2 => dyn_mpas_init_phase2
procedure, public, pass :: init_phase3 => dyn_mpas_init_phase3
procedure, public, pass :: init_phase4 => dyn_mpas_init_phase4
procedure, private, pass :: init_stream_with_pool => dyn_mpas_init_stream_with_pool
procedure, public, pass :: map_constituent_index => dyn_mpas_map_constituent_index
procedure, public, pass :: map_mpas_scalar_index => dyn_mpas_map_mpas_scalar_index
procedure, public, pass :: read_namelist => dyn_mpas_read_namelist
procedure, public, pass :: read_write_stream => dyn_mpas_read_write_stream
procedure, public, pass :: run => dyn_mpas_run

type, private :: var_info_type

This derived type conveys information similar to the var and var_array elements in MPAS registry. For example, in MPAS registry, the "xCell" variable is described as:

Read more…

Components

Type Visibility Attributes Name Initial
character(len=64), private :: name = ''
integer, private :: rank = 0
character(len=10), private :: type = ''

Functions

private pure function dyn_mpas_get_constituent_index(self, constituent_name) result(constituent_index)

Author
Kuan-Chih Wang
Date
2024-05-16

Query constituent index by its name.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=*), intent(in) :: constituent_name

Return Value integer

private pure function dyn_mpas_get_constituent_name(self, constituent_index) result(constituent_name)

Author
Kuan-Chih Wang
Date
2024-05-16

Query constituent name by its index.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(in) :: constituent_index

Return Value character(len=:), allocatable

private pure function dyn_mpas_map_constituent_index(self, mpas_scalar_index) result(constituent_index)

Author
Kuan-Chih Wang
Date
2024-05-16

Map constituent index from MPAS scalar index.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(in) :: mpas_scalar_index

Return Value integer

private pure function dyn_mpas_map_mpas_scalar_index(self, constituent_index) result(mpas_scalar_index)

Author
Kuan-Chih Wang
Date
2024-05-16

Map MPAS scalar index from constituent index.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(in) :: constituent_index

Return Value integer

private pure function index_unique(array)

Return the index of unique elements in array, which can be any intrinsic data types, as an integer array. If array contains zero element or is of unsupported data types, an empty integer array is produced. For example, index_unique([1, 2, 3, 1, 2, 3, 4, 5]) returns [1, 2, 3, 7, 8]. (KCW, 2024-03-22)

Arguments

Type IntentOptional Attributes Name
class(*), intent(in) :: array(:)

Return Value integer, allocatable, (:)

private pure function parse_stream_name(stream_name) result(var_info_list)

Parse a stream name, which consists of one or more stream name fragments, and return the corresponding variable information as a list of var_info_type. Multiple stream name fragments should be separated by "+" (i.e., a plus, meaning "addition" operation) or "-" (i.e., a minus, meaning "subtraction" operation). A stream name fragment can be a predefined stream name (e.g., "invariant", "input", etc.) or a single variable name. For example, a stream name of "invariant+input+restart" means the union of variables in the "invariant", "input", and "restart" streams. Duplicate variable information in the resulting list is discarded. (KCW, 2024-06-01)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: stream_name

Return Value type(var_info_type), allocatable, (:)

private pure function parse_stream_name_fragment(stream_name_fragment) result(var_info_list)

Parse a stream name fragment and return the corresponding variable information as a list of var_info_type. A stream name fragment can be a predefined stream name (e.g., "invariant", "input", etc.) or a single variable name. (KCW, 2024-06-01)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: stream_name_fragment

Return Value type(var_info_type), allocatable, (:)

private pure function stringify(value, separator)

Convert one or more values of any intrinsic data types to a character string for pretty printing. If value contains more than one element, the elements will be stringified, delimited by separator, then concatenated. If value contains exactly one element, the element will be stringified without using separator. If value contains zero element or is of unsupported data types, an empty character string is produced. If separator is not supplied, it defaults to ", " (i.e., a comma and a space). (KCW, 2024-02-04)

Arguments

Type IntentOptional Attributes Name
class(*), intent(in) :: value(:)
character(len=*), intent(in), optional :: separator

Return Value character(len=:), allocatable


Subroutines

private subroutine dyn_mpas_check_variable_status(self, var_is_present, var_is_tkr_compatible, pio_file, var_info)

Author
Kuan-Chih Wang
Date
2024-06-04

Check and return variable status on the given file.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
logical, intent(out), allocatable :: var_is_present(:)
logical, intent(out), allocatable :: var_is_tkr_compatible(:)
type(file_desc_t), intent(in), pointer :: pio_file
type(var_info_type), intent(in) :: var_info

private subroutine dyn_mpas_compute_edge_wind(self, wind_tendency)

Author
Michael Duda
Date
16 January 2020

Compute the edge-normal wind (tendency) vectors at edge points.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
logical, intent(in) :: wind_tendency

private subroutine dyn_mpas_compute_unit_vector(self)

Author
Michael Duda
Date
15 January 2020

Compute local east, north, and edge-normal unit vectors.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self

private subroutine dyn_mpas_debug_print(self, level, message, printer)

Author
Kuan-Chih Wang
Date
2024-02-03

Print a debug message at a debug level.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(in) :: level
character(len=*), intent(in) :: message
integer, intent(in), optional :: printer

private subroutine dyn_mpas_define_scalar(self, constituent_name, is_water_species)

Author
Michael Duda
Date
21 May 2020

Define the names of constituents at run-time.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(inout) :: self
character(len=*), intent(in) :: constituent_name(:)
logical, intent(in) :: is_water_species(:)

private subroutine dyn_mpas_exchange_halo(self, field_name)

Author
Michael Duda
Date
16 January 2020

Update the halo layers of the named field.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=*), intent(in) :: field_name

private subroutine dyn_mpas_final(self)

Author
Michael Duda
Date
29 February 2020

Finalize MPAS dynamical core as well as its framework.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(inout) :: self

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

Author
Michael Duda
Date
22 August 2019

Return global mesh dimensions.

Read more…

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

private subroutine dyn_mpas_get_local_mesh_dimension(self, ncells, ncells_solve, nedges, nedges_solve, nvertices, nvertices_solve, nvertlevels)

Author
Kuan-Chih Wang
Date
2024-05-09

Return local mesh dimensions.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out) :: ncells
integer, intent(out) :: ncells_solve
integer, intent(out) :: nedges
integer, intent(out) :: nedges_solve
integer, intent(out) :: nvertices
integer, intent(out) :: nvertices_solve
integer, intent(out) :: nvertlevels

private subroutine dyn_mpas_get_pool_pointer(self, pool_pointer, pool_name)

Author
Kuan-Chih Wang
Date
2024-03-21

Return a pointer of mpas_pool_type to the named pool.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
type(mpas_pool_type), intent(out), pointer :: pool_pointer
character(len=*), intent(in) :: pool_name

private subroutine dyn_mpas_get_variable_pointer_c0(self, variable_pointer, pool_name, variable_name, time_level)

Author
Kuan-Chih Wang
Date
2024-03-21

A family of accessor subroutines for MPAS dynamical core instance.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=strkind), intent(out), pointer :: variable_pointer
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_c1(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=strkind), intent(out), pointer :: variable_pointer(:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_i0(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), pointer :: variable_pointer
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_i1(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), pointer :: variable_pointer(:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_i2(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), pointer :: variable_pointer(:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_i3(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), pointer :: variable_pointer(:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_l0(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
logical, intent(out), pointer :: variable_pointer
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_r0(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), pointer :: variable_pointer
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_r1(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), pointer :: variable_pointer(:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_r2(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), pointer :: variable_pointer(:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_r3(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), pointer :: variable_pointer(:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_r4(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), pointer :: variable_pointer(:,:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_pointer_r5(self, variable_pointer, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), pointer :: variable_pointer(:,:,:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_c0(self, variable_value, pool_name, variable_name, time_level)

Author
Kuan-Chih Wang
Date
2024-03-21

A family of accessor subroutines for MPAS dynamical core instance.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=strkind), intent(out), allocatable :: variable_value
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_c1(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=strkind), intent(out), allocatable :: variable_value(:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_i0(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), allocatable :: variable_value
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_i1(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), allocatable :: variable_value(:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_i2(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), allocatable :: variable_value(:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_i3(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
integer, intent(out), allocatable :: variable_value(:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_l0(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
logical, intent(out), allocatable :: variable_value
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_r0(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: variable_value
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_r1(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: variable_value(:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_r2(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: variable_value(:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_r3(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: variable_value(:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_r4(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: variable_value(:,:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_get_variable_value_r5(self, variable_value, pool_name, variable_name, time_level)

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
real(kind=rkind), intent(out), allocatable :: variable_value(:,:,:,:,:)
character(len=*), intent(in) :: pool_name
character(len=*), intent(in) :: variable_name
integer, intent(in), optional :: time_level

private subroutine dyn_mpas_init_phase1(self, mpi_comm, model_error_impl, log_level, log_unit, mpas_log_unit)

Author
Michael Duda
Date
19 April 2019

Track mpas_init up to the point of reading namelist.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(inout) :: self
integer, intent(in) :: mpi_comm
procedure(model_error_if) :: model_error_impl
integer, intent(in) :: log_level
integer, intent(in) :: log_unit
integer, intent(in) :: mpas_log_unit(2)

private subroutine dyn_mpas_init_phase2(self, pio_iosystem)

Author
Michael Duda
Date
19 April 2019

Track mpas_init after namelist has been read.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
type(iosystem_desc_t), intent(in), pointer :: pio_iosystem

private subroutine dyn_mpas_init_phase3(self, number_of_constituents, pio_file)

Author
Michael Duda
Date
19 April 2019

Track mpas_init up to the point of calling atm_core_init.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(inout) :: self
integer, intent(in) :: number_of_constituents
type(file_desc_t), intent(in), pointer :: pio_file

private subroutine dyn_mpas_init_phase4(self, coupling_time_interval)

Author
Michael Duda
Date
29 February 2020

Track atm_core_init to finish MPAS dynamical core initialization.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(inout) :: self
integer, intent(in) :: coupling_time_interval

private subroutine dyn_mpas_init_stream_with_pool(self, mpas_pool, mpas_stream, pio_file, stream_mode, stream_name)

Author
Kuan-Chih Wang
Date
2024-03-14

Initialize an MPAS stream with an accompanying MPAS pool.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
type(mpas_pool_type), intent(out), pointer :: mpas_pool
type(mpas_stream_type), intent(out), pointer :: mpas_stream
type(file_desc_t), intent(in), pointer :: pio_file
character(len=*), intent(in) :: stream_mode
character(len=*), intent(in) :: stream_name

private subroutine dyn_mpas_read_namelist(self, namelist_path, cf_calendar, start_date_time, stop_date_time, run_duration, initial_run)

Author
Kuan-Chih Wang
Date
2024-02-09

Track mpas_init where namelist is being read.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
character(len=*), intent(in) :: namelist_path
character(len=*), intent(in) :: cf_calendar
integer, intent(in) :: start_date_time(6)
integer, intent(in) :: stop_date_time(6)
integer, intent(in) :: run_duration(4)
logical, intent(in) :: initial_run

private subroutine dyn_mpas_read_write_stream(self, pio_file, stream_mode, stream_name)

Author
Kuan-Chih Wang
Date
2024-03-15

Read or write an MPAS stream.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(in) :: self
type(file_desc_t), intent(in), pointer :: pio_file
character(len=*), intent(in) :: stream_mode
character(len=*), intent(in) :: stream_name

private subroutine dyn_mpas_run(self)

Author
Michael Duda
Date
29 February 2020

Integrate the dynamical states with time.

Read more…

Arguments

Type IntentOptional Attributes Name
class(mpas_dynamical_core_type), intent(inout) :: self