NAMD

Description

According to the page of NAMD, NAMD is a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems. Based on Charm++ parallel objects, it scales to hundreds of cores for typical simulations and beyond 500,000 cores for the largest simulations.

Available Versions

  • namd/2.12 (multicore)

  • namd/2.12-tcp (multinode)

  • namd/2.13-smp (multicore)

  • namd/2.13-tcp (multinode) (default)

Serial Job Submission (Multicore)

submit_namd_serial.sh
#!/bin/bash
#SBATCH -J namd_serial
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 24:00:00
#SBATCH --mem=16G

export INPUT="simulation.namd"
export OUTPUT="*.log *.dcd *.out"

module load namd/2.13-smp

job-nanny namd2 +p $SLURM_CPUS_PER_TASK simulation.namd

MPI Job Submission (TCP)

submit_namd_mpi.sh
#!/bin/bash
#SBATCH -J namd_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=28
#SBATCH -t 48:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="simulation.namd"
export OUTPUT="*.log *.dcd *.out"

module load namd/2.13-tcp

job-nanny namd_mpi.sh simulation.namd

Note

The namd_mpi.sh script manages NAMD MPI execution. It is automatically available when the module is loaded.

Hybrid Job Submission (SMP + TCP)

submit_namd_hybrid.sh
#!/bin/bash
#SBATCH -J namd_hybrid
#SBATCH -N 2
#SBATCH --ntasks-per-node=4
#SBATCH -c 7
#SBATCH -t 72:00:00
#SBATCH --mem-per-cpu=2G

export INPUT="simulation.namd"
export OUTPUT="*.log *.dcd *.out"

module load namd/2.13-tcp

job-nanny namd_mpi.sh +p$SLURM_CPUS_PER_TASK simulation.namd

Example NAMD Configuration File

simulation.namd
# Structure
structure       myprotein.psf
coordinates     myprotein.pdb

# Parameters
paraTypeCharmm  on
parameters      par_all36_prot.prm

# Boundary conditions
temperature     300
cellBasisVector1 80.0 0.0 0.0
cellBasisVector2 0.0 80.0 0.0
cellBasisVector3 0.0 0.0 80.0
cellOrigin      40.0 40.0 40.0

# Simulation
timestep        2.0
switching       on
switchdist      10.0
cutoff          12.0
pairlistdist    14.0
stepspercycle   20

# PME
PME             on
PMEGridSizeX    80
PMEGridSizeY    80
PMEGridSizeZ    80

# Thermalization
Langevin        on
LangevinTemp    300
LangevinDamping 5

# Pressure control
LangevinPiston  on
LangevinPistonTarget 1.01325
LangevinPistonPeriod 200.0
LangevinPistonDecay 100.0
LangevinPistonTemp 300

# Output
outputName      simulation
restartfreq     5000
dcdfreq         5000
xstfreq         5000
outputEnergies  1000
binaryoutput    no

# Execution
firstTimestep   0
numsteps        5000000

Energy Minimization

submit_namd_min.sh
#!/bin/bash
#SBATCH -J namd_min
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 12:00:00
#SBATCH --mem=16G

export INPUT="minimize.namd"
export OUTPUT="min.log"

module load namd/2.13-smp

job-nanny namd2 +p $SLURM_CPUS_PER_TASK minimize.namd
minimize.namd
# Structure
structure       myprotein.psf
coordinates     myprotein.pdb

# Parameters
paraTypeCharmm  on
parameters      par_all36_prot.prm

# Minimization
minimize        2000
numsteps        0

# Output
outputName      minimized
binaryoutput    no

outputEnergies  100

# Constraints
constraints     on
consref         myprotein.pdb
conskfile       myprotein.pdb
conskcol        B
consScale       1.0

Equilibration with Restraints

submit_namd_eq.sh
#!/bin/bash
#SBATCH -J namd_eq
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 24:00:00
#SBATCH --mem=16G

export INPUT="equilibration.namd"
export OUTPUT="eq.log eq.dcd"

module load namd/2.13-smp

job-nanny namd2 +p $SLURM_CPUS_PER_TASK equilibration.namd
equilibration.namd
# Structure
structure       minimized.psf
coordinates     minimized.pdb
bincoordinates  minimized.coor
extendedSystem  minimized.xsc

# Parameters
paraTypeCharmm  on
parameters      par_all36_prot.prm

# Boundary conditions
temperature     300
cellBasisVector1 80.0 0.0 0.0
cellBasisVector2 0.0 80.0 0.0
cellBasisVector3 0.0 0.0 80.0
cellOrigin      40.0 40.0 40.0

# Simulation
timestep        2.0
switching       on
switchdist      10.0
cutoff          12.0
pairlistdist    14.0
stepspercycle   20

# PME
PME             on
PMEGridSizeX    80
PMEGridSizeY    80
PMEGridSizeZ    80

# Thermalization
Langevin        on
LangevinTemp    300
LangevinDamping 5

# Pressure control (off during equilibration)
LangevinPiston  off

# Output
outputName      eq
restartfreq     1000
dcdfreq         1000
outputEnergies  100
binaryoutput    no

# Execution
firstTimestep   0
numsteps        50000

# Constraints (gradually decreasing)
constraints     on
consref         minimized.pdb
conskfile       minimized.pdb
conskcol        B
consScale       0.1

Job Array for Multiple Temperatures

submit_namd_array.sh
#!/bin/bash
#SBATCH -J namd_array
#SBATCH --array=1-5
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=16G

TEMPS=(300 310 320 330 340)
TEMP=${TEMPS[$SLURM_ARRAY_TASK_ID-1]}

export INPUT="template.namd"
export OUTPUT="T${TEMP}/"

module load namd/2.13-smp

mkdir -p T${TEMP}
cd T${TEMP}

# Modify temperature in input file
sed "s/TEMPERATURE/$TEMP/g" ../template.namd > simulation.namd

job-nanny namd2 +p $SLURM_CPUS_PER_TASK simulation.namd

Trajectory Analysis with VMD

analyze_namd.sh
#!/bin/bash
#SBATCH -J analyze_namd
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=4G

export INPUT="trajectory.dcd structure.psf"
export OUTPUT="analysis/"

module load vmd

cat > analyze.tcl << 'EOF'
# Load molecule
mol new structure.psf
mol addfile trajectory.dcd waitfor all

set nf [molinfo top get numframes]

# RMSD
set outfile [open "rmsd.dat" w]
set ref [atomselect top "protein" frame 0]
set sel [atomselect top "protein"]

for {set i 0} {$i < $nf} {incr i} {
    $sel frame $i
    set rmsd [measure rmsd $sel $ref]
    puts $outfile "$i $rmsd"
}
close $outfile

# Radius of gyration
set outfile [open "gyrate.dat" w]
for {set i 0} {$i < $nf} {incr i} {
    $sel frame $i
    set gyrate [measure gyrate $sel]
    puts $outfile "$i $gyrate"
}
close $outfile

# SASA (solvent accessible surface area)
set outfile [open "sasa.dat" w]
for {set i 0} {$i < $nf} {incr i} {
    $sel frame $i
    set sasa [measure sasa 1.4 $sel]
    puts $outfile "$i $sasa"
}
close $outfile

exit
EOF

vmd -dispdev text -e analyze.tcl

References

See also