xtb
Nesta seção:
Descrição
De acordo com a Documetação do xtb xtb é um programa semi-empírico de química quântica implementando métodos GFN (Geometry, Frequency, Noncovalent) e outros métodos semi-empíricos para cálculos rápidos de estruturas moleculares, propriedades e espectros.
Versões Disponíveis
xtb/6.6.1 (default)
Carregando o Módulo
# Carregar xtb
module load xtb/6.6.1
# Verificar instalação
xtb --version
Cálculo de Energia Simples
submit_xtb_energy.sh
#!/bin/bash
#SBATCH -J xtb_energy
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=4G
export INPUT="mol.xyz"
export OUTPUT="energy.out"
module load xtb/6.6.1
job-nanny xtb mol.xyz --sp > energy.out
Otimização de Geometria
submit_xtb_opt.sh
#!/bin/bash
#SBATCH -J xtb_opt
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 12:00:00
#SBATCH --mem=8G
export INPUT="start.xyz"
export OUTPUT="opt.xyz opt.out"
module load xtb/6.6.1
job-nanny xtb start.xyz --opt --parallel $SLURM_CPUS_PER_TASK > opt.out
Cálculo de Frequências
submit_xtb_freq.sh
#!/bin/bash
#SBATCH -J xtb_freq
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="optimized.xyz"
export OUTPUT="freq.out freq.modes"
module load xtb/6.6.1
job-nanny xtb optimized.xyz --hess --parallel $SLURM_CPUS_PER_TASK > freq.out
# Extrair frequências
grep "freq:" freq.out > frequencies.txt
MD Simples (meta-dynamics)
submit_xtb_md.sh
#!/bin/bash
#SBATCH -J xtb_md
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 48:00:00
#SBATCH --mem=8G
export INPUT="start.xyz"
export OUTPUT="md_traj.xyz md.out"
module load xtb/6.6.1
job-nanny xtb start.xyz --md --time 10 --parallel $SLURM_CPUS_PER_TASK > md.out
Constantes de Tela (Solvente)
submit_xtb_solvent.sh
#!/bin/bash
#SBATCH -J xtb_solvent
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 06:00:00
#SBATCH --mem=4G
export INPUT="mol.xyz"
export OUTPUT="solv.out"
module load xtb/6.6.1
# Solvente implícito (GBSA)
job-nanny xtb mol.xyz --sp --gbsa water > solv.out
# Com diferentes solventes
for solvent in water methanol ethanol acetone; do
job-nanny xtb mol.xyz --sp --gbsa $solvent > ${solvent}.out
done
Propriedades Eletrônicas
submit_xtb_props.sh
#!/bin/bash
#SBATCH -J xtb_props
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 06:00:00
#SBATCH --mem=4G
export INPUT="mol.xyz"
export OUTPUT="props.out"
module load xtb/6.6.1
# Orbitais moleculares
job-nanny xtb mol.xyz --sp --mo > mo.out
# Cargas
job-nanny xtb mol.xyz --sp --pop > charges.out
# Dipolo
grep "dipole" *.out > dipole.txt
Varredura de Coordenada (Scan)
submit_xtb_scan.sh
#!/bin/bash
#SBATCH -J xtb_scan
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 24:00:00
#SBATCH --mem=8G
export INPUT="start.xyz"
export OUTPUT="scan.log scan.xyz"
module load xtb/6.6.1
job-nanny xtb start.xyz --input scan.inp > scan.log
scan.inp
$scan
mode=1
start=1.0
end=3.0
steps=20
$end
Job Array para Múltiplas Moléculas
submit_xtb_array.sh
#!/bin/bash
#SBATCH -J xtb_array
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 12:00:00
#SBATCH --mem=8G
MOLECULAS=($(ls *.xyz))
MOL=${MOLECULAS[$SLURM_ARRAY_TASK_ID-1]}
BASE=$(basename "$MOL" .xyz)
export INPUT="$MOL"
export OUTPUT="${BASE}_results/"
module load xtb/6.6.1
mkdir -p ${BASE}_results
cd ${BASE}_results
cp ../$MOL .
# Otimização
job-nanny xtb $MOL --opt --parallel $SLURM_CPUS_PER_TASK > opt.out
# Energia single point
job-nanny xtb $MOL --sp > sp.out
# Extrair energia
grep "TOTAL ENERGY" sp.out >> ../all_energies.txt
Análise de Resultados
analyze_xtb.sh
#!/bin/bash
#SBATCH -J analyze_xtb
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=2G
# Coletar energias
echo "Molécula,Energia" > energies.csv
for dir in *_results/; do
mol=$(basename $dir _results)
if [ -f "${dir}sp.out" ]; then
energy=$(grep "TOTAL ENERGY" ${dir}sp.out | awk '{print $4}')
echo "$mol,$energy" >> energies.csv
fi
done
# Coletar frequências (se houver)
for dir in *_results/; do
mol=$(basename $dir _results)
if [ -f "${dir}freq.out" ]; then
echo "Frequências para $mol:" >> frequencies.txt
grep "freq:" ${dir}freq.out >> frequencies.txt
echo "" >> frequencies.txt
fi
done
# Plotar com Python
cat > plot_energies.py << 'EOF'
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('energies.csv')
df = df.sort_values('Energia')
plt.figure(figsize=(10, 6))
sns.barplot(data=df, x='Molécula', y='Energia')
plt.xticks(rotation=45, ha='right')
plt.title('Energias calculadas com xtb')
plt.tight_layout()
plt.savefig('energy_comparison.png')
EOF
python plot_energies.py
Referências
Documentação: https://xtb-docs.readthedocs.io/
Publicação: https://onlinelibrary.wiley.com/doi/abs/10.1002/jcc.24760
Ver também
ORCA - Química quântica ab initio
MOPAC - Química quântica semiempírica
Processando Simulações - Como submeter jobs