Troubleshooting

True to any advanced computational task, encounters to warnings and errors can be frequent and inevitable when working with CP2K due to various reasons. Don’t panic: this page analyzes a selected catalog of possible issues and provides hints on how to address them.

This is a dynamic list attempting to cover more topics of interest; feel free to open requests for expansion, but please read first and bear in mind the recommendations about asking questions in the Foreward and FAQ. Moreover, here is a gentle reminder that the normal termination of a computational task does not inherently guarantee scientifically meaningful, accurate, rigorous and publishable results.

The Whereabouts of Input & Output

Before diving into the CP2K problems and solutions, here is a quick recap of basics about input/output of computer programming in general and of CP2K in particular. Well-versed or impatient readers can skip to Problems and Solutions below.

The standard streams of input/output connections include standard input (stdin) for reading data, standard output (stdout) for writing data and standard error (stderr) for writing error messages. In linux systems, they are represented by file descriptors, standardized as integer values 0 for stdin, 1 for stdout and 2 for stderr. During program execution, message passing is controlled by redirection with the > or >> syntax, and pipeline with the | syntax.

A typical MPI-parallel CP2K run with the command below specifies the file project.out as stdout to which a majority of log data is written, and the command-line interface (CLI) screen as stderr to which error message is written if any.

mpirun -np 2 -x OMP_NUM_THREADS=1 cp2k.psmp -i project.inp -o project.out

With the following command, the file project.out is still stdout due to 1> redirection, but at the same time it is also stderr due to the subsequent 2>&1 redirection.

mpirun -np 2 -x OMP_NUM_THREADS=1 cp2k.psmp -i project.inp 1>project.out 2>&1

Replacing -o project.out with | tee project.out as follows, the stdout from CP2K will be piped to the linux tee utility, which prints log data to the CLI screen and the file project.out simultaneously. The stderr is still the CLI screen as it is not redirected or piped.

mpirun -np 2 -x OMP_NUM_THREADS=1 cp2k.psmp -i project.inp | tee project.out

If CP2K is launched by job scheduling systems in a queue, the stdout and stderr may be set up with its own configurations; for instance, the Slurm Workload Manager defines --output=<filename> and --error=<filename> options for the srun command.

A CP2K input file usually contains some sections named PRINT that dictates whether and where a chunk of information will be printed. Take FORCE_EVAL/PRINT/FORCES as an example, which prints ATOMIC FORCES if defined:

&FORCE_EVAL
  &PRINT
    &FORCES ON
    &END FORCES
  &END PRINT
&END FORCE_EVAL

The FILENAME keyword inside the &FORCES section determines where the ATOMIC FORCES output should go. As stated in the manual, the default value if not explicitly defined is a string written as __STD_OUT__ for “the screen or standard logger”, which is synonymous with the stdout described above. Setting FILENAME in other ways will create a separate file to write the output.

Note that certain types of tasks like vibrational analysis, nudged elastic band, swarm, farming, …, have multiple output logs depending on the replica and parallelization in use; sometimes the single primary log (specified by -o option above) may not be as informative or primitive as the secondary logs (automatically generated per replica under the working directory) and it is necessary to locate the exact issue(s) from the latter. This applies to warnings and errors too, which in addition are typically issued on the first MPI rank of each replica.

Problems and Solutions

Program is stuck or killed for unknown reason

When the program appears to freeze and stop updating any of the logs for outputs, check immediately whether it is still running with ps aux or top/htop commands or with the job scheduler.

An out-of-memory (OOM) error can occur if the memory allocation for the program fails to meet the actual requirement during execution. This may or may not have a clear-cut message due to uncertainty in the timing, but may be confirmed in a re-run with the free or ps aux commands monitoring the memory consumption. If allocating more memory is not viable, reducing the number of MPI parallel processes or switching to MPI + OpenMP hybrid parallelism for the psmp build can reduce the total memory consumption as a compromise.

If CP2K is built with ELPA, it would be the default diagonalization library. Setting PREFERRED_DIAG_LIBRARY to SCALAPACK can probably circumvent some bugs like in github issue #4484.

When running a hybrid DFT calculation, where it is well-known that the evaluation of ERI for Hartree-Fock exchange and the in-core storage tends to be very memory-intensive, the upper bound of memory requirement depends on the number of MPI parallel processes and the value of MAX_MEMORY in MB. The first SCF cycle is usually very time-consuming due to the necessary initial evaluation of ERI, and so do not terminate the program too early as long as the memory is fine.

There are heavy tasks like optimization and nudged elastic band that have been reported to stuck for indeterminate time, which have rarely been reproduced reliably. In case it happens, chances are that adjusting the OPTIMIZER or OPT_TYPE can help, and utilizing the latest restart file to re-run the job until convergence is recommended.

Interleaved multiplicated output messages

A normal MPI parallel execution started as follows will be shown as 4 processes in ps aux or top/htop, with the output log project.out reflecting the parallelization setup.

mpirun -np 4 -x OMP_NUM_THREADS=1 cp2k.psmp -i project.inp -o project.out
 DBCSR| MPI: Number of processes                                               4
 DBCSR| OMP: Current number of threads                                         1

If instead 4 instances of the same message appear…

 DBCSR| MPI: Number of processes                                               1
 DBCSR| OMP: Current number of threads                                         1

… along with many other interleaved and multiplicated lines like PROGRAM STARTED AT {time} and PROGRAM PROCESS ID {pid}, then CP2K is not parallelized as intended, but run as several independent processes that are all writing to a common output log in some indeterminate order. This means that the environment is not configured properly and the active MPI library (as shown by which mpirun) is not the one that CP2K has been linked to (as shown by ldd cp2k.psmp).

Check everything that determines the environment variables and paths, including but not limited to ~/.bashrc and /etc/profile files, modules, and conda envs. If the CP2K is built from source with toolchain, do not forget to source the cp2k_env to load the dependencies as instructed.

Asterisks or NaN in the output

This is a general fortran behavior about how a fixed-width field format handles a numeric value that cannot be fitted in. For example, the edit descriptor F12.6 specifies a real float-type field with exactly 12 characters, including 6 for the fractional part and 1 for the decimal point (and 1 for the minus sign if negative), thus leaving only 5 places for the integer part; if the value to be printed is larger than 99999.999999 or smaller than -9999.999999, it would not fit in and a string of asterisks ************ would be shown instead. If something goes haywire and the value is not even a valid number any more, it would be represented as          NaN, where NaN is shorthand for “Not a Number”. Most of these field formats are designed with output layout, value precision and possible range in mind, so the presence of asterisks and NaN in the output should invoke some doubts on the reliability of very large or very small numeric results even if the calculation looks fine otherwise.

A certain type object was expected, found something else

A (integer|floating point|string) type object was expected, found (end of line|<something>),
File: <filename>, Line: <line>, Column: <col>

This kind of error arises from the parser of input files, and naturally is resolved by preparing or editing the file in accordance with the manual. Say, a structure input requiring XYZ format should not use CIF, and the XYZ file should have number of atoms on the first line, comments on the second line and each of the rest of (number of atoms) lines in a format of element-symbol X-coordinate Y-coordinate Z-coordinate.

CPASSERT failed

CPASSERT is one of the Error Handling mechanisms in CP2K intended for conditions that should hold most of the time, like some basic sanity checks for correct data types, matching matrix dimensions, or availability of essential elements for a certain routine. Therefore, CPASSERT failed is a minimal blanket statement for these unlikely events, only indicating the code location at the lower right corner of the message box.

When CPASSERT failed occur for a valid input file strictly following documentation, report to developers and justify the situation where the condition fails. The message may be revised for a clearer user-oriented phrasing upon reasonable request.

GEOMETRY wrong or EMAX_SPLINE too small

This error originates from closely contacting or outright overlapping atoms in the geometry that are detected while building a neighbor list. Although the keyword EMAX_SPLINE is for a Molecular Mechanics (MM) calculation with classical force fields, this error does not necessarily come from a MM or QM/MM task because neighbor lists are also widely used in quantum mechanics (QM).

Always remember to inspect the input structure in a visualization program as said in the section Starting structure and cell. Among the many possibilities of modelling errors, there are three frequently relevant pitfalls:

  • The file conversion procedure during structure preparation involve formats that do not record any information about periodicity or cell definition, or whose record is not yet universally recognized such as the extended XYZ specification;

  • The redefinition of cell vectors (most commonly by means of linear transformation) and the construction of surface slabs or supercells violate the original periodicity, or fail to deduplicate atoms sent to the same coordinate dictated by symmetry-equivalent positions;

  • The structure contains crystallographic disorder where one site has more than one possible type of atom, and the fractional occupancy is not handled well when creating the model, as discussed in a FAQ.

SCF run NOT converged

Refer to How to make a SCF run converge.

Messages mentioning LSD

LSD is an alias for UKS in some error messages such as Use the LSD option for an odd number of electrons and LSD: try to use a different multiplicity. CHARGE and MULTIPLICITY options should be set correctly based on the chemistry to be modelled. If the system is intended to be closed-shell, broken geometry like missing or duplicated hydrogen atoms may give rise to the errors.

Index to radix array not found

This error arises from a combination of high CUTOFF for the real-space grid and large cell size in some direction, which leads to a high internal plane-wave FFT length that the external FFT library may not support. Besides reducing cutoff and/or cell size, try enabling EXTENDED_FFT_LENGTHS or switching PREFERRED_FFT_LIBRARY.