Skip to content

Input File Format#

Geometry input files#

FHI-vibes uses the FHI-aims geometry description format geometry.in. A detailed documentation of the file format can be found here.

Example#

An example geometry.in for fcc-silicon reads

lattice_vector 0.00 2.72 2.72
lattice_vector 2.72 0.00 2.72
lattice_vector 2.72 2.72 0.00

atom_frac 0.00 0.00 0.00 Si
atom_frac 0.25 0.25 0.25 Si

Task input files#

For performing a specific task, say, a geometry optimization, FHI-vibes employs single input files describing the task, e.g., a relaxation.in file describing the optimization according to the documentation.

The jconfigparser syntax#

The input files are parsed using jconfigparser . jconfigparser is an extension to the python standard library configparser with the following additions:

Example#

An example for an input file for running a geometry optimization:

[files]
geometry:                      geometry.in

[calculator]
name:                          lj

[calculator.parameters]
sigma:                         3.4

[relaxation]
driver:                        BFGS
fmax:                          0.001
workdir:                       ${calculator:name}.relaxation

[relaxation.kwargs]
maxstep:                       0.2

This file will be parsed to a nested dictionary:

settings = {
    "calculator": {"name": "lj", "parameters": {"sigma": 3.4}},
    "files": {"geometry": "geometry.in"},
    "relaxation": {
        "driver": "BFGS",
        "fmax": 0.001,
        "kwargs": {"maxstep": 0.2},
        "workdir": "lj.relaxation",
    },
}

[files] Section#

This section contains filenames.

geometry#

geometry gives the name of the geometry input file to be used for a calculation:

file = settings.files.get("geometry")

atoms = ase.io.read(file)

If there is just one geometry necessary for the given task and it is stored in geometry.in, this section can be omitted altogether.

geometries#

Via geometries, a wildcard expression for finding geometry files for computation can be given, e.g. geometries: samples/geometry.in.* would specifiy to run a calculation for all geometry input files found in the folder samples.

files = sorted(glob(settings.files.get("geometries")))

atoms_to_compute = [ase.io.read(file) for file in files]

primitive#

Give a reference primitive cell in a file, e.g., primitive: geometry.in.primitive

supercell#

Give a reference supercell in a file, e.g., supercell: geometry.in.supercell

Example#

Example for specifying to run a job for the structure in geometry.in, while attaching a reference primitive and supercell to the output trajectory:

[files]
geometry:                      geometry.in
primitive:                     geometry.in.primitive
supercell:                     geometry.in.supercell

...