READ3(), WRITE3(),
INTERP3()
, and DDTVAR3()
.
LOGICAL FUNCTION ISDSTIME()
,
also affecting programs GREGDATE
and
JULDATE
: July 9, 2002
SETLAM()
:
June 7, 2002
SETENVVAR()
:
May 10, 2002
INTLIST()
,
REALLIST()
, and STRLIST()
,
more tools-programs: December 5, 2001
CHECK3()
,
Makefile
FILCHK3
Go to the I/O API Availability/Download page
READ3(), WRITE3(), INTERP3()
, and
DDTVAR3()
.:
Aug. 29, 2002
(Circular-buffer files keep two time steps, the "even" and
the "odd" time step; this allows the maintenance of what
would otherwise be huge model-restart files without consuming
excessive disk space. Negative values for time-step attribute
TSTEP3D
are used to indicate to OPEN3()
that the requested file to be created is a circular-buffer file...)
Back to Contents
ISDSTIME()
and programs
GREGDATE
and JULDATE
:
July 9, 2002
ISDSTIME()
, .GREGDATE
and
JULDATE
to think that Daylight Savings Time ended
on the last Sunday in September instead of the last Sunday in
October. This error is now fixed.
Back to Contents
SETLAM()
: June 7, 2002
SETLAM()
that caused irregular errors, particularly when called from
C. This error is now fixed.
Back to Contents
SETENVVAR()
: May 10, 2002
SETENVVAR()
that caused irregular errors in reading the resulting environment
variables. This error is now fixed.
Back to Contents
NAMELIST
s in the
follow-on WRFIO implementation using
I/O API Version 3
READ3()
and INTERP3()
:
setenv foo "LIST:name1,...,namen
setenv name1 <path>
...
setenv namen <path>
indicates that foo
will be treated as a
concatenation of files name1, ...
namen
for READ3()
and
INTERP3()
. The files must have the same
header structure, except for the time step structure,
which must be compatible (identical time step, and all
starting dates and times must be valid time steps for
the time step sequence of the chronologically-earliest
file). READ3()
and INTERP3()
take their data from the first listed file that has the
relevant data (in case the files overlap).
This enhancement will also make it possible to get around the 2GB limits on input file sizes on various 32-bit platforms.
FDESC COMMON
s and accessed by the
DESC3()
routine.INCLUDE
-files IODECL3.EXT
and iodecl3.h
.
The I/O routines has been re-coded so that it is only
required that trimmed lengths (i.e., length
exclusive of trailing blanks) of
logical names and
variable-names must not exceed NAMELEN3
=16
(e.g, CHARACTER(LEN=24)
FOO = 'v23456789012345 '
will be legal since its trimmed length is 15, it number of
nonblank characters (which are then followed by 9 blanks
to make out its total declared length of 24).
WRF eventually needs a number of additional enhancements that will break source, link, and backwards data compatibility with the current I/O API. These are being considered for an eventual I/O API Version 3, particularly:
READ3()
, WRITE3()
,
etc.
INTERP3()
(and
DDTVAR3()
for double precision
variables.
fix_src.csh
is available for those users (e.g., CMAQ) who demand
nonstandard 132-column fixed F90 source format;
Makefile
goal fixed_src
constructs nonstandard 132-column INCLUDE-files in
a user-configurable directory.
PROFIL3
now uses REAL
position-variables in each time step record,
instead of REAL*8
.
_360
suffix (so is called
io_360
e.g.,
Linux2_alpha_360
For Version 2.2 of the
I/O API, we will unify the code of this version with
the code for the main branch, so that one may obtain the
io_360
by #define
ing the
preprocessor symbol IO_360
as in the
Makefile.io_360
and using the usual build
system.
INTLIST()
,
REALIST()
, and STRLIST()
have been modified so that they accept an optional
LIST:
prefix for the value-list, so that
one may set the list-value as in the following
script-example for an INTLIST()
list:
setenv MYLIST "LIST:1,24,9876,5"
LAMBERT()
entries SET*()
had
a bug introduced when the extra map projections were
added in Version 2.1.
Data type PROFIL3
had implementation errors
which were corrected. (We finally had our first user of
this data type, which was designed to store and retrieve
rawinsonde profile data efficiently.)
I/O API Version 3 will support NAMELEN3
=32
character variable and logical names, "staggered"
variables, and various other things yet to be determined, in
support of WRF. It will not be data- nor link-compatible (and
may not be fully source-code compatible) with previous versions
of the I/O API. We will maintain forwards data
compatibility (so that Version 3 will read Version 1 and
Version 2 generated files, but possibly not vice versa.
STATUS: under development. Version 2.2 is due out by the end of 2Q 2002; Version 3 should appear during 2Q 2003.
Back to Contents
NEXTIME()
: Jan. 15, 2002
NEXTIME()
for the case of a negative time step that
backed up the JDATE:JTIME
argunments across a year
boundary (e.g., stepping backwards by an hour from
2002001:003000
by -10000
should yield
2001366:233000
but did not get the year correct.
STATUS: fixed.
Back to Contents
Intel Fortran and C, and Lahey-Fujitsu Fortran compilers for Linux are now supported by the Makeinclude system.
New routines INTLIST()
,
REALLIST()
, and STRLIST()
that read in
comma-delimited-list-valued environment variables.
New programs for analysis, model-coupling, grid-to-grid transformation, etc.:
Back to Contents
CHECK3()
, Makefile
There was also a bug in the way the Makefile was building
GCTP(). The problem is that this is
a very old Fortran routine from the US Geological Survey, which
requires that compile-flags be set so as to SAVE
all its local variables (and there turned out to be significant
differences how various platforms handled the matter).
Back to Contents
= 6
= 7
= 8
Back to Contents
FILCHK3
(for Fortran) and filchk3c
(for
C) provide an easy check of whether an input-file's file-type and
dimensions match the caller's expectations, with a report to the
program log of any mis-matches that it finds. Typical Fortran use
might be:
... IF ( .NOT.OPEN3( 'MYFILE', FSREAD3, 'Myprogram' ) ) THEN C MYFILE could not be opened for read-only ... ELSE IF ( .NOT. FILCHK3( 'MYFILE', & GRDDED3, NCOLS, NROWS, NLAYS, NTHIK ) THEN C Either the file type for 'MYFILE' was not GRIDDED, or C it had unexpected dimensions (see log for more details). ... END IF ...
Back to Contents
mtxblend
:
Use a sparse-matrix linear-operator transform-file (as from
mtxbuild
, below) to perform a linear
grid-to-grid transform data from an input file to a new output
grid (general purpose linear-operator-transform tool), and
then perform a masked merge of the result with data from
another "base" file on the same grid as the
output from the sparse-matrix transform.
Supported output file type: GRIDDED.
mtxbuild
:
Construct a sparse-matrix linear-operator transform-file
(as for mtxcple
, below) from a user-supplied
ASCII file of coefficients.
mtxcple
:
Use a sparse-matrix linear-operator transform-file (as from
mtxbuild
, above) to perform a linear
grid-to-grid transform from an input file to a new output
file (general purpose linear-operator-transform tool).
Supported output file types are GRIDDED, BOUNDARY, or CUSTOM.
m3cple
:
copy to the same grid, or interpolate to another grid
a time sequence of all variables from a source file to
a target file, under the optional control of an
I/O API coupling-mode
"synch file".
selmrg2d
:
select multiple 2D layer/variable combinations from
multiple gridded input files, and write result to merged
2D gridded output file, e.g., for use preparing inputs to
various "canned" 2-D graphics programs in
automated web-generation, e.g., for NCSC's
Numerical Air Quality
Prediction project.
Back to Contents
With this version, the source-code-level build-process uses
Makefile
s rather than the previous Makeit
shell-scripts. This allows much faster re-building of the library
for small bug-fixes.
With this version, we will be supporting only netCDF 3.x, because of the support it provides for synchronization during model coupling. Please note that the NCAR folks accidentally incorporated a link-incompatibility between versions 2.x and 3.x of netCDF in some of the "magic numbers" used to describe modes of opening files. Note also that versions 3.4 and later use different error numbers than version 3.3.1 and earlier. The I/O API Troubleshooting Page will be updated to reflect both sets of error numbers. (As of 8/20/1999, the current released version of netCDF is 3.4, although we have been testing the new version 3.5b2 in-house recently.)
Also with this version, the default build of the library will require linking with libpvm3.a for coupling mode support. PVM 3.4 or later is required, because of the requirement for PVM mailboxes.
For some vendors, linking of serial programs will also require the
explicit specification of an OpenMP run-time library
as well -- on SGI's, for example, this requires an additional
-lmp
in the linking-step command line for serial
programs.
Back to Contents
We are making the I/O API thread-safe for OpenMP, and have been
testing the result in various
real-time air quality
forecasting and
other meteorological projects. The basic principle is that
I/O API calls that read or write distinct variables
and/or distinct files may be done concurrently from
OpenMP programs. The biggest gains for model-users are with
INTERP3
and
DDTVAR3
, where the
call involves linear algebra computations (linear interpolation or
differencing) in addition to I/O (which is performed sometimes--but
not always, because of the internal double-buffering mechanisms.
Note that I/O to/from disk is itself sequential in any case.)
Building a parallel program that uses an
OpenMP-enabled libioapi.a
generally requires
compiler-specific parallelization directives in both the
compile-lines and the link-lines that make your
executable. For examples, ook at your machine/compiler's
Makeinclude.${BIN} for variables OMPFLAGS
andOMPLIBS
used with this build of the library
Back to Contents
As part of the Practical Parallel Project, MCNC has developed an HPF2 implementation of an HPF I/O API module which calls the I/O API and then re-destributes gridded or boundary data according to the data distribution of its caller. Unfortunately, however, the IBM XL HPF and Portland Group HPF compilers we use support only their own extensions to HPF 1.1 at this time, so we have had to develop revised HPF I/O API modules for each which are not fully general but which do fulfill the requirements of our HPF air quality and hydrology models.
Back to Contents
This has several advantages from the model-engineering point of view:
Back to Contents
READ4D()
and
WRITE4D()
, and
very much resemble READ3()
and
WRITE3()
, except for the specification of an
entire time step sequence as arguments, the restriction to
single-variable operations (ALLVAR3
is
not supported for these) and file types
CUSTOM3
,
GRDDED3
,
BNDARY3
, and
TSRIES3
.
Back to Contents
Back to Contents
Back to Contents
Go to the I/O API Availability/Download page
Send comments to
Carlie J. Coats, Jr.
coats@emc.mcnc.org