PLUMED

Descrição

De acordo com a Documentação do PLUMED, PLUMED é uma biblioteca open-source para amostragem aprimorada (enhanced sampling) em simulações de dinâmica molecular. Permite calcular e agir sobre variáveis coletivas, realizar metadinâmica, umbrella sampling e outras técnicas avançadas.

Versões Disponíveis

  • plumed/2.7.1 (default)

Carregando o Módulo

# Carregar PLUMED
module load plumed/2.7.1

# Verificar instalação
plumed --version
plumed info --configuration

Submissão de Jobs com PLUMED + GROMACS

submit_plumed_gromacs.sh
#!/bin/bash
#SBATCH -J plumed_gmx
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 72:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="topol.tpr plumed.dat"
export OUTPUT="metadynamics/"

module load plumed/2.7.1
module load gromacs/2025.2

# PLUMED com GROMACS (versão patchada)
job-nanny mpirun -np $SLURM_NTASKS gmx_mpi mdrun -s topol.tpr \
                 -plumed plumed.dat -o metadynamics.trr \
                 -e metadynamics.edr -c after.gro -g metadynamics.log

Submissão de Jobs com PLUMED + NAMD

submit_plumed_namd.sh
#!/bin/bash
#SBATCH -J plumed_namd
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 72:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="simulation.namd plumed.dat"
export OUTPUT="plumed_results/"

module load plumed/2.7.1
module load namd/2.13-tcp

# Configurar PLUMED para NAMD
export PLUMED_KERNEL=$PLUMED_ROOT/lib/libplumedKernel.so

job-nanny namd_mpi.sh simulation.namd

Exemplo de Arquivo PLUMED

plumed.dat
# Metadinâmica para ângulo diedro
dihedral: TORSION ATOMS=5,7,9,15
dihedral2: TORSION ATOMS=7,9,15,17

# Metadinâmica nas duas CVs
METAD ...
  LABEL=metad
  ARG=dihedral,dihedral2
  PACE=500
  HEIGHT=1.2
  SIGMA=0.35,0.35
  FILE=HILLS
  GRID_MIN=-pi,-pi
  GRID_MAX=pi,pi
  GRID_BIN=100,100
  TEMP=300.0
... METAD

# Imprimir CVs
PRINT ARG=dihedral,dihedral2,metad.* FILE=COLVAR STRIDE=10

Metadinâmica com Reconstrução de Energia Livre

submit_metadynamics.sh
#!/bin/bash
#SBATCH -J metadynamics
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 168:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="topol.tpr plumed_metad.dat"
export OUTPUT="metad_results/"

module load plumed/2.7.1
module load gromacs/2025.2

job-nanny mpirun -np $SLURM_NTASKS gmx_mpi mdrun -s topol.tpr \
                 -plumed plumed_metad.dat -o metad.trr \
                 -e metad.edr -c after.gro -g metad.log
plumed_metad.dat
# Variáveis coletivas
phi: TORSION ATOMS=5,7,9,15
psi: TORSION ATOMS=7,9,15,17

# Metadinâmica com well-tempered
METAD ...
  ARG=phi,psi
  PACE=500
  HEIGHT=1.0
  SIGMA=0.35,0.35
  TEMP=300.0
  BIASFACTOR=10
  GRID_MIN=-pi,-pi
  GRID_MAX=pi,pi
  GRID_BIN=200,200
  FILE=HILLS
  LABEL=metad
... METAD

# Análise em tempo real
PRINT ARG=phi,psi,metad.bias FILE=COLVAR STRIDE=100

Umbrella Sampling

submit_umbrella.sh
#!/bin/bash
#SBATCH -J umbrella
#SBATCH --array=1-20
#SBATCH -N 1
#SBATCH -c 28
#SBATCH -t 48:00:00
#SBATCH --mem=32G

CENTERS=$(seq -5.0 0.5 5.0)
CENTER_ARRAY=($CENTERS)
CENTER=${CENTER_ARRAY[$SLURM_ARRAY_TASK_ID-1]}

export INPUT="topol.tpr plumed_template.dat"
export OUTPUT="umbrella_${CENTER}/"

module load plumed/2.7.1
module load gromacs/2025.2

mkdir -p umbrella_${CENTER}
cd umbrella_${CENTER}

# Configurar PLUMED para umbrella sampling
cat > plumed.dat << EOF
# Distância como variável coletiva
distance: DISTANCE ATOMS=10,15

# Restraint harmônico
RESTRAINT ARG=distance AT=$CENTER KAPPA=1000.0

# Saída
PRINT ARG=distance,restraint.bias FILE=COLVAR STRIDE=10
EOF

job-nanny gmx_mpi mdrun -s ../topol.tpr -plumed plumed.dat \
                 -o umbrella.trr -e umbrella.edr -c after.gro

Análise de WHAM

analyze_wham.sh
#!/bin/bash
#SBATCH -J wham_analysis
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 04:00:00
#SBATCH --mem=8G

module load plumed/2.7.1

# Preparar arquivos para WHAM
for dir in umbrella_*/; do
    center=$(basename $dir | sed 's/umbrella_//')
    echo "$dir/COLVAR $center 1000.0" >> wham_input.txt
done

# Executar WHAM
plumed wham --temp 300.0 --outfile free_energy.dat \
            --histfile histo.dat --min -5.0 --max 5.0 \
            --bins 100 --tol 1e-6 < wham_input.txt

# Plotar energia livre
cat > plot_fe.py << 'EOF'
import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('free_energy.dat')
cv = data[:,0]
fe = data[:,1]

plt.figure()
plt.plot(cv, fe, 'b-', linewidth=2)
plt.xlabel('Distância (nm)')
plt.ylabel('Energia livre (kJ/mol)')
plt.title('Perfil de energia livre')
plt.grid(True)
plt.savefig('free_energy.png', dpi=150)
EOF

python plot_fe.py

Referências

Ver também