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.
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. |
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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | message | |||
character(len=*), | intent(in), | optional | :: | file | ||
integer, | intent(in), | optional | :: | line |
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.
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 |
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:
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=64), | private | :: | name | = | '' | ||
integer, | private | :: | rank | = | 0 | ||
character(len=10), | private | :: | type | = | '' |
Query constituent index by its name.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
character(len=*), | intent(in) | :: | constituent_name |
Query constituent name by its index.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
integer, | intent(in) | :: | constituent_index |
Map constituent index from MPAS scalar index.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
integer, | intent(in) | :: | mpas_scalar_index |
Map MPAS scalar index from constituent index.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
integer, | intent(in) | :: | constituent_index |
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)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(*), | intent(in) | :: | array(:) |
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)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | stream_name |
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)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | stream_name_fragment |
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)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(*), | intent(in) | :: | value(:) | |||
character(len=*), | intent(in), | optional | :: | separator |
Check and return variable status on the given file.
Type | Intent | Optional | 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 |
Compute the edge-normal wind (tendency) vectors at edge points.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
logical, | intent(in) | :: | wind_tendency |
Compute local east, north, and edge-normal unit vectors.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self |
Print a debug message at a debug level.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
integer, | intent(in) | :: | level | |||
character(len=*), | intent(in) | :: | message | |||
integer, | intent(in), | optional | :: | printer |
Define the names of constituents at run-time.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(inout) | :: | self | |||
character(len=*), | intent(in) | :: | constituent_name(:) | |||
logical, | intent(in) | :: | is_water_species(:) |
Update the halo layers of the named field.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
character(len=*), | intent(in) | :: | field_name |
Finalize MPAS dynamical core as well as its framework.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(inout) | :: | self |
Return global mesh dimensions.
Type | Intent | Optional | 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 |
Return local mesh dimensions.
Type | Intent | Optional | 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 |
Return a pointer of mpas_pool_type
to the named pool.
Type | Intent | Optional | 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 |
A family of accessor subroutines for MPAS dynamical core instance.
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
A family of accessor subroutines for MPAS dynamical core instance.
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Type | Intent | Optional | 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 |
Track mpas_init
up to the point of reading namelist.
Type | Intent | Optional | 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) |
Track mpas_init
after namelist has been read.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(in) | :: | self | |||
type(iosystem_desc_t), | intent(in), | pointer | :: | pio_iosystem |
Track mpas_init
up to the point of calling atm_core_init
.
Type | Intent | Optional | 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 |
Track atm_core_init
to finish MPAS dynamical core initialization.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(inout) | :: | self | |||
integer, | intent(in) | :: | coupling_time_interval |
Initialize an MPAS stream with an accompanying MPAS pool.
Type | Intent | Optional | 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 |
Track mpas_init
where namelist is being read.
Type | Intent | Optional | 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 |
Read or write an MPAS stream.
Type | Intent | Optional | 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 |
Integrate the dynamical states with time.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpas_dynamical_core_type), | intent(inout) | :: | self |