dev:packages

# Packages

The code base is structured into directories. This will allow for making CP2K more modular, i.e. consisting of smaller packages with fewer dependencies. Every directory therefore contains a file named PACKAGE . A typical PACKAGE, which uses python syntax, looks like this:

{
"description": "Distributed Block Compressed Sparse Row, A sparse matrix library",
"requires": ["../base", "../mpiwrap", "../acc", "libsmm_acc"],
"public": ["dbcsr_api.F"],
"archive": "libdbcsr",
}

The entries description and requires are mandatory.

The entry requires list all the directories on which the code in the current directory may depend upon. This means, modules in the current directory may only use modules from the listed directories. The requirements between directories must not have cycles. This is checked during compilation.

The optional entry public lists all files, which other packages may use. This allows to hide package internals. If the public entry is absent, all files within the package are public. This is checked during compilation.

The optional entry archive allows to overwrite the filename of the archive, which is created during compilation. The default name is “libcp2k<package_name>”.

# Creating New Packages

A very helpful tool for the creation of new packages is the plan_packages.py script. It takes as argument a package-plan.

cp2k/tools\$ ./plan_packages.py ./pkg_plan.txt

A package-plan describes changes to the current file-layout. It can be used to assign files to new or different packages. And it can be used to change the requirements of packages. The script will outputs the dependency-violations that the changes of a package-plan would create. Hence, it provides a convenient way to analyses module dependencies and to design new packages.