Python tools to handle CP2K output files
Project description
cp2k-output-tools
Modular CP2K output file parsers, mostly in the form of regular expressions plus other tools to mangle various CP2K output:
cp2kparse... parse CP2K output (for restart & input files look at the cp2k-input-tools project) and allow easy selection of common values.xyz_restart_parser... when restarts occur during an MD you may end up with duplicated frames in the trajectory, this tool filters them (and can easily handle huge files)cp2k_bs2csv... convert a CP2K band structure file to multiple (one-per-set) CSV files for easier plotting. There is also an API available if you need to import bandstructure data into your application.cp2k_pdos... apply a convolution with Gaussians on a regular grid on the CP2K PDOS output and generate a CSV file for further processing or plotting. The same grid is used for all input files with the min/max of the grid automatically determined, but no summation of the different projections is done.
Requirements
- Python 3.6+
- regex 2021+
- click 8+
- numpy 1.19+
- optional: ruamel.yaml
For development: https://poetry.eustace.io/ https://pytest.org/
Usage: cp2kparse
There is a simple command-line interface cp2kparse:
$ cp2kparse --help
Usage: cp2kparse [OPTIONS] [FILE|-]
Parse the CP2K output FILE and return a structured output
Options:
-f, --format [json|yaml|highlight]
Output format (json or yaml are structure
formats, highlight shows which lines of the
output have been matched)
--color [auto|always] When to colorize output
-s, --safe-keys generate 'safe' key names (e.g. without
spaces, dashes, ..)
-S, --statistics print some statistics to stderr
-k, --key <PATH> Path, ex.: 'energies/total force_eval'
--help Show this message and exit.
$ cp2kparse calc.out
{
"cp2k": {
"cp2kflags: libint fftw3 libxc xsmm spglib": " ",
"data directory path": "/data/tiziano/cp2k/data",
"input file name": "Si-supercell-001.inp",
"is freely available from": "https://www.cp2k.org/",
"program compiled at": "Mon Sep 16 14:42:43 CEST 2019",
"program compiled for": "local",
"program compiled on": "tcpc18",
"source code revision number": "git:43f50e2",
"version string": "CP2K version 7.0 (Development Version)"
},
"dbcsr": {
"cpu multiplication driver": "XSMM",
"maximum elements for images": "UNLIMITED",
"multiplication size stacks": 3,
"multiplication stack size": 1000,
"multiplicative factor virtual images": 1,
"multrec recursion limit": 512,
"use multiplication densification": true
},
"energies": {
"total force_eval": -251.6873903110507
},
"global": {
"all-to-all communication in single precision": false,
"basis set file name": "BASIS_MOLOPT",
"coordinate file name": "__STD_INPUT__",
"cpu model name": "Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz",
"cpuid": 1002,
"ffts using library dependent lengths": false,
"force environment number": 1,
"global print level": "MEDIUM",
"method name": "CP2K",
"mm potential file name": "MM_POTENTIAL",
"mpi i/o enabled": true,
"number of threads for this process": 1,
"potential file name": "POTENTIAL",
"preferred diagonalization lib.": "SL",
"preferred fft library": "FFTW3",
"project name": "Si-supercell-001",
"run type": "ENERGY_FORCE",
"this output is from process": 0,
"total number of message passing processes": 1
},
"mulliken population analysis": {
"per atom": [
{
"charge": 7e-06,
"element": "Si",
"kind": 1,
"population": 3.999993
},
{
"charge": 0.0,
"element": "Si",
"kind": 1,
"population": 4.0
},
{
"charge": -0.0,
"element": "Si",
"kind": 1,
"population": 4.0
},
{
"charge": -1e-06,
"element": "Si",
"kind": 1,
"population": 4.000001
},
{
"charge": -0.0,
"element": "Si",
"kind": 1,
"population": 4.0
},
{
"charge": -1e-06,
"element": "Si",
"kind": 1,
"population": 4.000001
},
{
"charge": -1e-06,
"element": "Si",
"kind": 1,
"population": 4.000001
},
{
"charge": -0.0,
"element": "Si",
"kind": 1,
"population": 4.0
},
{
"charge": 0.000137,
"element": "Si",
"kind": 1,
"population": 3.999863
},
{
"charge": -2e-05,
"element": "Si",
"kind": 1,
"population": 4.00002
},
{
"charge": -0.000133,
"element": "Si",
"kind": 1,
"population": 4.000133
},
{
"charge": 2.1e-05,
"element": "Si",
"kind": 1,
"population": 3.999979
},
{
"charge": -0.000133,
"element": "Si",
"kind": 1,
"population": 4.000133
},
{
"charge": 2.1e-05,
"element": "Si",
"kind": 1,
"population": 3.999979
},
{
"charge": 0.000137,
"element": "Si",
"kind": 1,
"population": 3.999863
},
{
"charge": -2e-05,
"element": "Si",
"kind": 1,
"population": 4.00002
},
{
"charge": -3.9e-05,
"element": "Si",
"kind": 1,
"population": 4.000039
},
{
"charge": 3.6e-05,
"element": "Si",
"kind": 1,
"population": 3.999964
},
{
"charge": -1e-05,
"element": "Si",
"kind": 1,
"population": 4.00001
},
{
"charge": 1e-05,
"element": "Si",
"kind": 1,
"population": 3.99999
},
{
"charge": -3.9e-05,
"element": "Si",
"kind": 1,
"population": 4.000039
},
{
"charge": 3.6e-05,
"element": "Si",
"kind": 1,
"population": 3.999964
},
{
"charge": -1e-05,
"element": "Si",
"kind": 1,
"population": 4.00001
},
{
"charge": 1e-05,
"element": "Si",
"kind": 1,
"population": 3.99999
},
{
"charge": -3.9e-05,
"element": "Si",
"kind": 1,
"population": 4.000039
},
{
"charge": 3.6e-05,
"element": "Si",
"kind": 1,
"population": 3.999964
},
{
"charge": -3.9e-05,
"element": "Si",
"kind": 1,
"population": 4.000039
},
{
"charge": 3.6e-05,
"element": "Si",
"kind": 1,
"population": 3.999964
},
{
"charge": -1e-05,
"element": "Si",
"kind": 1,
"population": 4.00001
},
{
"charge": 1e-05,
"element": "Si",
"kind": 1,
"population": 3.99999
},
{
"charge": -1e-05,
"element": "Si",
"kind": 1,
"population": 4.00001
},
{
"charge": 1e-05,
"element": "Si",
"kind": 1,
"population": 3.99999
},
{
"charge": 6e-06,
"element": "Si",
"kind": 1,
"population": 3.999994
},
{
"charge": 3.5e-05,
"element": "Si",
"kind": 1,
"population": 3.999965
},
{
"charge": 3.3e-05,
"element": "Si",
"kind": 1,
"population": 3.999967
},
{
"charge": 9e-06,
"element": "Si",
"kind": 1,
"population": 3.999991
},
{
"charge": 3.3e-05,
"element": "Si",
"kind": 1,
"population": 3.999967
},
{
"charge": 9e-06,
"element": "Si",
"kind": 1,
"population": 3.999991
},
{
"charge": 3e-06,
"element": "Si",
"kind": 1,
"population": 3.999997
},
{
"charge": -0.000312,
"element": "Si",
"kind": 1,
"population": 4.000312
},
{
"charge": 3e-06,
"element": "Si",
"kind": 1,
"population": 3.999997
},
{
"charge": -0.000311,
"element": "Si",
"kind": 1,
"population": 4.000311
},
{
"charge": 3.4e-05,
"element": "Si",
"kind": 1,
"population": 3.999966
},
{
"charge": 1e-05,
"element": "Si",
"kind": 1,
"population": 3.99999
},
{
"charge": 3.4e-05,
"element": "Si",
"kind": 1,
"population": 3.999966
},
{
"charge": 1e-05,
"element": "Si",
"kind": 1,
"population": 3.99999
},
{
"charge": 6e-06,
"element": "Si",
"kind": 1,
"population": 3.999994
},
{
"charge": 3.5e-05,
"element": "Si",
"kind": 1,
"population": 3.999965
},
{
"charge": -9e-06,
"element": "Si",
"kind": 1,
"population": 4.000009
},
{
"charge": -3.3e-05,
"element": "Si",
"kind": 1,
"population": 4.000033
},
{
"charge": 0.000308,
"element": "Si",
"kind": 1,
"population": 3.999692
},
{
"charge": -4e-06,
"element": "Si",
"kind": 1,
"population": 4.000004
},
{
"charge": -3.6e-05,
"element": "Si",
"kind": 1,
"population": 4.000036
},
{
"charge": -7e-06,
"element": "Si",
"kind": 1,
"population": 4.000007
},
{
"charge": -9e-06,
"element": "Si",
"kind": 1,
"population": 4.000009
},
{
"charge": -3.3e-05,
"element": "Si",
"kind": 1,
"population": 4.000033
},
{
"charge": -8e-06,
"element": "Si",
"kind": 1,
"population": 4.000008
},
{
"charge": -3.3e-05,
"element": "Si",
"kind": 1,
"population": 4.000033
},
{
"charge": -3.5e-05,
"element": "Si",
"kind": 1,
"population": 4.000035
},
{
"charge": -6e-06,
"element": "Si",
"kind": 1,
"population": 4.000006
},
{
"charge": 0.000308,
"element": "Si",
"kind": 1,
"population": 3.999692
},
{
"charge": -4e-06,
"element": "Si",
"kind": 1,
"population": 4.000004
},
{
"charge": -8e-06,
"element": "Si",
"kind": 1,
"population": 4.000008
},
{
"charge": -3.3e-05,
"element": "Si",
"kind": 1,
"population": 4.000033
}
],
"total": {
"charge": 0.0,
"population": 256.0
}
},
"program info": {
"ended at": "2019-09-17 17:02:35.738",
"process id": "23773",
"ran by": "tiziano",
"ran on": "tcpc18",
"started at": "2019-09-17 17:01:19.273",
"started by": "tiziano",
"started in": "/users/tiziano/work/phonopy/example/Si-CP2K",
"started on": "tcpc18",
"stopped in": "/users/tiziano/work/phonopy/example/Si-CP2K"
}
}
and an API:
from cp2k_output_tools import parse_iter
with open("calc.out", "r") as fhandle:
for match in parse_iter(fhandle.read()):
print(match.values)
Usage: xyz_restart_cleaner
$ xyz_restart_cleaner orig_trajectory.xyz new_trajectory.xyz
found restart point @1, dropping 1 frames, flushing 1
flushing remaining 2 frames
Usage: cp2k_bs2csv
Given a .bs file as written by CP2K the script will generate CSV files with the same name and suffixes .set-X.csv in the same directory as the source file:
$ cp2k_bs2csv WO3.bs
writing point set WO3.bs.set-1.csv (total number of k-points: 11)
with the following special points:
GAMMA: 0.00000000 / 0.00000000 / 0.00000000
X: 0.00000000 / 0.50000000 / 0.00000000
writing point set WO3.bs.set-2.csv (total number of k-points: 11)
with the following special points:
X: 0.00000000 / 0.50000000 / 0.00000000
M: 0.50000000 / 0.50000000 / 0.00000000
writing point set WO3.bsset-3.csv (total number of k-points: 11)
with the following special points:
M: 0.50000000 / 0.50000000 / 0.00000000
GAMMA: 0.00000000 / 0.00000000 / 0.00000000
writing point set WO3.bs.set-4.csv (total number of k-points: 11)
with the following special points:
GAMMA: 0.00000000 / 0.00000000 / 0.00000000
R: 0.50000000 / 0.50000000 / 0.50000000
writing point set WO3.bs.set-5.csv (total number of k-points: 11)
with the following special points:
R: 0.50000000 / 0.50000000 / 0.50000000
X: 0.00000000 / 0.50000000 / 0.00000000
writing point set WO3.bs.set-6.csv (total number of k-points: 11)
with the following special points:
R: 0.50000000 / 0.50000000 / 0.50000000
M: 0.50000000 / 0.50000000 / 0.00000000
$ ls
WO3.cp2k-8.bs WO3.cp2k-8.bs.set-2.csv WO3.cp2k-8.bs.set-4.csv WO3.cp2k-8.bs.set-6.csv
WO3.cp2k-8.bs.set-1.csv WO3.cp2k-8.bs.set-3.csv WO3.cp2k-8.bs.set-5.csv
Development
$ poetry install
$ poetry run pytest -v
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cp2k-output-tools-0.5.0.tar.gz.
File metadata
- Download URL: cp2k-output-tools-0.5.0.tar.gz
- Upload date:
- Size: 20.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.5 CPython/3.9.6 Linux/5.8.0-1039-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c71786a6e0e99f1d706eea355977bc5d6771b40cb7d84afc7921ee9d5e9a0420
|
|
| MD5 |
827bd954e950b13183e4c8c32011aebc
|
|
| BLAKE2b-256 |
49c629ae884189bcb3b30ecc5506afc1a65bf5bb1218fb7829e15665a0267d73
|
File details
Details for the file cp2k_output_tools-0.5.0-py3-none-any.whl.
File metadata
- Download URL: cp2k_output_tools-0.5.0-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.5 CPython/3.9.6 Linux/5.8.0-1039-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8269ede667cf2eeaa1a55c8651a1c1921a549df796e098e52d68ef90815c8986
|
|
| MD5 |
6b6108ac9990605370c4863331f29182
|
|
| BLAKE2b-256 |
6ff6e711eb52478b1b63baf856f4efd8d6a9c4238a7e96c340250fd1d30cbe1e
|