XSPECTRA
A tool for X-ray absorption spectra (XAS) calculations
G. Radtke* & N. Mas*,
*Institut
de Minralogie, de Physique des Matriaux et de Cosmochimie,
Universit Pierre et Marie Curie, Sorbonne Universits
Synchrotron SOLEIL
Slides courtesy of O. Bunu, M. Calandra and D. Cabaret
EWinS 2016 - EUSpec Winter School on Core level spectroscopies
Ajdovina, Slovenia,
February 5th 2016
Outline
1. Introduction on XAS
2. The PAW theory
3. Hands on (I) : Si-K edge in
-quartz SiO2
-GIPAW pseudopotential generation for Si and Si1s*
-SCF calculation for -quartz SiO2 unit cell without/with core-hole
-core wave-function extraction
4. The Lanczos algorithm
5. Hands on (II) : Si-K edge in
-quartz SiO2
-XSpectra calculations for -quartz SiO2 unit cell without/with core-hole
- Supercell calculation : 2x2x2 cell for
-quartz SiO2
6. Hands on (III) : Dipolar and Quadrupolar contributions at the Ni-K edge in NiO
7. Summary
A probe of the projected density of unoccupied electronic states
The absorption cross-section reads :
conduction
(!) = 4 0 ~!
X
i,f
|h
f |O| i i|
(Ef
Ei
~!)
Prefactor
Final one-electron state (atomic state,
molecular orbital, Bloch state, )
Transition operator (electric dipole, ...)
valence
Initial one-electron (core-state)
Energy conservation of the system
(specimen + photon)
Assuming a transition operator of the form (electric dipole
approximation) :
O r
2p
2s
The angular part of the matrix element leads to :
`f = `i 1
In a monoelectronic picture (weak e- - e- interaction) :
1s
K (or L1) edges probe p-LDOS, L23 edges probe s+d-LDOS,
M45 edges probe p+f-LDOS, ....
XSpectra
What is it ?
XSpectra calculates X-ray absorption dipolar and quadrupolar cross sections in the preedge to near-edge region within the single particle approximation (i.e. mostly K or L1 edges
but also certain L23 edges)
Where can I find XSpectra ?
XSpectra is distributed in the QUANTUM-ESPRESSO package
([Link]
Can I use it ?
XSpectra is distributed under the GNU licence, so you can use it for free. Please remember
to cite the following papers to acknowledge people building the software:
P. Giannozzi et al., J. Phys. Condens. Matter 21, 395502 (2009).
C. Gougoussis, M. Calandra, A. P. Seitsonen and F. Mauri, Phys. Rev. B 80, 075102 (2009)
M. Taillefumier, D. Cabaret, A. M. Flank and F. Mauri, Phys. Rev. B 66, 195107 (2002)
Outline
1. Introduction on XAS
2. The PAW theory
3. Hands on (I) : Si-K edge in
-quartz SiO2
-GIPAW pseudopotential generation for Si and Si1s*
-SCF calculation for -quartz SiO2 unit cell without/with core-hole
-core wave-function extraction
4. The Lanczos algorithm
5. Hands on (II) : Si-K edge in
-quartz SiO2
-XSpectra calculations for -quartz SiO2 unit cell without/with core-hole
- Supercell calculation : 2x2x2 cell for
-quartz SiO2
6. Hands on (III) : Dipolar and Quadrupolar contributions at the Ni-K edge in NiO
7. Summary
The PAW (Projected Augmented Wave) method
We need to reconstruct the all electron (AE) states from pseudo (PS) states
(Note : AE states do not mean many-electron states !!!)
The problem arises for | f i in the absorption cross-section, as we only
get | f i from the PP-PW calculation. | i i is an atomic core-state.
We admit that a linear transformation
T exists, such that :
| i
| i = T | i
mapping
P. E. Blchl, Phys. Rev. B 50, 17953 (1994)
The PAW (Projected Augmented Wave) method
T
T
is linear
differs from identity in the core (augmentation) regions R only :
T =1+
X
R
TR = 1 +
X
R,n
R,n i
| R,n i h
pR,n |
sum over atomic sites,
(`, m) and eventually,
a channel index j
R B
C
RB
all electron partial waves
pseudo partial waves
Projection functions (one per (`, m) channel)
pR,n i are 0 outside R
(i) |
D
pR,n | R0 ,n0 i = RR0 nn0
(ii) Inside R , h
or
X
n
|
pR,n ih R,n | = 1
Notes : (i) | R,n i and | R,n i coincide outside R
(ii) A natural choice for | R,n i are the solution of the radial Schrdinger equation for the
isolated atom
Cross-section in the PAW formalism
Using| f i = T | f i, we get :
f |O| i i
= h f |O| i i +
X
R,n
h f |
pR,n ih
R,n |O| i i
X
R,n
h f |
pR,n ih R,n |O| i i
Here, | i i is localized on the site of the absorbing atom R0 so that all matrix elements will be
negligible except for R
= R0
f |O| i i
Using
X
n
h f |O| i i +
X
n
h f |
pR0 ,n ih
R0 ,n |O| i i
X
n
h f |
pR0 ,n ih R0 ,n |O| i i
|
pR,n ih R,n | = 1 , the first and last terms cancel, so that :
f |O| i i
X
n
R0 i =
Defining |'
h f |
pR0 ,n ih
X
n
|
pR0 ,n ih
R0 ,n |O| i i
R0 ,n |O| i i,
(!) = 4 0 ~!
X
f
the cross-section finally reads :
|h f |'R0 i|2 (Ef
M. Taillefumier et al. , Phys. Rev. B 66, 195107 (2002)
Ei
~!)
Practical PAW for XAS
In the expression :
|'R0 i =
X
n
|
pR0 ,n ih
R0 ,n |O| i i
The sum runs over a complete set, i.e. an infinite number of projectors !!
In practice a finite number of projectors is enough :
1 projector/channel (`)
generally yields wrong intensities
wrong dipole/quadrupole ratio
2 projectors/channel (`)
correct intensities in the near edge region (~ 50 eV above the edge, in most of the cases)
need to be linearly independent (i.e. , span a 2 x 2 subspace)
Finally, we need the core WF without the core-hole and the AE partial-waves (from PP
R0 i
generation) to fully determine |'
Lets go for an example : the Si and the Si1s* ultrasoft PPs
Outline
1. Introduction on XAS
2. The PAW theory
3. Hands on (I) : Si-K edge in
-quartz SiO2
-GIPAW pseudopotential generation for Si and Si1s*
-SCF calculation for -quartz SiO2 unit cell without/with core-hole
-core wave-function extraction
4. The Lanczos algorithm
5. Hands on (II) : Si-K edge in
-quartz SiO2
-XSpectra calculations for -quartz SiO2 unit cell without/with core-hole
- Supercell calculation : 2x2x2 cell for
-quartz SiO2
6. Hands on (III) : Dipolar and Quadrupolar contributions at the Ni-K edge in NiO
7. Summary
Practical details
cp -r ~/TutorialXSpectra /scratch/
cd /scratch/TutorialXSpectra/
Directory structure:
./pseudo/
pseudopotentials for this tutorial
./PPgeneration/
input files necessary to generate a GIPAW pseudopotential for Si
./SiO2
./SiO2h
./SiOsupercell
./NiO
input files to be modified for the examples
./*/outdir/
tmp output
./solutions/
reference inputs and outputs
./references/
relevant papers, the .pdf of these lecture and manual INPUT_XSPECTRA
Calculation flow for XAS with XSpectra
Prepare the GIPAW pseudopotentials
Extract the core wavefunction
Prepare input file and run SCF calculation
Prepare input file and run XSpectra
GIPAW (Gauge independent PAW pseudopotentials)
The GIPAW pseudopotential includes all the reconstruction information
needed to run XSPECTRA
needed for the absorbing atom only (non-absorbing atoms accept
any kind of pseudopotential)
contains the following information on the absorbing atom:
the core wavefunction without hole
the all electron partial waves atomic states
the Blchl projectors
can be obtained with the atomic code ld1.x
Generation of (GI)PAW pseudopotential
We want to study the Si K-edge in -quartz (SiO2) in the electric dipole approximation. This
corresponds to electronic transitions :
1s core-state
unoccupied p states
We only need a PP with two p projectors. We add the s projectors as an exercise even if they
are not required
Projector
channel
First projector
Energy
Second projector
Energy
optional
3s state
4s state
mandatory
3p state
4p state
Remember that a minimum of 2 projectors/channel is needed !!
Generation of (GI)PAW pseudopotential
$ cd PPgeneration
$ gedit [Link]
&input
title='Si',
zed=14.,
rel=1,
config=1s2 2s2 2p6 3s2 3p2 3d-2 4s0 4p0',
iswitch=3,
dft='PBE
/
Generation of (GI)PAW pseudopotential
File [Link]
&input
title='Si',
zed=14.,
rel=1,
config=1s2 2s2 2p6 3s2 3p2 3d-2 4s0 4p0',
iswitch=3,
dft='PBE
/
Atomic number
Generation of (GI)PAW pseudopotential
File [Link]
&input
title='Si',
zed=14.,
rel=1,
config=1s2 2s2 2p6 3s2 3p2 3d-2 4s0 4p0',
iswitch=3,
dft='PBE
/
Electronic configuration of the isolated atom.
3s, 3p, 4s and 4p states must be included because we want to
generate projectors at their energies.
Generation of (GI)PAW pseudopotential
File [Link]
&input
title='Si',
zed=14.,
rel=1,
config=1s2 2s2 2p6 3s2 3p2 3d-2 4s0 4p0',
iswitch=3,
dft='PBE
/
Exchange-correlation functionnal (PZ, PW91, BP, PBE )
The pseudopotentials for all atoms in the calculation must have
the same functionnal.
Generation of (GI)PAW pseudopotential
File [Link]
&inputp
pseudotype=3,
file_pseudopw='[Link]-us_gipaw.UPF',
lloc=2,
tm=.true.
which_augfun='PSQ'
rmatch_augfun=1.8
nlcc=.true.,
new_core_ps=.true.,
rcore=1.3,
lgipaw_reconstruction=.true.
/
Type of the pseudopotential:
2 for Norm-conserving
3 for Ultrasoft
Generation of (GI)PAW pseudopotential
File [Link]
&inputp
pseudotype=3,
file_pseudopw='[Link]-us_gipaw.UPF',
lloc=2,
tm=.true.
which_augfun='PSQ'
rmatch_augfun=1.8
nlcc=.true.,
new_core_ps=.true.,
rcore=1.3,
lgipaw_reconstruction=.true.
/
File where the generated PP is written
Generation of (GI)PAW pseudopotential
File [Link]
&inputp
pseudotype=3,
file_pseudopw='[Link]-us_gipaw.UPF',
lloc=2,
tm=.true.
which_augfun='PSQ'
rmatch_augfun=1.8
nlcc=.true.,
new_core_ps=.true.,
rcore=1.3,
lgipaw_reconstruction=.true.
/
Flag to generate pseudo-potentials containing GIPAW information
Generation of (GI)PAW pseudopotential
File [Link]
5
3S 1
3S 1
3P 2
3P 2
3D 3
/
&test
/
4
3S 1
4S 2
3P 2
4P 3
0 2.00 0.00
0 0.00 6.00
1 2.00 0.00
1 0.00 6.00
2 -2.00 -0.30
2.00
1.40
2.00
1.40
2.00
2.10
2.10
2.10
2.10
2.00
0.0
0.0
0.0
0.0
0.0
Number of wave functions
to be pseudized
Number of projectors
0
0
1
1
2.00
0.00
2.00
0.00
0.00
0.00
0.00
4.00
2.00
2.00
1.40
1.40
2.10
2.10
2.10
2.10
0.0
0.0
0.0
0.0
Generation of (GI)PAW pseudopotential
File [Link]
5
3S 1
3S 1
3P 2
3P 2
3D 3
/
&test
/
4
3S 1
4S 2
3P 2
4P 3
0 2.00 0.00
0 0.00 6.00
1 2.00 0.00
1 0.00 6.00
2 -2.00 -0.30
2.00
1.40
2.00
1.40
2.00
2.10
2.10
2.10
2.10
2.00
0.0
0.0
0.0
0.0
0.0
Generation parameters
0
0
1
1
2.00
2.00
1.40
1.40
2.10
2.10
2.10
2.10
0.0
0.0
0.0
0.0
Projectors parameters
2.00
0.00
2.00
0.00
0.00
0.00
0.00
4.00
The projectors parameters are the same as the generation
parameters except for their energy position
Generation of (GI)PAW pseudopotential
$BIN/ld1.x < [Link] > [Link]
Generate the pseudopotential [Link]-us_gipaw.UPF
Pseudopotentials must be generated with care.
Tests are required (but its not the purpose of this tutorial).
Inclusion of a core-hole
In the final state, a core-hole is
present on the absorbing atom
valence
It can be included in the pseudopotential
In our case of Si-K edge, it corresponds to a
1s core-hole
2p
2s
1s
Including a core-hole in a PP
$ cp [Link]
[Link]
$ gedit [Link]
Changes to make
title=Sih
config=1s1 2s2 2p6 3s2 3p2 3d-2 4s0 4p0',
file_pseudopw='[Link]-us_gipaw.UPF',
Hole in the 1s state
$ $BIN/ld1.x < [Link] > [Link]
Generate the pseudopotential file : [Link]-us_gipaw.UPF
$ cp *.UPF ../pseudo
$ cd ../pseudo
Including of a core-hole in a PP
Pseudopotentials including GIPAW informations are available in the
online QUANTUM-ESPRESSO pseudopotential table.
[Link]
e.g. Ni.star1s-pbe-sp-mt_gipaw.UPF
starNs
: a core-hole in the s state with principal quantum number N.
PBE
: the exchange-correlation functional used during PP generation
gipaw : gipaw information is included in the absorbing atom.
If not, you may find pslibrary on [Link] useful :
Add the reconstruction information (gipaw keyword + list of projectors) to the
existing ld1 inputs and generate your own GIPAW pseudopotentials.
Calculation flow for XAS with XSpectra
Prepare the GIPAW pseudopotentials
Extract the core wavefunction
Prepare input file and run SCF calculation
Prepare input file and run XSpectra
Getting core Wave-function
Simply run the following shell script (located in the XSpectra/tools directory in
the Quantum Espresso distribution) :
$ cd ../pseudo
$ /scratch/XSpectra/tools/[Link] < Si.pbemt_gipaw.UPF > [Link]
The pseudopotential without a core-hole should be used : there is no corehole in the initial state.
The .wfc file contains the radial part of | i i obtained from an atomic AE SCF
calculation, it is therefore an AE wave-function. This WF is required by XSpectra.
Calculation flow for XAS with XSpectra
Prepare the GIPAW pseudopotentials
Extract the core wavefunction
Prepare input file and run SCF calculation
Prepare input file and run XSpectra
quartz SCF calculation
Trigonal Structure :
Space Group: P3221
a = b = 4.9138,
c = 5.4052
= = 90,
=120
9 atoms in the unit cell :
3 Si
Si
O
6O
x
3a 0.4670
6c 0.4131
y
z
0.0000 0.0000
0.2677 0.1189
Hexagonal unit cell
quartz SCF calculation
$ cd ../SiO2
$ gedit [Link]
...
/
&system
ibrav = 4 ,
A = 4.9138,
C = 5.4052,
nat = 9 ,
The absorbing atom needs to be distinguished
ntyp = 3 ,
from the others (even when crystallographically
nspin=1,
equivalent)
ecutwfc = 40.0,
ecutrho = 150.0
/
/
ATOMIC_SPECIES
Si1
28.086
[Link]-us_gipaw.UPF
Si
28.086
[Link]-us_gipaw.UPF
O
15.9994
[Link]
quartz SCF & XSpectra calculation
Run scf calculation
$ $BIN/pw.x < [Link] > [Link] &
Self-consistent calculation of the charge density
Copy the core wavefunction
$ cp ../pseudo/[Link] ./
Run XSpectra calculation
$ $BIN/xspectra.x < [Link] > [Link] &
Outline
1. Introduction on XAS
2. The PAW theory
3. Hands on (I) : Si-K edge in
-quartz SiO2
-GIPAW pseudopotential generation for Si and Si1s*
-SCF calculation for -quartz SiO2 unit cell without/with core-hole
-core wave-function extraction
4. The Lanczos algorithm
5. Hands on (II) : Si-K edge in
-quartz SiO2
-XSpectra calculations for -quartz SiO2 unit cell without/with core-hole
- Supercell calculation : 2x2x2 cell for
-quartz SiO2
6. Hands on (III) : Dipolar and Quadrupolar contributions at the Ni-K edge in NiO
7. Summary
The sum over the unoccupied states
2
(!) = 4 0 ~!
X
f
|h f |'R0 i|2 (Ef
Ei
~!)
The direct, brute-force, sum over the unoccupied states f is very expensive. Instead, we use
a recursive method proposed originally by Haydock, Heine and Kelly. The cross-section can be
re-expressed as :
2
(!) = 4 0 ~!
X
f
h'R0 | f i (Ef
Ei
~!) h f |'R0 i
where the imaginary part of the pseudo-Green function G(E)
= (E
with the pseudo-Hamiltonian H = T HT (with E = Ei + ~! ) :
h
i X
1
Im G(E)
=
| f i (Ef
+i )
H
associated
E) h f |
We therefore simply re-write the cross-section under the form of the imaginary part of a
matrix element :
(!) =
40 ~!Im h'R0 |(E
+i )
H
|'R0 i
R. Haydock, V. Heine and M. Kelly, J. Phys C 5 , 2845 (1972)
M. Taillefumier et al. , Phys. Rev. B 66, 195107 (2002)
Note : Even under this form (after the sum over f is removed) the numerical task remains very large as the
calculation of h'R0 |(E H + i ) 1 |'R0 i requires a matrix inversion for each energy E.
The Lanczos algorithm and the continued fraction
Matrix element calculated as a continued fraction using the Lanczos algorithm.
The empty states are not calculated explicitly. The sum over empty states depends on the
occupied bands only.
in a tridiagonal form. The Lanczos basis is
We use the Lanczos recursive algorithm to bring H
:
generated by successively applying H
p
|u0 i = |'R0 i/ h'R0 |'R0 i
0i
b1 |u1 i = H|u
0i
a0 |u0 i with a0 = hu0 |H|u
ii
bi+1 |ui+1 i = H|u
ai |ui i
bi |ui
1i
i i = hui |H|u
i 1i
i i and bi = hui 1 |H|u
with ai = hui |H|u
Thus, the pseudo-Hamiltonian in the Lanczos basis reads :
B
B
B
B
H=B
B
B
B
@
a0
b1
0
0
...
0
0
b1
a1
b2
0
...
0
0
0
b2
a2
b3
...
0
0
0
0
b3
a3
...
0
0
0
0
0
b4
...
0
0
...
...
...
...
...
...
...
0
0
0
0
...
bn 1
0
0
0
0
0
...
an 1
bn
0
0
0
0
...
bn
an
1
C
C
C
C
C
C
C
C
A
The Lanczos algorithm and the continued fraction
Matrix element calculated as a continued fraction using the Lanczos algorithm.
The empty states are not calculated explicitly. The sum over empty states depends on the
occupied bands only.
We calculate the matrix element h'R0 |(E
+i )
H
|'R0 i as a continued fraction :
This is what XSpectra calculates : Needs to be converged, i.e. the Lanczos
space should be large enough.
C. Gougoussis et al. Phys. Rev. B 80, 075102 (2009)
M. Taillefumier et al. , Phys. Rev. B 66, 195107 (2002)
Outline
1. Introduction on XAS
2. The PAW theory
3. Hands on (I) : Si-K edge in
-quartz SiO2
-GIPAW pseudopotential generation for Si and Si1s*
-SCF calculation for -quartz SiO2 unit cell without/with core-hole
-core wave-function extraction
4. The Lanczos algorithm
5. Hands on (II) : Si-K edge in
-quartz SiO2
-XSpectra calculations for -quartz SiO2 unit cell without/with core-hole
- Supercell calculation : 2x2x2 cell for
-quartz SiO2
6. Hands on (III) : Dipolar and Quadrupolar contributions at the Ni-K edge in NiO
7. Summary
Calculation flow for XAS with XSpectra
Prepare the GIPAW pseudopotentials
Extract the core wavefunction
Prepare input file and run SCF calculation
Prepare input file and run XSpectra
quartz XSpectra calculation
$ gedit [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Type of calculation :
xanes_dipole
O = r
xanes_quadrupole
O=
1
( r) (k r)
2
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Type of edge : K, L2, L3 or L23
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Prefix and outdir of the scf calculation
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Rank of the absorbing atom in the ATOMIC_SPECIES list of the scf
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Coordinates of the incident x-ray polarization vector (in crystal
coordinates because of xcoordcrys)
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Save file storing the Lanczos a and b parameters
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Maximum number of iterations (maximum dimension of the Lanczos basis)
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Number of iterations between two convergence checks
quartz XSpectra calculation
file [Link]
&input_xspectra
calculation='xanes_dipole'
edge='K'
prefix='SiO2',
outdir='./outdir/',
xonly_plot=.false.,
xiabs=1,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xcoordcrys=.true.
x_save_file='SiO2_9at.[Link]',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/
Convergence threshold on the integral of the XAS cross-section
quartz XSpectra calculation
file [Link]
&plot
xnepoint=1000,
xemin=-10.0,
xemax=50.0,
gamma_mode='constant'
xgamma=0.9,
cut_occ_states=.true.,
terminator=.true.,
/
Range in energy for the XANES calculation: [xemin;xemax] with xnepoints
quartz XSpectra calculation
file [Link]
&plot
xnepoint=1000,
xemin=-10.0,
xemax=50.0,
gamma_mode='constant'
xgamma=0.9,
cut_occ_states=.true.,
terminator=.true.,
/
Lorentzian broadening parameters (related to the finite lifetime of the core-hole).
Here, a constant broadening of 0.9 eV over the whole energy range.
Can be made energy-dependant.
quartz XSpectra calculation
file [Link]
&plot
xnepoint=1000,
xemin=-10.0,
xemax=50.0,
gamma_mode='constant'
xgamma=0.9,
cut_occ_states=.true.,
terminator=.true.,
/
Cut smoothly the occupied states (useful for metallic systems)
See Ch. Brouder, M. Alouani, K.H. Bennemann Phys. Rev. B 54 7334 (1996) for details
quartz XSpectra calculation
file [Link]
&plot
xnepoint=1000,
xemin=-10.0,
xemax=50.0,
gamma_mode='constant'
xgamma=0.9,
cut_occ_states=.true.,
terminator=.true.,
/
if .true. imposes the use of a terminator, (ai ; bi ) = (aN ; bN ) for i > N ,
allowing an analytical form of the continued fraction.
quartz XSpectra calculation
file [Link]
&pseudos
filecore='[Link]',
/
&cut_occ
cut_desmooth=0.1,
/
4 4 4 0 0 0
Core wavefunction file
quartz XSpectra calculation
file [Link]
&pseudos
filecore='[Link]',
/
&cut_occ
cut_desmooth=0.1,
/
4 4 4 0 0 0
Brillouin zone sampling
The k-point sampling is not necessarily the same as in the SCF run.
quartz XSpectra calculation
- [Link]
contains information about the run
- [Link]
contains the XAS spectrum
(can be visualized with usual plotting tools)
- [Link]
save file, containing information on the
Lanczos process (a and b vectors)
$ mv [Link] [Link]
$ gnuplot
> plot [Link]
Rename
quartz XSpectra calculation
We did not include the core-hole in our calculation !
quartz - Calculation with a core-hole SCF Part
$ cd ../SiO2h
$ mv [Link] [Link] Rename
$ gedit [Link]
3 changes to make
1) Change prefix:
prefix='SiO2h'
2) Add in nameliste system:
tot_charge=+1
&system
ecutrho = 150.0
tot_charge=+1
/
3) Change the name of the pseudopotential file for the absorbing atom:
Si1 28.086 [Link]-us_gipaw.UPF
$ $BIN/pw.x < [Link] > [Link] &
Run the scf calculation in the presence of a core-hole
quartz - Calculation with a core-hole XSpectra Part
$ mv [Link] [Link] Rename
$ gedit [Link]
2 changes to make
1) Change prefix:
prefix='SiO2h'
2) Change .sav file name:
x_save_file='[Link]',!
$ $BIN/xspectra.x < [Link] > [Link]
Run the XSpectra calculation in the presence of a core-hole
Quanlitative core hole effect (in insulators)
conduction
Intensity of fine structures
(close to the edge onset)
are reinforced
valence
2p
2p
2s
1s
2s
1s
Deep states localize more
quartz - Calculation with a core-hole XSpectra Part
$ mv [Link] [Link]
$ gnuplot
> plot [Link]
Lets try with a supercell !
Supercell calculations
Due to periodic boundary conditions, we have to avoid spurious interaction of the excited
atom with its periodically repeated images.
Weak interaction
Large interaction
2x2
supercell
atom with a core-hole
atom without a core-hole
Usually 8 - 10 separation is enough
quartz Construction of a 2x2x2 supercell
$ cd ../SiO2supercell
$ gedit SiO2_AtomsPositions.txt
(home-made script)
$ bash [Link]
> SiO2_AtomsPositions.txt
> 2 2 2
Create a file [Link] with the atomic positions in the supercell
$ mv [Link] SiO2_super.[Link]
$ gedit SiO2_super.[Link]
1) Remove the atomic positions
Si1 0.47000000000000 0.00000000000000 0.000000000000000
Si 0.00000000000000 0.47000000000000 0.666666666666666
Si -0.47000000000000 -0.47000000000000 0.333333333333333
2) Copy and paste the atomic positions from [Link] to
SiO2_super.[Link] .
Dont forget to rename the absorbing atom Si1
quartz Scf with a supercell
Other changes to make
1) Change prefix:
prefix='SiO2_super'
2) Change the number of atoms (9 atoms/unit cell x 2x2x2 cells)
nat=72
3) Change the lattice parameters:
A = 9.8276
B = 10.8104
4) Divide the number of k points:
K_POINTS automatic
1 1 1 0 0 0
$ $BIN/pw.x < SiO2_super.[Link] > SiO2_super.[Link] &
quartz Xspectra with a supercell
$ mv [Link] SiO2_super.[Link]
$ gedit SiO2_super.[Link]
3 changes to make
1) Change prefix:
prefix='SiO2_super'
2) Change .sav file name:
x_save_file='SiO2_super.[Link]',
3) Divide the number of k-points:
2 2 2 0 0 0
$ $BIN/xspectra.x < SiO2_super.[Link] >
SiO2_super.[Link] &
quartz - Xspectra with a supercell
= (0, 0, 1)
Results for a polarization
$ mv [Link] SiO2_super.[Link]
$ gnuplot
> plot SiO2_super.[Link]
From M. Taillefumier et al., Phys. Rev. B 66, 195107 (2002)
XNLD (X-ray Natural Linear Dichroism)
-quartz has a trigonal space group (P3221, n154) with an hexagonal unit cell and
the point group D3 :
it is a dichroic compound !
The cross-section along the threefold symmetry axis (
section in the perpendicular direction ( ?)
|| )
is different from the cross-
Up to now, we calculated the || cross-section with
= (0, 0, 1) because the
ternary axis is parallel to the c axis of the crystal
To calculate
= (1, 0, 0)
, any direction perpendicular to c is fine, i.e.
Detailed analysis of the angular dependence of
XAS can be found in :
C. Brouder, J . Phys.: Cond. Mat. 2 701-738 (1990)
quartz XSpectra with a supercell - perp
$ cp SiO2_super.[Link] SiO2_super_perp.[Link]
$ gedit SiO2_super_perp.[Link]
2 changes to make
1) Change xepsilon:
xepsilon(1)=1.0,
xepsilon(2)=0.0,
xepsilon(3)=0.0,
Crystal coordinates because xcoordcrys=.true.
2) Change .sav file name:
x_save_file='SiO2_super_perp.[Link]',
Run the calculation with = (1, 0, 0)
$ $BIN/xspectra.x < SiO2_super_perp.[Link] >
SiO2_super_perp.[Link] &
quartz XSpectra with a supercell
Plot XNLD
$ mv [Link] SiO2_super_perp.[Link]
$ gnuplot XNLD
-quartz dichroic signal @ the Si-K edge :
From M. Taillefumier et al., Phys. Rev. B 66, 195107 (2002)
Calculation flow for XAS with XSpectra
Prepare the GIPAW pseudopotentials
Extract the core wavefunction
Prepare input file and run SCF calculation
Prepare input file and run XSpectra
2nd example:
Ni K-edge in NiO
NiO - SCF calculation
$ cd ../NiO
$ gedit [Link]
...
/
&system
nspin=2,
starting_magnetization(1)=1.0,
starting_magnetization(2)=-1.0,
tot_magnetization = 0,
/
ATOMIC_SPECIES
Ni1 58.6934
Ni_PBE_TM_2pj.UPF
Ni2 58.6934
Ni_PBE_TM_2pj.UPF
O 15.9994
O_PBE_TM.UPF
ATOMIC_POSITIONS crystal
Ni1 0.0000000000 0.0000000000 0.0000000000
Ni2 -.5000000000 1.5000000000 -.5000000000
NiO - SCF calculation
$ cd ../NiO
$ gedit [Link]
...
/
&system
spin-polarized calculation
nspin=2,
starting_magnetization(1)=1.0,
starting_magnetization(2)=-1.0,
tot_magnetization = 0,
/
ATOMIC_SPECIES
Ni1 58.6934
Ni_PBE_TM_2pj.UPF
Ni2 58.6934
Ni_PBE_TM_2pj.UPF
O 15.9994
O_PBE_TM.UPF
ATOMIC_POSITIONS crystal
Ni1 0.0000000000 0.0000000000 0.0000000000
Ni2 -.5000000000 1.5000000000 -.5000000000
NiO - SCF calculation
$ cd ../NiO
$ gedit [Link]
...
/
&system
nspin=2,
starting_magnetization(1)=1.0,
two Ni atoms
starting_magnetization(2)=-1.0,
antiferromagnetically-coupled
tot_magnetization = 0,
/
ATOMIC_SPECIES
Ni1 58.6934
Ni_PBE_TM_2pj.UPF
Ni2 58.6934
Ni_PBE_TM_2pj.UPF
O 15.9994
O_PBE_TM.UPF
ATOMIC_POSITIONS crystal
Ni1 0.0000000000 0.0000000000 0.0000000000
Ni2 -.5000000000 1.5000000000 -.5000000000
NiO - SCF calculation
$ cd ../NiO
$ gedit [Link]
&system
lda_plus_u=.true.,
Hubbard_U(1)=7.6,
DFT + U
Hubbard_U(2)=7.6,
Hubbard_U(i): U parameter (eV) for species i
/
ATOMIC_SPECIES
Ni1 58.6934
Ni_PBE_TM_2pj.UPF
Ni2 58.6934
Ni_PBE_TM_2pj.UPF
O 15.9994
O_PBE_TM.UPF
NiO SCF & XSpectra Dipole calculation
Run scf calculation
$ $BIN/pw.x < [Link] > [Link] &
Extract the core wavefunction
$ cd ../pseudo
$~/TutorialXSpectra/XSpectra/tools/[Link] <
Ni_PBE_TM_2pj.UPF > [Link]
Copy the core wavefunction
$ cd ../NiO
$ cp ../pseudo/[Link] ./
Run xspectra calculation
$ $BIN/xspectra.x < NiO.xspectra_dip.in >
NiO.xspectra_dip.out &
NiO - XSpectra Dipole
$ mv [Link] NiO.xspectra_dip.dat
Plot up and down contributions to the spectra
$ gnuplot
> plot 'NiO.xanes_dip.dat' u 1:2 w l,'NiO.xanes_dip.dat' u
1:3 w l,'NiO.xanes_dip.dat' u 1:4 w l
In [Link] :
column 1
Total
column 2
Spin up
column 3
Spin down
NiO - XSpectra Quadrupole
$ cp NiO.xspectra_dip.in NiO.xspectra_qua.in
$ gedit NiO.xspectra_qua.in
2 changes to make
1) Change calculation :
calculation='xanes_quadrupole',
2) Add xkvec :
xkvec(1)= 1.0,
xkvec(2)= 1.0,
xkvec(3)=-1.0,
wavevector of the incident wave
(required for quadrupole calculations) :
k?
$ $BIN/xspectra.x < NiO.xspectra_qua.in > NiO.xspectra_qua.out &
NiO - XSpectra Quadrupole
$ mv [Link] NiO.xspectra_qua.dat
Plot up and down contributions to the spectra
$ gnuplot
> plot 'NiO.xanes_qua.dat' u 1:2 w l,'NiO.xanes_qua.dat' u
1:3 w l,'NiO.xanes_qua.dat' u 1:4 w l
In [Link] :
column 1
Total
column 2
Spin up
column 3
Spin down
XSpectra : summary
XSpectra now :
calculates any K, L1, L23 edges (for which a single-particle description is appropriate !)
calculates electric dipole (K and L edges) and electric quadrupole (K and L1 edges)
very efficient due to the Lanczos algorithm + continued fraction approach
supports all standard DFT functionals available in Quantum Espresso (PZ,PBE,PZ+U,PBE+U)
supports both ultrasoft and norm conserving pseudopotentials
the pseudopotential of the absorbing species must contain information on the core states
(GIPAW)
the all electron reconstruction is performed within GIPAW
a supercell is needed to model the core hole (periodic boundary conditions)
Not yet supported :
spin-orbit coupling
circular polarization, XMCD
hybrid functionals (B3LYP, PBE0, ...)
Thank you for your attention and good luck
for your calculations !
Proof : The continued fraction (I)
Assume that we have a Lanczos basis {|u0 i, |u1 i, |u2 i, . . . , |un i} in which the operator H has the form
0
B
B
B
B
H=B
B
B
B
@
a0
b1
0
0
...
0
0
b1
a1
b2
0
...
0
0
0
b2
a2
b3
...
0
0
0
0
b3
a3
...
0
0
0
0
0
b4
...
0
0
...
...
...
...
...
...
...
We want to calculate the matrix element hu0 | (H
0
0
0
0
...
bn 1
0
I)
0
0
0
0
...
an 1
bn
0
0
0
0
...
bn
an
|u0 i with
1
C
C
C
C
C
C
C
C
A
a scalar
A way to proceed is the following (Gaussian elimination):
1. Use the relations :
(H
I) |un i = (an
(H
I) |un
1i
)|un i + bn |un
= bn |un i + (an
(H
I) |un
1i
bn
an
|un i
1i
)|un
and eliminate the term in |un i :
1i
an
+ bn
1 |un 2 i
b2n
an
|un
1i
+ bn
1 |un 2 i
Proof : The continued fraction (II)
2. Now, use the previous relation as well as :
(H
(H
I) |un
2i
= bn
1 |un 1 i
to eliminate |un 1 i :
0
B
I) @|un
2i
an
bn
+ (an
b2n
an
)|un
|un
2i
+ bn
bn
1i
an
2 |un 3 i
C B
|un i A = @an
b2n
an
b2n
an
C
A |un
+bn
Continuing this way, we get the expression of |u0 i as a function of the |uk is :
0
(H
I) |u0 i
B
B
B
B
B
B
! B
B
n
X
B
k |uk i = B
Ba 0
B
k=1
B
B
B
B
B
B
@
b21
b22
a1
b23
a2
..
an
an
.
b2n
an
2i
2 |un 3 i
C
C
C
C
C
C
C
C
C
C |u0 i
C
C
C
C
C
C
C
C
A
Proof : The continued fraction (III)
Multiplying on the left by hu0 | (H
hu0 | (H
I)
|u0 i =
I)
, we obtain :
1
b21
a0
a1
b22
b23
a2
..
an
an
The matrix element finally appears as a continued fraction !
.
b2n
an