This repo is a holding area for configuration files used to configure/compile Abinit on HPC clusters. Each configuration file contains a header with metadata in json format followed by the configure options supported by the Abinit build system. See files in the abiconfig/clusters directory.
The metadata section contains information such as the list of modules that must be loaded in order to configure/execute Abinit on the cluster, a brief description of the options activated and a list of keywords associated to the configuration file. For further information on the metadata section, see Contributing section.
The configuration file can be copied directly from this repository or, alternatively,
one can install the package and use the abiconf.py
script to search for ac files
by hostname, by keywords. abiconf.py
also provides commands to automate the configuration/make procedure
and generate templates for job scripts (see Using abiconf.py).
Contributions from users and sysadmins are welcome.
Note that abiconf.py
is just a collection of configuration files and
does not aim at becoming a package management tool for Abinit.
If you need a real package manager able to support multiple versions
and configurations of software, consider the following projects:
Both projects are designed for large supercomputing centers and they already provide configuration files to build Abinit.
Pre-compiled versions of Abinit for Linux and MacOSx are also available on the Abinit conda channel:
$ conda install abinit --channel abinit
These builds are useful especially if you want to try Abinit on your machine but they are not supposed to be used for high-performance calculations. For further information, please consult the abinit channel.
The easiest way to install abiconf is to use pip
, as follows:
pip install git+https://github.com/abinit/abiconfig.git@develop --user
The --user
option makes pip install packages in your home directory instead which doesn't require any special privileges.
The developmental version is available at the github repo. Clone the repo with:
$ git clone https://github.com/abinit/abiconfig.git
After cloning the source, cd to the abiconfig directory and type:
$ python setup.py install --user
or
$ sudo python setup.py install
if you have root privileges on the machine.
Please fork the project on github, if you plan to contribute to abiconfig
.
Use:
$ abiconf.py hostname nic5
to list the configuration files available for the nic5
machine.
If the machine name is not provided, the full list of configuration files is printed.
Use:
$ abiconf.py keys intel mkl
to find the configuration files containing the keywords: intel
and mkl
and
$ abiconf.py keys
to get the full list of keywords.
Once you have found a configuration file for your machine in the
abiconfig database (e.g. manneback-gcc-openmpi.ac
), use:
$ abiconf.py workon manneback-gcc-openmpi.ac
to create the build directory, then follow the instructions reported on the terminal to configure and compile the code.
Note that workon
must be executed within an Abinit directory tree containing the configure
script.
It's also possible to generate a submission script template with the syntax:
$ abiconf.py script manneback-gcc-openmpi.ac
and print the ac file to terminal with:
$ abiconf.py show manneback-gcc-openmpi.ac
Use
$ abiconf.py doc
to get the documentation of the different options.
Use
$ abiconf.py --help
to get the list of available commands and
$ abiconf.py command --help
to list the options supported by command
.
Fork the repo and add your ac file to the clusters
directory.
Each configuration file must start with a metadata section enclosed between two ---
markers.
The text between the markers represents a dictionary in json format followed by the
Abinit configure options in normalized form (remove the initial --
from the option name,
replace -
with _
).
Example:
#---
#{
#"hostname": "nic4",
#"author": "J. Doe",
#"date": "2016-09-30",
#"description": "Configuration file for nic4. Uses intel compilers, openmpi, mkl (sequential) and external netcdf4/hdf5",
#"keywords": ["linux", "intel", "openmpi", "mkl", "hdf5"],
#"qtype": "slurm",
#"pre_configure": [
# "module purge",
# "module load openmpi/1.7.5/intel2013_sp1.1.106",
# "module load intel/mkl/64/11.1/2013_sp1.1.106",
# "module load hdf5/1.8.13/openmpi-1.7.5-intel2013_sp1.1.106",
# "module load netcdf/4.3.2/openmpi-1.7.5-intel2013_sp1.1.106"
# ]
#}
#---
# Abinit configure options in normalized form follows.
#install architecture-independent files in PREFIX
#prefix="~/local/"
# MPI/OpenMP
with_mpi_prefix="${MPI_HOME}"
enable_mpi="yes"
enable_mpi_io="yes"
enable_openmp="no"
# BLAS/LAPACK provided by MKL (dynamic linking)
# See https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor
with_linalg_flavor="mkl"
with_linalg_libs="-L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lpthread -lm -ldl"
If possible, try to avoid hard-coded values e.g. use ${MKLROOT}
instead of the full path to the MKL library.
The user is supposed to load the modules defined in the pre_configure
section before running configure
and the modules with automatically set these environment variables.
The big advantage is that one link against a different MKL version by just changing the MKL module
declared in the json dictionary.
The following keywords must be defined in the json dictionary:
-
hostname
The name of machine (mandatory). Prefer the short version over the long version e.g. use
hmem
instead ofhmem.ucl.ac.be
-
date
Creation date in the format
yyyy-mm-dd
e.g.2011-12-24
(mandatory) -
author
The author of the configuration file (mandatory).
-
description
String or list of strings with info about the configuration file (mandatory)
-
keywords
List of strings with tags associated to the configuration file (mandatory). Use
abiconf.py keys
to get the list of keywords already used and try to re-use them for new files. -
pre_configure
List of shell commands to be executed before
configure
. e.g. commands to load modules required to build/run the executables. Optional but highly recommended. -
post_configure
List of shell commands to be executed after
configure
. Optional -
post_make
List of shell commands to be executed after
make
. Optional -
qtype:
String specifying the resource manager used by the cluster e.g.
qtype: "slurm"
. Used byabiconf script
command to generate a submission script template. Supported values:["shell", "slurm", "pbspro", "sge", "moab", "bluegene"]
Optional but highly recommended. -
qkwargs:
Dictionary with the options that will be used to generate the template for the given
qtype
. Optional.qkwargs
can be used to generate a template script that will work with the build specified by the ac file. For example manneback has different Slurm partions with nodes belonging to different intel families. The build defined inmanneback-gcc-openmpi.ac
is not compatible with the Harpertown/Nehalem nodes that must be excluded in the slurm script. To do so, we add:qkwargs": {"exclude": "mb-neh[070,201-212],mb-har[001-014],mb-har[101-116],mb-opt[111-116]"}
to the json dictionary. The template generated by
abiconf script manneback-gcc-openmpi-ac
will contain:#SBATCH --exclude=mb-neh[070,201-212],mb-har[001-014],mb-har[101-116],mb-opt[111-116]
See
abiconfig.core.qtemplate
for the list of options that can be specified for eachqtype
.