MODULE MODATTS3
Fortran-90
MODULE MODATTS3
New for I/O API-3.2!!
Developed from (and extends) I/O API-3.1
MODULE MATXATTS
Summary
Fortran-90 style
MODULE MODATTS3
uses the I/O API
"extra-attributes" interface to provide CF-compliant
CF-convention
geospatial
metadata, and CMAQ-standard, and SMOKE-standard metadata for newly-created
I/O API files and input-grid and output-grid metadata for
I/O API matrix-files, in terms of
Models-3 I/O API map projection and grid description
conventions.
Note that adding metadata to a file to which data have already been
written may entail substantial overhead (both of time and
disk-space): the "system" will have to make a new copy of
the file with both the new metadata and the existing data, and then
rename it behind the scenes.
The following
m3tools
programs examine their input files
to see whether CMAQ metadata is present; if so they examine
environment variable
COPY_META
(default
TRUE
) to determine whether or not to copy that metadata
to their output file(s):
m3combo
m3cple
m3interp
m3tproc
m3tshift
m3wndw
m3xtract
USAGE of
MODULE MODATTS3
Matrix Attributes
for geospatial-transform
matrices
Geospatial-transform metadata gives the grid description
for both the input and the output map projection and grid
for a matrix:
GDTYP, P_ALP, P_BET, P_GAM, XCENT, YCENT,
XORIG, YORIG, XCELL, YCELL, NCOLS, NROWS,
This module contains generic routines for setting,
retrieving, and checking input-grid, output-grid, or both
input- and output-grid metadata for files used to store
geospatial transform matrices:
INITMTXATT()
stores input and/or output grid description to
internal state variables.
SETMTXATT()
stores input and/or output grid description to
an M3IO file-header.
GETMTXATT()
retrieves input and/or output grid description
(as stored by
SETMTXATT()
) from
an M3IO file-header.
CHKMTXATT()
compares input and/or output grid description
(as stored by
SETMTXATT()
) from
an M3IO file-header with grid description(s)
supplied as arguments.
CF-Convention Metadata
See
CF metadata is used by the global climate community
as well as by a number of third-party applications.
Turned on by
setenv IOAPI_CFMETA YES
[default
NO
]. If turned on, all
newly-created files will be given this metadata in their
file headers and in CF specified auxilliary variables.
(These last should not have been necessary if the CF
authors had actually known what they were doing with
netCDF; it is the reason for the restrictions on
SETCF()
below.).
Also,
LOGICAL FUNCTION SETCF(FNAME)
creates CF
metadata in the file with logical name
FNAME
provided it is opened for output.
This routine needs to be called before any data is
written to the file.
"Standard" CMAQ Metadata
Turned on/off by
setenv IOAPI_CMAQMETA...
with the following values:
NONE
: turned off [default]
ENV
: get metadata from
environment variables. These include both
the standard CMAQ environment variables, as
well as the following new environment variables
(whose values are described below):
PROJECT, CASE, EPISODE, SPONSOR, CMAQVERS, MCIPVERS,
EMISVERS, METVERS, CMAQCFG, MCIPCFG, EMISCFG, ICBCCFG,
METCFG
Note that the values of these in
setenv
statements need to be quoted, in order to preserve
blanks and other white-space.
path-name
: get metadata from
the indicated structured ASCII file. This file should consist
of lines of the form
=
for the following set of names (also described
below):
PROJECT, CASE, EPISODE, SPONSOR, CMAQVERS, MCIPVERS,
EMISVERS, METVERS, CMAQCFG, MCIPCFG, EMISCFG, ICBCCFG,
METCFG,SYNC_TOP, MAXSYNC, MINSYNC, WB_DUST, ERODE_AGLAND,
WBDUST_BELD, LTNG_NO, KZMIN, ILDEPV, MOSAIC, ABFLUX,
HGBIDI, SFC_HONO, BIOGEMIS, PT3DEMIS, CLD_DIAG, AERDIAG,
PHOTDIAG, SSEMDIAG, DUSTEM_DIAG, LTNGDIAG, B3GTS_DIAG,
PT3DDIAG, PT3DFRAC
This module contains definitions for CMAQ metadata-objects,
and generic routines for setting,
retrieving, and logging such metadata:
INITCMAQ()
stores metadata into internal state variables,
and turns on CMAQ-metadata output for newly
created files. Can be called automatically
(as above) or manually, optionally with
user specified metadata-object.
ISCMAQ()
Checks whether an M3IO file header contains
CMAQ metadata.
GETCMAQ()
Retrieves CMAQ metadata from an M3IO
file-header, and optionally places it
in a user supplied CMAQ-metadata object.
SETCMAQ()
Stores CMAQ metadata to an M3IO file-header,
optionally from a user supplied CMAQ-metadata object.
LOGCMAQ()
Writes structured ASCII
IOAPI_CFMETA
-format
metadata to either program-log or to a user
specified output file, optionally from a user
supplied CMAQ-metadata object.
"Unstructured text-file" Metadata
Turned on/off by either a call to
INITMTEXT()
with the relevant text-data content, or by
setenv IOAPI_TEXTMETA...
with the following values:
NONE
: turned off [default]
path-name
: get metadata from
the indicated structured ASCII file. This file should consist
of lines of length at most
MXDLEN3=80
characters.
If active, the resulting text metadata can be found in the
following
MODULE
-variables in
MODULE MODATTS3
LOGICAL, PUBLIC, PROTECTED, SAVE :: TEXTMETA !! text-file metadata active?
INTEGER, PUBLIC, PROTECTED, SAVE :: TEXT_MLINES !! number of lines in TEXT_MDATA( :,: )
CHARACTER*80, ALLOCATABLE, PUBLIC, PROTECTED, SAVE :: TEXT_MDATA( : ) !! (TEXT_MLINES)
For newly created files, the data will be stored in
global attribute
TEXT_MDATA
; if you wish
to look at this metadata for an "old" file
from within a program, use routine
INQATT3()
to find the size of
the metadata,
ALLOCATE
a buffer for it, and
then read it with
RDATTC()
and process it as desired. (You could use
WRATTC()
to fake the
operation of all this, if you wish :-) )
This module contains definitions for routines for
initializing and setting such metadata:
INITMTEXT()
reads metadata from the file into internal
state variable
TEXT_MDATA
Can be called automatically
(as above) or manually.
SETMTEXT()
Stores text metadata from state variable
TEXT_MDATA
to an M3IO file-header.
ENDMTEXT()
Turns text metadata off and deallocates
TEXT_MDATA
NOTE
that the netCDF get-text-attribute routines
do not check string-sizes nor pad with
blanks
the way the Fortran standard suggests
they should.
NOTE ALSO
that the standard UNIX/Linux utility
fold
can be used to create 80-column text files
from text-files with longer line-lengths.
"Standard" SMOKE Metadata
Not yet implemented.
Definitions and Declarations in
MODULE MODATTS3
LOGICAL, PUBLIC, PROTECTED :: MATXMETA
TRUE
if and only if matrix-metadata is
turned on, and available in the module
LOGICAL, PUBLIC, PROTECTED :: CFMETA
TRUE
if and only if CF-metadata is
turned on, and available in the module
LOGICAL, PUBLIC, PROTECTED :: CMAQMETA
TRUE
if and only if CMAQ-metadata is
turned on, and available in the module
LOGICAL, PUBLIC, PROTECTED :: TEXTMETA
TRUE
if and only if ASCII text-file metadata
is turned on, and available in the module.
LOGICAL, PUBLIC, PROTECTED :: SMOKEMETA
TRUE
if and only if SMOKE-metadata is
turned on, and available in the module
SMOKE-metadata is not yet implemented, and
may never be ;-(
TYPE CMETA_T
Derived data type for standard CMAQ metadata objects.
See
this section of the CMAQ Wiki
for more information
The fields are the following:
INTEGER :: VERSION3
Version-number for the CMAQ-metadata data dictionary
CHARACTER*32 :: PROJECT
Current modeling-project name
CHARACTER*32 :: CASE
Current modeling-case name
CHARACTER*32 :: EPISODE
Current modeling-episode name
CHARACTER*32 :: SPONSOR
Current modeling-project sponsor's name
CHARACTER*32 :: CMAQVERS
CMAQ model version
CHARACTER*32 :: MCIPVERS
MCIP model version
CHARACTER*32 :: EMISVERS
Current emissions model name and version
CHARACTER*256 :: METVERS
Current meteorology-model name and version
CHARACTER*256 :: CMAQCFG
CMAQ configuration (as text)
CHARACTER*256 :: MCIPCFG
MCIP configuration (as text)
CHARACTER*256 :: EMISCFG
Emissions-model configuration (as text)
CHARACTER*256 :: ICBCCFG
IC/BC configuration (as text)
CHARACTER*256 :: METCFG
Meteorology-model configuration (as text)
CHARACTER*512 :: LTNGNO
"inline" or path for lightning file
LTNG_NO
, or ...
CHARACTER*512 :: OCEAN
Path for file
OCEAN_1
CHARACTER*512 :: EMIS
Path for file
EMIS_1
CHARACTER*512 :: GCBDY
Path for file
BNDY_GASC_1
CHARACTER*512 :: AEBDY
Path for file
BNDY_AERO_1
CHARACTER*512 :: NRBDY
Path for file
BNDY_NONR_1
CHARACTER*512 ::TRBDY
Path for file
BNDY_TRAC_1
CHARACTER*512 ::GCINIT
Path for file
INIT_GASC_1
CHARACTER*512 :: AEINIT
Path for file
INIT_AERO_1
CHARACTER*512 ::NRINIT
Path for file
INIT_NONR_1
CHARACTER*512 :: TRINIT
Path for file
INIT_TRAC_1
CHARACTER*512 ::GCNML
Path for file
gc_matrix_nml
CHARACTER*512 :: AENML
Path for file
ae_matrix_nml
CHARACTER*512 :: NRNML
Path for file
nr_matrix_nml
CHARACTER*512 :: TRNML
Path for file
tr_matrix_nml
CHARACTER*512 :: GRDCRO2
Path for file
GRID_CRO_2D
CHARACTER*512 :: GRDDOT2
Path for file
GRID_DOT_2D
CHARACTER*512 :: METCRO2
Path for file
MET_CRO_2D
CHARACTER*512 :: METCRO3
Path for file
MET_CRO_3D
CHARACTER*512 :: METDOT3
Path for file
MET_DOT_3D
CHARACTER*512 :: METBDY3
Path for file
MET_BDY_3D
CHARACTER*512 :: XJDATA
Path for file
XJ_DATA
CHARACTER*512 :: GSPRO
Path for file
GSPRO
CHARACTER*512 :: B3GRD
Path for file
B3GRD
CHARACTER*512 :: SOILINP
Path for file
SOILINP
CHARACTER*512 :: CSQYDATA
Path for file
CSQY_DATA
REAL :: SYNC_TOP
Value of CMAQ environment variable
SIGMA_SYNC_TOP
top sigma level thru which sync step determined
INTEGER :: MAXSYNC
Value of CMAQ environment variable
CTM_MAXSYNC
max sync time step (sec)
INTEGER :: MINSYNC
Value of CMAQ environment variable
CTM_MINSYNC
min sync time step (sec)
INTEGER :: EMISDATE
Value of CMAQ environment variable
EMISDATE
(non-standard-format) Gregorian date for emissions inputs (YYYYMMDD)
INTEGER :: EMISDATE
Value of CMAQ environment variable
EMISDATE
Date for layer-fraction inputs (YYYYDDD)
CHARACTER*8 :: WBDUST_BELD
Value of CMAQ environment variable
CTM_WBDUST_BELD
Flag " landuse database for identifying dust source regions [ default: BELD3 ]"
For the following, environment values should be
"T" or "F", Internally, these
values are stored accordng to C conventions:
represents
LOGICAL TRUE
represents
LOGICAL FALSE
IMISS3=-9999
represents "Missing"
INTEGER :: CTM_CKSUM
Value of CMAQ environment variable
CTM_CKSUM
Flag " Do CKSUM() every time step?"
INTEGER :: WB_DUST
Value of CMAQ environment variable
CTM_WB_DUST
Flag " use in-line wind-borne dust computation?"
INTEGER :: ERODE_AGLAND
Value of CMAQ environment variable
CTM_ERODE_AGLAND
Flag " use in-line wind-borne dust computation?"
INTEGER :: LTNGPARAM
Value of CMAQ environment variable
CTM_LTNGPARAM
Flag " in-line lightning NOx computation?"
INTEGER :: CTM_WVEL
Value of CMAQ environment variable
CTM_WVEL
Flag " output the CCTM-calculated vertical velocities?"
INTEGER :: KZMIN
Value of CMAQ environment variable
KZMIN
Flag " use Min Kz option in edyintb?"
INTEGER :: ILDEPV
Value of CMAQ environment variable
CTM_ILDEPV
Flag " Is in-line deposition-velocity calculation active?"
INTEGER :: MOSAIC
Value of CMAQ environment variable
CTM_MOSAIC
Flag " use landuse specific deposition velocities?"
INTEGER :: ABFLUX
Value of CMAQ environment variable
CTM_ABFLUX
Flag " Use Ammonia bi-directional flux for in-line deposition velocities?"
INTEGER :: HGBIDI
Value of CMAQ environment variable
CTM_HGBIDI
Flag " use Mercury bi-directional flux for in-line deposition velocities?"
INTEGER :: SFC_HONO
Value of CMAQ environment variable
CTM_SFC_HONO
Flag " Use Surface HONO interaction in deposition velocities?"
INTEGER :: BIOGEMIS
Value of CMAQ environment variable
CTM_BIOGEMIS
Flag " Are in-line biogenic emissions active?"
INTEGER :: PT3DEMIS
Value of CMAQ environment variable
CTM_PT3DEMIS
Flag " Is in-line plume rise active?"
INTEGER :: CLD_DIAG
Value of CMAQ environment variable
CLD_DIAG
Flag " write cloud diagnostic file?"
INTEGER :: AERDIAG
Value of CMAQ environment variable
CTM_AERDIAG
Flag " write aerosol diagnostic file?"
INTEGER :: PHOTDIAG
Value of CMAQ environment variable
CTM_PHOTDIAG
Flag " write photolysis diagnostic file?"
INTEGER :: SSEMDIAG
Value of CMAQ environment variable
CTM_SSEMDIAG
Flag " write sea-salt emissions diagnostic file?"
INTEGER :: DUSTEM_DIAG
Value of CMAQ environment variable
CTM_DUSTEM_DIAG
Flag " write windblown dust emissions diagnostic file?"
INTEGER :: LTNGDIAG
Value of CMAQ environment variable
LTNGDIAG
Flag " write lightning diagnostic file?"
INTEGER :: B3GTS_DIAG
Value of CMAQ environment variable
B3GTS_DIAG
Flag " write beis mass emissions diagnostic file?"
INTEGER :: PT3DDIAG
Value of CMAQ environment variable
PT3DDIAG
Flag " write 3d point source emissions diagnostic file?"
INTEGER :: PT3DFRAC
Value of CMAQ environment variable
PT3DFRAC
Flag " write layer fractions diagnostic?"
TYPE SMETA_T
Derived data type for standard SMOKE metadata objects, if
that ever happens (currently, only a dummy implementation).
The fields are the following:
INTEGER :: VERSION
Version-number for the SMOKE-metadata data dictionary
TYPE( CMETA_T ), PUBLIC, PROTECTED :: CMAQ_MDATA
Module state-object for CMAQ metadata. If
CMAQMETA
holds standard CMAQ metadata.
INTEGER, PUBLIC, PROTECTED :: TEXT_MLINES
Number of lines of ASCII text metadata.
Negative if ASCII text-file metadata not active
CHARACTER*80, PUBLIC, PROTECTED :: TEXT_MDATA( TEXT_MLINES )
Structured-ASCII file metadata.
TYPE( SMETA_T ), PUBLIC, PROTECTED :: SMOKE_MDATA
Module state-object for SMOKE metadata. If
SMOKEMETA
holds standard SMOKE metadata.
INTEGER, PARAMETER :: INGRD3
Token to use in matrix-attribute calls to indicate that the
grid whose metadata is being accessed is an input grid for
the matrix.
INTEGER, PARAMETER :: OUTGRD3
Token to use in matrix-attribute calls to indicate that the
grid whose metadata is being accessed is an output grid for the
matrix.
GETMTXATT()
get input or output grid description attributes for
matrix-files and return as arguments:
Generic with forms for matrix-input-only, matrix-output-only,
matrix-input-and-output metadata
INITMTXATT()
set state-variables for input and output grid description
attributes for matrix-file.
SETMTXATT()
set or check input and output grid description attributes
from arguments for matrix-files: if file is NEW, set the
attributes; else check them. Retains these attributes
in
PRIVATE
state-variables in the module.:
Generic with forms for matrix-input-only, matrix-output-only,
matrix-input-and-output metadata
CHKMTXATT()
check input or output grid description attributes for
matrix-files against attributes from the argument list.
Return
.TRUE.
if they match,
.FALSE.
otherwise.:
Generic with forms for matrix-input-only, matrix-output-only,
matrix-input-and-output metadata
ENDMTXATT()
turn off input and output grid description attributes
from
INITMTXATT()
or
SETMTXATT()
INITCF()
turns on CF-metadata for all new files created
SETCF()
writes CF-metadata for a specific file.
ENDCF()
turns off writing CF metadata for new files created
subsequently.
INITCMAQ()
turns on CMAQ-metadata for all new files created
ISCMAQ()
Checks whether CMAQ-metadata exists in a specified file
GETCMAQ()
reads CMAQ-metadata from a specific file.
LOGCMAQ()
print human readable CMAQ-metadata.
SETCMAQ()
writes CMAQ-metadata for a specific file.
ENDCMAQ()
turns off writing CMAQ metadata for new files created
subsequently.
INITMTEXT()
turns on text-file metadata for all new files created
SETMTEXT()
writes text-file metadatametadata for a specific file.
ENDMTEXT()
turns off writing text-file metadatametadata for new files created
subsequently.
INITSMOKE()
turns on SMOKE-metadata for all new files created
GETSMOKE()
reads SMOKE-metadata from a specific file.
SETSMOKE()
writes SMOKE-metadata for a specific file.
ENDSMOKE()
turns off writing SMOKE metadata for new files created
subsequently.
INITMTXATT
SUBROUTINE INITMTXATT( &
GDNAM1, GDTYP1, P_ALP1, P_BET1, P_GAM1, XCENT1, YCENT1, &
XORIG1, YORIG1, XCELL1, YCELL1, NCOLS1, NROWS1, &
GDNAM2, GDTYP2, P_ALP2, P_BET2, P_GAM2, XCENT2, YCENT2, &
XORIG2, YORIG2, XCELL2, YCELL2, NCOLS2, NROWS2 )

CHARACTER( LEN=* ), INTENT( IN ) :: GDNAM1, GDNAM2
INTEGER , INTENT( IN ) :: GDTYP1, GDTYP2
REAL*8 , INTENT( IN ) :: P_ALP1, P_ALP2
REAL*8 , INTENT( IN ) :: P_BET1, P_BET2
REAL*8 , INTENT( IN ) :: P_GAM1, P_GAM2
REAL*8 , INTENT( IN ) :: XCENT1, XCENT2
REAL*8 , INTENT( IN ) :: YCENT1, YCENT2
REAL*8 , INTENT( IN ) :: XORIG1, XORIG2
REAL*8 , INTENT( IN ) :: YORIG1, YORIG2
REAL*8 , INTENT( IN ) :: XCELL1, XCELL2
REAL*8 , INTENT( IN ) :: YCELL1, YCELL2
INTEGER , INTENT( IN ) :: NCOLS1, NCOLS2
INTEGER , INTENT( IN ) :: NROWS1, NROWS2
The first set of arguments
GDNAM1
...
NROWS1
are for the
matrix-input grid; the last set of arguments
GDNAM2
...
NROWS2
for the
matrix-output grid.
Back to
Contents
GETMTXATT
GENERIC INTERFACE:
LOGICAL FUNCTION GETMTXATT( FNAME, IMODE, GDNAM, &
GDTYP, P_ALP, P_BET, P_GAM, XCENT, YCENT, &
XORIG, YORIG, XCELL, YCELL, NCOLS, NROWS )

CHARACTER( LEN=* ), INTENT( IN ):: FNAME !! logical file name
INTEGER , INTENT( IN ):: IMODE !! INGRD3 or OUTGRD3
CHARACTER( LEN=* ), INTENT( OUT ):: GDNAM !! grid name
INTEGER , INTENT( OUT ):: GDTYP !! map projection type
REAL*8 , INTENT( OUT ):: P_ALP !! map projection parameters...
REAL*8 , INTENT( OUT ):: P_BET !! "
REAL*8 , INTENT( OUT ):: P_GAM !! "
REAL*8 , INTENT( OUT ):: XCENT !! "
REAL*8 , INTENT( OUT ):: YCENT !! "
REAL*8 , INTENT( OUT ):: XORIG !! Grid origin
REAL*8 , INTENT( OUT ):: YORIG !! "
REAL*8 , INTENT( OUT ):: XCELL !! Grid cell-size
REAL*8 , INTENT( OUT ):: YCELL !! "
INTEGER , INTENT( OUT ):: NCOLS !! Grid dimension
INTEGER , INTENT( OUT ):: NROWS !! "

LOGICAL FUNCTION GETMTXATT( FNAME, &
GDNAM1, GDTYP1, P_ALP1, P_BET1, P_GAM1, XCENT1, YCENT1, &
XORIG1, YORIG1, XCELL1, YCELL1, NCOLS1, NROWS1, &
GDNAM2, GDTYP2, P_ALP2, P_BET2, P_GAM2, XCENT2, YCENT2, &
XORIG2, YORIG2, XCELL2, YCELL2, NCOLS2, NROWS2 )

CHARACTER( LEN=* ), INTENT(IN ) :: FNAME
CHARACTER( LEN=* ), INTENT( OUT) :: GDNAM1, GDNAM2
INTEGER , INTENT( OUT) :: GDTYP1, GDTYP2
REAL*8 , INTENT( OUT) :: P_ALP1, P_ALP2
REAL*8 , INTENT( OUT) :: P_BET1, P_BET2
REAL*8 , INTENT( OUT) :: P_GAM1, P_GAM2
REAL*8 , INTENT( OUT) :: XCENT1, XCENT2
REAL*8 , INTENT( OUT) :: YCENT1, YCENT2
REAL*8 , INTENT( OUT) :: XORIG1, XORIG2
REAL*8 , INTENT( OUT) :: YORIG1, YORIG2
REAL*8 , INTENT( OUT) :: XCELL1, XCELL2
REAL*8 , INTENT( OUT) :: YCELL1, YCELL2
INTEGER , INTENT( OUT) :: NCOLS1, NCOLS2
INTEGER , INTENT( OUT) :: NROWS1, NROWS2
GDNAM1
...
NROWS1
are for the matrix-input
grid;
GDNAM2
...
NROWS2
for the
matrix-output grid.
Back to
Contents
SETMTXATT
GENERIC INTERFACE:
LOGICAL FUNCTION SETMTXATT( FNAME, IMODE, GDNAM, &
GDTYP, P_ALP, P_BET, P_GAM, XCENT, YCENT, &
XORIG, YORIG, XCELL, YCELL, NCOLS, NROWS )

CHARACTER( LEN=* ), INTENT( IN ):: FNAME !! logical file name
INTEGER , INTENT( IN ):: IMODE !! INGRD3 or OUTGRD3
CHARACTER( LEN=* ), INTENT( IN ):: GDNAM !! grid name
INTEGER , INTENT( IN ):: GDTYP !! map projection type
REAL*8 , INTENT( IN ):: P_ALP !! map projection parameters...
REAL*8 , INTENT( IN ):: P_BET !! "
REAL*8 , INTENT( IN ):: P_GAM !! "
REAL*8 , INTENT( IN ):: XCENT !! "
REAL*8 , INTENT( IN ):: YCENT !! "
REAL*8 , INTENT( IN ):: XORIG !! Grid origin
REAL*8 , INTENT( IN ):: YORIG !! "
REAL*8 , INTENT( IN ):: XCELL !! Grid cell-size
REAL*8 , INTENT( IN ):: YCELL !! "
INTEGER , INTENT( IN ):: NCOLS !! Grid dimension
INTEGER , INTENT( IN ):: NROWS !! "

LOGICAL FUNCTION SETMTXATT( FNAME, &
GDNAM1, GDTYP1, P_ALP1, P_BET1, P_GAM1, XCENT1, YCENT1, &
XORIG1, YORIG1, XCELL1, YCELL1, NCOLS1, NROWS1, &
GDNAM2, GDTYP2, P_ALP2, P_BET2, P_GAM2, XCENT2, YCENT2, &
XORIG2, YORIG2, XCELL2, YCELL2, NCOLS2, NROWS2 )

CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
CHARACTER( LEN=* ), INTENT( IN ) :: GDNAM1, GDNAM2
INTEGER , INTENT( IN ) :: GDTYP1, GDTYP2
REAL*8 , INTENT( IN ) :: P_ALP1, P_ALP2
REAL*8 , INTENT( IN ) :: P_BET1, P_BET2
REAL*8 , INTENT( IN ) :: P_GAM1, P_GAM2
REAL*8 , INTENT( IN ) :: XCENT1, XCENT2
REAL*8 , INTENT( IN ) :: YCENT1, YCENT2
REAL*8 , INTENT( IN ) :: XORIG1, XORIG2
REAL*8 , INTENT( IN ) :: YORIG1, YORIG2
REAL*8 , INTENT( IN ) :: XCELL1, XCELL2
REAL*8 , INTENT( IN ) :: YCELL1, YCELL2
INTEGER , INTENT( IN ) :: NCOLS1, NCOLS2
INTEGER , INTENT( IN ) :: NROWS1, NROWS2

LOGICAL FUNCTION SETMTXATT3( FNAME )

CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
GDNAM1
...
NROWS1
are for the matrix-input
grid;
GDNAM2
...
NROWS2
for the
matrix-output grid.
Back to
Contents
CHKMTXATT
GENERIC INTERFACE:
LOGICAL FUNCTION CHKMTXATT( FNAME, IMODE, GDNAM, &
GDTYP, P_ALP, P_BET, P_GAM, XCENT, YCENT, &
XORIG, YORIG, XCELL, YCELL, NCOLS, NROWS )

CHARACTER( LEN=* ), INTENT( IN ):: FNAME !! logical file name
INTEGER , INTENT( IN ):: IMODE !! INGRD3 or OUTGRD3
CHARACTER( LEN=* ), INTENT( IN ):: GDNAM !! grid name
INTEGER , INTENT( IN ):: GDTYP !! map projection type
REAL*8 , INTENT( IN ):: P_ALP !! map projection parameters...
REAL*8 , INTENT( IN ):: P_BET !! "
REAL*8 , INTENT( IN ):: P_GAM !! "
REAL*8 , INTENT( IN ):: XCENT !! "
REAL*8 , INTENT( IN ):: YCENT !! "
REAL*8 , INTENT( IN ):: XORIG !! Grid origin
REAL*8 , INTENT( IN ):: YORIG !! "
REAL*8 , INTENT( IN ):: XCELL !! Grid cell-size
REAL*8 , INTENT( IN ):: YCELL !! "
INTEGER , INTENT( IN ):: NCOLS !! Grid dimension
INTEGER , INTENT( IN ):: NROWS !! "

LOGICAL FUNCTION CHKMTXATT( FNAME, &
GDNAM1, GDTYP1, P_ALP1, P_BET1, P_GAM1, XCENT1, YCENT1, &
XORIG1, YORIG1, XCELL1, YCELL1, NCOLS1, NROWS1, &
GDNAM2, GDTYP2, P_ALP2, P_BET2, P_GAM2, XCENT2, YCENT2, &
XORIG2, YORIG2, XCELL2, YCELL2, NCOLS2, NROWS2 )

CHARACTER( LEN=* ), INTENT(IN ) :: FNAME
CHARACTER( LEN=* ), INTENT(IN ) :: GDNAM1, GDNAM2
INTEGER , INTENT(IN ) :: GDTYP1, GDTYP2
REAL*8 , INTENT(IN ) :: P_ALP1, P_ALP2
REAL*8 , INTENT(IN ) :: P_BET1, P_BET2
REAL*8 , INTENT(IN ) :: P_GAM1, P_GAM2
REAL*8 , INTENT(IN ) :: XCENT1, XCENT2
REAL*8 , INTENT(IN ) :: YCENT1, YCENT2
REAL*8 , INTENT(IN ) :: XORIG1, XORIG2
REAL*8 , INTENT(IN ) :: YORIG1, YORIG2
REAL*8 , INTENT(IN ) :: XCELL1, XCELL2
REAL*8 , INTENT(IN ) :: YCELL1, YCELL2
INTEGER , INTENT(IN ) :: NCOLS1, NCOLS2
INTEGER , INTENT(IN ) :: NROWS1, NROWS2

LOGICAL FUNCTION CHKMTXATT3( FNAME )

CHARACTER( LEN=* ), INTENT( IN ):: FNAME
GDNAM1
...
NROWS1
are for the matrix-input
grid;
GDNAM2
...
NROWS2
for the
matrix-output grid.
Back to
Contents
ENDMTXATT
LOGICAL FUNCTION ENDMTXATT( )
Turns off input and output grid description attributes
from
INITMTXATT()
or
SETMTXATT()
sets
MATXMETA = .FALSE.
Back to
Contents
INITCF
SUBROUTINE INITCF()
Turns on writing CF-compliant metadata for all new I/O API
files subsequently created by the calling program.
Back to
Contents
SETCF
GENERIC INTERFACE:
SUBROUTINE SETCF( FNAME )
SUBROUTINE SETCF( FID )

CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
INTEGER , INTENT( IN ) :: FID
FNAME
must be the logical name of an I/O API
file currently open for output, or else
FID
must be the
internal file-index for a file currently being opened for output.
Back to
Contents
ENDCF
SUBROUTINE ENDCF()
Turns off writing CF-compliant metadata for new I/O API
files subsequently opened by the calling program:
sets
CFMETA = .FALSE.
Back to
Contents
INITCMAQ
GENERIC INTERFACE:
LOGICAL FUNCTION INITCMAQ()
LOGICAL FUNCTION INITCMAQ( MDATA )

TYPE(CMETA_T) , INTENT( IN ) :: MDATA
Initializes internal state variables holding CMAQ-standard metadata
from either the standard-format text file with logical name
IOAPI_CMAQMETA
, from the program-environment if
IOAPI_CMAQMETA=="ENV"
or from the argument
MDATA
IOAPI_CMAQMETA
should be either
NONE
to
turn off CMAQ metadata (the default), or the path for a
structured-ASCII file with format [TBD].
Back to
Contents
ISCMAQ
LOGICAL FUNCTION ISCMAQ( FNAME )

CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
Returns
TRUE
if the specified file's header contains
CMAQ metadata.
Back to
Contents
GETCMAQ
GENERIC INTERFACE:
LOGICAL FUNCTION GETCMAQ( FNAME )
LOGICAL FUNCTION GETCMAQ( FNAME, MDATA )

CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
TYPE(CMETA_T) , INTENT( IN ) :: MDATA
Reads CMAQ-standard metadata from the header of file
FNAME
and puts it either into CMAQ-metadata object
MDATA
(if present) or into CMAQ-metadata module
variable
CMAQ_MDATA
. If successful, sets
CMAQMETA
to
TRUE
FNAME
must be the logical name of an I/O API
file currently open for input.
Back to
Contents
LOGCMAQ
GENERIC INTERFACE:
LOGICAL FUNCTION LOGCMAQ( )
LOGICAL FUNCTION LOGCMAQ( FNAME )
LOGICAL FUNCTION LOGCMAQ( MDATA )
LOGICAL FUNCTION LOGCMAQ( FNAME, MDATA )

CHARACTER(LEN=*), INTENT( IN ) :: FNAME
TYPE(CMETA_T) , INTENT( IN ) :: MDATA
Writes CMAQ-standard metadata either from metadata-object
MDATA
(if present) or CMAQ-metadata module variable
CMAQ_MDATA
(otherwise) either to a structured-ASCII
output file
FNAME
(if present) or to the program log
(otherwise).
If present,
FNAME
must be the logical name for the
structured-ASCII output file.
Back to
Contents
SETCMAQ
GENERIC INTERFACE:
LOGICAL FUNCTION SETCMAQ( FID )
LOGICAL FUNCTION SETCMAQ( FID, MDATA )
LOGICAL FUNCTION SETCMAQ( FNAME )
LOGICAL FUNCTION SETCMAQ( FNAME, MDATA )

INTEGER , INTENT( IN ) :: FID
CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
TYPE(CMETA_T) , INTENT( IN ) :: MDATA
Writes CMAQ-standard metadata either from metadata-object
MDATA
(if available) or CMAQ-metadata module variable
CMAQ_MDATA
(otherwise) to the header of I/O API
file with either logical name
FNAME
or
STATE3
file-index
FID
NOTE: the last two forms are the ones intended for
modeler-use; the first two should be considered as internal
to the I/O API, and is the one called automatically.
If
IOAPI_CMAQMETA
is not
NONE
, the first
form is called automatically as part of the file-creation process.
PRECONDITION:
FNAME
must be the logical name of an
I/O API file being opened or currently open for output.
Back to
Contents
ENDCMAQ
SUBROUTINE ENDCMAQ()
Turns off CMAQ-standard metadata:
sets
MODULE
-variable
CMAQMETA = .FALSE.
Back to
Contents
INITMTEXT
GENERIC INTERFACE:
LOGICAL FUNCTION INITMTEXT()
LOGICAL FUNCTION INITMTEXT( NLINES, LINES )

INTEGER , INTENT( IN ) :: NLINES
CHARACTER( LEN=* ), INTENT( IN ) :: LINES( NLINES )
Initializes internal state variables holding structured-text
metadata from the 80-col-format text file with logical name
IOAPI_TEXTMETA
or from the arguments. The first
(no-arguments) form is automatically called before opening any
newly-created files. The second (explicit arguments) form
must be called before opening any new files.
Environment variable
IOAPI_TEXTMETA
should be either
NONE
to turn off text metadata (the default), or the
path for the ASCII file.
Back to
Contents
SETMTEXT
LOGICAL FUNCTION SETMTEXT( FID )
INTEGER , INTENT( IN ) :: FID
Writes text-file metadata to attribute
TEXT_MDATA
in
the header of [P]netCDF I/O API files open for writing.
If text-file metadata is active, this is automatically called for
newly-created files.
Back to
Contents
ENDMTEXT
SUBROUTINE ENDMTEXT()
Turns off text-file metadata: sets
MODULE
-variable
TEXTMETA = .FALSE.
and deallocates
TEXT_MDATA
Back to
Contents
INITSMOKE
GENERIC INTERFACE:
LOGICAL FUNCTION INITSMOKE( )
LOGICAL FUNCTION INITSMOKE( MDATA )

TYPE(SMETA_T) , INTENT( IN ) :: MDATA
Initializes internal state variables holding SMOKE-standard metadata.
Back to
Contents
GETSMOKE
GENERIC INTERFACE:
LOGICAL FUNCTION GETSMOKE( FNAME )
LOGICAL FUNCTION GETSMOKE( FNAME, MDATA )

CHARACTER(LEN=*), INTENT( IN ) :: FNAME
TYPE(SMETA_T) , INTENT( IN ) :: MDATA
Reads SMOKE-standard metadata from the header of file
FNAME
and puts it either into SMOKE-metadata object
MDATA
or into SMOKE-metadata module variable
SMOKE_MDATA
. If successful, sets
SMOKEMETA
to TRUE.
FNAME
must be the logical name of an I/O API
file currently open for input.
Back to
Contents
SETSMOKE
GENERIC INTERFACE:
LOGICAL FUNCTION SETSMOKE( FID )
LOGICAL FUNCTION SETSMOKE( FNAME )
LOGICAL FUNCTION SETSMOKE( FNAME, MDATA )

INTEGER , INTENT( IN ) :: FID
CHARACTER( LEN=* ), INTENT( IN ) :: FNAME
TYPE(SMETA_T) , INTENT( IN ) :: MDATA
Writes SMOKE-standard metadata either from metadata-object
MDATA
(if available) or SMOKE-metadata module variable
SMOKE_MDATA
(otherwise) to the header of I/O API file
with either logical name
FNAME
or file-index
FID
NOTE: the last two forms are the ones intended for
modeler-use; the first should be considered as internal
to the I/O API, and is the one called automatically.
If
SMOKEMETA
is
TRUE
, the first form is
called automatically as part of the file-creation process.
PRECONDITION:
FNAME
must be the logical name of an
I/O API file being opened or currently open for output.
Back to
Contents
ENDSMOKE
SUBROUTINE ENDSMOKE()
Turns off SMOKE-standard metadata:
sets
SMOKEMETA = .FALSE.
Back to
Contents
To:
Models-3/EDSS I/O API: The Help Pages
Send comments to
Carlie J. Coats, Jr.
carlie@jyarborough.com