Exécution de VASP
VASP est disponnible en plusieurs version :
- séquentielle : version monoprocessus
- MPI : version parallèle reposant sur la libraire Message Passing Interface
- Gamma point only : une version optimisée pour des calculs avec un seul point k
La parallélisation de VASP n'est pas l'objet de ce TP. Nous allons simplement voir ici comment exécuter VASP et décrire le contenu de la sortie standard.
Rendez vous dans le dossier Li/
.
Simple calcul d'énergie
Faisons un simple calcul d'énergie avec une version séquentielle de VASP.
Fichiers d'entrée
INCAR
Li metal
SYSTEM = "Li bcc"
Electronic
PREC = Accurate
EDIFF = 1e-6
ENCUT = 400
Ionic relaxation
NSW = 0
smearing
ISMEAR = 1
SIGMA = 0.2
Fichier POSCAR
Il s'agit d'une maille cubique centrée.
Li metal bcc
3.51
1.00 0.00 0.00
0.00 1.00 0.00
0.00 0.00 1.00
Li
2
Direct
0.0 0.0 0.0
0.5 0.5 0.5
Fichier KPOINTS
grille 6x6x6
0
Gamma
6 6 6
0 0 0
Fichier POTCAR
Les fichiers POTCAR sont fournis par VASP. Sur pyrene
ils sont accessibles via
le chargement d'un module qui établie une variable d'environement pointant vers
le dossier contenant les pseudopotentiels. Chaque fichier POTCAR est enregistré
dans un dossier du nom de l'élément
# gvallver@pyrene ~/VASP/tutorial/Li/ > module load pseudoVASP/paw/PBE
# gvallver@pyrene ~/VASP/tutorial/Li/ > ls $PAWROOT
Ac Ba_sv_GW Cd_pv_GW Cr_sv Fe_GW Ge_d_GW Hf Kr_GW Mn_pv N_GW P Pt_pv_GW Ru_pv Sn Ti_sv Y_sv_GW
Ag Be Cd_sv_GW Cr_sv_GW Fe_pv Ge_GW Hf_pv K_sv Mn_sv N_GW_new Pa Pt_sv_GW Ru_pv_GW Sn_d Ti_sv_GW Zn
Ag_GW Be_GW Ce C_s Fe_sv Ge_h Hf_sv K_sv_GW Mn_sv_GW N_h Pa_s Pu Ru_sv Sn_d_GW Tl Zn_GW
Ag_pv Be_sv Ce_3 Cs_sv Fe_sv_GW Ge_sv_GW Hf_sv_GW La Mo Ni Pb Pu_s Ru_sv_GW Sr_sv Tl_d Zn_pv_GW
Al Be_sv_GW Ce_GW Cs_sv_GW F_GW H Hg La_s Mo_pv Ni_GW Pb_d Ra_sv S Sr_sv_GW Tm Zn_sv_GW
Al_GW B_GW Ce_h Cu F_GW_new H1.25 H_GW Li Mo_sv Ni_pv Pb_d_GW Rb_pv Sb Ta Tm_3 Zr_sv
Al_sv_GW B_h C_GW Cu_GW F_h H1.33 H_h Li_AE_GW Mo_sv_GW Ni_sv_GW Pd Rb_sv Sb_d_GW Ta_pv U Zr_sv_GW
Am Bi C_GW_new Cu_pv Fr_sv H1.5 H_h_GW Li_GW N Np Pd_GW Rb_sv_GW Sb_GW Ta_sv_GW U_s
Ar Bi_d C_h Cu_pv_GW F_s H1.66 Ho Li_sv Na Np_s Pd_pv Re Sc Tb V
Ar_GW Bi_d_GW Cl data_base Ga H1.75 Ho_3 Li_sv_GW Na_pv N_s P_GW README.UPDATES Sc_sv Tb_3 V_pv
As Bi_GW Cl_GW Dy Ga_d H.25 H_s Lu Na_sv N_s_GW P_h RELEASE_NOTE.txt Sc_sv_GW Tc V_sv
As_d Br Cl_h Dy_3 Ga_d_GW H.33 I Lu_3 Na_sv_GW O Pm Re_pv Se Tc_pv V_sv_GW
As_GW Br_GW Cm Er Ga_GW H.42 I_GW Mg Nb_pv O_GW Pm_3 Re_sv_GW Se_GW Tc_sv W
At B_s Co Er_2 Ga_h H.5 In Mg_GW Nb_sv O_GW_new Po Rh S_GW Tc_sv_GW W_pv
At_d C Co_GW Er_3 Ga_pv_GW H.58 In_d Mg_pv Nb_sv_GW O_h Po_d Rh_GW S_h Te W_sv_GW
Au Ca_pv Co_pv Eu Ga_sv_GW H.66 In_d_GW Mg_pv_GW Nd Os Pr Rh_pv Si Te_GW Xe
Au_GW Ca_sv Co_sv Eu_2 Gd H.75 Ir Mg_sv Nd_3 O_s Pr_3 Rh_pv_GW Si_GW Th Xe_GW
Au_pv_GW Ca_sv_GW Co_sv_GW Eu_3 Gd_3 H_AE Ir_sv_GW Mg_sv_GW Ne O_s_GW Pt Rh_sv_GW Si_sv_GW Th_s Yb
B Cd Cr F Ge He K_pv Mn Ne_GW Os_pv Pt_GW Rn Sm Ti Yb_2
Ba_sv Cd_GW Cr_pv Fe Ge_d He_GW Kr Mn_GW Ne_GW_soft Os_sv_GW Pt_pv Ru Sm_3 Ti_pv Y_sv
# gvallver@pyrene ~/VASP/tutorial/Li/ > cp $PAWROOT/Li/POTCAR .
Le fichier POTCAR
est lisible vous pouvez l'ouvrir pour voir les informations
qu'il contient.
Résultats du calcul
Pour ce premier calcul très rapide, nous allons directement exécuter VASP dans
le terminal. Pour cela nous allons démarrer une session interactive sur un
nœud de calcul avec la commande salloc
.
# gvallver@pyrene ~/VASP/tutorial/Li/ > salloc
salloc: Granted job allocation 944207
srun: Job step created
Il faut ensuite charger le module vasp
. Par défaut c'est le module
vasp/5.3.5/openmpi/1.6.5
qui se charge :
# gvallver@pyrene ~/VASP/tutorial/Li/ > module load vasp/5.3.5/openmpi/1.6.5
# gvallver@pyrene ~/VASP/tutorial/Li/ > module list
Currently Loaded Modulefiles:
1) intel/15.0 2) openmpi/1.6.5/intel/15.0 3) vasp/5.3.5/openmpi/1.6.5
Lancer ensuite le programme VASP, voici le contenu du terminal :
# gvallver@pyrene ~/VASP/tutorial/Li/ > vasp
vasp.5.3.2 13Sep12 (build Nov 15 2012 16:01:14) complex
POSCAR found type information on POSCAR Li
POSCAR found : 1 types and 2 ions
LDA part: xc-table for Pade appr. of Perdew
POSCAR, INCAR and KPOINTS ok, starting setup
FFT: planning ...
WAVECAR not read
entering main loop
N E dE d eps ncg rms rms(c)
DAV: 1 -0.340959690341E+01 -0.34096E+01 -0.62201E+02 110 0.209E+02
DAV: 2 -0.388000344554E+01 -0.47041E+00 -0.43893E+00 150 0.935E+00
DAV: 3 -0.388586759537E+01 -0.58641E-02 -0.58119E-02 115 0.983E-01
DAV: 4 -0.388587563856E+01 -0.80432E-05 -0.80431E-05 160 0.427E-02
DAV: 5 -0.388587564076E+01 -0.22027E-08 -0.21730E-08 110 0.828E-04 0.191E-01
DAV: 6 -0.388442410915E+01 0.14515E-02 -0.41838E-05 140 0.420E-02 0.125E-01
DAV: 7 -0.388352943654E+01 0.89467E-03 -0.11246E-04 100 0.735E-02 0.573E-03
DAV: 8 -0.388350888296E+01 0.20554E-04 -0.12835E-06 120 0.641E-03 0.226E-03
DAV: 9 -0.388350495574E+01 0.39272E-05 -0.38949E-07 65 0.405E-03 0.857E-05
DAV: 10 -0.388350498301E+01 -0.27276E-07 -0.14588E-08 50 0.658E-04
1 F= -.38835050E+01 E0= -.38829691E+01 d E =-.160766E-02
writing wavefunctions
Dans ce simple calcul d'énergie on observe :
- La convergence de l'énergie en accord avec
EDIFF
, colonne 4 et 5 - L'algorithme de minimisation,
DAV
, pour davidson. - L'énergie totale sur la dernière ligne
- Des informations diverses : géométrie, fonctionnelle, lecture/écriture des fichiers ...
Optimisation de géométrie
Nous allons maintenant optimiser la géométrie.
Fichiers inputs
Changer légèrement le fichier POSCAR (le paramètre de maille et une position par exemple) et modifier le fichier INCAR de la façon suivante :
Li metal
SYSTEM = "Li bcc"
Electronic
PREC = Accurate
EDIFF = 1e-6
ENCUT = 400
NELMIN = 6
Ionic relaxation
NSW = 40
ISIF = 3
EDIFFG = -0.01
IBRION = 2
smearing
ISMEAR = 1
SIGMA = 0.2
La partie concernant la relaxation de la géométrie a été modifiée. Vous pourrez consulter le Wiki des mots clefs pour voir en détail la signification de ces options. En quelques mots :
NSW
est le nombre maximum d'itérationsISIF
désigne les paramètres géométriques qui seront relaxésEDIFFG
est le seuil de convergence sur la géométrieIBRION
est l'algorithme utilisé pour l'optimisation
Résultats du calcul
Voici le contenu du terminal, les itérations intermédiaires ont été suprimées :
# gvallver@pyrene ~/VASP/tutorial/Li/ > vasp
running on 1 total cores
distrk: each k-point on 1 cores, 1 groups
distr: one band on 1 cores, 1 groups
using from now: INCAR
vasp.5.3.5 31Mar14 (build Apr 22 2015 22:40:07) complex
POSCAR found type information on POSCAR Li
POSCAR found : 1 types and 2 ions
scaLAPACK will be used
LDA part: xc-table for Pade appr. of Perdew
POSCAR, INCAR and KPOINTS ok, starting setup
WARNING: small aliasing (wrap around) errors must be expected
FFT: planning ...
WAVECAR not read
entering main loop
N E dE d eps ncg rms rms(c)
DAV: 1 -0.293201412962E+01 -0.29320E+01 -0.45056E+02 400 0.194E+02
DAV: 2 -0.362991490390E+01 -0.69790E+00 -0.60479E+00 500 0.108E+01
DAV: 3 -0.364373819630E+01 -0.13823E-01 -0.13573E-01 520 0.184E+00
DAV: 4 -0.364378638002E+01 -0.48184E-04 -0.48182E-04 560 0.959E-02
DAV: 5 -0.364378672921E+01 -0.34919E-06 -0.34920E-06 530 0.564E-03 0.216E-01
DAV: 6 -0.364315143819E+01 0.63529E-03 -0.24024E-04 520 0.623E-02 0.141E-01
DAV: 7 -0.364269399268E+01 0.45745E-03 -0.82565E-04 450 0.122E-01 0.814E-03
DAV: 8 -0.364268831395E+01 0.56787E-05 -0.30679E-05 520 0.318E-02 0.110E-03
DAV: 9 -0.364268838519E+01 -0.71241E-07 -0.91729E-08 275 0.212E-03
1 F= -.36426884E+01 E0= -.36406869E+01 d E =-.364269E+01
curvature: 0.00 expect dE= 0.000E+00 dE for cont linesearch 0.000E+00
trial: gam= 0.00000 g(F)= 0.897E-02 g(S)= 0.329E-01 ort = 0.000E+00 (trialstep = 0.100E+01)
search vector abs. value= 0.419E-01
bond charge predicted
N E dE d eps ncg rms rms(c)
DAV: 1 -0.368223679088E+01 -0.39548E-01 -0.26477E-02 445 0.838E-01 0.396E-02
DAV: 2 -0.368220613817E+01 0.30653E-04 -0.34353E-04 485 0.108E-01 0.245E-02
DAV: 3 -0.368216860358E+01 0.37535E-04 -0.56844E-05 470 0.244E-02 0.175E-03
DAV: 4 -0.368216881007E+01 -0.20650E-06 -0.22359E-06 405 0.826E-03 0.970E-04
DAV: 5 -0.368216866051E+01 0.14956E-06 -0.27037E-08 235 0.106E-03 0.106E-04
DAV: 6 -0.368216867707E+01 -0.16553E-07 -0.25981E-09 220 0.292E-04
2 F= -.36821687E+01 E0= -.36802001E+01 d E =-.394803E-01
ZBRENT: can't locate minimum, use default step
trial-energy change: -0.039480 1 .order -0.039254 -0.041915 -0.036593
step: 4.0000(harm= 7.8754) dis= 0.05885 next Energy= -3.750276 (dE=-0.108E+00)
bond charge predicted
N E dE d eps ncg rms rms(c)
DAV: 1 -0.376461392978E+01 -0.82445E-01 -0.25806E-01 460 0.275E+00 0.113E-01
DAV: 2 -0.376439600171E+01 0.21793E-03 -0.27266E-03 470 0.314E-01 0.694E-02
DAV: 3 -0.376411103627E+01 0.28497E-03 -0.34697E-04 465 0.699E-02 0.524E-03
DAV: 4 -0.376411214669E+01 -0.11104E-05 -0.11488E-05 465 0.203E-02 0.265E-03
DAV: 5 -0.376411110183E+01 0.10449E-05 -0.14728E-07 245 0.262E-03 0.224E-04
DAV: 6 -0.376411112855E+01 -0.26716E-07 -0.10361E-08 225 0.655E-04
3 F= -.37641111E+01 E0= -.37623705E+01 d E =-.121423E+00
curvature: -2.69 expect dE=-0.258E-01 dE for cont linesearch -0.160E-01
ZBRENT: increasing intervall
opt : 10.0000 next Energy= -3.734325 (dE=-0.916E-01)
bond charge predicted
[........]
10 F= -.38021602E+01 E0= -.38008137E+01 d E =-.182591E-02
trial-energy change: -0.001826 1 .order -0.001842 -0.002865 -0.000818
step: 3.9502(harm= 3.8726) dis= 0.00302 next Energy= -3.802334 (dE=-0.200E-02)
bond charge predicted
N E dE d eps ncg rms rms(c)
DAV: 1 -0.380232704814E+01 -0.16684E-03 -0.63373E-04 420 0.147E-01 0.415E-03
DAV: 2 -0.380232588258E+01 0.11656E-05 -0.47947E-06 480 0.176E-02 0.251E-03
DAV: 3 -0.380232449588E+01 0.13867E-05 -0.41102E-07 220 0.384E-03 0.210E-04
DAV: 4 -0.380232450465E+01 -0.87696E-08 -0.21646E-08 200 0.124E-03 0.136E-04
DAV: 5 -0.380232457737E+01 -0.72717E-07 -0.16440E-09 200 0.245E-04 0.147E-05
DAV: 6 -0.380232458548E+01 -0.81170E-08 -0.15642E-10 200 0.835E-05
11 F= -.38023246E+01 E0= -.38009582E+01 d E =-.199030E-02
curvature: -1.95 expect dE=-0.243E-04 dE for cont linesearch -0.263E-06
trial: gam= 0.02303 g(F)= 0.879E-06 g(S)= 0.116E-04 ort =-0.119E-04 (trialstep = 0.300E+01)
search vector abs. value= 0.125E-04
reached required accuracy - stopping structural energy minimisation
writing wavefunctions
Dans cette optimisation de la géométrie on observe :
- une succession de calculs d'énergie, comme pour le calcul simple précédent
- la convergence progressive de l'énergie pour chaque géométrie
- l'arrêt du calcul après avoir atteind le critère de convergence
Soumission de VASP via le gestionnaire de travaux
Le gestinnaire de travaux utilisé à l'UPPA sur le cluster pyrene
est
slurm. Avec les dossiers contenant les fichiers
inputs nécessaires pour le TP vous disposez du fichier vasp.job
ci-dessous qui permet
de soumettre un calcul VASP sur pyrene :
#!/bin/bash
#SBATCH --account=rfct
#SBATCH --partition=procs12
#SBATCH --reservation=rfct
#SBATCH --time=0-01:00:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=2
#SBATCH --cpus-per-task=1
# Chrgement des modules
source /etc/profile.d/modules.sh
module purge
module load vasp/5.3.5/openmpi
module list
# l'Infiniband est uniquement specifie sur la partition compute
if [ ! "$SLURM_JOB_PARTITION" = compute ]
then
unset I_MPI_FABRICS
fi
time mpirun vasp
Lors de la réalisation de votre projet, vous devrez utiliser ce fichier pour soumettre les calculs VASP. Il faudra cependant supprimer la ligne concernant la réservation (ligne 5) celle-ci n'étant effective que le temps du TP.
Lors des TP et principalement pour votre projet les seules choses que vous aurez à adapter sont :
- Le nombre de cœeur,
ntasks-per-node
(ligne 10) qui est au plus de 12. - Le temps du calcul,
time
, (ligne 7) sous la formejours-heures:minutes:secondes
Pour exécuter un calcul, le principe est le suivant :
- Un calcul par dossier, les fichiers d'entré/sortie portant tous le même nom ils sont systématiquement écrasés.
- Recopier le fichier
vasp.job
dans le dossier - Soumettre le calcul :
sbatch vasp.job
- Voir les calculs en cours :
squeue -u $USER
Lorsqu'un calcul est en cours ou est terminé, un fichier slurm-XXXXX.out
apparaît. Il est toujours important de regarder le contenu de ce fichier qui
correspond à la sortie standard du programme et peut contenir des messages
important, indiquant le bon déroulement (ou non) du calcul.