Corebitals is a name of the new experimental feature in exciting. Its purpose is to provide a quick-and-dirty solution (or maybe it is just fine?) to problems that users encounter during their calculations of core level spectra. The problems are the following:
- deep core states are difficult to "catch" by means of local orbitals,
- the BSE module does not support the non-collinear-spin formalism required for treating spin-orbit interaction.
The deep-core problem can be solved by specifying a radial cut-off implemented in the corebitals branch. The example below is a species file for cerium. It implements the cut-off for the 2p states that are extremely compact and, thus, difficult to get by means of the usual local-orbital approach.
<?xml version="1.0" encoding="UTF-8"?> <spdb xsi:noNamespaceSchemaLocation="../../xml/species.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <sp chemicalSymbol="Ce" name="cerium" z="-58.0000" mass="255415.8430"> <muffinTin rmin="0.100000E-05" radius="2.2000" rinf="31.3556" radialmeshPoints="1200"/> <atomicState n="1" l="0" kappa="1" occ="2.00000" core="true"/> <atomicState n="2" l="0" kappa="1" occ="2.00000" core="true"/> <atomicState n="2" l="1" kappa="1" occ="2.00000" core="false"/> <atomicState n="2" l="1" kappa="2" occ="4.00000" core="false"/> <atomicState n="3" l="0" kappa="1" occ="2.00000" core="true"/> <atomicState n="3" l="1" kappa="1" occ="2.00000" core="true"/> <atomicState n="3" l="1" kappa="2" occ="4.00000" core="true"/> <atomicState n="3" l="2" kappa="2" occ="4.00000" core="true"/> <atomicState n="3" l="2" kappa="3" occ="6.00000" core="true"/> <atomicState n="4" l="0" kappa="1" occ="2.00000" core="true"/> <atomicState n="4" l="1" kappa="1" occ="2.00000" core="true"/> <atomicState n="4" l="1" kappa="2" occ="4.00000" core="true"/> <atomicState n="4" l="2" kappa="2" occ="4.00000" core="true"/> <atomicState n="4" l="2" kappa="3" occ="6.00000" core="true"/> <atomicState n="4" l="3" kappa="3" occ="2.00000" core="false"/> <atomicState n="5" l="0" kappa="1" occ="2.00000" core="false"/> <atomicState n="5" l="1" kappa="1" occ="2.00000" core="false"/> <atomicState n="5" l="1" kappa="2" occ="4.00000" core="false"/> <atomicState n="6" l="0" kappa="1" occ="2.00000" core="false"/> <basis> <default type="lapw" trialEnergy="0.1500" searchE="false"/> <custom l="0" type="apw+lo" trialEnergy="-1.0" searchE="false"/> <custom l="1" type="apw+lo" trialEnergy="-0.2" searchE="false"/> <custom l="2" type="apw+lo" trialEnergy="0.2" searchE="false"/> <custom l="3" type="apw+lo" trialEnergy="0.0" searchE="false"/> <lo l="0"> <wf matchingOrder="0" trialEnergy="-1.0" searchE="false"/> <wf matchingOrder="0" trialEnergy="0.2" searchE="false"/> </lo> <lo l="0"> <wf matchingOrder="0" trialEnergy="0.2" searchE="false"/> <wf matchingOrder="1" trialEnergy="0.2" searchE="false"/> </lo> <lo l="1"> <wf matchingOrder="0" trialEnergy="-0.20" searchE="false"/> <wf matchingOrder="2" trialEnergy="-0.20" searchE="false"/> </lo> <lo l="1" cutoff="1.00"> <wf matchingOrder="1" trialEnergy="-213.25" searchE="false"/> <wf matchingOrder="0" trialEnergy="-213.25" searchE="false"/> <wf matchingOrder="2" trialEnergy="-213.25" searchE="false"/> </lo> </basis> </sp> </spdb>
The second difficulty can be circumvented by introducing the spin-orbit splitting in spectrum by hand without treating the non-collinear-spin problem . At the moment, it is not clear how justified it is simply to alter a few eigenvalues, but I hope that the experience of users will tell it soon. To assist with the modification of Kohn-Sham spectra, I have prepared two small utilities. readsv (updated on 23.09.2014) extracts the contents from a binary file with second-variational eigenvalue. Then, a user can edit the Kohn-Sham spectrum that can be saved back into the binary file with writesv. To compile the tools, use the following (or similar commands).
ifort -o readsv readsv.f90
ifort -o writesv writesv.f90
Be aware that, during a combined groundstate and BSE runs, exciting produces a few different files with second-variational eigenvalues. Make sure that you edit the right ones!
If you need to change the second-variational eigenvalues, the standard BSE procedure is not suitable anymore, and the task plan should be employed. For a more detailed description of this option, see the input reference and related tutorial pages. For the present purposes, the BSE calculation can be split into three steps, for example, as follows.
- The necessary grounstate calculations are performed first.
<plan>
<doonly task="xsgeneigvec" />
<doonly task="scrgeneigvec" />
</plan>
- The second-variational spectra in EVALSV_QMT*.OUT and EVALSV_SCR.OUT are modified according to the needs.
- The remaining parts of the BSE calculation are performed.
<plan>
<doonly task="writepmatxs" />
<doonly task="scrwritepmat" />
<doonly task="screen" />
<doonly task="scrcoulint" />
<doonly task="exccoulint" />
<doonly task="BSE" />
</plan>
Enjoy using!
Andris