User Tools

Site Tools


bulk_optimization

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
bulk_optimization [2009/11/24 22:35]
jelen
bulk_optimization [2014/02/09 11:23] (current)
Line 1: Line 1:
  ===== Lattice parameter =====  ===== Lattice parameter =====
  
-In this section, we explain how to optimize the lattice parameter of Si bulk diamond structure. The diamond structure is characterized by two distinct atom per unit cell with relative coordinates ''​(0 ,0 ,​0)''​ and ''​(1/​4,​ 1/4, 1/​4)''​. The lattice vector is defined in the relative coordinates ''​alat*(1/​4,​ 1/4, 1/​4)''​. ​  ​+In this section, we explain how to optimize the lattice parameter of Si bulk diamond structure. The diamond structure is characterized by two distinct atom per unit cell with relative coordinates ''​(0 ,0 ,​0)''​ and ''​(1/​4,​ 1/4, 1/​4)''​. The lattice vector is defined in the relative coordinates ''​alat*(1/​4,​ 1/4, 1/​4)''​. ​ 
 +Detail description of the diamond structure can be found [[http://​cst-www.nrl.navy.mil/​lattice/​struk/​a4.html|elsewhere]].  ​
 There is an elegant way to rescale atomic coordinates,​ lattice vector and k-points by only one parameter **''​rescal''​** defined in the section **''&​OPTIONS''​**. There is an elegant way to rescale atomic coordinates,​ lattice vector and k-points by only one parameter **''​rescal''​** defined in the section **''&​OPTIONS''​**.
-Our input atomic coordinates written in **''​fireball.in''​** look like:+Our input atomic coordinates written in **''​Si.bas''​** look like:
  
    2    2
Line 80: Line 81:
  
  
-to +to make the total energy calculation of several lattice parameters automatic, we use a script:
  
  
Line 114: Line 115:
  
    ​gnuplot    ​gnuplot
 +   ​gnuplot>​ set title "Etot vs. alat"
 +   ​gnuplot>​ set xlabel "alat [Ang]"
 +   ​gnuplot>​ set ylabel "Etot [eV]"
 +   ​gnuplot>​ set format y "​%8.2f"​
    ​gnuplot>​ plot '​etot.dat'​ with linespoints    ​gnuplot>​ plot '​etot.dat'​ with linespoints
 +
 +{{:​si-bulk:​etot-alat.png|}}
 +===== The bulk modulus =====
 +
 +  $ ls
 +  Fdata  uno.bas ​ uno.kpts ​ uno.lvs ​ vol.sh
 +  ​
 +  $ head uno.bas
 +  2
 +  14      0.000000 ​     0.000000 ​     0.000000
 +  14      0.250000 ​     0.250000 ​     0.250000
 +  ​
 +  $ head uno.kpts
 +  32 
 +  -2.35619449 ​        ​-2.35619449 ​        ​-2.35619449 ​       0.03125000
 +  -3.92699081 ​        ​-0.78539816 ​        ​-0.78539816 ​       0.03125000
 +  -5.49778713 ​         0.78539816 ​         0.78539816 ​       0.03125000
 +  -7.06858347 ​         2.35619449 ​         2.35619449 ​       0.03125000
 +  -0.78539816 ​        ​-3.92699081 ​        ​-0.78539816 ​       0.03125000
 +  -2.35619449 ​        ​-2.35619449 ​         0.78539816 ​       0.03125000
 +  -3.92699081 ​        ​-0.78539816 ​         2.35619449 ​       0.03125000
 +  -5.49778713 ​         0.78539816 ​         3.92699081 ​       0.03125000
 +   ​0.78539816 ​        ​-5.49778713 ​         0.78539816 ​       0.03125000 ​
 +  ​
 +  $ head  uno.lvs
 +  0.5000 ​   0.5000 ​   0.0000
 +  0.5000 ​   0.0000 ​   0.5000
 +  0.0000 ​   0.5000 ​   0.5000
 +
 +The script to calculate the bulk modulus
 +  $ cat vol.sh ​
 +  #!/bin/bash
 +   
 +  ##----- Parametros de control (el parametro de red tiene que encontrase entre ini fin  --------##
 +  N=10
 +  ini=5.0
 +  fin=6.0 ​
 +   
 +  ##​----------Funcion analisis para dos atomos/​celda-----------------------------------------##​
 +  function analisis {
 +  ETOT=$(grep '​ETOT'​ salida.out|cut -d'​='​ -f2)
 +  sigma=$(grep sigma salida.out | cut -d'​='​ -f16 | tail -1)
 +  charge=$(head -2 uno.bas | tail -1 | tr -s ' ' | cut -d' ' -f2)' -> '​$(head -2 CHARGES | tail -1)
 +  charge=$charge'​ ;'​$(head -3 uno.bas | tail -1 | tr -s ' ' | cut -d' ' -f2)' -> '
 +  charge=$charge$(tail -1 CHARGES)
 +  echo $rescal$'​\t'​$ETOT$'​\t'​$sigma$'​\t'​$charge$'​\t'>>​salida
 +  }
 +  ##​------------------------------------------------------------------------------------------##​
 +  function start {
 +  rm -fr salida
 +  for((i=0;​i<​=N;​i++))
 +  do
 +  rescal=$(python -c "print '​%.6f'​ % ($i*1.0*($fin-$ini)/​$N+$ini)"​)
 +  echo "&​option
 +  basisfile = uno.bas
 +  lvsfile = uno.lvs
 +  kptpreference = uno.kpts
 +  rescal = $rescal
 +  sigmatol = 0.000001
 +  nstepf = 1
 +  &end
 +  &output
 +  iwrtxyz = 1
 +  &​end"​ > fireball.in ​
 +  ../​progs/​fireball.x > salida.out ​   ​
 +  ​
 +  analisis
 +  done
 +  }
 +  ##​----------------------------------1º start  ----------------------------------------------##​
 +  start
 +  ##​-----------------------------buscamos el minimo ------------------------------------------##​
 +  min=$(python -c "
 +  x0 = []
 +  y0 = []
 +  for line in file(\"​salida\"​):​
 +     line = line.split()
 +     x = line[0]
 +     y = line[1]
 +     ​x0.append(x)
 +     ​y0.append(y)  ​
 +  ​
 +  j=0
 +  for i in range(len(x0)):​
 +    if y0[j]< y0[i]:
 +      j=i
 +  print x0[j]"​)
 +  cp salida borrar
 +  rm -fr aux.py  ​       ​
 +  ​
 +  ##​----------------------------------2º start -----------------------------------------------##​
 +  N=40
 +  d=0.4
 +  ini=$(python -c "print '​%.6f'​ % (1.0*($min-$d))"​)
 +  fin=$(python -c "print '​%.6f'​ % (1.0*($min+$d))"​)
 +  start
 +  mv salida Vol.dat
 +  ##​------------------------------------------------------------------------------------------##  ​
 +
 +In the 1º start of the script "​vol.sh"​ takes 10 points between 5-6:
 +
 +{{:​bulk-si-10.png|}}
 +
 +In the 2º start of the script "​vol.sh"​ takes 40 points between the minimum of the 1º start
 +
 +{{:​si-bulk-40.png|}}
 +
 +The scripts uses the parameter rescal in fireball.in and unitary positions and lattice vectors with 2 atoms/cell
 +to obtain the kpts points we used xeo:
 +
 +{{:​xeo-menu-kpts.png|}}
 +
 +{{:​xeo-kpts.png|}}
 +
 +The bulk mudulus can be calculed also with xeo (Utilities->​Bulk modulus), in the in line command:
 +
 +  $ xeo -Bulk Vol.dat zincblende
 +  E_min =     ​-214.35239 ​   eV
 +  a_min =        5.43719 ​   angs 
 +  Volumen =       ​40.18518 ang**3 ​
 +  Bulk modulus =      100.79399 ​ GPa
 +
  
  
bulk_optimization.1259098541.txt.gz · Last modified: 2011/02/18 13:14 (external edit)