Scripts pour l'étude de la grille de points k

Script pour lancer la série de calculs

Il s'agit du fichier run_kpoints.sh. Cette procédure écrit le fichier KPOINTS et exécute VASP pour une série de grilles de points k allant de 1x1x1 à 12x12x12. À la fin de chaque calcul, certains fichiers de sortie sont sauvegardés pour être analysés par la suite.

#!/bin/bash

# boucle sur i = 1 a 12
for i in $(seq 1 12)
    do
        # ecriture du fichier KPOINTS
        echo "k points"  >  KPOINTS
        echo " 0"        >> KPOINTS
        echo "Gamma"     >> KPOINTS
        echo " $i $i $i" >> KPOINTS
        echo " 0 0 0"    >> KPOINTS

        # affiche le fichier KPOINTS
        echo -e "\n ================================================================"
        echo " KPOINTS file"
        echo  " ================================================================"
        cat KPOINTS
        echo -e " ================================================================\n"

        # execution de vasp
        vasp

        # sauvegarde des fichiers importants
        echo ""
        cp -v OSZICAR OSZICAR_$i
        cp -v CONTCAR CONTCAR_$i

        # supprime les fichiers de fonction d'onde (WAVECAR)
        # et de densite (CHGCAR) pour eviter un restart
        echo ""
        rm -v WAVECAR CHGCAR

    done

Script d'analyse des résultats

Il s'agit du fichier ana_kpoints.py. Ce script utilise le module pymatgen pour extraire les données des fichiers de sortie de VASP. Ce script suppose que les fichiers sont nommés et numérotés comme le fait le script précédent pour lancer les calculs.

Pour exécuter le script :

python3 ana_kpoints.py

Code :

#!/usr/bin/env python

import os

# use pymatgen objects
from pymatgen.io.vasp.inputs import Poscar
from pymatgen.io.vasp.outputs import Oszicar

# header
print("#  k    a       b       c     alpha   beta  gamma" +
      "     Econv           SinglePts        DE")

# OSZICAR files
oszicar = [f for f in os.listdir("./") if "OSZICAR_" in f]
oszicar.sort(key=lambda x: int(x.strip("OSZICAR_")))

# CONTCAR files
contcar = [f for f in os.listdir("./") if "CONTCAR_" in f]
contcar.sort(key=lambda x: int(x.strip("CONTCAR_")))

save = 0.0

# boucle sur les points k
for cont, osz in zip(contcar, oszicar):
    i = int(cont.strip("CONTCAR_"))

    # chargement de la structure
    p = Poscar.from_file(cont)
    a, b, c = p.structure.lattice.abc
    alpha, beta, gamma = p.structure.lattice.angles

    # lecture du fichier OSZICAR
    o = Oszicar(osz)
    elast = o.final_energy
    singlePoint = o.ionic_steps[0]["E0"]

    # affiche les resultats
    print("%4d %7.3f %7.3f %7.3f %6.1f %6.1f %6.1f %12.7f     %12.7f %12.3f" %
          (i, a, b, c, alpha, beta, gamma, elast, singlePoint,
           (singlePoint - save) * 1000.))

    # save energy to compute convergence
    save = singlePoint

results matching ""

    No results matching ""