Micro and Nano Mechanics Group
Revision as of 09:48, 23 September 2008 by Correaa (Talk)

In this document, we describe how to compile QBOX program on wcr.stanford.edu (Linux parallel cluster).

I designed this wiki such that you could in principle copy and paste the code part in your terminal, I encourage to do this to other writers of the group wiki. In any case, be aware of error messages, please report if something it is not working from this instructions or edit this wiki for other obvious typos.

Contents

General Remarks

Based on the Qbox build instructions page we will give some additional details. The difficult part of the installation is to correctly build the dependence libraries. In particular

  1. BLACS http://www.netlib.org/blacs
  2. ScaLAPACK http://www.netlib.org/scalapack
  3. FFTW 2.1.5 http://www.fftw.org
  4. Apache Xerces-C http://xerces.apache.org/xerces-c

these libraries will have to be installed in your local directory. To achieve this I use to create a directory called ~/usr where libraries and header files will stay:

 mk $HOME/usr
 mk $HOME/usr/local
 mk $HOME/local/bin

I also use to download software packages to ~/soft. This will make easier to establish absolute compilation paths for BLACS and Scalapack which have a non-standard installation procedure.

 mk $HOME/soft

I will assume that

  1. BLAS (or ATLAS) http://www.netlib.org or http://math-atlas.sourceforge.net
  2. LAPACK http://www.netlib.org/lapack

are installed system wide already (as they are currently in wcr.stanford).

Install FFTW

The easiest library to install is FFTW 2.1.5 (FFTW3 is available but to the best of my knowledge incompatible with FFTW2). Simple download it from the FFTW download page and decompress it:

 cd ~/soft
 wget http://www.fftw.org/fftw-2.1.5.tar.gz
 tar -zxvf fftw-2.1.5.tar.gz
 cd fftw-2.1.5

Then we do the usual configure and make install procedure, also indicating that we want a private installation in our ~/usr directory

 ./configure --prefix=$HOME/usr
 make
 make install

This will install the FFTW2 libraries in ~/usr/include and ~/usr/lib.

Install BLACS

Next download and untar BLACS from BLACS papers page:

 cd ~/soft
 wget http://www.netlib.org/blacs/mpiblacs.tgz
 tar -zxvf mpiblacs.tgz
 cd BLACS

We have to have our own version of a file called Bmake.inc in the ~/soft/BLACS directory. The following file will serve for BLACS/Bmake.inc

 wget http://micro.stanford.edu/mediawiki-1.11.0/images/BLACS_Bmake.inc.txt -O Bmake.inc

The file is just the same as BMAKES/Bmake.MPI-LINUX with the following changes in the variables definition:

 < BTOPdir = $(HOME)/soft/BLACS
 < MPIdir = /opt/mpich/gnu

Then change to the source directory and make, then copy the compiled libraries to ~/usr/lib/

 cd SRC/MPI
 make
 cp ~/soft/BLACS/LIB/*.a ~/usr/local/lib

Install Scalapack

Now it is the turn for Scalapack, get it from the Scalapack home page, untar it

 cd ~/soft
 wget http://www.netlib.org/scalapack/scalapack-1.8.0.tgz
 tar -zxvf scalapack-1.8.0
 cd scalapack

and put this compilation input file scalapack/SLmake.inc in the directory

 wget http://micro.stanford.edu/mediawiki-1.11.0/images/Scalapack_SLmake.inc.txt -O SLmake.inc

which is just the same as SLmake.inc.example with the following changes:

 < home          = $(HOME)/soft/scalapack-1.8.0
 < F77           = /opt/mpich/gnu/bin/mpif77
 < CC            = /opt/mpich/gnu/bin/mpicc

then make and copy the resulting library to ~/usr/lib

 cp ~/soft/scalapack-1.8.0/libscalapack.a ~/usr/local/lib

Install Xerces

Now the Xerces XML library, get it from the Xerces download page and untar

 wget http://apache.mirrors.hoobly.com/xerces/c/sources/xerces-c-src_2_8_0.tar.gz
 tar -zxvf xerces-c-src_2_8_0.tar.gz
 cd src/xerces

then run this script and the usual make install

 ./runConfigure -plinux -cgcc -xg++ -minmem -nsocket -tnative -rpthread -P $HOME/usr
 make
 make install

(there are some clues that indicate that we may need to use -rnone but it is not for sure.) This will make xerces installed in ~/usr/lib and ~/usr/include/xerces.

Ready to Install Qbox

Having the previous libraries installed in our own directory ~/usr and the rest of them already installed by the system administrator we shouldn't have any problems compiling Qbox

First step is to get the source code from Qbox download page and decompress it.

 cd ~/soft
 wget http://fpmd.ucdavis.edu/software/qbox/qbox-1.45.0.tgz
 tar -zxvf qbox-1.45.0.tgz
 cd qbox-1.45.0/src 

We have to have a makefile input file for our own system (wcr) in the current directory; for that we have created qbox-1.45.0/src/wcr.mk, we will also need to specify our target system (according to the filename wcr.mk)

 wget http://micro.stanford.edu/mediawiki-1.11.0/images/Qbox_wcr.mk.txt -O wcr.mk
 export TARGET=wcr

wcr.mk file distributed here is based on x8664_gcc.mk with the following changes:

 <  MPIDIR=/opt/mpich/gnu
 <  XERCESCDIR=$(HOME)/usr
 <  FFTWDIR=$(HOME)/usr
 <  BLASDIR=$(HOME)/usr/local/lib
 <  LAPACKDIR=$(HOME)/usr/local/lib
 <  CXX=/opt/mpich/gnu/bin/mpicxx
 <          -llapack -lf77blas -latlas -lm  \
 <          -Xlinker -lxerces-c -Bstatic \
 <           -lc -static-libgcc -lmpich  \
 <  # gfortran
 <  PLAT=LINUX
 <  BLACSdir      = $(HOME)/usr/local/lib
 <  SCALAPACK_DIR = $(HOME)/usr/local/lib

The following is not documented but very useful to free us from defining system variables in out rc files such as 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/usr/lib:$HOME/usr/local/lib'. We have to define this variable BEFORE compilation occurs (there is no need to define it before each run of Qbox):

 export LD_RUN_PATH=~/usr/lib

This will enforce the compiler to store the absolute location of the libraries (e.g. xerces) in the executable itself. Now we are ready to make

 make

This can take a couple of minutes, afterwards we can try to run a small example,

 cd ~/soft/qbox-1.45.0/examples/ch4
 /opt/mpich/gnu/bin/mpirun -np 2 ~/soft/qbox-1.45.0/src/qb gs.i

If it works we can copy the executable to our bin directory. Since the qbox versions change rather often it is convenient to keep track of the executable version and make a link to the latest version available.

 cp ~/soft/qbox-1.45.0/src ~/usr/local/bin/qbox-1.45.0
 ln -s ~/usr/local/bin/qbox-1.45.0 ~/usr/local/bin/qbox

(end of compilation tutorial)