Building Quantum Espresso on Caviness/DARWIN
The build procedure outlined herein uses Open MPI on top of the Intel compiler suite.
Directory Preparation
To begin, choose a directory in which the Quantum Espresso version(s) will be built and installed. To build in your home directory, for example:
[user@login00.darwin ~]$ QE_BASEDIR=~/sw/quantum-espresso [user@login00.darwin ~]$ QE_BASEDIR_PRIVS=0700
If you are managing Quantum Espresso software for your entire workgroup, you could instead use
[user@login00.darwin ~]$ QE_BASEDIR="${WORKDIR}/sw/quantum-espresso" [user@login00.darwin ~]$ QE_BASEDIR_PRIVS=2770
If the directory hierarchy does not yet exist, it can be setup using
[user@login00.darwin ~]$ mkdir -p -m $QE_BASEDIR_PRIVS "${QE_BASEDIR}"
Source Preparation
In this example version 7.3 of quantum-espresso will be built. Our standard recipes for quantum-espresso will entail use of the Intel compilers, the MKL for BLAS/LAPACK/FFTW/ScaLAPACK/BLACS, and Open MPI for parallelism.
Unpack "qe-7.3-ReleasePack.tar.gz" will create a directory to hold our base build of quantum-espresso 7.3, naming it with the version identifier: qe-7.3
. The source is then unpacked therein:
[user@login00.darwin ~]$ tar -xvzf "${QE_BASEDIR}/qe-7.3-ReleasePack.tar.gz"
Compilation and Installation
We use cmake for compilation and installation on "v7.3" directory.
[user@login00.darwin ~]$ QE_INSTALL_PREFIX="${QE_BASEDIR}/v7.3" [user@login00.darwin ~]$ export QE_INSTALL_PREFIX [user@login00.darwin ~]$ QE_SRC_PREFIX="${QE_BASEDIR}/qe-7.3" [user@login00.darwin ~]$ mkdir -m $QE_BASEDIR_PRIVS "$QE_INSTALL_PREFIX" [user@login00.darwin ~]$ QE_BUILDDIR="${QE_SRC_PREFIX}/build" [user@login00.darwin ~]$ mkdir -m $QE_BASEDIR_PRIVS "$QE_BUILDDIR" [user@login00.darwin ~]$ cd "$QE_BUILDDIR"
Our current working directory is now the build root.
Here, we create build.sh
:
- build.sh.darwin
#!/bin/bash -l vpkg_require cmake/3.28.3 openmpi/4.1.5:intel-oneapi-2023 git PREFIX="${QE_INSTALL_PREFIX}" cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx \ -DCMAKE_Fortran_COMPILER=mpifort \ -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ -DCMAKE_C_FLAGS="-msse3 -axsse3,sse4.2,AVX,core-AVX2,CORE-AVX512" \ -DCMAKE_Fortran_FLAGS="-msse3 -axsse3,sse4.2,AVX,core-AVX2,CORE-AVX512" \ -DQE_ENABLE_OPENMP=ON -DCMAKE_BUILD_TYPE:STRING=RELWITHDEBINFO ../ make -j 20 make install
- build.sh.caviness
#!/bin/bash -l vpkg_require cmake/3.28.3 openmpi/4.1.4:intel-oneapi-2023 git PREFIX="${QE_INSTALL_PREFIX}" cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx \ -DCMAKE_Fortran_COMPILER=mpifort \ -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ -DCMAKE_C_FLAGS="-msse3 -axsse3,sse4.2,AVX,core-AVX2,CORE-AVX512" \ -DCMAKE_Fortran_FLAGS="-msse3 -axsse3,sse4.2,AVX,core-AVX2,CORE-AVX512" \ -DQE_ENABLE_OPENMP=ON -DCMAKE_BUILD_TYPE:STRING=RELWITHDEBINFO ../ make -j 20 make install
Executing the script compile and install quantum-expresso 7.3.
[user@login00.darwin build]$ ./build.sh
VALET Package Definition
With this version of quantum espresso built, the remaining step is to leverage VALET for setup of the runtime environment when you use the software. VALET automatically recognizes the standard directory layout, so configuring versions/variants of quantum espresso
is very straightforward. First, note your installation path:
[user@login00.darwin build]$ vpkg_rollback all [user@login00.darwin build]$ cd [user@login00.darwin ~]$ echo $QE_BASEDIR /home/user/sw/quantum-espresso
Since this build was done in the user's home directory, they were personal copies of the software and should use a VALET package definition file stored in ~/.valet
[user@login00.darwin ~]$ VALET_PKG_DIR=~/.valet ; VALET_PKG_DIR_MODE=0700
versus an installation made for an entire workgroup, which would store the VALET package definition files in $WORKDIR/sw/valet
[user@login00.darwin ~]$ VALET_PKG_DIR="$WORKDIR/sw/valet" ; VALET_PKG_DIR_MODE=2770
Whichever scheme is in-use, ensure the directory exists:
[user@login00.darwin ~]$ mkdir -p --mode=$VALET_PKG_DIR_MODE "$VALET_PKG_DIR"
VALET allows package definitions in a variety of formats (XML, JSON, YAML) but YAML tends to be the simplest format so we will use it here.
Package section
The package section of the definition file includes items that apply to all versions/variants of the software:
quantum-espresso: prefix: /home/user/sw/quantum-espresso description: quantum-espresso url: "https://www.quantum-espresso.org/"
The package identifier is the top-level key in the document — quantum-espresso
— and the value of $QE_BASEDIR
is the value of the prefix
key in this section. The URL and description are information taken from the official quantum-espresso web site.
Versions
The versions
key is used to provide a list of the versions/variants of the software:
quantum-espresso: prefix: /home/user/sw/quantum-espresso description: quantum-espresso url: "https://www.quantum-espresso.org/" versions: "v7.3": description: compiled with Open MPI, Intel compilers, MKL, ScaLAPACK dependencies: - openmpi/4.1.5:intel-oneapi-2023
The version identifier v7.3
is inferred to be the path prefix to the version in question here. The package's prefix (/home/user/sw/quantum-espresso
) with the version identifier appended (/home/user/sw/quantum-espresso/v7.3
) is implicit.
The implicit behavior is overridden by providing a prefix
key in the version definition: a relative path is appended to the package's prefix, an absolute path is used as-is.
It is a good idea to specify which version definition should act as the default. This yields the following package definition file
- quantum-espresso.vpkg_yaml.darwin
quantum-espresso: prefix: /home/user/sw/quantum-espresso description: quantum-espresso url: "https://www.quantum-espresso.org/" default-version: "v7.3" versions: "v7.3": description: compiled with Open MPI, Intel compilers, MKL, ScaLAPACK dependencies: - openmpi/4.1.5:intel-oneapi-2023
- quantum-espresso.vpkg_yaml.caviness
quantum-espresso: prefix: /home/user/sw/quantum-espresso description: quantum-espresso url: "https://www.quantum-espresso.org/" default-version: "v7.3" versions: "v7.3": description: compiled with Open MPI, Intel compilers, MKL, ScaLAPACK dependencies: - openmpi/4.1.4:intel-oneapi-2023
saved at $VALET_PKG_DIR/quantum-espresso.vpkg_yaml
.
Checking the definition file
The package definition file can be checked for proper syntax using the VALET command vpkg_check
:
[user@login00.darwin ~]$ vpkg_check "$VALET_PKG_DIR/quantum-espresso.vpkg_yaml" /home/user/.valet/quantum-espresso.vpkg_yaml is OK [quantum-espresso] { contexts: all actions: { QUANTUM_DASH_ESPRESSO_PREFIX=${VALET_PATH_PREFIX} (contexts: development) } https://www.quantum-espresso.org/ quantum-espresso prefix: /work/user/sw/quantum-espresso source file: /home/user/.valet/quantum-espresso.vpkg_yaml default version: quantum-espresso/v7.3 versions: { [quantum-espresso/v7.3] { contexts: all dependencies: { openmpi/4.1.5:intel-oneapi-2023 } compiled with Open MPI, Intel compilers, MKL, ScaLAPACK prefix: /work/user/sw/quantum-espresso/v7.3 } } }
The file had no errors in its YAML syntax. Notice also that the standard path (bin
) is found and noted by VALET!
Runtime environment
To load quantum-espresso 7.3 into the runtime environment, the vpkg_require
command is used:
[user@login00.darwin ~]$ vpkg_require quantum-espresso/v7.3 Adding dependency `binutils/2.35.1` to your environment Adding dependency `gcc/12.2.0` to your environment Adding dependency `intel-oneapi/2023.0.0.25537` to your environment Adding dependency `ucx/1.13.1` to your environment Adding dependency `openmpi/4.1.5:intel-oneapi-2023` to your environment Adding package `quantum-espresso/v7.3` to your environment [user@login00.darwin ~]$ which pw.x ~/sw/quantum-espresso/v7.3/bin/pw.x