The input file
koopmans
takes a single JSON file as an input. Here is an example, taken from Tutorial 1:
{
"workflow": {
"functional": "ki",
"method": "dscf",
"init_orbitals": "kohn-sham",
"from_scratch": true,
"alpha_numsteps": 1,
"pseudo_library": "sg15"
},
"atoms": {
"cell_parameters": {
"vectors": [[14.1738, 0.0, 0.0],
[0.0, 12.0, 0.0],
[0.0, 0.0, 12.66]],
"units": "angstrom",
"periodic": false
},
"atomic_positions": {
"units": "angstrom",
"positions": [
["O", 7.0869, 6.0, 5.89],
["O", 8.1738, 6.0, 6.55],
["O", 6.0, 6.0, 6.55]
]
}
},
"calculator_parameters": {
"ecutwfc": 65.0,
"ecutrho": 260.0,
"nbnd": 10
}
}
As you can see, the file is divided into three blocks: workflow, atoms, and calculator_parameters. Other valid blocks are kpoints, pseudopotentials, and plotting. These are all explained below.
The workflow block
The workflow
block contains variables that define the details of the workflow that we are going to run.
The atoms block
The atoms
block contains details about the atomic positions and the simulation cell. It contains two subdictionaries
atomic_positions
contains the atomic positions e.g.
"atomic_positions": { "units": "angstrom", "positions": [ ["O", 7.0869, 6.0, 5.89], ["O", 8.1738, 6.0, 6.55], ["O", 6.0, 6.0, 6.55] ] }
Valid options for
units
arealat
,angstrom
,bohr
, andcrystal
cell_parameters
describes the simulation cell. This can be specified explicitly
"cell_parameters": { "vectors": [[14.1738, 0.0, 0.0], [0.0, 12.0, 0.0], [0.0, 0.0, 12.66]], "units": "angstrom", "periodic": false },
(with units
angstrom
,bohr
, oralat
), or usingibrav
andcelldms
following the conventions of Quantum ESPRESSO e.g."cell_parameters": { "periodic": true, "ibrav": 2, "celldms": {"1": 10.2622} },
The kpoints block
The k_points
block specifies the k-point sampling e.g.
"kpoints": {
"grid": [2, 2, 2],
"offset": [0, 0, 0],
"path": "LGXKG"
},
There are five possible entries in this block
grid
a list of three integers specifying the shape of the regular grid of k-points
offset
a list of three integers, either
0
or1
. If1
, the regular k-point grid is offset by half a grid step in that dimensionpath
the path to be used in band structure plots, specified as a string of characters corresponding to special points of the Bravais lattice
density
the number k-points per inverse Angstrom along the path
gamma_only
set to
True
if the calculation is only sampling the gamma point
The pseudopotentials block
koopmans
ships with several pre-installed pseudopotential libraries. To use these, select a pseudo_library
in the workflow
block. Valid options include pseudo_dojo_standard/stringent
and sg15
.
Alternatively, you can provide your own pseudopotentials via the pseudopotentials
block, where we specify the filenames of the pseudopotentials for each element e.g.
"pseudopotentials": {"O": "O.upf", "H": "H.upf"}
The directory that these pseudopotentials are contained in should be provided via the pseudo_directory
keyword in the workflow
block. See here for more details on setting up pseudopotentials.
Warning
Koopmans currently only works with norm-conserving pseudopotentials
The calculator_parameters block
The calculator_parameters
block can be used to specify code-specific codes e.g.
"calculator_parameters": {
"ecutwfc": 60.0,
"pw": {
"system": {
"nbnd": 20
}
},
"w90": {
"bands_plot": true,
"projections": [[{"fsite": [ 0.25, 0.25, 0.25 ], "ang_mtm": "sp3"}],
[{"fsite": [ 0.25, 0.25, 0.25 ], "ang_mtm": "sp3"}]],
"dis_froz_max": 10.6,
"dis_win_max": 16.9
},
"ui": {
"smooth_int_factor": 4
}
},
Note that any keyword specified outside of a subblock (e.g. ecutwfc
in the above example) is applied to all calculators for which it is recognized keyword.
Note
Generally, you will need to provide very few keywords in this block. The vast majority of keywords for each calculation will be generated automatically. Notable exceptions to this are ecutwfc
and (if relevant) the Wannier90
projection
The pw subblock
This subblock contains keywords specific to pw.x
(see the list of valid pw.x keywords). Note that they should not be grouped by namelists as they are in a pw.x
input file.
The w90 subblock
This subblock contains keywords specific to wannier90.x
, which are documented here. The one keyword for which the syntax differs is the projections
block, via which the user specifies the projections used to initialize the Wannier functions.
An individual projection can be specified as either a dictionary or a string.
- As a dictionary
If specifying a projection via a dictionary, the required entries for this dictionary are
site
/csite
/fsite
an atom label/cartesian coordinate/fractional coordinate to be used as the projections’ center. The three are mutually exclusive.
ang_mtm
a string specifying the angular momentum states e.g.
"l=2"
The user can also optionally specify
zaxis
,xaxis
,radial
,zona
(see the Wannier90 User Guide for details).- As a string
If specifying a projection via a string, this string must follow the
Wannier90
syntax e.g."f=0.25,0.25,0.25:sp3"
These individual projections (either as dictionaries or as strings) must be provided to projections
within a list of lists. This is because for Koopmans calculations, we want to perform the Wannierization in quite a particular way
the occupied and empty manifolds must be wannierized separately.
the occupied or empty manifold can consist of several well-separated blocks of bands. In this instance it is desirable to Wannierize each block separately, preventing the Wannierization procedure from mixing bands that are far apart in energy space.
We can achieve both of the above via the list-of-lists syntax. Consider the following example for the wannierization of bulk ZnO
"w90": {
"projections": [
[{"site": "Zn", "ang_mtm": "l=0"}],
[{"site": "Zn", "ang_mtm": "l=1"}],
[{"site": "O", "ang_mtm": "l=0"}],
[{"site": "Zn", "ang_mtm": "l=2"},
{"site": "O", "ang_mtm": "l=1"}],
[{"site": "Zn", "ang_mtm": "l=0"}]
],
In ZnO, the bands form several distinct blocks. The first block of occupied bands have Zn 3s character, the next Zn 3p, then O 2s, and finally Zn 3d hybridized with O 2p. The first empty bands have Zn 4s character. You can see this reflected in the way the projections have been specified. If we were to run the workflow with this configuration, it will run five separate Wannierizations, one for each sub-list.
This means that
the occupied and empty manifolds will be wannierized separately, because the cumulative number of projections in the first four blocks is commensurate with the number of occupied bands in our system
we prevent mixing bands that belong to different sub-lists
See here for a more detailed tutorial on projections.
Note
The order of the projections blocks is important: they must run from lowest-energy to highest-energy.
Note
If disentanglement keywords such as dis_win_max
are provided, these will only be used during the Wannierization of the final block of projections
The pw2wannier subblock
This subblock contains pw2wannier90.x
keywords, in a single dictionary with no subdictionaries.
The kcp subblock
This subblock contains keywords specific to kcp.x
, a modified version of cp.x
for performing Koopmans calculations. In addition to the keywords associated with cp.x there are several new keywords associated with the Koopmans implementation in kcp.x
. Non-experts will never need to change these.
The ui subblock
This subblock controls the unfolding and interpolation procedure for generating band structures and densities of states from Γ-only supercell calculations.
The convergence block
This block can be used to customize a convergence calculation.
See here for a more detailed tutorial on performing convergence calculations.
The plotting block
This block can be used to customize the band structures and densities of states plots that koopmans
generates.
The ml block
Warning
This feature is experimental
This block controls the machine-learning of screening parameters.