CP2K
In this section:
Description
According to the documentation of CP2K, CP2K is a quantum chemistry and solid state physics software package that can perform atomistic simulations of solid state, liquid, molecular, periodic, material, crystal, and biological systems.
Available Versions
cp2k/2023.1 (default)
cp2k/2026.1
cp2k/2026.1.gpu (with GPU support)
Note
To check the available versions:
module avail cp2k
Loading the Module
# Default version (CPU)
module load cp2k/2026.1
# GPU-enabled version
module load cp2k/2026.1.gpu
# Verify installation
cp2k --version
# Available environment variables
echo $CP2K_DATA # Directory with basis sets and potentials
Serial Job Submission
#!/bin/bash
#SBATCH -J cp2k_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 5-00:00:00
#SBATCH --mem=8G
export INPUT="h2o.inp"
export OUTPUT="h2o.out"
module load cp2k/2026.1
job-nanny cp2k.popt -i h2o.inp -o h2o.out
MPI Job Submission
#!/bin/bash
#SBATCH -J cp2k_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 7-00:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="h2o.inp"
export OUTPUT="h2o.out"
module load cp2k/2026.1
job-nanny mpirun -n 56 cp2k.popt -i h2o.inp -o h2o.out
OpenMP Job Submission
#!/bin/bash
#SBATCH -J cp2k_omp
#SBATCH -N 1
#SBATCH -c 28
#SBATCH -t 5-00:00:00
#SBATCH --mem=64G
export INPUT="h2o.inp"
export OUTPUT="h2o.out"
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
module load cp2k/2026.1
job-nanny cp2k.psmp -i h2o.inp -o h2o.out
Hybrid Job Submission (MPI+OpenMP)
#!/bin/bash
#SBATCH -J cp2k_hybrid
#SBATCH -N 2
#SBATCH --ntasks-per-node=4
#SBATCH -c 7
#SBATCH -t 7-00:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="h2o.inp"
export OUTPUT="h2o.out"
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
module load cp2k/2026.1
job-nanny mpirun -n 8 cp2k.psmp -i h2o.inp -o h2o.out
GPU Job Submission (version 2026.1.gpu)
The GPU-enabled version of CP2K offers significant acceleration for DFT calculations and other computationally intensive methods.
#!/bin/bash
#SBATCH -J cp2k_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:1
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G
export INPUT="h2o.inp"
export OUTPUT="h2o.out"
module load cp2k/2026.1.gpu
# CP2K automatically detects available GPUs
job-nanny cp2k.psmp -i h2o.inp -o h2o.out
Multi-GPU Job Submission
#!/bin/bash
#SBATCH -J cp2k_multi_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:4
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 16
#SBATCH -t 72:00:00
#SBATCH --mem=64G
export INPUT="large_system.inp"
export OUTPUT="large_system.out"
module load cp2k/2026.1.gpu
# Multiple GPUs for heavier calculations
job-nanny cp2k.psmp -i large_system.inp -o large_system.out
Hybrid Job Submission (MPI + GPU)
For very large systems, combine MPI parallelization between nodes with GPU acceleration within each node:
#!/bin/bash
#SBATCH -J cp2k_mpi_gpu
#SBATCH -p gpu
#SBATCH --gres=gpu:2
#SBATCH -N 2
#SBATCH --ntasks-per-node=4
#SBATCH -c 7
#SBATCH -t 96:00:00
#SBATCH --mem-per-cpu=4G
export INPUT="very_large.inp"
export OUTPUT="very_large.out"
module load cp2k/2026.1.gpu
job-nanny mpirun cp2k.psmp -i very_large.inp -o very_large.out
Environment Variables
When loading the CP2K module, the variable CP2K_DATA is defined:
module load cp2k/2026.1
echo $CP2K_DATA # /opt/gridunesp/dist/cp2k/2026.1/cp2k/data/
This variable points to the directory containing basis sets and potentials.
Example Input File
&GLOBAL
PROJECT H2O
RUN_TYPE ENERGY
PRINT_LEVEL LOW
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep
&DFT
BASIS_SET_FILE_NAME $CP2K_DATA/BASIS_MOLOPT
POTENTIAL_FILE_NAME $CP2K_DATA/POTENTIAL
&MGRID
CUTOFF 400
REL_CUTOFF 50
&END MGRID
&QS
METHOD GPW
&END QS
&SCF
SCF_GUESS ATOMIC
EPS_SCF 1.0E-6
MAX_SCF 200
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&END DFT
&SUBSYS
&CELL
ABC 10.0 10.0 10.0
&END CELL
&COORD
O 5.0 5.0 5.0
H 5.0 5.7 5.0
H 5.7 5.0 5.0
&END COORD
&KIND H
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE
&END KIND
&KIND O
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE
&END KIND
&END SUBSYS
&END FORCE_EVAL
Example Input File with GPU Configuration
To take advantage of GPUs, some optimizations can be added to the input file:
&GLOBAL
PROJECT H2O_GPU
RUN_TYPE ENERGY
PRINT_LEVEL LOW
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep
&DFT
BASIS_SET_FILE_NAME $CP2K_DATA/BASIS_MOLOPT
POTENTIAL_FILE_NAME $CP2K_DATA/POTENTIAL
&MGRID
CUTOFF 400
REL_CUTOFF 50
&END MGRID
&QS
METHOD GPW
EPS_DEFAULT 1.0E-12
&END QS
&SCF
SCF_GUESS ATOMIC
EPS_SCF 1.0E-6
MAX_SCF 200
&OT ON
MINIMIZER CG
PRECONDITIONER FULL_ALL
&END OT
&END SCF
&XC
&XC_FUNCTIONAL PBE
&END XC_FUNCTIONAL
&END XC
&PRINT
&PROGRAM_RUN_INFO ON
&END PROGRAM_RUN_INFO
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 10.0 10.0 10.0
&END CELL
&COORD
O 5.0 5.0 5.0
H 5.0 5.7 5.0
H 5.7 5.0 5.0
&END COORD
&KIND H
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE
&END KIND
&KIND O
BASIS_SET DZVP-MOLOPT-GTH
POTENTIAL GTH-PBE
&END KIND
&END SUBSYS
&END FORCE_EVAL
Job Array for Parameter Scan
#!/bin/bash
#SBATCH -J cp2k_array
#SBATCH --array=1-5
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="template.inp"
export OUTPUT="run_${SLURM_ARRAY_TASK_ID}/"
module load cp2k/2026.1
# Parameters for scan
CUTOFF_VALUES=(200 300 400 500 600)
CUTOFF=${CUTOFF_VALUES[$SLURM_ARRAY_TASK_ID-1]}
mkdir -p run_${SLURM_ARRAY_TASK_ID}
cd run_${SLURM_ARRAY_TASK_ID}
# Modify input file
sed "s/CUTOFF_VALUE/$CUTOFF/g" ../template.inp > input.inp
job-nanny cp2k.popt -i input.inp -o output.out
Job Array for Parameter Scan with GPU
#!/bin/bash
#SBATCH -J cp2k_gpu_array
#SBATCH --array=1-4
#SBATCH -p gpu
#SBATCH --gres=gpu:1
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G
# Different numbers of GPUs per job
GPU_VALUES=(1 2 3 4)
GPU_COUNT=${GPU_VALUES[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="template.inp"
export OUTPUT="gpu_${GPU_COUNT}/"
module load cp2k/2026.1.gpu
mkdir -p gpu_${GPU_COUNT}
cd gpu_${GPU_COUNT}
cp ../template.inp input.inp
# Request specific number of GPUs
#SBATCH --gres=gpu:${GPU_COUNT}
job-nanny cp2k.psmp -i input.inp -o output.out
GPU Performance Optimization
To get the best performance with the GPU version of CP2K:
Use the appropriate version of CP2K for your workload
Balance CPUs and GPUs - Too many tasks can overload the GPU
Adjust SCF parameters in the input file for faster convergence
Tip
For small problems, the GPU overhead may not be worth it. Test different configurations to find the best balance.
Performance Comparison
Version |
Recommended Use |
Relative Performance |
|---|---|---|
cp2k.popt (serial) |
Tests, small jobs |
1x |
cp2k.psmp (OpenMP) |
Single node, up to 28 threads |
2-5x |
cp2k.popt with MPI |
Multiple nodes |
10-50x |
cp2k.psmp with GPU |
High performance, large systems |
20-100x |
References
Documentation: https://www.cp2k.org/howto
Manuals: https://manual.cp2k.org/
Tutorials: https://www.cp2k.org/exercises
GPU optimization: https://www.cp2k.org/howto:gpu
See also
Quantum ESPRESSO - Alternative for DFT
Siesta - Alternative for DFT with localized bases
CUDA - GPU support on GridUnesp
Running Simulations - How to submit jobs