For developers

In this section, we provide notes for developers on how the code is structured. For full documentation, please refer to the API.

The code is organized in three main folders: the utils folder, the dbs folder, and the calc_modes folder.

The utils folder contains modules that encode functions useful to several calculation modes.

  • The constants module stores commonly used constants, as well as functions for converting between units.

  • The lattice module contains functions for working with crystal lattices, such as converting between crystal and cartesian coordinates.

  • The plot_tools contains functions for plotting.

The dbs folder contains classes that represent databases common to several calculation modes. For example, several calculation modes store information about k-points or q-points, so we have a RecipPtDB that represents sets of reciprocal points. These dbs classes typically use functions from the utils modules.

  • The RecipPtDB class represents sets of reciprocal points, such as k-points or q-points. Its methods correspond strongly to the lattice module.

  • The EnergyDB class represents a dispersion, such as a band structure or phonon dispersion. It contains methods for unit conversion.

Finally, the calc_modes folder contains classes that represent each Perturbo calculation mode. These calc_modes classes typically have attributes of dbs classes, and they may use functions from the utils modules, particularly the plot_tools module.