Quick Start Guide

An Adios bp file is a container of variables and attributes, which can be either scalars or arrays. With the Adios Python wrapper, one can access them as NumPy’s array.

Reading data

In this quick start guide, we assume we have an Adios bp file (name: adios_test.bp) contains the following three variables and one attribute:

$ bpls -lva adios_test.bp
integer  NX                        scalar = 10
integer  size                      scalar = 2
double   temperature               {2, 10} = 0 / 19 / 9.5 / 5.76628
string   /temperature/description  attr   = "Global array written from 'size' processes"

Let’s start with importing Adios Python module as follows:

>>> import adios as ad

Note

A parallel version of Adios Python module is also available, called adios_mpi. We will discuss details later.

Then, open the Adios bp file (adios_test.bp) and briefly check its contents:

>>> f = ad.file('adios_test.bp')
>>> f
AdiosFile (path='adios_test.bp', nvars=3, var=['NX', 'temperature', 'size'],
nattrs=1, attr=['/temperature/description'], current_step=0, last_step=0, file_size=878)

Now let’s read a scalar variable, ‘NX’. We can access each variable by using Python’s dictionary-style interface:

>>> v = f['NX']
>>> v
AdiosVar (varid=0, type=dtype('int32'), ndim=0, dims=(), nsteps=1)

Note

The Adios python wrapper provides convenience to access variables as a class member, such as, f.NX, unless the name contains a separator (‘/’) in the middle.

Now v contains only meta data information. To read data from the disk, execute the following command:

>>> v.read()
10

Equivalently, we can use Numpy-style interface:

>>> v[...]

We can combine them all together:

>>> f['NX'][...]

In short, the following commands have the same effect:

>>> f['NX'][...]
>>> f['NX'].read()
>>> f.NX[...]
>>> f.NX.read()

Then, let’s read a multi-dimensional array, ‘temperature’.

>>> f['temperature'][...]
array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.],
       [ 10.,  11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.]])

We can read by slices, for example:

>>> f['temperature'][0:2,0:5]
array([[  0.,   1.,   2.,   3.,   4.],
       [ 10.,  11.,  12.,  13.,  14.]])

We can use the most of the NumPy’s slice syntax.

Attribute

Attribute reading is similar:

>>> at = f.attr['/temperature/description']
>>> at
AdiosAttr (name='/temperature/description', dtype=dtype('S42'),
value=array("Global array written from 'size' processes", dtype='|S42'))
>>> at.value
"Global array written from 'size' processes"

Unless attribute’s name is conflict with any variable name in the file, we can access attributes through the dictionary-style:

>>> f['/temperature/description'].value

Note

While variables are read by “read” function or slice interface, attributes are accessed through “value” property.

The Adios Python reorganizes the attributes in a tree structure based on the prefix of the name. For example, the following commands have the same effect:

>>> v = f['temperature']
>>> v['description'].value

By using the class member notation, the following command is also same:

>>> v.description.value

Writing data

Now, we will show how we can create the Adios BP file used in the previous section:

$ bpls -lva adios_test.bp
integer  NX                        scalar = 10
integer  size                      scalar = 2
double   temperature               {2, 10} = 0 / 19 / 9.5 / 5.76628
string   /temperature/description  attr   = "Global array written from 'size' processes"

First, we load necessary modules and prepare our Numpy data to save:

>>> import adios as ad
>>> import numpy as np
>>> NX = 10
>>> size = 2
>>> t = np.array(range(NX*size), dtype=np.float64)
>>> tt = t.reshape((size, NX))

I.e., we have two scalar variables (NX and size) and one 2-D array (tt).

Then, we initialize Adios:

>>> ad.init_noxml()

Then, we give a file name to create with Adios method:

>>> fw = ad.writer(fname, method='POSIX1')

“POSIX1” is one of many Adios’s write methods. Others are “MPI”, “MPI_AGGREGATE”, “FLEXPATH”, “DATASPACES”, etc. More detailed descriptions are in the Adios manual.

Now, we assign our values:

>>> fw['NX'] = NX
>>> fw['size'] = size
>>> fw['temperature'] = tt

To write an attribute, we can do as follows:

>>> fw.attr['/temperature/description'] = "Global array written from 'size' processes"

Finally, we let Adios to write a file by calling “close”

>>> fw.close()

Transform

Adios provides transform methods for data reduction and compressions, such as ZFP, SZ, zlib, etc. For the full list, use `adios_list_methods` command.

For an example, SZ transform method can be set by the following command:

>>> fw['temperature'].transform = 'SZ'

will compress temperature data with SZ with default parameters.

Method specific parameters can be set like:

>>> fw['temperature'].transform = 'SZ:errorBoundMode=ABS,absErrBound=1E-3'

An example of ZFP is as follows:

>>> fw['temperature'].transform = 'zfp:accuracy=0.001'