We recommend starting off by looking at the dedicated tutorials. These Jupyter notebooks will guide you through most of the functionality of the package.

The tutorials can also be run interactively on Binder.

Using configuration dictionaries

One of the most powerful parts of surfaxe is its ability to make all VASP input files needed for convergence testing. To do so surfaxe makes use of configuration dictionaries (config dicts for short). These are python dictionaries that contain information used to set up INCAR, KPOINTS and POTCAR files.

For example, if we were interested in setting up a single shot PBEsol calculation on SnO2 slabs, we could set up the config dict as follows:

config_dict = {
"INCAR": {
    "ALGO": "Normal",
    "EDIFF": 1e-06,
    "EDIFFG": -0.01,
    "ENCUT": 500,
    "GGA": "PS",
    "ISMEAR": 0,
    "ISYM": 2,
    "IWAVPR": 1,
    "LASPH": true,
    "LORBIT": 11,
    "LREAL": "auto",
    "NELM": 200,
    "NSW": 0,
    "PREC": "Accurate",
    "SIGMA": 0.02
    "reciprocal_density": 55
    "Sn": "Sn_d",
    "O" : "O"

Alternatively, one of the ready-made surfaxe config dicts (PBEsol.json, PBEsol_relax.json, PBE.json, PBE_relax.json or HSE06.json) can be used and further modified using user_incar_settings, user_kpoints_settings and user_potcar_settings. The relax config dicts contain additional parameters necessary for geometric relaxations of slabs. The POTCAR functional (i.e. PBE, PBE_54) can be chosen with user_potcar_functional.

Pymatgen documentation covers exact behaviour of the user_incar_settings, user_kpoints_settings and user_potcar_settings and all additional keyword arguments that can be supplied to slab generation scripts.