NAMD
In this section:
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)
#!/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)
#!/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)
#!/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
# 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
#!/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
# 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
#!/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
# 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
#!/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
#!/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
Documentation: http://www.ks.uiuc.edu/Research/namd/current/ug/
Tutorials: http://www.ks.uiuc.edu/Training/Tutorials/
Mailing list: http://www.ks.uiuc.edu/Research/namd/mailing_list/
See also
GROMACS - Alternative for molecular dynamics
Amber - Alternative for molecular dynamics
VMD - Trajectory visualization
Running Simulations - How to submit jobs