0% found this document useful (0 votes)
688 views

Tutorial XSpectra

The document describes the XSpectra software tool for calculating X-ray absorption spectra within the single particle approximation. It provides an outline of the topics to be covered, including an introduction to X-ray absorption spectroscopy (XAS), the projector augmented wave (PAW) theory used in XSpectra, and hands-on examples calculating the silicon K-edge in quartz and contributions to the nickel K-edge in nickel oxide. The document explains how to generate the PAW pseudopotentials required as input for XSpectra calculations, specifically the gauge including projector augmented wave (GIPAW) pseudopotential for silicon.

Uploaded by

napolesd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
688 views

Tutorial XSpectra

The document describes the XSpectra software tool for calculating X-ray absorption spectra within the single particle approximation. It provides an outline of the topics to be covered, including an introduction to X-ray absorption spectroscopy (XAS), the projector augmented wave (PAW) theory used in XSpectra, and hands-on examples calculating the silicon K-edge in quartz and contributions to the nickel K-edge in nickel oxide. The document explains how to generate the PAW pseudopotentials required as input for XSpectra calculations, specifically the gauge including projector augmented wave (GIPAW) pseudopotential for silicon.

Uploaded by

napolesd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 84

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
(http://www.quantum-espresso.org/)
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 Si.ld1.in
&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 Si.ld1.in

&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 Si.ld1.in

&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 Si.ld1.in

&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 Si.ld1.in
&inputp
pseudotype=3,
file_pseudopw='Si.pbe-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 Si.ld1.in
&inputp
pseudotype=3,
file_pseudopw='Si.pbe-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 Si.ld1.in
&inputp
pseudotype=3,
file_pseudopw='Si.pbe-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 Si.ld1.in
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 Si.ld1.in
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 < Si.ld1.in > Si.ld1.out

Generate the pseudopotential Si.pbe-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 Si.ld1.in

Sih.ld1.in

$ gedit Sih.ld1.in
Changes to make

title=Sih
config=1s1 2s2 2p6 3s2 3p2 3d-2 4s0 4p0',
file_pseudopw='Sih.pbe-us_gipaw.UPF',

Hole in the 1s state

$ $BIN/ld1.x < Sih.ld1.in > Sih.ld1.out


Generate the pseudopotential file : Sih.pbe-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.

http://www.quantum-espresso.org/pseudopotentials/
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 www.qe-forge.org 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/upf2plotcore.sh < Si.pbemt_gipaw.UPF > Si.wfc

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 SiO2.scf.in
...
/
&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
Si.pbe-us_gipaw.UPF
Si
28.086
Si.pbe-us_gipaw.UPF
O
15.9994
O.pbe-rrkjus.UPF

quartz SCF & XSpectra calculation


Run scf calculation
$ $BIN/pw.x < SiO2.scf.in > SiO2.scf.out &
Self-consistent calculation of the charge density

Copy the core wavefunction


$ cp ../pseudo/Si.wfc ./

Run XSpectra calculation


$ $BIN/xspectra.x < SiO2.xspectra.in > SiO2.xspectra.out &

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 SiO2.xspectra.in
&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

quartz XSpectra calculation


file SiO2.xspectra.in

&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.xanes.sav',
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 SiO2.xspectra.in

&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

Type of edge : K, L2, L3 or L23

quartz XSpectra calculation


file SiO2.xspectra.in

&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

Prefix and outdir of the scf calculation

quartz XSpectra calculation


file SiO2.xspectra.in

&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.xanes.sav',
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 SiO2.xspectra.in

&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.xanes.sav',
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 SiO2.xspectra.in

&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

Save file storing the Lanczos a and b parameters

quartz XSpectra calculation


file SiO2.xspectra.in

&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

Maximum number of iterations (maximum dimension of the Lanczos basis)

quartz XSpectra calculation


file SiO2.xspectra.in

&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

Number of iterations between two convergence checks

quartz XSpectra calculation


file SiO2.xspectra.in

&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.xanes.sav',
xniter=2000,
xcheck_conv=50,
xerror=0.001,
/

Convergence threshold on the integral of the XAS cross-section

quartz XSpectra calculation


file SiO2.xspectra.in

&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 SiO2.xspectra.in

&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 SiO2.xspectra.in

&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 SiO2.xspectra.in

&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 SiO2.xspectra.in

&pseudos
filecore='Si.wfc',
/
&cut_occ
cut_desmooth=0.1,
/
4 4 4 0 0 0

Core wavefunction file

quartz XSpectra calculation


file SiO2.xspectra.in

&pseudos
filecore='Si.wfc',
/
&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

- SiO2.xspectra.out

contains information about the run

- xanes.dat

contains the XAS spectrum


(can be visualized with usual plotting tools)

- SiO2.xanes.sav

save file, containing information on the


Lanczos process (a and b vectors)

$ mv xanes.dat SiO2.xanes.dat
$ gnuplot
> plot SiO2.xanes.dat

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 SiO2.scf.in SiO2h.scf.in Rename
$ gedit SiO2h.scf.in
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 Sih.pbe-us_gipaw.UPF

$ $BIN/pw.x < SiO2h.scf.in > SiO2h.scf.out &


Run the scf calculation in the presence of a core-hole

quartz - Calculation with a core-hole XSpectra Part


$ mv SiO2.xspectra.in SiO2h.xspectra.in Rename
$ gedit SiO2h.xspectra.in

2 changes to make
1) Change prefix:

prefix='SiO2h'
2) Change .sav file name:

x_save_file='SiO2h.xanes.sav',!

$ $BIN/xspectra.x < SiO2h.xspectra.in > SiO2h.xspectra.out


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 xanes.dat SiO2h.xanes.dat
$ gnuplot
> plot SiO2h.xanes.dat

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 supercell.sh
> SiO2_AtomsPositions.txt
> 2 2 2
Create a file supercell.txt with the atomic positions in the supercell

$ mv SiO2h.scf.in SiO2_super.scf.in
$ gedit SiO2_super.scf.in
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 supercell.txt to


SiO2_super.scf.in .
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.scf.in > SiO2_super.scf.out &

quartz Xspectra with a supercell


$ mv SiO2h.xspectra.in SiO2_super.xspectra.in
$ gedit SiO2_super.xspectra.in

3 changes to make
1) Change prefix:

prefix='SiO2_super'
2) Change .sav file name:

x_save_file='SiO2_super.xanes.sav',
3) Divide the number of k-points:

2 2 2 0 0 0
$ $BIN/xspectra.x < SiO2_super.xspectra.in >
SiO2_super.xspectra.out &

quartz - Xspectra with a supercell


= (0, 0, 1)
Results for a polarization

$ mv xanes.dat SiO2_super.xanes.dat
$ gnuplot
> plot SiO2_super.xanes.dat

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.xspectra.in SiO2_super_perp.xspectra.in
$ gedit SiO2_super_perp.xspectra.in
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.xanes.sav',

Run the calculation with = (1, 0, 0)

$ $BIN/xspectra.x < SiO2_super_perp.xspectra.in >


SiO2_super_perp.xspectra.out &

quartz XSpectra with a supercell


Plot XNLD

$ mv xanes.dat SiO2_super_perp.xanes.dat
$ 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 NiO.scf.in
...
/
&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 NiO.scf.in
...
/
&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 NiO.scf.in
...
/
&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 NiO.scf.in
&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 < NiO.scf.in > NiO.scf.out &
Extract the core wavefunction
$ cd ../pseudo
$~/TutorialXSpectra/XSpectra/tools/upf2plotcore.sh <
Ni_PBE_TM_2pj.UPF > Ni.wfc
Copy the core wavefunction
$ cd ../NiO
$ cp ../pseudo/Ni.wfc ./

Run xspectra calculation


$ $BIN/xspectra.x < NiO.xspectra_dip.in >
NiO.xspectra_dip.out &

NiO - XSpectra Dipole


$ mv xanes.dat 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 xanes.dat :
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 xanes.dat 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 xanes.dat :
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

You might also like