Professional Documents
Culture Documents
Julio, 2007
Sección 1. Ficheros
1
1. Superficie (111) de un metal fcc
2. Superficie (100) de un metal fcc
3. Superficie (110) de un metal fcc
Apéndice D. Programas
Páginas útiles para encontrar información sobre el uso del programa VASP
2
Estos apuntes no sustituyen el manual de VASP ni el tutorial (es indispensable manejar
ambos y conocerlos suficientemente para aprovechar la información que ofrecen). Aquí se
incluyen únicamente algunos consejos y un esquema para iniciar cualquier trabajo, en forma
muy general. Al final hay una sección con páginas web en las que se puede consultar
información sobre el uso de este programa.
Sección 1. Ficheros
OUTCAR: Es el fichero principal de resultados, en él se escriben los datos más relevantes del
cálculo: la geometría de inicio (con una tabla de vecinos más cercanos: buscar “nearest
neighbor table”), las coordenadas del sistema en coordenadas cartesianas y directas, los
parámetros de entrada del cálculo, la energía en cada paso de una optimización, las frecuencias
(si se les ha pedido), etc.
OSZICAR: Resume los datos de la energía en cada iteración. En un cálculo NEB proporciona
el valor de energía total de todas las imágenes.
CONTCAR: En este fichero se encuentra la geometría después del cálculo, se actualiza tras
cada iteración nuclear.
XDATCAR: Acumula todas las geometrías durante el cálculo.
vasprun.xml: Es un fichero en lenguaje máquina, necesario para analizar otros ficheros de
salida como el LOCPOT, ELFCAR y DOSCAR.
Entre todos los ficheros de resultados opcionales que proporciona el cálculo se encuentran
(para que se escriban, es necesario indicarlo en el INCAR, incluyendo la línea que a
continuación se da entre paréntesis):
DOSCAR: Contiene la información de la Densidad de Estados total y de cada átomo y sus
contribuciones s, p y d (LORBT = 11).
LOCPOT: Información del potencial químico en cada punto del sistema, desde el core de los
átomos hasta el vacío (LVTOT = T).
ELFCAR: Distribución de la densidad electrónica (LELF = T).
3
CHGCAR: Cargas electrónicas (el programa bader_lnx (la página web en la que se puede
adquirir este programa está en la última página de este manual) permite leer este fichero y dar
los valores del análisis de Bader y de Voronoi) (LCHARG = T).
WAVECAR: Fichero que contiene información de las funciones de onda del sistema, se escribe
al final del cálculo y es útil para reiniciar el cálculo, cuando se han terminado las iteraciones
indicadas y aún no ha convergido (LWAVE = T). El WAVECAR de un cálculo anterior no se
puede usar si son diferentes el tamaño de la celda y la energía de corte)
Para inicial cualquier cálculo con VASP, es necesario iniciar ajustando los parámetros a los
valores más adecuados, por aquí vamos a empezar:
4
En adelante se presenta una gráfica de la búsqueda del parámetro de red para el Cu
(parámetro experimental = 3.61 Å):
Para comprobar si el parámetro de celda es correcto, hay una prueba muy sencilla,
que es el cálculo del módulo de bulk (B), el inverso de la compresibilidad, que puede
obtenerse con cualquiera de estas dos ecuaciones:
∂P 2∂ E
2
B = −V0 = −V0
∂V V0 ∂V 2 V
0
5
> grep pressure OUTCAR
> grep volume OUTCAR
La construcción del POSCAR depende del plano de corte de la superficie, por ello
los vectores unitarios y la base atómica es diferente para cada plano de corte. En el
apéndice C se presentan ejemplos de ficheros POSCAR de varias superficies. Javier
Carrasco creo un programa en perl para construir modelos de superficies a partir de los
datos de un fichero POSCAR o CONTCAR de la celda primitiva. En el apéndice D se
incluye una copia, para su ejecución en Linux:
6
Para determinar el número de capas atómicas en el modelo, hay dos formas de
hacerlo:
2) Calcular la energía superficial de una celda (1x1) con diferentes números de capas
atómicas.
Esup = (Eslab – natomos Ebulk) / 2
Donde Esup es la energía superficial, Eslab es la energía del modelo, natomos es el número
de átomos que contiene el slab y Ebulk es la energía de un átomo en el bulk.
En el apéndice E hay una serie de tablas con los parámetros que se pueden variar
para construir un modelo de superficie. La energía y el tiempo de cálculo son los dos
factores más importantes que conviene cuidar para determinar los valores más
adecuados y a la vez que no consumen tiempo de cálculo exagerado.
Junto con el programa VASP, se suministran los pseudopotenciales de todos los elementos.
Cada uno de los cuales está en un directorio nombrado con su símbolo atómico, dentro está el
fichero POTCAR comprimido de ese elemento, (POTCAR.Z). Para algunos elementos hay
varios POTCAR, que se han construido con alguna característica especial, por ejemplo,
incluyendo orbitales s o p del core en la valencia, por experiencia los que no tienen nada
especial dan buenos resultados.
Si el sistema solo tiene una especie, basta guardar el fichero POTCAR.Z en el directorio en
el que se prepara el cálculo y descomprimirlo (utilizando >gunzip POTCAR.Z).
Si por el contrario, el sistema está formado por más especies, habrá que guardar un solo
POTCAR que acumule todos los POTCAR de cada elemento, por ello sugerimos los
siguientes pasos:
1) Guardar el POTCAR.Z del primer elemento en el directorio de trabajo.
2) Descomprimirlo ( > gunzip POTCAR.Z).
3) Guardarlo con otro nombre, por ejemplo, o.potcar si el POTCAR es de O.
7
Así si el sistema es como en la sección anterior CO/Pt, se guardarán o.potcar, c.potcar y
pt.potcar en un mismo directorio.
4) Unir los diferentes POTCAR en el mismo orden que se ha indicado en el POSCAR ( >
cat o.potcar c.potcar pt.potcar >> POTCAR).
La malla de puntos k del espacio recíproco debe ser densa cuando la celda es pequeña y
viceversa, por ejemplo, para un solo átomo en bulk, una malla de 11x11x11 es un buen punto de
partida, cuando se haya optimizado el parámetro de la celda se puede probar una malla de
13x13x13, y 15x15x15 para ver si cambia el valor de la energía, si es así, se pueden repetir un
par de cálculos alrededor del parámetro de red optimizado, para comprobar que el valor
calculado es el correcto.
Para una superficie, depende del tamaño de la misma, hay una regla empírica que nos ha
llegado a través de Núria López: La longitud de la celda en cada eje (en Å) multiplicada por él
número de puntos k en esa misma dirección debe ser mayor de 20.
Las notas del tutorial de la escuela VASP describen muy bien como construir un fichero
INCAR.
Como se sabe hay más de 60 parámetros en este fichero, la mayoría de ellos no los
cambiamos, si no que mantenemos el valor por defecto.
En adelante se describen algunos de los parámetros que a lo largo de algunos años de usar
este programa hemos visto que son los que más pueden influir en un cálculo y que deberían de
ser los más estudiados en el manual VASP. También damos los valores que hemos ido usando y
8
sugerimos que se prueben en un primer sistema para luego usarlos confiadamente a lo largo del
trabajo que se desarrolla.
ISTAR : Inicio del cálculo, a partir de cero (0) o reinicio (1), para este caso se debe tener el
fichero WAVECAR (verificar que se le ha pedido al cálculo anterior con LWAV = T en el
INCAR) en el directorio donde se ejecuta el cálculo.
NWRITE: La cantidad de información, recomendamos 2, si se pide menos no se ve cierta
información, por ejemplo, las fuerzas que actúan en cada átomo en cada iteración atómica.
NSW: Número de iteraciones atómicas, por defecto es 40, nosotros tradicionalmente hemos
usado 71, pero se puede cambiar según convenga, por ejemplo se ve que un cálculo va
convergiendo hasta la iteración 40, luego empieza a divergir, se puede enviar un cálculo con 39
iteraciones, guardar el WAVECAR y reiniciar el cálculo
IALGO = 38, indica usar el método DAVISON, éste es el recomendado para cálculo
difíciles.
ISMEAR: Es el método de llenado de orbitales, los valores que usamos generalmente son:
2 Para metales, que indica usar el método de Methfessel-Paxton de orden 2.
0 Para óxidos o semiconductores, también para celda muy grandes.
-5 Para cálculos muy precisos, sin optimización de átomos metálicos, por
ejemplo, para calcular la DOS.
SIGMA: Es el ancho del llenado de orbitales, 0.2 eV es un buen valor para casi todos los
cálculos.
9
ENCUT: Es la límite de energía para considerar las ondas planas para el cálculo, entre más alto
sea este valor, más ondas planas se incluyen en el cálculo y más preciso es la energía obtenida.
Un valor recomendable para metales es 350, para adsorción de moléculas sencillas que incluyen
N, C y O en metales, 415 puede ser un buen valor, para celdas muy grandes y/o moléculas
complicadas, más de 20 Å por lado, 515 eV ha resultado ser un valor aceptable. En el apéndice
F hay una prueba que hicimos de espacio vacío contra energía de corte, de un sistema
relativamente complicado: la adsorción de una molécula de nitro-benzoestireno en túneles de
Au, se calculó la molécula y los túneles por separado, posteriormente la molécula lejos del Au y
por último la molécula adsorbida. Se varió el espacio vacío entre 10 y 25 Å y la energía de corte
entre 415 y 515 eV.
EDIFFG: Límite al que se detiene la optimización, si la diferencia entre dos pasos continuos es
más pequeña que este valor. Hay dos criterios que pueden usarse para la optimización: la
energía y las fuerzas.
En esta sección damos algunas recomendaciones para ciertos cálculos con VASP, son los
procedimientos que hemos usado en estos años para calcular algunos sistemas.
Optimización de geometría
POSCAR
Para relajar parcialmente un sistema, es necesario liberar sólo algunas de las coordenadas de sus
átomos, es importante que en la séptima línea esté la leyenda “Selective dynamics”, o bien una
“S” y que se indique en el POSCAR las coordenadas x, y, z que se dejan relajar para cada
posición atómica con una letra “T”. Si la séptima línea no existe, el programa optimizará todas
las coordenadas de los átomos que forman el sistema.
INCAR
Los parámetros que es necesario tener en cuenta son:
10
1 Método quasi-Newton, RMM-DIIS, es el que se puede usar cuando se está muy cerca
del mínimo, es decir, que el sistema no se debe mover mucho en cada iteración, por ello es el
que se usa para refinar la búsqueda de la geometría del estado de transición, a partir de una
geometría aproximada, obtenida por ejemplo con el método NEB o el dimer method.
2 Método de gradiente conjugado, es el que se usa generalmente en una optimización de
geometría en que no se sabe si el mínimo está lejos o cerca de la geometría inicial, es robusto y
bastante confiable.
EDIFFG: Los valores que podemos recomendar para los dos criterios de optimización:
a) Energía, en tal caso, sencillamente se le da el valor (0.1 E -03 es un valor suficiente, para
cálculos más estrictos, se puede disminuir este valor dos ordenes de magnitud).
b) Fuerzas, es necesario anteponer un signo negativo al valor (-0.01 es un valor razonable para
todos los cálculos).
En el fichero OUTCAR, al final de cada paso de optimización atómica se indica la energía total
del sistema y las fuerzas que actúan en cada átomo.
Cálculo de frecuencias
POSCAR
Para calcular la frecuencia de vibración de algunos átomos del sistema, se liberan las
coordenadas correspondientes, por ejemplo para calcular las frecuencias de vibración de una
molécula adsorbida, se liberan las coordenadas de el(los) adsorbato(s) y se mantienen fijas las
correspondientes a los átomos del sustrato.
INCAR
IBRION = 5 Indica que se hace un cálculo de frecuencias, en este caso, en el POSCAR se
deben indicar las coordenadas de los átomos que vibrarán.
NSW ≠ 0, el programa por defecto hace 3*N+1 iteraciones para este cáculo, donde N es el
numero de átomos liberados para calcular las frecuencias, si se desea forzar a un numero de
iteraciones determinado se debe indicar dar ese valor a NSW y cambiar el valor de IBRION a -
5.
EDIFFG: Criterios que pueden usarse para calcular las frecuencias:
a) Energía, en tal caso, 0.1 E -05 es un valor razonable.
b) Fuerzas, -0.01 es un valor razonable.
Al final del fichero OUTCAR se indican los valores de las frecuencias de vibración, así como
los átomos del sistema que contribuyen en la vibración y el desplazamiento de cada uno, un
11
primer bloque presenta el desplazamiento en Å y otro bloque los desplazamientos ponderados
por las masas.
Cálculo de DOS
POSCAR
Para este tipo de cálculo se parte de una geometría ya optimizada del sistema (copiando el
CONTCAR a POSCAR).
KPOINTS
Para construir el fichero correspondiente, se debe tomar en cuenta que la malla de puntos k debe
ser más densa que la de una optimización, puesto que se requiere mayor precisión. El número de
puntos k puede ser el doble o más de los usados en una optimización.
INCAR
IBRION = -1
NSW = 0
ISMEAR: El método de llenado de orbitales, se recomiendo usar:
0 El método gaussiano
Si se le indica, desglosa la contribución a la DOS del sistema por átomos y por contribuciones s,
p y d:
LORBIT = 11
Se debe tomar en cuenta que la suma de las contribuciones s, p y d no es igual a la DOS total,
por ello hay que tener cuidado al analizar los resultados. También, como lo menciona el manual
de VASP, los resultados prácticamente son para fines comparativos entre dos cálculos hechos
con los mismos parámetros.
Para analizar las DOS calculadas, se puede usar el programa p4vasp, o bien, el programa creado
por Javier Carrasco que se da en la sección de programas (apéndice D).
12
Cálculo de función trabajo
Para calcular esta propiedad electrónica de un sistema, es necesario utilizar una geometría
optimizada y calcular el potencial local del sistema, el programa lo puede calcular, el fichero de
resultados se escribe en el fichero LOCPOT, para que se escriba este fichero, es necesario
indicarlo en el INCAR.
INCAR
IBRION = -1
NSW = 0
LVTOT = T
POSCAR
Para este tipo de cálculo se parte de una geometría ya optimizada del sistema (copiando el
CONTCAR a POSCAR).
Para calcular la función trabajo (Φ):
Φ = Evacio + εFermi
Para calcular core-level shift es necesario partir de una geometría optimizada, posteriormente
calcular el estado inicial del sistema y por último el estado final después de quitar un electrón,
para calcular el estado inicial, se debe indicar al INCAR los siguientes parámetros:
ICORELEVEL = 1
ISMEAR = -5
13
Cálculo del nivel de Fermi
Para obtener el valor del nivel de fermi (o energía de Fermi) del sistema correcto es necesario
corregir al valor obtenido en el fichero DOSCAR y OUTCAR, restando un parámetro:
1) Para átomos o moléculas se debe sumar el valor alpha+beta obtenido en la misma línea
del OUTCAR que da el nivel de Fermi.
2) Para el resto de sistemas se debe calcular el potencial en el vacío, en principio debería
ser cero, pero como casi siempre no lo es (supongamos que es -4.56 eV), para corregir
el nivel de Fermi que da el OUTCAR, se suma el valor calculado para el potencial en el
vacío (para que el potencial en el vacío sea cero, se le debe sumar 4.56 eV, por lo tanto,
también al nivel de Fermi se le debe sumar el mismo valor de 4.56 eV).
Partiendo de los ficheros POSCAR del estado inicial (por ejemplo, POSCAR.ini) y final (por
ejemplo, POSCAR.fin), ambos bien caracterizados como puntos estacionarios, se interpolan las
distancias entre ellos para obtener un determinado número de imágenes intermedias (n), a partir
de un script llamado interpolPOSCAR creado por Daniel Torres, dentro del cual están las
instrucciones para usarlo. Antes de ejecutar este programa, se debe tomar en cuenta que el
interpolPOSCAR diferencia entre 0 y 1, lo que para el programa VASP, al tener propiedades
periódicas, es indistinto, por ello, se debe revisar cuidadosamente que ambos ficheros POSCAR
coincidan en las coordenadas, para VASP es igual que la coordenada z del átomo 2 sea 1.02 que
0.02, pero no para el interpolPOSCAR, por ello al interpolar esta coordenada, en las diversas
imágenes, tomará valores entre 1.02 y 0.02 (0.82, 0.62, 0.42, 062), lo que es incorrecto, por ello
se debe revisar que las coordenadas entre ambos POSCAR sean consistentes y modificar uno de
los POSCAR si no es así.
En adelante se proporciona un breve resumen de cómo crear los ficheros de entrada para un
cálculo NEB usando el programa interpolPOSCAR:
Este fichero POSCAR debe tener liberadas las coordenadas de los átomos que reaccionan.
14
3. Ejecutar el programa
En el directorio del cálculo deben estar los correspondientes ficheros KPOINTS, POTCAR e
INCAR. El POTCAR y el KPOINTS puede ser el usado para optimizar la geometría de los
estados inicial y final.
El resultado del cálculo NEB se escribe en cada directorio 01, 02, .. 0(n-1) como si fuese una
optimización: OUTCAR, CONTCAR, etc.
El directorio en el que se encuentra la imagen con la energía mayor es el que podría ser el
estado de transición, esta configuración deberá tener fuerzas pequeñas en los átomos que se ha
permitido optimizar y se le deben calcular frecuencias de vibración a los átomos que reaccionan
(cuyas coordenadas se habían liberado en el fichero POSCAR), si se obtiene una frecuencia
imaginaria de alrededor de 400 cm-1, se puede considerar que es la geometría del estado de
transición de la reacción y que la dirección correspondiente a esa frecuencia imaginaria es la
coordenada de reacción. Si no se cumplen estas dos condiciones (fuerzas pequeñas y una
frecuencia imaginaria grande) se debe continuar la búsqueda del estado de transición.
1) Si las fuerzas son muy grandes, se puede reenviar el cálculo NEB, utilizando los CONTCAR
de cada imagen como POSCAR y disminuyendo el criterio de convergencia de la optimización
atómica, por ejemplo dos ordenes de magnitud.
2) Si aunque se reenvie el cálculo NEB, no hay cambios en la energía, o bien, se han calculado
las frecuencias de vibración de esta configuración y hay más de una frecuencia imaginaria se
puede utilizar el dimer method, o reducir las fuerzas mediante una optimización, ambos
procedimientos se describe brevemente a continuación:
15
b) Cálculo con dimer method
En el directorio del cálculo deben estar los ficheros KPOINTS, POTCAR e INCAR.
ICHAIN =2
IMAGES = 2
Si una configuración que pudiera ser un estado de transición, resultado de un cálculo NEB o con
dimer method (en ocasiones, en un cálculo con dimer method, la energía ya no cambia pero el
programa se continua ejecutando, la ejecución se puede detener y calcular sus frecuencias de
vibración, porque probablemente ya se tiene el estado de transición) aún tiene fuerzas grandes
con una sola frecuencia imaginaria, o bien, la segunda frecuencia imaginaria no es muy grande,
las fuerzas se pueden disminuir con una optimización con el método quasi-Newton. El
procedimiento es el mismo que el seguido para la optimización de geometría, sólo hay que tener
16
Apéndice A. Parámetro de red calculado de algunos metales, usando el funcional PW91 y los
pseudopotenciales PAW correspondientes a este funcional.
Metal Estructura Parámetro de red (a) Módulo de bulto (B) Parámetro de red (a) Distancia Módulo de bulto (B)
primeros vecinos
Cu fcc 3.61 138 3.634 2.57 137
Los parámetros de red y la distancia a primeros vecinos están en Å y el módulo de bulk en GPa.
17
Apéndice B. Ejemplos de ficheros POSCAR para
metales en bulk
En adelante se presentan los ficheros POSCAR de las estructuras cristalinas bcc, fcc,
hcp, diamante, en primer lugar se indican los vectores primitivos y la base atómica
correspondiente.
1. Estructura bcc:
Vectores primitivos
-0.5 0.5 0.5
-0.5 0.5 0.5
0.5 0.5 -0.5
Base atómica
0.0 0.0 0.0
POSCAR:
Atomo de V en una celda bcc
3.03
-0.5 0.5 0.5
-0.5 0.5 0.5
0.5 0.5 -0.5
1
Cartesianas
0.0 0.0 0.0
2. Estructura fcc:
Vectores primitivos
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
Base atómica
0.0 0.0 0.0
18
POSCAR:
Atomo de Rh en una celda fcc
3.846
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
1
Cartesianas
0.0 0.0 0.0
3. Estructura hcp:
Vectores primitivos
1.0 0.0 0.0
0.5 0.86603 0.0
0.0 0.0 1.63299
Base atómica (en coordenadas cartesianas)
0.0 0.0 0.0
0.5 0.2887 0.8165
POSCAR:
Atomo de Ru en una celda hcp
2.698
1.0 0.0 0.0
0.5 0.86603 0.0
0.0 0.0 1.63299
2
Cartesianas
0.0 0.0 0.0
0.5 0.2887 0.8165
19
4. Estructura de diamante:
Vectores primitivos
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
POSCAR:
Atomo de Sn en una celda de diamante
6.646
0.0 0.5 0.5
0.5 0.0 0.5
0.5 0.5 0.0
2
Cartesianas
0.0 0.0 0.0
0.25 0.25 0.25
20
Apéndice C. Ejemplos de ficheros POSCAR para diferentes
superficies de una estructura fcc
1. Superficie (111) de un metal fcc, los vectores unitarios son factores de la distancia a
primeros vecinos, que se calcula a partir del parámetro de red (a):
a
d=
2
Los vectores primitivos son:
d 0 0
3
0.5d d 0
2
0 0 z
Los vectores unitarios están dados en función del tamaño de la celda del modelo, que
por lo general se elige pensando en la estructura que forma el adsorbato en la superficie
o en el cantidad de sitios necesarios.
21
donde x e y son los números de celdas primitivas en el eje x e y, respectivamente, que
incluye la celda unitaria.
Primera capa
0.0 0.0 0.0
d 0.0 0.0
3
0.5d d 0.0
2
3
1.5d d 0.0
2
Segunda capa
1
0.5d d -b
2 3
1
1.5d d -b
2 3
2
1d d -b
3
2
2d d -b
3
Tercera capa
1
1d d -2b
3
1
2d d -2b
3
2
1.5d d -2b
3
2
2.5d d -2b
3
22
Ejemplo de POSCAR para una celda 4x4 del Cu con 3 capas (con dos relajadas):
23
2.0000000000 2.309401076760 -1.63299312388 F F F
3.0000000000 2.309401076760 -1.63299312388 F F F
4.0000000000 2.309401076760 -1.63299312388 F F F
5.0000000000 2.309401076760 -1.63299312388 F F F
2.5000000000 3.175426480540 -1.63299312388 F F F
3.5000000000 3.175426480540 -1.63299312388 F F F
4.5000000000 3.175426480540 -1.63299312388 F F F
5.5000000000 3.175426480540 -1.63299312388 F F F
Un ejemplo de POSCAR para una celda 2x2 del Co (con dos capas relajadas)
24
3. Superficie (110) de un metal fcc
Un ejemplo de POSCAR para una celda 3x3 del Co (con dos capas relajadas)
25
Apéndice D. Programas
#! /usr/bin/perl
#----------------------------------------------------------------
# PROGRAM Supercel TO GENERATE SUPERCELLS USING UNIT CELLS IN
# poscar/contcar VASP FORMAT
#
# UTILITY:
# a. Create supercells expanding along x,y or/and z directions
# b. Create surfaces with a certain vacuum (restriction: only
# surfaces perpendicular to director vectors a, b & c can be
# made
#
# UTILIZATION:
# perl supercel.pl ficero_poscar/contcar
#
# By Javier Carrasco (carrasco@qf.ub.es)
#----------------------------------------------------------------
26
$suma=0;
$sum=0;
for ($j=0;$j<@at;$j++){
$at[$j]=$at[$j];
$sum=$sum+1;
$NAT=$NAT+$at[$j];
};
};
if (($.>8)&&($.<$NAT+9)){
@fields=split (' ');
$x[$i]=$fields[0];$y[$i]=$fields[1];$z[$i]=$fields[2];
$optx[$i]=$fields[3];$opty[$i]=$fields[4];$optz[$i]=$fields[5];
$i++;
};
};
close (IN);
print "\n";
print "Supercell size:\n";
print "---------------\n";
print "repeated units along x: ";
$nx=<STDIN>; chomp($nx);
print "repeated units along y: ";
$ny=<STDIN>; chomp($ny);
print "repeated units along z: ";
$nz=<STDIN>; chomp($nz);
print "\n";
print "Surface information:\n";
print "--------------------\n";
while (1){
print "Generate surface (y/n)? > ";
$resp1=<STDIN>; chomp($resp1);
if (($resp1 ne "y")&&($resp1 ne "n")){
print "Write yes (y) or no (n) !\n";
print "Try again...\n";
print "\n";
};
if (($resp1 eq "y")||($resp1 eq "n")){
last;
};
};
if ($resp1 eq "y"){
while (1) {
print "Specify direction for vacuum, DIRECT:(a, b o c) > ";
$resp2=<STDIN>; chomp($resp2);
if (($resp2 ne "a")&&($resp2 ne "b")&&($resp2 ne "c")){
print "Please, write \"a\" \"b\" o \"c\" \n";
print "Try again...\n";
print "\n";
};
if (($resp2 ne "a")||($resp2 ne "b")||($resp2 ne "c")){
print "Specify desired vacuum, in Ansgtrom > ";
$vacio=<STDIN>; chomp($vacio);
last;
27
};
};
};
# PROCESSING DATA
$sescala=1.0;
$sax=$escala*$ax*$nx;$say=$escala*$ay*$ny;$saz=$escala*$az*$nz;
$sbx=$escala*$bx*$nx;$sby=$escala*$by*$ny;$sbz=$escala*$bz*$nz;
$scx=$escala*$cx*$nx;$scy=$escala*$cy*$ny;$scz=$escala*$cz*$nz;
$msa=sqrt($sax**2+$say**2+$saz**2);
$msb=sqrt($sbx**2+$sby**2+$sbz**2);
$msc=sqrt($scx**2+$scy**2+$scz**2);
for ($p=0;$p<$NAT;$p++){
if ($x[$p]<0.0) {
$x[$p]=$x[$p]+1;
};
if ($y[$p]<0.0) {
$y[$p]=$y[$p]+1;
};
if ($z[$p]<0.0) {
$z[$p]=$z[$p]+1;
};
};
$dim=$nx*$ny*$nz;
$SNAT=$dim*$NAT;
for ($r=0;$r<@at;$r++){
$sat[$r]=$at[$r]*$dim;
};
28
print "\n";
print "Write a name for output POSCAR file > ";
$output=<STDIN>; chomp($output);
for ($q=0;$q<$NAT;$q++) {
$sum2=0.0;
for ($i=0;$i<$nx;$i++) {
for ($j=0;$j<$ny;$j++) {
for ($k=0;$k<$nz;$k++) {
$sx[$q][$sum2]=$x[$q]/$nx+$i/$nx;
if (($resp1 eq "y")&&($resp2 eq "a")){
$sx[$q][$sum2]=$sx[$q][$sum2]*$msa/($msa+$vacio);
};
$sy[$q][$sum2]=$y[$q]/$ny+$j/$ny;
if (($resp1 eq "y")&&($resp2 eq "b")){
$sy[$q][$sum2]=$sy[$q][$sum2]*$msb/($msb+$vacio);
};
$sz[$q][$sum2]=$z[$q]/$nz+$k/$nz;
if (($resp1 eq "y")&&($resp2 eq "c")){
$sz[$q][$sum2]=$sz[$q][$sum2]*$msc/($msc+$vacio);
};
printf OUT1 "%2.11f %2.11f %2.11f $optx[$q] $opty[$q]
$optz[$q]\n",$sx[$q][$sum2],$sy[$q][$sum2],$sz[$q][$sum2];
printf OUT2 "x($q-$sum2), x/$nx+$i/$nx: %2.5f y($q-
$sum2), y/$ny+$j/$ny: %2.5f z($q-$sum2), z/$nz+$k/$nz: %2.5f
($optx[$q] $opty[$q]
$optz[$q])\n",$sx[$q][$sum2],$sy[$q][$sum2],$sz[$q][$sum2];
$sum2++;
29
};
};
};
};
print "\n";
print "Total atoms in the $nx x $ny x $nz supercell: $SNAT\n";
if ($resp1 eq "y"){
print "Vacuum: $vacio AA for $resp2 axis\n";
};
print "\n";
print "Results in (POSCAR format): $output\n";
print "For more details about supercell generation see also:
$output.out\n";
print "\n";
print " J.C.R\n";
30
2. Programa para crear imágenes para un cálculo NEB
–SCRIPT-
######################&MAKE BY DANI&###############################
#
# Intrucciones de uso
#
# 0. Este script sirve para crear las imagenes para la NEB
# 1. Este archivo ha de tener permisos de ejecucion
# 2. "rep" es el numero de imagenes, contando la cero (00,
01,02,...)
# 3. Crear un POSCAR concatenado donde la primera configuracion ha
de ser #la del estado inicial d la NEB
# 4. Crear una serie de directorios vacios donde se crearan los
POSCARs
# 5. Escribir el la linea de comandos ./interpolPOSCAR POSCAR
# 6. Si el POSCAR contiene mas de 4 tipos de atomos diferentes se
han de #editar
# las siguientes lineas
# lines = $1 + $2 + $3 + $4 +8
# atoms= $1 + $2 + $3 + $
# Por ejemplo si disponemos de 6 tipos de atomos se deberia
poner:
# lines = $1 + $2 + $3 + $4 + $5 + $6 +8
# atoms= $1 + $2 + $3 + $4 + $% + $6
31
}
} else {
lines2 = lines + 8
if ( line > lines2 )
{
x2[line] = $1; y2[line] = $2 ; z2[line] = $3
}
}
}
END {
lines4=lines2
lines=lines-8
for ( line=1; line<=lines ; line ++ ) {
line3 = line + lines4
cx1=cx1+ x[line] ; cy1=cy1+ y[line] ; cz1=cz1+ z[line]
cx2=cx2+ x2[line3]; cy2=cy2+ y2[line3]; cz2=cz2+
z2[line3]
}
if (center) {
cx=(cx2-cx1)/lines
cy=(cy2-cy1)/lines
cz=(cz2-cz1)/lines
print "center of mass for second cell will be shifted
by",cx,cy,cz
}
32
3. Programa para convertir un fichero CONTCAR a un
fichero en formato para visualizar en xcrysden
(.xspf) –FORTRAN 77-
PROGRAM CARTES
C Este programa lee un archivo de coordenadas y genera uno
para
C xcrysden
IMPLICIT REAL*8(A-H,O-Z)
PARAMETER (N=200)
DIMENSION A(3,3),B(N,3),C(N,3),Iatm(20),Natm(20)
CHARACTER*40 Titulo,Calculo,Coordenadas
C Pide el numero de atomos
WRITE(6,*) "Dime el numero de atomos del sistema"
READ (5,*) m
Do i=1,nt
Write(6,*) "Dime el numero atomico del atomo",i," y su
cantid
bad"
read (5,*) Iatm(i), Natm(i)
Enddo
OPEN(2,FILE="CONTCAR")
OPEN(3,FILE="cry")
C Lee el titulo
READ(2,150) Titulo
C Lee la constante de red
Read(2,100)r
C Lee los vectores de la red
Do i=1,3
Read(2,*)(A(i,j),j=1,3)
Enddo
C Lee el numero de atomos
Read(2,*)l
C Lee el tipo de calculo
READ(2,150) Calculo
C Lee el tipo de coordenadas
READ(2,150) Coordenadas
C Lee las coordenadas directas
Do i=1,m
Read(2,*)(B(i,j),j=1,3)
Enddo
C *****
C Escribe el titulo
WRITE(3,*) "SLAB"
C Escribe "PRIMVEC"
33
WRITE(3,*) "PRIMVEC"
C Escribe los vectores de la red
C Do i=1,3
C Write(3,300)(A(i,j),j=1,3)
C Enddo
C ******
C Multiplica los vectores por la contante de red
Do i=1,3
Do j=1,3
A(i,j)=r*A(i,j)
Enddo
Enddo
C Escribe los vectores modificados
Do i=1,3
Write(3,300)(A(i,j),j=1,3)
Enddo
C Escribe "PRIMCOORD"
WRITE(3,*) "PRIMCOORD"
C Escribe el numero de atomos
Write(3,*) m, " 2"
C ******
C **********
C Calcula las coordenas cartesianas
Do i=1,m
Do j=1,3
C(i,j)=0.
Do k=1,3
C(i,j)=C(i,j)+B(i,k)*A(k,j)
Enddo
Enddo
Enddo
C ******
C Do i=1,m
C If ((C(i,3)).lt.(13.0)) then
C C(i,3)=C(i,3)+A(3,3)
C endif
C Enddo
C ***************
Do k=1,nt
Do i=1,Natm(k)
WRITE(3,700) Iatm(k),(C(i,j),j=1,3)
EndDo
Enddo
C *********
34
300 Format (3F14.10)
400 Format (3F16.8)
500 Format (I3,14(I3,F6.2))
600 Format (3x,14(I3,F6.2),/)
700 Format (I4,(3F16.10))
END
35
Apéndice E. Parámetros necesarios para construir
modelos periódicos.
En adelante se presenta una serie de tablas, que pueden ayudar a construir un modelo,
encontrando la geometría y los parámetros de cálculos adecuados para un determinado
cálculo. Entre paréntesis se indica el fichero de datos que hay que modificar.
Al ser la energía uno de los resultados más sensibles, es la que se propone utilizar
para ir determinado los parámetros, también el tiempo de cálculo es un factor a tener en
cuenta para tener un equilibrio entre precisión y recursos computacionales, en el
OUTCAR el tiempo se lee en “Elapsed CPU time”. La idea es en cada paso obtener el
parámetro más adecuado y usarlo para el punto siguiente.
1. Número de capas. (POSCAR sin relajar) Para ello es útil calcular la energía
superficial. (funcional PW91, celda (1x1), red 7x7x1 k, Ecutoff = 300)
No. capas Energía superficial (eV/Å) Tiempo (seg)
3
4
5
6
36
3. Espacio vacío. (POSCAR) Variar el espacio vacío incluido en la supercelda
(funcional PW91, 3 capas, Ecutoff = 300, celda (2x2) ó (3x3) con la malla de
puntos k obtenida en el paso anterior)
37
6. Funcional. (GGA en INCAR) (usar los parámetros obtenidos en los pasos
anteriores).
GGA Energía (eV) Tiempo (seg)
91
PB
RP
Nota: Si se considera necesario también se puede probar la aproximación
local de la DFT, para ello se debe usar el pseudopotencial correspondiente
(POTCAR) y omitir la línea GGA del (INCAR) también es conveniente
usar la línea VOLSKOWN = 1 en el INCAR.
38
Apéndice F. Prueba de convergencia de Energía de corte y
espacio vacío
3. Suma de fragmentos
Notas:
1. El método de Davison se usó en los casos en los que el cálculo con RMM-DIIS
no convergió, debido a que el método Davison es más robusto que aquel.
39
Páginas útiles para encontrar información sobre el uso del programa VASP
Grupo VASP
http://cms.mpi.univie.ac.at/vasp/
Manual de VASP
http://cms.mpi.univie.ac.at/vasp/vasp/vasp.html
40