Header Ads Widget

Ab initio Calculations Using Wien2k Code

Last Posts

10/recent/ticker-posts

How to calculate the U parameter in Nickel Oxide NiO


To calculate the U parameter for the example of NiO according to the article of Georg K. H. Madsen and Pavel Nov ́ak ( Constraint U ), there are 3 ways:

First way: The interactive mode

Download the file in the following link 

Interactive mode 

You will find the following files:

NiO.struct
NiO.struct_sgroup
NiO.inst
NiO.in1_
NiO.in2_+.5-1
NiO.in2_+.50
NiO.incdn_+.5-1
NiO.incdn_+.50
NiO.incup_+.5-1
NiO.incup_+.50
NiO_+.5-1.scf
NiO_+.50.scf

Now, follow the steps in the following procedure:

 This procedure tries to reproduce the result in "Constraint_U.pdf".  The result is different between WIEN2k 11.1, 12.1, and 14.2.  More testing is needed, but the result seems to also be different depending on what fft package (fftpack,fftw3,etc) is used.

WIEN2k_14.2 (Release 15/10/2014)

Create NiO sesssion in w2web and place "NiO.inst" and "NiO.struct" from input_files into the NiO directory.
username@computername:~/wien/wiendata/NiO$ ls
NiO.inst  NiO.struct
username@computername:~/wien/wiendata/NiO$ x supercell
 Program generates supercell from a WIEN struct file.

 Filename of struct file:
NiO.struct

 Number of cells in x direction:
2
 Number of cells in y direction:
2
 Number of cells in z direction:
2
 Optional shift all atoms by the same amount (fractional coordinates).
 Please enter x shift:
0
 Please enter y shift:
0
 Please enter z shift:
0

 Current structure has lattice type F  
 Enter your target lattice type: (P,B,F)
F
 Target lattice type will be F  

 Supercell generated sucessfully.
 Stored in struct file: NiO_super.struct                                       
              
 You may need to replace an atom by an impurity or distort the positions, ....
0.0u 0.0s 0:22.00 0.0% 0+0k 0+32io 0pf+0w
username@computername:~/wien/wiendata/NiO$ cp NiO_super.struct NiO.struct
In StructGen of w2web, next to "Atom 1", add 1 in the second box to label Ni as Ni1 and save the struct file ("save file and clean up").
username@computername:~/wien/wiendata/NiO$ x sgroup
0.0u 0.0s 0:00.00 0.0% 0+0k 0+16io 0pf+0w
username@computername:~/wien/wiendata/NiO$ cp NiO.struct_sgroup NiO.struct

username@computername:~/wien/wiendata/NiO$ init_lapw -s nn
 next is nn
 next is nn
>   nn    (12:01:28)  specify nn-bondlength factor: (usually=2) [and optionally dlimit, dstmax (about
  1.d-5, 20)]
2
 DSTMAX:   20.0000000000000    
 iix,iiy,iiz           3           3           5   47.5620000000000    
   47.5620000000000        79.2700000000000    
 NAMED ATOM: Ni1       Z changed to IATNR+999 to determine equivalency
 NAMED ATOM: Ni2       Z changed to IATNR+999 to determine equivalency
 NAMED ATOM: Ni3       Z changed to IATNR+999 to determine equivalency
 NAMED ATOM: O 1       Z changed to IATNR+999 to determine equivalency
 NAMED ATOM: O 2       Z changed to IATNR+999 to determine equivalency

    ATOM  1  Ni1        ATOM  4  O 1      
 RMT(  1)=2.30000 AND RMT(  4)=1.65000
 SUMS TO 3.95000  LT.  NN-DIST= 3.96350

    ATOM  2  Ni2        ATOM  4  O 1      
 RMT(  2)=2.30000 AND RMT(  4)=1.65000
 SUMS TO 3.95000  LT.  NN-DIST= 3.96350

    ATOM  3  Ni3        ATOM  5  O 2      
 RMT(  3)=2.30000 AND RMT(  5)=1.65000
 SUMS TO 3.95000  LT.  NN-DIST= 3.96350

    ATOM  4  O 1        ATOM  3  Ni3      
 RMT(  4)=1.65000 AND RMT(  3)=2.30000
 SUMS TO 3.95000  LT.  NN-DIST= 3.96350

    ATOM  5  O 2        ATOM  3  Ni3      
 RMT(  5)=1.65000 AND RMT(  3)=2.30000
 SUMS TO 3.95000  LT.  NN-DIST= 3.96350
NN ENDS
0.0u 0.0s 0:05.10 0.7% 0+0k 0+128io 0pf+0w
-----> check in  NiO.outputnn  for overlapping spheres,
       coordination and nearest neighbor distances
-----> continue with sgroup or edit the NiO.struct file (c/e)
c
 next is sgroup
>   sgroup    (12:01:46) 0.0u 0.0s 0:00.00 0.0% 0+0k 0+16io 0pf+0w
  Names of point group: m-3m   4/m -3 2/m   Oh
  Names of point group: m-3m   4/m -3 2/m   Oh
  Names of point group: mmm    2/m 2/m 2/m   D2h
  Names of point group: 4mm    4mm    C4v
  Names of point group: -43m  -43m    Td
Number and name of space group: 225 (F m -3 m)
-----> check in  NiO.outputsgroup  for proper symmetry, compare
       with your struct file and later with  NiO.outputs
       sgroup has also produced a new struct file based on your old one.
       If you see warnings above, consider to use the newly generated
       struct file, which you can view (edit) now.
-----> continue with symmetry (old case.struct) or use/edit NiO.struct_sgroup ? (c/e)
c
 next is symmery
>   symmetry    (12:02:07) 0.0u 0.0s 0:00.02 50.0% 0+0k 0+96io 0pf+0w
-----> check in  NiO.outputs  the symmetry operations,
       the point symmetries and compare with results from sgroup
       if you find errors (often from rounding errors of positions), apply x patchsymm
-----> continue with lstart or edit the NiO.struct_st file (c/e/x)
c
 next is lstart
 An old NiO.inst file is present. Do you want to overwrite it (N/y)
N
>   lstart    (12:02:19)   SELECT XCPOT:
  recommended: PBE    [(13) GGA of Perdew-Burke-Ernzerhof 96]
               LDA    [( 5)]
               WC     [(11)  GGA of Wu-Cohen 2006]
               PBESOL [(19) GGA of Perdew etal. 2008]
5
  SELECT ENERGY to separate core and valence states:
  recommended: -6.0 Ry (check how much core charge leaks out of MT-sphere)
  ALTERNATIVELY: specify charge localization
  (between 0.97 and 1.0) to select core state
-6

Atomic configuration for atom: Ni1   Z= 28.00
          E-up(Ry)      E-dn(Ry)   Occupancy   q/sphere  core-state
  1S    -602.170457   -602.169307  1.00  1.00    1.0000  T
  2S     -72.020744    -71.934905  1.00  1.00    1.0000  T
  2P*    -62.899233    -62.834395  1.00  1.00    1.0000  T
  2P     -61.618225    -61.551468  2.00  2.00    1.0000  T
  3S      -8.189165     -8.028612  1.00  1.00    0.9998  T
  3P*     -5.414017     -5.256866  1.00  1.00    0.9991  F
  3P      -5.250259     -5.094388  2.00  2.00    0.9989  F
  3D*     -0.743370     -0.604805  2.00  2.00    0.9590  F
  3D      -0.725441     -0.587515  3.00  1.00    0.9598  F
  4S      -0.442635     -0.417372  1.00  1.00    0.3754  F

Atomic configuration for atom: O 1   Z=  8.00
          E-up(Ry)      E-dn(Ry)   Occupancy   q/sphere  core-state
  1S     -37.545830    -37.545830  1.00  1.00    1.0000  T
  2S      -1.745453     -1.745453  1.00  1.00    0.8444  F
  2P*     -0.677426     -0.677426  1.00  1.00    0.7629  F
  2P      -0.674720     -0.674720  1.00  1.00    0.7619  F
LSTART ENDS
0.7u 0.0s 0:26.06 2.9% 0+0k 0+2144io 0pf+0w
-----> continue with kgen or edit the NiO.inst file and rerun lstart (c/e)
c
-----> in  NiO.in1_st  select   RKmax ( usually 5.0 - 9.0 )
-----> in  NiO.in2_st  select   LM's, GMAX and Fermi-Energy method
>   inputfiles prepared    (12:02:59) 
 inputfiles prepared
 next is kgen
>   kgen    (12:02:59)   NUMBER OF K-POINTS IN WHOLE CELL: (0 allows to specify 3 divisions of G)
Change RKmax to 5 in NiO.in1_st and NiO.in1
1  
 length of reciprocal lattice vectors:   0.686   0.686   0.686   1.000   1.000   1.000
           1  k-points generated, ndiv=           1           1           1
KGEN ENDS
0.0u 0.0s 4:05.47 0.0% 0+0k 0+40io 0pf+0w
-----> check in  NiO.klist  number of generated K-points
-----> continue with dstart or execute kgen again or exit (c/e/x)
c
 next is dstart
>   dstart  -p    (12:07:16) running dstart in single mode
DSTART ENDS
8.6u 0.0s 0:08.84 97.3% 0+0k 4448+1320io 12pf+0w
-----> check in  NiO.outputd  if gmax > gmin, normalization
-----> new NiO.in0 generated
-----> do you want to perform a spinpolarized calculation ? (n/y)
y
>   dstart -up  -p    (12:07:53) running dstart in single mode
DSTART ENDS
8.5u 0.0s 0:08.58 99.7% 0+0k 0+1320io 0pf+0w
>   dstart -dn  -p    (12:08:02) running dstart in single mode
DSTART ENDS
8.5u 0.0s 0:08.60 99.7% 0+0k 0+1320io 0pf+0w
-----> do you want to perform an antiferromagnetic calculation ? (N/y)
N
  init_lapw finished ok

username@computername:~/wien/wiendata/NiO$ runsp_lapw
...
in cycle 19    ETEST: .0003117250000000   CTEST: .0023933
hup: Command not found.
 LAPW0 END
 LAPW1 END
 LAPW1 END
 LAPW2 END
 LAPW2 END
 CORE  END
 CORE  END
 MIXER END

>   stop
username@computername:~/wien/wiendata/NiO$ save_lapw -d NiO_orig

Place "NiO.in1_", "NiO.in2_+.5-1", "NiO.in2_+.50", "NiO.incup_+.50", "NiO.incdn_+.50", "NiO.incup_+.5-1", and "NiO.incdn_+.5-1" from input_files into the case directory

username@computername:~/wien/wiendata/NiO$ cp NiO.in1_ NiO.in1
username@computername:~/wien/wiendata/NiO$ cp NiO.in2_+.50 NiO.in2
username@computername:~/wien/wiendata/NiO$ cp NiO.incup_+.50 NiO.incup
username@computername:~/wien/wiendata/NiO$ cp NiO.incdn_+.50 NiO.incdn
username@computername:~/wien/wiendata/NiO$ runsp_lapw
...
in cycle 16    ETEST: .0002088800000000   CTEST: .0057837
hup: Command not found.
 LAPW0 END
 LAPW1 END
 LAPW1 END
 LAPW2 END
 LAPW2 END
 CORE  END
 CORE  END
 MIXER END

>   stop
username@computername:~/wien/wiendata/NiO$ save_lapw -d NiO_+.50
username@computername:~/wien/wiendata/NiO$ restore_lapw -f -d NiO_orig
username@computername:~/wien/wiendata/NiO$ cp NiO.in1_ NiO.in1
username@computername:~/wien/wiendata/NiO$ cp NiO.in2_+.5-1 NiO.in2
username@computername:~/wien/wiendata/NiO$ cp NiO.incup_+.5-1 NiO.incup
username@computername:~/wien/wiendata/NiO$ cp NiO.incdn_+.5-1 NiO.incdn
username@computername:~/wien/wiendata/NiO$ runsp_lapw
...
in cycle 36    ETEST: .0001699250000000   CTEST: .0035903
hup: Command not found.
 LAPW0 END
 LAPW1 END
 LAPW1 END
 LAPW2 END
 LAPW2 END
 CORE  END
 CORE  END
 MIXER END

>   stop
username@computername:~/wien/wiendata/NiO$ save_lapw -d NiO_+.5-1

username@computername:~/wien/wiendata/NiO/NiO_+.50$ grepline :fer 'NiO.scf' 1
in  1 files:
NiO.scf::FER  : F E R M I - ENERGY(GAUSS-.M.)=   0.4779683788
username@computername:~/wien/wiendata/NiO/NiO_+.50$ grepline :3dd001 'NiO.scf' 2 | head -2 | tail -1
NiO.scf::3DD001: 3D*                  0.109619395 Ry
username@computername:~/wien/wiendata/NiO/NiO_+.50$ grepline ':3d 001' 'NiO.scf' 2 | head -2 | tail -1
NiO.scf::3D 001: 3D                   0.126211972 Ry
username@computername:~/wien/wiendata/NiO/NiO_+.5-1$ grepline :fer 'NiO.scf' 1
in  1 files:
NiO.scf::FER  : F E R M I - ENERGY(GAUSS-.M.)=   0.5182555839
username@computername:~/wien/wiendata/NiO/NiO_+.5-1$ grepline :3dd001 'NiO.scf' 2 | head -2 | tail -1
NiO.scf::3DD001: 3D*                 -0.291937436 Ry
username@computername:~/wien/wiendata/NiO/NiO_+.5-1$ grepline ':3d 001' 'NiO.scf' 2 | head -2 | tail -1
NiO.scf::3D 001: 3D                  -0.273539538 Ry

Note: A copy of the NiO.scf files are in output_files.

Use a text editor to edit F_eff.pl in script.  Then, execute the script:

username@computername:~/wien/wiendata/NiOUfiles$ ./F_eff.pl
eV = 5.99808373432882
F_eff = 0.440841079988889 Ry = 5.99808373432882 eV
0.438 - F_eff = -0.00284107998888894 Ry


Second way: The batch mode

Download the script in the following link


NiO-Script 

Follow the steps in the following procedure:

You create a reprtory "NiO" and you put the script in and in terminal you do the following:

    > cd NiO
    > dos2unix NiOscript
    > chmod +x NiOscript
    > ./NiOscript

You will get the following result:

 Output:

Obtained with: WIEN2k_14.2 (Release 15/10/2014)

NiO_+.50 :FER 0.4780478813
NiO_+.50 :3dd001 0.109677912
NiO_+.50 :3d 001 0.126271892
NiO_+.5-1 :FER 0.5182276205
NiO_+.5-1 :3dd001 -0.291784933
NiO_+.5-1 :3d 001 -0.273388240

F_eff = .44064107697777777777 Ry = 5.99536249335964444433 eV
0.438 - F_eff = -.00264107697777777777
Percent Error = .60298561136478944500 %


Third way: The mixed mode

I have modified the previous script to make it suitable for a general purpose and needs only the input files.

To download the script click on the link below:

U-Parameter -Script

The execution of the script is as follows:

- Put the script and the input files in the same repertory
- on the terminal do the following:
    > cd NiO
    > dos2unix NiO-Reg
    > chmod +x NiO-Reg
    > ./NiO-Reg
- The execution of the supercell command will be in interactive mode
- After the opening of the struct file you add the number "1" after the first atom and you delete the space after  the added number as follows:

           MULT= 1          ISPLIT= 2
Ni1        NPT=  781  R0=0.00005000 RMT=    2.3000   Z: 28.0                  
LOCAL ROT MATRIX:    1.0000000 0.0000000 0.0000000

- Save the modification of the struct file and close it.
- After the calculation continues in the batch mode.

You will get the same result:

 Output:

Obtained with: WIEN2k_14.2 (Release 15/10/2014)

NiO_+.50 :FER 0.4780478813
NiO_+.50 :3dd001 0.109677912
NiO_+.50 :3d 001 0.126271892
NiO_+.5-1 :FER 0.5182276205
NiO_+.5-1 :3dd001 -0.291784933
NiO_+.5-1 :3d 001 -0.273388240

F_eff = .44064107697777777777 Ry = 5.99536249335964444433 eV
0.438 - F_eff = -.00264107697777777777
Percent Error = .60298561136478944500 %


  


Post a Comment

1 Comments