SIESTA
De e-Ciencia
SIESTA (Spanish Initiative for Electronic Simulations with Thousands of Atoms) is an original method and a software implementation for performing electronic structure calculations and ab initio molecular dynamics simulations of molecules and solids.
Tabla de contenidos |
Obtaining SIESTA
Siesta is distributed free of charge for academics, under some conditions which have been stated into its licences. For information on academic and non-academic licenses available, refer to:
to download the code, you have to first log into the SIESTA site. You can register through the following link:
Compiling SIESTA
SIESTA is most commonly obtained as a gzip-compressed TAR file (.tgz), and contains a sample Makefile. In general, we will unpack it, edit the arch.make file in the Src/ dir, and make:
% tar -zxvf siesta-x.y.z.tgz % cd siesta-x.y.z/Src/ % ./configure % vi arch.make % make % make clean
The third step is optional, and tries to generate an arch.make file suited to our architecture. Usually manual edition of the latter (fourth step) will be necessary anyway.
Serial version
SIESTA needs the BLAS and LAPACK libraries to compile. We can use the BLAS and LAPACK libraries that come with SIESTA, modifying the third step above as follows:
% ./configure --with-siesta-blas --with-siesta-lapack
If you choose to compile them yourself (recommended), refer to the BLAS and LAPACK articles for instructions.
Sample arch.make
Once the required libraries have been compiled, you can compile a serial version of SIESTA in an int.eu.grid site modifying the stock arch.make.in file provided with SIESTA. It is recommended that you run the configure command, which will create a good starting arch.make from arch.make.in:
% cd Src/ % ./configure % vi arch.make
Then modify arch.make as follows. The SIESTA_ARCH variable is a string that describes your system. You can put whatever here:
SIESTA_ARCH = i686-linux-intel
You must provide the name of the Fortran compiler to use (including full path if it is not in the $path variable). Among the compiler flags, you can set a level of optimization. Experience suggests that a level 3 optimization leads to diminished reliability of executable, caused by excessive internal numerical inaccuracy. A level 2 optimization is thus recommended:
FC = ifort FFLAGS = -g -O2
You must also provide the path to the BLAS and LAPACK libraries (that you presumably compiled beforehand). Leave the COMP_LIBS variable as shown:
BLAS_LIBS = $(HOME)/Software/BLAS/BLAS/blas_LINUX.a LAPACK_LIBS = $(HOME)/Software/LAPACK/lapack-3.2/lapack_LINUX.a COMP_LIBS = dc_lapack.a
Parallel version
Apart from the aforementioned BLAS and LAPACK, and valid Open MPI libraries and compilers, the parallel version of SIESTA requires the BLACS and ScaLAPACK libraries.
Unlike with the former two, BLACS and ScaLAPACK are not included in SIESTA, so we are forced to compile them ourselves. For that, refer to the BLACS and ScaLAPACK articles, respectively.
Sample arch.make
Once the required libraries have been compiled, you can compile a parallel version of SIESTA in an int.eu.grid site modifying the stock arch.make.in file provided with SIESTA. It is recommended that you run the configure command, which will create a good starting arch.make from arch.make.in:
% cd Src/ % ./configure % vi arch.make
Then modify arch.make as follows. The SIESTA_ARCH variable is a string that describes your system. You can put whatever here:
SIESTA_ARCH = i686-linux-intel-openmpi
You must provide the name of the Fortran compiler to use (including full path if it is not in the $path variable). In general, it will be an Open MPI wrapper script for the actual compilers (Intel, in our site). As for the serial version, a level 2 optimization is recommended (read above):
FC = /opt/openmpi/bin/mpif90 FFLAGS = -g -O2 FPPFLAGS = -DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT
You must also provide the path to the BLAS and LAPACK libraries, as in the serial case. In addition, you must provide the path for the BLACS and ScaLAPACK libraries. Leave the COMP_LIBS variable as shown. Needless to say, the three arguments in the BLACS_LIBS variable go in a single line:
BLAS_LIBS = $(HOME)/Software/BLAS/BLAS/blas_LINUX.a
LAPACK_LIBS = $(HOME)/Software/LAPACK/lapack-3.2/lapack_LINUX.a
BLACS_LIBS = $(HOME)/Software/BLACS/BLACS/LIB/blacsF77init_MPI-LINUX-0.a \
$(HOME)/Software/BLACS/BLACS/LIB/blacs_MPI-LINUX-0.a \
$(HOME)/Software/BLACS/BLACS/LIB/blacsCinit_MPI-LINUX-0.a
SCALAPACK_LIBS = $(HOME)/Software/ScaLAPACK/scalapack-1.8.0/libscalapack.a
COMP_LIBS = dc_lapack.a
Finally, additional MPI information needs to be provided:
MPI_INTERFACE=libmpi_f90.a MPI_INCLUDE=.
Using SIESTA
Main article: SIESTA usage
SIESTA is available in the Grid through $VO_ICOMPCHEM_SW_DIR/siesta-serial (serial version), and $VO_ICOMPCHEM_SW_DIR/siesta-parallel (Open MPI version).
Benchmarks
Main article: SIESTA benchmarks
In general, the current performance of SIESTA for high parallelization is limited, and 2- or 4-CPU jobs are advised.
