VASP
Nesta seção:
Descrição
De acordo com a Documentação do VASP, VASP (Vienna Ab initio Simulation Package) é um pacote de simulação ab initio de mecânica quântica molecular usando pseudopotenciais e base de ondas planas. É amplamente utilizado para cálculos de estrutura eletrônica e dinâmica molecular em materiais.
Versões Disponíveis
vasp/6.4.3 (default)
vasp/6.6.0
Carregando o Módulo
# Carregar VASP
module load vasp/6.4.3
# Verificar instalação
vasp_std --version
# Diferentes compilações
# vasp_std - versão padrão
# vasp_gam - apenas ponto gamma
# vasp_ncl - não colinear (spin-órbita)
Submissão de Jobs Seriais
submit_vasp_serial.sh
#!/bin/bash
#SBATCH -J vasp_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="INCAR POSCAR POTCAR KPOINTS"
export OUTPUT="OUTCAR OSZICAR vasprun.xml"
module load vasp/6.4.3
job-nanny vasp_std
Submissão de Jobs MPI
submit_vasp_mpi.sh
#!/bin/bash
#SBATCH -J vasp_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 72:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="INCAR POSCAR POTCAR KPOINTS"
export OUTPUT="OUTCAR OSZICAR vasprun.xml"
module load vasp/6.4.3
job-nanny mpirun -np $SLURM_NTASKS vasp_std
Arquivos de Entrada
INCAR (parâmetros de cálculo)
INCAR
System = Si bulk calculation
ISTART = 0
ICHARG = 2
ENCUT = 400
ISMEAR = 0
SIGMA = 0.1
PREC = Accurate
LREAL = Auto
ALGO = Normal
NSW = 100
IBRION = 2
ISIF = 3
EDIFF = 1E-6
EDIFFG = -0.01
NELMIN = 5
NELM = 100
LPLANE = .TRUE.
NPAR = 4
POSCAR (estrutura)
POSCAR
Si bulk
1.0
5.430 0.000 0.000
0.000 5.430 0.000
0.000 0.000 5.430
Si
2
Direct
0.000 0.000 0.000
0.250 0.250 0.250
POTCAR (pseudopotenciais)
# Concatenar pseudopotenciais
cat potpaw_PBE/Si/POTCAR > POTCAR
KPOINTS (malha de pontos k)
KPOINTS
Automatic mesh
0
Gamma
8 8 8
0 0 0
Otimização de Geometria
submit_vasp_relax.sh
#!/bin/bash
#SBATCH -J vasp_relax
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 48:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="INCAR POSCAR POTCAR KPOINTS"
export OUTPUT="OUTCAR OSZICAR CONTCAR"
module load vasp/6.4.3
job-nanny mpirun -np $SLURM_NTASKS vasp_std
# Salvar geometria otimizada
cp CONTCAR POSCAR_optimized
Cálculo de Bandas
submit_vasp_bands.sh
#!/bin/bash
#SBATCH -J vasp_bands
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 36:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="INCAR POSCAR POTCAR KPOINTS_bands"
export OUTPUT="OUTCAR bands.dat"
module load vasp/6.4.3
# Passo 1: SCF com malha densa
cp KPOINTS_scf KPOINTS
job-nanny mpirun -np $SLURM_NTASKS vasp_std
# Passo 2: Cálculo de bandas
cp KPOINTS_bands KPOINTS
cp CHGCAR CHGCAR
job-nanny mpirun -np $SLURM_NTASKS vasp_std
# Processar bandas
cat > process_bands.py << 'EOF'
import numpy as np
import matplotlib.pyplot as plt
# Ler dados de bandas
data = np.loadtxt('bands.dat')
kpath = data[:,0]
eigenvalues = data[:,1:]
# Ajustar para energia de Fermi (normalmente do OUTCAR)
efermi = 5.0 # substituir pelo valor real
eigenvalues -= efermi
# Plotar
plt.figure(figsize=(8, 6))
for i in range(eigenvalues.shape[1]):
plt.plot(kpath, eigenvalues[:,i], 'b-', linewidth=1)
plt.xlabel('K-path')
plt.ylabel('E - E_F (eV)')
plt.title('Estrutura de bandas')
plt.grid(True)
plt.axhline(y=0, color='r', linestyle='--', alpha=0.5)
plt.savefig('band_structure.png', dpi=150)
EOF
python process_bands.py
Densidade de Estados (DOS)
submit_vasp_dos.sh
#!/bin/bash
#SBATCH -J vasp_dos
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 36:00:00
#SBATCH --mem-per-cpu=2G
export INPUT="INCAR POSCAR POTCAR KPOINTS_dos"
export OUTPUT="OUTCAR DOSCAR"
module load vasp/6.4.3
# Cálculo SCF
cp KPOINTS_scf KPOINTS
job-nanny mpirun -np $SLURM_NTASKS vasp_std
# Cálculo DOS
cat > INCAR_dos << 'EOF'
System = Si DOS calculation
ISTART = 1
ICHARG = 11
ENCUT = 400
ISMEAR = -5
SIGMA = 0.05
PREC = Accurate
LORBIT = 11
NEDOS = 1000
EDIFF = 1E-6
LREAL = Auto
EOF
cp INCAR_dos INCAR
cp KPOINTS_dos KPOINTS
job-nanny mpirun -np $SLURM_NTASKS vasp_std
# Processar DOS
cat > process_dos.py << 'EOF'
import numpy as np
import matplotlib.pyplot as plt
# Ler DOS
dos_data = np.loadtxt('DOSCAR', skiprows=6)
energy = dos_data[:,0]
total_dos = dos_data[:,1]
# Encontrar energia de Fermi (do OUTCAR)
with open('OUTCAR') as f:
for line in f:
if 'E-fermi' in line:
efermi = float(line.split()[2])
break
plt.figure()
plt.plot(energy - efermi, total_dos, 'b-', linewidth=2)
plt.xlabel('E - E_F (eV)')
plt.ylabel('DOS (states/eV)')
plt.title('Densidade de estados')
plt.grid(True)
plt.axvline(x=0, color='r', linestyle='--', alpha=0.5)
plt.savefig('dos.png', dpi=150)
EOF
python process_dos.py
Job Array para Varredura de Parâmetros
submit_vasp_array.sh
#!/bin/bash
#SBATCH -J vasp_array
#SBATCH --array=1-5
#SBATCH -N 1
#SBATCH -n 28
#SBATCH -t 24:00:00
#SBATCH --mem-per-cpu=2G
ECUT_VALUES=(300 350 400 450 500)
ECUT=${ECUT_VALUES[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="INCAR POSCAR POTCAR KPOINTS"
export OUTPUT="ecut_${ECUT}/"
module load vasp/6.4.3
mkdir -p ecut_${ECUT}
cd ecut_${ECUT}
cp ../POSCAR .
cp ../POTCAR .
cp ../KPOINTS .
# Modificar ENCUT no INCAR
sed "s/ENCUT = .*/ENCUT = $ECUT/" ../INCAR > INCAR
job-nanny vasp_std
# Extrair energia total
grep "energy without entropy" OUTCAR | tail -1 >> ../energies.txt
Análise de Resultados
analyze_vasp.sh
#!/bin/bash
#SBATCH -J analyze_vasp
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=2G
# Extrair energia total
grep "energy without entropy" */OUTCAR | awk '{print $5}' > energies.txt
# Extrair forças
for dir in ecut_*/; do
echo "Forças em $dir" >> forces.txt
grep "TOTAL-FORCE" ${dir}OUTCAR -A 5 >> forces.txt
echo "" >> forces.txt
done
# Extrair parâmetros de rede
grep "length of vectors" */OUTCAR > lattice_params.txt
# Plotar convergência
cat > plot_convergence.py << 'EOF'
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('energies.txt')
ecut = data[:,0]
energy = data[:,1]
plt.figure()
plt.plot(ecut, energy, 'bo-')
plt.xlabel('ENCUT (eV)')
plt.ylabel('Energy (eV)')
plt.title('Convergência de energia')
plt.grid(True)
plt.savefig('convergence.png')
EOF
python plot_convergence.py
Referências
Documentação: https://www.vasp.at/wiki/
Tutoriais: https://www.vasp.at/tutorials/
Ver também
Quantum ESPRESSO - DFT com ondas planas
CP2K - DFT com bases mistas
Siesta - DFT com bases localizadas
Processando Simulações - Como submeter jobs