Module for ZioLib data and utility functions
REVISION HISTORY:
2003-Jan-31 -- first prototype
2003-Jul-14 -- allowed multiple rectangular blocks per task
2003-Aug-14 -- added fill component to file descriptor object
for partial support of prefilling netCDF dataset
2003-Aug-16 -- support single task mode: ZIO_SPMD undefinedINTERFACE:
module zio_dataUSES:
implicit noneDEFINED PARAMETERS:
integer, parameter :: zio_i4 = selected_int_kind ( 6) ! 4 byte integer
integer, parameter :: zio_r4 = selected_real_kind( 6) ! 4 byte real
integer, parameter :: zio_r8 = selected_real_kind(12) ! 8 byte real
... Maximum sizes
integer, parameter :: zio_maxdims = 100 ! Max dimensions
integer, parameter :: zio_maxcomms = 100 ! Max I/O staging comms
integer, parameter :: zio_maxdata = 1000 ! Max distributed array objs
integer, parameter :: zio_maxblks = 500 ! Max rectangular blocks
integer, parameter :: zio_maxfiles = 100 ! Max file descriptors
integer, parameter :: zio_maxdecomp = 100 ! Max parallel decomps
integer, parameter :: zio_maxlist = 1000 ! Max list entries
integer, parameter :: zio_maxchars = 128 ! Max character length
... I/O methods
integer, parameter :: zio_maxmethods = 3 ! Supported I/O methods
integer, parameter :: zio_netcdf_io = 1 ! For netCDF I/O
integer, parameter :: zio_direct_io = 2 ! For direct-access I/O
integer, parameter :: zio_sequential_io = 3 ! For sequential-access I/O
... Flag for I/O by root process only in case of replicated global array
integer, parameter :: zio_replicated = -1
... Flag for undefined entity
integer, parameter :: zio_undefined = -99
... Error codes
... no error: zio_noerr = nf_noerr = mpi_success = 0, iostat = 0
integer, parameter :: zio_noerr = 0
integer, parameter :: zio_emax = -101 ! Code range max
integer, parameter :: zio_emin = -150 ! Code range min
integer, parameter :: zio_error_allocate = zio_emin + 0
integer, parameter :: zio_error_argument = zio_emin + 1
integer, parameter :: zio_error_arraysection = zio_emin + 2
integer, parameter :: zio_error_deallocate = zio_emin + 3
integer, parameter :: zio_error_decomp = zio_emin + 4
integer, parameter :: zio_error_distarray = zio_emin + 5
integer, parameter :: zio_error_filedesc = zio_emin + 6
integer, parameter :: zio_error_global_values = zio_emin + 7
integer, parameter :: zio_error_imap = zio_emin + 8
integer, parameter :: zio_error_index_order = zio_emin + 9
integer, parameter :: zio_error_init = zio_emin + 10
integer, parameter :: zio_error_initialized = zio_emin + 11
integer, parameter :: zio_error_iocomm = zio_emin + 12
integer, parameter :: zio_error_listentry = zio_emin + 13
integer, parameter :: zio_error_mpi_uninit = zio_emin + 14
integer, parameter :: zio_error_ndims = zio_emin + 15
integer, parameter :: zio_error_new_decomp = zio_emin + 16
integer, parameter :: zio_error_new_distarray = zio_emin + 17
integer, parameter :: zio_error_new_filedesc = zio_emin + 18
integer, parameter :: zio_error_new_iocomm = zio_emin + 19
integer, parameter :: zio_error_new_listentry = zio_emin + 20
integer, parameter :: zio_error_record = zio_emin + 21
integer, parameter :: zio_error_unlisted = zio_emin + 22
integer, parameter :: zio_errtype_zio = 1 ! ZioLib objs error
integer, parameter :: zio_errtype_mpi = 2 ! MPI error (disabled)
integer, parameter :: zio_errtype_binary = 3 ! Binary I/O error
integer, parameter :: zio_errtype_netcdf = 4 ! Netcdf I/O error
... Parallel decomposition descriptor
type zio_decomp_obj
integer :: ndims ! Number of dimensions
integer, pointer :: npes(:) ! Number of PEs for axes
integer, pointer :: coords(:) ! PE coords
end type zio_decomp_obj
... I/O staging communicator object
type zio_iocomm_obj
integer :: comm ! I/O staging communicator
integer :: niopes ! Number of staging processes
integer :: me ! Rank in comm
integer, pointer :: ranks_cmp(:) ! Rank in comm to rank in zio_comm
logical, pointer :: is_iope(:) ! Array showing whether a process
! is an I/O staging process
end type zio_iocomm_obj
... Distributed array descriptor
type zio_distarray_obj
integer :: ndims ! Number of dimensions
integer, pointer :: nblks(:) ! Number of rectangular blocks
integer, pointer :: loff(:,:,:) ! Offset of local array
integer, pointer :: lsize(:,:,:) ! Size of local array
integer, pointer :: gsize(:) ! Global size
integer, pointer :: ghstl(:) ! Number of LHS ghost nodes
integer, pointer :: ghstr(:) ! Number of RHS ghost nodes
integer, pointer :: index_order(:) ! Local array index order
end type zio_distarray_obj
... File descriptor
type zio_filedesc_obj
integer :: fileid ! File ID
integer :: method ! I/O method
integer :: iocomm ! I/O comm obj ID
integer :: ndims_par ! Min # of dims for parallel I/O
integer :: reclen ! Record length (for unformatted
! I/O)
logical :: fill ! netCDF fill mode (default: true)
end type zio_filedesc_obj
... Distributed array list
type zio_list_entry
character(len=zio_maxchars) :: name ! Variable name
integer :: distarray ! Array distribution ID
end type zio_list_entry
\