exciting¶
Introduction¶
exciting
is a full-potential all-electron
density-functional-theory (DFT) package based on the
linearized augmented planewave (LAPW) method. It can be
applied to all kinds of materials, irrespective of the atomic species
involved, and also allows for the investigation of the core
region. The website is http://exciting-code.org/
The module depends on lxml https://lxml.de/
There are two ways to construct the exciting calculator.
Using keyword arguments to specify groundstate attributes
Use paramdict to specify an input file structure with a data structure of dictionaries.
See also the tutorial on the web page of exciting: http://exciting-code.org/lithium-atomic-simulation-environment
Constructor with Groundstate Keywords¶
One is by giving parameters of the ground state in the constructor. The possible attributes can be found at http://exciting-code.org/ref:groundstate:
Exciting(bin='excitingser', kpts=(4, 4, 4), xctype='LDA_PW')
Parameter Dictionary¶
When the paramdict keyword is used, the calculator translates the dictionary given into the exciting XML file format. Note $EXCITINGROOT environmental variable should be set: details at http://exciting-code.org/tutorials-boron
import os
from ase import Atoms
from ase.calculators.exciting import Exciting
# test structure, not real
a = Atoms('N3O', [(0, 0, 0), (1, 0, 0), (0, 0, 1), (0.5, 0.5, 0.5)], pbc=True)
calculator = Exciting(
dir='excitingtestfiles',
speciespath=os.environ['EXCITINGROOT']+'/species',
paramdict={'title': {'text()': 'N3O'},
'groundstate': {'ngridk': '1 2 3', 'tforce': 'true'},
'relax': {},
'properties': {'dos': {},
'bandstructure':
{'plot1d': {'path': {'steps': '100',
'point':
[{'coord': '0.75000 0.50000 0.25000', 'label': 'W'},
{'coord': '0.50000 0.50000 0.50000', 'label': 'L'},
{'coord': '0.00000 0.00000 0.00000', 'label': 'G'},
{'coord': '0.50000 0.50000 0.00000', 'label': 'X'},
{'coord': '0.75000 0.50000 0.25000', 'label': 'W'},
{'coord': '0.75000 0.37500 0.37500', 'label': 'K'}]
}}}}})
calculator.write(a)
The calculator constructure above is used to create this exciting input file:
<?xml version='1.0' encoding='UTF-8'?>
<input xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xml.exciting-code.org/excitinginput.xsd">
<title>N3O</title>
<structure speciespath="$EXCITINGROOT/species/" autormt="false">
<crystal>
<basevect>1.88972595820018 0.00000000000000 0.00000000000000</basevect>
<basevect>0.00000000000000 1.88972595820018 0.00000000000000</basevect>
<basevect>0.00000000000000 0.00000000000000 1.88972595820018</basevect>
</crystal>
<species chemicalSymbol="N" speciesfile="N.xml">
<atom coord="0.00000000000000 0.00000000000000 0.00000000000000"/>
<atom coord="0.00000000000000 0.00000000000000 0.00000000000000"/>
<atom coord="0.00000000000000 0.00000000000000 0.00000000000000"/>
</species>
<species chemicalSymbol="O" speciesfile="O.xml">
<atom coord="0.50000000000000 0.50000000000000 0.50000000000000"/>
</species>
</structure>
<relax/>
<groundstate tforce="true" ngridk="1 2 3"/>
<properties>
<dos/>
<bandstructure>
<plot1d>
<path steps="100">
<point coord="0.75000 0.50000 0.25000" label="W"/>
<point coord="0.50000 0.50000 0.50000" label="L"/>
<point coord="0.00000 0.00000 0.00000" label="G"/>
<point coord="0.50000 0.50000 0.00000" label="X"/>
<point coord="0.75000 0.50000 0.25000" label="W"/>
<point coord="0.75000 0.37500 0.37500" label="K"/>
</path>
</plot1d>
</bandstructure>
</properties>
</input>
The translation follows the following rules: String values are translated to attributes. Nested dictionaries are translated to sub elements. A list of dictionaries is translated to a list of sub elements named after the key of which the list is the value. The special key “text()” results in text content of the enclosing tag.
Muffin Tin Radius¶
Sometimes it is necessary to specify a fixed muffin tin radius different from the default. The muffin tin radii can be set by adding a custom array to the atoms object with the name “rmt”:
atoms.new_array('rmt', np.array([-1.0, -1.0, 2.3, 2.0] * Bohr))
Each entry corresponds to one atom. If the rmt value is negative, the default value is used. This array is correctly updated if the atoms are added or removed.
Exciting Calculator Class¶
- class ase.calculators.exciting.Exciting(dir='calc', paramdict=None, speciespath=None, bin='excitingser', kpts=(1, 1, 1), autormt=False, tshift=True, **kwargs)[source]¶
Exciting calculator object constructor
- dir: string
directory in which to execute exciting
- paramdict: dict
Dictionary containing XML parameters. String values are translated to attributes, nested dictionaries are translated to sub elements. A list of dictionaries is translated to a list of sub elements named after the key of which the list is the value. Default: None
- speciespath: string
Directory or URL to look up species files
- bin: string
Path or executable name of exciting. Default:
excitingser
- kpts: integer list length 3
Number of k-points
- autormt: bool
Bla bla?
- kwargs: dictionary like
list of key value pairs to be converted into groundstate attributes