This file contains the functions
IlluMultiSave(), IlluMultiLoad() and
IlluMultiRead()
designed to handle distributed storage and retrieval of data on local drives
of machines in a Beowulf cluster. This should allow rapid loading of
timestep data for "playback" from what is essentially a giant RAID-0 array of
distributed disks, at enormously higher speeds than via NFS from a hard drive
or RAID array on the head node. The danger of course is that if one node's
disk goes down, you don't have a valid data set any more, but that's the
nature of RAID-0, right?
The filenames saved are:
This supports 1-D, 2-D and 3-D distributed arrays. As an extra feature, you
can load a multi-CPU distributed array scattered over lots of files into a
single CPU, to facilitate certain modes of data visualization.
If one were saving timesteps, one might include a timestep number in the
basename, and also timestep and simulation time in the metadata. The
metadata can also hold simulation parameters, etc.
#define __FUNCT__ "IlluMultiParseXML"
#define __FUNCT__ "IlluMultiParseData"
#define __FUNCT__ "IlluMultiStoreXML"
#define __FUNCT__ "IlluMultiStoreData"
#define __FUNCT__ "checkagree"
#define __FUNCT__ "IlluMultiRead"
#define __FUNCT__ "IlluMultiLoad"
#define __FUNCT__ "IlluMultiSave"
IlluMulti | Primary tag, with attributes
version, endian (big or little) and compression (none, 1-9, best; long*, short* or char*) |
GlobalCPUs | Number of CPUs in each
direction, with attributes dimensions, xwidth, ywidth and zwidth |
GlobalSize | Size of the entire distributed
array, with attributes xwidth, ywidth, zwidth, xsize**, ysize**, zsize** and fields |
LocalSize | Size of the local part of the
array, with attributes xwidth, ywidth and zwidth |
Stencil | Stencil and periodic data, with
attributes width, type and periodic (using PETSc enum values) |
Field | Data on each field, attributes name, type*, min and max |
User | User parameters, attributes name and value |
static inline int checkagree ( int da, int file, char* parameter )