==============
Building CP2K
==============
This chapter will guide on how to install CP2K so that it can be used
with the GROMACS-CP2K interface. It will show you how to use the CP2K
toolchain to do this.
----------------
Downloading CP2K
----------------
CP2K can be downloaded from the `CP2K github repositry `_
------------------
Set up environment
------------------
Usually on a HPC machine commonly used software is available through
centrally installed modules. We suggest using these on your machine
if they are available rather than building your own version. Typically
CP2K recommends the use of the GCC compilers. You should also make
sure that an MPI implementation which is compatible with these is also
loaded. If in doubt consult the documentation of the machine.
Apart from this you will also need
* BLAS, SCALAPACK, LAPACK
* Python3
* FFTW
* CMAKE
BLAS, SCALAPACK and LAPACK are usually available through the Intel MKL library,
Cray-libsci, or OpenBlas/OpenSCALAPACK.
If building on a GPU you should also make sure that either the CUDA or
ROCM libraries are loaded.
----------------
CP2K toolchain
----------------
The simplest way to build CP2K if you are not familer with it is
with the CP2K toolchain.
.. code-block:: none
cd cp2k/tools/toolchain
The general way to invoke this is to use
.. code-block:: none
./install_cp2k_toolchain.sh -j
packages then be included by adding
.. code-block:: none
--with-package=install
excluded by adding
.. code-block:: none
--with-package=no
or directed to use the system version of the package by adding
.. code-block:: none
--with-package=system
A lot of the packages installed by default can be unnecessary. Therefore
we suggest these be excluded from the build as these can make the
build process more complex.
For CPU and GPU builds the important options to set are the ``--math-mode`` and the ``--mpi-mode``
``--math-mode``, which sets the maths library, has the following choices:
* ``mkl`` - use Intel MKL
* ``acml`` - use the AMD core maths library
* ``cray`` - use cray-libsci on cray machines
* ``openblas`` - use openblas
``--mpi-mode``, which sets the mpi library, has the following choices:
* ``mpich``
* ``openmpi``
* ``intelmpi``
* ``no`` - disable mpi
Additionally for GPU builds you need to either use ``--enable-cuda`` for
Nvidia GPUs or ``--enable-hip`` for AMD GPUs, and also set the ``--gpu-ver``
to your GPU version (see below).
CPU options
-----------
.. code-block:: none
./install_cp2k_toolchain.sh --math-mode= \
--mpi-mode= --with-hdf5=no
--with-sirius=no --with-libvori=no --with-gsl=no --with-spfft=no --with-spglib=no
GPU options
-----------
**CUDA**
.. code-block:: none
./install_cp2k_toolchain.sh --math-mode= \
--mpi-mode= --enable-cuda=yes --gpu-ver= \
--with-hdf5=no --with-sirius=no --with-libvori=no --with-gsl=no --with-spfft=no \
--with-spglib=no
**HIP**
.. code-block:: none
./install_cp2k_toolchain.sh --math-mode= \
--mpi-mode= --enable-hip=yes --gpu-ver= \
--with-hdf5=no --with-sirius=no --with-libvori=no --with-gsl=no --with-spfft=no \
--with-spglib=no
Enabling Plumed
---------------
If you would like to use Plumed for Metadynamics simulations in CP2K you can
add:
.. code-block:: none
--enable-plumed=install
---------------
Compiling CP2K
---------------
After the toolchain has completed it will produce an environment setup file
in:
.. code-block:: none
cp2k/tools/toolchain/install/setup
and a selection of arch files e.g. ``local.ssmp``, ``local.psmp``, ``local.popt``
The ``.psmp`` file which has MPI and threading enabled is the most useful of these.
You should first source the setup:
.. code-block:: none
source install/setup
and then copy the arch files to cp2k/arch
.. code-block:: none
cp install/arch/* ../../../../arch
For a CUDA or HIP build there will be a ``local_cuda.psmp`` or a ``local_hip.psmp``
arch file created in addition. You should use this if you
wish to use the GPU offloading.
For the top level cp2k directory you can then compile with the arch file
of your choice using:
.. code-block:: none
make -j 12 ARCH=local VERSION=psmp
And then after this build libcp2k which is required for the GROMACS-CP2K
interface.
.. code-block:: none
make -j 12 ARCH=local VERSION=psmp libcp2k
-----------------------
Building the interface
-----------------------
For information on building the GROMACS-CP2K interface please see the
dedecated `GROMACS page `_