Object Libraries, Executables, and Supported Machines/OS's

Please read the copyright, licensing, and acknowledgements page: The I/O API library is available under the Lesser Gnu Public License, version 2.1; the "tool" and example programs are available under the Gnu Public License, version 2.

The current release version of the I/O API library is Version 3.2; Versions 3.0 and 3.1 in maintenance only release mode, and versions 2.2 and 2.1 are available for historic interest. To download source for these, please go to the I/O API Download Page.

Release Version 3.0, 3.1, 3.2 of the I/O API and the I/O -related tool and sample programs, as well as obsolete prior versions 2.1 and 2.2, are available here on the CMAS Center web site:

ioapi-3.2.tar.gz
ioapi-3.1.tar.gz
ioapi-3.0.tar.gz
ioapi-2.2.tar.gz
ioapi-2.1.tar.gz
in source code form. Version 3.2 is also available from GitHub, using the following command:
    git clone https://github.com/cjcoats/ioapi-3.2
    
New features of 2.2 and later releases are documented here in the Change Log; build instructions are available here.

For each supported architecture, there are several relevant archive libraries of compiled object files:

libioapi.a
contains object files for the I/O API (both public and private routines), the coordinate and grid manipulation routines , the date and time manipulation routines , and the utility routines.
libnetcdf.a (and libnetcdff.a for netCDF-4.1 or later)
contains object files for the underlying netCDF library; it is compiled with optimization on (typically at optimization level -O2).
libpnetcdf.a
if you are building with PnetCDF/MPI distributed I/O enabled (e.g., for CMAQ).
libpvm3.a
contains object files for the underlying PVM library: if you build with I/O API Coupling Mode enabled.

Note that optimized and debug versions of the libraries are normally built into distinct build-directories each with its own $BIN (e.g., Linux2_x86_64ifort vs Linux2_x86_64ifortdbg); you should segregate profiling-enabled, global;-climate, and distributed-I/O (etc.) libraries similarly. If you call I/O API routines, you will need both libioapi.a and libnetcdf.a (and, for netCDF-4, libnetcdff.a; these are normally copied into the relevant build-directory); if you build with PnetCDF/MPI distributed I/O enabled, you will need libpnetcdf.a; if you build with coupling mode enabled, you will also need libpvm3.a. If you call only coordinate and grid or date and time manipulation routines or utility routines, you will just need libioapi.a.

I/O API Version 3.x libraries have build support for C and Fortran-90 compilers only (but not Fortran-77), on the following hardware/operating-system/compiler-set/compiler-option platforms referred to by environment variable $BIN. Note that supporting additional platforms generally is quite easy, following the pattern of these existing builds, as found in the ioapi/Makeinclude.$BIN configuration files:

Linux2_x86_64* NOTE: Most "64-bit" Linux compilers default to the so-called "64-bit-small" memory model, which limits individual arrays, COMMON blocks, and initialized data to less than 2 GB, unless you override this by compile-flags.
Exceptions are the Sun compilers and g95, which default to medium memory model, which supports huge arrays and huge COMMON blocks (but not huge machine-code surbroutines). Note that for various other compilers, there are explicitly medium-memory-model configurations, which should be kept separate from the "normal" small-memory-model versions.
Linux2_x86_64
For Linux on (64-bit) Intel(/AMD) x86_64 using gcc and gfortran, with OpenMP support.

Linux2_x86_64af95
For Linux on (64-bit) Intel(/AMD) x86_64 using GNU gcc and Absoft af95, with native Absoft name-mangling, with OpenMP support.
Old: no longer have test-machine

Linux2_x86_64af95_
Like Linux2_x86_64af95 but Feldman-style name mangling (set up using compiler command-line directives), with OpenMP support.
Old: no longer have test-machine

Linux2_x86_64af95_dbg
Like Linux2_x86_64af95_ but compiled for debug, with OpenMP support.
Old: no longer have test-machine

Linux2_x86_64af95dbg
Like Linux2_x86_64af95 but compiled for debug, with OpenMP support.
Old: no longer have test-machine

Linux2_x86_64dbg
Like Linux2_x86_64 but compiled for debug, with OpenMP support.

Linux2_x86_64g95
For Linux on (64-bit) Intel(/AMD) x86_64 using gcc and g95.
Creates medium memory model objet-files and programs.

Linux2_x86_64g95dbg
Like Linux2_x86_64g95 but compiled for debug

Linux2_x86_64gfort
For Linux on (64-bit) Intel(/AMD) x86_64 using gcc and gfortran, before version 10, with OpenMP support.

Linux2_x86_64gfortdbg
Like Linux2_x86_64gfort but compiled for debug.

Linux2_x86_64gfortmpi
Like Linux2_x86_64gfort but compiled for using PnetCDF/MPI distributed I/O in CMAQ.

Linux2_x86_64gfort_medium
Like Linux2_x86_64gfort but compiled for medium memory model.

Linux2_x86_64gfort_mediumdbg
Like Linux2_x86_64gfort_medium but compiled for debug.

Linux2_x86_64gfort_360, Linux2_x86_64gfort_360
Like Linux2_x86_64gfort but compiled for 360-day or 365-day climatology-modeling "year".

Linux2_x86_64gfort10
For Linux on (64-bit) Intel(/AMD) x86_64 using gcc and gfortran version 10 or later, with OpenMP support.

Linux2_x86_64gfort10dbg
Like Linux2_x86_64gfort10 but compiled for debug.

Linux2_x86_64gfort10mpi
Like Linux2_x86_64gfort10 but compiled for using PnetCDF/MPI distributed I/O in CMAQ.

Linux2_x86_64gfort10_medium
Like Linux2_x86_64gfort10 but compiled for medium memory model.

Linux2_x86_64gfort_mediumdbg
Like Linux2_x86_64gfort10 but compiled for debug.

Linux2_x86_64ifort
For Linux on (64-bit) Intel(/AMD) x86_64 using Intel icc and ifort, with OpenMP support.

Linux2_x86_64ifortdbg
Like Linux2_x86_64ifort but compiled for debug

Linux2_x86_64ifortmpi
Like Linux2_x86_64ifort but compiled for using PnetCDF/MPI distributed I/O in CMAQ.

Linux2_x86_64ifort_medium
Like Linux2_x86_64ifort but compiled with =mcmodel=medium, as needed for programs with arrays and COMMON blocks larger than 2 GB.

Linux2_x86_64ifort_mediumdbg
Like Linux2_x86_64ifort_medium but compiled for debug

Linux2_x86_64gfort_360, Linux2_x86_64gfort_360
Like Linux2_x86_64ifort but compiled for 360-day or 365-day climatology-modeling "year".

Linux2_x86_64path
For Linux on (64-bit) Intel(/AMD) x86_64 using PathScale pathcc and pathf90, with OpenMP support.

Linux2_x86_64pathdbg
Like Linux2_x86_64path but compiled for debug

Linux2_x86_64pg
For Linux on (64-bit) Intel(/AMD) x86_64 using Portland Group pgcc and pgf90, with OpenMP support.

Linux2_x86_64pgmpi
Like Linux2_x86_64pg but compiled for using PnetCDF/MPI distributed I/O in CMAQ.

Linux2_x86_64pg_gcc_nomp
For Linux on (64-bit) Intel(/AMD) x86_64 using GNU gcc and Portland Group pgf90, with OpenMP turned off.

Linux2_x86_64pg_pgcc_nomp
Like Linux2_x86_64pg but with OpenMP turned off.

Linux2_x86_64pgmpi
Like Linux2_x86_64pg but compiled for using PnetCDF/MPI distributed I/O in CMAQ.

Linux2_x86_64pg_medium
Like Linux2_x86_64pg but compiled with =mcmodel=medium, as needed for programs with arrays and COMMON blocks larger than 2 GB.

Linux2_x86_64pg_360, Linux2_x86_64pg_360
Like Linux2_x86_64pg but compiled for 360-day or 365-day climatology-modeling "year".

Linux2_x86_64sun
For Linux on (64-bit) Intel(/AMD) x86_64 using Sun/Oracle suncc and sunf95., with OpenMP support.
Defaults to medium memory model

Linux2_x86_64sundbg
Like Linux2_x86_64sun but compiled for debug

Linux2_x86_64sunmpi
Like Linux2_x86_64sun but compiled for using PnetCDF/MPI distributed I/O in CMAQ.

I/O API-3.2 only: WIN_x86gfort
for the Cygwin environment under MS-Windows using Cygwin 32-bit gcc and gfortran

I/O API-3.2 only: WIN_x86_64mingw64
for the Cygwin environment under MS-Windows using MingW64 64-bit gcc and gfortran

More older platforms, for which test machines are no longer available to me:
AIX
for AIX on POWER-<n> using xlc_r and xlf_r, with OpenMP support.

AIX_
As for AIX but with Feldman-style (trailing underscore) Fortran name-mangling for linker symbols.

AIXdbg
As for AIX but for debug

Darwin_x86_64ifort
For Mac/Darwin using Intel icc and ifort
HPUX
for HP-UX using f90 and c89.

IRIX5
For SGI IRIX 5 ("-o32" on mips-2 platforms using f90 and cc

IRIX64
For SGI IRIX 5 ("-64" on mips-4 platforms using f90 and cc, with OpenMP support.

IRIX64dbg
Like IRIX64 but compiled for debug.

IRIX64r8
Like IRIX64 but compiled for INTEGER*8 and REAL*8

IRIX6n32
For SGI IRIX 6 -n32 on mips-4 platforms using f90 and cc, with OpenMP support.

IRIX6n32dbg
Like IRIX6n32 but compiled for debug.

IRIX6n32r8
Like IRIX6n32 but compiled for INTEGER*8 and REAL*8

Linux2_alpha
For Linux on DEC^H^H^HCompaq^H^H^H^H^H^HHP Alpha systems using Digital fort.

Linux2_alphadbg
Like Linux2_alpha but compiled for debug.

Linux2_ia64
For Linux on Intel IA64 using Intel ecc and efc Version 7.x. No OpenMP support.

Linux2_ia64_mp
For Linux on Intel IA64 using Intel ecc and efc Version 7.x, with OpenMP support.

Linux2_ia64_nomp
same as Linux2_ia64

Linux2_ia64dbg
...compiled for debug

Linux2_ia64g95
... using gcc and g95

Linux2_ia64gfort
... using gcc and gfortran

Linux2_ia64ifort
... Intel Version 8.x icc and ifort with OpenMP support.

Linux2_ia64ifortdbg
...compiled for debug, with OpenMP support.

Linux2_x86
For Linux on (32-bit) Intel(/AMD) x86 using gcc and gfortran, with OpenMP support.

Linux2_x86af95
For Linux on (32-bit) Intel(/AMD) x86 using GNU gcc and Absoft af95, with native Absoft name-mangling, with OpenMP support.

Linux2_x86af95_
Like Linux2_x86af95 but with Feldman-style name mangling

Linux2_x86af95_dbg
Like Linux2_x86af95_ but compiled for debug

Linux2_x86af95dbg
Like Linux2_x86af95 but compiled for debug

Linux2_x86dbg
Like Linux2_x86 but compiled for debug

Linux2_x86g95
For Linux on (32-bit) Intel(/AMD) x86 using GNU gcc and g95

Linux2_x86g95dbg
Like Linux2_x86g95 but compiled for debug

Linux2_x86lf95
For Linux on (32-bit) Intel(/AMD) x86 using GNU gcc and Lahey lf95

Linux2_x86path
For Linux on (32-bit) Intel(/AMD) x86 using Pathscale pathcc and path95, with OpenMP support.

Linux2_x86pg
For Linux on (32-bit) Intel(/AMD) x86 using Portland Group pgcc and pg90, with OpenMP support.

Linux2_x86pg_gcc_mp
For Linux on (32-bit) Intel(/AMD) x86 using GNU pgcc and Portland Group pg90, with OpenMP support.

Linux2_x86pg_gcc_nomp
Like Linux2_x86pg_gcc_mp but without OpenMP

Linux2_x86pg_pgcc_mp
Like Linux2_x86pg_pgcc, with OpenMP support

Linux2_x86pg_pgcc_nomp
Like Linux2_x86pg_pgcc, but without OpenMP

Linux2_x86sun
For Linux on (32-bit) Intel(/AMD) x86 using Sun/Oracle suncc and sunf95., with OpenMP support.

Linux2_x86sundbg
Like Linux2_x86sun but compiled for debug

OSF1
For Digital Alpha or Vax OSF1, using Digital cc and f90
Old: no longer have test-machine

OSX_x86
For 32-bit Mac Darwin, using GNU gcc and gfortran.
Old: no longer have test-machine

OSX_x86_64ifort
For 64-bit Mac Darwin, using GNU gcc and Intel ifort.
Old: no longer have test-machine

SunOS5
For Sun Solaris, using Sun cc and f90, with OpenMP support
Old: no longer have test-machine

SunOS5dbg
Like SunOS5 but compiled for debug
Old: no longer have test-machine

WIN_x86_64gfort
For CygWin64 under 64-bit MS-Windows, using GNU gcc and gfortran, with OpenMP support.

WIN_x86_64gfort_medium
Like WIN_x86_64gfort but compiled for medium memory model

WIN_x86_64mingw64
For MingW64 under 64-bit MS-Windows, using GNU gcc and gfortran, with OpenMP support.

WIN_x86gfort
For CygWin32 under MS-Windows, using GNU gcc and gfortran, with OpenMP support.

cray
for UNICOS on Cray vector machines using Cray cc and f90
Old: no longer have test-machine

The libraries have in the past been compiled for a number of platforms (some of which are noted above), but the machines used for building these no longer are available to compile and build the latest versions of the libraries. It should be a simple task to build versions of the libioapi.a and libnetcdf.a archive libraries on most UNIX/Linux workstations--at least, those with Feldman-descended Fortran compilers.

For C programmers: Further note that since most of the .c library routines use/are C wrappers around Fortran code, you need to use cc -c to build ".o" files for your program, and then use the relevant Fortran compiler, as appropriate, to invoke the linker (since f90 knows how to link in the Fortran run-time libraries but cc doesn't), as in the following example which builds SunOS5 program "qux" from "qux.c":


    setenv LIB /env/apps/SunOS5/lib             #  library directory
    cc -c qux.c                                 #  produces qux.o
f90 -o qux qux.o -L${LIB} -lioapi -lnetcdf # linking step


Previous: Data Types

Next: Public INCLUDE Files

To: Models-3/EDSS I/O API: The Help Pages