VASP

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

Ver também