(Cray XC30)


These instructions are up-to-date as of July 2014.


These instructions for GPAW installation use the Scalable Python interpreter which reduces drastically the import time in massively parallel calculations. See the end of this document for installation instructions for Scalable Python.

First, the serial version of code is built with serial HDF5 library, e.g. for analysis purposes in the front-end:

module load scalable-python
module load cray-hdf5

GPAW can be build with a minimal (edit the correct paths for libxc)

extra_compile_args = ['-std=c99', '-O3']
compiler = 'cc'
mpicompiler = 'cc'
mpilinker= 'cc'
# edit library and include paths for libxc
include_dirs += ['/homeappl/home/jenkovaa/libxc/sisu/gcc/include']
library_dirs = ['/homeappl/home/jenkovaa/libxc/sisu/gcc/lib']

libraries = ['z', 'xc']

scalapack = True
hdf5 = True

define_macros += [('GPAW_NO_UNDERSCORE_CBLACS', '1')]
define_macros += [('GPAW_NO_UNDERSCORE_CSCALAPACK', '1')]
define_macros += [("GPAW_ASYNC",1)]

Then build the code (no installation at this point yet) with the script:

python build_ext

The build of parallel gpaw-python interpreter fails at this point with an error like:

build/temp.linux-x86_64-2.6/c/hdf5.o: In function 'h5p_set_fapl_mpio':
hdf5.c:(.text+0x1bad): undefined reference to 'H5Pset_fapl_mpio'

Next, switch to the parallel version of HDF5 library and do build and install:

module switch cray-hdf5 cray-hdf5-parallel
python install --home=path_to_install_prefix


Download libxc:


Configure and make (use GNU environment):

./configure --prefix=install_prefix CC=cc CFLAGS=-fPIC
make install

Scalable Python

Standard Python interpreter has serious bottleneck in large scale parallel calculations when many MPI tasks perform the same I/O operations during the import statetements. Scalable Python reduces the import time by having only single MPI task to perform import related I/O operations and using then MPI for broadcasting the data.

First, download the source code and switch to GNU environment:

git clone
module switch PrgEnv-cray PrgEnv-gnu

Use the following build script (change the installation prefix to a proper one):


export CC=cc
export CXX=g++
export MPICC=cc
# export XTPE_LINK_TYPE=dynamic
export LINKFORSHARED='-Wl,-export-dynamic -dynamic'
export MPI_LINKFORSHARED='-Wl,-export-dynamic -dynamic'


# Make zlib built-in to the interpreter
sed -i -e 's/^#zlib.*/zlib zlibmodule.c -I\/usr\/include -L\/usr\/lib64 -lz/' Modules/Setup.dist

./configure --prefix=$install_prefix --enable-mpi --disable-ipv6 2>&1 | tee log-conf

make 2>&1 | tee log-make
make install 2>&1 | tee log-inst

make mpi 2>&1 | tee log-make-mpi
make install-mpi 2>&1 | tee log-inst-mpi

Add then install_prefix/bin to your PATH, and download and install NumPy:

export PATH=install_prefix/bin:$PATH
tar xzf numpy-1.8.1.tar.gz
cd numpy-1.8.1
python install