From 4e6818a61f99e66c7b2cedea1c34e39b36702fd5 Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Thu, 16 Jun 2011 13:20:28 +0200
Subject: [PATCH] Initial version

This is the draft version that I prepared and that we will use as
a starting point. Still it is a bit dirty, and I will try to improve
documentation and delete unused routines
---
 .gitignore                         |   11 +
 Makefile                           |   41 +
 README                             |   16 +
 configurations/aix.mpi.xlc         |   29 +
 configurations/aix.xlc             |   29 +
 configurations/linux.gcc           |   28 +
 configurations/linux.icc           |   26 +
 configurations/linux.mpi.gcc       |   27 +
 configurations/linux.mpi.icc       |   23 +
 configurations/linux.pgi           |   29 +
 configurations/mac.gcc             |   33 +
 configurations/mac.mpi.gcc         |   28 +
 configure.sh                       |   46 +
 developer-doc/.gitignore           |    4 +
 developer-doc/Doc.txt              |  295 +++
 developer-doc/Doxyfile             | 1417 +++++++++++
 developer-doc/Makefile             |    8 +
 extensions/DoNothing.cpp           |   27 +
 extensions/Makefile                |   39 +
 imd/.gitignore                     |    4 +
 imd/Makefile                       |   27 +
 include/Plumed.h                   |    1 +
 patches/amber9.config              |    6 +
 patches/amber9.diff                |  268 ++
 patches/gromacs-4.0.7.config       |    6 +
 patches/gromacs-4.0.7.diff         |  253 ++
 patches/gromacs-4.5.3.config       |    6 +
 patches/gromacs-4.5.3.diff         |  236 ++
 patches/namd-2.7.config            |    6 +
 patches/namd-2.7.diff              |  264 ++
 patches/patch.sh                   |  254 ++
 src/.gitignore                     |    2 +
 src/Action.cpp                     |   83 +
 src/Action.h                       |  166 ++
 src/ActionAtomistic.cpp            |   49 +
 src/ActionAtomistic.h              |  101 +
 src/ActionPilot.cpp                |   24 +
 src/ActionPilot.h                  |   25 +
 src/ActionRegister.cpp             |   59 +
 src/ActionRegister.h               |   69 +
 src/ActionSet.cpp                  |   15 +
 src/ActionSet.h                    |   79 +
 src/ActionSetup.cpp                |   15 +
 src/ActionSetup.h                  |   23 +
 src/ActionWithArguments.cpp        |   65 +
 src/ActionWithArguments.h          |   49 +
 src/ActionWithValue.cpp            |   69 +
 src/ActionWithValue.h              |   74 +
 src/Atoms.cpp                      |  297 +++
 src/Atoms.h                        |  182 ++
 src/Bias.cpp                       |   24 +
 src/Bias.h                         |   40 +
 src/BiasMovingRestraint.cpp        |  116 +
 src/BiasRestraint.cpp              |   85 +
 src/Colvar.cpp                     |   61 +
 src/Colvar.h                       |   86 +
 src/ColvarDistance.cpp             |  119 +
 src/ColvarEnergy.cpp               |   58 +
 src/ColvarTemplate.cpp             |  118 +
 src/ColvarVolume.cpp               |   62 +
 src/Debug.cpp                      |   73 +
 src/Flush.cpp                      |   45 +
 src/Function.cpp                   |   31 +
 src/Function.h                     |   35 +
 src/FunctionCombine.cpp            |   67 +
 src/FunctionMatheval.cpp           |  111 +
 src/IMD.cpp                        |  252 ++
 src/Log.cpp                        |   54 +
 src/Log.h                          |   53 +
 src/MDAtoms.cpp                    |  243 ++
 src/MDAtoms.h                      |   44 +
 src/Makefile                       |   85 +
 src/Pbc.cpp                        |   66 +
 src/Pbc.h                          |   21 +
 src/Plumed.c                       |  194 ++
 src/Plumed.h                       |  238 ++
 src/PlumedCommunicator.cpp         |  119 +
 src/PlumedCommunicator.h           |  184 ++
 src/PlumedConfig.h.in              |   12 +
 src/PlumedMain.cpp                 |  442 ++++
 src/PlumedMain.h                   |  135 +
 src/PlumedStatic.cpp               |    8 +
 src/Print.cpp                      |  109 +
 src/Tensor.h                       |  148 ++
 src/Tools.cpp                      |  117 +
 src/Tools.h                        |  103 +
 src/Units.cpp                      |  133 +
 src/Value.cpp                      |   15 +
 src/Value.h                        |   47 +
 src/Vector.cpp                     |    9 +
 src/Vector.h                       |  110 +
 test/Makefile                      |   15 +
 test/amber/.gitignore              |    6 +
 test/amber/amber_input             |   11 +
 test/amber/plumed.dat              |    4 +
 test/amber/system.inpcrd           |   13 +
 test/amber/system.prmtop           |  232 ++
 test/gromacs/.gitignore            |    6 +
 test/gromacs/conf.gro              |  652 +++++
 test/gromacs/grompp.mdp            |   60 +
 test/gromacs/plumed.dat            |   33 +
 test/gromacs/topol.top             |  225 ++
 test/link/.gitignore               |    9 +
 test/link/Makefile                 |   52 +
 test/link/main.cpp                 |   38 +
 test/link/mainc.c                  |   25 +
 test/link/mainf.f90                |   14 +
 test/link/plumed.dat               |    4 +
 test/namd/.gitignore               |    7 +
 test/namd/dia2.pdb                 |   24 +
 test/namd/dia2.psf                 |   98 +
 test/namd/namd_input               |   43 +
 test/namd/par_all27_prot_lipid.prm | 3681 ++++++++++++++++++++++++++++
 test/namd/plumed.dat               |   31 +
 test/simplemd/.gitignore           |    8 +
 test/simplemd/Makefile             |   37 +
 test/simplemd/gasdev.f             |   23 +
 test/simplemd/in                   |   10 +
 test/simplemd/input.xyz            |  110 +
 test/simplemd/plumed.dat           |   27 +
 test/simplemd/ran1.f               |   27 +
 test/simplemd/routines.f90         |  396 +++
 test/simplemd/simplemd.f90         |  204 ++
 tools/plumed                       |   71 +
 tools/scripts/newcv.sh             |   16 +
 user-doc/.gitignore                |    6 +
 user-doc/Doc.txt                   |  176 ++
 user-doc/Doxyfile                  | 1649 +++++++++++++
 user-doc/Makefile                  |    9 +
 user-doc/extract                   |   38 +
 130 files changed, 17095 insertions(+)
 create mode 100644 Makefile
 create mode 100644 README
 create mode 100644 configurations/aix.mpi.xlc
 create mode 100644 configurations/aix.xlc
 create mode 100644 configurations/linux.gcc
 create mode 100644 configurations/linux.icc
 create mode 100644 configurations/linux.mpi.gcc
 create mode 100644 configurations/linux.mpi.icc
 create mode 100644 configurations/linux.pgi
 create mode 100644 configurations/mac.gcc
 create mode 100644 configurations/mac.mpi.gcc
 create mode 100755 configure.sh
 create mode 100644 developer-doc/.gitignore
 create mode 100644 developer-doc/Doc.txt
 create mode 100644 developer-doc/Doxyfile
 create mode 100644 developer-doc/Makefile
 create mode 100644 extensions/DoNothing.cpp
 create mode 100644 extensions/Makefile
 create mode 100644 imd/.gitignore
 create mode 100644 imd/Makefile
 create mode 120000 include/Plumed.h
 create mode 100644 patches/amber9.config
 create mode 100644 patches/amber9.diff
 create mode 100644 patches/gromacs-4.0.7.config
 create mode 100644 patches/gromacs-4.0.7.diff
 create mode 100644 patches/gromacs-4.5.3.config
 create mode 100644 patches/gromacs-4.5.3.diff
 create mode 100644 patches/namd-2.7.config
 create mode 100644 patches/namd-2.7.diff
 create mode 100755 patches/patch.sh
 create mode 100644 src/.gitignore
 create mode 100644 src/Action.cpp
 create mode 100644 src/Action.h
 create mode 100644 src/ActionAtomistic.cpp
 create mode 100644 src/ActionAtomistic.h
 create mode 100644 src/ActionPilot.cpp
 create mode 100644 src/ActionPilot.h
 create mode 100644 src/ActionRegister.cpp
 create mode 100644 src/ActionRegister.h
 create mode 100644 src/ActionSet.cpp
 create mode 100644 src/ActionSet.h
 create mode 100644 src/ActionSetup.cpp
 create mode 100644 src/ActionSetup.h
 create mode 100644 src/ActionWithArguments.cpp
 create mode 100644 src/ActionWithArguments.h
 create mode 100644 src/ActionWithValue.cpp
 create mode 100644 src/ActionWithValue.h
 create mode 100644 src/Atoms.cpp
 create mode 100644 src/Atoms.h
 create mode 100644 src/Bias.cpp
 create mode 100644 src/Bias.h
 create mode 100644 src/BiasMovingRestraint.cpp
 create mode 100644 src/BiasRestraint.cpp
 create mode 100644 src/Colvar.cpp
 create mode 100644 src/Colvar.h
 create mode 100644 src/ColvarDistance.cpp
 create mode 100644 src/ColvarEnergy.cpp
 create mode 100644 src/ColvarTemplate.cpp
 create mode 100644 src/ColvarVolume.cpp
 create mode 100644 src/Debug.cpp
 create mode 100644 src/Flush.cpp
 create mode 100644 src/Function.cpp
 create mode 100644 src/Function.h
 create mode 100644 src/FunctionCombine.cpp
 create mode 100644 src/FunctionMatheval.cpp
 create mode 100644 src/IMD.cpp
 create mode 100644 src/Log.cpp
 create mode 100644 src/Log.h
 create mode 100644 src/MDAtoms.cpp
 create mode 100644 src/MDAtoms.h
 create mode 100644 src/Makefile
 create mode 100644 src/Pbc.cpp
 create mode 100644 src/Pbc.h
 create mode 100644 src/Plumed.c
 create mode 100644 src/Plumed.h
 create mode 100644 src/PlumedCommunicator.cpp
 create mode 100644 src/PlumedCommunicator.h
 create mode 100644 src/PlumedConfig.h.in
 create mode 100644 src/PlumedMain.cpp
 create mode 100644 src/PlumedMain.h
 create mode 100644 src/PlumedStatic.cpp
 create mode 100644 src/Print.cpp
 create mode 100644 src/Tensor.h
 create mode 100644 src/Tools.cpp
 create mode 100644 src/Tools.h
 create mode 100644 src/Units.cpp
 create mode 100644 src/Value.cpp
 create mode 100644 src/Value.h
 create mode 100644 src/Vector.cpp
 create mode 100644 src/Vector.h
 create mode 100644 test/Makefile
 create mode 100644 test/amber/.gitignore
 create mode 100644 test/amber/amber_input
 create mode 100644 test/amber/plumed.dat
 create mode 100644 test/amber/system.inpcrd
 create mode 100644 test/amber/system.prmtop
 create mode 100644 test/gromacs/.gitignore
 create mode 100644 test/gromacs/conf.gro
 create mode 100644 test/gromacs/grompp.mdp
 create mode 100644 test/gromacs/plumed.dat
 create mode 100644 test/gromacs/topol.top
 create mode 100644 test/link/.gitignore
 create mode 100644 test/link/Makefile
 create mode 100644 test/link/main.cpp
 create mode 100644 test/link/mainc.c
 create mode 100644 test/link/mainf.f90
 create mode 100644 test/link/plumed.dat
 create mode 100644 test/namd/.gitignore
 create mode 100644 test/namd/dia2.pdb
 create mode 100644 test/namd/dia2.psf
 create mode 100644 test/namd/namd_input
 create mode 100755 test/namd/par_all27_prot_lipid.prm
 create mode 100644 test/namd/plumed.dat
 create mode 100644 test/simplemd/.gitignore
 create mode 100644 test/simplemd/Makefile
 create mode 100644 test/simplemd/gasdev.f
 create mode 100644 test/simplemd/in
 create mode 100644 test/simplemd/input.xyz
 create mode 100644 test/simplemd/plumed.dat
 create mode 100644 test/simplemd/ran1.f
 create mode 100644 test/simplemd/routines.f90
 create mode 100644 test/simplemd/simplemd.f90
 create mode 100755 tools/plumed
 create mode 100755 tools/scripts/newcv.sh
 create mode 100644 user-doc/.gitignore
 create mode 100644 user-doc/Doc.txt
 create mode 100644 user-doc/Doxyfile
 create mode 100644 user-doc/Makefile
 create mode 100755 user-doc/extract

diff --git a/.gitignore b/.gitignore
index b25c15b81..e1ddbad05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,12 @@
+.DS_Store
 *~
+*.o
+*.so
+*.dylib
+makefile.dep
+/gromacs*
+/Makefile.conf
+/sourceme.sh
+/tmp
+*.swp
+core
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..ea793c482
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,41 @@
+-include Makefile.conf
+
+SUBDIRS = src extensions test
+     
+.PHONY: all clean $(SUBDIRS) doc docclean
+
+ifdef GCCDEP
+all: $(SUBDIRS)
+else
+all:
+	@echo No configuration available
+	@echo First run ./configure.sh
+endif
+     
+$(SUBDIRS):
+	$(MAKE) -C $@
+     
+# compile plumed before tests:
+test: src
+
+clean:
+	cd src && make clean
+	cd extensions && make clean
+	cd test && make clean
+	cd imd && make clean
+	rm -f *~ */*~ */*/*~
+
+fullclean:
+	make clean
+	rm -f Makefile.conf
+	rm -f sourceme.sh
+
+doc:
+	cd user-doc && make
+	cd developer-doc && make
+
+docclean:
+	cd user-doc && make clean
+	cd developer-doc && make clean
+
+
diff --git a/README b/README
new file mode 100644
index 000000000..d497dbf88
--- /dev/null
+++ b/README
@@ -0,0 +1,16 @@
+DOCUMENTATION
+
+To build the documentation, type
+$ make doc
+You need doxygen (www.doxygen.org)
+installed to see the html documentation,
+and graphviz (www.graphviz.org/)
+if you want to see the graphs
+of class hierarichy.
+
+The starting point for user documentation is then
+user-doc/html/index.html
+
+The starting point for developer documentation is
+developer-doc/html/index.html
+
diff --git a/configurations/aix.mpi.xlc b/configurations/aix.mpi.xlc
new file mode 100644
index 000000000..2f7252c44
--- /dev/null
+++ b/configurations/aix.mpi.xlc
@@ -0,0 +1,29 @@
+
+CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+DOUBLEPRECISION=-qrealsize=8
+
+
+LIBS=-ldl
+DYNAMIC_LIBS=$(IMDLIB)
+
+CPPFLAGS=-D__PLUMED_MPI -D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) $(IMDDEF)
+#CXXFLAGS=-pedantic -Wall -O -fPIC
+#CFLAGS=-pedantic -Wall -O -fPIC
+CXXFLAGS=-O0 -G -qpic -qrtti=all -qlanglvl=strict98 -qlonglong
+CFLAGS=-O0 -qpic
+
+LDFLAGS=-brtl -bdynamic -bexpall
+SOEXT=so
+LDSO=mpCC -G -qmkshrobj -bM:SRE $(CFLAGS)
+LD=mpCC
+LDF90=mpCC -lm -lxlf90
+CXX=mpCC
+CC=mpcc
+FC=mpxlf
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/aix.xlc b/configurations/aix.xlc
new file mode 100644
index 000000000..5ee09575b
--- /dev/null
+++ b/configurations/aix.xlc
@@ -0,0 +1,29 @@
+
+CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+DOUBLEPRECISION=-qrealsize=8
+
+
+LIBS=-ldl
+DYNAMIC_LIBS=$(IMDLIB)
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) $(IMDDEF)
+#CXXFLAGS=-pedantic -Wall -O -fPIC
+#CFLAGS=-pedantic -Wall -O -fPIC
+CXXFLAGS=-O0 -G -qpic -qrtti=all
+CFLAGS=-O0 -qpic
+
+LDFLAGS=-brtl -bdynamic -bexpall
+SOEXT=so
+LDSO=xlc++ -G -qmkshrobj -bM:SRE $(CFLAGS)
+LD=xlc++
+LDF90=xlc++ -lm -lxlf90
+CXX=xlc++
+CC=xlc
+FC=xlf
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/linux.gcc b/configurations/linux.gcc
new file mode 100644
index 000000000..67b3b9b05
--- /dev/null
+++ b/configurations/linux.gcc
@@ -0,0 +1,28 @@
+
+#CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+
+LIBS=-ldl
+
+DYNAMIC_LIBS=-lstdc++ $(IMDLIB)
+DOUBLEPRECISION=-fdefault-real-8
+
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) $(IMDDEF)
+CXXFLAGS=-pedantic -Wall -O -fPIC -ansi
+CFLAGS=-pedantic -Wall -O -fPIC -ansi
+
+LDFLAGS=-rdynamic
+SOEXT=so
+LDSO=gcc -shared $(CFLAGS)
+LD=g++
+LDF90=gfortran
+CXX=g++
+CC=gcc
+FC=gfortran
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/linux.icc b/configurations/linux.icc
new file mode 100644
index 000000000..b5c15f897
--- /dev/null
+++ b/configurations/linux.icc
@@ -0,0 +1,26 @@
+
+#CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+
+LIBS=-ldl
+DYNAMIC_LIBS=-lstdc++ $(IMDLIB)
+DOUBLEPRECISION=-r8
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) $(IMDDEF)
+CXXFLAGS=-O -fPIC -Wall -wd981,383,1418
+CFLAGS=-O -fPIC -Wall
+
+LDFLAGS=-rdynamic
+SOEXT=so
+LDSO=icc -shared $(CFLAGS)
+LD=icpc
+LDF90=ifort
+CXX=icpc
+CC=icc
+FC=ifort
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/linux.mpi.gcc b/configurations/linux.mpi.gcc
new file mode 100644
index 000000000..3893933d6
--- /dev/null
+++ b/configurations/linux.mpi.gcc
@@ -0,0 +1,27 @@
+
+#CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+
+LIBS=-ldl
+DYNAMIC_LIBS=-lstdc++ -lmpi_cxx $(IMDLIB)
+DOUBLEPRECISION=-fdefault-real-8
+
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN -D__PLUMED_MPI $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) $(IMDDEF)
+CXXFLAGS=-Wall -O -fPIC -ansi
+CFLAGS=-Wall -O -fPIC -ansi
+
+LDFLAGS=-rdynamic
+SOEXT=so
+LDSO=mpicc -shared $(CFLAGS)
+LD=mpic++
+LDF90=mpif90
+CXX=g++
+CC=mpicc
+FC=mpif90
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/linux.mpi.icc b/configurations/linux.mpi.icc
new file mode 100644
index 000000000..1755be23c
--- /dev/null
+++ b/configurations/linux.mpi.icc
@@ -0,0 +1,23 @@
+
+#CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+
+LIBS=-ldl 
+DYNAMIC_LIBS=-lstdc++ $(IMDLIB)
+DOUBLEPRECISION=-r8
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN -D__PLUMED_MPI $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) $(IMDDEF)
+CXXFLAGS=-O -fPIC -Wall -wd981,383,1418
+CFLAGS=-O -fPIC -Wall
+
+LDFLAGS=-rdynamic
+SOEXT=so
+LDSO=mpicc -shared $(CFLAGS)
+LD=mpic++
+LDF90=mpif90
+CXX=mpic++
+CC=mpicc
+FC=mpif90
+
+GCCDEP=mpic++
+
+
diff --git a/configurations/linux.pgi b/configurations/linux.pgi
new file mode 100644
index 000000000..e37338083
--- /dev/null
+++ b/configurations/linux.pgi
@@ -0,0 +1,29 @@
+
+#CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+# NOTE:
+# I did not find the proper compilation flags for dynamic binding
+# moreover, I did not have a f90 license...
+
+LIBS=-ldl -lstdc++
+DOUBLEPRECISION=-fdefault-real-8
+
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE)
+CXXFLAGS=-O -fPIC
+CFLAGS=-O -fPIC
+
+LDFLAGS=-Bdynamic
+SOEXT=so
+LDSO=pgcc -shared $(CFLAGS)
+LD=pgcpp
+LDF90=pgf90
+CXX=pgcpp
+CC=pgcc
+FC=pgf90
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/mac.gcc b/configurations/mac.gcc
new file mode 100644
index 000000000..5cc866ea6
--- /dev/null
+++ b/configurations/mac.gcc
@@ -0,0 +1,33 @@
+
+CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+DOUBLEPRECISION=-fdefault-real-8
+
+LIBS=-ldl
+DYNAMIC_LIBS=-L/sw/lib -lmatheval -lstdc++ $(IMDLIB)
+
+WARNINGS=-pedantic -Wall -Wextra -Wfloat-equal -Wwrite-strings -Wpointer-arith -Wcast-qual \
+         -Wcast-align -Wconversion -Wshorten-64-to-32  \
+         -Wredundant-decls -Wvariadic-macros -Werror
+
+CPPFLAGS=-D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) \
+         -I/sw/include -I/sw/include/openmpi -D__PLUMED_HAS_MATHEVAL $(IMDDEF)
+CXXFLAGS=-O -fPIC $(WARNINGS) -Wstrict-null-sentinel -Wold-style-cast
+CFLAGS=-O -fPIC $(WARNINGS) \
+       -Wdeclaration-after-statement -Wbad-function-cast -Wstrict-prototypes \
+       -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-int-to-pointer-cast
+
+LDFLAGS=
+SOEXT=dylib
+LDSO=g++ -undefined suppress -flat_namespace -dynamiclib
+LD=g++
+LDF90=gfortran
+CXX=g++
+CC=gcc
+FC=gfortran
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configurations/mac.mpi.gcc b/configurations/mac.mpi.gcc
new file mode 100644
index 000000000..6614b4514
--- /dev/null
+++ b/configurations/mac.mpi.gcc
@@ -0,0 +1,28 @@
+
+CHECK_BOUNDARIES=-D_GLIBCXX_DEBUG
+DOUBLEPRECISION=-fdefault-real-8
+
+
+LIBS=-ldl
+DYNAMIC_LIBS=-L/sw/lib -lmatheval -lmpi_cxx -lmpi_f77 -lstdc++ $(IMDLIB)
+
+CPPFLAGS=-D__PLUMED_MPI -D__PLUMED_HAS_DLOPEN $(CHECK_BOUNDARIES) -I. $(PLUMED_INCLUDE) \
+         -D_REENTRANT -I/sw/include -I/sw/include/openmpi -D__PLUMED_HAS_MATHEVAL $(IMDDEF)
+CXXFLAGS=-Wall -O -fPIC
+CFLAGS=-Wall -O -fPIC
+
+LDFLAGS=
+SOEXT=dylib
+LDSO=om-mpic++ -undefined suppress -flat_namespace -dynamiclib
+LD=om-mpic++
+LDF90=om-mpif90
+CXX=om-mpic++
+CC=gcc
+FC=om-mpif90
+
+GCCDEP=g++
+
+
+
+
+
diff --git a/configure.sh b/configure.sh
new file mode 100755
index 000000000..4bb40174e
--- /dev/null
+++ b/configure.sh
@@ -0,0 +1,46 @@
+#! /bin/bash
+
+
+rm -f sourceme.sh Makefile.conf
+
+prefix=""
+case "$(uname)" in
+(Linux)  prefix=linux. ;;
+(AIX)    prefix=aix. ;;
+(Darwin) prefix=mac. ;;
+esac
+
+conflist=$(cd configurations ; echo $prefix*)
+
+PS3="Choose a configuration:"
+select conf in $conflist
+do
+  [[ -n "$conf" ]] && break
+done
+
+ln -s configurations/$conf Makefile.conf
+
+
+case "$conf" in
+(aix.*)
+  SOEXT=so
+  echo "On cineca, you may need to load the following modules:"
+  echo "module load make"
+  echo "module load sed"
+;;
+(mac.*)
+  SOEXT=dylib  
+;;
+(*)
+  SOEXT=so
+esac
+
+echo 'export PATH="$PATH:'"$PWD"'/tools/"' >> sourceme.sh
+# this is just for mac:
+echo 'export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:'"$PWD"'/src/"' >> sourceme.sh
+
+cat << EOF >> sourceme.sh
+export PLUMED_KERNEL="$PWD/src/libplumedKernel.$SOEXT"
+export PLUMED_ROOT="$PWD"
+EOF
+
diff --git a/developer-doc/.gitignore b/developer-doc/.gitignore
new file mode 100644
index 000000000..53e7c03e1
--- /dev/null
+++ b/developer-doc/.gitignore
@@ -0,0 +1,4 @@
+/html
+/latex
+/*.tmp
+
diff --git a/developer-doc/Doc.txt b/developer-doc/Doc.txt
new file mode 100644
index 000000000..b32c83aaa
--- /dev/null
+++ b/developer-doc/Doc.txt
@@ -0,0 +1,295 @@
+// This document is formatted for Doxygen
+/**
+\mainpage A Plumed Clone
+
+\author Giovanni Bussi (as of now)
+\date 2011
+\version 1.9.x
+\warning Very, very unstable
+
+As it can be guessed from the version number, this is a candidate for PLUMED2
+which should be reviewed by a reasonable number the PLUMED developers.
+If it is not accepted as a full package, it can be considered as a repository
+of a few ideas which can be stolen and used in real PLUMED2 development.
+
+If accepted, a possible road map is:
+- 1.99 public release before end of 2011, cloning most PLUMED1 features.
+  It should be usable by (and useful for) developers and people
+  in the community willing to try it.
+- 2.0 public release before mid of 2012, possibly able to superseed completely PLUMED1.
+
+\section Motivation Motivation
+
+- Simpler interface with MD codes. PLUMED should compile by itself as a library,
+  using a proper configure/make procedure, so as to avoid learning all the compilation
+  details of each MD code. Patching a new code should just consist in the insertion of
+  proper function calls and minimal modification to Makefile (to link plumed library),
+  without the need of further hacking inside PLUMED.
+- PLUMED should be easy to extend. Adding a new method/CV should be possible
+  without touching the rest.
+- Other issues:
+  - More friendly units.
+  - More flexible CVs (such as function of other CVs).
+  - Possibility to re-read input.
+
+\section FeaturesAndChanges Features and changes
+
+- Re-designed from scratch, hopefully better.
+- Input is conceptually similar but NON compatible. It is difficult to automatically
+  convert old input files, but we could provide a short transition guide.
+  The new plumed.dat is a sort of script containing a list of actions to be performed at each step.
+  Notable differences in input:
+  - An Action is composed of a line (possibly with continuations) of
+    space-separated words, and corresponds more-or-less to a directive in PLUMED1.
+\verbatim
+DISTANCE ATOMS=0,300 LABEL=dist NOPBC
+\endverbatim
+    The first word (DISTANCE here) defines the directive type, all other words are arguments
+    Most arguments are named, and has the form "NAME=VALUE" (ATOMS and LABEL in the example).
+    Others are flags (NOPBC in the example).
+  - Continuation can be done with "..." syntax (notice the space between DISTANCE and dots):
+\verbatim
+DISTANCE ...
+  ATOMS=0,300
+  LABEL=dist
+  NOPBC
+... DISTANCE
+\endverbatim
+  - All directives can be labeled (LABEL=dist in the example)
+  - A bias can only act on a labeled colvar:
+\verbatim
+DISTANCE ATOMS=0,300 LABEL=dist
+# This is a harmonic restraint
+RESTRAINT ARG=dist KAPPA=1.0 AT=1.0
+\endverbatim
+  - Some colvars have extra named values, which can be accessed with "." syntax
+\verbatim
+DISTANCE ATOMS=1,10 LABEL=dist COMPONENTS
+RESTRAINT ARG=dist.x KAPPA=1.0 AT=1.0
+\endverbatim
+    Here COMPONENTS is telling to DISTANCE to also compute the three components.
+    This is expected to be useful for variables which have multiple components
+    but that are heavy and we would like to compute only once (e.g. components
+    of the inertia tensor of a large molecule).
+    Also methods can have extra named values, such as the energy for a restraint.
+  - to print a COLVAR-like file (name can be changed), use PRINT directive
+\verbatim
+PRINT ARG=d1,d1.x,d1.y,d1.z STRIDE=100 FILE=COLVAR
+# or
+PRINT ARG=d1.* STRIDE=100 FILE=COLVAR1
+# or, to print all the variables defined in the plumed.dat up to this point
+PRINT ARG=* STRIDE=100 FILE=COLVAR_ALL
+\endverbatim
+- The library has been written in C++ for a more flexible structure:
+  - Extensive use of STL containers for things such as lists/vectors/maps/...
+  - Polymorphism for collective variables/free energy methods
+  However, for compatibility, its main interface is in plain C (with FORTRAN
+  and C++ wrappers). All the C++ definitions are hidden in a PLMD namespace.
+- Hierarchy of classes describing each possible Action performed by PLUMED.
+  There is a class for each CV (e.g. PLMD::ColvarDistance, PLMD::ColvarEnergy,
+  PLMD::ColvarVolume), a class for each bias (e.g. PLMD::BiasRestraint, PLMD::BiasMovingRestraint),
+  and a class for each function (e.g. PLMD::FunctionCombine).
+  There are also auxiliary classes to write the output (PLMD::Print),
+  to set the units (PLMD::Units), to print dedug information (PLMD::Debug),
+  to flush the open files (PLMD::Flush), etc.
+  More or less, there should be a class for each possible directive of "plumed.dat".
+  To see the full hierarchy, look at PLMD::Action.
+- It should be possible to program Actions independently from each other. To this
+  aim, there is a register (PLMD::ActionRegister, contained in the function
+  PLMD::actionRegister()) where, during C++ initialization, each
+  Action registers itself. Thus, if a new CV or bias is added, there is no need
+  for recompilation. If dlopen() is available on a system, it should be possible
+  to load Actions runtime (using LOAD directive).
+  In the long run we can imagine libraries of CVs
+  suitable for different problems and, possibly, released independently from
+  the kernel. On a mainframe, one could add CVs without recompiling neither plumed
+  nor the MD engine.
+- There is an option to load the plumed kernel at runtime. If you patch with
+  --runtime, the plumed kernel is looked for at the path in variable PLUMED_KERNEL.
+  If the variable is not set, basic (un-plumed) version of MD is used.
+  On a mainframe, one can have multiple installed plumed versions.
+- Ideally, inside the kernel there is nothing related to specific CVs or FE-methods. Thus, CVs and 
+  methods are optional plugins for PLUMED. The only exception
+  are tools which are common to several CVs/methods, such as grid interpolators, etc.
+- Ideally, inside the kernel there is nothing related to specific MD code. The interface is kept
+  as standard as possibly. Anyway, all the details of the interaction PLUMED/MD are inside the
+  src/Atoms.cpp file.  E.g., there are two (templated) versionsi of class PLMD::MDAtoms,
+  one for double precision and the other
+  for single precision MD. Code specific tools could be added here. In the future, we may try to
+  design a plugin approach also for MD engines (similarly to CVs/methods).
+- To simplify interface, there is a single routine plumed_cmd which takes a string and a pointer.
+  It can be used to pass any information to plumed, such as:
+\verbatim
+plumed p=plumed_create();
+plumed_cmd(p,"setNatoms",&natoms);
+plumed_cmd(p,"setMDEngine","gromacs");
+plumed_cmd(p,"init",NULL);
+...
+plumed_cmd(plumedmain,"setPositions",pos);
+plumed_cmd(plumedmain,"setBox",box);
+plumed_cmd(plumedmain,"setEnergy",&energy);
+plumed_cmd(plumedmain,"setForces",forces);
+plumed_cmd(plumedmain,"setVirial",virial);
+plumed_cmd(plumedmain,"calc",NULL);
+...
+plumed_finalize(p);
+\endverbatim
+  Fortran/C++ interfaces are similar (see src/Plumed.c for details), and are based on the C interface
+  (wrappers).
+- Units: PLUMED reads and writes only in its internal units, which, by default, are
+  nm and kj/mol. In plumed.dat it is possible to change it to other choices:
+\verbatim
+UNITS ...
+  LENGTH=A
+  TIME=fs
+  ENERGY=kcal/mol
+... UNITS
+\endverbatim
+  The MD code should specify to plumed its internal units, so as to allow proper conversion.
+  E.g., a code using angstrom and kcal should do the following calls
+\verbatim
+double energyUnits=4.184;
+double lengthUnits=0.1;
+plumed_cmd(plumedmain,"setMDEnergyUnits",&energyUnits);
+plumed_cmd(plumedmain,"setMDLengthUnits",&lengthUnits);
+\endverbatim
+- Other cool features:
+  - Functions of colvars (or functions of functions) can be used. For example, defining:
+\verbatim
+COMBINE LABEL=sum2     ARG=dist.x,dist.y,dist.z POWERS=2,2,2
+COMBINE LABEL=sqrtsum2 ARG=sum2                 POWERS=0.5
+# The following two restraints are equivalent:
+RESTRAINT ARG=dist     AT=1.2 KAPPA=1.0
+RESTRAINT ARG=sqrtsum2 AT=1.2 KAPPA=1.0
+\endverbatim
+  - Multiple-time-step: biases can be applied with multiple-time-step using a stride. This should
+    help for variables which are heavy to compute but smooth
+\verbatim
+RESTRAINT ARG=dist AT=1.2 KAPPA=1.0 STRIDE=2
+\endverbatim
+  - It is possible to include other files:
+\verbatim
+INCLUDE anotherplumed.dat
+\endverbatim
+  - It is possible to load shared libraries implementing new CVs and methods:
+\verbatim
+LOAD share-object.so
+\endverbatim
+
+
+\section SharingPolicy Sharing Policy
+- I think that Plumed should become fully open, with a public-access shared repository.
+  I would like to switch from cvs to git, which allows for easier branch manipulation.
+  On the central repository, we should have a public master branch where we can
+  publish our work, but for which we do not provide support (developer version).
+  From time to time, as usual, we can provide a supported release (2.0, 2.1 ,...)
+- If it is necessary to work privately, it can be done on a local branch
+  (maybe shared among a few collaborators). Git easily allows to merge multiple times, so it should
+  be relatively easy to stay up do date with the master branch. Finally, when the work
+  is ready, we can merge it into the master branch.
+  This sort of private working should be discouraged for the development of PLUMED kernel.
+  However, it would be perfect to implement new CVs or new methods, since they are
+  completely decoupled from the rest.
+
+\section ToDo To Do
+
+\todo Pbc on COLVARs (possibly with some smart trick for functions-of-functions).
+\todo Optimize atoms sharing. "Calc" should be divided in more steps:
+* Finding list of atoms needed and requesting them (on NAMD, this goes at the
+end of the previous step).
+* Sending the atoms
+* Receiving the atoms and computing everything
+* Sending the forces back
+Moreover, it would be nice to allow PLUMED to be run only on a subset of
+the available processors.
+\todo Replica exchange.
+\todo Interfaces with other codes
+\todo Implementation of CVs
+\todo Implementation of free energy methods
+
+\section Install Install
+
+- Configure and compile your MD code
+- Configure and compile PLUMED, possibly using the same compiler:
+\verbatim
+$ ./configure.sh
+... choose your compiler interactively here ...
+... it may be necessary to edit the Makefile.conf file ...
+$ make -j 4
+\endverbatim
+- Source the ./sourceme.sh file
+\verbatim
+$ source sourceme.sh
+\endverbatim
+  \attention This should be done on every shell where you want to patch/run plumed
+- Go to your MD code directory and do the patch
+\verbatim
+$ plumed patch --patch
+\endverbatim
+  (use -h to get information about other options).  Also experiment other linking modes (e.g. --runtime)
+- Recompile your MD code (without necessarily cleaning it)
+
+\section Content Content
+
+src/
+Plumed library source code (C++) plus a two wrapper files (Plumed.c and PlumedStatic.cpp; the latter is just
+equivalent to the former but is compiled as cpp, for testing, and does not allow runtime binding).
+Sources are compiled into a libplumed.so library and a libplumedKernel.so library
+(replace .so with .dylib on Mac).
+The src/Plumed.inc file contains shortcuts for the compilation. Just include it in your makefile and:
+- link the src/Plumed.h file in an included directory
+- add to the linker command the $(PLUMED_LDFLAG) options, to have the proper link flags
+- add to the linker command the $(PLUMED_LIBS) variable, to link the proper external libraries
+- add to the linker command one of the following variables:
+  - (A) \$(PLUMED_OBJ) : plumed will be statically bound
+  - (B) \$(PLUMED_SHARED_OBJ) : plumed will be dynamically bound
+  - (C) \$(PLUMED_WRAPPER) : behavior depend on runtime value of the PLUMED_KERNEL environment variable.
+    If set to the full path of the libplumedKernel.so library, plumed will be available.
+    If unset, or if set to a wrong file, plumed will not be available.
+- The difference between (A) and (B) is that in case (B) if you recompile plumed and rerun MD your code
+  is automatically up to date.
+  The difference between (B) and (C) is that in case (C) the MD code is able to run also if plumed is
+  not available. This allows to have a single compiled MD code for both plumed users and others.
+  Moreover, in case (C) it is trivial to change plumed version at execution time, by properly setting
+  the PLUMED_KERNEL environment variable.
+  Notice that in (B) case the full path of the plumed library is recorded, thus it should not
+  be changed after patching, and it should be reachable from computing nodes.
+  All these task can be done automatically with "plumed patch" using respectively the flags:
+  - (A) --static
+  - (B) --shared
+  - (C) --runtime
+   
+extensions/ 
+   Plumed extensions (e.g. contributed collective variables, ...)
+   They are compiled into a libplumedExtensions.so file which can be loaded at runtime.
+   To load them, use LOAD command inside plumed.dat
+
+test/link/
+   A few simple executables to test compilation/linking
+   Executables are:
+-  (A) XXX-static statically linked with src/*.o (except src/Plumed.o)
+-  (B) XXX        dynamically linked with libplumed.so
+-  (C) XXX-dummy  statically linked with src/Plumed.o
+
+user-doc/
+   User documentation
+
+developer-doc/
+   Developer documentation
+
+\section Notes Notes
+
+Information about C++
+http://www.parashift.com/c++-faq-lite/
+
+Compiler options to use shared libraries on many architectures:
+http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html
+
+\page HowToAddACollectiveVariable How to add a collective variable
+
+\page HowToAddAFunction How to add a function
+
+\page HowToAddABias How to add a biasing potential
+
+
+*/
diff --git a/developer-doc/Doxyfile b/developer-doc/Doxyfile
new file mode 100644
index 000000000..3a861bd64
--- /dev/null
+++ b/developer-doc/Doxyfile
@@ -0,0 +1,1417 @@
+# Doxyfile 1.5.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           =  
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
+# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, 
+# and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen to replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = 
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  =  Doc.txt ../src
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature. Other possible values 
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hiererachy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = 
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# By default doxygen will write a font called FreeSans.ttf to the output 
+# directory and reference it in all dot files that doxygen generates. This 
+# font does not include all possible unicode characters however, so when you need 
+# these (or just want a differently looking font) you can specify the font name 
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
+# which can be done by putting it in a standard location or by setting the 
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
+# containing the font.
+
+DOT_FONTNAME           = FreeSans
+
+# By default doxygen will tell dot to use the output directory to look for the 
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
+# different font using DOT_FONTNAME you can set the path where dot 
+# can find it using this tag.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = NO
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is enabled by default, which results in a transparent 
+# background. Warning: Depending on the platform used, enabling this option 
+# may lead to badly anti-aliased labels on the edges of a graph (i.e. they 
+# become hard to read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/developer-doc/Makefile b/developer-doc/Makefile
new file mode 100644
index 000000000..58f33798a
--- /dev/null
+++ b/developer-doc/Makefile
@@ -0,0 +1,8 @@
+
+.PHONY: all clean
+
+all:
+	doxygen
+
+clean:
+	rm -fr html latex *~
diff --git a/extensions/DoNothing.cpp b/extensions/DoNothing.cpp
new file mode 100644
index 000000000..23ce08409
--- /dev/null
+++ b/extensions/DoNothing.cpp
@@ -0,0 +1,27 @@
+#include "../src/ActionRegister.h"
+#include "../src/ActionSetup.h"
+
+using namespace std;
+
+namespace PLMD{
+
+/// Action which does nothing
+///
+/// It is here to test linking of external libraries
+class DoNothing:
+  public ActionSetup
+{
+public:
+  DoNothing(const ActionOptions&ao);
+};
+
+PLUMED_REGISTER_ACTION(DoNothing,"DONOTHING")
+
+DoNothing::DoNothing(const ActionOptions&ao):
+Action(ao),
+ActionSetup(ao)
+{
+}
+
+}
+
diff --git a/extensions/Makefile b/extensions/Makefile
new file mode 100644
index 000000000..480274527
--- /dev/null
+++ b/extensions/Makefile
@@ -0,0 +1,39 @@
+
+-include ../Makefile.conf
+
+SRC=$(wildcard *.cpp)
+
+OBJ=$(SRC:.cpp=.o)
+SOBJ=$(SRC:.cpp=.$(SOEXT))
+
+.PHONY: all clean
+
+ifdef GCCDEP
+all: libplumedExtensions.$(SOEXT) $(SOBJ)
+else
+all:
+	@echo No configuration available
+	@echo First run ./configure.sh in the root directory
+endif
+
+
+libplumedExtensions.$(SOEXT): $(OBJ)
+	$(LDSO) -o $@ $^
+
+clean:
+	rm -f makefile.dep
+	rm -f *.o
+ifdef SOEXT
+	rm -f *.$(SOEXT)
+endif
+
+makefile.dep : $(SRC) *.h
+ifdef GCCDEP
+	for i in $(ALL_SRC) ; do $(GCCDEP) $(CPPFLAGS) -MM "$${i}"; done > $@
+endif
+
+%.$(SOEXT) : %.o
+	$(LDSO) -o $@ $^
+
+-include makefile.dep
+
diff --git a/imd/.gitignore b/imd/.gitignore
new file mode 100644
index 000000000..a5a5805b5
--- /dev/null
+++ b/imd/.gitignore
@@ -0,0 +1,4 @@
+/*.c
+/*.h
+/Makefile.conf
+/imdapi*
diff --git a/imd/Makefile b/imd/Makefile
new file mode 100644
index 000000000..b112725f5
--- /dev/null
+++ b/imd/Makefile
@@ -0,0 +1,27 @@
+-include ../Makefile.conf
+
+all: Makefile.conf libimd.$(SOEXT)
+
+Makefile.conf: libimd.$(SOEXT)
+	echo IMDLIB=-L$(PWD) -limd     >  Makefile.conf
+	echo IMDDEF=-D__PLUMED_HAS_IMD >> Makefile.conf
+
+
+libimd.$(SOEXT): imd.o vmdsock.o
+	$(LDSO) -o $@ $^ -lnsl
+
+vmdsock.c imd.c vmdsock.h imd.h: imdapi.tar.gz
+	tar xzOf imdapi.tar.gz imdapi/$@ > $@
+
+vmdsock.o imd.o: vmdsock.h imd.h
+
+imdapi.tar.gz:
+	wget http://www.ks.uiuc.edu/Research/vmd/imd/code/imdapi.tar.gz
+
+
+clean:
+	rm -fr imdapi.tar.gz *.c *.h *.$(SOEXT) Makefile.conf *.o
+
+
+
+
diff --git a/include/Plumed.h b/include/Plumed.h
new file mode 120000
index 000000000..04e460f19
--- /dev/null
+++ b/include/Plumed.h
@@ -0,0 +1 @@
+../src/Plumed.h
\ No newline at end of file
diff --git a/patches/amber9.config b/patches/amber9.config
new file mode 100644
index 000000000..4c6521984
--- /dev/null
+++ b/patches/amber9.config
@@ -0,0 +1,6 @@
+
+
+function plumed_preliminary_test(){
+# check if the README contains the word AMBER and if amber has been already configured
+  grep -q AMBER README 1>/dev/null 2>/dev/null && test -f src/config.h
+}
diff --git a/patches/amber9.diff b/patches/amber9.diff
new file mode 100644
index 000000000..814bd8bc5
--- /dev/null
+++ b/patches/amber9.diff
@@ -0,0 +1,268 @@
+patch -u -l -b -F 5 --suffix=.preplumed "./src/sander/Makefile" << \EOF_EOF
+--- ./src/sander/Makefile.preplumed
++++ ./src/sander/Makefile
+@@ -18,10 +18,11 @@
+ #************************************************************************
+ #
+ # Makefile for Amber 9   SANDER 
+ #
+ include ../config.h
++include ../../Plumed.inc
+ 
+ # Sander Fortran source files are free format
+ LOCALFLAGS = $(FREEFORMAT_FLAG)
+ 
+ SHELL=/bin/sh
+@@ -169,48 +170,48 @@
+               nxtsec lapack blas lmod divcon checkserconf
+ 	$(LOAD) -o sander$(SFX)  $(MMOBJ) $(QMOBJ) $(QM2OBJ) $(QMMMOBJ_DFTB) \
+                  qm_div.o force.o \
+ 		../lmod/lmod.a ../dcqtp/src/qmmm/libdivcon.a \
+ 		../lapack/lapack.a ../blas/blas.a \
+-		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB)
++		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB) $(PLUMED_LOAD)
+ 
+ #---------------------------------------------------------------------------
+ sander.MPI$(SFX): $(NETCDF) $(MMOBJ) $(QMOBJ) $(QM2OBJ) $(QMMMOBJ_DFTB) \
+               qm_div.o force.o \
+               syslib nxtsec lapack blas lmod checkparconf
+ 	$(LOAD) -o sander.MPI$(SFX)  $(MMOBJ) $(QMOBJ) $(QM2OBJ)  $(QMMMOBJ_DFTB) \
+                    qm_div.o force.o \
+ 		../lmod/lmod.a ../lapack/lapack.a ../blas/blas.a \
+-		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB)
++		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB) $(PLUMED_LOAD)
+ 
+ #---------------------------------------------------------------------------
+ sander.LES$(SFX): $(NETCDF) $(LESOBJ) syslib nxtsec lapack blas lmod \
+ 		checkserconf
+ 	$(LOAD) -o sander.LES$(SFX) $(LESOBJ) \
+ 		../lmod/lmod.a ../lapack/lapack.a ../blas/blas.a \
+-		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB)
++		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB) $(PLUMED_LOAD)
+ 
+ #---------------------------------------------------------------------------
+ sander.LES.MPI$(SFX): $(NETCDF) $(LESOBJ) syslib nxtsec lapack blas lmod \
+ 		checkparconf
+ 	$(LOAD) -o sander.LES.MPI$(SFX) $(LESOBJ) \
+ 		../lmod/lmod.a ../lapack/lapack.a ../blas/blas.a \
+-		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB)
++		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB) $(PLUMED_LOAD)
+ 
+ #---------------------------------------------------------------------------
+ sander.PIMD$(SFX): $(NETCDF) $(PIMDOBJ) $(EVBPIMD) syslib nxtsec lapack blas \
+        lmod checkserconf
+ 	$(LOAD) -o sander.PIMD$(SFX) $(PIMDOBJ) $(EVBPIMD) \
+ 		../lmod/lmod.a ../lapack/lapack.a ../blas/blas.a \
+-		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB)
++		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB) $(PLUMED_LOAD)
+ 
+ #---------------------------------------------------------------------------
+ sander.PIMD.MPI$(SFX): $(NETCDF) $(PIMDOBJ) $(EVBPIMD) syslib nxtsec lapack \
+        blas lmod checkparconf
+ 	$(LOAD) -o sander.PIMD.MPI$(SFX) $(PIMDOBJ) $(EVBPIMD) \
+ 		../lmod/lmod.a ../lapack/lapack.a ../blas/blas.a \
+-		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB)
++		../lib/nxtsec.o ../lib/sys.a $(NETCDFLIB) $(LOADLIB) $(PLUMED_LOAD)
+ 
+ #---------------------------------------------------------------------------
+ psander$(SFX): $(NETCDF) $(PSOBJ)  $(QMOBJ) $(QM2OBJ) $(QMMMOBJ_DFTB) \
+               qm_div.o force.PS.o syslib \
+                  syslib nxtsec lapack blas lmod
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/sander/mdread.f" << \EOF_EOF
+--- ./src/sander/mdread.f.preplumed
++++ ./src/sander/mdread.f
+@@ -78,11 +78,11 @@
+          cut_inner,icfe,clambda,klambda, rbornstat,lastrst,lastist,  &
+          itgtmd,tgtrmsd,tgtmdfrc,tgtfitmask,tgtrmsmask, &
+          idecomp,temp0les,restraintmask,restraint_wt,bellymask, &
+          noshakemask, &
+          mmtsb_switch, mmtsb_iterations,rdt,icnstph,solvph,ntcnstph, &
+-         ifqnt,ievb, &
++         ifqnt,ievb,plumed,plumedfile, &
+ #ifdef PIMD
+          pimd_runtype, pimd_use_original_mass, ineb, &
+ #endif
+          dtemp, dxm, heat, timlim  !all retired 
+ 
+@@ -129,10 +129,13 @@
+    ig = 71277
+    tempi = ZERO
+    ntb = 1
+    ntt = 0
+    temp0 = 300.0d0
++   plumed = 0
++   plumedfile = 'plumed.dat'
++
+ #if defined(LES) || defined(PIMD)
+    
+    ! alternate temp for LES copies, if negative then use single bath
+    ! single bath not the same as 2 baths with same target T
+    
+@@ -306,10 +309,15 @@
+    else
+       write(6, '(1x,a,/)') 'Could not find cntrl namelist'
+       call mexit(6,1)
+    end if
+ 
++   if (plumed.eq.1) then
++     write(6, '(1x,a,/)') 'PLUMED is on'
++     write(6, '(1x,a,a,/)') 'PLUMEDfile is ',plumedfile
++   endif
++
+    if (ifqnt>0) then
+      qmmm_nml%ifqnt = .true.
+      if (saltcon /= 0.0d0) then
+        qm_gb%saltcon_on = .true.
+      else
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/sander/md.h" << \EOF_EOF
+--- ./src/sander/md.h.preplumed
++++ ./src/sander/md.h
+@@ -15,22 +15,23 @@
+       ibgwat,ienwat,iorwat,              &!36
+       iwatpr,nsolw,igb,alpb,iyammp,           &!41
+       gbsa,vrand,iwrap,nrespa,irespa,nrespai,icfe,  &!48
+       rbornstat,ivcap,iconstreff,        &!51
+       neb,vv,tmode,ipol,iesp,ievb,nodeid,num_noshake,    &!59
+-      idecomp,icnstph,ntcnstph,maxdup,numexchg,repcrd,numwatkeep     !66
+-parameter (BC_MDI=66)
++      idecomp,icnstph,ntcnstph,maxdup,numexchg,repcrd,numwatkeep,&  !66
++      plumed !67
++parameter (BC_MDI=67)
+ 
+ common/mdi/nrp,nspm,ig, &
+       ntx,ntcx,ntxo,ntt,ntp,ntr,init,ntcm,nscm, &
+       isolvp,nsolut,ntc,ntcc,ntf,ntid,ntn,ntnb,nsnb,ndfmin, &
+       nstlim,nrc,ntrx,npscal,imin,maxcyc,ncyc,ntmin, &
+       irest,jfastw,ibgwat,ienwat,iorwat, &
+       iwatpr,nsolw,igb,alpb,iyammp,gbsa,vrand,numexchg,repcrd,numwatkeep, &
+       iwrap,nrespa,irespa,nrespai,icfe,rbornstat, &
+       ivcap,iconstreff,idecomp,klambda,icnstph,ntcnstph,maxdup,neb,vv, &
+-	  tmode,ipol,iesp,ievb,nodeid,num_noshake
++	  tmode,ipol,iesp,ievb,nodeid,num_noshake, plumed
+ 
+ ! ... floats:
+ 
+ _REAL_ t,dt,temp0,tautp,pres0,comp,taup,temp,tempi, & !9
+       tol,taur,dx0,drms,vlimit,rbtarg(9),tmass,tmassinv,  & !25
+@@ -47,11 +48,12 @@
+       v11,v12,v22,kevb,evbt,Arad
+ 
+ ! ... strings:
+ 
+ character(len=4) iwtnm,iowtnm,ihwtnm
+-character(len=256) restraintmask,bellymask,tgtfitmask,tgtrmsmask,noshakemask
++character(len=256) restraintmask,bellymask,tgtfitmask,tgtrmsmask,noshakemask, &
++                   plumedfile
+ common/mds/ restraintmask,bellymask,tgtfitmask,tgtrmsmask,noshakemask,  &
+-            iwtnm,iowtnm,ihwtnm(2)
++            iwtnm,iowtnm,ihwtnm(2),plumedfile
+ 
+ !-------------END    md.h  ------------------------------------------------
+ 
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/sander/sander.f" << \EOF_EOF
+--- ./src/sander/sander.f.preplumed
++++ ./src/sander/sander.f
+@@ -509,10 +509,13 @@
+    !----- Set up integer stack initial size --------------    
+    call mpi_bcast(lastist,1,mpi_integer,0,commsander,ierr)
+    call mpi_bcast(lastrst,1,mpi_integer,0,commsander,ierr)
+ 
+    call stack_setup()
++
++   call mpi_bcast(plumed,1,MPI_INTEGER,0,commsander,ierr)
++   call mpi_bcast(plumedfile,256,MPI_CHARACTER,0,commsander,ierr)
+       
+    call mpi_barrier(commsander,ierr)
+    !     ---allocate memory on the non-master nodes:
+ 
+    if( .not.master ) then
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/sander/runmd.f" << \EOF_EOF
+--- ./src/sander/runmd.f.preplumed
++++ ./src/sander/runmd.f
+@@ -172,10 +172,12 @@
+    character(len=4) prndiptest
+    !--- END VARIABLES FOR DIPOLE PRINTING ---
+ 
+    _REAL_,parameter :: pressure_constant = 6.85695d+4
+ 
++   _REAL_ :: energyUnits,timeUnits,lengthUnits
++
+    !  Runmd operates in kcal/mol units for energy, amu for masses,
+    !     and angstoms for distances.  To convert the input time parameters
+    !     from picoseconds to internal units, multiply by 20.455
+    !     (which is 10.0*sqrt(4.184)).
+    
+@@ -477,10 +479,41 @@
+    ener(9) = box(3)
+    
+    ekcmt(1:4) = 0.d0
+    nitp = 0
+    nits = 0
++
++   ! init PLUMED
++   if(plumed.eq.1) then
++     call plumed_g_create()
++     energyUnits=4.184
++     lengthUnits=0.1
++     timeUnits=1.0
++     call plumed_g_cmd("setMDEnergyUnits"//char(0),energyUnits)
++     call plumed_g_cmd("setMDLengthUnits"//char(0),lengthUnits)
++     call plumed_g_cmd("setMDTimeUnits"//char(0),timeUnits)
++     call plumed_g_cmd("setPlumedDat"//char(0),trim(adjustl(plumedfile))//char(0))
++     call plumed_g_cmd("setNatoms"//char(0),nr)
++     call plumed_g_cmd("setMDEngine"//char(0),"amber");
++     call plumed_g_cmd("setTimestep"//char(0),dt);
++#  ifdef MPI
++     call plumed_g_cmd("setMPIFComm"//char(0),MPI_COMM_WORLD)
++#  endif
++
++     call plumed_g_cmd("init"//char(0),0);
++
++
++!     if(ifbox/=0 .and. ifbox/=1 .and. ifbox/=2) then
++!      write (6,*) "!!!!! PLUMED ERROR: Only orthorhombic and truncted octahedron cells are supported in this release."
++!      write (6,*) "!!!!! ABORTING RUN"
++!      stop
++!     endif
++!     call init_metadyn(nr,dt,amass,xx(l15),ifbox,0,trim(adjustl(plumedfile))//char(0))
++     continue
++   endif
++   ! end init PLUMED
++
+    
+    !=======================================================================
+    !     ----- MAKE A FIRST DYNAMICS STEP -----
+    !=======================================================================
+    !  init = 3:  general startup if not continuing a previous run
+@@ -815,10 +848,26 @@
+    !     TIME_force is started and stopped inside force
+    call force(xx,ix,ih,ipairs,x,f,ener(23),vir, &
+          xx(l96),xx(l97),xx(l98),xx(l99), qsetup,qpsander, &
+             do_list_update)
+ 
++   !PLUMED force added
++   if(plumed.eq.1) then
++     call plumed_g_cmd("setStep"//char(0),nstep)
++     call plumed_g_cmd("setPositions"//char(0),x)
++     call plumed_g_cmd("setMasses"//char(0),amass)
++     call plumed_g_cmd("setCharges"//char(0),xx(l15))
++     call plumed_g_cmd("setEnergy"//char(0),ener(23))
++     call plumed_g_cmd("setForces"//char(0),f)
++!     call plumed_g_cmd("setVirial",&force_vir[0][0]);
++!     call plumed_g_cmd("setBox"//char(0),box)
++     call plumed_g_cmd("calc"//char(0),0);
++
++   end if
++   !PLUMED end
++
++
+    ! Constant pH transition evaluation
+    if ((icnstph /= 0) .and. (mod(irespa,ntcnstph) == 0)) then
+       call cnstphendstep(ix(icpstinf),ix(icpresst),ix(icpptcnt), &
+             ix(icptrsct), xx(lcpene),xx(lcpcrg),xx(l190),xx(l15),ener(39), &
+             icpselres,icpselstat,cnstph_rand_gen)
+EOF_EOF
diff --git a/patches/gromacs-4.0.7.config b/patches/gromacs-4.0.7.config
new file mode 100644
index 000000000..59497e353
--- /dev/null
+++ b/patches/gromacs-4.0.7.config
@@ -0,0 +1,6 @@
+
+
+function plumed_preliminary_test(){
+# check if the README contains the word GROMACS and if gromacs has been already configured
+  grep -q GROMACS README 1>/dev/null 2>/dev/null && test -f src/kernel/Makefile
+}
diff --git a/patches/gromacs-4.0.7.diff b/patches/gromacs-4.0.7.diff
new file mode 100644
index 000000000..62540519a
--- /dev/null
+++ b/patches/gromacs-4.0.7.diff
@@ -0,0 +1,253 @@
+patch -u -l -b -F 5 --suffix=.preplumed "./src/kernel/Makefile" << \EOF_EOF
+--- ./src/kernel/Makefile.preplumed
++++ ./src/kernel/Makefile
+@@ -15,10 +15,11 @@
+ 
+ 
+ # Note: Makefile is automatically generated from Makefile.in by the configure
+ # script, and Makefile.in is generated from Makefile.am by automake.
+ 
++include ../../Plumed.inc
+ 
+ 
+ pkgdatadir = $(datadir)/gromacs
+ pkglibdir = $(libdir)/gromacs
+ pkgincludedir = $(includedir)/gromacs
+@@ -84,11 +85,11 @@
+ 	../gmxlib/libgmx_mpi_d.la
+ am_mdrun_OBJECTS = glaasje.$(OBJEXT) gctio.$(OBJEXT) ionize.$(OBJEXT) \
+ 	do_gct.$(OBJEXT) repl_ex.$(OBJEXT) xutils.$(OBJEXT) \
+ 	md.$(OBJEXT) mdrun.$(OBJEXT) genalg.$(OBJEXT)
+ mdrun_OBJECTS = $(am_mdrun_OBJECTS)
+-mdrun_LDADD = $(LDADD)
++mdrun_LDADD = $(LDADD) $(PLUMED_LOAD)
+ mdrun_DEPENDENCIES = $(noinst_LTLIBRARIES) \
+ 	../mdlib/libmd_mpi_d.la ../gmxlib/libgmx_mpi_d.la
+ am_pdb2gmx_OBJECTS = pdb2gmx.$(OBJEXT)
+ pdb2gmx_OBJECTS = $(am_pdb2gmx_OBJECTS)
+ pdb2gmx_LDADD = $(LDADD)
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/kernel/md.c" << \EOF_EOF
+--- ./src/kernel/md.c.preplumed
++++ ./src/kernel/md.c
+@@ -81,10 +81,17 @@
+ #include "compute_io.h"
+ #include "mvdata.h"
+ #include "checkpoint.h"
+ #include "mtop_util.h"
+ 
++/* PLUMED */
++#include "../../Plumed.h"
++extern int    plumedswitch;
++extern plumed plumedmain;
++/* END PLUMED */
++
++
+ #ifdef GMX_MPI
+ #include <mpi.h>
+ #endif
+ 
+ /* The following two variables and the signal_handler function
+@@ -831,10 +838,41 @@
+     snew(scale_tot,1);
+   } else {
+     scale_tot = NULL;
+   }
+ 
++/* PLUMED */
++  if(plumedswitch){
++
++    if(PAR(cr)){
++      if(DOMAINDECOMP(cr)) {
++        plumed_cmd(plumedmain,"setMPIComm",&cr->dd->mpi_comm_all);
++      }else{
++        plumed_cmd(plumedmain,"setMPIComm",&cr->mpi_comm_mysim);
++      }
++    }
++
++    plumed_cmd(plumedmain,"setNatoms",&top_global->natoms);
++    plumed_cmd(plumedmain,"setMDEngine","gromacs");
++    plumed_cmd(plumedmain,"setLog",fplog);
++    plumed_cmd(plumedmain,"setTimestep",&ir->delta_t);
++
++    plumed_cmd(plumedmain,"init",NULL);
++
++    if(PAR(cr)){
++      if(DOMAINDECOMP(cr)) {
++        plumed_cmd(plumedmain,"setAtomsNlocal",&cr->dd->nat_home);
++        plumed_cmd(plumedmain,"setAtomsGatindex",cr->dd->gatindex);
++      }else{
++        plumed_cmd(plumedmain,"setAtomsNlocal",&mdatoms->homenr);
++        plumed_cmd(plumedmain,"setAtomsContiguous",&mdatoms->start);
++      }
++    }
++  }
++/* END PLUMED */
++
++
+   /* Write start time */
+   start_t=print_date_and_time(fplog,cr->nodeid,"Started mdrun");
+   wallcycle_start(wcycle,ewcRUN);
+   if (fplog)
+     fprintf(fplog,"\n");
+@@ -1068,10 +1106,16 @@
+ 	dd_partition_system(fplog,step,cr,bMasterState,
+ 			    state_global,top_global,ir,
+ 			    state,&f,&buf,mdatoms,top,fr,vsite,shellfc,constr,
+ 			    nrnb,wcycle,do_verbose);
+ 	wallcycle_stop(wcycle,ewcDOMDEC);
++/* PLUMED */
++        if(plumedswitch){
++          plumed_cmd(plumedmain,"setAtomsNlocal",&cr->dd->nat_home);
++          plumed_cmd(plumedmain,"setAtomsGatindex",cr->dd->gatindex);
++        }
++/* END PLUMED */
+       }
+     }
+ 
+     if (MASTER(cr) && do_log && !bFFscan)
+       print_ebin_header(fplog,step,t,state->lambda);
+@@ -1128,17 +1172,39 @@
+     else {
+       /* The coordinates (x) are shifted (to get whole molecules) in do_force
+        * This is parallellized as well, and does communication too. 
+        * Check comments in sim_util.c
+        */
++
++/* PLUMED */
++      if(plumedswitch){
++        plumed_cmd(plumedmain,"setStep",&step);
++        plumed_cmd(plumedmain,"setPositions",&state->x[mdatoms->start][0]);
++        plumed_cmd(plumedmain,"setMasses",&mdatoms->massT[mdatoms->start]);
++        plumed_cmd(plumedmain,"setCharges",&mdatoms->chargeA[mdatoms->start]);
++        plumed_cmd(plumedmain,"setBox",&state->box[0][0]);
++        plumed_cmd(plumedmain,"prepareCalc",NULL);
++      }
++/* END PLUMED */
++
+       do_force(fplog,cr,ir,step,nrnb,wcycle,top,groups,
+ 	       state->box,state->x,&state->hist,
+ 	       f,buf,force_vir,mdatoms,enerd,fcd,
+ 	       state->lambda,graph,
+ 	       fr,vsite,mu_tot,t,fp_field,ed,
+ 	       GMX_FORCE_STATECHANGED | (bNS ? GMX_FORCE_NS : 0) |
+ 	       GMX_FORCE_ALLFORCES);
++
++/* PLUMED */
++      if(plumedswitch){
++        plumed_cmd(plumedmain,"setEnergy",&enerd->term[F_EPOT]);
++        plumed_cmd(plumedmain,"setForces",&f[mdatoms->start][0]);
++        plumed_cmd(plumedmain,"setVirial",&force_vir[0][0]);
++        plumed_cmd(plumedmain,"performCalc",NULL);
++      }
++/* END PLUMED */
++
+     }
+ 
+     GMX_BARRIER(cr->mpi_comm_mygroup);
+ 
+     if (bTCR)
+@@ -1603,10 +1669,17 @@
+       if (DOMAINDECOMP(cr)) {
+ 	dd_partition_system(fplog,step,cr,TRUE,
+ 			    state_global,top_global,ir,
+ 			    state,&f,&buf,mdatoms,top,fr,vsite,shellfc,constr,
+ 			    nrnb,wcycle,FALSE);
++/* PLUMED */
++        if(plumedswitch){
++          plumed_cmd(plumedmain,"setAtomsNlocal",&cr->dd->nat_home);
++          plumed_cmd(plumedmain,"setAtomsGatindex",cr->dd->gatindex);
++        }
++/* END PLUMED */
++
+       } else {
+ 	bcast_state(cr,state,FALSE);
+       }
+     }
+     
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/kernel/mdrun.c" << \EOF_EOF
+--- ./src/kernel/mdrun.c.preplumed
++++ ./src/kernel/mdrun.c
+@@ -51,10 +51,16 @@
+ #include "checkpoint.h"
+ 
+ /* afm stuf */
+ #include "pull.h"
+ 
++/* PLUMED */
++#include "../../Plumed.h"
++int    plumedswitch;
++plumed plumedmain;
++/* END PLUMED */
++
+ int main(int argc,char *argv[])
+ {
+   static char *desc[] = {
+     "The mdrun program is the main computational chemistry engine",
+     "within GROMACS. Obviously, it performs Molecular Dynamics simulations,",
+@@ -274,11 +280,12 @@
+     { efXVG, "-devout", "deviatie", ffOPTWR },
+     { efXVG, "-runav",  "runaver",  ffOPTWR },
+     { efXVG, "-px",     "pullx",    ffOPTWR },
+     { efXVG, "-pf",     "pullf",    ffOPTWR },
+     { efMTX, "-mtx",    "nm",       ffOPTWR },
+-    { efNDX, "-dn",     "dipole",   ffOPTWR }
++    { efNDX, "-dn",     "dipole",   ffOPTWR },
++    { efDAT, "-plumed", "plumed",   ffOPTRD }   /* PLUMED */
+   };
+ #define NFILE asize(fnm)
+ 
+   /* Command line options ! */
+   static bool bCart        = FALSE;
+@@ -490,17 +497,49 @@
+     ed=NULL;
+     
+   ddxyz[XX] = (int)(realddxyz[XX] + 0.5);
+   ddxyz[YY] = (int)(realddxyz[YY] + 0.5);
+   ddxyz[ZZ] = (int)(realddxyz[ZZ] + 0.5);
++
++/* PLUMED */
++  plumedswitch=0;
++  if (opt2bSet("-plumed",NFILE,fnm)) plumedswitch=1;
++  if(plumedswitch){
++    int plumed_is_there=0;
++    int real_precision=sizeof(real);
++    real energyUnits=1.0;
++    real lengthUnits=1.0;
++    real timeUnits=1.0;
++
++    plumed_installed(&plumed_is_there);
++    if(!plumed_is_there){
++      gmx_fatal(FARGS,"Plumed is not available. Check your PLUMED_KERNEL variable.");
++    }
++    plumedmain=plumed_create();
++    plumed_cmd(plumedmain,"setRealPrecision",&real_precision);
++// this is not necessary for gromacs units:
++    plumed_cmd(plumedmain,"setMDEnergyUnits",&energyUnits);
++    plumed_cmd(plumedmain,"setMDLengthUnits",&lengthUnits);
++    plumed_cmd(plumedmain,"setMDTimeUnits",&timeUnits);
++//
++    plumed_cmd(plumedmain,"setPlumedDat",ftp2fn(efDAT,NFILE,fnm));
++    plumedswitch=1;
++  }
++/* END PLUMED */
+   
+   mdrunner(fplog,cr,NFILE,fnm,bVerbose,bCompact,
+ 	   ddxyz,dd_node_order,rdd,rconstr,
+ 	   dddlb_opt[0],dlb_scale,ddcsx,ddcsy,ddcsz,
+ 	   nstepout,ed,repl_ex_nst,repl_ex_seed,pforce,
+ 	   cpt_period,max_hours,Flags);
+   
++/* PLUMED */
++  if(plumedswitch){
++    plumed_finalize(plumedmain);
++  }
++/* END PLUMED */
++
+   if (gmx_parallel_env)
+     gmx_finalize(cr);
+ 
+   if (MULTIMASTER(cr)) {
+     thanx(stderr);
+EOF_EOF
diff --git a/patches/gromacs-4.5.3.config b/patches/gromacs-4.5.3.config
new file mode 100644
index 000000000..59497e353
--- /dev/null
+++ b/patches/gromacs-4.5.3.config
@@ -0,0 +1,6 @@
+
+
+function plumed_preliminary_test(){
+# check if the README contains the word GROMACS and if gromacs has been already configured
+  grep -q GROMACS README 1>/dev/null 2>/dev/null && test -f src/kernel/Makefile
+}
diff --git a/patches/gromacs-4.5.3.diff b/patches/gromacs-4.5.3.diff
new file mode 100644
index 000000000..f5da3ceb6
--- /dev/null
+++ b/patches/gromacs-4.5.3.diff
@@ -0,0 +1,236 @@
+patch -u -l -b -F 5 --suffix=.preplumed "./src/kernel/Makefile" << \EOF_EOF
+--- ./src/kernel/Makefile.preplumed
++++ ./src/kernel/Makefile
+@@ -16,10 +16,11 @@
+ 
+ 
+ # Note: Makefile is automatically generated from Makefile.in by the configure
+ # script, and Makefile.in is generated from Makefile.am by automake.
+ 
++include ../../Plumed.inc
+ 
+ 
+ 
+ pkgdatadir = $(datadir)/gromacs
+ pkgincludedir = $(includedir)/gromacs
+@@ -141,11 +142,11 @@
+ am_mdrun_OBJECTS = gctio.$(OBJEXT) ionize.$(OBJEXT) do_gct.$(OBJEXT) \
+ 	repl_ex.$(OBJEXT) xutils.$(OBJEXT) runner.$(OBJEXT) \
+ 	md.$(OBJEXT) mdrun.$(OBJEXT) genalg.$(OBJEXT) \
+ 	md_openmm.$(OBJEXT)
+ mdrun_OBJECTS = $(am_mdrun_OBJECTS)
+-mdrun_LDADD = $(LDADD)
++mdrun_LDADD = $(LDADD) $(PLUMED_LOAD)
+ mdrun_DEPENDENCIES = $(lib_LTLIBRARIES) ../mdlib/libmd_mpi_d.la \
+ 	../gmxlib/libgmx_mpi_d.la
+ pdb2gmx_SOURCES = pdb2gmx.c
+ pdb2gmx_OBJECTS = pdb2gmx.$(OBJEXT)
+ pdb2gmx_LDADD = $(LDADD)
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/kernel/md.c" << \EOF_EOF
+--- ./src/kernel/md.c.preplumed
++++ ./src/kernel/md.c
+@@ -88,10 +88,16 @@
+ #include "mvdata.h"
+ #include "checkpoint.h"
+ #include "mtop_util.h"
+ #include "sighandler.h"
+ 
++/* PLUMED */
++#include "../../Plumed.h"
++extern int    plumedswitch;
++extern plumed plumedmain;
++/* END PLUMED */
++
+ #ifdef GMX_LIB_MPI
+ #include <mpi.h>
+ #endif
+ #ifdef GMX_THREADS
+ #include "tmpi.h"
+@@ -1522,10 +1528,41 @@
+             }
+         }
+         fprintf(fplog,"\n");
+     }
+ 
++/* PLUMED */
++  if(plumedswitch){
++
++    if(PAR(cr)){
++      if(DOMAINDECOMP(cr)) {
++        plumed_cmd(plumedmain,"setMPIComm",&cr->dd->mpi_comm_all);
++      }else{
++        plumed_cmd(plumedmain,"setMPIComm",&cr->mpi_comm_mysim);
++      }
++    }
++
++    plumed_cmd(plumedmain,"setNatoms",&top_global->natoms);
++    plumed_cmd(plumedmain,"setMDEngine","gromacs");
++    plumed_cmd(plumedmain,"setLog",fplog);
++    plumed_cmd(plumedmain,"setTimestep",&ir->delta_t);
++
++    plumed_cmd(plumedmain,"init",NULL);
++
++    if(PAR(cr)){
++      if(DOMAINDECOMP(cr)) {
++        plumed_cmd(plumedmain,"setAtomsNlocal",&cr->dd->nat_home);
++        plumed_cmd(plumedmain,"setAtomsGatindex",cr->dd->gatindex);
++      }else{
++        plumed_cmd(plumedmain,"setAtomsNlocal",&mdatoms->homenr);
++        plumed_cmd(plumedmain,"setAtomsContiguous",&mdatoms->start);
++      }
++    }
++  }
++/* END PLUMED */
++
++
+     /* Set and write start time */
+     runtime_start(runtime);
+     print_date_and_time(fplog,cr->nodeid,"Started mdrun",runtime);
+     wallcycle_start(wcycle,ewcRUN);
+     if (fplog)
+@@ -1802,10 +1839,17 @@
+                                     state,&f,mdatoms,top,fr,
+                                     vsite,shellfc,constr,
+                                     nrnb,wcycle,do_verbose);
+                 wallcycle_stop(wcycle,ewcDOMDEC);
+                 /* If using an iterative integrator, reallocate space to match the decomposition */
++/* PLUMED */
++        if(plumedswitch){
++          plumed_cmd(plumedmain,"setAtomsNlocal",&cr->dd->nat_home);
++          plumed_cmd(plumedmain,"setAtomsGatindex",cr->dd->gatindex);
++        }
++/* END PLUMED */
++
+             }
+         }
+ 
+         if (MASTER(cr) && do_log && !bFFscan)
+         {
+@@ -1928,16 +1972,37 @@
+              * in do_force.
+              * This is parallellized as well, and does communication too. 
+              * Check comments in sim_util.c
+              */
+         
++
++ /* PLUMED */
++       if(plumedswitch){
++         plumed_cmd(plumedmain,"setStep",&step);
++         plumed_cmd(plumedmain,"setPositions",&state->x[mdatoms->start][0]);
++         plumed_cmd(plumedmain,"setMasses",&mdatoms->massT[mdatoms->start]);
++         plumed_cmd(plumedmain,"setCharges",&mdatoms->chargeA[mdatoms->start]);
++         plumed_cmd(plumedmain,"setBox",&state->box[0][0]);
++         plumed_cmd(plumedmain,"prepareCalc",NULL);
++       }
++ /* END PLUMED */
++
+             do_force(fplog,cr,ir,step,nrnb,wcycle,top,top_global,groups,
+                      state->box,state->x,&state->hist,
+                      f,force_vir,mdatoms,enerd,fcd,
+                      state->lambda,graph,
+                      fr,vsite,mu_tot,t,outf->fp_field,ed,bBornRadii,
+                      (bNS ? GMX_FORCE_NS : 0) | force_flags);
++ /* PLUMED */
++       if(plumedswitch){
++         plumed_cmd(plumedmain,"setEnergy",&enerd->term[F_EPOT]);
++         plumed_cmd(plumedmain,"setForces",&f[mdatoms->start][0]);
++         plumed_cmd(plumedmain,"setVirial",&force_vir[0][0]);
++         plumed_cmd(plumedmain,"performCalc",NULL);
++       }
++ /* END PLUMED */
++
+         }
+     
+         GMX_BARRIER(cr->mpi_comm_mygroup);
+         
+         if (bTCR)
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/kernel/mdrun.c" << \EOF_EOF
+--- ./src/kernel/mdrun.c.preplumed
++++ ./src/kernel/mdrun.c
+@@ -54,10 +54,16 @@
+ #endif
+ 
+ /* afm stuf */
+ #include "pull.h"
+ 
++/* PLUMED */
++#include "../../Plumed.h"
++int    plumedswitch;
++plumed plumedmain;
++/* END PLUMED */
++
+ int main(int argc,char *argv[])
+ {
+   const char *desc[] = {
+  #ifdef GMX_OPENMM
+     "This is an experimental release of GROMACS for accelerated",
+@@ -369,11 +375,12 @@
+     { efXVG, "-devout", "deviatie", ffOPTWR },
+     { efXVG, "-runav",  "runaver",  ffOPTWR },
+     { efXVG, "-px",     "pullx",    ffOPTWR },
+     { efXVG, "-pf",     "pullf",    ffOPTWR },
+     { efMTX, "-mtx",    "nm",       ffOPTWR },
+-    { efNDX, "-dn",     "dipole",   ffOPTWR }
++    { efNDX, "-dn",     "dipole",   ffOPTWR },
++    { efDAT, "-plumed", "plumed",   ffOPTRD }   /* PLUMED */
+   };
+ #define NFILE asize(fnm)
+ 
+   /* Command line options ! */
+   gmx_bool bCart        = FALSE;
+@@ -635,16 +642,52 @@
+ 
+   ddxyz[XX] = (int)(realddxyz[XX] + 0.5);
+   ddxyz[YY] = (int)(realddxyz[YY] + 0.5);
+   ddxyz[ZZ] = (int)(realddxyz[ZZ] + 0.5);
+ 
++/* PLUMED */
++  plumedswitch=0;
++  if (opt2bSet("-plumed",NFILE,fnm)) plumedswitch=1;
++  if(plumedswitch){
++    int plumed_is_there=0;
++    int real_precision=sizeof(real);
++    real energyUnits=1.0;
++    real lengthUnits=1.0;
++    real timeUnits=1.0;
++
++    plumed_installed(&plumed_is_there);
++    if(!plumed_is_there){
++      gmx_fatal(FARGS,"Plumed is not available. Check your PLUMED_KERNEL variable.");
++    }
++    plumedmain=plumed_create();
++    plumed_cmd(plumedmain,"setRealPrecision",&real_precision);
++// this is not necessary for gromacs units:
++    plumed_cmd(plumedmain,"setMDEnergyUnits",&energyUnits);
++    plumed_cmd(plumedmain,"setMDLengthUnits",&lengthUnits);
++    plumed_cmd(plumedmain,"setMDTimeUnits",&timeUnits);
++//
++    plumed_cmd(plumedmain,"setPlumedDat",ftp2fn(efDAT,NFILE,fnm));
++    plumedswitch=1;
++  }
++/* END PLUMED */
++
++
++
+   rc = mdrunner(nthreads, fplog,cr,NFILE,fnm,oenv,bVerbose,bCompact,
+                 nstglobalcomm, ddxyz,dd_node_order,rdd,rconstr,
+                 dddlb_opt[0],dlb_scale,ddcsx,ddcsy,ddcsz,
+                 nstepout,resetstep,nmultisim,repl_ex_nst,repl_ex_seed,
+                 pforce, cpt_period,max_hours,deviceOptions,Flags);
+ 
++/* PLUMED */
++  if(plumedswitch){
++    plumed_finalize(plumedmain);
++  }
++/* END PLUMED */
++
++
++
+   if (gmx_parallel_env_initialized())
+       gmx_finalize();
+ 
+   if (MULTIMASTER(cr)) {
+       thanx(stderr);
+EOF_EOF
diff --git a/patches/namd-2.7.config b/patches/namd-2.7.config
new file mode 100644
index 000000000..3eff738a2
--- /dev/null
+++ b/patches/namd-2.7.config
@@ -0,0 +1,6 @@
+
+
+function plumed_preliminary_test(){
+# check if the README.txt contains the word NAMD
+  grep -q NAMD README.txt 1>/dev/null 2>/dev/null && test -f */Make.config
+}
diff --git a/patches/namd-2.7.diff b/patches/namd-2.7.diff
new file mode 100644
index 000000000..a11ff41c5
--- /dev/null
+++ b/patches/namd-2.7.diff
@@ -0,0 +1,264 @@
+patch -u -l -b -F 5 --suffix=.preplumed "./Makefile" << \EOF_EOF
+--- ./Makefile.preplumed
++++ ./Makefile
+@@ -347,10 +347,12 @@
+ 	cat $(BUILDINFO).C; \
+ 	$(CXX) $(CXXFLAGS) $(COPTO)$(BUILDINFO).o $(COPTC) $(BUILDINFO).C
+ 
+ all:	$(BINARIES) $(LIBCUDARTSO)
+ 
++include .rootdir/Plumed.inc
++
+ namd2:	$(INCDIR) $(DSTDIR) $(OBJS) $(LIBS)
+ 	$(MAKEBUILDINFO)
+ 	$(CHARMC) -verbose -ld++-option \
+ 	"$(COPTI)$(CHARMINC) $(COPTI)$(INCDIR) $(COPTI)$(SRCDIR) $(CXXOPTS)" \
+ 	-module NeighborLB -module HybridLB -module RefineLB -module GreedyLB -language charm++ \
+@@ -360,10 +362,11 @@
+ 	$(CUDALIB) \
+ 	$(DPMTALIB) \
+ 	$(DPMELIB) \
+ 	$(TCLLIB) \
+ 	$(FFTLIB) \
++        $(PLUMED_LOAD) \
+ 	$(PLUGINLIB) \
+ 	$(CHARMOPTS) \
+ 	-lm -o namd2
+ 
+ charmrun: $(CHARM)/bin/charmrun # XXX
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/SimParameters.C" << \EOF_EOF
+--- ./src/SimParameters.C.preplumed
++++ ./src/SimParameters.C
+@@ -1231,10 +1231,17 @@
+       &colvarsOn, FALSE);
+     opts.require("colvars", "colvarsConfig",
+       "configuration for the collective variables", PARSE_STRING);
+     opts.optional("colvars", "colvarsInput",
+       "input restart file for the collective variables", PARSE_STRING);
++
++     // PLUMED
++     //// plumed
++     opts.optionalB("main", "plumed", "Is PLUMED active?",&plumedOn,FALSE);
++     opts.require("plumed", "plumedfile","PLUMED script",PARSE_STRING);
++     // END PLUMED
++
+ }
+ 
+ 
+ /* BEGIN gf */
+ void SimParameters::config_parser_mgridforce(ParseOptions &opts) {
+@@ -3511,11 +3518,11 @@
+    }
+    
+    // Global forces configuration
+ 
+    globalForcesOn = ( tclForcesOn || freeEnergyOn || miscForcesOn ||
+-                      (IMDon) || SMDOn || TMDOn || colvarsOn );
++                      (IMDon) || SMDOn || TMDOn || colvarsOn || plumedOn );
+ 
+ 
+    if (tclForcesOn)
+    {
+      iout << iINFO << "TCL GLOBAL FORCES ACTIVE\n";
+@@ -3596,10 +3603,25 @@
+      }
+ 
+      iout << endi;
+    }
+ 
++   // PLUMED
++   if (plumedOn)
++   {
++       iout << iINFO << "PLUMED ACTIVE\n";
++
++       current = config->find("plumedfile");
++       iout << iINFO << "PLUMED CONFIG FILE   "<< current->data << "\n" << endi;
++       strcpy(plumedFilename,current->data);
++
++       ifstream plumedFile(current->data);
++       if ( ! plumedFile ) NAMD_die("Error reading PLUMED config file.\n");
++
++   }
++   // END PLUMED
++
+    if (IMDon)
+    {
+      iout << iINFO << "INTERACTIVE MD ACTIVE\n";
+      iout << iINFO << "INTERACTIVE MD PORT    " << IMDport << "\n";
+      iout << iINFO << "INTERACTIVE MD FREQ    " << IMDfreq << "\n";
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/ComputeMgr.C" << \EOF_EOF
+--- ./src/ComputeMgr.C.preplumed
++++ ./src/ComputeMgr.C
+@@ -73,13 +73,134 @@
+ #include "GlobalMasterTcl.h"
+ #include "GlobalMasterSMD.h"
+ #include "GlobalMasterTMD.h"
+ #include "GlobalMasterEasy.h"
+ #include "GlobalMasterMisc.h"
++// PLUMED
++#include "../Plumed.h"
++// END PLUMED
+ #include "GlobalMasterFreeEnergy.h"
+ #include "GlobalMasterColvars.h"
+ 
++class GlobalMasterPlumed:
++  public  GlobalMasterEasy,
++  private PLMD::Plumed
++{
++  std::vector<int> index;
++  std::vector<double> positions;
++  std::vector<double> forces;
++  std::vector<double> masses;
++  std::vector<double> charges;
++  double box[3][3];
++  SimParameters *spar;
++public:
++  GlobalMasterPlumed():
++    GlobalMasterEasy("plumedScript")
++  {
++    easy_init(config);
++  }
++  void easy_init(const char* config)
++  {
++    int realPrecision=sizeof(double);
++    cmd("setRealPrecision",&realPrecision);
++    spar=Node::Object()->simParameters;
++
++    double energyUnits=4.184;
++    double lengthUnits=0.1;
++    double timeUnits=0.001;
++    cmd("setMDEnergyUnits",&energyUnits);
++    cmd("setMDLengthUnits",&lengthUnits);
++    cmd("setMDTimeUnits",&timeUnits);
++
++    cmd("setPlumedDat",spar->plumedFilename);
++
++    int natoms=Node::Object()->molecule->numAtoms;
++    cmd("setNatoms",&natoms);
++
++    cmd("setMDEngine","namd");
++
++    cmd("setLog",stdout);
++
++    double dt=spar->dt;
++    cmd("setTimestep",&dt);
++    cmd("init");
++
++    int s=step+1;
++    cmd("setStep",&s);
++    share();
++
++  }
++
++  void share(){
++    int* p;
++    int n;
++    bool redo=false;
++    cmd("prepareDependencies");
++    cmd("createFullList",&n);
++    cmd("getFullList",&p);
++    if(index.size()!=n)redo=true;
++    if(!redo) for(int i=0;i<n;i++) if(index[i]!=p[i]) { redo=true; break;};
++    if(redo){
++      index.resize(n);
++      modifyRequestedAtoms().resize(0);
++      for(int i=0;i<n;i++){
++        requestAtom(p[i]);
++        index[i]=p[i];
++      };
++      positions.resize(3*n);
++      forces.resize(3*n);
++      charges.resize(n);
++      masses.resize(n);
++      cmd("setAtomsNlocal",&n);
++      cmd("setAtomsGatindex",&index[0]);
++    }
++    cmd("clearFullList");
++  }
++
++  void easy_calc(){
++
++    for(int i=0;i<index.size();i++){
++      Vector coord;
++      getPosition(index[i],coord);
++      positions[3*i+0]=coord.x;
++      positions[3*i+1]=coord.y;
++      positions[3*i+2]=coord.z;
++      masses[i]=Node::Object()->molecule->atommass(i);
++      charges[i]=Node::Object()->molecule->atommass(i);
++    };
++
++    if(spar->lattice.volume()>0.0){
++      for(int i=0;i<3;i++) box[0][i]=spar->lattice.a()[i];
++      for(int i=0;i<3;i++) box[1][i]=spar->lattice.b()[i];
++      for(int i=0;i<3;i++) box[2][i]=spar->lattice.c()[i];
++      cmd("setBox",&box[0][0]);
++    }
++
++    for(int i=0;i<forces.size();i++) forces[i]=0.0;
++
++    cmd("setPositions",&positions[0]);
++    cmd("setForces",&forces[0]);
++
++    cmd("shareData");
++    cmd("performCalc");
++
++    for(int i=0;i<index.size();i++){
++      Vector f;
++      f.x=forces[3*i+0];
++      f.y=forces[3*i+1];
++      f.z=forces[3*i+2];
++      int j=addForce(index[i],f);
++    };
++
++    int s=step+1;
++    cmd("setStep",&s);
++    share();
++ 
++  }
++};
++
++
+ ComputeMgr::ComputeMgr()
+ {
+     CkpvAccess(BOCclass_group).computeMgr = thisgroup;
+     computeGlobalObject = 0;
+     computeDPMEObject = 0;
+@@ -656,10 +777,16 @@
+             );
+         if (simParams->TMDOn)
+             masterServerObject->addClient(new GlobalMasterTMD());
+         if (simParams->miscForcesOn)
+             masterServerObject->addClient(new GlobalMasterMisc());
++     // PLUMED
++        if (simParams->plumedOn){
++          masterServerObject->addClient(new GlobalMasterPlumed());
++        }
++     // END PLUMED
++
+         if ( simParams->freeEnergyOn )
+             masterServerObject->addClient(new GlobalMasterFreeEnergy());
+ 		if ( simParams->colvarsOn )
+ 			masterServerObject->addClient(new GlobalMasterColvars());
+ 
+EOF_EOF
+patch -u -l -b -F 5 --suffix=.preplumed "./src/SimParameters.h" << \EOF_EOF
+--- ./src/SimParameters.h.preplumed
++++ ./src/SimParameters.h
+@@ -351,10 +351,13 @@
+ 	char tclBCArgs[128];		//  Extra args for calcforces command
+ 	Bool freeEnergyOn;		//  Doing free energy perturbation?
+ 	Bool miscForcesOn;		//  Using misc forces?
+ 	Bool colvarsOn;         //  Using the colvars module?
+ 
++        Bool plumedOn;                  //  Using Plumed?
++        char plumedFilename[1024];      // Plumed filename
++
+ 	Bool fixedAtomsOn;		//  Are there fixed atoms?
+ 	Bool fixedAtomsForces;		//  Calculate forces anyway?
+ 
+ 	Bool langevinOn;		//  Flag TRUE-> langevin dynamics active
+ 	BigReal langevinTemp;		//  Temperature for Langevin dynamics
+EOF_EOF
diff --git a/patches/patch.sh b/patches/patch.sh
new file mode 100755
index 000000000..e7a2cb0ea
--- /dev/null
+++ b/patches/patch.sh
@@ -0,0 +1,254 @@
+#! /bin/bash
+
+MANUAL="\
++++ PLUMED patch tool HELP +++
+
+Actions (choose only one):
+  -h, --help
+                    print this help and exit
+  -p, --patch
+                    patch
+  -r, -R, --revert
+                    revert
+  -l, --list-engines
+                    print a list of available MD engines
+  -s, --save
+                    save (FOR DEVELOPERS)
+Options:
+  -e ENGINE, --engine ENGINE
+                    set MD engine to ENGINE (default: choose interactively)
+  -m MODE, --mode MODE
+                    set link mode to MODE, which can be either static, shared or runtime
+  --static
+                    same as --mode static
+  --shared
+                    same as --mode shared
+  --runtime
+                    same as --mode runtime
+  --root ROOT
+                    set path to plumed directory (default: PLUMED_ROOT environment variable)
+  -d FILE, --diff FILE
+                    set the path to diff file (default: ROOT/patches/ENGINE.diff) (FOR TESTING)
+  -f, --force
+                    force patching (FOR TESTING)
+"
+
+prefix=""
+action=""
+engine=""
+diff=""
+mode=static
+force=""
+
+multiple_actions=
+
+for option
+do
+
+  prefix_option="$prefix$option"
+  prefix=""
+
+  case "$prefix_option" in
+    (--help|-h)         echo "$MANUAL" ; exit ;;
+    (--patch|-p)        test -n "$action" && multiple_actions=yes ; action=patch ;;
+    (--save|-s)         test -n "$action" && multiple_actions=yes ; action=save ;;
+    (--revert|-R|-r)    test -n "$action" && multiple_actions=yes ; action=revert ;;
+    (--list-engines|-l) test -n "$action" && multiple_actions=yes ; action=list ;;
+    (--engine=*) engine="${prefix_option#--engine=}" ;;
+    (--mode=*) mode="${prefix_option#--mode=}" ;;
+    (--diff=*) diff="${prefix_option#--diff=}" ;;
+    (--engine|-e) prefix="--engine=" ;;
+    (--root) prefix="--root=" ;;
+    (--diff|-d) prefix="--diff=" ;;
+    (--mode|-m) prefix="--mode=" ;;
+    (--static) mode=static ;;
+    (--shared) mode=shared ;;
+    (--runtime) mode=runtime ;;
+    (--force|-f) force=yes ;;
+    (*)
+      echo "ERROR: Unknown option $prefix_option. Use -h for help."
+      exit
+  esac
+done
+
+if [ -n "$multiple_actions" ] ; then
+  echo "Too many actions. -h for help"
+  exit
+fi
+
+if [ -z "$action" ] ; then
+  echo "Nothing to do. -h for help"
+  exit
+fi
+
+echo "PLUMED patching tool"
+echo
+if [ -z "$PLUMED_ROOT" ]
+then
+  echo "ERROR: I cannot find PLUMED"
+  echo "Please set PLUMED_ROOT environment variable or use --root"
+  exit
+fi
+if [ ! -d "$PLUMED_ROOT/patches/" ]
+then
+  echo "ERROR: cannot find $PLUMED_ROOT/patches/ directory"
+  echo "Check your PLUMED_ROOT variable or --root option"
+  exit
+fi
+
+# build MD engines list
+
+mdlist=""
+for file in "$PLUMED_ROOT"/patches/*diff
+do
+  b="${file##*/}"
+  b="${b%.diff}"
+  mdlist="$mdlist $b"
+done
+
+if [ "$action" == list ]
+then
+  echo "Available MD engines:"
+  for file in "$PLUMED_ROOT"/patches/*diff
+  do
+    b="${file##*/}"
+    b="${b%.diff}"
+    echo "  $b"
+  done
+  exit
+fi
+
+if [ -z "$engine" ]
+then
+  PS3="Choose the best matching code/version:"
+  select engine in $mdlist; do
+    if [[ -n "$engine" ]] ; then
+      break
+    else
+      echo "ERROR: choose in the list above or interrupt (^c)"
+    fi
+  done
+fi
+
+if [ -z "$diff" ]
+then
+  diff="$PLUMED_ROOT/patches/${engine}.diff"
+fi
+if [ -z "$config" ]
+then
+  config="$PLUMED_ROOT/patches/${engine}.config"
+fi
+
+echo "MD engine: $engine"
+echo "PLUMED location: $PLUMED_ROOT"
+echo "diff file: $diff"
+
+if [ -f "$config" ]
+then
+  echo "sourcing config file: $config"
+  source "$config"
+fi
+
+case "$mode" in
+(static|shared|runtime) ;;
+(*)
+  echo "I don't understand mode $mode"
+  exit
+esac
+
+
+case "$action" in
+  (patch)
+    if [ ! -f "$diff" ] ; then
+      echo "ERROR: MD engine not supported (or mispelled)"
+      exit
+    fi
+    if type -t plumed_preliminary_test 1>/dev/null ; then
+      if plumed_preliminary_test || [ "$force" ] ; then
+        echo >/dev/null
+      else
+        echo "ERROR: Preliminary test not passed."
+        echo "It seems that this is not $engine, or you are in the wrong directory"
+        echo "If you are sure about what you are doing, use -f"
+      exit
+      fi
+    fi
+    if [ -L Plumed.h -o -L Plumed.inc ]
+    then
+      echo "ERROR: you have likely already patched. Revert first (-r)"
+      exit
+    fi
+    if [ ! -f "$PLUMED_ROOT/src/Plumed.inc" ]
+    then
+      echo "ERROR: cannot find $PLUMED_ROOT/src/Plumed.inc file"
+      echo "Compile plumed before patching"
+      exit
+    fi
+    echo "Linking Plumed.h and Plumed.inc ($mode mode)"
+    ln -s "$PLUMED_ROOT/src/Plumed.h"
+    ln -s "$PLUMED_ROOT/src/Plumed.inc.$mode" Plumed.inc
+    bash "$diff"
+  ;;
+  (save)
+    if [ ! -L Plumed.h -o ! -L Plumed.inc ]
+    then
+      echo "ERROR: I cannot find Plumed.h and Plumed.inc files. You have likely not patched yet."
+      exit
+    fi
+    PREPLUMED=$(find . -name "*.preplumed")
+    if ! test "$PREPLUMED" ; then
+      echo "ERROR: I cannot find any .preplumed file. You have likely not patched yet."
+      exit
+    fi
+    if type -t plumed_preliminary_test 1>/dev/null ; then
+      if plumed_preliminary_test || [ "$force" ] ; then
+        echo >/dev/null
+      else
+        echo "ERROR: Preliminary test not passed."
+        echo "It seems that this is not $engine, or you are in the wrong directory"
+        echo "If you are sure about what you are doing, use -f"
+      exit
+      fi
+    fi
+    echo "Saving your changes to $diff"
+    echo "Preplumed files:"
+    echo "$PREPLUMED"
+    test -e "$diff" && rm "$diff"
+    for bckfile in $PREPLUMED ; do
+      file="${bckfile%.preplumed}"
+      if test -e "$file" ; then
+        echo "patch -u -l -b -F 5 --suffix=.preplumed \"${file}\" << \\EOF_EOF" >> "$diff"
+        diff -U 5 "${bckfile}" "$file" --label="$bckfile" --label="$file" >> "$diff"
+        echo "EOF_EOF"                                                   >> "$diff"
+      else
+        echo "ERROR: File $file is missing"
+      fi
+    done
+  ;;
+  (revert)
+    if [ ! -f "$diff" ] ; then
+      echo "ERROR: MD engine not supported (or mispelled)"
+      exit
+    fi
+    if [ ! -L Plumed.h -o ! -L Plumed.inc ]
+    then
+      echo "WARNING: I cannot find Plumed.h and Plumed.inc files. You have likely not patched yet."
+    else
+    echo "Removing Plumed.h and Plumed.inc"
+      rm Plumed.h Plumed.inc
+    fi
+    PREPLUMED=$(find . -name "*.preplumed")
+    if ! test "$PREPLUMED" ; then
+      echo "WARNING: I cannot find any .preplumed file. You have likely not patched yet."
+    else
+      echo "Reverting changes and touching reverted files"
+      for bckfile in $PREPLUMED ; do
+        file="${bckfile%.preplumed}"
+        mv "$bckfile" "$file"
+        touch "$file"
+      done
+    fi
+esac
+
+
+
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 000000000..294976305
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1,2 @@
+Plumed.inc*
+PlumedConfig.h
diff --git a/src/Action.cpp b/src/Action.cpp
new file mode 100644
index 000000000..5021afe7e
--- /dev/null
+++ b/src/Action.cpp
@@ -0,0 +1,83 @@
+#include "Action.h"
+#include "PlumedMain.h"
+#include "Log.h"
+#include <cassert>
+
+using namespace PLMD;
+
+ActionOptions::ActionOptions(PlumedMain&p,const std::vector<std::string>&l):
+plumed(p),
+line(l)
+{
+}
+
+Action::Action(const ActionOptions&ao):
+  name(ao.line[0]),
+  line(ao.line),
+  active(false),
+  plumed(ao.plumed),
+  log(plumed.getLog()),
+  comm(plumed.comm)
+{
+  line.erase(line.begin());
+  log.printf("Action %s\n",name.c_str());
+  parse("LABEL",label);
+  if(label.length()==0){
+    std::string s; Tools::convert(plumed.getActionSet().size(),s);
+    label="@"+s;
+  }
+  log.printf("  with label %s\n",label.c_str());
+}
+
+void Action::parseFlag(const std::string&key,bool & t){
+  if(!Tools::parseFlag(line,key,t)){
+    log.printf("ERROR parsing keyword %s\n",key.c_str());
+    log.printf("%s\n",getDocumentation().c_str());
+    this->exit(1);
+  }
+}
+
+void Action::addDependency(Action*action){
+  assert(this->after.count(action)==action->before.count(this));
+  this->after.insert(action);
+  action->before.insert(this);
+}
+
+void Action::activate(){
+  active=true;
+  for(Dependencies::iterator p=after.begin();p!=after.end();p++) (*p)->activate();
+}
+
+void Action::clearDependencies(){
+  for(Dependencies::iterator p=after.begin();p!=after.end();p++){
+    (*p)->before.erase(this);
+  };
+  this->after.clear();
+}
+
+std::string Action::getDocumentation()const{
+  return std::string("UNDOCUMENTED ACTION");
+}
+
+void Action::checkRead(){
+  if(line.size()>0){
+    log.printf("ERROR READING INPUT FILE\n%s\n",getDocumentation().c_str());
+    exit(1);
+  }
+}
+
+int Action::getStep()const{
+  return plumed.getStep();
+}
+
+double Action::getTime()const{
+  return plumed.getAtoms().getTimeStep()*getStep();
+}
+
+
+
+void Action::exit(int c){
+  plumed.exit(c);
+}
+
+
diff --git a/src/Action.h b/src/Action.h
new file mode 100644
index 000000000..b1f23d4bb
--- /dev/null
+++ b/src/Action.h
@@ -0,0 +1,166 @@
+#ifndef __PLUMED_Action_h
+#define __PLUMED_Action_h
+#include <vector>
+#include <string>
+#include <set>
+#include "Log.h"
+#include "Tools.h"
+
+#include "PlumedCommunicator.h"
+
+namespace PLMD{
+
+class PlumedMain;
+
+/// This class is used to bring the relevant information to the Action constructor.
+/// Its content is kept private to other classes, and may change in the future
+class ActionOptions{
+  friend class Action;
+  friend class ActionRegister;
+/// Reference to main PlumedMain object
+  PlumedMain& plumed;
+/// Input line which sets up the action
+  std::vector<std::string> line;
+public:
+/// Constructor
+  ActionOptions(PlumedMain&p,const std::vector<std::string>&);
+};
+
+/// Base class for all the input Actions.
+/// The input Actions are more or less corresponding to the directives
+/// in the plumed.dat file and are applied in order at each time-step.
+class Action
+{
+
+/// Name of the directive in the plumed.dat file.
+  const std::string name;
+
+/// Label of the Action, as set with LABEL= in the plumed.dat file.
+  std::string label;
+
+/// Directive line.
+/// This line is progressively erased during Action construction
+/// so as to check if all the present keywords are correct.
+  std::vector<std::string> line;
+
+  typedef std::set<Action*> Dependencies;
+/// Actions on which this Action depends.
+  Dependencies after;
+/// Actions depending on this Action.
+  Dependencies before;
+ 
+/// Switch to activate Action on this step.
+  bool active;
+
+protected:
+
+/// Reference to main plumed object
+  PlumedMain& plumed;
+
+/// Reference to the log stream
+  Log& log;
+
+/// Specify that this Action depends on another one
+  void addDependency(Action*);
+
+/// Clear the dependence list for this Action
+  void clearDependencies();
+
+/// Return the present timestep
+  int getStep()const; 
+
+/// Return the present time
+  double getTime()const;
+
+/// Check if Action was properly read.
+/// This checks if Action::line is empty. It must be called after
+/// a final Action has been initialized
+  void checkRead();
+
+/// Parse one keyword as generic type
+  template<class T>
+  void parse(const std::string&key,T&t);
+
+/// Parse one keyword as std::vector
+  template<class T>
+  void parseVector(const std::string&key,std::vector<T>&t);
+
+/// Parse one keyword as boolean flag
+  void parseFlag(const std::string&key,bool&t);
+
+/// Exit with error code c
+  void exit(int c=0);
+
+public:
+  Action(const ActionOptions&);
+  virtual ~Action(){};
+
+  PlumedCommunicator& comm;
+
+/// Calculate an Action.
+/// This method is called one or more times per step.
+/// The set of all Actions is calculated in forward order.
+  virtual void calculate()=0;
+
+/// Apply an Action.
+/// This method is called one time per step.
+/// The set of all Actions is applied in backword order.
+  virtual void apply()=0;
+
+/// Tell to the Action to flush open files
+  virtual void flush(){};
+
+  virtual std::string getDocumentation()const;
+
+/// Returns the label
+  const std::string & getLabel()const;
+
+/// Set action to active
+  virtual void activate();
+
+/// Set action to inactive
+  virtual void deactivate();
+
+/// Check if action is active
+  bool isActive()const;
+};
+
+/////////////////////
+// FAST INLINE METHODS
+
+inline
+const std::string & Action::getLabel()const{
+  return label;
+}
+
+template<class T>
+void Action::parse(const std::string&key,T&t){
+  if(!Tools::parse(line,key,t)){
+    log.printf("ERROR parsing keyword %s\n",key.c_str());
+    log.printf("%s\n",getDocumentation().c_str());
+    this->exit(1);
+  }
+}
+
+template<class T>
+void Action::parseVector(const std::string&key,std::vector<T>&t){
+  if(!Tools::parseVector(line,key,t)){
+    log.printf("ERROR parsing keyword %s\n",key.c_str());
+    log.printf("%s\n",getDocumentation().c_str());
+    this->exit(1);
+  }
+}
+
+inline
+void Action::deactivate(){
+  active=false;
+}
+
+inline
+bool Action::isActive()const{
+  return active;
+}
+
+}
+#endif
+
diff --git a/src/ActionAtomistic.cpp b/src/ActionAtomistic.cpp
new file mode 100644
index 000000000..44500a6f1
--- /dev/null
+++ b/src/ActionAtomistic.cpp
@@ -0,0 +1,49 @@
+#include "ActionAtomistic.h"
+#include "PlumedMain.h"
+#include <vector>
+#include <string>
+#include <cassert>
+
+using namespace std;
+using namespace PLMD;
+
+ActionAtomistic::~ActionAtomistic(){
+// forget the pending request
+  if(atomRequest) delete atomRequest;
+}
+
+ActionAtomistic::ActionAtomistic(const ActionOptions&ao):
+Action(ao),
+atomRequest(NULL)
+{
+  parse("SIGMA",sigma);
+  log.printf("  with sigma %f\n",sigma);
+}
+
+void ActionAtomistic::activate(){
+  if(atomRequest) atomRequest->activate();
+  Action::activate();
+}
+
+void ActionAtomistic::deactivate(){
+  if(atomRequest) atomRequest->deactivate();
+  Action::deactivate();
+}
+
+void ActionAtomistic::requestAtoms(const vector<int> & a){
+  int nat=a.size();
+  indexes=a;
+  positions.resize(nat);
+  forces.resize(nat);
+  masses.resize(nat);
+  charges.resize(nat);
+  if(atomRequest) delete atomRequest;
+//  atomRequest=new Atoms::Request(plumed.getAtoms(),indexes,positions,forces,box,virial);
+  atomRequest=new Atoms::Request(plumed.getAtoms(),indexes,masses,charges,positions,forces,box,virial);
+}
+
+Vector ActionAtomistic::pbcDistance(const Vector &v1,const Vector &v2)const{
+  return plumed.getAtoms().getPbc().distance(v1,v2);
+}
+
+
diff --git a/src/ActionAtomistic.h b/src/ActionAtomistic.h
new file mode 100644
index 000000000..0b561e325
--- /dev/null
+++ b/src/ActionAtomistic.h
@@ -0,0 +1,101 @@
+#ifndef __PLUMED_ActionAtomistic_h
+#define __PLUMED_ActionAtomistic_h
+
+#include <vector>
+#include <string>
+#include "Action.h"
+#include "Atoms.h"
+
+namespace PLMD {
+
+/// Action which can access to atomistic data
+class ActionAtomistic :
+  virtual public Action
+  {
+
+  double                sigma;           // typical variable scale
+  Atoms::Request*       atomRequest;     // handler for request of atoms
+  std::vector<int> indexes;         // the set of needed atoms
+  std::vector<Vector>   positions;       // positions of the needed atoms
+  Tensor                box;
+  Tensor                virial;
+  std::vector<Vector>   forces;          // forces on the needed atoms
+  std::vector<double>   masses;
+  std::vector<double>   charges;
+
+protected:
+  void requestAtoms(const std::vector<int> & a);
+  const Vector & getPositions(int)const;
+  const Tensor & getBox()const;
+  const std::vector<Vector> & getPositions()const;
+  double getMasses(int i)const;
+  double getCharges(int i)const;
+  std::vector<Vector> & modifyForces();
+  Tensor & modifyVirial();
+  int getNatoms(){return indexes.size();};
+  Vector pbcDistance(const Vector&,const Vector&)const;
+
+public:
+
+// virtual functions:
+
+  ActionAtomistic(const ActionOptions&ao);
+  ~ActionAtomistic();
+
+  void activate();
+  void deactivate();
+
+  void clearOutputForces();
+};
+
+inline
+const Vector & ActionAtomistic::getPositions(int i)const{
+  return positions[i];
+}
+
+inline
+double ActionAtomistic::getMasses(int i)const{
+  return masses[i];
+}
+
+inline
+double ActionAtomistic::getCharges(int i)const{
+  return charges[i];
+}
+
+
+inline
+const std::vector<Vector> & ActionAtomistic::getPositions()const{
+  return positions;
+}
+
+
+inline
+const Tensor & ActionAtomistic::getBox()const{
+  return box;
+}
+
+inline
+std::vector<Vector> & ActionAtomistic::modifyForces(){
+  return forces;
+}
+
+inline
+Tensor & ActionAtomistic::modifyVirial(){
+  return virial;
+}
+
+inline
+void ActionAtomistic::clearOutputForces(){
+  for(unsigned i=0;i<forces.size();++i){
+    forces[i][0]=0.0;
+    forces[i][1]=0.0;
+    forces[i][2]=0.0;
+  }
+}
+
+
+
+}
+
+#endif
diff --git a/src/ActionPilot.cpp b/src/ActionPilot.cpp
new file mode 100644
index 000000000..63790a44c
--- /dev/null
+++ b/src/ActionPilot.cpp
@@ -0,0 +1,24 @@
+#include "ActionPilot.h"
+#include "PlumedMain.h"
+#include <cassert>
+
+using namespace PLMD;
+using namespace std;
+
+ActionPilot::ActionPilot(const ActionOptions&ao):
+Action(ao),
+stride(1)
+{
+  parse("STRIDE",stride);
+  log.printf("  with stride %d\n",stride);
+}
+
+bool ActionPilot::onStep()const{
+  return getStep()%stride==0;
+}
+
+int ActionPilot::getStride()const{
+  return stride;
+}
+
+
diff --git a/src/ActionPilot.h b/src/ActionPilot.h
new file mode 100644
index 000000000..a0e69cc75
--- /dev/null
+++ b/src/ActionPilot.h
@@ -0,0 +1,25 @@
+#ifndef __PLUMED_ActionPilot_h
+#define __PLUMED_ActionPilot_h
+
+#include "Action.h"
+
+namespace PLMD{
+
+/// Action which drives the execution of other Action's.
+/// Action's of this kind are executed with a fixed stride
+/// which is specified on the directive line with a STRIDE= keyword
+class ActionPilot:
+  public virtual Action
+{
+  int stride; // multiple time step
+protected:
+  int getStride()const;
+public:
+  ActionPilot(const ActionOptions&);
+  bool onStep()const;
+};
+
+}
+
+#endif
+
diff --git a/src/ActionRegister.cpp b/src/ActionRegister.cpp
new file mode 100644
index 000000000..48e16a75b
--- /dev/null
+++ b/src/ActionRegister.cpp
@@ -0,0 +1,59 @@
+#include "ActionRegister.h"
+#include "Log.h"
+#include "Tools.h"
+#include <algorithm>
+#include <cassert>
+
+
+using namespace std;
+using namespace PLMD;
+
+ActionRegister& PLMD::actionRegister(){
+  static ActionRegister* ans = new ActionRegister;
+  return *ans;
+}
+
+void ActionRegister::add(string key,creator_pointer f){
+  if(m.count(key)){
+    m.erase(key);
+    disabled.insert(key);
+  }else{
+    m.insert(pair<string,creator_pointer>(key,f));
+  };
+}
+
+bool ActionRegister::check(string key){
+  if(m.count(key)>0) return true;
+  return false;
+}
+
+Action* ActionRegister::create(const ActionOptions&ao){
+  if(ao.line.size()<1)return NULL;
+  Action* action;
+  if(m[ao.line[0]]) action=m[ao.line[0]](ao);
+  else action=NULL;
+  return action;
+}
+
+void ActionRegister::log(Log & log){
+  vector<string> s;
+  for(mIterator it=m.begin();it!=m.end();++it)
+    s.push_back((*it).first);
+  sort(s.begin(),s.end());
+  for(unsigned i=0;i<s.size();i++){
+    log.printf("  %s\n",s[i].c_str());
+  };
+  if(disabled.size()>0){
+    s.assign(disabled.size(),"");
+    copy(disabled.begin(),disabled.end(),s.begin());
+    sort(s.begin(),s.end());
+    log.printf("+++++++ WARNING +++++++\n");
+    log.printf("The following keywords have been registered more than once and will be disabled:\n");
+    for(unsigned i=0;i<s.size();i++){
+      log.printf("  - %s\n",s[i].c_str());
+    };
+    log.printf("+++++++ END WARNING +++++++\n");
+  };
+}
+
+
diff --git a/src/ActionRegister.h b/src/ActionRegister.h
new file mode 100644
index 000000000..795c760f7
--- /dev/null
+++ b/src/ActionRegister.h
@@ -0,0 +1,69 @@
+#ifndef __PLUMED_ActionRegister_h
+#define __PLUMED_ActionRegister_h
+
+#include <map>
+#include <set>
+#include "Action.h"
+
+namespace PLMD{
+
+class Log;
+
+/// Register holding all the allowed keywords.
+/// This is a register which holds a map between strings (directives) and function pointers.
+/// The function pointers are pointing to functions which create an object of
+/// the corresponding class given the corresponding options (ActionOptions).
+/// There should be only one of there objects allocated.
+/// Actions should be registered here at the beginning of execution
+/// If the same directive is used for different classes, it is automatically disabled
+/// to avoid random results.
+///
+class ActionRegister{
+/// Pointer to a function which, given the options, create an Action
+  typedef Action*(*creator_pointer)(const ActionOptions&);
+/// Map action to a function which creates the related object
+  std::map<std::string,creator_pointer> m;
+/// Iterator over the map
+  typedef std::map<std::string,creator_pointer>::iterator mIterator;
+/// Set of disabled actions (which were registered more than once)
+  std::set<std::string> disabled;
+public:
+/// Register a new class.
+/// \param key The name of the directive to be used in the input file
+/// \param key A pointer to a function which creates an object of that class
+  void add(std::string key,creator_pointer);
+/// Verify if a directive is present in the register
+  bool check(std::string action);
+/// Create an Action of the type indicated in the options
+/// \param ao object containing information for initialization, such as the full input line, a pointer to PlumedMain, etc
+  Action* create(const ActionOptions&ao);
+/// Write on the log stream the list of registered directives
+  void log(Log & log);
+};
+
+/// Function returning a reference to the ActionRegister.
+/// \relates ActionRegister
+/// To avoid problems with order of initialization, this function contains
+/// a static ActionRegister which is built the first time the function is called.
+/// In this manner, it is always initialized before it's used
+ActionRegister& actionRegister();
+
+}
+
+
+/// Shortcut for Action registration
+/// \relates PLMD::ActionRegister
+/// For easier registration, this file also provides a macro PLUMED_REGISTER_ACTION.
+/// \param classname the name of the class to be registered
+/// \param directive a string containing the corresponding directive
+/// This macro should be used in the .cpp file of the corresponding class
+#define PLUMED_REGISTER_ACTION(classname,directive) \
+  static class classname##RegisterMe{ \
+    static PLMD::Action* create(const PLMD::ActionOptions&ao){return new classname(ao);} \
+  public: \
+    classname##RegisterMe(){PLMD::actionRegister().add(directive,create);}; \
+  } classname##RegisterMeObject;
+
+
+#endif
+
diff --git a/src/ActionSet.cpp b/src/ActionSet.cpp
new file mode 100644
index 000000000..fa09fecd7
--- /dev/null
+++ b/src/ActionSet.cpp
@@ -0,0 +1,15 @@
+#include "ActionSet.h"
+#include "PlumedMain.h"
+
+using namespace std;
+using namespace PLMD;
+
+ActionSet::ActionSet(PlumedMain&p):
+plumed(p){
+}
+
+void ActionSet::clearDelete(){
+  for(int i=size()-1;i>=0;i--) delete (*this)[i];
+  clear();
+}
+
diff --git a/src/ActionSet.h b/src/ActionSet.h
new file mode 100644
index 000000000..faf112381
--- /dev/null
+++ b/src/ActionSet.h
@@ -0,0 +1,79 @@
+#ifndef __PLUMED_ActionSet_h
+#define __PLUMED_ActionSet_h
+
+#include "Action.h"
+
+namespace PLMD {
+
+class PlumedMain;
+
+/// std::vector containing the sequence of Action to be done.
+/// It is a vector of Action*, and as such it has the entire
+/// std::vector interface. Moreover, it implements methods to extract
+/// Acion* of a given type (select<T>()), NOT of a given type (selectNot<T>())
+/// or to find an Action with a given label (selectWithLabel())
+/// Finally, since it holds pointers, there is a clearDelete() function
+/// which deletes the pointers before deleting the vector
+class ActionSet:
+  public std::vector<Action*>
+{
+  PlumedMain& plumed;
+public:
+  ActionSet(PlumedMain&p);
+/// Clear and deletes all the included pointers.
+  void clearDelete();
+
+/// Extract pointers to all Action's of type T
+/// To extract all Colvar , use select<Colvar*>();
+  template <class T>
+  std::vector<T> select()const;
+/// Extract pointers to all Action's which are not of type T
+/// E.g., to extract all noncolvars, use
+///    selectNot<Colvar*>();
+  template <class T>
+  std::vector<Action*> selectNot()const;
+/// Extract pointer to an action labeled s, only if it is of
+/// type T. E.g., to extract an action labeled "pippo", use selectWithLabel<Action*>("pippo")
+/// If you want it to be a Colvar, use selectWithLabel<Colvar*>(pippo). If it is
+/// not found, it returns NULL
+  template <class T>
+  T selectWithLabel(const std::string&s)const;
+};
+
+///////
+// INLINE IMPLEMENTATIONS:
+
+template <class T>
+std::vector<T> ActionSet::select()const{
+  std::vector<T> ret;
+  for(const_iterator p=begin();p!=end();++p){
+    T t=dynamic_cast<T>(*p);
+    if(t) ret.push_back(t);
+  };
+  return ret;
+}
+
+template <class T>
+T ActionSet::selectWithLabel(const std::string&s)const{
+  std::vector<T> ret;
+  for(const_iterator p=begin();p!=end();++p){
+    T t=dynamic_cast<T>(*p);
+    if(t && dynamic_cast<Action*>(t)->getLabel()==s) return t;
+  };
+  return NULL;
+}
+
+template <class T>
+std::vector<Action*> ActionSet::selectNot()const{
+  std::vector<Action*> ret;
+  for(const_iterator p=begin();p!=end();++p){
+    T t=dynamic_cast<T>(*p);
+    if(!t) ret.push_back(*p);
+  };
+  return ret;
+}
+
+}
+
+#endif
+
diff --git a/src/ActionSetup.cpp b/src/ActionSetup.cpp
new file mode 100644
index 000000000..d973ac4d3
--- /dev/null
+++ b/src/ActionSetup.cpp
@@ -0,0 +1,15 @@
+#include "ActionSetup.h"
+#include "PlumedMain.h"
+
+using namespace PLMD;
+
+ActionSetup::ActionSetup(const ActionOptions&ao):
+  Action(ao)
+{
+  const ActionSet& actionset(plumed.getActionSet());
+  for(ActionSet::const_iterator p=actionset.begin();p!=actionset.end();++p){
+// check that all the preceeding actions are ActionSetup
+    assert(dynamic_cast<ActionSetup*>(*p));
+  }
+}
+
diff --git a/src/ActionSetup.h b/src/ActionSetup.h
new file mode 100644
index 000000000..88a308190
--- /dev/null
+++ b/src/ActionSetup.h
@@ -0,0 +1,23 @@
+#ifndef __PLUMED_ActionSetup_h
+#define __PLUMED_ActionSetup_h
+
+#include "Action.h"
+
+
+namespace PLMD{
+
+/// Action executed only at startup
+class ActionSetup :
+  public virtual Action {
+public:
+/// Constructor
+  ActionSetup(const ActionOptions&ao);
+/// Do nothing.
+  void calculate(){};
+/// Do nothing.
+  void apply(){};
+};
+
+}
+
+#endif
diff --git a/src/ActionWithArguments.cpp b/src/ActionWithArguments.cpp
new file mode 100644
index 000000000..3440f3495
--- /dev/null
+++ b/src/ActionWithArguments.cpp
@@ -0,0 +1,65 @@
+#include "ActionWithArguments.h"
+#include "PlumedMain.h"
+
+using namespace std;
+using namespace PLMD;
+
+ActionWithArguments::ActionWithArguments(const ActionOptions&ao):
+  Action(ao)
+{
+  string args;
+  parse("ARG",args);
+
+  vector<string> c=Tools::getWords(args,",");
+
+  for(unsigned i=0;i<c.size();i++){
+    std::size_t dot=c[i].find_first_of('.');
+    if(dot!=string::npos){
+      string a=c[i].substr(0,dot);
+      string name=c[i].substr(dot+1);
+      if(a=="*"){
+        assert(name=="*");
+        std::vector<ActionWithValue*> all=plumed.getActionSet().select<ActionWithValue*>();
+        for(unsigned j=0;j<all.size();j++){
+          for(int k=0;k<all[j]->getNumberOfValues();++k){
+            arguments.push_back(all[j]->getValue(k));
+          }
+        };
+      } else {
+        ActionWithValue* action=plumed.getActionSet().selectWithLabel<ActionWithValue*>(a);
+        assert(action);
+        if(name=="*"){
+          vector<string> s=action->getValueNames();
+          for(unsigned j=0;j<s.size();j++)arguments.push_back(action->getValue(s[j]));
+        } else {
+          assert(action->hasNamedValue(name));
+          arguments.push_back(action->getValue(name));
+        }
+      }
+    } else if(c[i]=="*"){
+      std::vector<ActionWithValue*> all=plumed.getActionSet().select<ActionWithValue*>();
+      for(unsigned j=0;j<all.size();j++){
+        assert(all[j]->hasNamedValue(""));
+        arguments.push_back(all[j]->getValue(""));
+      };
+    } else{
+      ActionWithValue* action=plumed.getActionSet().selectWithLabel<ActionWithValue*>(c[i]);
+      assert(action);
+      assert(action->hasNamedValue(""));
+      arguments.push_back(action->getValue(""));
+    }
+  }
+
+  if(c.size()>0){
+    log.printf("  with arguments");
+    for(unsigned i=0;i<c.size();i++) log.printf(" %s",c[i].c_str());
+    log.printf("\n");
+  }
+
+  clearDependencies();
+  for(unsigned i=0;i<arguments.size();i++) addDependency(&arguments[i]->getAction());
+}
+
+
+
+
diff --git a/src/ActionWithArguments.h b/src/ActionWithArguments.h
new file mode 100644
index 000000000..c344601bb
--- /dev/null
+++ b/src/ActionWithArguments.h
@@ -0,0 +1,49 @@
+#ifndef __PLUMED_ActionWithArguments_h
+#define __PLUMED_ActionWithArguments_h
+
+#include "Action.h"
+#include <map>
+#include <vector>
+#include <cassert>
+
+#include "ActionWithValue.h"
+
+namespace PLMD{
+
+/// Action which takes other Action's as arguments.
+/// Arguments are objects of type PLMD::Value, and
+/// are addressed using the ARG= keyword on the directive line
+class ActionWithArguments:
+  public virtual Action
+{
+  std::vector<Value*> arguments;
+
+protected:
+                           ActionWithArguments(const ActionOptions&);
+  virtual                 ~ActionWithArguments(){};
+  std::vector<Value*>    & getArguments();
+  double                   getArgument(int)const;
+  unsigned                 getNumberOfArguments()const;
+public:
+};
+
+
+inline
+std::vector<Value*> & ActionWithArguments::getArguments(){
+  return arguments;
+}
+
+inline
+double ActionWithArguments::getArgument(int i)const{
+  return arguments[i]->getValue();
+}
+
+inline
+unsigned ActionWithArguments::getNumberOfArguments()const{
+  return arguments.size();
+}
+
+
+}
+
+#endif
diff --git a/src/ActionWithValue.cpp b/src/ActionWithValue.cpp
new file mode 100644
index 000000000..6a93d3ba7
--- /dev/null
+++ b/src/ActionWithValue.cpp
@@ -0,0 +1,69 @@
+#include "ActionWithValue.h"
+#include "PlumedMain.h"
+
+using namespace std;
+using namespace PLMD;
+
+
+
+ActionWithValue::ActionWithValue(const ActionOptions&ao):
+  Action(ao),
+  numberOfParameters(0)
+{}
+
+ActionWithValue::~ActionWithValue(){
+  for(unsigned i=0;i<values.size();++i)delete values[i];
+}
+
+void ActionWithValue::addValue(const std::string&name){
+  assertUnique(name);
+  values.push_back(new Value(*this,name));
+}
+
+void ActionWithValue::addValueWithDerivatives(const std::string&name){
+  assertUnique(name);
+  Value* v=new Value(*this,name);
+  v->enableDerivatives();
+  values.push_back(v);
+}
+
+bool ActionWithValue::hasNamedValue(const std::string&name)const{
+  for(unsigned i=0;i<values.size();++i){
+    if(name==values[i]->getName()) return true;
+   }
+  return false;
+}
+
+int ActionWithValue::getValueIndex(const std::string&name)const{
+  for(unsigned i=0;i<values.size();++i) if(name==values[i]->getName()) return i;
+  assert(0);
+  return -1; // otherwise the compiler complains
+}
+
+Value* ActionWithValue::getValue(const std::string&name)const{
+  return values[getValueIndex(name)];
+}
+
+Value* ActionWithValue::getValue(int i)const{
+  return values[i];
+}
+
+std::vector<std::string> ActionWithValue::getValueNames()const{
+  std::vector<std::string> ret;
+  for(unsigned i=0;i<values.size();i++) ret.push_back(values[i]->getName());
+  return ret;
+}
+
+void ActionWithValue::setNumberOfParameters(int n){
+  numberOfParameters=n;
+  for(unsigned i=0;i<values.size();i++) values[i]->setNumberOfParameters(n);
+}
+
+void ActionWithValue::clearInputForces(){
+  for(unsigned i=0;i<values.size();i++) values[i]->clearInputForce();
+}
+void ActionWithValue::clearDerivatives(){
+  for(unsigned i=0;i<values.size();i++) values[i]->clearDerivatives();
+}
+
+
diff --git a/src/ActionWithValue.h b/src/ActionWithValue.h
new file mode 100644
index 000000000..4b4dcd654
--- /dev/null
+++ b/src/ActionWithValue.h
@@ -0,0 +1,74 @@
+#ifndef __PLUMED_ActionWithValue_h
+#define __PLUMED_ActionWithValue_h
+
+#include "Action.h"
+#include <map>
+#include <vector>
+#include <cassert>
+#include "Value.h"
+
+namespace PLMD{
+
+/// Action which can take one or more values.
+/// This object contains an array of PLMD::Value, one for each component.
+class ActionWithValue:
+  public virtual Action
+{
+  int numberOfParameters;
+  std::vector<Value*> values;
+  void assertUnique(const std::string&name);
+  int getValueIndex(const std::string&name)const;
+public:
+  ActionWithValue(const ActionOptions&ao);
+  ~ActionWithValue();
+  void addValue(const std::string&name);
+  void addValueWithDerivatives(const std::string&name);
+  bool hasNamedValue(const std::string&name)const;
+  Value* getValue(const std::string&name)const;
+  Value* getValue(int i)const;
+  std::vector<std::string> getValueNames()const;
+  int getNumberOfValues();
+  void setNumberOfParameters(int n);
+  int getNumberOfParameters()const;
+  double getForce(int n);
+  void addInputForces(int i,double f);
+  void clearInputForces();
+  void clearDerivatives();
+  void setValue(Value*,double);
+  void setValue(double);
+};
+
+inline
+void ActionWithValue::setValue(Value*v,double d){
+  v->setValue(d);
+}
+
+inline
+void ActionWithValue::setValue(double d){
+  values[0]->setValue(d);
+}
+
+inline
+void ActionWithValue::addInputForces(int i,double f){values[i]->addForce(f);}
+
+inline
+double ActionWithValue::getForce(int n){return values[n]->getForce();}
+
+inline
+void ActionWithValue::assertUnique(const std::string&name){
+  assert(!hasNamedValue(name));
+}
+
+inline
+int ActionWithValue::getNumberOfValues(){return values.size();}
+
+inline
+int ActionWithValue::getNumberOfParameters()const{
+  return numberOfParameters;
+}
+
+
+
+}
+
+#endif
diff --git a/src/Atoms.cpp b/src/Atoms.cpp
new file mode 100644
index 000000000..663906379
--- /dev/null
+++ b/src/Atoms.cpp
@@ -0,0 +1,297 @@
+#include "Atoms.h"
+#include <cassert>
+#include <algorithm>
+#include <string>
+
+#include "MDAtoms.h"
+#include "PlumedMain.h"
+
+using namespace PLMD;
+using namespace std;
+
+namespace PLMD {
+
+class PlumedMain;
+
+Atoms::Atoms(PlumedMain&plumed):
+  natoms(0),
+  energy(0.0),
+  collectEnergy(0.0),
+  plumed(plumed),
+  MDEnergyUnits(1.0),
+  MDLengthUnits(1.0),
+  MDTimeUnits(1.0),
+  internalEnergyUnits(1.0),
+  internalLengthUnits(1.0),
+  internalTimeUnits(1.0),
+  forceOnEnergy(0.0)
+{
+  mdatoms=MDAtomsBase::create(sizeof(double));
+}
+
+Atoms::~Atoms(){
+  if(mdatoms) delete mdatoms;
+}
+
+void Atoms::setBox(void*p){
+  mdatoms->setBox(p);
+  Tensor b; mdatoms->getBox(b);
+  pbc.setBox(b);
+}
+
+void Atoms::setPositions(void*p){
+  mdatoms->setp(p);
+}
+
+void Atoms::setMasses(void*p){
+  mdatoms->setm(p);
+}
+
+void Atoms::setCharges(void*p){
+  mdatoms->setc(p);
+}
+
+void Atoms::setVirial(void*p){
+  mdatoms->setVirial(p);
+}
+
+void Atoms::setEnergy(void*p){
+  MD2double(p,energy);
+  energy*=MDEnergyUnits/internalEnergyUnits;
+}
+
+void Atoms::setForces(void*p){
+  mdatoms->setf(p);
+}
+
+void Atoms::setPositions(void*p,int i){
+  mdatoms->setp(p,i);
+}
+
+void Atoms::setForces(void*p,int i){
+  mdatoms->setf(p,i);
+}
+
+void Atoms::share(){
+  mdatoms->getBox(box);
+  mdatoms->getMasses(gatindex,masses);
+  mdatoms->getCharges(gatindex,charges);
+  mdatoms->getPositions(gatindex,positions);
+  if(dd && gatindex.size()<natoms){
+    std::set<int> unique;
+    for(unsigned i=0;i<requestset.size();i++){
+      if(requestset[i]->isActive()) unique.insert(requestset[i]->unique.begin(),requestset[i]->unique.end());
+    }
+    for(unsigned i=0;i<dd.mpi_request_positions.size();i++) dd.mpi_request_positions[i].wait();
+    for(unsigned i=0;i<dd.mpi_request_index.size();i++)     dd.mpi_request_index[i].wait();
+    int count=0;
+    for(std::set<int>::const_iterator p=unique.begin();p!=unique.end();++p){
+      if(dd.g2l[*p]>=0){
+        dd.indexToBeSent[count]=*p;
+        dd.positionsToBeSent[5*count+0]=positions[*p][0];
+        dd.positionsToBeSent[5*count+1]=positions[*p][1];
+        dd.positionsToBeSent[5*count+2]=positions[*p][2];
+        dd.positionsToBeSent[5*count+3]=masses[*p];
+        dd.positionsToBeSent[5*count+4]=charges[*p];
+        count++;
+      }
+    }
+    dd.mpi_request_positions.resize(dd.Get_size());
+    dd.mpi_request_index.resize(dd.Get_size());
+    for(int i=0;i<dd.Get_size();i++){
+      dd.mpi_request_index[i]=dd.Isend(&dd.indexToBeSent[0],count,i,666);
+      dd.mpi_request_positions[i]=dd.Isend(&dd.positionsToBeSent[0],5*count,i,667);
+    }
+  }
+}
+
+void Atoms::wait(){
+
+  if(dd && gatindex.size()<natoms){
+// receive toBeReceived
+    int count=0;
+    PlumedCommunicator::Status status;
+    for(int i=0;i<dd.Get_size();i++){
+      dd.Recv(&dd.indexToBeReceived[count],dd.indexToBeReceived.size()-count,i,666,status);
+      int c=status.Get_count<int>();
+      dd.Recv(&dd.positionsToBeReceived[5*count],dd.positionsToBeReceived.size()-5*count,i,667);
+      count+=c;
+    }
+    for(int i=0;i<count;i++){
+      positions[dd.indexToBeReceived[i]][0]=dd.positionsToBeReceived[5*i+0];
+      positions[dd.indexToBeReceived[i]][1]=dd.positionsToBeReceived[5*i+1];
+      positions[dd.indexToBeReceived[i]][2]=dd.positionsToBeReceived[5*i+2];
+      masses[dd.indexToBeReceived[i]]      =dd.positionsToBeReceived[5*i+3];
+      charges[dd.indexToBeReceived[i]]     =dd.positionsToBeReceived[5*i+4];
+    }
+    if(collectEnergy) dd.Sum(&energy,1);
+    forceOnEnergy=0.0;
+  }
+
+
+  for(unsigned i=0;i<requestset.size();i++){
+    if(!requestset[i]->isActive()) continue;
+    const vector<int> & indexes(requestset[i]->indexes);
+    vector<Vector>   & p(requestset[i]->positions);
+    vector<double>   & c(requestset[i]->charges);
+    vector<double>   & m(requestset[i]->masses);
+    requestset[i]->box=box;
+    for(unsigned j=0;j<indexes.size();j++) p[j]=positions[indexes[j]];
+    for(unsigned j=0;j<indexes.size();j++) c[j]=charges[indexes[j]];
+    for(unsigned j=0;j<indexes.size();j++) m[j]=masses[indexes[j]];
+  };
+}
+
+void Atoms::updateForces(){
+  bool any(false);
+  virial.clear();
+  for(unsigned i=0;i<gatindex.size();i++) forces[gatindex[i]].clear();
+  for(unsigned i=0;i<requestset.size();i++){
+    if(!requestset[i]->isActive()) continue;
+    any=true;
+    const vector<int> & indexes(requestset[i]->indexes);
+    const vector<Vector>   & f(requestset[i]->forces);
+    const Tensor           & v(requestset[i]->virial);
+    if(!plumed.novirial) for(int l=0;l<3;l++)for(int m=0;m<3;m++) virial(l,m)+=v(l,m);
+    for(unsigned j=0;j<indexes.size();j++){
+      const unsigned iat=indexes[j];
+      forces[iat][0]+=f[j][0];
+      forces[iat][1]+=f[j][1];
+      forces[iat][2]+=f[j][2];
+    }
+  };
+  if(forceOnEnergy*forceOnEnergy>epsilon){
+     double alpha=1.0-forceOnEnergy;
+     mdatoms->rescaleForces(0,gatindex.size(),alpha);
+  }
+  if(!any)return;
+  mdatoms->updateForces(gatindex,forces);
+  if(dd.Get_rank()==0) mdatoms->updateVirial(virial);
+}
+
+void Atoms::setNatoms(int n){
+  natoms=n;
+  positions.resize(n);
+  forces.resize(n);
+  masses.resize(n);
+  charges.resize(n);
+  gatindex.resize(n);
+  for(unsigned i=0;i<gatindex.size();i++) gatindex[i]=i;
+}
+
+
+Atoms::Request::Request(Atoms& atoms,const vector<int>& indexes,
+                                           vector<double> & masses,
+                                           vector<double> & charges,
+                                           vector<Vector>& positions,
+                                     const vector<Vector>& forces,
+                                           Tensor&box,
+                                     const Tensor&virial):
+    active(false),
+    atoms(atoms),
+    indexes(indexes),
+    masses(masses),
+    charges(charges),
+    positions(positions),
+    forces(forces),
+    box(box),
+    virial(virial)
+{
+    for(unsigned i=0;i<indexes.size();i++) assert(indexes[i]<atoms.natoms);
+    unique.insert(indexes.begin(),indexes.end());
+    atoms.requestset.push_back(this);
+}
+
+Atoms::Request::~Request(){
+  vector<Request*>::iterator f=find(atoms.requestset.begin(),atoms.requestset.end(),this);
+  assert(f!=atoms.requestset.end());
+  atoms.requestset.erase(f);
+}
+
+void Atoms::DomainDecomposition::enable(PlumedCommunicator& c){
+  on=true;
+  Set_comm(c.Get_comm());
+}
+
+void Atoms::setAtomsNlocal(int n){
+  gatindex.resize(n);
+  if(dd){
+    dd.g2l.resize(natoms,-1);
+    dd.positionsToBeSent.resize(n*5,0.0);
+    dd.positionsToBeReceived.resize(natoms*5,0.0);
+    dd.indexToBeSent.resize(n,0);
+    dd.indexToBeReceived.resize(natoms,0);
+  };
+}
+
+void Atoms::setAtomsGatindex(int*g){
+  for(unsigned i=0;i<gatindex.size();i++) gatindex[i]=g[i];
+  for(unsigned i=0;i<dd.g2l.size();i++) dd.g2l[i]=-1;
+  if(dd) for(unsigned i=0;i<gatindex.size();i++) dd.g2l[gatindex[i]]=i;
+}
+
+void Atoms::setAtomsContiguous(int start){
+  for(unsigned i=0;i<gatindex.size();i++) gatindex[i]=start+i;
+  for(unsigned i=0;i<dd.g2l.size();i++) dd.g2l[i]=-1;
+  if(dd) for(unsigned i=0;i<gatindex.size();i++) dd.g2l[gatindex[i]]=i;
+}
+
+void Atoms::setRealPrecision(int p){
+  delete mdatoms;
+  mdatoms=MDAtomsBase::create(p);
+}
+
+int Atoms::getRealPrecision()const{
+  return mdatoms->getRealPrecision();
+}
+
+void Atoms::MD2double(const void*m,double&d)const{
+  assert(mdatoms); mdatoms->MD2double(m,d);
+}
+void Atoms::double2MD(const double&d,void*m)const{
+  assert(mdatoms); mdatoms->double2MD(d,m);
+}
+
+void Atoms::updateUnits(){
+  mdatoms->setUnits(internalLengthUnits/MDLengthUnits,internalEnergyUnits/MDEnergyUnits);
+}
+
+void Atoms::setTimeStep(void*p){
+  MD2double(p,timestep);
+}
+
+double Atoms::getTimeStep()const{
+  return timestep/internalTimeUnits*MDTimeUnits;
+}
+
+void Atoms::createFullList(int*n){
+  for(unsigned i=0;i<requestset.size();i++) if(requestset[i]->isActive())
+    fullList.insert(fullList.end(),requestset[i]->unique.begin(),requestset[i]->unique.end());
+  std::sort(fullList.begin(),fullList.end());
+  int nn=std::unique(fullList.begin(),fullList.end())-fullList.begin();
+  fullList.resize(nn);
+  *n=nn;
+}
+
+void Atoms::getFullList(int**x){
+  *x=&fullList[0];
+}
+
+void Atoms::clearFullList(){
+  fullList.resize(0);
+}
+
+void Atoms::init(){
+// Default: set domain decomposition to NO-decomposition, waiting for
+// further instruction
+  if(dd){
+    setAtomsNlocal(natoms);
+    setAtomsContiguous(0);
+  }
+}
+
+
+
+}
+
+
diff --git a/src/Atoms.h b/src/Atoms.h
new file mode 100644
index 000000000..141263150
--- /dev/null
+++ b/src/Atoms.h
@@ -0,0 +1,182 @@
+#ifndef __PLUMED_Atoms_h
+#define __PLUMED_Atoms_h
+#include <vector>
+#include <set>
+#include <cassert>
+#include <string>
+#include "PlumedCommunicator.h"
+#include "Tensor.h"
+#include "Pbc.h"
+
+namespace PLMD{
+
+class MDAtomsBase;
+class PlumedMain;
+
+/// Class containing atom related quantities from the MD code.
+class Atoms
+{
+  int natoms;
+  std::vector<Vector> positions;
+  std::vector<Vector> forces;
+  std::vector<double> masses;
+  std::vector<double> charges;
+  Tensor box;
+  Tensor virial;
+  double energy;
+  bool   collectEnergy;
+
+  std::vector<int> fullList;
+  
+  MDAtomsBase* mdatoms;
+  Pbc     pbc;
+
+  PlumedMain & plumed;
+
+  double MDEnergyUnits,MDLengthUnits,MDTimeUnits;
+  double internalEnergyUnits,internalLengthUnits,internalTimeUnits;
+
+  double timestep;
+  double forceOnEnergy;
+
+
+public:
+
+  void forceEnergy(double d){forceOnEnergy+=d;};
+  double getEnergy()const{assert(collectEnergy);return energy;};
+  void setCollectEnergy(bool b){collectEnergy=b;};
+  void setMDEnergyUnits(double d){MDEnergyUnits=d;};
+  void setMDLengthUnits(double d){MDLengthUnits=d;};
+  void setMDTimeUnits(double d){MDTimeUnits=d;};
+  double getMDEnergyUnits()const{return MDEnergyUnits;};
+  double getMDLengthUnits()const{return MDLengthUnits;};
+  double getMDTimeUnits()const{return MDTimeUnits;};
+  void setInternalEnergyUnits(double d){internalEnergyUnits=d;};
+  void setInternalLengthUnits(double d){internalLengthUnits=d;};
+  void setInternalTimeUnits(double d){internalTimeUnits=d;};
+  double getInternalEnergyUnits()const{return internalEnergyUnits;};
+  double getInternalLengthUnits()const{return internalLengthUnits;};
+  double getInternalTimeUnits()const{return internalTimeUnits;};
+  void updateUnits();
+
+  void setTimeStep(void*);
+  double getTimeStep()const;
+
+  const Pbc& getPbc()const{return pbc;};
+
+  class Request{
+    friend class Atoms;
+    bool active;
+    Atoms& atoms;
+    const std::vector<int>& indexes;
+    std::vector<double>&    masses;
+    std::vector<double>&    charges;
+    std::vector<Vector> & positions;
+    const std::vector<Vector> & forces;
+    Tensor& box;
+    const Tensor& virial;
+    std::set<int> unique;
+  public:
+    void activate();
+    void deactivate();
+    bool isActive();
+    void setForced();
+    Request(Atoms& atoms,const std::vector<int>& indexes,
+                               std::vector<double>& masses,
+                               std::vector<double>& charges,
+                               std::vector<Vector>& positions,
+                         const std::vector<Vector>& forces,
+                               Tensor& box,
+                         const Tensor& virial);
+    ~Request();
+  };
+
+
+private:
+  std::vector<Request*> requestset;
+  typedef std::vector<Request*>::iterator requestsetIterator;
+  std::vector<int>    gatindex;
+
+  class DomainDecomposition:
+    public PlumedCommunicator
+  {
+  public:
+    bool on;
+    std::vector<int>    g2l;
+
+    std::vector<PlumedCommunicator::Request> mpi_request_positions;
+    std::vector<PlumedCommunicator::Request> mpi_request_index;
+    
+    std::vector<double> positionsToBeSent;
+    std::vector<double> positionsToBeReceived;
+    std::vector<int>    indexToBeSent;
+    std::vector<int>    indexToBeReceived;
+    operator bool(){return on;};
+    DomainDecomposition():
+      on(false)
+      {};
+    void enable(PlumedCommunicator& c);
+  };
+
+  DomainDecomposition dd;
+
+public:
+  Atoms(PlumedMain&plumed);
+  ~Atoms();
+  void init();
+  void setNatoms(int);
+  const int & getNatoms()const;
+  void updateForces();
+  void setDomainDecomposition(PlumedCommunicator&);
+  void setAtomsGatindex(int*);
+  void setAtomsContiguous(int);
+  void setAtomsNlocal(int);
+
+  void setBox(void*);
+  void setPositions(void*);
+  void setPositions(void*,int);
+  void setMasses(void*);
+  void setCharges(void*);
+  void setVirial(void*);
+  void setForces(void*);
+  void setForces(void*,int);
+  void setEnergy(void*);
+
+  void share();
+  void wait();
+  void MD2double(const void*m,double&d)const;
+  void double2MD(const double&d,void*m)const;
+  void setRealPrecision(int);
+  int  getRealPrecision()const;
+  void createFullList(int*);
+  void getFullList(int**);
+  void clearFullList();
+};
+
+inline
+const int & Atoms::getNatoms()const{
+  return natoms;
+}
+
+inline
+void Atoms::setDomainDecomposition(PlumedCommunicator& comm){
+  dd.enable(comm);
+}
+
+inline
+void Atoms::Request::activate(){
+  active=true;
+}
+
+inline
+void Atoms::Request::deactivate(){
+  active=false;
+}
+
+inline
+bool Atoms::Request::isActive(){
+  return active;
+}
+
+}
+#endif
diff --git a/src/Bias.cpp b/src/Bias.cpp
new file mode 100644
index 000000000..01631632a
--- /dev/null
+++ b/src/Bias.cpp
@@ -0,0 +1,24 @@
+#include "Bias.h"
+#include "Colvar.h"
+#include <cassert>
+
+using namespace PLMD;
+using namespace std;
+
+Bias::Bias(const ActionOptions&ao):
+Action(ao),
+ActionPilot(ao),
+ActionWithValue(ao),
+ActionWithArguments(ao),
+outputForces(getArguments().size(),0.0)
+{
+}
+
+
+void Bias::apply(){
+  if(onStep()) for(unsigned i=0;i<getNumberOfArguments();++i){
+    getArguments()[i]->addForce(getStride()*outputForces[i]);
+  }
+}
+
+
diff --git a/src/Bias.h b/src/Bias.h
new file mode 100644
index 000000000..3b1ef3902
--- /dev/null
+++ b/src/Bias.h
@@ -0,0 +1,40 @@
+#ifndef __PLUMED_Bias_h
+#define __PLUMED_Bias_h
+
+#include "ActionPilot.h"
+#include "ActionWithValue.h"
+#include "ActionWithArguments.h"
+
+#define PLUMED_BIAS_INIT(ao) Action(ao),Bias(ao)
+
+namespace PLMD{
+
+/// Action defining a bias which can act on other Action's
+class Bias :
+  public ActionPilot,
+  public ActionWithValue,
+  public ActionWithArguments
+{
+  std::vector<double> outputForces;
+protected:
+  void resetOutputForces();
+  void setOutputForces(int i,double g);
+public:
+  Bias(const ActionOptions&ao);
+  void apply();
+};
+
+inline
+void Bias::setOutputForces(int i,double f){
+  outputForces[i]=f;
+}
+
+inline
+void Bias::resetOutputForces(){
+  for(unsigned i=0;i<outputForces.size();++i) outputForces[i]=0.0;
+}
+
+}
+
+#endif
+
diff --git a/src/BiasMovingRestraint.cpp b/src/BiasMovingRestraint.cpp
new file mode 100644
index 000000000..0347b1f31
--- /dev/null
+++ b/src/BiasMovingRestraint.cpp
@@ -0,0 +1,116 @@
+#include "Bias.h"
+#include "ActionRegister.h"
+
+#include <cassert>
+
+using namespace std;
+
+
+namespace PLMD{
+
+//+PLUMEDOC BIAS MOVINGRESTRAINT
+/**
+Moving restraint
+
+Similar to \ref RESTRAINT but can be moved during the simulation
+   
+\par Syntax
+
+Example
+\verbatim
+MOVINGRESTRAINT
+\endverbatim
+
+If you use this variable, please cite the following work ... ... ...
+
+*/
+//+ENDPLUMEDOC
+
+
+class BiasMovingRestraint : public Bias{
+  std::vector<std::vector<double> > at;
+  std::vector<std::vector<double> > kappa;
+  std::vector<int> step;
+public:
+  BiasMovingRestraint(const ActionOptions&);
+  void calculate();
+};
+
+PLUMED_REGISTER_ACTION(BiasMovingRestraint,"MOVINGRESTRAINT")
+
+BiasMovingRestraint::BiasMovingRestraint(const ActionOptions&ao):
+PLUMED_BIAS_INIT(ao)
+{
+  for(int i=0;;i++){
+    int ss=-1;
+    std::vector<double> kk,aa;
+    string s;
+    Tools::convert(i,s);
+    parse("STEP"+s,ss);
+    if(ss<0) break;
+    for(unsigned j=0;j<step.size();j++) assert(ss>step[j]);
+    step.push_back(ss);
+    parseVector("KAPPA"+s,kk);
+    if(kk.size()==0 && i>0) kk=kappa[i-1];
+    assert(kk.size()==getNumberOfArguments());
+    kappa.push_back(kk);
+    parseVector("AT"+s,aa);
+    if(at.size()==0 && i>0) aa=at[i-1];
+    assert(aa.size()==getNumberOfArguments());
+    at.push_back(aa);
+  }
+  checkRead();
+
+  for(unsigned i=0;i<step.size();i++){
+    log.printf("  step%d %d\n",i,step[i]);
+    log.printf("  at");
+    for(unsigned j=0;j<at[i].size();j++) log.printf(" %f",at[i][j]);
+    log.printf("\n");
+    log.printf("  with force constant");
+    for(unsigned j=0;j<kappa[i].size();j++) log.printf(" %f",kappa[i][j]);
+    log.printf("\n");
+  };
+
+  addValue("");
+  addValue("Energy");
+  addValue("Force2");
+  addValue("Work");
+}
+
+
+void BiasMovingRestraint::calculate(){
+  double ene=0.0;
+  double totf2=0.0;
+  unsigned narg=getNumberOfArguments();
+  int now=getStep();
+  std::vector<double> kk(narg),aa(narg);
+  if(now<=step[0]){
+    kk=kappa[0];
+    aa=at[0];
+  } else if(now>=step[step.size()-1]){
+    kk=kappa[step.size()-1];
+    aa=at[step.size()-1];
+  } else {
+    unsigned i=0;
+    for(i=1;i<step.size();i++) if(now<step[i]) break;
+    double c2=(now-step[i-1])/double(step[i]-step[i-1]);
+    double c1=1.0-c2;
+    for(unsigned j=0;j<narg;j++) kk[j]=(c1*kappa[i-1][j]+c2*kappa[i][j]);
+    for(unsigned j=0;j<narg;j++) aa[j]=(c1*at[i-1][j]+c2*at[i][j]);
+  }
+  for(unsigned i=0;i<narg;++i){
+    const double cv=(getArgument(i)-aa[i]);
+    const double k=kk[i];
+    const double f=-k*cv;
+    ene+=0.5*k*cv*cv;
+    setOutputForces(i,f);
+    totf2+=f*f;
+  };
+  getValue("")->setValue(ene);
+  getValue("Energy")->setValue(ene);
+  getValue("Force2")->setValue(totf2);
+}
+
+}
+
+
diff --git a/src/BiasRestraint.cpp b/src/BiasRestraint.cpp
new file mode 100644
index 000000000..0483b06c8
--- /dev/null
+++ b/src/BiasRestraint.cpp
@@ -0,0 +1,85 @@
+#include "Bias.h"
+#include "ActionRegister.h"
+
+#include <cassert>
+
+using namespace std;
+
+
+namespace PLMD{
+
+//+PLUMEDOC BIAS RESTRAINT
+/**
+Harmonic restraint
+
+This bias imposes an harmonic restraint on one or more
+collective variables (or function). Besides the
+usual STRIDE, ARG and LABEL, it accepts the following
+keywords:
+- KAPPA an array of force constants (in PLUMED units)
+- AT an array defining the center of the restraint
+Example
+\verbatim
+DISTANCE ATOMS=5,10 LABEL=d1
+DISTANCE ATOMS=6,11 LABEL=d2
+DISTANCE ATOMS=7,12 LABEL=d3
+RESTRAINT ARG=d1,d2,d3 KAPPA=0.1,0.1,0.5 AT=5.0,6.0,7.0
+\endverbatim
+
+*/
+//+ENDPLUMEDOC
+
+class BiasRestraint : public Bias{
+  std::vector<double> at;
+  std::vector<double> kappa;
+public:
+  BiasRestraint(const ActionOptions&);
+  void calculate();
+};
+
+PLUMED_REGISTER_ACTION(BiasRestraint,"RESTRAINT")
+
+BiasRestraint::BiasRestraint(const ActionOptions&ao):
+PLUMED_BIAS_INIT(ao),
+at(0),
+kappa(getNumberOfArguments(),0.0)
+{
+  parseVector("KAPPA",kappa);
+  assert(kappa.size()==getNumberOfArguments());
+  parseVector("AT",at);
+  assert(at.size()==getNumberOfArguments());
+  checkRead();
+
+  log.printf("  at");
+  for(unsigned i=0;i<at.size();i++) log.printf(" %f",at[i]);
+  log.printf("\n");
+  log.printf("  with force constant");
+  for(unsigned i=0;i<kappa.size();i++) log.printf(" %f",kappa[i]);
+  log.printf("\n");
+
+  addValue("");
+  addValue("Energy");
+  addValue("Force2");
+}
+
+
+void BiasRestraint::calculate(){
+  double ene=0.0;
+  double totf2=0.0;
+  for(unsigned i=0;i<getNumberOfArguments();++i){
+    const double cv=(getArgument(i)-at[i]);
+    const double k=kappa[i];
+    const double f=-k*cv;
+    ene+=0.5*k*cv*cv;
+    setOutputForces(i,f);
+    totf2+=f*f;
+  };
+  setValue(ene);
+  Value* value;
+  value=getValue("Energy"); setValue(value,ene);
+  value=getValue("Force2");  setValue(value,totf2);
+}
+
+}
+
+
diff --git a/src/Colvar.cpp b/src/Colvar.cpp
new file mode 100644
index 000000000..09d42ad50
--- /dev/null
+++ b/src/Colvar.cpp
@@ -0,0 +1,61 @@
+#include "Colvar.h"
+#include "PlumedMain.h"
+#include <vector>
+#include <string>
+#include <cassert>
+
+using namespace std;
+using namespace PLMD;
+
+Colvar::Colvar(const ActionOptions&ao):
+Action(ao),
+ActionAtomistic(ao),
+ActionWithValue(ao),
+isEnergy(false)
+{
+}
+
+
+void Colvar::requestAtoms(vector<int> & a){
+  ActionAtomistic::requestAtoms(a);
+  setNumberOfParameters(3*a.size()+9);
+}
+
+void Colvar::apply(){
+  vector<Vector>&   f(modifyForces());
+  Tensor&           v(modifyVirial());
+
+  for(unsigned i=0;i<f.size();i++){
+    f[i][0]=0.0;
+    f[i][1]=0.0;
+    f[i][2]=0.0;
+  }
+  v.clear();
+
+  if(!isEnergy)
+  for(int i=0;i<getNumberOfValues();++i){
+    const vector<double> & derivatives(getValue(i)->getDerivatives());
+    const unsigned nat=f.size();
+    const double force=getValue(i)->getForce();
+    for(unsigned j=0;j<nat;++j){
+      f[j][0]+=force*derivatives[3*j+0];
+      f[j][1]+=force*derivatives[3*j+1];
+      f[j][2]+=force*derivatives[3*j+2];
+    }
+    v(0,0)+=force*derivatives[3*nat+0];
+    v(0,1)+=force*derivatives[3*nat+1];
+    v(0,2)+=force*derivatives[3*nat+2];
+    v(1,0)+=force*derivatives[3*nat+3];
+    v(1,1)+=force*derivatives[3*nat+4];
+    v(1,2)+=force*derivatives[3*nat+5];
+    v(2,0)+=force*derivatives[3*nat+6];
+    v(2,1)+=force*derivatives[3*nat+7];
+    v(2,2)+=force*derivatives[3*nat+8];
+  }
+  if(isEnergy) plumed.getAtoms().forceEnergy(getValue(0)->getForce());
+}
+
+
+
+
+
diff --git a/src/Colvar.h b/src/Colvar.h
new file mode 100644
index 000000000..8bb1e2a4f
--- /dev/null
+++ b/src/Colvar.h
@@ -0,0 +1,86 @@
+#ifndef __PLUMED_Colvar_h
+#define __PLUMED_Colvar_h
+#include <vector>
+#include <string>
+#include "ActionAtomistic.h"
+#include "ActionWithValue.h"
+
+#define PLUMED_COLVAR_INIT(ao) Action(ao),Colvar(ao)
+
+namespace PLMD {
+
+/// Action representing a collective variable
+class Colvar :
+  public ActionAtomistic,
+  public ActionWithValue
+  {
+protected:
+  bool isEnergy;
+  void requestAtoms(std::vector<int> & a);
+// These are so as to map to 3d vectors for atoms:
+  void setAtomsDerivatives(int,const Vector&);
+  void setAtomsDerivatives(Value*,int,const Vector&);
+  void setBoxDerivatives(const Tensor&);
+  void setBoxDerivatives(Value*,const Tensor&);
+  void setColvarValue(double);
+  void setColvarValue(Value*,double);
+public:
+  const Tensor                & getBoxDerivatives()const;
+  const double                & getForce()const;
+  void apply();
+
+
+public:
+
+
+  bool checkIsEnergy(){return isEnergy;};
+  Colvar(const ActionOptions&);
+  ~Colvar(){};
+
+};
+
+
+inline
+void Colvar::setAtomsDerivatives(int i,const Vector&d){
+  getValue(0)->setDerivatives(3*i+0,d[0]);
+  getValue(0)->setDerivatives(3*i+1,d[1]);
+  getValue(0)->setDerivatives(3*i+2,d[2]);
+}
+
+inline
+void Colvar::setAtomsDerivatives(Value*v,int i,const Vector&d){
+  v->setDerivatives(3*i+0,d[0]);
+  v->setDerivatives(3*i+1,d[1]);
+  v->setDerivatives(3*i+2,d[2]);
+}
+
+
+inline
+void Colvar::setBoxDerivatives(const Tensor&d){
+  getValue(0)->setDerivatives(3*getNatoms()+0,d(0,0));
+  getValue(0)->setDerivatives(3*getNatoms()+1,d(0,1));
+  getValue(0)->setDerivatives(3*getNatoms()+2,d(0,2));
+  getValue(0)->setDerivatives(3*getNatoms()+3,d(1,0));
+  getValue(0)->setDerivatives(3*getNatoms()+4,d(1,1));
+  getValue(0)->setDerivatives(3*getNatoms()+5,d(1,2));
+  getValue(0)->setDerivatives(3*getNatoms()+6,d(2,0));
+  getValue(0)->setDerivatives(3*getNatoms()+7,d(2,1));
+  getValue(0)->setDerivatives(3*getNatoms()+8,d(2,2));
+}
+
+inline
+void Colvar::setBoxDerivatives(Value* v,const Tensor&d){
+  v->setDerivatives(3*getNatoms()+0,d(0,0));
+  v->setDerivatives(3*getNatoms()+1,d(0,1));
+  v->setDerivatives(3*getNatoms()+2,d(0,2));
+  v->setDerivatives(3*getNatoms()+3,d(1,0));
+  v->setDerivatives(3*getNatoms()+4,d(1,1));
+  v->setDerivatives(3*getNatoms()+5,d(1,2));
+  v->setDerivatives(3*getNatoms()+6,d(2,0));
+  v->setDerivatives(3*getNatoms()+7,d(2,1));
+  v->setDerivatives(3*getNatoms()+8,d(2,2));
+}
+
+}
+
+#endif
diff --git a/src/ColvarDistance.cpp b/src/ColvarDistance.cpp
new file mode 100644
index 000000000..870574081
--- /dev/null
+++ b/src/ColvarDistance.cpp
@@ -0,0 +1,119 @@
+#include "Colvar.h"
+#include "ActionRegister.h"
+
+#include <string>
+#include <cmath>
+#include <cassert>
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC COLVAR DISTANCE
+/**
+Calculate the distance between two atoms.
+
+\par Syntax
+DISTANCE ATOMS=x,y [COMPONENTS] [PBC]
+If the COMPONENTS flag is present, the three components of the distance
+can be accessed respectively as .x .y and .z.
+If the PBC flag is present, distance is computed using periodic boundary conditions.
+
+\par Example
+The following input is printing the distance between atoms 3 and 5,
+the distance between atoms 2 and 4 and its x component.
+\verbatim
+DISTANCE ATOMS=3,5             LABEL=d1
+DISTANCE ATOMS=2,4 COMPONENTS  LABEL=d2
+PRINT ARG=d1,d2,d2.x
+\endverbatim
+
+*/
+//+ENDPLUMEDOC
+   
+class ColvarDistance : public Colvar {
+  bool components;
+  bool pbc;
+
+public:
+  ColvarDistance(const ActionOptions&);
+// active methods:
+  virtual void calculate();
+};
+
+PLUMED_REGISTER_ACTION(ColvarDistance,"DISTANCE")
+
+ColvarDistance::ColvarDistance(const ActionOptions&ao):
+PLUMED_COLVAR_INIT(ao),
+components(false),
+pbc(true)
+{
+  vector<int> atoms;
+  parseVector("ATOMS",atoms);
+  assert(atoms.size()==2);
+  parseFlag("COMPONENTS",components);
+  bool nopbc=!pbc;
+  parseFlag("NOPBC",nopbc);
+  pbc=!nopbc;
+  parseFlag("PBC",pbc);
+  checkRead();
+
+  log.printf("  between atoms %d %d\n",atoms[0],atoms[1]);
+  if(pbc) log.printf("  using periodic boundary conditions\n");
+  else    log.printf("  without periodic boundary conditions\n");
+
+  addValueWithDerivatives("");
+
+  if(components){
+    addValueWithDerivatives("x");
+    addValueWithDerivatives("y");
+    addValueWithDerivatives("z");
+  }
+
+  requestAtoms(atoms);
+}
+
+
+// calculator
+void ColvarDistance::calculate(){
+
+  Vector distance;
+  if(pbc){
+    distance=pbcDistance(getPositions(0),getPositions(1));
+  } else {
+    distance=delta(getPositions(0),getPositions(1));
+  }
+  const double value=distance.modulo();
+  const double invvalue=1.0/value;
+
+  setAtomsDerivatives(0,-invvalue*distance);
+  setAtomsDerivatives(1,invvalue*distance);
+  setBoxDerivatives  (-invvalue*Tensor(distance,distance));
+  setValue           (value);
+
+  if(components){
+    Value* valuex=getValue("x");
+    Value* valuey=getValue("y");
+    Value* valuez=getValue("z");
+
+    setAtomsDerivatives (valuex,0,Vector(-1,0,0));
+    setAtomsDerivatives (valuex,1,Vector(+1,0,0));
+    setBoxDerivatives   (valuex,Tensor(distance,Vector(-1,0,0)));
+    setValue            (valuex,distance[0]);
+
+    setAtomsDerivatives (valuey,0,Vector(0,-1,0));
+    setAtomsDerivatives (valuey,1,Vector(0,+1,0));
+    setBoxDerivatives   (valuey,Tensor(distance,Vector(0,-1,0)));
+    setValue            (valuey,distance[1]);
+
+    setAtomsDerivatives (valuez,0,Vector(0,0,-1));
+    setAtomsDerivatives (valuez,1,Vector(0,0,+1));
+    setBoxDerivatives   (valuez,Tensor(distance,Vector(0,0,-1)));
+    setValue            (valuez,distance[2]);
+  };
+}
+
+}
+
+
+
diff --git a/src/ColvarEnergy.cpp b/src/ColvarEnergy.cpp
new file mode 100644
index 000000000..0c91c0d0c
--- /dev/null
+++ b/src/ColvarEnergy.cpp
@@ -0,0 +1,58 @@
+#include "Colvar.h"
+#include "ActionRegister.h"
+#include "PlumedMain.h"
+
+#include <string>
+#include <cmath>
+#include <cassert>
+
+namespace PLMD{
+
+//+PLUMEDOC COLVAR ENERGY
+/**
+Potential energy of the system. Example:
+\verbatim
+ENERGY LABEL=energy
+\endverbatim
+
+\bug It does not work with variable cell simulations. Should include also PV contribution.
+
+*/
+//+ENDPLUMEDOC
+
+
+class ColvarEnergy : public Colvar {
+  bool components;
+
+public:
+  ColvarEnergy(const ActionOptions&);
+// active methods:
+  virtual void calculate();
+};
+
+
+using namespace std;
+
+
+PLUMED_REGISTER_ACTION(ColvarEnergy,"ENERGY")
+
+ColvarEnergy::ColvarEnergy(const ActionOptions&ao):
+PLUMED_COLVAR_INIT(ao),
+components(false)
+{
+  std::vector<int> atoms;
+  requestAtoms(atoms);
+  isEnergy=true;
+  addValueWithDerivatives("");
+}
+
+
+// calculator
+void ColvarEnergy::calculate(){
+  setValue(plumed.getAtoms().getEnergy());
+}
+
+}
+
+
+
diff --git a/src/ColvarTemplate.cpp b/src/ColvarTemplate.cpp
new file mode 100644
index 000000000..6b4cc868a
--- /dev/null
+++ b/src/ColvarTemplate.cpp
@@ -0,0 +1,118 @@
+#include "Colvar.h"
+#include "ActionRegister.h"
+
+#include <string>
+#include <cmath>
+#include <cassert>
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC COLVAR TEMPLATE
+/**
+Calculate distance between two atoms
+   
+\author Giovanni Bussi
+\date 17-12-2010
+
+\par Syntax
+
+TEMPLATE ATOMS=x,y [COMPONENTS] [PBC]
+
+Example
+\verbatim
+TEMPLATE ATOMS=3,5 
+\endverbatim
+
+If you use this variable, please cite the following work ... ... ...
+
+*/
+//+ENDPLUMEDOC
+   
+class ColvarTemplate : public Colvar {
+  bool components;
+  bool pbc;
+
+public:
+  ColvarTemplate(const ActionOptions&);
+// active methods:
+  virtual void calculate();
+};
+
+PLUMED_REGISTER_ACTION(ColvarTemplate,"TEMPLATE")
+
+ColvarTemplate::ColvarTemplate(const ActionOptions&ao):
+PLUMED_COLVAR_INIT(ao),
+components(false),
+pbc(true)
+{
+  vector<int> atoms;
+  parseVector("ATOMS",atoms);
+  assert(atoms.size()==2);
+  parseFlag("COMPONENTS",components);
+  bool nopbc=!pbc;
+  parseFlag("NOPBC",nopbc);
+  pbc=!nopbc;
+  parseFlag("PBC",pbc);
+  checkRead();
+
+  log.printf("  between atoms %d %d\n",atoms[0],atoms[1]);
+  if(pbc) log.printf("  using periodic boundary conditions\n");
+  else    log.printf("  without periodic boundary conditions\n");
+
+  addValueWithDerivatives("");
+
+  if(components){
+    addValueWithDerivatives("x");
+    addValueWithDerivatives("y");
+    addValueWithDerivatives("z");
+  }
+
+  requestAtoms(atoms);
+}
+
+
+// calculator
+void ColvarTemplate::calculate(){
+
+  Vector distance;
+  if(pbc){
+    distance=pbcDistance(getPositions(0),getPositions(1));
+  } else {
+    distance=delta(getPositions(0),getPositions(1));
+  }
+  const double value=distance.modulo();
+  const double invvalue=1.0/value;
+
+  setAtomsDerivatives(0,-invvalue*distance);
+  setAtomsDerivatives(1,invvalue*distance);
+  setBoxDerivatives  (-invvalue*Tensor(distance,distance));
+  setValue           (value);
+
+  if(components){
+    Value* valuex=getValue("x");
+    Value* valuey=getValue("y");
+    Value* valuez=getValue("z");
+
+    setAtomsDerivatives (valuex,0,Vector(-1,0,0));
+    setAtomsDerivatives (valuex,1,Vector(+1,0,0));
+    setBoxDerivatives   (valuex,Tensor(distance,Vector(-1,0,0)));
+    setValue            (valuex,distance[0]);
+
+    setAtomsDerivatives (valuey,0,Vector(0,-1,0));
+    setAtomsDerivatives (valuey,1,Vector(0,+1,0));
+    setBoxDerivatives   (valuey,Tensor(distance,Vector(0,-1,0)));
+    setValue            (valuey,distance[1]);
+
+    setAtomsDerivatives (valuez,0,Vector(0,0,-1));
+    setAtomsDerivatives (valuez,1,Vector(0,0,+1));
+    setBoxDerivatives   (valuez,Tensor(distance,Vector(0,0,-1)));
+    setValue            (valuez,distance[2]);
+  };
+}
+
+}
+
+
+
diff --git a/src/ColvarVolume.cpp b/src/ColvarVolume.cpp
new file mode 100644
index 000000000..d702eed0c
--- /dev/null
+++ b/src/ColvarVolume.cpp
@@ -0,0 +1,62 @@
+#include "Colvar.h"
+#include "ActionRegister.h"
+
+#include <string>
+#include <cmath>
+#include <cassert>
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC COLVAR VOLUME
+/**
+Volume of the simulation box. Example:
+\verbatim
+VOLUME LABEL=volume
+\endverbatim
+*/
+//+ENDPLUMEDOC
+
+
+class ColvarVolume : public Colvar {
+  bool components;
+
+public:
+  ColvarVolume(const ActionOptions&);
+// active methods:
+  virtual void calculate();
+};
+
+PLUMED_REGISTER_ACTION(ColvarVolume,"VOLUME")
+
+ColvarVolume::ColvarVolume(const ActionOptions&ao):
+PLUMED_COLVAR_INIT(ao),
+components(false)
+{
+  std::vector<int> atoms;
+  parseFlag("COMPONENTS",components);
+  checkRead();
+
+  if(components){
+// todo
+  }
+  addValueWithDerivatives("");
+  requestAtoms(atoms);
+}
+
+
+// calculator
+void ColvarVolume::calculate(){
+  if(components){
+// todo
+  };
+
+  setBoxDerivatives(-1.0*Tensor::identity());
+  setValue         (getBox().determinant());
+}
+
+}
+
+
+
diff --git a/src/Debug.cpp b/src/Debug.cpp
new file mode 100644
index 000000000..d8c0c5b40
--- /dev/null
+++ b/src/Debug.cpp
@@ -0,0 +1,73 @@
+#include "ActionRegister.h"
+#include "ActionPilot.h"
+#include "PlumedMain.h"
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC GENERIC DEBUG
+/**
+  Action to set some debug flags
+
+  This action can be used to enable debug options.
+  It accepts a STRIDE option as the \ref Bias actions,
+  which is used for debug options which are repeated
+  along the simulation.
+  It accepts the following flags:
+- logActivity: writes (every STRIDE steps) the list
+  of which actions are active and which ar inactive in the
+  plumed log, in term of a sequence of + (active) and - (inactive)
+- NOVIRIAL: switches off (for the entire simulation) the contribution
+  of virial computed in plumed
+*/
+//+ENDPLUMEDOC
+class Debug:
+  public ActionPilot
+{
+  bool logActivity;
+  bool novirial;
+public:
+  Debug(const ActionOptions&ao);
+  void calculate(){};
+  void apply();
+};
+
+PLUMED_REGISTER_ACTION(Debug,"DEBUG")
+
+Debug::Debug(const ActionOptions&ao):
+Action(ao),
+ActionPilot(ao),
+logActivity(false),
+novirial(false){
+  parseFlag("logActivity",logActivity);
+  if(logActivity) log.printf("  logging activity\n");
+  parseFlag("NOVIRIAL",novirial);
+  if(novirial) log.printf("  Switching off virial contribution\n");
+  if(novirial) plumed.novirial=true;
+  checkRead();
+}
+
+void Debug::apply(){
+  if(logActivity){
+    const ActionSet&actionSet(plumed.getActionSet());
+    int a=0;
+    for(ActionSet::const_iterator p=actionSet.begin();p!=actionSet.end();++p){
+      if(dynamic_cast<Debug*>(*p))continue;
+      if((*p)->isActive()) a++;
+    };
+    if(a>0){
+      log.printf("activity at step %i: ",getStep());
+      for(ActionSet::const_iterator p=actionSet.begin();p!=actionSet.end();++p){
+        if(dynamic_cast<Debug*>(*p))continue;
+        if((*p)->isActive()) log.printf("+");
+        else                 log.printf("-");
+      };
+      log.printf("\n");
+    };
+  };
+
+}
+
+}
+
diff --git a/src/Flush.cpp b/src/Flush.cpp
new file mode 100644
index 000000000..60c31c09f
--- /dev/null
+++ b/src/Flush.cpp
@@ -0,0 +1,45 @@
+#include "ActionRegister.h"
+#include "ActionPilot.h"
+#include "PlumedMain.h"
+
+namespace PLMD{
+
+using namespace std;
+
+//+PLUMEDOC GENERIC FLUSH
+/**
+Periodically flush open files.
+
+This Action is used to flush the open files periodically.
+Similarly the other Actions, it understands the keyword STRIDE,
+which is the number of timesteps between flushings
+\verbatim
+# This is flushing all output files every 100 steps
+FLUSH STRIDE=100
+\endverbatim
+*/
+//+ENDPLUMEDOC
+
+class Flush:
+  public ActionPilot
+{
+public:
+  Flush(const ActionOptions&ao):
+    Action(ao),
+    ActionPilot(ao)
+  {
+    checkRead();
+  }
+  void calculate(){};
+  void apply(){
+    const ActionSet & actionSet(plumed.getActionSet());
+    for(ActionSet::const_iterator p=actionSet.begin();p!=actionSet.end();++p)
+    (*p)->flush();
+  }
+};
+
+PLUMED_REGISTER_ACTION(Flush,"FLUSH")
+
+}
+
+
diff --git a/src/Function.cpp b/src/Function.cpp
new file mode 100644
index 000000000..0b4184717
--- /dev/null
+++ b/src/Function.cpp
@@ -0,0 +1,31 @@
+#include "Function.h"
+#include "Colvar.h"
+#include <cassert>
+
+using namespace PLMD;
+using namespace std;
+
+Function::Function(const ActionOptions&ao):
+Action(ao),
+ActionWithValue(ao),
+ActionWithArguments(ao)
+{
+    setNumberOfParameters(getNumberOfArguments());
+}
+
+void Function::apply(){
+  vector<double>   f(getNumberOfArguments(),0.0);
+
+  for(int i=0;i<getNumberOfValues();++i){
+    const vector<double> & derivatives(getValue(i)->getDerivatives());
+    for(unsigned j=0;j<derivatives.size();j++){
+      f[j]+=getForce(i)*derivatives[j];
+    }
+  }
+  for(unsigned i=0;i<getNumberOfArguments();++i){
+    getArguments()[i]->addForce(f[i]);
+  }
+}
+
+
+
diff --git a/src/Function.h b/src/Function.h
new file mode 100644
index 000000000..c440c8357
--- /dev/null
+++ b/src/Function.h
@@ -0,0 +1,35 @@
+#ifndef __PLUMED_Function_h
+#define __PLUMED_Function_h
+
+#include "ActionWithValue.h"
+#include "ActionWithArguments.h"
+
+namespace PLMD{
+
+/// Action representing a function of other actions
+class Function:
+  public ActionWithValue,
+  public ActionWithArguments
+{
+public:
+  Function(const ActionOptions&);
+  virtual ~Function(){};
+  void apply();
+  void setDerivatives(int,double);
+  void setDerivatives(Value*,int,double);
+};
+
+inline
+void Function::setDerivatives(int i,double d){
+  getValue(0)->setDerivatives(i,d);
+}
+
+inline
+void Function::setDerivatives(Value*v,int i,double d){
+  v->setDerivatives(i,d);
+}
+
+}
+
+#endif
+
diff --git a/src/FunctionCombine.cpp b/src/FunctionCombine.cpp
new file mode 100644
index 000000000..0d2c562cd
--- /dev/null
+++ b/src/FunctionCombine.cpp
@@ -0,0 +1,67 @@
+#include "ActionRegister.h"
+#include "Function.h"
+
+#include <cmath>
+#include <cassert>
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC FUNCTION COMBINE
+/**
+Combinatin of more CVs
+   
+\par Syntax
+
+
+*/
+//+ENDPLUMEDOC
+
+
+class FunctionCombine :
+  public Function
+{
+  std::vector<double> coefficients;
+  std::vector<double> powers;
+public:
+  FunctionCombine(const ActionOptions&);
+  void calculate();
+};
+
+
+PLUMED_REGISTER_ACTION(FunctionCombine,"COMBINE")
+
+FunctionCombine::FunctionCombine(const ActionOptions&ao):
+Action(ao),
+Function(ao),
+coefficients(getNumberOfArguments(),1.0),
+powers(getNumberOfArguments(),1.0)
+{
+  parseVector("COEFFICIENTS",coefficients);
+  assert(coefficients.size()==static_cast<unsigned>(getNumberOfArguments()));
+  parseVector("POWERS",powers);
+  assert(powers.size()==static_cast<unsigned>(getNumberOfArguments()));
+  checkRead();
+
+  addValueWithDerivatives("");
+  log.printf("  with coefficients:");
+  for(unsigned i=0;i<coefficients.size();i++) log.printf(" %f",coefficients[i]);
+  log.printf("\n");
+  log.printf("  and powers:");
+  for(unsigned i=0;i<powers.size();i++) log.printf(" %f",powers[i]);
+  log.printf("\n");
+}
+
+void FunctionCombine::calculate(){
+  double combine=0.0;
+  for(unsigned i=0;i<coefficients.size();++i){
+    combine+=coefficients[i]*pow(getArgument(i),powers[i]);
+    setDerivatives(i,coefficients[i]*powers[i]*pow(getArgument(i),powers[i]-1.0));
+  };
+  setValue(combine);
+}
+
+}
+
+
diff --git a/src/FunctionMatheval.cpp b/src/FunctionMatheval.cpp
new file mode 100644
index 000000000..803827775
--- /dev/null
+++ b/src/FunctionMatheval.cpp
@@ -0,0 +1,111 @@
+#ifdef __PLUMED_HAS_MATHEVAL
+#include "ActionRegister.h"
+#include "Function.h"
+#include <cassert>
+#include <matheval.h>
+
+using namespace std;
+
+namespace PLMD{
+
+
+//+PLUMEDOC FUNCTION MATHEVAL
+/**
+Combination of more CVs using a matheval expression
+   
+* VAR tells the names of the variables used in the FUNC string
+  If absent, the names are set to x,y,z. With more than 3 arguments explicit
+  names are compulsory
+* FUNC gives the function definition in matheval syntax
+
+\verbatim
+MATHEVAL LABEL=c1 ARG=distance1,distance2 VAR=a,b FUNC=(a+b)/10.0
+MATHEVAL LABEL=c2 ARG=distance1,distance2         FUNC=(x-y)/sin(y)
+\endverbatim
+
+
+*/
+//+ENDPLUMEDOC
+
+
+class FunctionMatheval :
+  public Function
+{
+  void* evaluator;
+  vector<void*> evaluator_deriv;
+  vector<string> var;
+  string func;
+  vector<double> values;
+  vector<char*> names;
+public:
+  FunctionMatheval(const ActionOptions&);
+  ~FunctionMatheval();
+  void calculate();
+};
+
+
+PLUMED_REGISTER_ACTION(FunctionMatheval,"MATHEVAL")
+
+FunctionMatheval::FunctionMatheval(const ActionOptions&ao):
+Action(ao),
+Function(ao),
+evaluator_deriv(getNumberOfArguments()),
+values(getNumberOfArguments()),
+names(getNumberOfArguments())
+{
+  parseVector("VAR",var);
+  if(var.size()==0){
+    var.resize(getNumberOfArguments());
+    assert(getNumberOfArguments()<=3);
+    if(var.size()>0) var[0]="x";
+    if(var.size()>1) var[1]="y";
+    if(var.size()>2) var[2]="z";
+  }
+  assert(var.size()==getNumberOfArguments());
+  parse("FUNC",func);
+  checkRead();
+
+  evaluator=evaluator_create(const_cast<char*>(func.c_str()));
+
+  char **check_names;
+  int    check_count;
+  evaluator_get_variables(evaluator,&check_names,&check_count);
+  assert(check_count==int(getNumberOfArguments()));
+  for(unsigned i=0;i<getNumberOfArguments();i++){
+    bool found=false;
+    for(unsigned j=0;j<getNumberOfArguments();j++){
+      if(var[i]==check_names[j])found=true;
+    }
+    assert(found);
+  }
+
+  for(unsigned i=0;i<getNumberOfArguments();i++)
+    evaluator_deriv[i]=evaluator_derivative(evaluator,const_cast<char*>(var[i].c_str()));
+
+  addValueWithDerivatives("");
+
+  log.printf("  with function : %s\n",func.c_str());
+  log.printf("  with variables :");
+  for(unsigned i=0;i<var.size();i++) log.printf(" %s",var[i].c_str());
+  log.printf("\n");
+}
+
+void FunctionMatheval::calculate(){
+  for(unsigned i=0;i<getNumberOfArguments();i++) values[i]=getArgument(i);
+  for(unsigned i=0;i<getNumberOfArguments();i++) names[i]=const_cast<char*>(var[i].c_str());
+  setValue(evaluator_evaluate(evaluator,names.size(),&names[0],&values[0]));
+
+  for(unsigned i=0;i<getNumberOfArguments();i++){
+    setDerivatives(i,evaluator_evaluate(evaluator_deriv[i],names.size(),&names[0],&values[0]));
+  }
+}
+
+FunctionMatheval::~FunctionMatheval(){
+  evaluator_destroy(evaluator);
+  for(unsigned i=0;i<evaluator_deriv.size();i++)evaluator_destroy(evaluator_deriv[i]);
+}
+
+}
+
+#endif
+
diff --git a/src/IMD.cpp b/src/IMD.cpp
new file mode 100644
index 000000000..aae0cc1e6
--- /dev/null
+++ b/src/IMD.cpp
@@ -0,0 +1,252 @@
+#ifdef __PLUMED_HAS_IMD
+#include <unistd.h>
+
+#include "ActionRegister.h"
+#include "ActionAtomistic.h"
+#include "ActionPilot.h"
+#include "PlumedMain.h"
+
+extern "C" {
+#include "../imd/vmdsock.h"
+#include "../imd/imd.h"
+}
+
+
+namespace PLMD {
+
+//+PLUMEDOC GENERIC IMD
+/**
+Use interactive molecular dynamics with VMD
+
+\verbatim
+# listen to port 1112 of localhost
+IMD PORT=1112
+\endverbatim
+
+\verbatim
+# listen to port 1112 of pippo
+IMD HOST=pippo PORT=1112
+\endverbatim
+
+\verbatim
+# listen to port 1112 of localhost and run only when connected
+IMD PORT=1112 WAIT
+\endverbatim
+
+*/
+//+ENDPLUMEDOC
+
+class IMD :
+  public ActionAtomistic,
+  public ActionPilot
+  {
+  std::string host;
+  int port;
+  bool wait;
+  bool wrap;
+  void* sock;
+  void* clientsock;
+  bool connected;
+  std::vector<float> coord;
+  std::vector<double> forces;
+  int natoms;
+  int transferRate;
+  double fscale;
+  void connect();
+  void receive();
+  void sendCoordinates();
+public:
+  void calculate();
+  void apply();
+  IMD(const ActionOptions&);
+  ~IMD(){};
+};
+
+PLUMED_REGISTER_ACTION(IMD,"IMD")
+
+IMD::IMD(const ActionOptions& ao):
+  Action(ao),
+  ActionAtomistic(ao),
+  ActionPilot(ao),
+  host("localhost"),
+  port(0),
+  wait(false),
+  wrap(false),
+  sock(NULL),
+  clientsock(NULL),
+  connected(false),
+  transferRate(100),
+  fscale(1.0)
+{
+  natoms=plumed.getAtoms().getNatoms();
+
+  std::vector<int> index(natoms);
+  for(int i=0;i<natoms;i++) index[i]=i;
+  requestAtoms(index);
+  coord.resize(natoms*3,float(0.0));
+  forces.resize(natoms*3,0.0);
+
+  parseFlag("WAIT",wait);
+  bool nowait=false;
+  parseFlag("NOWAIT",nowait);
+  if(nowait)wait=false;
+  parseFlag("WRAP",wrap);
+  parse("PORT",port);
+  parse("HOST",host);
+  parse("FSCALE",fscale);
+
+  checkRead();
+
+  log.printf("  with host %s\n",host.c_str());
+  log.printf("  with port %d\n",port);
+  if(wait) log.printf("  waiting for a connection\n");
+  else     log.printf("  not waiting for a connection\n");
+  if(wrap) log.printf("  wrapping atoms\n");
+  else     log.printf("  not wrapping atoms\n");
+  log.printf("  WMD forces will be scaled by %f\n",fscale);
+
+  if(comm.Get_rank()==0){
+    vmdsock_init();
+    sock = vmdsock_create();
+    vmdsock_bind(sock, port);
+    vmdsock_listen(sock);
+  }
+
+  connect();
+}
+
+void IMD::connect(){
+  if(comm.Get_rank()==0) {
+    if(wait && clientsock==NULL)
+      fprintf(stderr,"Waiting for IMD connection on %s:%d...\n", host.c_str(), port);
+    do{
+      if (vmdsock_selread(sock,00) > 0) {
+        clientsock = vmdsock_accept(sock);
+        if (imd_handshake(clientsock)) {
+          clientsock = NULL;
+        };
+        sleep(1);
+        int length;
+        if(clientsock){
+          if (vmdsock_selread(clientsock, 0) != 1 ||
+              imd_recv_header(clientsock, &length) != IMD_GO) {
+            clientsock = NULL;
+          }
+        }
+      }
+    } while(wait && clientsock==NULL);
+    connected=(clientsock!=NULL);
+    int c=connected;
+    comm.Bcast(&c,1,0);
+  } else {
+    int c;
+    comm.Bcast(&c,1,0);
+    connected=c;
+  }
+}
+
+void IMD::receive(){
+
+  if(!connected) return;
+
+  if(clientsock){
+    IMDType type;
+    int length;
+    int itype;
+    while (vmdsock_selread(clientsock,0) > 0) {
+      type = imd_recv_header(clientsock, &length);
+      if(type==IMD_MDCOMM){
+        int32* vmd_atoms = new int32[length];
+        float* vmd_forces = new float[3*length];
+        imd_recv_mdcomm(clientsock, length, vmd_atoms, vmd_forces);
+        for(int i=0;i<length;i++){
+          forces[3*vmd_atoms[i]+0]=vmd_forces[3*i+0];
+          forces[3*vmd_atoms[i]+1]=vmd_forces[3*i+1];
+          forces[3*vmd_atoms[i]+2]=vmd_forces[3*i+2];
+        }
+        delete [] vmd_atoms;
+        delete [] vmd_forces;
+        itype=0;
+        comm.Bcast(&itype,1,0);
+        comm.Bcast(&forces[0],forces.size(),0);
+      }else if(type==IMD_DISCONNECT){
+        vmdsock_destroy(clientsock);
+        clientsock=NULL;
+        for(unsigned i=0;i<forces.size();i++) forces[i]=0.0;
+        connected=false;
+        itype=1;
+        comm.Bcast(&itype,1,0);
+        break;
+      }else if(type==IMD_TRATE){
+        if(length<1) length=1;
+        itype=2;
+        log.printf("IMD: setting transfer rate to %d\n",length);
+        transferRate=length;
+        comm.Bcast(&itype,1,0);
+        comm.Bcast(&transferRate,1,0);
+      }else if(type==IMD_KILL){
+        log.printf("IMD: killing simulation\n");
+        itype=3;
+        comm.Bcast(&itype,1,0);
+        plumed.exit();
+      }
+    }
+    itype=-1;
+    comm.Bcast(&itype,1,0);
+  }
+
+  if(comm.Get_rank()!=0){
+    int itype;
+    while(true){
+      comm.Bcast(&itype,1,0);
+      if(itype==-1)break;
+      else if(itype==0) comm.Bcast(&forces[0],forces.size(),0);
+      else if(itype==1) {
+        for(unsigned i=0;i<forces.size();i++) forces[i]=0.0;
+        connected=false;
+      }
+      else if(itype==2) comm.Bcast(&transferRate,1,0);
+      else if(itype==3) plumed.exit();
+      else assert(0);
+    }
+  }
+
+}
+
+void IMD::calculate(){
+  if(comm.Get_rank()==0 && connected && plumed.getStep()%transferRate==0 && vmdsock_selwrite(clientsock,0)) {
+    double scale=10.0*plumed.getAtoms().getInternalLengthUnits();
+    Vector ref;
+    for(int i=0;i<natoms;i++){
+      Vector pos=getPositions(i);
+      if(wrap) pos=pbcDistance(ref,pos);
+      coord[3*i+0]=static_cast<float>((pos[0]*scale));
+      coord[3*i+1]=static_cast<float>((pos[1]*scale));
+      coord[3*i+2]=static_cast<float>((pos[2]*scale));
+    }
+    imd_send_fcoords(clientsock,natoms,&coord[0]);
+  }
+}
+
+void IMD::apply(){
+
+  std::vector<Vector> & f(modifyForces());
+   
+  const double scale=4.184/plumed.getAtoms().getInternalEnergyUnits()
+             /(0.1/plumed.getAtoms().getInternalLengthUnits())*fscale;
+   
+  for(unsigned i=0;i<f.size();i++){
+    f[i][0]=forces[3*i+0]*getStride()*scale;
+    f[i][1]=forces[3*i+1]*getStride()*scale;
+    f[i][2]=forces[3*i+2]*getStride()*scale;
+  }
+
+  connect();
+  receive();
+
+}
+
+
+}
+
+#endif
diff --git a/src/Log.cpp b/src/Log.cpp
new file mode 100644
index 000000000..b72040669
--- /dev/null
+++ b/src/Log.cpp
@@ -0,0 +1,54 @@
+#include "Log.h"
+#include <cstdarg>
+#include <cassert>
+
+using namespace std;
+using namespace PLMD;
+
+int Log::printf(const char*fmt,...){
+  if(comm.Get_rank()>0)return 0;
+  int pointer=strlen(buffer);
+  va_list arg;
+  va_start(arg, fmt);
+  int r=vsnprintf(&buffer[pointer],buflen-pointer,fmt,arg);
+  va_end(arg);
+  assert(r>-1 && r<buflen-pointer);
+
+// Line is buffered until newline, then written with a PLUMED: prefix
+  char*p1=buffer;
+  char*p2;
+  while((p2=strchr(p1,'\n'))){
+    *p2='\0';
+    fprintf(fp,"PLUMED: %s\n",p1);
+    p1=p2+1;
+  };
+  memmove(buffer,p1,strlen(p1)+1);
+  return r;
+}
+
+Log::Log(PlumedCommunicator &comm):
+  fp(stdout),
+  toBeClosed(false),
+  comm(comm){
+  buffer=new char[buflen];
+  buffer[0]='\0';
+}
+
+Log::~Log(){
+  if(comm.Get_rank()>0)return;
+  if(!fp && toBeClosed)fclose(fp);
+  delete [] buffer;
+}
+
+void Log::setFile(string str){
+  if(comm.Get_rank()>0)return;
+  fp=fopen(str.c_str(),"w");
+  toBeClosed=true;
+}
+
+void Log::set(FILE*f){
+  if(comm.Get_rank()>0)return;
+  fp=f;
+}
+
+
diff --git a/src/Log.h b/src/Log.h
new file mode 100644
index 000000000..2a27ccb13
--- /dev/null
+++ b/src/Log.h
@@ -0,0 +1,53 @@
+#ifndef __PLUMED_Log_h
+#define __PLUMED_Log_h
+#include <cstdio>
+#include <string>
+#include <sstream>
+#include "PlumedCommunicator.h"
+
+namespace PLMD{
+
+/// Class containing the log stream.
+///
+/// It is similar to a FILE stream. It allows a printf() function, and
+/// also to write with a << operator. Moreover, it can prefix
+/// lines with the "PLUMED:" prefix, useful to grep out plumed
+/// log from output
+class Log
+{
+/// Actual FILE stream
+  FILE* fp;
+/// Flag to know if, when Log is destructed, file should be closed
+  bool toBeClosed;
+  static const int buflen=10000;
+  std::ostringstream oss;
+  char* buffer;
+/// Communicator (to write only with the first processor)
+  PlumedCommunicator& comm;
+public:
+/// Initialize on a given communicator
+  Log(PlumedCommunicator&);
+  ~Log();
+/// Set a file with a specific name
+  void setFile(std::string str);
+/// Link to an already open FILE stream
+  void set(FILE*f);
+/// Standard printf-like function
+  int printf(const char*fmt,...);
+  template <class T>
+  friend Log& operator<<(Log&,const T &);
+};
+
+/// Write using << syntax
+template <class T>
+Log& operator<<(Log&log,const T &t){
+  log.oss<<t;
+  log.printf("%s",log.oss.str().c_str());
+  log.oss.str("");
+  return log;
+}
+
+
+}
+
+#endif
diff --git a/src/MDAtoms.cpp b/src/MDAtoms.cpp
new file mode 100644
index 000000000..47a97368f
--- /dev/null
+++ b/src/MDAtoms.cpp
@@ -0,0 +1,243 @@
+#include <cassert>
+#include <algorithm>
+#include <string>
+#include "MDAtoms.h"
+
+using namespace PLMD;
+using namespace std;
+
+namespace PLMD {
+
+template <class T>
+class MDAtomsTyped:
+public MDAtomsBase
+{
+  T *m;
+  T *c;
+  T *px; T *py; T *pz;
+  T *fx; T *fy; T *fz;
+  T *box;
+  T *virial;
+public:
+  MDAtomsTyped();
+  void setm(void*m);
+  void setc(void*m);
+  void setBox(void*);
+  void setp(void*p);
+  void setVirial(void*);
+  void setf(void*f);
+  void setp(void*p,int i);
+  void setf(void*f,int i);
+  void MD2double(const void*m,double&d)const{
+    d=double(*(static_cast<const T*>(m)));
+  }
+  void double2MD(const double&d,void*m)const{
+    *(static_cast<T*>(m))=T(d);
+  }
+  void getBox(Tensor &)const;
+  void getPositions(int first,int last,vector<Vector>&)const;
+  void getPositions(const vector<int>&index,vector<Vector>&positions)const;
+  void getMasses(int first,int last,vector<double>&)const;
+  void getMasses(const vector<int>&index,vector<double>&)const;
+  void getCharges(int first,int last,vector<double>&)const;
+  void getCharges(const vector<int>&index,vector<double>&)const;
+  void updateVirial(const Tensor&)const;
+  void updateForces(int first,int last,const vector<Vector>&);
+  void updateForces(const vector<int>&index,const vector<Vector>&);
+  void rescaleForces(int first,int last,double factor);
+  int  getRealPrecision()const;
+};
+
+
+MDAtomsBase::MDAtomsBase():
+  scalep(1.0),
+  scalef(1.0),
+  scaleb(1.0),
+  scalev(1.0),
+  stride(0)
+{
+}
+
+MDAtomsBase* MDAtomsBase::create(int p){
+  if(p==sizeof(double)){
+    return new MDAtomsTyped<double>;
+  } else if (p==sizeof(float)){
+    return new MDAtomsTyped<float>;
+  }
+  assert(0);
+  return NULL;
+}
+
+
+void MDAtomsBase::setUnits(double l,double e){
+  scalep=1.0/l;
+  scalef=e/l;
+  scaleb=1.0/l;
+  scalev=e;
+}
+
+template <class T>
+void MDAtomsTyped<T>::getPositions(int first,int last,vector<Vector>&positions)const{
+  for(int i=first;i<last;i++){
+    positions[i][0]=px[stride*i]*scalep;
+    positions[i][1]=py[stride*i]*scalep;
+    positions[i][2]=pz[stride*i]*scalep;
+  }
+}
+
+template <class T>
+void MDAtomsTyped<T>::getMasses(int first,int last,vector<double>&masses)const{
+  if(m) for(int i=first;i<last;i++) masses[i]=m[i];
+  else  for(int i=first;i<last;i++) masses[i]=0.0;
+}
+
+template <class T>
+void MDAtomsTyped<T>::getCharges(int first,int last,vector<double>&charges)const{
+  if(c) for(int i=first;i<last;i++) charges[i]=c[i];
+  else  for(int i=first;i<last;i++) charges[i]=0.0;
+}
+
+
+template <class T>
+void MDAtomsTyped<T>::getBox(Tensor&box)const{
+  if(this->box) for(int i=0;i<3;i++)for(int j=0;j<3;j++) box(i,j)=this->box[3*i+j]*scaleb;
+  else box.clear();
+}
+
+template <class T>
+void MDAtomsTyped<T>::getPositions(const vector<int>&index,vector<Vector>&positions)const{
+  for(unsigned i=0;i<index.size();++i){
+    positions[index[i]][0]=px[stride*i]*scalep;
+    positions[index[i]][1]=py[stride*i]*scalep;
+    positions[index[i]][2]=pz[stride*i]*scalep;
+  }
+}
+
+template <class T>
+void MDAtomsTyped<T>::getMasses(const vector<int>&index,vector<double>&masses)const{
+  if(m) for(unsigned i=0;i<index.size();++i) masses[index[i]]=m[i];
+  else  for(unsigned i=0;i<index.size();++i) masses[index[i]]=0.0;
+}
+
+template <class T>
+void MDAtomsTyped<T>::getCharges(const vector<int>&index,vector<double>&charges)const{
+  if(c) for(unsigned i=0;i<index.size();++i) charges[index[i]]=c[i];
+  else  for(unsigned i=0;i<index.size();++i) charges[index[i]]=0.0;
+}
+
+template <class T>
+void MDAtomsTyped<T>::updateVirial(const Tensor&virial)const{
+  if(this->virial) for(int i=0;i<3;i++)for(int j=0;j<3;j++) this->virial[3*i+j]+=T(virial(i,j)*scalev);
+}
+
+
+template <class T>
+void MDAtomsTyped<T>::updateForces(int first,int last,const vector<Vector>&forces){
+  for(int i=first;i<last;i++){
+    fx[stride*i]+=T(scalef*forces[i][0]);
+    fy[stride*i]+=T(scalef*forces[i][1]);
+    fz[stride*i]+=T(scalef*forces[i][2]);
+  }
+}
+
+template <class T>
+void MDAtomsTyped<T>::updateForces(const vector<int>&index,const vector<Vector>&forces){
+  for(unsigned i=0;i<index.size();++i){
+    fx[stride*i]+=T(scalef*forces[index[i]][0]);
+    fy[stride*i]+=T(scalef*forces[index[i]][1]);
+    fz[stride*i]+=T(scalef*forces[index[i]][2]);
+  }
+}
+
+template <class T>
+void MDAtomsTyped<T>::rescaleForces(int first,int last,double factor){
+  for(int i=first;i<last;++i){
+    fx[stride*i]*=T(factor);
+    fy[stride*i]*=T(factor);
+    fz[stride*i]*=T(factor);
+  }
+}
+
+template <class T>
+int MDAtomsTyped<T>::getRealPrecision()const{
+  return sizeof(T);
+}
+
+template <class T>
+void MDAtomsTyped<T>::setp(void*pp){
+  T*p=static_cast<T*>(pp);
+  assert(stride==0 || stride==3);
+  px=p;
+  py=p+1;
+  pz=p+2;
+  stride=3;
+}
+
+template <class T>
+void MDAtomsTyped<T>::setBox(void*pp){
+  box=static_cast<T*>(pp);
+}
+
+
+template <class T>
+void MDAtomsTyped<T>::setf(void*ff){
+  T*f=static_cast<T*>(ff);
+  assert(stride==0 || stride==3);
+  fx=f;
+  fy=f+1;
+  fz=f+2;
+  stride=3;
+}
+
+template <class T>
+void MDAtomsTyped<T>::setp(void*pp,int i){
+  T*p=static_cast<T*>(pp);
+  assert(stride==0 || stride==1);
+  if(i==0)px=p;
+  if(i==1)py=p;
+  if(i==2)pz=p;
+  stride=1;
+}
+
+template <class T>
+void MDAtomsTyped<T>::setVirial(void*pp){
+  virial=static_cast<T*>(pp);
+}
+
+
+template <class T>
+void MDAtomsTyped<T>::setf(void*ff,int i){
+  T*f=static_cast<T*>(ff);
+  assert(stride==0 || stride==1);
+  if(i==0)fx=f;
+  if(i==1)fy=f;
+  if(i==2)fz=f;
+  stride=1;
+}
+
+template <class T>
+void MDAtomsTyped<T>::setm(void*m){
+  this->m=static_cast<T*>(m);
+}
+
+template <class T>
+void MDAtomsTyped<T>::setc(void*c){
+  this->c=static_cast<T*>(c);
+}
+
+template <class T>
+MDAtomsTyped<T>::MDAtomsTyped():
+  m(NULL),
+  c(NULL),
+  px(NULL),
+  py(NULL),
+  pz(NULL),
+  fx(NULL),
+  fy(NULL),
+  fz(NULL),
+  box(NULL),
+  virial(NULL)
+{}
+
+}
+
diff --git a/src/MDAtoms.h b/src/MDAtoms.h
new file mode 100644
index 000000000..f0cfca73b
--- /dev/null
+++ b/src/MDAtoms.h
@@ -0,0 +1,44 @@
+#ifndef __PLUMED_MDAtoms_h
+#define __PLUMED_MDAtoms_h
+
+#include "Tensor.h"
+#include "Vector.h"
+#include <vector>
+
+namespace PLMD {
+
+class MDAtomsBase
+{
+protected:
+  double scalep,scalef;
+  double scaleb,scalev;
+  int stride;
+public:
+  MDAtomsBase();
+  virtual ~MDAtomsBase(){};
+  virtual void setm(void*m)=0;
+  virtual void setc(void*m)=0;
+  virtual void setBox(void*)=0;
+  virtual void setp(void*p)=0;
+  virtual void setVirial(void*)=0;
+  virtual void setf(void*f)=0;
+  virtual void setp(void*p,int i)=0;
+  virtual void setf(void*f,int i)=0;
+          void setUnits(double,double);
+  virtual void MD2double(const void*,double&)const=0;
+  virtual void double2MD(const double&,void*)const=0;
+  virtual void getBox(Tensor &)const=0;
+  virtual void getPositions(const std::vector<int>&index,std::vector<Vector>&)const=0;
+  virtual void getMasses(const std::vector<int>&index,std::vector<double>&)const=0;
+  virtual void getCharges(const std::vector<int>&index,std::vector<double>&)const=0;
+  virtual void updateVirial(const Tensor&)const=0;
+  virtual void updateForces(const std::vector<int>&index,const std::vector<Vector>&)=0;
+  virtual void rescaleForces(int first,int last,double factor)=0;
+  virtual int  getRealPrecision()const=0;
+  static MDAtomsBase* create(int);
+};
+
+}
+
+
+#endif
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 000000000..de364d883
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,85 @@
+
+-include ../Makefile.conf
+-include ../imd/Makefile.conf
+
+ifndef srcdir
+srcdir=.
+endif
+
+SRC_KERNEL=$(subst $(srcdir)/PlumedStatic.cpp,,$(wildcard $(srcdir)/*.cpp))
+OBJ_KERNEL=$(subst $(srcdir)/,,$(SRC_KERNEL:.cpp=.o))
+
+SRC_WRAPPER=$(srcdir)/PlumedStatic.cpp
+OBJ_WRAPPER=PlumedStatic.o
+
+SRC_DYNAMIC_WRAPPER=$(srcdir)/Plumed.c
+OBJ_DYNAMIC_WRAPPER=Plumed.o
+
+ALL_SRC=$(SRC_KERNEL) $(SRC_WRAPPER) $(SRC_DYNAMIC_WRAPPER)
+
+.PHONY: all clean
+
+ifdef GCCDEP
+all: libplumedKernel.$(SOEXT) libplumed.$(SOEXT) Plumed.o Plumed.inc Plumed.inc.runtime Plumed.inc.shared Plumed.inc.static
+else
+all:
+	@echo No configuration available
+	@echo First run ./configure.sh in the root directory
+endif
+
+PlumedConfig.h: PlumedConfig.h.in
+	sed "s/@SOEXT@/$(SOEXT)/g" $< > $@
+
+check:
+	echo $(OBJ_KERNEL) $(SRC_KERNEL)
+
+libplumedKernel.$(SOEXT): $(OBJ_KERNEL)
+	$(LDSO) -o $@ $^ $(DYNAMIC_LIBS)
+
+libplumed.$(SOEXT): $(OBJ_KERNEL) $(OBJ_WRAPPER)
+	$(LDSO) -o $@ $^ $(DYNAMIC_LIBS)
+
+clean:
+	rm -f *.o
+	rm -f makefile.dep
+	rm -f PlumedConfig.h
+	rm -f Plumed.inc*
+	rm -f *~
+ifdef SOEXT
+	rm -f *.$(SOEXT)
+endif
+
+Plumed.inc: $(OBJ_KERNEL) $(OBJ_WRAPPER) libplumed.$(SOEXT) Plumed.o
+	echo "PLUMED_OBJ=" $(realpath $(OBJ_KERNEL)) $(realpath $(OBJ_WRAPPER)) | sed 's/ / \\\n  /g' > $@
+	echo "PLUMED_SHARED_OBJ=" $(realpath libplumed.$(SOEXT)) >> $@
+	echo "PLUMED_WRAPPER=" $(realpath Plumed.o) >> $@
+	echo "PLUMED_INCLUDE="-I$(realpath ../include) >> $@
+	echo "PLUMED_LIBS="$(LIBS) >> $@
+	echo "PLUMED_DYNAMIC_LIBS="$(DYNAMIC_LIBS) >> $@
+	echo "PLUMED_LDFLAGS="$(LDFLAGS) >> $@
+
+Plumed.inc.runtime: Plumed.inc
+	echo "# PLUMED: runtime installation" > $@
+	cat $< >> $@
+	echo PLUMED_LOAD= '$$(PLUMED_WRAPPER) $$(PLUMED_LIBS) $$(PLUMED_LDFLAGS)' >> $@
+	echo PLUMED_DEPENDENCIES= >> $@
+
+Plumed.inc.static: Plumed.inc
+	echo "# PLUMED: static installation" > $@
+	cat $< >> $@
+	echo PLUMED_LOAD= '$$(PLUMED_OBJ) $$(PLUMED_LIBS) $$(PLUMED_DYNAMIC_LIBS) $$(PLUMED_LDFLAGS)' >> $@
+	echo PLUMED_DEPENDENCIES='$$(PLUMED_OBJ)' >> $@
+
+Plumed.inc.shared: Plumed.inc
+	echo "# PLUMED: shared installation" > $@
+	cat $< >> $@
+	echo PLUMED_LOAD= '$$(PLUMED_SHARED_OBJ) $$(PLUMED_LIBS) $$(PLUMED_LDFLAGS)' >> $@
+	echo PLUMED_DEPENDENCIES='$$(PLUMED_SHARED_OBJ)' >> $@
+
+makefile.dep : $(ALL_SRC) $(srcdir)/*.h $(srcdir)/PlumedConfig.h
+ifdef GCCDEP
+	for i in $(ALL_SRC) ; do $(GCCDEP) $(CPPFLAGS) -MM "$${i}"; done > $@
+endif
+
+-include makefile.dep
+
diff --git a/src/Pbc.cpp b/src/Pbc.cpp
new file mode 100644
index 000000000..42e81aca3
--- /dev/null
+++ b/src/Pbc.cpp
@@ -0,0 +1,66 @@
+#include "Pbc.h"
+#include "Tools.h"
+
+using namespace PLMD;
+
+Pbc::Pbc():
+  type(unset)
+{
+  box.clear();
+  invBox.clear();
+}
+
+
+void Pbc::setBox(const Tensor&b){
+  box=b;
+// UP TO NOW ONLY WORKS WITH ORTHOROMIBIC (should implement matrix inversion)
+// detect type:
+  const double epsilon=1e-14;
+  bool cxy=false;
+  bool cxz=false;
+  bool cyz=false;
+  if(box(0,1)*box(0,1)<epsilon && box(1,0)*box(1,0)<epsilon) cxy=true;
+  if(box(0,2)*box(0,2)<epsilon && box(2,0)*box(2,0)<epsilon) cxz=true;
+  if(box(1,2)*box(1,2)<epsilon && box(2,1)*box(2,1)<epsilon) cyz=true;
+
+  invBox=box.inverse();
+
+  if(cxy && cxz && cyz) type=orthorombic;
+// NOT IMPLEMENTED YET; WILL FALL TO GENERIC
+//  else if(cxy && cxz)   type=yz;
+//  else if(cxy && cyz)   type=xz;
+//  else if(cxz && cyz)   type=xy;
+  else type=generic;
+}
+
+Vector Pbc::distance(const Vector&v1,const Vector&v2)const{
+  Vector d=delta(v1,v2);
+  if(type==unset){
+  } else if(type==orthorombic) {
+    for(int i=0;i<3;i++) d[i]=Tools::pbc(d[i]*invBox(i,i))*box(i,i);
+  } else if(type==generic) {
+// first reduce:
+   Vector s=matmul(invBox.transpose(),d);
+   for(int i=0;i<3;i++) s[i]=Tools::pbc(s[i]);
+   d=matmul(box.transpose(),s);
+// then check all the neighbors:
+    Vector a1(box(0,0),box(0,1),box(0,2));
+    Vector a2(box(1,0),box(1,1),box(1,2));
+    Vector a3(box(2,0),box(2,1),box(2,2));
+    Vector best(d);
+    double lbest=best.modulo2();
+    Vector trial;
+    double ltrial;
+    for(int i=-1;i<=1;i++) for(int j=-1;j<=1;j++) for(int k=-1;k<=1;k++) {
+      trial=d+i*a1+j*a2+k*a3;
+      ltrial=trial.modulo2();
+      if(ltrial<lbest){
+        best=trial;
+        lbest=ltrial;
+      }
+    }
+    d=best;
+  } else assert(0);
+  return d;
+}
+
diff --git a/src/Pbc.h b/src/Pbc.h
new file mode 100644
index 000000000..244521c78
--- /dev/null
+++ b/src/Pbc.h
@@ -0,0 +1,21 @@
+#ifndef __PLUMED_Pbc_h
+#define __PLUMED_Pbc_h
+#include <cassert>
+#include "Vector.h"
+#include "Tensor.h"
+
+namespace PLMD{
+
+class Pbc{
+  enum {unset,orthorombic,xy,xz,yz,generic} type;
+  Tensor box;
+  Tensor invBox;
+public:
+  Pbc();
+  Vector distance(const Vector&,const Vector&)const;
+  void setBox(const Tensor&);
+};
+
+}
+
+#endif
diff --git a/src/Plumed.c b/src/Plumed.c
new file mode 100644
index 000000000..d697e7af8
--- /dev/null
+++ b/src/Plumed.c
@@ -0,0 +1,194 @@
+#ifdef __PLUMED_HAS_DLOPEN
+#include <dlfcn.h>
+#endif
+
+#include "Plumed.h"
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* DECLARATION USED ONLY IN THIS FILE */
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/**
+   Holder for plumedmain function pointers.
+*/
+typedef struct {
+  void*(*create)(void);
+  void(*cmd)(void*,const char*,const void*);
+  void(*finalize)(void*);
+} plumed_plumedmain_function_holder;
+
+/**
+  Register for plumedmain function pointers
+*/
+plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder*);
+
+/**
+  Routine to load a shared library
+*/
+void* plumed_dlopen(const char*);
+
+#ifdef __PLUMED_STATIC_KERNEL
+/* Real interface */
+void*plumedmain_create(void);
+void plumedmain_cmd(void*,const char*,const void*);
+void plumedmain_finalize(void*);
+#else
+/* dummy interface */
+void*plumed_dummy_create(void);
+void plumed_dummy_cmd(void*,const char*,const void*);
+void plumed_dummy_finalize(void*);
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+/* END OF DECLARATION USED ONLY IN THIS FILE */
+
+
+/*
+  this routine can be adjusted for different systems
+  it should try to load the shared object indicated in the path 
+*/
+
+void* plumed_dlopen(const char* path){
+#ifdef __PLUMED_HAS_DLOPEN
+  return dlopen(path,RTLD_NOW|RTLD_GLOBAL);
+#else
+  return NULL;
+#endif
+}
+
+
+/* These are the dummy routines which are used when plumed is not available */
+
+#ifdef __PLUMED_STATIC_KERNEL
+
+static int installed=1;
+
+#else
+
+static int installed=0;
+
+static int dummy;
+
+void*plumed_dummy_create(void){
+  return (void*)&dummy;
+}
+
+void plumed_dummy_cmd(void*p,const char*key,const void*val){
+  (void) p;   /* avoid warning on unused parameter */
+  (void) key; /* avoid warning on unused parameter */
+  (void) val; /* avoid warning on unused parameter */
+  fprintf(stderr,"+++ ERROR +++");
+  fprintf(stderr,"YOU ARE TRYING TO USE PLUMED, BUT IT IS NOT AVAILABLE\n");
+  exit(1);
+}
+
+void plumed_dummy_finalize(void*p){
+  (void) p; /* avoid warning on unused parameter */
+}
+
+#endif
+
+plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder* f){
+#ifdef __PLUMED_STATIC_KERNEL
+  static plumed_plumedmain_function_holder g={plumedmain_create,plumedmain_cmd,plumedmain_finalize};
+  (void) f; /* avoid warning on unused parameter */
+  return &g;
+#else
+  static plumed_plumedmain_function_holder g={plumed_dummy_create,plumed_dummy_cmd,plumed_dummy_finalize};
+  static int first=1;
+#ifdef __PLUMED_HAS_DLOPEN
+  char* path;
+  void* p;
+#endif
+  if(first && f==NULL){
+#ifdef __PLUMED_HAS_DLOPEN
+    path=getenv("PLUMED_KERNEL");
+    if(path && (*path)){
+      fprintf(stderr,"+++ PLUMED kernel is being loaded as \"%s\" ...",path);
+      p=plumed_dlopen(path);
+      if(p){
+        fprintf(stderr,"ok\n");
+        installed=1;
+      }
+      else  fprintf(stderr,"NOT FOUND !!!\n");
+    }
+#endif
+  }
+  first=0;
+  if(f) g=*f;
+  return &g;
+#endif
+}
+
+/* C wrappers: */
+
+plumed plumed_create(void){
+  plumed p;
+  p.p=(*(plumed_kernel_register(NULL)->create))();
+  return p;
+}
+
+void plumed_cmd(plumed p,const char*key,const void*val){
+  (*(plumed_kernel_register(NULL)->cmd))(p.p,key,val);
+}
+
+void plumed_finalize(plumed p){
+  (*(plumed_kernel_register(NULL)->finalize))(p.p);
+}
+
+void plumed_installed(int*i){
+  plumed_kernel_register(NULL);
+  *i=installed;
+}
+
+/* we declare a Plumed_g_main object here, in such a way that it is always available */
+
+static plumed plumed_g_main={NULL};
+
+void plumed_g_create(void){
+  plumed_g_main.p=(*(plumed_kernel_register(NULL)->create))();
+}
+
+void plumed_g_cmd(const char*key,const void*val){
+  assert(plumed_g_main.p);
+  (*(plumed_kernel_register(NULL)->cmd))(plumed_g_main.p,key,val);
+}
+
+void plumed_g_finalize(void){
+  assert(plumed_g_main.p);
+  (*(plumed_kernel_register(NULL)->finalize))(plumed_g_main.p);
+  plumed_g_main.p=NULL;
+}
+
+/* Fortran wrappers */
+/* These are just like the global C wrappers, with an added underscore */
+
+void plumed_g_create_(void){
+  plumed_g_main.p=(*(plumed_kernel_register(NULL)->create))();
+}
+
+void plumed_g_cmd_(const char* key,const void* val){
+  assert(plumed_g_main.p);
+  (*(plumed_kernel_register(NULL)->cmd))(plumed_g_main.p,key,val);
+}
+
+void plumed_g_finalize_(void){
+  assert(plumed_g_main.p);
+  (*(plumed_kernel_register(NULL)->finalize))(plumed_g_main.p);
+  plumed_g_main.p=NULL;
+}
+
+void plumed_installed_(int*i){
+  plumed_kernel_register(NULL);
+  *i=installed;
+}
+
diff --git a/src/Plumed.h b/src/Plumed.h
new file mode 100644
index 000000000..c6f041b6f
--- /dev/null
+++ b/src/Plumed.h
@@ -0,0 +1,238 @@
+#ifndef __PLUMED_Plumed_h
+#define __PLUMED_Plumed_h
+
+/*
+  Plumed.h and Plumed.c contain the external plumed interface, which is used to
+  integrate it with MD engines. This interface is very general, and is expected
+  not to change across plumed versions. Plumed.c also implements a dummy version
+  of the interface. These files could be directly included in the official
+  host MD distribution. In this manner, it will be sufficient to link the plumed
+  library at link time (on all systems) or directly at runtime (on some system)
+  to include plumed features.
+  The C++ interface is more or less equivalent to the PlumedMain class, but it is
+  based on the plumed_{create,cmd,finalize} C interface. In this manner it
+  can take advantage of dynamic binding.
+
+  The available actions are:
+  create   --- creates a plumed object (in C++ this is done by the constructor)
+  cmd      --- sends a command to the plumed object
+  finalize --- destroys a plumed object (in C++ this is done by the destructor)
+
+  The dummy interface does:
+  create   --- don't do anything
+  cmd      --- report an error and die
+  finalize --- don't do anything
+
+  There is also a "global" interface, where a static plumed object is used. It can be called
+  also from FORTRAN.
+
+  C++ interface:
+    bool installed();
+    class PLMD::Plumed{
+      cmd(const char* key,const void* val=NULL);
+    }
+  C interface (can be used in C/C++)
+    void   plumed_installed(int*)
+    struct plumed;
+    plumed plumed_create();
+    void   plumed_cmd(plumed p,const char* key,const void* val);
+    void   plumed_finalize(plumed p);
+  Global interface (can be used in C/C++/FORTRAN)
+    plumed_installed(int*)
+    plumed_g_create();
+    plumed_g_command(const char* key,const void* val);
+    plumed_g_finalize();
+
+  The main routine is "cmd", which accepts two arguments:
+  key is a string containing the name of the command
+  val is the argument. it is declared const so as to use allow passing const objects, but in practice plumed
+      is going to modify val in several cases (using a const_cast).
+  In some cases val can be omitted: just pass a NULL pointer (in C++, val is optional and can be omitted).
+  The set of possible keys is the real API of the plumed library, and will be expanded with time.
+  New commands will be added, but backward compatibility will be retained as long as possible.
+
+  The plumed_install routine set its argument to a positive integer if plumed is installed,
+  to zero otherwise. Similarly, the C++ version installed() returns true in the first case and
+  false in the second. This is useful for the host MD code to know if
+  plumed has been linked or not, and is the only command which can be executed in the dummy interface.
+
+  To pass plumed a callback function use the following syntax:
+    plumed_function_holder ff;
+    ff.p=your_function;
+    plumed_cmd(plumed,"xxxx",&ff);
+  (this is passing the your_function() function to the "xxxx" command)
+*/
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/**
+  \brief Main plumed object
+
+  This is an object containing a Plumed instance, which should be used in
+  the MD engine. It should first be initialized with plumed_create(),
+  then it communicates with the MD engine using plumed_cmd(). Finally,
+  before the termination, it should be deallocated with plumed_finalize().
+  Its interface is very simple and general, and is expected
+  not to change across plumed versions.
+*/
+typedef struct {
+/**
+  \private
+  \brief Void pointer holding the real PlumedMain structure
+*/
+  void*p;
+} plumed;
+
+/* Generic function pointer */
+typedef void (*plumed_function_pointer)(void);
+
+/**
+  \brief Holder for function pointer.
+
+  To pass plumed a callback function use the following syntax:
+
+    plumed_function_holder ff;
+
+    ff.p=your_function;
+
+    plumed_cmd(plumed,"xxxx",&ff);
+
+  (this is passing the your_function() function to the "xxxx" command)
+*/
+
+typedef struct {
+  plumed_function_pointer p;
+} plumed_function_holder;
+
+/* C interface: */
+
+/** \relates plumed
+    \brief Constructor
+
+    \return The constructed plumed object
+*/
+plumed plumed_create(void);
+
+/** \relates plumed
+    \brief Tells p to execute a command
+
+    \param p The plumed object on which command is acting
+    \param key The name of the command to be executed
+    \param val The argument. It is declared as const to allow calls like plumed_cmd("A","B"),
+               but for some choice of key it can change the content
+*/
+void plumed_cmd(plumed p,const char*key,const void*val);
+
+/** \relates plumed
+    \brief Destructor
+
+    \param p The plumed object to be deallocated
+*/
+void plumed_finalize(plumed p);
+
+/** \relates plumed
+    \brief Check if plumed is installed (for runtime binding)
+
+    \param flag Is set to 1 if plumed is installed, to 0 otherwise
+*/
+void plumed_installed(int*flag);
+
+/* global C interface, working on a global object */
+
+/** \relates plumed
+    \brief Constructor for the global interface.
+
+    Equivalent to plumed_create(), but initialize a static global plumed object
+*/
+void plumed_g_create(void);
+
+/** \relates plumed
+    \brief Tells to the global interface to execute a command.
+
+    Equivalent to plumed_cmd(), but skipping the plumed argument
+*/
+void plumed_g_cmd(const char*,const void*);
+
+/** \relates plumed
+    \brief Destructor for the global interface.
+
+    Equivalent to plumed_finalize(), but skipping the plumed argument
+*/
+void plumed_g_finalize(void);
+
+/* fortran (underscored) wrappers, only to the global interface */
+
+
+/** \relates plumed
+    \brief Same as plumed_g_create().
+
+*/
+void plumed_g_create_(void);
+
+/** \relates plumed
+    \brief Same as plumed_g_cmd().
+
+*/
+
+void plumed_g_cmd_(const char*,const void*);
+/** \relates plumed
+    \brief Same as plumed_g_finalize().
+
+*/
+void plumed_g_finalize_(void);
+
+/** \relates plumed
+    \brief Same as plumed_installed().
+
+*/
+void plumed_installed_(int*);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#ifdef __cplusplus
+
+/* this is to include the NULL pointer */
+#include <cstdlib>
+
+/* C++ interface is hidden in PLMD namespace (same as plumed library) */
+namespace PLMD {
+
+/**
+  C++ wrapper for \link plumed
+*/
+
+class Plumed{
+  plumed main;
+public:
+/**
+  Constructor - equivalent to plumed_create()
+*/
+  Plumed(){main=plumed_create();};
+/**
+  Cmd - equivalent to plumed_cmd()
+*/
+  void cmd(const char*key,const void*val=NULL){plumed_cmd(main,key,val);};
+/**
+  Destructor - equivalent to plumed_finalize()
+*/
+  ~Plumed(){plumed_finalize(main);};
+};
+
+/** \relates Plumed
+    \brief Check if plumed is installed (for runtime binding)
+
+    \return true if plumed is installed, false otherwise
+*/
+inline
+bool installed(){int i;plumed_installed(&i);if(i>0) return true;else return false;}
+
+}
+
+#endif
+
+
+#endif
diff --git a/src/PlumedCommunicator.cpp b/src/PlumedCommunicator.cpp
new file mode 100644
index 000000000..be103f60b
--- /dev/null
+++ b/src/PlumedCommunicator.cpp
@@ -0,0 +1,119 @@
+#include "PlumedCommunicator.h"
+#include <cstdlib>
+#include <cassert>
+
+using namespace std;
+using namespace PLMD;
+
+namespace PLMD{
+
+PlumedCommunicator::PlumedCommunicator()
+#ifdef __PLUMED_MPI
+: communicator(MPI_COMM_SELF)
+#endif
+{
+}
+
+int PlumedCommunicator::Get_rank()const{
+  int r=0;
+#ifdef __PLUMED_MPI
+  if(initialized()) MPI_Comm_rank(communicator,&r);
+#endif
+  return r;
+}
+
+int PlumedCommunicator::Get_size()const{
+  int s=1;
+#ifdef __PLUMED_MPI
+  if(initialized()) MPI_Comm_size(communicator,&s);
+#endif
+  return s;
+}
+
+void PlumedCommunicator::Set_comm(MPI_Comm c){
+#ifdef __PLUMED_MPI
+  if(initialized()){
+    if(communicator!=MPI_COMM_SELF) MPI_Comm_free(&communicator);
+    if(c!=MPI_COMM_SELF) MPI_Comm_dup(c,&communicator);
+  }
+#else
+  (void) c;
+#endif
+}
+
+PlumedCommunicator::~PlumedCommunicator(){
+#ifdef __PLUMED_MPI
+  if(initialized() && communicator!=MPI_COMM_SELF) MPI_Comm_free(&communicator);
+#endif
+}
+
+void PlumedCommunicator::Set_comm(void*val){
+#ifdef __PLUMED_MPI
+ if(initialized()&&val) Set_comm(*(MPI_Comm*)val);
+#else
+ (void) val;
+ assert(0);
+#endif
+}
+
+void PlumedCommunicator::Set_fcomm(void*val){
+#ifdef __PLUMED_MPI
+  if(initialized() && val){
+    MPI_Comm comm=MPI_Comm_f2c(*(MPI_Fint*)val);
+    Set_comm(comm);
+  }
+#else
+  (void) val;
+  assert(0);
+#endif
+}
+
+void PlumedCommunicator::Abort(int errorcode){
+#ifdef __PLUMED_MPI
+  if(initialized()){
+    MPI_Abort(communicator,errorcode);
+  }
+  std::exit(errorcode);
+#else
+  std::exit(errorcode);
+#endif
+}
+
+MPI_Comm & PlumedCommunicator::Get_comm(){
+    return communicator;
+}
+
+bool PlumedCommunicator::initialized(){
+  int flag=false;
+#if defined(__PLUMED_MPI)
+  MPI_Initialized(&flag);
+#endif
+  if(flag) return true;
+  else return false;
+}
+
+void PlumedCommunicator::Request::wait(){
+#ifdef __PLUMED_MPI
+  if(initialized())MPI_Wait(&r,MPI_STATUS_IGNORE);
+#else
+  assert(0);
+#endif
+}
+
+void PlumedCommunicator::Request::wait(Status&s){
+#ifdef __PLUMED_MPI
+  if(initialized()) MPI_Wait(&r,&s.s);
+#else
+  (void) s;
+  assert(0);
+#endif
+}
+
+#ifdef __PLUMED_MPI
+template<> MPI_Datatype PlumedCommunicator::getMPIType<float>(){ return MPI_FLOAT;}
+template<> MPI_Datatype PlumedCommunicator::getMPIType<double>(){ return MPI_DOUBLE;}
+template<> MPI_Datatype PlumedCommunicator::getMPIType<int>()   { return MPI_INT;}
+#endif
+
+}
+
diff --git a/src/PlumedCommunicator.h b/src/PlumedCommunicator.h
new file mode 100644
index 000000000..555ff2479
--- /dev/null
+++ b/src/PlumedCommunicator.h
@@ -0,0 +1,184 @@
+#ifndef __PLUMED_PlumedCommunicator_h
+#define __PLUMED_PlumedCommunicator_h
+#ifdef __PLUMED_MPI
+#include <mpi.h>
+#endif
+#include <cstdlib>
+#include <cassert>
+
+namespace PLMD{
+
+#ifndef  __PLUMED_MPI
+/// Surrogate of MPI types when MPI library is not available
+  class MPI_Comm {
+    int dummy;
+  };
+#endif
+
+/// Class containing wrappers to MPI.
+/// All the MPI related stuff is relegated here.
+class PlumedCommunicator{
+/// Communicator
+  MPI_Comm communicator;
+#ifdef __PLUMED_MPI
+  template <class T>
+  static MPI_Datatype getMPIType();
+#endif
+public:
+  class Status{
+  public:
+#ifdef __PLUMED_MPI
+    MPI_Status s;
+#endif
+    template <class T>
+    int Get_count()const;
+  };
+  class Request{
+  public:
+#ifdef __PLUMED_MPI
+    MPI_Request r;
+#endif
+    void wait();
+    void wait(Status&);
+  };
+  PlumedCommunicator();
+  virtual ~PlumedCommunicator();
+/// Obtain the rank of the present process
+  int Get_rank()const;
+/// Obtain the number of processes
+  int Get_size()const;
+/// Set from a real MPI communicator
+  void Set_comm(MPI_Comm);
+/// Reference to MPI communicator
+  MPI_Comm & Get_comm();
+/// Set from a pointer to a real MPI communicator (C)
+/// \param comm Pointer to a C MPI communicator
+  void Set_comm(void*comm);
+/// Set from a pointer to a real MPI communicator (FORTRAN)
+/// \param comm Pointer to a FORTRAN MPI communicator (INTEGER)
+  void Set_fcomm(void*comm);
+/// Wrapper to MPI_Abort
+  void Abort(int);
+
+/// Tests if MPI library is initialized
+  static bool initialized();
+
+/// Wrapper for MPI_Allreduce with MPI_SUM
+  template <class T>
+  void Sum(T*,int);
+/// Wrapper for MPI_Allgatherv
+  template <class T>
+  void Allgatherv(const T*,int,T*,const int*,const int*);
+  template <class T>
+  Request Isend(T*,int,int,int);
+  template <class T>
+  void Recv(T*,int,int,int,Status&);
+  template <class T>
+  void Recv(T*,int,int,int);
+  template <class T>
+  void Bcast(T*,int,int);
+};
+
+template<class T>
+void PlumedCommunicator::Sum(T*b,int count){
+#if defined(__PLUMED_MPI)
+  if(initialized()) MPI_Allreduce(MPI_IN_PLACE,b,count,getMPIType<T>(),MPI_SUM,communicator);
+#else
+  (void) b;
+  (void) count;
+#endif
+}
+
+template<class T>
+void PlumedCommunicator::Bcast(T*b,int count,int root){
+#if defined(__PLUMED_MPI)
+  if(initialized()) MPI_Bcast(b,count,getMPIType<T>(),root,communicator);
+#else
+  (void) b;
+  (void) count;
+  (void) root;
+#endif
+}
+
+
+template<class T>
+void PlumedCommunicator::Allgatherv(const T*sendbuf,int sendcount,T*recvbuf,const int*recvcounts,const int*displs){
+#if defined(__PLUMED_MPI)
+  if(initialized()){
+    void*s=const_cast<void*>((const void*)sendbuf);
+    void*r=const_cast<void*>((const void*)recvbuf);
+    int*rc=const_cast<int*>(recvcounts);
+    int*di=const_cast<int*>(displs);
+    if(s==NULL)s=MPI_IN_PLACE;
+    MPI_Allgatherv(s,sendcount,getMPIType<T>(),r,rc,di,getMPIType<T>(),communicator);
+  }
+#else
+  (void) sendbuf;
+  (void) sendcount;
+  (void) recvbuf;
+  (void) recvcounts;
+  (void) displs;
+  assert(0);
+#endif
+}
+
+template <class T>
+PlumedCommunicator::Request PlumedCommunicator::Isend(T*buf,int count,int source,int tag){
+  Request req;
+#ifdef __PLUMED_MPI
+  if(initialized())MPI_Isend(buf,count,getMPIType<T>(),source,tag,communicator,&req.r);
+#else
+  (void) buf;
+  (void) count;
+  (void) source;
+  (void) tag;
+  assert(0);
+#endif
+  return req;
+}
+
+template <class T>
+void PlumedCommunicator::Recv(T*buf,int count,int source,int tag,Status&status){
+#ifdef __PLUMED_MPI
+  if(initialized()){
+    MPI_Recv(buf,count,getMPIType<T>(),source,tag,communicator,&status.s);
+  }
+#else
+  (void) buf;
+  (void) count;
+  (void) source;
+  (void) tag;
+  (void) status;
+  assert(0);
+#endif
+}
+
+template <class T>
+void PlumedCommunicator::Recv(T*buf,int count,int source,int tag){
+#ifdef __PLUMED_MPI
+  if(initialized())MPI_Recv(buf,count,getMPIType<T>(),source,tag,communicator,MPI_STATUS_IGNORE);
+#else
+  (void) buf;
+  (void) count;
+  (void) source;
+  (void) tag;
+  assert(0);
+#endif
+}
+
+template<class T>
+int PlumedCommunicator::Status::Get_count()const{
+  int i;
+#ifdef __PLUMED_MPI
+  if(initialized()) MPI_Get_count(const_cast<MPI_Status*>(&s),getMPIType<T>(),&i);
+#else
+  assert(0);
+#endif
+  return i;
+}
+
+
+
+}
+
+#endif
diff --git a/src/PlumedConfig.h.in b/src/PlumedConfig.h.in
new file mode 100644
index 000000000..cd0fede88
--- /dev/null
+++ b/src/PlumedConfig.h.in
@@ -0,0 +1,12 @@
+#ifndef __PLUMED_PlumedConfig_h
+#define __PLUMED_PlumedConfig_h
+
+namespace PLMD{
+
+// nothing yet
+
+const std::string soext("@SOEXT@");
+
+}
+
+#endif
diff --git a/src/PlumedMain.cpp b/src/PlumedMain.cpp
new file mode 100644
index 000000000..21125036a
--- /dev/null
+++ b/src/PlumedMain.cpp
@@ -0,0 +1,442 @@
+#include "PlumedMain.h"
+#include "Tools.h"
+#include <cstring>
+#include <assert.h>
+#include "ActionPilot.h"
+#include "ActionWithValue.h"
+#include "ActionAtomistic.h"
+#include "Atoms.h"
+#include <set>
+#include "PlumedConfig.h"
+#include "Colvar.h"
+
+#include <cstdlib>
+
+#include "ActionRegister.h"
+
+using namespace PLMD;
+
+// !!!!!!!!!!!!!!!!!!!!!!    DANGER   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
+// THE FOLLOWING ARE UTILITIES WHICH ARE NECESSARY FOR DYNAMIC LOADING OF THE PLUMED KERNEL:
+// This section should be consistent with the Plumed.h file.
+// Since the Plumed.h file may be included in host MD codes, **NEVER** MODIFY THE CODE DOWN HERE
+
+/* Holder for plumedmain function pointers */
+typedef struct {
+  void*(*create)();
+  void(*cmd)(void*,const char*,const void*);
+  void(*finalize)(void*);
+} plumed_plumedmain_function_holder;
+
+extern "C" void*plumedmain_create();
+extern "C" void plumedmain_cmd(void*plumed,const char*key,const void*val);
+extern "C" void plumedmain_finalize(void*plumed);
+
+void*plumedmain_create(){
+  return new PlumedMain;
+}
+
+void plumedmain_cmd(void*plumed,const char*key,const void*val){
+  assert(plumed);
+  static_cast<PlumedMain*>(plumed)->cmd(key,val);
+}
+
+void plumedmain_finalize(void*plumed){
+  assert(plumed);
+  delete static_cast<PlumedMain*>(plumed);
+}
+
+extern "C" plumed_plumedmain_function_holder* plumed_kernel_register(const plumed_plumedmain_function_holder*);
+extern "C" void* plumed_dlopen(const char*);
+
+namespace PLMD{
+
+/// Static object which registers Plumed.
+/// This is a static object which, during its construction at startup,
+/// registers the pointers to plumedmain_create, plumedmain_cmd and plumedmain_finalize
+/// to the plumed_kernel_register function
+static class PlumedMainInitializer{
+  public:
+  PlumedMainInitializer(){
+    plumed_plumedmain_function_holder fh={plumedmain_create,plumedmain_cmd,plumedmain_finalize};
+    plumed_kernel_register(&fh);
+  };
+} RegisterMe;
+
+}
+
+// END OF DANGER
+////////////////////////////////////////////////////////////
+
+
+PlumedMain::PlumedMain():
+  initialized(false),
+  log(comm),
+  step(0),
+  active(false),
+  actionSet((*this)),
+  atoms(*this),
+  novirial(false)
+{
+}
+
+/////////////////////////////////////////////////////////////
+//  MAIN INTERPRETER
+
+void PlumedMain::cmd(const char*key,const void*cval){
+
+// this is nasty trick:
+  void* val=const_cast<void*>(cval);
+// in this manner, a const pointer can be used for cval, allowing the user to pass
+// arguments such as cmd("pippo","pluto")
+// but here we override the const
+
+// first try single word keys
+  std::string word(key);
+
+  if(false){
+// for efficiency, words frequently used are checked first
+
+// words used at every MD steps:
+  } else if(word=="setBox") {
+       assert(initialized);
+       assert(val);
+       atoms.setBox(val);
+  } else if(word=="setPositions") {
+       assert(initialized);
+       assert(val);
+       atoms.setPositions(val);
+  } else if(word=="setMasses") {
+       assert(initialized);
+       assert(val);
+       atoms.setMasses(val);
+  } else if(word=="setCharges") {
+       assert(initialized);
+       assert(val);
+       atoms.setCharges(val);
+  } else if(word=="setPositionsX") {
+       assert(initialized);
+       assert(val);
+       atoms.setPositions(val,0);
+  } else if(word=="setPositionsY") {
+       assert(initialized);
+       assert(val);
+       atoms.setPositions(val,1);
+  } else if(word=="setPositionsZ") {
+       assert(initialized);
+       assert(val);
+       atoms.setPositions(val,2);
+  } else if(word=="setVirial") {
+       assert(initialized);
+       assert(val);
+       atoms.setVirial(val);
+  } else if(word=="setEnergy") {
+       assert(initialized);
+       assert(val);
+       atoms.setEnergy(val);
+  } else if(word=="setForces") {
+       assert(initialized);
+       assert(val);
+       atoms.setForces(val);
+  } else if(word=="setForcesX") {
+       assert(initialized);
+       assert(val);
+       atoms.setForces(val,0);
+  } else if(word=="setForcesY") {
+       assert(initialized);
+       assert(val);
+       atoms.setForces(val,1);
+  } else if(word=="setForcesZ") {
+       assert(initialized);
+       assert(val);
+       atoms.setForces(val,2);
+  } else if(word=="calc") {
+       assert(initialized);
+       calc();
+  } else if(word=="prepareDependencies") {
+       assert(initialized);
+       prepareDependencies();
+  } else if(word=="shareData") {
+       assert(initialized);
+       shareData();
+  } else if(word=="prepareCalc") {
+       assert(initialized);
+       prepareCalc();
+  } else if(word=="performCalc") {
+       assert(initialized);
+       performCalc();
+  } else if(word=="setStep") {
+       assert(initialized);
+       step=(*static_cast<int*>(val));
+// words used less frequently:
+  } else if(word=="setAtomsNlocal"){
+       assert(initialized);
+       assert(val);
+       atoms.setAtomsNlocal(*static_cast<int*>(val));
+  } else if(word=="setAtomsGatindex"){
+       assert(initialized);
+       assert(val);
+       atoms.setAtomsGatindex(static_cast<int*>(val));
+  } else if(word=="setAtomsContiguous"){
+       assert(initialized);
+       assert(val);
+       atoms.setAtomsContiguous(*static_cast<int*>(val));
+  } else if(word=="createFullList"){
+       assert(initialized);
+       atoms.createFullList(static_cast<int*>(val));
+  } else if(word=="getFullList"){
+       assert(initialized);
+       atoms.getFullList(static_cast<int**>(val));
+  } else if(word=="clearFullList"){
+       assert(initialized);
+       atoms.clearFullList();
+  } else if(word=="read"){
+       assert(initialized);
+       if(val)readInputFile(static_cast<char*>(val));
+       else   readInputFile("plumed.dat");
+  } else if(word=="clear"){
+       assert(initialized);
+       actionSet.clearDelete();
+  } else if(word=="getApiVersion"){
+       *(static_cast<int*>(val))=1;
+// commands which can be used only before initialization:
+  } else if(word=="init"){
+       assert(!initialized);
+       init();
+  } else if(word=="setRealPrecision"){
+       assert(!initialized);
+       assert(val);
+       atoms.setRealPrecision(*static_cast<int*>(val));
+  } else if(word=="setMDLengthUnits"){
+       assert(!initialized);
+       double d;
+       atoms.MD2double(val,d);
+       atoms.setMDLengthUnits(d);
+  } else if(word=="setMDEnergyUnits"){
+       assert(!initialized);
+       double d;
+       atoms.MD2double(val,d);
+       atoms.setMDEnergyUnits(d);
+  } else if(word=="setMDTimeUnits"){
+       assert(!initialized);
+       double d;
+       atoms.MD2double(val,d);
+       atoms.setMDTimeUnits(d);
+  } else if(word=="setPlumedDat"){
+       assert(!initialized);
+       plumedDat=static_cast<char*>(val);
+  } else if(word=="setMPIComm"){
+       assert(!initialized);
+       comm.Set_comm(val);
+       atoms.setDomainDecomposition(comm);
+  } else if(word=="setMPIFComm"){
+       assert(!initialized);
+       comm.Set_fcomm(val);
+       atoms.setDomainDecomposition(comm);
+  } else if(word=="setNatoms"){
+       assert(!initialized);
+       assert(val);
+       atoms.setNatoms(*static_cast<int*>(val));
+  } else if(word=="setTimestep"){
+       assert(!initialized);
+       assert(val);
+       atoms.setTimeStep(val);
+  } else if(word=="setMDEngine"){
+       assert(!initialized);
+       assert(val);
+       assert(MDEngine.length()==0);
+       MDEngine=static_cast<char*>(val);
+  } else if(word=="setLog"){
+       assert(!initialized);
+       log.set(static_cast<FILE*>(val));
+  } else if(word=="setLogFile"){
+       assert(!initialized);
+       log.setFile(static_cast<char*>(val));
+  } else if(word=="setKBoltzman"){
+       assert(val);
+//
+  } else {
+// multi word commands
+
+     std::vector<std::string> words=Tools::getWords(key);
+     int nw=words.size();
+   
+     if(false){
+     } else if(nw==2 && words[0]=="checkAction"){
+       int check=0;
+       if(actionRegister().check(words[1])) check=1;
+       *(static_cast<int*>(val))=check;
+     } else{
+   // error
+       fprintf(stderr,"+++ PLUMED ERROR\n");
+       fprintf(stderr,"+++ CANNOT INTERPRET CALL TO cmd() ROUTINE WITH ARG %s\n",key);
+       fprintf(stderr,"+++ There might be a mistake in the MD code\n");
+       fprintf(stderr,"+++ or you may be using an out-dated plumed version\n");
+       exit(1);
+     };
+  };
+}
+
+/////
+////////////////////////////////////////////////////////////////////////
+
+void PlumedMain::init(){
+// check that initialization just happens once
+  initialized=true;
+  atoms.init();
+  log<<"PLUMED is starting\n";
+  log<<"****  THIS IS AN EXPERIMENTAL VERSION ****\n";
+  log<<"PLUMED compiled on " __DATE__ " at " __TIME__ "\n";
+  log.printf("Please read and cite:\n");
+  log.printf("  M. Bonomi, D. Branduardi, G. Bussi, C. Camilloni, D. Provasi, P. Raiteri,\n");
+  log.printf("  D. Donadio, F. Marinelli, F. Pietrucci, R. A. Broglia and M. Parrinello\n");
+  log.printf("  PLUMED: a portable plugin for free-energy calculations with molecular dynamics\n");
+  log.printf("  Comp. Phys. Comm. 180, 1961 (2009)\n");
+  log.printf("For further information see the PLUMED web page at merlino.mi.infn.it/~plumed\n");
+  log.printf("List of registered actions:\n");
+  actionRegister().log(log);
+  log.printf("Molecular dynamics engine: %s\n",MDEngine.c_str());
+  log.printf("Precision of reals: %d\n",atoms.getRealPrecision());
+  log.printf("Running over %d %s\n",comm.Get_size(),(comm.Get_size()>1?"nodes":"node"));
+  log.printf("Number of atoms: %d\n",atoms.getNatoms());
+  if(plumedDat.length()>0){
+    readInputFile(plumedDat);
+    plumedDat="";
+  }
+  atoms.updateUnits();
+  log.printf("Timestep: %f\n",atoms.getTimeStep());
+}
+
+void PlumedMain::readInputFile(std::string str){
+  assert(initialized);
+  log.printf("FILE: %s\n",str.c_str());
+  FILE*fp=fopen(str.c_str(),"r");
+  std::vector<std::string> words;
+  while(Tools::getParsedLine(fp,words)){
+    if(words.size()==0)continue;
+    else if(words[0]=="ENDPLUMED") break;
+    else if(words[0]=="LOAD"){
+      std::string s=words[1];
+      assert(words.size()==2);
+      void *p=plumed_dlopen(s.c_str());
+      if(!p){
+// try with different extension
+        size_t n=s.find_last_of(".");
+        if(n==std::string::npos) s+=".";
+        else s=s.substr(0,n+1);
+        s+=soext;
+        p=plumed_dlopen(s.c_str());
+      }
+      if(!p){
+        log<<"ERROR\n";
+        log<<"I cannot load library "<<words[1].c_str()<<"\n";
+        this->exit(1);
+      }
+      log<<"Loading shared library "<<s.c_str()<<"\n";
+      log<<"Here is the new list of available actions\n";
+      actionRegister().log(log);
+    } else if(words[0]=="INCLUDE"){
+      assert(words.size()==2);
+      readInputFile(words[1]);
+      continue;
+    } else {
+      Action* action=actionRegister().create(ActionOptions(*this,words));
+      if(!action){
+        log<<"ERROR\n";
+        log<<"I cannot understand line:";
+        for(unsigned i=0;i<words.size();++i) log<<" "<<words[i];
+        log<<"\n";
+        exit(1);
+      };
+      actionSet.push_back(action);
+    };
+  };
+  fclose(fp);
+  log.printf("END FILE: %s\n",str.c_str());
+
+  pilots=actionSet.select<ActionPilot*>();
+}
+
+
+
+void PlumedMain::calc(){
+  prepareCalc();
+  performCalc();
+}
+
+void PlumedMain::prepareDependencies(){
+
+  active=false;
+
+  atoms.setCollectEnergy(false);
+
+// activate all the actions which are on step
+// activation is recursive and enables also the dependencies
+  for(ActionSet::iterator p=actionSet.begin();p!=actionSet.end();p++){
+    (*p)->deactivate();
+    if(Colvar *c=dynamic_cast<Colvar*>(*p)) {
+      if(c->checkIsEnergy()) atoms.setCollectEnergy(true);
+    }
+  }
+
+  for(unsigned i=0;i<pilots.size();++i){
+    if(pilots[i]->onStep()){
+      pilots[i]->activate();
+      active=true;
+     }
+  };
+}
+
+void PlumedMain::shareData(){
+  if(active)atoms.share();
+}
+
+
+void PlumedMain::prepareCalc(){
+  prepareDependencies();
+  shareData();
+}
+
+void PlumedMain::performCalc(){
+
+  if(!active)return;
+  atoms.wait();
+
+// calculate the active actions in order (assuming *backward* dependence)
+  for(ActionSet::iterator p=actionSet.begin();p!=actionSet.end();++p){
+    {
+      ActionWithValue*a=dynamic_cast<ActionWithValue*>(*p);
+      if(a) a->clearInputForces();
+      if(a) a->clearDerivatives();
+    }
+    {
+      ActionAtomistic*a=dynamic_cast<ActionAtomistic*>(*p);
+      if(a) a->clearOutputForces();
+    }
+    if((*p)->isActive()){
+      (*p)->calculate();
+    }
+  }
+  
+// Finally apply them in reverse order
+  for(ActionSet::reverse_iterator p=actionSet.rbegin();p!=actionSet.rend();++p){
+    if((*p)->isActive()) (*p)->apply();
+  }
+
+// And update forces:
+  atoms.updateForces();
+
+}
+
+void PlumedMain::exit(int c){
+  comm.Abort(c);
+}
+
+Log& PlumedMain::getLog(){
+  return log;
+}
+
+
+
+
+
diff --git a/src/PlumedMain.h b/src/PlumedMain.h
new file mode 100644
index 000000000..d3fc307e6
--- /dev/null
+++ b/src/PlumedMain.h
@@ -0,0 +1,135 @@
+#ifndef __PLUMED_PlumedMain_h
+#define __PLUMED_PlumedMain_h
+
+#include <string>
+#include <vector>
+#include <set>
+#include "ActionSet.h"
+#include "Atoms.h"
+#include "PlumedCommunicator.h"
+
+
+// !!!!!!!!!!!!!!!!!!!!!!    DANGER   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
+// THE FOLLOWING ARE DEFINITIONS WHICH ARE NECESSARY FOR DYNAMIC LOADING OF THE PLUMED KERNEL:
+// This section should be consistent with the Plumed.h file.
+// Since the Plumed.h file may be included in host MD codes, **NEVER** MODIFY THE CODE DOWN HERE
+
+/* Generic function pointer */
+typedef void (*plumed_function_pointer)(void);
+
+/* Holder for function pointer */
+typedef struct {
+  plumed_function_pointer p;
+} plumed_function_holder;
+
+// END OF DANGER
+////////////////////////////////////////////////////////////
+
+namespace PLMD {
+
+
+
+class ActionAtomistic;
+class ActionPilot;
+class Log;
+
+/// Main plumed object.
+/// In MD engines this object is not manipulated directly but it is wrapped in
+/// plumed or PLMD::Plumed objects. Its main method is cmd(),
+/// which defines completely the external plumed interface.
+/// It does not contain any static data.
+class PlumedMain
+{
+public:
+/// Communicator for plumed.
+/// Includes all the processors used by plumed.
+  PlumedCommunicator comm;
+
+private:
+/// Flag to avoid double initialization
+  bool  initialized;
+/// Name of MD engine
+  std::string MDEngine;
+/// Log stream
+  Log log;
+
+
+/// Present step number.
+  int step;
+
+/// Condition for plumed to be active.
+/// At every step, PlumedMain is checking if there are Action's requiring some work.
+/// If at least one Action requires some work, this variable is set to true.
+  bool active;
+
+/// Name of the input file
+  std::string plumedDat;
+
+/// Set of actions found in plumed.dat file
+  ActionSet actionSet;
+
+/// Set of Pilot actions.
+/// These are the action the, if they are Pilot::onStep(), can trigger execution
+  std::vector<ActionPilot*> pilots;
+  
+/// Object containing information about atoms (such as positions,...).
+  Atoms     atoms;           // atomic coordinates
+
+public:
+/// Flag to switch off virial calculation (for debug)
+  bool novirial;
+
+public:
+  PlumedMain();
+/// cmd method, accessible with standard Plumed.h interface.
+/// It is called as plumed_cmd() or as PLMD::Plumed::cmd()
+/// It is the interpreter for plumed commands. It basically contains the definition of the plumed interface.
+/// If you want to add a new functionality to the interface between plumed
+/// and an MD engine, this is the right place
+/// Notice that this interface should always keep retro-compatibility
+  void cmd(const char*key,const void*val=NULL);
+  ~PlumedMain(){};
+/// Read an input file.
+/// \param str name of the file
+  void readInputFile(std::string str);
+/// Initialize the object
+  void init();
+/// Prepare the calculation.
+/// Here it is checked which are the active Actions and communication of the relevant atoms is initiated
+  void prepareCalc();
+  void prepareDependencies();
+  void shareData();
+/// Perform the calculation.
+/// Here atoms coordinates are received and all Action's are applied in order
+  void performCalc();
+/// Shortcut for prepareCalc() + performCalc()
+  void calc();
+/// Reference to atoms object
+  Atoms& getAtoms();
+/// Reference to the list of Action's
+  const ActionSet & getActionSet()const;
+/// Referenge to the log stream
+  Log & getLog();
+/// Return the number of the step
+  const int & getStep()const{return step;};
+/// Stop the run
+  void exit(int c=0);
+};
+
+/////
+// FAST INLINE METHODS:
+
+inline
+const ActionSet & PlumedMain::getActionSet()const{
+  return actionSet;
+}
+
+inline
+Atoms& PlumedMain::getAtoms(){
+  return atoms;
+}
+
+}
+
+#endif
+
diff --git a/src/PlumedStatic.cpp b/src/PlumedStatic.cpp
new file mode 100644
index 000000000..d2aaaa8bd
--- /dev/null
+++ b/src/PlumedStatic.cpp
@@ -0,0 +1,8 @@
+/*
+  We here compile a version of Plumed.c which is statically bound to the plumed library,
+  for which it is not possible to redefine the location of plumed kernel at runtime.
+  Since Plumed.c can be compiled with both C and C++, we opt here for C++
+  so as to further check compatibilities
+*/
+#define __PLUMED_STATIC_KERNEL
+#include "Plumed.c"
diff --git a/src/Print.cpp b/src/Print.cpp
new file mode 100644
index 000000000..ca722789c
--- /dev/null
+++ b/src/Print.cpp
@@ -0,0 +1,109 @@
+#include "ActionPilot.h"
+#include "ActionWithArguments.h"
+#include "ActionRegister.h"
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC GENERIC PRINT
+/**
+Print quantities on file
+
+This action is used to periodically print quantities on a file.
+Similarly to Actions of type \ref Bias, it accepts keywords
+ARG and STRIDE to specify which quantities should be printed and
+how frequently. It also accepts a keyword FMT specifying (in printf() style)
+the format for the written numbers and a keyword FILE specifying the
+name of the output file (if omitted, plumed log will be used).
+This directive can be used multiple times to write multiple files,
+perhaps at different stride.
+
+Example
+\verbatim
+DISTANCE ATOMS=0,10 LABEL=distance
+ENERGY   LABEL=energy
+
+# this is writing distance on file COLVAR every 10 steps
+PRINT ARG=distance STRIDE=10  FILE=COLVAR
+# this is writing distance and energy on file COLVAR_ALL every 1000 steps
+PRINT ARG=distance,energy   STRIDE=1000 FILE=COLVAR_ALL
+\endverbatim
+
+*/
+//+ENDPLUMEDOC
+
+class Print :
+public ActionPilot,
+public ActionWithArguments
+{
+  string file;
+  FILE* fp;
+  string fmt;
+public:
+  void calculate();
+  Print(const ActionOptions&);
+  void apply(){};
+  void flush();
+  ~Print();
+};
+
+PLUMED_REGISTER_ACTION(Print,"PRINT")
+
+Print::Print(const ActionOptions&ao):
+Action(ao),
+ActionPilot(ao),
+ActionWithArguments(ao),
+fp(NULL),
+fmt("%f")
+{
+  parse("FILE",file);
+  if(file.length()>0){
+    if(comm.Get_rank()==0){
+      fp=fopen(file.c_str(),"wa");
+      log.printf("  on file %s\n",file.c_str());
+      fprintf(fp,"#! FIELDS time");
+      const std::vector<Value*>& arguments(getArguments());
+      for(unsigned i=0;i<arguments.size();i++){
+        fprintf(fp," %s",arguments[i]->getFullName().c_str());
+      };
+      fprintf(fp,"\n");
+    }
+  } else {
+    log.printf("  on plumed log file\n");
+  }
+  parse("FMT",fmt);
+  fmt=" "+fmt;
+  log.printf("  with format %s\n",fmt.c_str());
+  checkRead();
+}
+
+
+void Print::calculate(){
+    if(comm.Get_rank()!=0)return;
+    if(!fp){
+      log.printf("PRINT:");
+      for(unsigned i=0;i<getNumberOfArguments();i++){
+        log.printf(fmt.c_str(),getArgument(i));
+      };
+      log.printf("\n");
+    } else {
+      fprintf(fp," %f",getTime());
+      for(unsigned i=0;i<getNumberOfArguments();i++){
+        fprintf(fp,fmt.c_str(),getArgument(i));
+      };
+      fprintf(fp,"\n");
+    }
+}
+
+Print::~Print(){
+  if(fp) fclose(fp);
+}
+
+void Print::flush(){
+  if(fp) fflush(fp);
+}
+
+}
+
+
diff --git a/src/Tensor.h b/src/Tensor.h
new file mode 100644
index 000000000..ee43aac57
--- /dev/null
+++ b/src/Tensor.h
@@ -0,0 +1,148 @@
+#ifndef __PLUMED_Tensor_h
+#define __PLUMED_Tensor_h
+
+#include "Vector.h"
+
+namespace PLMD{
+
+/// 3x3 matrix of double.
+/// Useful to simplify syntax. All the methods are inlined for better optimization.
+class Tensor{
+  double d[3][3];
+public:
+/// scale the tensor by a factor s
+  friend Tensor operator*(double,const Tensor&);
+/// initialize the tensor to zero
+  Tensor();
+/// initialize a tensor as an external product of two Vector
+  Tensor(const Vector&v1,const Vector&v2);
+/// access element
+  double & operator() (int i,int j);
+/// access element
+  const double & operator() (int i,int j)const;
+/// set it to zero
+  void clear();
+/// returns the determinant
+  double determinant()const;
+/// return an identity tensor
+  static Tensor identity();
+/// return the matrix inverse
+  Tensor inverse()const;
+  Tensor transpose()const;
+};
+
+/// matrix multiplication
+Tensor matmul(const Tensor&,const Tensor&);
+
+Vector matmul(const Tensor&,const Vector&);
+Vector matmul(const Vector&,const Tensor&);
+
+
+inline
+Tensor::Tensor(){
+  for(int i=0;i<3;i++)for(int j=0;j<3;j++)d[i][j]=0.0;
+}
+
+inline
+Tensor::Tensor(const Vector&v1,const Vector&v2){
+  for(int i=0;i<3;i++)for(int j=0;j<3;j++)d[i][j]=v1[i]*v2[j];
+}
+
+inline
+double & Tensor::operator() (int i,int j){
+  return d[i][j];
+}
+
+inline
+const double & Tensor::operator() (int i,int j)const{
+  return d[i][j];
+}
+
+inline
+void Tensor::clear(){
+  d[0][0]=0.0;
+  d[0][1]=0.0;
+  d[0][2]=0.0;
+  d[1][0]=0.0;
+  d[1][1]=0.0;
+  d[1][2]=0.0;
+  d[2][0]=0.0;
+  d[2][1]=0.0;
+  d[2][2]=0.0;
+}
+
+inline
+double Tensor::determinant()const{
+  return
+     d[0][0]*d[1][1]*d[2][2]
+   + d[0][1]*d[1][2]*d[2][0]
+   + d[0][2]*d[1][0]*d[2][1]
+   - d[0][0]*d[1][2]*d[2][1]
+   - d[0][1]*d[1][0]*d[2][2]
+   - d[0][2]*d[1][1]*d[2][0];
+}
+
+inline
+Tensor Tensor::identity(){
+  Tensor t;
+  t(0,0)=1.0;
+  t(1,1)=1.0;
+  t(2,2)=1.0;
+  return t;
+}
+
+inline
+Tensor Tensor::transpose()const{
+  Tensor t;
+  for(int i=0;i<3;i++)for(int j=0;j<3;j++) t(i,j)=d[j][i];
+  return t;
+}
+
+
+inline
+Tensor operator*(double s,const Tensor&v){
+  Tensor t;
+  for(int i=0;i<3;i++)for(int j=0;j<3;j++) t(i,j)=s*v(i,j);
+  return t;
+}
+
+inline
+Tensor Tensor::inverse()const{
+  Tensor t;
+  double invdet=1.0/determinant();
+  for(int i=0;i<3;i++) for(int j=0;j<3;j++)
+    t(j,i)=invdet*(   d[(i+1)%3][(j+1)%3]*d[(i+2)%3][(j+2)%3]
+                     -d[(i+1)%3][(j+2)%3]*d[(i+2)%3][(j+1)%3]);
+  return t;
+}
+
+inline
+Tensor matmul(const Tensor&a,const Tensor&b){
+  Tensor t;
+  for(int i=0;i<3;i++) for(int j=0;j<3;j++) for(int k=0;k<3;k++) {
+    t(i,j)+=a(i,k)*b(k,j);
+  }
+  return t;
+}
+
+inline
+Vector matmul(const Tensor&a,const Vector&b){
+  Vector t;
+  for(int i=0;i<3;i++) for(int j=0;j<3;j++) t(i)+=a(i,j)*b(j);
+  return t;
+}
+
+inline
+Vector matmul(const Vector&a,const Tensor&b){
+  Vector t;
+  for(int i=0;i<3;i++) for(int j=0;j<3;j++) t(i)+=a(i)*b(i,j);
+  return t;
+}
+
+
+
+
+}
+
+#endif
+
diff --git a/src/Tools.cpp b/src/Tools.cpp
new file mode 100644
index 000000000..361488fb6
--- /dev/null
+++ b/src/Tools.cpp
@@ -0,0 +1,117 @@
+#include "Tools.h"
+#include <cstring>
+#include <assert.h>
+#include <sstream>
+
+using namespace PLMD;
+using namespace std;
+
+#define IMPLEMENT(T) \
+bool Tools::convert(const string & str,T & t){ \
+        istringstream istr(str.c_str()); \
+        bool ok=istr>>t; \
+        if(!ok) return false; \
+        string remaining; \
+        istr>>remaining; \
+        return remaining.length()==0; \
+}
+
+IMPLEMENT(double)
+IMPLEMENT(int)
+
+bool Tools::convert(const string & str,string & t){
+        t=str;
+        return true;
+}
+
+vector<string> Tools::getWords(const string & line,const char* separators){
+  char* ww;
+  char* s3;
+  char* copy;
+  copy= new char[strlen(line.c_str())+1];
+  strcpy(copy,line.c_str());
+  vector<string> words;
+  ww=strtok_r(copy,separators,&s3);
+  if(ww){
+    words.push_back(string(ww));
+    while((ww=strtok_r(NULL,separators,&s3))) words.push_back(string(ww));
+  }
+  delete [] copy;
+  return words;
+}
+
+bool Tools::getParsedLine(FILE* fp,vector<string> & words){
+  string line("");
+  words.clear();
+  bool stat;
+  bool inside=false;
+  while(stat=getline(fp,line)){
+    trimComments(line);
+    trim(line);
+    if(line.length()==0) continue;
+    vector<string> w=getWords(line);
+    if(w.size()==0) continue;
+    if(inside && *(w.begin())=="..."){
+      inside=false;
+      if(w.size()==2) assert(w[1]==words[0]);
+      assert(w.size()<=2);
+      w.clear();
+    }else if(*(w.end()-1)=="..."){
+      inside=true;
+      w.erase(w.end()-1);
+    };
+    for(unsigned i=0;i<w.size();++i) words.push_back(w[i]);
+    if(!inside)break;
+  }
+  if(words.size()>0) return true;
+  return stat;
+}
+
+
+bool Tools::getline(FILE* fp,string & line){
+  line="";
+  const int bufferlength=5;
+  char buffer[bufferlength];
+  bool ret;
+  while(ret=fgets(buffer,bufferlength,fp)){
+    line.append(buffer);
+    if(buffer[strlen(buffer)-1]=='\n') break;
+  };
+  if(*(line.end()-1)=='\n') line.erase(line.end()-1);
+  return ret;
+}
+
+void Tools::trim(string & s){
+  size_t n=s.find_last_not_of(" \t");
+  s=s.substr(0,n+1);
+}
+
+void Tools::trimComments(string & s){
+  size_t n=s.find_first_of("#");
+  s=s.substr(0,n);
+}
+
+bool Tools::getKey(vector<string>& line,const string & key,string & s){
+  s.clear();
+  for(vector<string>::iterator p=line.begin();p!=line.end();++p){
+    if((*p).length()==0) continue;
+    string x=(*p).substr(0,key.length());
+    if(x==key){
+      if((*p).length()==key.length())return false;
+      string tmp=(*p).substr(key.length(),(*p).length());
+      line.erase(p);
+      s=tmp;
+      return true;
+    }
+  };
+  return true;
+}
+
+void Tools::convert(int i,std::string & str){
+        std::ostringstream ostr;
+        ostr<<i;
+        str=ostr.str();
+}
+
+
+
diff --git a/src/Tools.h b/src/Tools.h
new file mode 100644
index 000000000..20a18d9ce
--- /dev/null
+++ b/src/Tools.h
@@ -0,0 +1,103 @@
+#ifndef __PLUMED_Tools_h
+#define __PLUMED_Tools_h
+
+#include <vector>
+#include <string>
+#include <cstdio>
+#include <cmath>
+#include <limits>
+
+namespace PLMD{
+
+const double epsilon(std::numeric_limits<double>::epsilon());
+
+/// Empty class which just contains several (static) tools
+class Tools{
+public:
+  static std::vector<std::string> getWords(const std::string & line,const char* sep=" \t\n");
+  static std::vector<std::string> getWords(const std::string & line,const char* sep,const char* quote);
+  static bool getline(std::FILE* fp,std::string & line);
+  static bool getParsedLine(std::FILE* fp,std::vector<std::string> & line);
+  static bool convert(const std::string & str,double & t);
+  static bool convert(const std::string & str,int & t);
+  static bool convert(const std::string & str,std::string & t);
+  static void convert(int i,std::string & str);
+  static void trim(std::string & s);
+  static void trimComments(std::string & s);
+
+
+  static double pbc(double);
+
+  static bool getKey(std::vector<std::string>& line,const std::string & key,std::string & s);
+
+  template <class T>
+  static bool parse(std::vector<std::string>&line,const std::string&key,T&val);
+  template <class T>
+  static bool parseVector(std::vector<std::string>&line,const std::string&key,std::vector<T>&val);
+  static bool parseFlag(std::vector<std::string>&line,const std::string&key,bool&val);
+
+  template <class T>
+  static double getArray(void*,int,int,double);
+  template <class T>
+  static double getArray(void*,void*,void*,int,int,double);
+};
+
+template <class T>
+bool Tools::parse(std::vector<std::string>&line,const std::string&key,T&val){
+  std::string s;
+  if(!getKey(line,key+"=",s)) return false;
+  if(s.length()>0 && !convert(s,val))return false;
+  return true;
+}
+
+template <class T>
+bool Tools::parseVector(std::vector<std::string>&line,const std::string&key,std::vector<T>&val){
+  std::string s;
+  if(!getKey(line,key+"=",s)) return false;
+  if(s.length()==0) return true;
+  val.clear();
+  std::vector<std::string> words=getWords(s,",");
+  for(unsigned i=0;i<words.size();++i){
+    T v;
+    if(!convert(words[i],v))return false;
+    val.push_back(v);
+  }
+  return true;
+}
+
+inline
+bool Tools::parseFlag(std::vector<std::string>&line,const std::string&key,bool&val){
+  std::string s;
+  for(std::vector<std::string>::iterator p=line.begin();p!=line.end();++p){
+    if(key==*p){
+      val=true;
+      line.erase(p);
+      return true;
+    }
+  }
+  return true;
+}
+
+template <class T>
+double Tools::getArray(void*p,int iat,int idim,double scale){
+  return (static_cast<T*>(p))[3*iat+idim]*scale;
+}
+
+template <class T>
+double Tools::getArray(void*px,void*py,void*pz,int iat,int idim,double scale){
+  if(idim==0) return (static_cast<T*>(px))[iat]*scale;
+  if(idim==1) return (static_cast<T*>(py))[iat]*scale;
+              return (static_cast<T*>(pz))[iat]*scale;
+}
+
+inline
+double Tools::pbc(double x){
+  return x-floor(x+0.5);
+}
+
+
+
+}
+
+#endif
+
diff --git a/src/Units.cpp b/src/Units.cpp
new file mode 100644
index 000000000..229dcb133
--- /dev/null
+++ b/src/Units.cpp
@@ -0,0 +1,133 @@
+#include "ActionSetup.h"
+#include "ActionRegister.h"
+#include "PlumedMain.h"
+
+using namespace std;
+
+namespace PLMD{
+
+//+PLUMEDOC GENERIC UNITS
+/**
+Sets internal units.
+
+This Action is used to set internal units for PLUMED. It accepts
+the keywords LENGTH, TIME and ENERGY, fixing the units of
+the corresponding quantity. All the other quantities are derived,
+e.g. forces are measured in ENERGY/LENGTH. The following
+values are accepted:
+- LENGTH
+  - nm (default)
+  - A
+  - um
+- ENERGY
+  - kj/mol (default)
+  - j/mol
+  - kcal/mol
+- TIME
+  - ps (default)
+  - ns
+  - fs
+
+This directive needs to be used at the beginning of the plumed.dat file,
+before any other directive which may take as input a quantity measured
+in the aforementioned units.
+
+\verbatim
+# this is using nm - kj/mol - fs
+UNITS LENGTH=nm TIME=fs
+\endverbatim
+
+If a number is found, it is interpreted as a multiplication
+with respect to the default
+\verbatim
+# this is using nm - kj/mol - fs
+UNITS LENGTH=nm TIME=0.001
+\endverbatim
+
+
+*/
+//+ENDPLUMEDOC
+
+class Units :
+  public ActionSetup
+{
+public:
+  Units(const ActionOptions&ao);
+};
+
+PLUMED_REGISTER_ACTION(Units,"UNITS")
+
+Units::Units(const ActionOptions&ao):
+Action(ao),
+ActionSetup(ao)
+{
+  double length=1.0;
+  double energy=1.0;
+  double time=1.0;
+
+  std::string s;
+  bool numeric;
+
+  s="nm";
+  numeric=false;
+  parse("LENGTH",s);
+  if(s=="nm"){
+    length=1.0;
+  } else if(s=="A"){
+    length=0.1;
+  } else if(s=="um"){
+    length=1000.0;
+  } else {
+    length=-1.0;
+    Tools::convert(s,length);
+    numeric=true;
+    assert(length>0.0);
+  }
+  if(!numeric) log.printf("  length: %s\n",s.c_str());
+  else         log.printf("  length: %f nm\n",length);
+
+  s="kj/mol";
+  numeric=false;
+  parse("ENERGY",s);
+  if(s=="kj/mol"){
+    energy=1.0;
+  } else if(s=="kcal/mol"){
+    energy=4.184;
+  } else if(s=="j/mol"){
+    energy=0.001;
+  } else {
+    energy=-1.0;
+    Tools::convert(s,energy);
+    numeric=true;
+    assert(energy>0.0);
+  }
+  if(!numeric) log.printf("  energy: %s\n",s.c_str());
+  else         log.printf("  energy: %f kj/mol\n",energy);
+
+  s="ps";
+  numeric=false;
+  parse("TIME",s);
+  if(s=="ps"){
+    time=1.0;
+  } else if(s=="ns"){
+    time=1000.0;
+  } else if(s=="fs"){
+    time=0.001;
+  } else {
+    time=-1.0;
+    Tools::convert(s,time);
+    numeric=true;
+    assert(time>0.0);
+  }
+  if(!numeric) log.printf("  time: %s\n",s.c_str());
+  else         log.printf("  energy: %f ns\n",time);
+
+  checkRead();
+
+  plumed.getAtoms().setInternalLengthUnits(length);
+  plumed.getAtoms().setInternalEnergyUnits(energy);
+  plumed.getAtoms().setInternalTimeUnits(time);
+}
+
+}
+
diff --git a/src/Value.cpp b/src/Value.cpp
new file mode 100644
index 000000000..f95b594e0
--- /dev/null
+++ b/src/Value.cpp
@@ -0,0 +1,15 @@
+#include "Value.h"
+#include "ActionWithValue.h"
+
+using namespace PLMD;
+
+const std::string Value::getFullName()const{
+  return action.getLabel()+"."+name;
+}
+
+void Value::enableDerivatives()
+{
+  deriv=true;derivatives.resize(action.getNumberOfParameters());
+}
+
+
diff --git a/src/Value.h b/src/Value.h
new file mode 100644
index 000000000..b8b853a92
--- /dev/null
+++ b/src/Value.h
@@ -0,0 +1,47 @@
+#ifndef __PLUMED_Value_h
+#define __PLUMED_Value_h
+
+#include <vector>
+#include <string>
+#include <cassert>
+
+
+namespace PLMD{
+
+class ActionWithValue;
+
+/// Class containing a value which can be addressed by PLMD::ActionWithArguments.
+/// It also contains the derivative of this value with respect to
+/// an arbitrary number of parameters.
+/// Typically, an object of type PLMD::ActionWithValue will contain one or
+/// more objects of type PLUMD::Value, one per component.
+class Value{
+  ActionWithValue&action;
+  double value;
+  double inputForce;
+  std::vector<double> derivatives;
+  std::string name;
+  bool deriv;
+public:
+  void set(double v){value=v;}
+  void setValue(double v){value=v;}
+  double getValue()const{return value;}
+  const std::string& getName()const{return name;}
+  const std::string getFullName()const;
+  Value(ActionWithValue&action,const std::string& name):action(action),value(0.0),name(name),deriv(false){};
+  void enableDerivatives();
+  bool hasDerivatives(){return deriv;};
+  void setNumberOfParameters(int n){if(deriv)derivatives.resize(n);}
+  void setDerivatives(int i,double d){derivatives[i]=d;}
+  void clearInputForce(){inputForce=0.0;}
+  void clearDerivatives(){derivatives.assign(derivatives.size(),0.0);}
+  double  getForce()const{return inputForce;}
+  void  addForce(double f){assert(hasDerivatives());inputForce+=f;}
+  const std::vector<double> &  getDerivatives()const{return derivatives;}
+  ActionWithValue& getAction(){return action;};
+};
+
+}
+
+#endif
+
diff --git a/src/Vector.cpp b/src/Vector.cpp
new file mode 100644
index 000000000..c8ab2b141
--- /dev/null
+++ b/src/Vector.cpp
@@ -0,0 +1,9 @@
+#include "Vector.h"
+#include <cmath>
+
+using namespace PLMD;
+
+double Vector::modulo()const{
+  return sqrt(modulo2());
+}
+
diff --git a/src/Vector.h b/src/Vector.h
new file mode 100644
index 000000000..df89bd89a
--- /dev/null
+++ b/src/Vector.h
@@ -0,0 +1,110 @@
+#ifndef __PLUMED_Vector_h
+#define __PLUMED_Vector_h
+
+namespace PLMD{
+
+/// 3d vector of double.
+/// Useful to simplify syntax. All the methods are inlined for better optimization.
+/// Accepts both [] and () syntax for access.
+class Vector{
+  double d[3];
+public:
+/// return v2-v1
+  friend Vector delta(const Vector&v1,const Vector&v2);
+/// return s*v
+  friend Vector operator*(double,const Vector&);
+/// return v1+v2
+  friend Vector operator+(const Vector&,const Vector&);
+/// array-like access [i]
+  double & operator[](int i);
+/// array-like access [i]
+  const double & operator[](int i)const;
+/// parenthesis access (i)
+  double & operator()(int i);
+/// parenthesis access (i)
+  const double & operator()(int i)const;
+/// set it to zero
+  void clear();
+/// create it with components x0, x1 and x2
+  Vector(double x0,double x1,double x2);
+/// create it null
+  Vector();
+/// compute the squared modulo
+  double modulo2()const;
+/// compute the modulo
+  double modulo()const;
+/// scale the vector by a factor s
+  void scale(double s);
+};
+
+inline
+double & Vector::operator[](int i){
+return d[i];
+}
+
+inline
+const double & Vector::operator[](int i)const{
+  return d[i];
+}
+
+inline
+double & Vector::operator()(int i){
+  return d[i];
+}
+
+inline
+const double & Vector::operator()(int i)const{
+  return d[i];
+}
+
+inline
+Vector delta(const Vector&v1,const Vector&v2){
+  return Vector(v2[0]-v1[0],v2[1]-v1[1],v2[2]-v1[2]);
+}
+
+inline
+Vector operator*(double s,const Vector&v){
+  return Vector(s*v[0],s*v[1],s*v[2]);
+}
+
+inline
+void Vector::clear(){
+  d[0]=0.0;
+  d[1]=0.0;
+  d[2]=0.0;
+}
+
+inline
+Vector::Vector(double x0,double x1,double x2){
+  d[0]=x0;
+  d[1]=x1;
+  d[2]=x2;
+}
+
+inline
+Vector::Vector(){
+  d[0]=0.0;
+  d[1]=0.0;
+  d[2]=0.0;
+}
+
+inline
+double Vector::modulo2()const{
+  return d[0]*d[0]+d[1]*d[1]+d[2]*d[2];
+}
+
+inline
+void Vector::scale(double s){
+  d[0]*=s;d[1]*=s;d[2]*=s;
+}
+
+inline
+Vector operator+(const Vector&v1,const Vector&v2){
+  return Vector(v1[0]+v2[0],v1[1]+v2[1],v1[2]+v2[2]);
+}
+
+}
+
+
+#endif
+
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 000000000..a8e3b3fed
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,15 @@
+-include ../Makefile.conf
+
+SUBDIRS = link simplemd
+
+.PHONY: all clean $(SUBDIRS)
+
+all: $(SUBDIRS)
+
+$(SUBDIRS):
+	$(MAKE) -C $@
+
+clean:
+	cd link && make clean
+	cd simplemd && make clean
+
diff --git a/test/amber/.gitignore b/test/amber/.gitignore
new file mode 100644
index 000000000..e12bdc2ee
--- /dev/null
+++ b/test/amber/.gitignore
@@ -0,0 +1,6 @@
+*
+!amber_input
+!system.inpcrd
+!system.prmtop
+!plumed.dat
+!.gitignore
diff --git a/test/amber/amber_input b/test/amber/amber_input
new file mode 100644
index 000000000..fe7da236d
--- /dev/null
+++ b/test/amber/amber_input
@@ -0,0 +1,11 @@
+METADYNAMICS TEST 
+&cntrl
+ imin=0, irest=0, ntx=1, ig=71278 , 
+ nstlim=1001, dt=0.0002,
+ ntc=1, ntf=1,
+ ntt=3, gamma_ln=5 , 
+ tempi=300.0, temp0=300.0,
+ ntpr=200, ntwx=0,
+ ntb=0, igb=0,
+ cut=999., plumed=1 , plumedfile='plumed.dat'
+/
diff --git a/test/amber/plumed.dat b/test/amber/plumed.dat
new file mode 100644
index 000000000..c0be88445
--- /dev/null
+++ b/test/amber/plumed.dat
@@ -0,0 +1,4 @@
+DISTANCE ATOMS=0,10 LABEL=dist
+ENERGY
+RESTRAINT ARG=dist KAPPA=10000 AT=0.3
+PRINT ARG=* FILE=COLVAR
diff --git a/test/amber/system.inpcrd b/test/amber/system.inpcrd
new file mode 100644
index 000000000..b732823e3
--- /dev/null
+++ b/test/amber/system.inpcrd
@@ -0,0 +1,13 @@
+ACE
+    22
+   2.0177833   1.0353295   0.0542168   1.9998067   2.1250666   0.0538082
+   1.4254166   2.4843904   0.9072400   1.5326313   2.4823206  -0.8638698
+   3.4222907   2.6597886   0.1389017   4.3607216   1.8984493   0.3631598
+   3.5879191   3.9603571  -0.1138393   2.7859198   4.5436605  -0.3046603
+   4.8919526   4.5905945  -0.0675145   5.4432975   4.2337999   0.8026422
+   5.6616692   4.2349396  -1.3354247   5.1089564   4.5854833  -2.2068147
+   6.6419078   4.7111339  -1.3103306   5.7851258   3.1535202  -1.3931851
+   4.7222411   6.1004128   0.0215211   3.6035082   6.6057631  -0.0398724
+   5.8431179   6.8242650   0.0735169   6.7415384   6.3635968   0.0875836
+   5.8209701   8.2733497   0.0569928   4.7879086   8.6215931   0.0518138
+   6.3303031   8.6556759   0.9417330   6.3290771   8.6329497  -0.8383083
diff --git a/test/amber/system.prmtop b/test/amber/system.prmtop
new file mode 100644
index 000000000..702853ce1
--- /dev/null
+++ b/test/amber/system.prmtop
@@ -0,0 +1,232 @@
+%VERSION  VERSION_STAMP = V0001.000  DATE = 05/31/08  11:43:33                  
+%FLAG TITLE                                                                     
+%FORMAT(20a4)                                                                   
+ACE                                                                             
+%FLAG POINTERS                                                                  
+%FORMAT(10I8)                                                                   
+      22       7      12       9      25      11      42      24       0       0
+      99       3       9      11      24       8      16      19       7       0
+       0       0       0       0       0       0       0       0      10       0
+       0
+%FLAG ATOM_NAME                                                                 
+%FORMAT(20a4)                                                                   
+HH31CH3 HH32HH33C   O   N   H   CA  HA  CB  HB1 HB2 HB3 C   O   N   H   CH3 HH31
+HH32HH33
+%FLAG CHARGE                                                                    
+%FORMAT(5E16.8)                                                                 
+  2.04636429E+00 -6.67300626E+00  2.04636429E+00  2.04636429E+00  1.08823576E+01
+ -1.03484442E+01 -7.57501011E+00  4.95464337E+00  6.14091510E-01  1.49969529E+00
+ -3.32556975E+00  1.09880469E+00  1.09880469E+00  1.09880469E+00  1.08841798E+01
+ -1.03484442E+01 -7.57501011E+00  4.95464337E+00 -2.71512270E+00  1.77849648E+00
+  1.77849648E+00  1.77849648E+00
+%FLAG MASS                                                                      
+%FORMAT(5E16.8)                                                                 
+  1.00800000E+00  1.20100000E+01  1.00800000E+00  1.00800000E+00  1.20100000E+01
+  1.60000000E+01  1.40100000E+01  1.00800000E+00  1.20100000E+01  1.00800000E+00
+  1.20100000E+01  1.00800000E+00  1.00800000E+00  1.00800000E+00  1.20100000E+01
+  1.60000000E+01  1.40100000E+01  1.00800000E+00  1.20100000E+01  1.00800000E+00
+  1.00800000E+00  1.00800000E+00
+%FLAG ATOM_TYPE_INDEX                                                           
+%FORMAT(10I8)                                                                   
+       1       2       1       1       3       4       5       6       2       7
+       2       1       1       1       3       4       5       6       2       7
+       7       7
+%FLAG NUMBER_EXCLUDED_ATOMS                                                     
+%FORMAT(10I8)                                                                   
+       6       7       4       3       7       3      10       4      10       7
+       6       3       2       1       7       3       5       4       3       2
+       1       1
+%FLAG NONBONDED_PARM_INDEX                                                      
+%FORMAT(10I8)                                                                   
+       1       2       4       7      11      16      22       2       3       5
+       8      12      17      23       4       5       6       9      13      18
+      24       7       8       9      10      14      19      25      11      12
+      13      14      15      20      26      16      17      18      19      20
+      21      27      22      23      24      25      26      27      28
+%FLAG RESIDUE_LABEL                                                             
+%FORMAT(20a4)                                                                   
+ACE ALA NME 
+%FLAG RESIDUE_POINTER                                                           
+%FORMAT(10I8)                                                                   
+       1       7      17
+%FLAG BOND_FORCE_CONSTANT                                                       
+%FORMAT(5E16.8)                                                                 
+  5.70000000E+02  4.90000000E+02  3.40000000E+02  3.17000000E+02  3.40000000E+02
+  3.10000000E+02  4.34000000E+02  3.37000000E+02
+%FLAG BOND_EQUIL_VALUE                                                          
+%FORMAT(5E16.8)                                                                 
+  1.22900000E+00  1.33500000E+00  1.09000000E+00  1.52200000E+00  1.09000000E+00
+  1.52600000E+00  1.01000000E+00  1.44900000E+00
+%FLAG ANGLE_FORCE_CONSTANT                                                      
+%FORMAT(5E16.8)                                                                 
+  8.00000000E+01  5.00000000E+01  5.00000000E+01  5.00000000E+01  3.50000000E+01
+  8.00000000E+01  7.00000000E+01  6.30000000E+01  5.00000000E+01  5.00000000E+01
+  5.00000000E+01  5.00000000E+01  5.00000000E+01  8.00000000E+01  6.30000000E+01
+  3.50000000E+01
+%FLAG ANGLE_EQUIL_VALUE                                                         
+%FORMAT(5E16.8)                                                                 
+  2.14501057E+00  2.09439600E+00  2.12755727E+00  1.91113635E+00  1.91113635E+00
+  2.10137732E+00  2.03505478E+00  1.93906163E+00  1.91113635E+00  1.91113635E+00
+  1.91113635E+00  2.06018753E+00  1.91113635E+00  1.91462701E+00  1.92160833E+00
+  1.91113635E+00
+%FLAG DIHEDRAL_FORCE_CONSTANT                                                   
+%FORMAT(5E16.8)                                                                 
+  2.00000000E+00  2.50000000E+00  0.00000000E+00  2.00000000E+00  4.00000000E-01
+  0.00000000E+00  0.00000000E+00  2.70000000E-01  4.20000000E-01  8.00000000E-01
+  8.00000000E-02  1.55555556E-01  2.00000000E-01  2.00000000E-01  4.50000000E-01
+  1.58000000E+00  5.50000000E-01  1.05000000E+01  1.10000000E+00
+%FLAG DIHEDRAL_PERIODICITY                                                      
+%FORMAT(5E16.8)                                                                 
+  1.00000000E+00  2.00000000E+00  2.00000000E+00  2.00000000E+00  3.00000000E+00
+  4.00000000E+00  1.00000000E+00  2.00000000E+00  3.00000000E+00  1.00000000E+00
+  3.00000000E+00  3.00000000E+00  1.00000000E+00  2.00000000E+00  1.00000000E+00
+  2.00000000E+00  3.00000000E+00  2.00000000E+00  2.00000000E+00
+%FLAG DIHEDRAL_PHASE                                                            
+%FORMAT(5E16.8)                                                                 
+  0.00000000E+00  3.14159400E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00
+  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00
+  3.14159400E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  3.14159400E+00
+  3.14159400E+00  3.14159400E+00  3.14159400E+00  3.14159400E+00
+%FLAG SOLTY                                                                     
+%FORMAT(5E16.8)                                                                 
+  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00  0.00000000E+00
+  0.00000000E+00  0.00000000E+00
+%FLAG LENNARD_JONES_ACOEF                                                       
+%FORMAT(5E16.8)                                                                 
+  7.51607703E+03  9.71708117E+04  1.04308023E+06  8.61541883E+04  9.24822270E+05
+  8.19971662E+05  5.44261042E+04  6.47841731E+05  5.74393458E+05  3.79876399E+05
+  8.96776989E+04  9.95480466E+05  8.82619071E+05  6.06829342E+05  9.44293233E+05
+  1.07193646E+02  2.56678134E+03  2.27577561E+03  1.02595236E+03  2.12601181E+03
+  1.39982777E-01  4.98586848E+03  6.78771368E+04  6.01816484E+04  3.69471530E+04
+  6.20665997E+04  5.94667300E+01  3.25969625E+03
+%FLAG LENNARD_JONES_BCOEF                                                       
+%FORMAT(5E16.8)                                                                 
+  2.17257828E+01  1.26919150E+02  6.75612247E+02  1.12529845E+02  5.99015525E+02
+  5.31102864E+02  1.11805549E+02  6.26720080E+02  5.55666448E+02  5.64885984E+02
+  1.36131731E+02  7.36907417E+02  6.53361429E+02  6.77220874E+02  8.01323529E+02
+  2.59456373E+00  2.06278363E+01  1.82891803E+01  1.53505284E+01  2.09604198E+01
+  9.37598976E-02  1.76949863E+01  1.06076943E+02  9.40505980E+01  9.21192136E+01
+  1.13252061E+02  1.93248820E+00  1.43076527E+01
+%FLAG BONDS_INC_HYDROGEN                                                        
+%FORMAT(10I8)                                                                   
+       3       6       3       3       9       3       0       3       3      30
+      33       3      30      36       3      30      39       3      24      27
+       5      18      21       7      54      57       5      54      60       5
+      54      63       5      48      51       7
+%FLAG BONDS_WITHOUT_HYDROGEN                                                    
+%FORMAT(10I8)                                                                   
+      12      15       1      12      18       2       3      12       4      42
+      45       1      42      48       2      24      30       6      24      42
+       4      18      24       8      48      54       8
+%FLAG ANGLES_INC_HYDROGEN                                                       
+%FORMAT(10I8)                                                                   
+      12      18      21       2       9       3      12       4       6       3
+       9       5       6       3      12       4       0       3       6       5
+       0       3       9       5       0       3      12       4      42      48
+      51       2      36      30      39       5      33      30      36       5
+      33      30      39       5      27      24      30       9      27      24
+      42      10      24      30      33      11      24      30      36      11
+      24      30      39      11      21      18      24      12      18      24
+      27      13      60      54      63      16      57      54      60      16
+      57      54      63      16      51      48      54      12      48      54
+      57      13      48      54      60      13      48      54      63      13
+%FLAG ANGLES_WITHOUT_HYDROGEN                                                   
+%FORMAT(10I8)                                                                   
+      15      12      18       1      12      18      24       3       3      12
+      15       6       3      12      18       7      45      42      48       1
+      42      48      54       3      30      24      42       8      24      42
+      45       6      24      42      48       7      18      24      30      14
+      18      24      42      15
+%FLAG DIHEDRALS_INC_HYDROGEN                                                    
+%FORMAT(10I8)                                                                   
+      15      12      18      21       1      15      12     -18      21       2
+      12      18      24      27       3       9       3      12      15      10
+       9       3     -12      15       3       9       3     -12      15      11
+       9       3      12      18       3       6       3      12      15      10
+       6       3     -12      15       3       6       3     -12      15      11
+       6       3      12      18       3       3      12      18      21       2
+       0       3      12      15      10       0       3     -12      15       3
+       0       3     -12      15      11       0       3      12      18       3
+      45      42      48      51       1      45      42     -48      51       2
+      42      48      54      57       3      42      48      54      60       3
+      42      48      54      63       3      39      30      24      42      12
+      36      30      24      42      12      33      30      24      42      12
+      27      24      30      33      12      27      24      30      36      12
+      27      24      30      39      12      27      24      42      45      10
+      27      24     -42      45      11      27      24      42      48       3
+      24      42      48      51       2      21      18      24      27       3
+      21      18      24      30       3      21      18      24      42       3
+      18      24      30      33      12      18      24      30      36      12
+      18      24      30      39      12      51      48      54      57       3
+      51      48      54      60       3      51      48      54      63       3
+      12      24     -18     -21      19      42      54     -48     -51      19
+%FLAG DIHEDRALS_WITHOUT_HYDROGEN                                                
+%FORMAT(10I8)                                                                   
+      15      12      18      24       2      12      18      24      30       1
+      12      18     -24      30       4      12      18     -24      30       5
+      12      18     -24      30       6      12      18      24      42       7
+      12      18     -24      42       8      12      18     -24      42       9
+      12      18     -24      42       6       3      12      18      24       2
+      45      42      48      54       2      30      24      42      45       3
+      30      24      42      48      13      30      24     -42      48      14
+      30      24     -42      48       5      30      24     -42      48       6
+      24      42      48      54       2      18      24      42      45       3
+      18      24      42      48      15      18      24     -42      48      16
+      18      24     -42      48      17      18      24     -42      48       6
+       3      18     -12     -15      18      24      48     -42     -45      18
+%FLAG EXCLUDED_ATOMS_LIST                                                       
+%FORMAT(10I8)                                                                   
+       2       3       4       5       6       7       3       4       5       6
+       7       8       9       4       5       6       7       5       6       7
+       6       7       8       9      10      11      15       7       8       9
+       8       9      10      11      12      13      14      15      16      17
+       9      10      11      15      10      11      12      13      14      15
+      16      17      18      19      11      12      13      14      15      16
+      17      12      13      14      15      16      17      13      14      15
+      14      15      15      16      17      18      19      20      21      22
+      17      18      19      18      19      20      21      22      19      20
+      21      22      20      21      22      21      22      22       0
+%FLAG HBOND_ACOEF                                                               
+%FORMAT(5E16.8)                                                                 
+
+%FLAG HBOND_BCOEF                                                               
+%FORMAT(5E16.8)                                                                 
+
+%FLAG HBCUT                                                                     
+%FORMAT(5E16.8)                                                                 
+
+%FLAG AMBER_ATOM_TYPE                                                           
+%FORMAT(20a4)                                                                   
+HC  CT  HC  HC  C   O   N   H   CT  H1  CT  HC  HC  HC  C   O   N   H   CT  H1  
+H1  H1  
+%FLAG TREE_CHAIN_CLASSIFICATION                                                 
+%FORMAT(20a4)                                                                   
+M   M   E   E   M   E   M   E   M   E   3   E   E   E   M   E   M   E   M   E   
+E   E   
+%FLAG JOIN_ARRAY                                                                
+%FORMAT(10I8)                                                                   
+       0       0       0       0       0       0       0       0       0       0
+       0       0       0       0       0       0       0       0       0       0
+       0       0
+%FLAG IROTAT                                                                    
+%FORMAT(10I8)                                                                   
+       0       0       0       0       0       0       0       0       0       0
+       0       0       0       0       0       0       0       0       0       0
+       0       0
+%FLAG RADIUS_SET                                                                
+%FORMAT(1a80)                                                                   
+modified Bondi radii (mbondi)                                                   
+%FLAG RADII                                                                     
+%FORMAT(5E16.8)                                                                 
+  1.30000000E+00  1.70000000E+00  1.30000000E+00  1.30000000E+00  1.70000000E+00
+  1.50000000E+00  1.55000000E+00  1.30000000E+00  1.70000000E+00  1.30000000E+00
+  1.70000000E+00  1.30000000E+00  1.30000000E+00  1.30000000E+00  1.70000000E+00
+  1.50000000E+00  1.55000000E+00  1.30000000E+00  1.70000000E+00  1.30000000E+00
+  1.30000000E+00  1.30000000E+00
+%FLAG SCREEN                                                                    
+%FORMAT(5E16.8)                                                                 
+  8.50000000E-01  7.20000000E-01  8.50000000E-01  8.50000000E-01  7.20000000E-01
+  8.50000000E-01  7.90000000E-01  8.50000000E-01  7.20000000E-01  8.50000000E-01
+  7.20000000E-01  8.50000000E-01  8.50000000E-01  8.50000000E-01  7.20000000E-01
+  8.50000000E-01  7.90000000E-01  8.50000000E-01  7.20000000E-01  8.50000000E-01
+  8.50000000E-01  8.50000000E-01
diff --git a/test/gromacs/.gitignore b/test/gromacs/.gitignore
new file mode 100644
index 000000000..ed46248f4
--- /dev/null
+++ b/test/gromacs/.gitignore
@@ -0,0 +1,6 @@
+*
+!grompp.mdp
+!conf.gro
+!topol.top
+!plumed.dat
+!.gitignore
diff --git a/test/gromacs/conf.gro b/test/gromacs/conf.gro
new file mode 100644
index 000000000..b50d3e2c5
--- /dev/null
+++ b/test/gromacs/conf.gro
@@ -0,0 +1,652 @@
+Protein in water
+  649
+    1ACE    CH3    1   1.395   0.076   0.303 -0.5810 -0.4924  0.0391
+    1ACE   HH31    2   1.313   0.018   0.262  0.2172 -2.6470  1.3107
+    1ACE   HH32    3   1.453   0.126   0.226 -2.6835  0.3294 -1.0497
+    1ACE   HH33    4   1.458   0.004   0.356  1.8282  1.1665 -0.4057
+    1ACE      C    5   1.357   0.171   0.416  0.0337 -0.5699  0.3099
+    1ACE      O    6   1.244   0.184   0.460 -0.1333 -0.2640 -0.2087
+    2ALA      N    7   1.456   0.250   0.459 -0.4673  0.3285 -0.1890
+    2ALA      H    8   1.549   0.244   0.420 -0.4960 -1.3002 -0.0375
+    2ALA     CA    9   1.439   0.352   0.561 -0.5349 -0.1719  0.2994
+    2ALA     HA   10   1.385   0.316   0.648 -0.0171 -0.7928  0.3660
+    2ALA     CB   11   1.576   0.397   0.613 -0.5920  0.2975  0.0363
+    2ALA    HB1   12   1.636   0.314   0.649  1.5040  1.7138 -0.0305
+    2ALA    HB2   13   1.636   0.434   0.530  0.3715 -0.6825  0.2893
+    2ALA    HB3   14   1.574   0.461   0.701 -0.4708 -1.3463  1.2681
+    2ALA      C   15   1.375   0.479   0.507  0.2320  0.0944  0.0067
+    2ALA      O   16   1.328   0.573   0.570  0.2877  0.1064  0.0239
+    3NAC      N   17   1.361   0.489   0.374 -0.0686  0.1189  0.0416
+    3NAC      H   18   1.422   0.419   0.332 -0.2524  0.0522 -0.1064
+    3NAC    CH3   19   1.284   0.582   0.295 -0.4648 -0.3751 -0.1488
+    3NAC   HH31   20   1.259   0.675   0.346  0.8612 -0.5690  0.9097
+    3NAC   HH32   21   1.352   0.610   0.214 -1.0347  2.4348  0.2432
+    3NAC   HH33   22   1.193   0.542   0.250 -0.2661  0.4329 -1.3265
+    4SOL     OW   23   0.601   0.389   0.219  0.4328 -0.0094 -0.2171
+    4SOL    HW1   24   0.648   0.462   0.178  1.0458 -0.2789 -0.0095
+    4SOL    HW2   25   0.563   0.341   0.145  2.7889 -1.3555 -0.6932
+    5SOL     OW   26   1.624   1.747   1.860  0.3011 -0.0959 -0.9133
+    5SOL    HW1   27   1.697   1.783   1.912  0.0600 -0.3559 -0.4003
+    5SOL    HW2   28   1.666   1.714   1.781  0.5887  0.8936 -1.1902
+    6SOL     OW   29   0.506   0.057   0.281 -0.5106 -0.6150 -0.0615
+    6SOL    HW1   30   0.518  -0.014   0.344  1.5419  0.2809  0.6323
+    6SOL    HW2   31   0.594   0.075   0.248 -1.0909  1.1100 -0.7698
+    7SOL     OW   32   0.756   0.086   0.134  0.9247 -0.2288 -0.5202
+    7SOL    HW1   33   0.780  -0.007   0.141 -0.7854 -0.6032  1.0074
+    7SOL    HW2   34   0.839   0.132   0.140  1.9256 -1.6657 -2.3114
+    8SOL     OW   35   0.793   0.668   0.345 -0.3163 -0.4667 -0.7345
+    8SOL    HW1   36   0.829   0.604   0.407 -0.7251 -0.1866 -0.2022
+    8SOL    HW2   37   0.799   0.624   0.260  1.3029 -0.4247 -0.6803
+    9SOL     OW   38   0.448   1.243   1.246  0.1594 -0.1188 -0.0978
+    9SOL    HW1   39   0.453   1.301   1.322  0.2338  0.0416 -0.2300
+    9SOL    HW2   40   0.529   1.191   1.250 -0.3010 -0.8077  0.5020
+   10SOL     OW   41   1.477   1.311   0.950 -0.0745  0.0419  0.4465
+   10SOL    HW1   42   1.402   1.366   0.925  0.2388  0.1665 -0.2275
+   10SOL    HW2   43   1.552   1.371   0.946 -0.0635  0.1704  2.1023
+   11SOL     OW   44   1.173   0.766   0.978  0.1154 -0.4302 -0.1284
+   11SOL    HW1   45   1.136   0.853   0.961  3.3277  0.8931 -1.0268
+   11SOL    HW2   46   1.134   0.710   0.911 -3.4316 -0.2829  1.5811
+   12SOL     OW   47   0.572   0.553   0.922 -0.1742 -0.7233 -0.1439
+   12SOL    HW1   48   0.490   0.597   0.942 -0.5892 -2.5031  2.8309
+   12SOL    HW2   49   0.546   0.464   0.897  0.6566 -2.2212  3.5366
+   13SOL     OW   50   0.723   1.509   0.511 -0.3090  0.4945 -0.3758
+   13SOL    HW1   51   0.746   1.596   0.543 -2.5021  0.5534  1.2725
+   13SOL    HW2   52   0.630   1.499   0.534 -0.3115 -1.9928 -1.1842
+   14SOL     OW   53   0.930   0.010   0.870  0.2867 -0.7696  0.3366
+   14SOL    HW1   54   1.010   0.062   0.862  0.1515 -0.7330 -0.8460
+   14SOL    HW2   55   0.909  -0.016   0.781 -0.8513 -1.0570  0.6778
+   15SOL     OW   56   0.812   1.183   0.926 -0.3575 -0.1102  0.2501
+   15SOL    HW1   57   0.831   1.091   0.946  0.5085  0.0415  0.1628
+   15SOL    HW2   58   0.740   1.180   0.863 -1.3766 -0.6744  1.3950
+   16SOL     OW   59   1.616   0.739   0.975  0.6902 -0.0641 -0.2024
+   16SOL    HW1   60   1.622   0.644   0.991  0.2136  0.1838  1.6857
+   16SOL    HW2   61   1.577   0.746   0.888  1.4594 -1.5956 -0.7170
+   17SOL     OW   62   0.867   1.731   0.604  0.0571  0.1554  0.0886
+   17SOL    HW1   63   0.885   1.797   0.537  2.4933 -0.8338 -0.3365
+   17SOL    HW2   64   0.953   1.696   0.627 -0.7371  0.0464  3.3598
+   18SOL     OW   65   0.317   1.465   1.113  0.0310 -0.6082  0.0339
+   18SOL    HW1   66   0.345   1.378   1.140  0.8547 -0.5831 -0.7124
+   18SOL    HW2   67   0.310   1.514   1.195 -0.0067 -1.2415  0.4180
+   19SOL     OW   68   0.710   1.130   1.294 -0.3148 -0.5390  0.6564
+   19SOL    HW1   69   0.763   1.073   1.351 -2.4262 -0.9910  2.2970
+   19SOL    HW2   70   0.764   1.208   1.282  1.2370 -1.4696  1.1918
+   20SOL     OW   71   1.790   0.577   0.171 -0.3471  0.3017  0.4965
+   20SOL    HW1   72   1.799   0.499   0.225 -0.9068 -0.6035 -0.6501
+   20SOL    HW2   73   1.699   0.575   0.141 -0.6113  1.8667  1.1189
+   21SOL     OW   74   1.308   0.199   1.101 -0.2490  0.0097  0.4805
+   21SOL    HW1   75   1.350   0.270   1.151 -0.3412  0.1916  0.2964
+   21SOL    HW2   76   1.357   0.121   1.126 -1.1832 -0.1423  1.9369
+   22SOL     OW   77   1.744   0.059   0.666  0.1375 -0.4188 -0.2149
+   22SOL    HW1   78   1.806   0.131   0.678 -1.1962  0.6080  0.8061
+   22SOL    HW2   79   1.739   0.046   0.571  0.0925  1.1353 -0.4502
+   23SOL     OW   80   0.901   0.770   1.809 -0.4861 -0.1675  0.1895
+   23SOL    HW1   81   0.956   0.838   1.770 -3.1820  2.4989  0.6603
+   23SOL    HW2   82   0.829   0.760   1.747 -1.5149 -0.5834  1.4163
+   24SOL     OW   83   1.431   0.095   0.816 -0.1274 -0.0072 -0.3712
+   24SOL    HW1   84   1.468   0.083   0.903  0.2089  1.8267 -0.2242
+   24SOL    HW2   85   1.506   0.088   0.757  0.7927  4.1506 -0.0367
+   25SOL     OW   86   1.780   1.754   0.862  0.5678 -0.1766 -0.1285
+   25SOL    HW1   87   1.744   1.827   0.811  2.8738  1.5084  0.4695
+   25SOL    HW2   88   1.779   1.786   0.952 -1.2405 -2.1875  0.6577
+   26SOL     OW   89   0.878   0.350   1.770  0.2313 -0.1715 -0.0881
+   26SOL    HW1   90   0.963   0.307   1.782 -0.7619 -1.8379  1.5806
+   26SOL    HW2   91   0.863   0.346   1.675  1.9075  0.0097 -0.3967
+   27SOL     OW   92   1.500   1.354   1.825  0.3244 -0.1483  0.2299
+   27SOL    HW1   93   1.464   1.401   1.900  0.7957 -0.9176  0.9363
+   27SOL    HW2   94   1.439   1.281   1.811  0.1258  0.1074 -0.2739
+   28SOL     OW   95   0.562   1.256   0.250 -0.1273 -0.1451  0.1098
+   28SOL    HW1   96   0.485   1.225   0.202 -0.4348 -0.3359  0.7185
+   28SOL    HW2   97   0.529   1.278   0.338  0.1864  1.3709 -0.1174
+   29SOL     OW   98   0.132   1.687   1.619 -0.0341 -0.1591  0.1320
+   29SOL    HW1   99   0.157   1.717   1.706  0.0736  0.6535 -0.1702
+   29SOL    HW2  100   0.177   1.747   1.559 -0.8985 -0.0896 -0.4585
+   30SOL     OW  101   0.760   1.304   0.060  0.9207  0.5245  0.1222
+   30SOL    HW1  102   0.676   1.293   0.105  0.0881  1.3490 -1.1581
+   30SOL    HW2  103   0.786   1.215   0.036 -0.7425  0.3888 -1.3994
+   31SOL     OW  104   0.536   1.614   0.108  0.4252  0.0036  0.1964
+   31SOL    HW1  105   0.500   1.696   0.074 -1.3980 -0.7305  0.2303
+   31SOL    HW2  106   0.602   1.642   0.171  0.8518  1.4200 -0.8172
+   32SOL     OW  107   0.057   0.491   0.440  0.2336  0.7963 -0.0595
+   32SOL    HW1  108   0.037   0.420   0.501 -1.7126  0.3097 -1.1592
+   32SOL    HW2  109   0.087   0.447   0.361 -0.6345  1.1979 -0.6241
+   33SOL     OW  110   1.490   1.658   1.513 -0.2644 -0.2673 -0.4947
+   33SOL    HW1  111   1.577   1.642   1.549 -1.3621 -1.1661  1.9584
+   33SOL    HW2  112   1.463   1.742   1.549 -1.5016 -1.3251  1.1927
+   34SOL     OW  113   0.782   1.561   1.523 -0.1664  0.0805 -0.4066
+   34SOL    HW1  114   0.723   1.563   1.448 -0.8568 -0.0627  0.1291
+   34SOL    HW2  115   0.745   1.494   1.581  0.6987 -0.2365 -0.2083
+   35SOL     OW  116   0.807   0.478   1.523  0.9213 -0.2462  0.2961
+   35SOL    HW1  117   0.820   0.485   1.429  0.8018 -0.9663  0.2173
+   35SOL    HW2  118   0.805   0.568   1.555  4.0443  0.0295  0.0500
+   36SOL     OW  119   1.587   1.228   1.226 -0.4386 -0.0224 -0.0371
+   36SOL    HW1  120   1.544   1.273   1.154 -0.8382  0.7052  0.6474
+   36SOL    HW2  121   1.628   1.297   1.277 -0.7828 -0.4496  0.8394
+   37SOL     OW  122   0.269   0.651   0.609  0.6461 -0.6178 -0.4651
+   37SOL    HW1  123   0.241   0.573   0.561  1.2497 -0.5481 -0.9303
+   37SOL    HW2  124   0.308   0.708   0.543  1.2428 -0.4092  0.0589
+   38SOL     OW  125   1.777   0.462   0.876 -0.1690  0.4649 -0.0234
+   38SOL    HW1  126   1.687   0.435   0.893 -0.0122 -1.9675 -2.4030
+   38SOL    HW2  127   1.829   0.416   0.942 -0.5391  0.7361  0.4603
+   39SOL     OW  128   1.128   0.090   1.778 -0.1059  1.0356 -0.1404
+   39SOL    HW1  129   1.077   0.112   1.700 -3.7084  0.5906  1.8990
+   39SOL    HW2  130   1.147  -0.004   1.768 -1.3247  0.7712 -0.1347
+   40SOL     OW  131   1.880   1.554   1.246 -0.2337 -0.2115 -0.5676
+   40SOL    HW1  132   1.816   1.510   1.303 -0.3159  0.0407 -0.4656
+   40SOL    HW2  133   1.941   1.485   1.221 -1.5338 -0.8466 -2.1069
+   41SOL     OW  134   0.573   0.170   0.681 -0.8153  0.6766 -0.6613
+   41SOL    HW1  135   0.627   0.199   0.608  0.6562 -0.0837  0.0758
+   41SOL    HW2  136   0.500   0.231   0.684  0.3922  2.1854 -1.2538
+   42SOL     OW  137   1.259   1.474   0.909  0.2779 -0.1363  0.3100
+   42SOL    HW1  138   1.167   1.464   0.883 -0.7646  1.7119  2.9065
+   42SOL    HW2  139   1.287   1.555   0.866  0.4561 -0.2780  0.1618
+   43SOL     OW  140   0.846   1.308   0.384  0.0963 -0.6847 -0.0161
+   43SOL    HW1  141   0.802   1.369   0.443  2.5698  0.1541  1.0892
+   43SOL    HW2  142   0.780   1.287   0.318 -2.1509 -0.0766  1.8855
+   44SOL     OW  143   1.165   1.684   0.100  0.2293 -0.2844  0.3432
+   44SOL    HW1  144   1.196   1.703   0.012  1.0789 -1.3255  0.4022
+   44SOL    HW2  145   1.084   1.635   0.088 -0.4374  0.8400  0.1710
+   45SOL     OW  146   0.773   0.931   0.338  0.2994 -0.1623  0.1571
+   45SOL    HW1  147   0.747   0.839   0.342 -1.6976  0.3519  0.3138
+   45SOL    HW2  148   0.726   0.972   0.410  0.9891  1.0238 -0.0469
+   46SOL     OW  149   0.211   1.744   1.089 -0.4382  0.0800 -0.1584
+   46SOL    HW1  150   0.155   1.667   1.082 -0.6996  0.3062 -0.5363
+   46SOL    HW2  151   0.266   1.741   1.011  0.7636 -0.6687  0.6860
+   47SOL     OW  152   0.850   0.577   1.284  0.0763 -0.1641 -0.5319
+   47SOL    HW1  153   0.867   0.606   1.194 -1.8434  1.1597 -0.5310
+   47SOL    HW2  154   0.756   0.559   1.285 -0.0726  0.5401  1.3774
+   48SOL     OW  155   1.736   0.661   1.369 -0.0923  0.0253  0.5089
+   48SOL    HW1  156   1.753   0.755   1.375 -0.1932  0.2521 -1.7129
+   48SOL    HW2  157   1.642   0.655   1.353  0.0258 -0.3834 -0.0572
+   49SOL     OW  158   1.726   0.997   1.222  0.6473  0.1426  0.3738
+   49SOL    HW1  159   1.736   0.982   1.128  1.7285  0.2828  0.4661
+   49SOL    HW2  160   1.674   1.078   1.228  1.8774  0.9978 -0.1221
+   50SOL     OW  161   0.337   1.867   1.542 -0.1395  0.0155  0.0325
+   50SOL    HW1  162   0.406   1.842   1.604 -0.0409  1.2725  0.4551
+   50SOL    HW2  163   0.376   1.854   1.456  0.3873  0.0639  0.2621
+   51SOL     OW  164   0.522   0.962   1.877 -0.1456  0.0945 -0.1389
+   51SOL    HW1  165   0.543   0.904   1.803 -1.8878  0.8212 -1.2614
+   51SOL    HW2  166   0.606   1.000   1.901  0.3613  0.6003 -2.4416
+   52SOL     OW  167   0.478   0.946   0.958 -0.7507 -0.1925 -0.3324
+   52SOL    HW1  168   0.433   0.923   0.877 -1.5686 -0.5832  0.2176
+   52SOL    HW2  169   0.414   0.999   1.006 -0.1425  0.3344 -0.0923
+   53SOL     OW  170   0.585   0.232   1.867 -0.2631 -0.2030  0.1275
+   53SOL    HW1  171   0.661   0.184   1.900  1.7167  1.6253 -1.4693
+   53SOL    HW2  172   0.552   0.179   1.795  0.8141 -0.0707 -0.4849
+   54SOL     OW  173   0.443   1.094   0.453 -0.6847 -0.4432  0.0280
+   54SOL    HW1  174   0.492   1.023   0.494  1.6368  0.4267 -1.1275
+   54SOL    HW2  175   0.352   1.079   0.482  0.2906 -1.7228  2.8010
+   55SOL     OW  176   0.103   1.416   0.916  0.6389  0.8565 -0.1103
+   55SOL    HW1  177   0.170   1.417   0.984 -0.4282  0.6462  0.9740
+   55SOL    HW2  178   0.113   1.331   0.873  0.4135  0.3871  0.7430
+   56SOL     OW  179   0.282   0.597   0.986 -0.5056  0.0759 -0.5233
+   56SOL    HW1  180   0.267   0.522   0.928  0.8633  0.8668 -1.9652
+   56SOL    HW2  181   0.246   0.672   0.939 -1.3875  0.4387  0.6785
+   57SOL     OW  182   1.519   0.738   0.725  0.5394  0.2421 -0.4307
+   57SOL    HW1  183   1.486   0.825   0.701  1.3444  0.5309 -0.4973
+   57SOL    HW2  184   1.475   0.678   0.665  0.5108  0.6770 -0.8445
+   58SOL     OW  185   1.203   0.280   1.483  0.5745 -0.4196 -0.2124
+   58SOL    HW1  186   1.131   0.221   1.504  1.7250 -1.9014 -0.2407
+   58SOL    HW2  187   1.165   0.346   1.425 -0.9650 -0.5636  0.5975
+   59SOL     OW  188   1.450   0.029   1.614  0.1531 -0.3262 -0.0153
+   59SOL    HW1  189   1.540   0.055   1.633 -0.3326 -0.4168  2.7153
+   59SOL    HW2  190   1.400   0.111   1.615 -0.1042 -0.4869  0.5555
+   60SOL     OW  191   0.331   1.467  -0.007 -0.4289  0.3722  0.2991
+   60SOL    HW1  192   0.405   1.526   0.008 -1.0610  1.1311  0.5110
+   60SOL    HW2  193   0.356   1.385   0.034  0.1041  0.7662  0.7662
+   61SOL     OW  194   1.280   0.843   0.558 -0.3066 -0.2319  0.2376
+   61SOL    HW1  195   1.230   0.866   0.480 -0.3337 -1.2591 -0.0616
+   61SOL    HW2  196   1.294   0.748   0.551 -0.4303 -0.3714  1.5404
+   62SOL     OW  197   1.873   1.232   0.298 -0.0038  0.7498 -0.2465
+   62SOL    HW1  198   1.853   1.139   0.291  2.5211 -0.0631  1.8894
+   62SOL    HW2  199   1.904   1.244   0.388  0.3511  3.5257 -0.6399
+   63SOL     OW  200   1.627   1.660   0.409 -0.4174 -0.0023  0.1415
+   63SOL    HW1  201   1.692   1.728   0.392 -0.3043  0.0330  0.7034
+   63SOL    HW2  202   1.632   1.602   0.333 -0.5729  0.6575 -0.3858
+   64SOL     OW  203   1.128   0.587   1.799 -0.5928 -0.4584 -0.0323
+   64SOL    HW1  204   1.078   0.664   1.828 -1.8369 -0.3563 -2.2123
+   64SOL    HW2  205   1.061   0.520   1.783  0.4115 -1.7925  1.0839
+   65SOL     OW  206   1.545   0.060   1.088 -0.5191  0.2959 -0.3816
+   65SOL    HW1  207   1.602  -0.013   1.110 -2.1657 -0.3298  2.3719
+   65SOL    HW2  208   1.576   0.132   1.144 -2.3760 -0.1021  1.2631
+   66SOL     OW  209   1.137   1.202   1.754  0.3946  0.5745 -0.1292
+   66SOL    HW1  210   1.089   1.283   1.737 -0.0973  0.4070  0.4246
+   66SOL    HW2  211   1.184   1.184   1.673 -1.5032  0.0345 -1.1792
+   67SOL     OW  212   0.172   1.278   0.592  0.7390 -0.5888 -0.2330
+   67SOL    HW1  213   0.104   1.211   0.584 -1.3115  1.0507  1.9439
+   67SOL    HW2  214   0.237   1.238   0.650  0.8866 -1.5993 -1.0619
+   68SOL     OW  215   0.091   1.384   1.778  0.0339  0.1204 -0.1674
+   68SOL    HW1  216   0.051   1.398   1.864  0.9592 -0.5806  0.3956
+   68SOL    HW2  217   0.173   1.433   1.781  0.2214 -0.1698 -0.5355
+   69SOL     OW  218   0.030   0.508   1.815  0.2233 -0.8501 -0.7350
+   69SOL    HW1  219   0.007   0.532   1.905 -1.2172 -1.6613 -0.8598
+   69SOL    HW2  220   0.110   0.457   1.824  0.6934 -0.0168 -0.0347
+   70SOL     OW  221   0.624   1.142   0.732  0.9632 -0.2790  0.2354
+   70SOL    HW1  222   0.650   1.062   0.686  1.2005  0.0460 -0.1941
+   70SOL    HW2  223   0.637   1.212   0.668 -0.3409 -0.0254  0.2101
+   71SOL     OW  224   1.193   1.767   0.601 -0.0623 -0.2111 -0.0925
+   71SOL    HW1  225   1.160   1.731   0.519 -0.7432 -2.9365  1.2332
+   71SOL    HW2  226   1.280   1.729   0.610  1.0328  2.0631 -0.6744
+   72SOL     OW  227   0.389   1.484   0.435 -0.0547  0.2064  0.2663
+   72SOL    HW1  228   0.337   1.405   0.448  0.7567 -0.1565  1.4080
+   72SOL    HW2  229   0.363   1.515   0.348 -1.9309 -0.1302  0.6606
+   73SOL     OW  230   0.781   1.678   0.205 -0.3629 -0.0256 -0.0008
+   73SOL    HW1  231   0.811   1.661   0.294  2.3232 -0.0677 -0.8296
+   73SOL    HW2  232   0.842   1.628   0.149 -0.6863  1.6180 -1.9228
+   74SOL     OW  233   1.055   0.474   1.005  0.4679  0.3957  0.3556
+   74SOL    HW1  234   1.021   0.386   1.022  0.5403  0.2219 -0.4039
+   74SOL    HW2  235   0.978   0.530   1.005  0.5974  0.6719  2.8347
+   75SOL     OW  236   0.312   1.722   0.841  0.4037  0.2797  0.0488
+   75SOL    HW1  237   0.402   1.692   0.826  0.4636 -0.7496  2.1319
+   75SOL    HW2  238   0.261   1.683   0.770  1.4923  0.4420 -0.8537
+   76SOL     OW  239   1.053   1.244   1.161  0.4135  0.1923 -0.4588
+   76SOL    HW1  240   1.109   1.313   1.195  1.6945 -0.9497 -0.1869
+   76SOL    HW2  241   1.047   1.261   1.067 -2.0376  2.5650  0.0064
+   77SOL     OW  242   0.988   1.507   1.679 -0.0500  0.3608  0.9478
+   77SOL    HW1  243   0.920   1.530   1.615 -0.6031 -0.6697  1.1496
+   77SOL    HW2  244   1.069   1.505   1.628 -0.7597 -2.5704 -0.2758
+   78SOL     OW  245   1.123   1.346   0.329  0.0394 -0.2192 -0.3380
+   78SOL    HW1  246   1.159   1.263   0.360  2.1408  1.1353  1.0555
+   78SOL    HW2  247   1.035   1.350   0.368  0.3071 -1.3402  0.4196
+   79SOL     OW  248   1.760   1.322   1.617  0.2581 -0.3836  0.2477
+   79SOL    HW1  249   1.708   1.258   1.666  0.3577  0.5835  1.6777
+   79SOL    HW2  250   1.839   1.335   1.669 -0.6782  2.4152  1.1537
+   80SOL     OW  251   1.425   1.061   0.668  0.0224  0.2524 -0.0414
+   80SOL    HW1  252   1.342   1.017   0.651  1.0290 -1.7478 -0.0527
+   80SOL    HW2  253   1.443   1.113   0.590 -2.4194  2.8859  0.9573
+   81SOL     OW  254   1.320   0.512   0.897 -0.4141  0.5363  0.5121
+   81SOL    HW1  255   1.232   0.475   0.884  0.0687 -0.2697 -0.6161
+   81SOL    HW2  256   1.304   0.602   0.925 -1.6133 -0.2599  2.6156
+   82SOL     OW  257   0.510   1.804   0.498  0.2681 -0.1405  0.4344
+   82SOL    HW1  258   0.534   1.871   0.563 -0.1379 -0.2129  0.6593
+   82SOL    HW2  259   0.452   1.745   0.546 -2.2616  1.2947 -0.7019
+   83SOL     OW  260   0.928   1.530   0.051 -0.2169  0.4720  0.1316
+   83SOL    HW1  261   0.945   1.517  -0.042 -1.4113  3.1376 -0.5669
+   83SOL    HW2  262   0.875   1.455   0.077  0.4113 -0.4798 -1.2261
+   84SOL     OW  263   0.487   0.777   1.628 -0.1096 -0.2741  0.6643
+   84SOL    HW1  264   0.434   0.700   1.605  0.4263 -0.4050 -0.1809
+   84SOL    HW2  265   0.431   0.851   1.604 -0.5241 -0.3987  1.2404
+   85SOL     OW  266   1.251   1.458   1.202 -0.0050 -0.1547  0.2511
+   85SOL    HW1  267   1.259   1.459   1.107 -2.1292 -0.4326  0.0108
+   85SOL    HW2  268   1.337   1.485   1.234  0.5423  0.6542 -1.7449
+   86SOL     OW  269   0.598   1.782   1.086 -0.3617 -0.2454 -0.1855
+   86SOL    HW1  270   0.581   1.752   0.997  1.2521  1.9685 -1.3149
+   86SOL    HW2  271   0.693   1.784   1.093 -0.4560  0.9179  1.1110
+   87SOL     OW  272   0.095   0.707   1.604 -0.0930  0.0786 -0.6608
+   87SOL    HW1  273   0.167   0.682   1.546  0.2352 -0.6044  0.0337
+   87SOL    HW2  274   0.093   0.639   1.671 -2.0021 -0.4487 -1.1849
+   88SOL     OW  275   0.350   1.220   0.798 -0.2531 -0.7850  0.2083
+   88SOL    HW1  276   0.284   1.163   0.836  0.4582 -1.9302 -0.1995
+   88SOL    HW2  277   0.429   1.165   0.794  0.3396  0.0962 -0.5919
+   89SOL     OW  278   0.283   0.114   0.709 -0.3152 -0.1274 -0.0150
+   89SOL    HW1  279   0.299   0.041   0.769  1.0233 -0.0487 -0.2551
+   89SOL    HW2  280   0.256   0.073   0.627 -0.0166 -0.3318 -0.0086
+   90SOL     OW  281  -0.015   0.699   0.757  0.3854 -0.0553  0.0635
+   90SOL    HW1  282   0.061   0.687   0.700  0.6768 -0.2931  0.4945
+   90SOL    HW2  283  -0.028   0.612   0.796 -0.2528 -0.0729 -0.1838
+   91SOL     OW  284   1.258   1.730   1.741 -0.0846  0.2716  0.8600
+   91SOL    HW1  285   1.329   1.786   1.711  0.4304  0.0195  1.5827
+   91SOL    HW2  286   1.266   1.650   1.690  0.6952 -0.0929  1.5317
+   92SOL     OW  287   1.120   1.621   0.365 -0.8145 -0.1273  0.2236
+   92SOL    HW1  288   1.146   1.632   0.274 -1.6290  1.4507  0.1422
+   92SOL    HW2  289   1.120   1.527   0.380  3.1802 -0.3667 -0.2448
+   93SOL     OW  290   0.805   0.537   0.080 -0.2216  0.4904 -0.4513
+   93SOL    HW1  291   0.812   0.619   0.032 -1.9314  0.8101 -0.2337
+   93SOL    HW2  292   0.828   0.469   0.017  0.0570  1.0655 -0.9696
+   94SOL     OW  293   1.317   1.224   1.528  0.1805  0.1464  0.4789
+   94SOL    HW1  294   1.408   1.204   1.505  0.7320  4.1695 -1.7872
+   94SOL    HW2  295   1.265   1.168   1.471  1.0675 -2.4537  2.0322
+   95SOL     OW  296   1.122   1.038   1.392 -0.2944  0.6390  0.3345
+   95SOL    HW1  297   1.077   1.099   1.333  0.8946  1.7379  0.5050
+   95SOL    HW2  298   1.168   0.978   1.334 -1.5994 -0.2286  0.1654
+   96SOL     OW  299   0.843   1.801   1.386 -0.2893 -0.0351 -0.1764
+   96SOL    HW1  300   0.853   1.781   1.293 -0.4693  2.6182 -0.8168
+   96SOL    HW2  301   0.820   1.716   1.425  3.1207 -2.0015 -1.9232
+   97SOL     OW  302   1.466   1.644   0.624 -0.0739  0.0006  0.5639
+   97SOL    HW1  303   1.531   1.624   0.691 -0.4219  1.6314  1.4454
+   97SOL    HW2  304   1.516   1.645   0.542  1.2498  2.0254  1.3146
+   98SOL     OW  305   0.595   0.879   0.597 -0.2141  0.7830  0.1551
+   98SOL    HW1  306   0.655   0.834   0.656 -0.0085  1.2686  0.3147
+   98SOL    HW2  307   0.552   0.809   0.548 -0.2568  0.3884  0.7560
+   99SOL     OW  308   0.596   0.208   0.967  0.0916 -0.5628 -0.0200
+   99SOL    HW1  309   0.574   0.157   0.889 -0.8469  1.2301 -0.9899
+   99SOL    HW2  310   0.690   0.222   0.960 -0.0789  0.0981 -1.1836
+  100SOL     OW  311   0.459   1.219   1.683 -0.0282  0.6580  0.7198
+  100SOL    HW1  312   0.372   1.248   1.711 -0.8869  0.4022 -1.5094
+  100SOL    HW2  313   0.443   1.140   1.630  1.5796  0.5026  0.4022
+  101SOL     OW  314   1.350   1.465   0.184  0.5648  0.1097  0.2880
+  101SOL    HW1  315   1.300   1.537   0.144  1.0904  0.0314 -0.5275
+  101SOL    HW2  316   1.290   1.427   0.249  0.4188  1.5226  1.0122
+  102SOL     OW  317   1.819   0.933   0.314  0.8604  0.0214  0.4146
+  102SOL    HW1  318   1.831   0.917   0.221 -0.9486 -0.4063  0.2175
+  102SOL    HW2  319   1.825   0.846   0.355  3.5340  0.3922  1.0057
+  103SOL     OW  320   0.608   1.708   0.844  0.6831  0.2021  0.4865
+  103SOL    HW1  321   0.604   1.621   0.803 -2.2987 -0.1051  1.2023
+  103SOL    HW2  322   0.674   1.755   0.793  0.4557 -1.6186 -1.6624
+  104SOL     OW  323   0.847   1.784   1.717 -0.4426  0.1521 -0.0248
+  104SOL    HW1  324   0.844   1.698   1.675 -0.9326  0.7338 -1.2228
+  104SOL    HW2  325   0.866   1.765   1.809  1.1696 -1.1279 -0.5749
+  105SOL     OW  326   0.755   0.757   1.586 -0.4053  0.8598  0.5580
+  105SOL    HW1  327   0.661   0.766   1.605 -0.3865  0.8359  0.6517
+  105SOL    HW2  328   0.773   0.827   1.523 -0.5369  0.7116  0.3563
+  106SOL     OW  329   0.323   0.607   1.491 -0.3415  0.5628 -0.2639
+  106SOL    HW1  330   0.331   0.624   1.397 -0.7445  2.2957 -0.0153
+  106SOL    HW2  331   0.333   0.512   1.499  1.7077  0.5706 -1.8428
+  107SOL     OW  332   0.144   1.848   0.522 -0.6577  0.5071  0.2354
+  107SOL    HW1  333   0.147   1.758   0.554  0.7893  0.4220 -0.0999
+  107SOL    HW2  334   0.064   1.851   0.469 -1.2689 -0.2806  1.0654
+  108SOL     OW  335   1.792   1.786   1.146 -0.3886 -0.5790 -0.7213
+  108SOL    HW1  336   1.825   1.706   1.187 -1.5465 -0.7158 -0.0469
+  108SOL    HW2  337   1.857   1.853   1.169 -0.5570 -0.8483  0.6090
+  109SOL     OW  338   1.453   1.091   1.852  0.0361  0.2644  0.2809
+  109SOL    HW1  339   1.418   1.026   1.791  0.2187  0.6115 -0.1867
+  109SOL    HW2  340   1.416   1.066   1.937 -0.4631 -0.0271 -0.0237
+  110SOL     OW  341   1.786   0.696   0.474 -0.8885 -0.3548  0.7663
+  110SOL    HW1  342   1.849   0.626   0.455 -0.5987  0.3250 -1.0139
+  110SOL    HW2  343   1.788   0.705   0.569  1.8226 -0.2756  0.7873
+  111SOL     OW  344   1.737   1.615   1.640 -0.6071  0.4286 -0.3853
+  111SOL    HW1  345   1.697   1.534   1.674 -0.4975  1.2206  1.7697
+  111SOL    HW2  346   1.831   1.596   1.637 -0.6439  0.2701 -0.4864
+  112SOL     OW  347   1.570   1.166   0.391  0.1427 -0.3922 -0.0428
+  112SOL    HW1  348   1.593   1.249   0.349  0.2774 -0.2104  0.3907
+  112SOL    HW2  349   1.567   1.103   0.319 -1.3643  0.2655 -0.5925
+  113SOL     OW  350   0.468   0.237   1.210  0.4816  0.1694 -0.1150
+  113SOL    HW1  351   0.509   0.321   1.229 -1.8931  1.0707  1.5366
+  113SOL    HW2  352   0.504   0.211   1.125  3.1164  1.6060  0.4611
+  114SOL     OW  353   0.497   0.645   0.446 -0.3496  0.1149 -0.2951
+  114SOL    HW1  354   0.473   0.630   0.355 -1.1909  1.2423 -0.2818
+  114SOL    HW2  355   0.453   0.574   0.494 -2.1950  1.0481 -0.5031
+  115SOL     OW  356   1.830   0.204   1.888 -0.2995 -0.2384 -0.3392
+  115SOL    HW1  357   1.860   0.256   1.813 -0.3718 -0.0867 -0.2613
+  115SOL    HW2  358   1.739   0.181   1.866 -1.1731  1.8880  0.7783
+  116SOL     OW  359   1.260   1.115   0.354  0.3353 -0.0657 -0.3735
+  116SOL    HW1  360   1.201   1.105   0.279 -0.8545  1.0775  0.3877
+  116SOL    HW2  361   1.338   1.065   0.328 -0.1113  0.1244 -2.2833
+  117SOL     OW  362   1.469   0.360   1.268  0.2000  0.5039  0.2612
+  117SOL    HW1  363   1.469   0.454   1.289 -0.9128  0.0058  2.9620
+  117SOL    HW2  364   1.498   0.318   1.349  3.7281 -1.4638 -1.7830
+  118SOL     OW  365   0.089   1.026   1.324  0.0906  0.7889  0.0218
+  118SOL    HW1  366   0.100   0.967   1.399 -0.0875 -0.0129 -0.5747
+  118SOL    HW2  367   0.000   1.009   1.292  0.5138  0.3896 -0.9805
+  119SOL     OW  368   1.800  -0.004   0.367 -0.5123 -0.0713  0.0879
+  119SOL    HW1  369   1.740   0.065   0.339  1.3721  1.0700 -1.3271
+  119SOL    HW2  370   1.837  -0.039   0.286 -0.4545 -1.8883  0.8497
+  120SOL     OW  371   0.420   1.804   1.291  0.0501 -0.0375  0.1960
+  120SOL    HW1  372   0.345   1.754   1.258 -0.4548 -0.3486  1.7430
+  120SOL    HW2  373   0.479   1.811   1.216 -1.3922 -0.0341 -0.9813
+  121SOL     OW  374   0.879   0.266   0.998  1.1941  0.0302 -0.0938
+  121SOL    HW1  375   0.862   0.279   1.091 -0.9992 -0.0945 -0.4269
+  121SOL    HW2  376   0.915   0.177   0.992  0.1533 -0.4526  0.5399
+  122SOL     OW  377   0.482   1.492   0.692  0.7594  0.0169 -0.0261
+  122SOL    HW1  378   0.457   1.475   0.601 -0.9582  0.7601  0.2603
+  122SOL    HW2  379   0.432   1.429   0.743 -0.8961  1.7564  0.5929
+  123SOL     OW  380   0.971   0.049   0.465 -0.2583 -0.3283 -0.1392
+  123SOL    HW1  381   1.061   0.063   0.493 -0.5332  0.3322  0.4549
+  123SOL    HW2  382   0.954   0.117   0.401 -1.2646  1.5747  2.0052
+  124SOL     OW  383   0.027   0.293   1.033 -0.1049  0.2696 -0.3846
+  124SOL    HW1  384   0.035   0.373   1.085 -0.5657  0.5259 -0.7050
+  124SOL    HW2  385   0.104   0.242   1.056  0.9220  1.4034 -1.1904
+  125SOL     OW  386   1.730   0.545   1.623 -0.1157  0.1587 -0.3579
+  125SOL    HW1  387   1.769   0.596   1.551  1.3429 -0.5978 -0.1378
+  125SOL    HW2  388   1.800   0.539   1.688 -1.1413  0.0981  0.7627
+  126SOL     OW  389   0.367   1.003   1.525  0.0369 -0.5971 -0.1790
+  126SOL    HW1  390   0.274   0.989   1.541 -0.1836  1.0792  0.2218
+  126SOL    HW2  391   0.373   1.022   1.431 -0.3689  1.3542  0.1405
+  127SOL     OW  392   1.612   1.547   0.163 -0.3032  0.5071  0.1099
+  127SOL    HW1  393   1.605   1.609   0.089 -0.0690  1.5934  0.9784
+  127SOL    HW2  394   1.523   1.512   0.173 -0.5738  1.1370 -0.0352
+  128SOL     OW  395   1.859   1.447   0.122  0.3297  0.1687  0.0411
+  128SOL    HW1  396   1.884   1.375   0.181 -0.1948 -0.5600 -0.6109
+  128SOL    HW2  397   1.769   1.467   0.146  0.3589  0.3676 -0.0232
+  129SOL     OW  398   0.335   1.189   0.074  0.2238 -0.5165 -0.3114
+  129SOL    HW1  399   0.390   1.116   0.044 -0.6089 -1.7476  1.0316
+  129SOL    HW2  400   0.246   1.162   0.051 -0.6225 -2.0168  3.8076
+  130SOL     OW  401   1.092   0.928   0.761 -0.5421 -0.3081 -0.2489
+  130SOL    HW1  402   1.068   1.000   0.703  1.3271  1.7973  1.4112
+  130SOL    HW2  403   1.169   0.889   0.719  1.2160  1.6354  0.9842
+  131SOL     OW  404   1.536   0.162   1.866  0.5412  0.0428 -0.3791
+  131SOL    HW1  405   1.471   0.192   1.803 -1.1477 -1.5477  0.5095
+  131SOL    HW2  406   1.514   0.070   1.881  2.5916 -0.3640  0.4888
+  132SOL     OW  407   1.092   0.443   1.286 -0.0333 -0.2252 -0.4248
+  132SOL    HW1  408   1.128   0.444   1.198  0.4775 -0.8064 -0.2199
+  132SOL    HW2  409   1.015   0.500   1.281  0.7417  0.7837 -0.9220
+  133SOL     OW  410   0.249   0.928   0.271 -0.1659 -0.3931  0.0672
+  133SOL    HW1  411   0.266   0.843   0.229  1.2869 -0.4624  0.7703
+  133SOL    HW2  412   0.208   0.980   0.202  0.4355 -1.1361 -0.8763
+  134SOL     OW  413   0.854   1.759   1.120 -0.7276 -0.6731  0.0886
+  134SOL    HW1  414   0.935   1.711   1.137 -0.9109 -1.4829 -1.1865
+  134SOL    HW2  415   0.871   1.806   1.038 -0.8395  0.8360  0.9063
+  135SOL     OW  416   0.694   1.352   1.691 -0.0419  0.1222  0.3935
+  135SOL    HW1  417   0.723   1.352   1.782 -2.2668 -0.4454  1.1539
+  135SOL    HW2  418   0.605   1.316   1.694 -0.2178  0.2284 -1.9889
+  136SOL     OW  419   1.398   1.057   0.955 -0.0647  0.3016 -0.2336
+  136SOL    HW1  420   1.402   1.151   0.942  0.9844  0.4895  1.1530
+  136SOL    HW2  421   1.407   1.020   0.867  0.0414  1.4861 -0.7392
+  137SOL     OW  422   1.444   0.622   1.339  0.2561 -0.3962  0.7233
+  137SOL    HW1  423   1.373   0.634   1.403 -1.3769 -0.8757 -0.9172
+  137SOL    HW2  424   1.428   0.688   1.272  1.1072 -0.8198  0.0886
+  138SOL     OW  425   0.097   1.050   0.039 -0.0488  0.2954  0.4688
+  138SOL    HW1  426   0.027   1.110   0.012 -0.5628 -0.5616 -0.1533
+  138SOL    HW2  427   0.053   0.967   0.056  0.8215 -0.3052 -0.0921
+  139SOL     OW  428   1.834   0.896   0.935  0.2786 -0.1517  0.4758
+  139SOL    HW1  429   1.770   0.844   0.983  0.4710  0.3346  1.2830
+  139SOL    HW2  430   1.862   0.840   0.863 -0.6690 -0.5609  0.4155
+  140SOL     OW  431   0.184   0.987   0.502  0.2432 -0.5407  0.2292
+  140SOL    HW1  432   0.194   0.960   0.411 -1.7438  0.0518 -0.2070
+  140SOL    HW2  433   0.093   1.016   0.509  1.2070  2.5978  1.5455
+  141SOL     OW  434   0.701   0.933   1.085 -0.4198 -0.0896 -0.3578
+  141SOL    HW1  435   0.696   1.011   1.140 -0.2305  1.1948 -2.0508
+  141SOL    HW2  436   0.627   0.942   1.025 -0.5373 -1.3539 -0.4199
+  142SOL     OW  437   0.115   0.969   1.593  0.0295  0.1151 -0.1334
+  142SOL    HW1  438   0.133   0.987   1.685  1.8364  1.1099 -0.6271
+  142SOL    HW2  439   0.098   0.875   1.590  2.4878 -0.4526  0.9211
+  143SOL     OW  440   1.088   1.129   0.566 -0.6408  0.4345 -0.4647
+  143SOL    HW1  441   1.136   1.103   0.487 -1.8717  1.0557 -1.4525
+  143SOL    HW2  442   0.998   1.138   0.537 -1.6435 -1.8430  1.5969
+  144SOL     OW  443   0.181   0.315   1.367  0.2100  0.4518  0.3804
+  144SOL    HW1  444   0.197   0.237   1.313 -0.3614  0.3173  0.3971
+  144SOL    HW2  445   0.136   0.376   1.308  1.8253  1.3006 -0.0102
+  145SOL     OW  446   1.252   1.497   1.568 -0.6424  0.0197  0.2193
+  145SOL    HW1  447   1.312   1.549   1.514  1.8285 -0.7946  2.0211
+  145SOL    HW2  448   1.290   1.410   1.570 -2.9440 -1.0648 -0.0371
+  146SOL     OW  449   0.765   1.364   1.160  0.0692  0.1843 -0.5975
+  146SOL    HW1  450   0.726   1.322   1.084 -1.0516  1.0422 -0.5179
+  146SOL    HW2  451   0.856   1.335   1.159 -0.3944 -1.3487 -1.1577
+  147SOL     OW  452   0.441   0.860   1.238  1.1400  0.0521  0.0864
+  147SOL    HW1  453   0.520   0.867   1.184  0.5288 -1.4524 -1.0699
+  147SOL    HW2  454   0.371   0.893   1.182  0.7225 -0.0540  0.5434
+  148SOL     OW  455   0.921   0.481   0.486  0.2992 -0.2083  0.2961
+  148SOL    HW1  456   0.962   0.417   0.426 -2.3421 -0.9662 -0.8338
+  148SOL    HW2  457   0.948   0.452   0.573  2.7119 -0.2086 -0.3693
+  149SOL     OW  458   0.249   0.840   0.795  0.4732  0.6980 -0.2266
+  149SOL    HW1  459   0.184   0.893   0.749 -0.2726 -0.1480 -0.1576
+  149SOL    HW2  460   0.281   0.779   0.729 -1.2366 -1.1067  0.5368
+  150SOL     OW  461   0.287   0.414   1.845 -0.7605  0.0139 -0.1979
+  150SOL    HW1  462   0.365   0.463   1.871 -0.5657 -0.8648  0.9660
+  150SOL    HW2  463   0.321   0.329   1.815 -1.0790  0.5823 -2.3413
+  151SOL     OW  464   0.536   0.527   1.810  0.6816  0.4129 -0.3933
+  151SOL    HW1  465   0.565   0.553   1.723  0.9212 -0.3997 -0.5581
+  151SOL    HW2  466   0.572   0.439   1.823  1.0084  0.6908  0.6923
+  152SOL     OW  467   0.867   0.915   1.379  0.1305 -0.1927 -0.3807
+  152SOL    HW1  468   0.956   0.939   1.351  0.5724 -0.9660  0.3254
+  152SOL    HW2  469   0.831   0.868   1.304 -0.1567  1.1787 -1.1470
+  153SOL     OW  470   1.244   1.753   0.875 -0.6269 -0.4337  0.1353
+  153SOL    HW1  471   1.207   1.747   0.787 -1.9899 -0.8598  0.7156
+  153SOL    HW2  472   1.303   1.829   0.872 -2.3993  0.9702 -0.5447
+  154SOL     OW  473   0.565   0.485   1.273 -0.2462  0.4138 -0.6533
+  154SOL    HW1  474   0.538   0.459   1.361  0.5917  2.2302  0.2024
+  154SOL    HW2  475   0.490   0.534   1.239 -0.6004 -0.3608 -1.0028
+  155SOL     OW  476   1.665   1.449   1.385  0.3080  0.4667  0.0515
+  155SOL    HW1  477   1.702   1.413   1.466 -0.5982 -1.0160 -0.1685
+  155SOL    HW2  478   1.590   1.501   1.416  0.8727  1.1734  0.2643
+  156SOL     OW  479   0.995   0.348   0.748  0.1408  0.1352 -0.1171
+  156SOL    HW1  480   0.930   0.333   0.818 -0.5960  1.4349 -0.4887
+  156SOL    HW2  481   1.066   0.287   0.768 -0.4924 -0.2094  1.2145
+  157SOL     OW  482   1.474   1.602   1.229  0.0183  0.7960  0.3146
+  157SOL    HW1  483   1.555   1.558   1.202 -0.9005  0.5092 -2.2685
+  157SOL    HW2  484   1.499   1.653   1.306  2.2220 -0.6375  0.6401
+  158SOL     OW  485   0.469   1.839   1.880 -0.0333 -0.0084 -0.6431
+  158SOL    HW1  486   0.499   1.897   1.950  0.3274  1.2783 -1.8153
+  158SOL    HW2  487   0.519   1.866   1.803 -0.4851 -1.3212 -1.4264
+  159SOL     OW  488   0.353   0.624   1.241  0.2317 -0.2671 -0.2918
+  159SOL    HW1  489   0.393   0.707   1.265 -1.1131  0.0375  1.0062
+  159SOL    HW2  490   0.346   0.627   1.145  1.2518  0.5830 -0.3562
+  160SOL     OW  491   1.135   1.713   1.126  0.5820  0.5520 -0.1209
+  160SOL    HW1  492   1.173   1.639   1.173 -2.8222 -1.5883 -0.4269
+  160SOL    HW2  493   1.187   1.720   1.047  1.8705 -0.5702  0.5854
+  161SOL     OW  494   0.101   1.621   0.674  0.1885  0.1777 -0.1276
+  161SOL    HW1  495   0.019   1.644   0.719 -1.2715 -1.7476 -1.6158
+  161SOL    HW2  496   0.120   1.531   0.702  2.1918  0.7860  0.6436
+  162SOL     OW  497   0.277   0.383   0.811 -0.1764 -0.0717 -0.0482
+  162SOL    HW1  498   0.258   0.403   0.719 -0.9908 -0.7039 -0.0224
+  162SOL    HW2  499   0.301   0.291   0.811 -0.6716 -0.2043  0.4387
+  163SOL     OW  500   0.094   0.361   0.227  0.1326 -0.8088 -0.1914
+  163SOL    HW1  501   0.031   0.310   0.177  0.1921 -1.1602  0.0899
+  163SOL    HW2  502   0.173   0.306   0.229  0.8657  0.1534 -1.5844
+  164SOL     OW  503   1.274   0.943   1.164  0.0315  0.0875 -0.5778
+  164SOL    HW1  504   1.248   0.867   1.111  1.8553  0.0842 -1.5612
+  164SOL    HW2  505   1.316   1.002   1.102 -1.0201  1.7764  0.2518
+  165SOL     OW  506   1.554   0.402   0.989  0.0866 -0.0829 -0.7309
+  165SOL    HW1  507   1.470   0.427   0.949 -0.8384 -2.3072 -0.3056
+  165SOL    HW2  508   1.529   0.346   1.063  1.8806  1.2657  0.9881
+  166SOL     OW  509   0.215   1.755  -0.007 -0.2642 -0.5264 -0.2216
+  166SOL    HW1  510   0.305   1.788  -0.010 -0.1151 -0.9512 -0.3452
+  166SOL    HW2  511   0.223   1.665   0.023 -0.7358 -0.2680  0.6911
+  167SOL     OW  512   1.372   0.884   1.646 -0.3165 -0.1309  0.3638
+  167SOL    HW1  513   1.416   0.905   1.563  0.6464 -0.6369  0.7424
+  167SOL    HW2  514   1.314   0.811   1.625  0.4538 -0.7229  0.2876
+  168SOL     OW  515   1.845   1.836   0.097 -0.4365 -0.1128 -0.7545
+  168SOL    HW1  516   1.867   1.927   0.076  2.5482 -0.5928 -0.0428
+  168SOL    HW2  517   1.907   1.784   0.045  0.1148 -1.6175  1.3166
+  169SOL     OW  518   0.122   1.095   0.872 -0.2846 -0.1902  0.6262
+  169SOL    HW1  519   0.148   1.130   0.957 -2.2908  1.1965  0.7564
+  169SOL    HW2  520   0.074   1.015   0.893  2.5433 -2.0426  0.4619
+  170SOL     OW  521   1.171   0.191   0.868  0.0286 -0.2569 -1.0487
+  170SOL    HW1  522   1.245   0.162   0.816  1.8803  0.3948  1.0665
+  170SOL    HW2  523   1.205   0.197   0.957 -2.6222 -0.0671  0.0501
+  171SOL     OW  524   1.627   0.342   1.494  0.1414 -0.1383 -0.7758
+  171SOL    HW1  525   1.667   0.414   1.541 -0.2790  0.9971 -2.0748
+  171SOL    HW2  526   1.687   0.268   1.506  1.3951  0.8610 -0.7125
+  172SOL     OW  527   0.599   0.001   1.650  0.3815  0.1828  0.0032
+  172SOL    HW1  528   0.680  -0.046   1.667 -0.5704 -1.4464  0.1983
+  172SOL    HW2  529   0.624   0.072   1.591  2.0275  0.0551  0.5107
+  173SOL     OW  530   0.829   0.629   1.019 -0.3081  0.1364 -0.5344
+  173SOL    HW1  531   0.756   0.579   0.983 -0.3983  0.2776 -0.5393
+  173SOL    HW2  532   0.799   0.719   1.021 -0.2808  0.1358 -0.1543
+  174SOL     OW  533   1.093   0.609   0.746  0.1080 -0.9383  0.2101
+  174SOL    HW1  534   1.179   0.600   0.705 -0.3239 -2.1067 -0.4914
+  174SOL    HW2  535   1.061   0.519   0.753 -1.1396 -0.4991  0.2711
+  175SOL     OW  536   0.382   0.669   0.181 -0.0411 -0.0296 -0.3837
+  175SOL    HW1  537   0.446   0.730   0.143  0.0147  0.4328  0.4324
+  175SOL    HW2  538   0.338   0.630   0.106  0.1336  0.8049 -0.9258
+  176SOL     OW  539   1.729   0.069   1.649 -0.1609  0.0338 -0.2796
+  176SOL    HW1  540   1.817   0.102   1.662 -0.2418 -0.0226  0.4400
+  176SOL    HW2  541   1.740  -0.011   1.598  0.1319  0.4733 -0.9063
+  177SOL     OW  542   1.033   0.269   0.315 -0.0583  0.5273 -0.2664
+  177SOL    HW1  543   1.039   0.192   0.258 -1.3009  0.6991 -0.6620
+  177SOL    HW2  544   1.102   0.255   0.381 -1.7250 -2.1534  1.1242
+  178SOL     OW  545   0.638   1.564   1.308  0.9879  0.3451  0.1004
+  178SOL    HW1  546   0.593   1.630   1.255  1.7351 -0.4089 -1.5325
+  178SOL    HW2  547   0.689   1.513   1.245  2.2259 -0.3480  1.6081
+  179SOL     OW  548   0.849   0.811   0.714 -0.3297  0.0631 -0.0330
+  179SOL    HW1  549   0.889   0.724   0.706  0.6064  0.4816 -0.0976
+  179SOL    HW2  550   0.918   0.865   0.754 -1.2964  0.5022  1.0885
+  180SOL     OW  551   0.247   0.144   0.323  0.7620 -0.1314 -0.5298
+  180SOL    HW1  552   0.339   0.117   0.329  0.7728  0.0771  0.4344
+  180SOL    HW2  553   0.203   0.094   0.392  0.7445  2.0063  1.1155
+  181SOL     OW  554   0.905   0.268   1.291 -0.1087  0.8316 -0.1332
+  181SOL    HW1  555   0.959   0.206   1.242 -0.3386  0.1706  0.4480
+  181SOL    HW2  556   0.968   0.327   1.332  0.1623  0.3640  0.1323
+  182SOL     OW  557   1.534   0.764   0.030  0.7388 -1.1581 -0.1142
+  182SOL    HW1  558   1.533   0.771  -0.065 -2.4562  0.4686 -0.0924
+  182SOL    HW2  559   1.467   0.698   0.049 -1.4724  1.2306  0.9793
+  183SOL     OW  560   1.111   1.088   0.132  0.0977 -0.1903 -0.3846
+  183SOL    HW1  561   1.118   1.130   0.047  1.2288  2.9893  1.1308
+  183SOL    HW2  562   1.018   1.091   0.154  0.2214  2.8112  0.1368
+  184SOL     OW  563   0.389   0.378   0.534  0.7580  0.1880  0.4997
+  184SOL    HW1  564   0.369   0.309   0.471 -0.1605 -0.0600  1.0385
+  184SOL    HW2  565   0.484   0.379   0.540  0.8041 -0.6119  0.0221
+  185SOL     OW  566   0.431   0.358   1.482 -0.4253 -0.2603  0.3808
+  185SOL    HW1  567   0.487   0.281   1.473 -0.0282 -0.0132  0.7159
+  185SOL    HW2  568   0.351   0.335   1.435  0.4819 -0.0953 -1.3014
+  186SOL     OW  569   0.794   1.018   0.077 -0.2885 -0.4398 -0.2982
+  186SOL    HW1  570   0.827   0.934   0.046  0.6657 -0.5674  0.9891
+  186SOL    HW2  571   0.774   1.004   0.169  1.2426  1.0816  0.3255
+  187SOL     OW  572   0.269   1.076   1.133  0.2871 -0.4073  0.2807
+  187SOL    HW1  573   0.317   1.147   1.176  0.9507 -1.1318  0.7502
+  187SOL    HW2  574   0.192   1.062   1.188  0.2100 -0.1254  0.2422
+  188SOL     OW  575   1.042   0.956   1.650  0.6219  0.5027  0.2090
+  188SOL    HW1  576   1.080   0.962   1.562  0.3210  0.1213  0.0520
+  188SOL    HW2  577   1.061   1.040   1.690  1.8995  0.2272  0.2379
+  189SOL     OW  578   1.824   1.106   0.552 -0.0312  0.2074  0.2984
+  189SOL    HW1  579   1.763   1.152   0.609 -1.9104  0.1423 -1.5645
+  189SOL    HW2  580   1.769   1.057   0.491  1.8783 -3.3129  1.1568
+  190SOL     OW  581   1.054   0.096   1.142  0.1424  0.1736 -0.0896
+  190SOL    HW1  582   1.145   0.123   1.155  0.8495 -0.7675 -2.6005
+  190SOL    HW2  583   1.059   0.006   1.111 -1.6094  0.2945 -0.8560
+  191SOL     OW  584   1.464   0.929   1.374 -0.7840  0.1841 -0.0787
+  191SOL    HW1  585   1.406   0.950   1.300  0.2915  0.0856 -0.9576
+  191SOL    HW2  586   1.548   0.968   1.350 -0.4300  0.1807  1.1218
+  192SOL     OW  587   0.012   0.300   0.632 -0.2338  0.3820  0.4414
+  192SOL    HW1  588   0.084   0.237   0.644 -0.2379  0.4817  1.0340
+  192SOL    HW2  589  -0.013   0.323   0.722 -1.2389  0.0768  0.2395
+  193SOL     OW  590   0.296   1.432   1.441 -0.2776  0.0987  0.4588
+  193SOL    HW1  591   0.352   1.484   1.499 -0.1029  1.4941 -0.9073
+  193SOL    HW2  592   0.229   1.395   1.499 -2.1585  4.1505  1.2038
+  194SOL     OW  593   1.724   0.222   1.223 -0.0971 -0.2705  0.3473
+  194SOL    HW1  594   1.805   0.238   1.174 -0.7701 -0.0003 -0.7339
+  194SOL    HW2  595   1.687   0.309   1.235 -0.4887 -0.4383  0.3465
+  195SOL     OW  596   0.239   0.128   1.156 -0.0509  0.0735  0.4442
+  195SOL    HW1  597   0.331   0.145   1.177  0.5986 -2.6979  0.1408
+  195SOL    HW2  598   0.235   0.034   1.139 -2.7258  0.3367 -0.7955
+  196SOL     OW  599   0.684   0.154   1.456  0.4064 -0.2548  0.6721
+  196SOL    HW1  600   0.694   0.070   1.410 -0.6471  1.1793 -2.4790
+  196SOL    HW2  601   0.740   0.214   1.407 -1.1448  1.4903  0.9542
+  197SOL     OW  602   1.495   0.941   0.224 -0.6476  0.1020  0.6122
+  197SOL    HW1  603   1.506   0.891   0.305  0.0679 -0.6466  0.0660
+  197SOL    HW2  604   1.518   0.880   0.155  2.1221  1.6765 -0.0041
+  198SOL     OW  605   1.036   0.044   0.155  0.3946  0.0169  0.6318
+  198SOL    HW1  606   1.075   0.066   0.070 -4.6592 -2.9339 -3.0146
+  198SOL    HW2  607   1.083  -0.034   0.183  1.6237  0.5698  0.1957
+  199SOL     OW  608   1.560   0.398   0.137 -0.2510 -0.3102 -0.5893
+  199SOL    HW1  609   1.517   0.457   0.075  0.2461 -1.2264 -1.8514
+  199SOL    HW2  610   1.571   0.316   0.089  1.5969 -0.5568  0.1623
+  200SOL     OW  611   0.970   0.122   1.559  0.2659 -0.0106  0.1344
+  200SOL    HW1  612   0.905   0.087   1.620  0.2449 -0.6184 -0.2425
+  200SOL    HW2  613   0.955   0.077   1.477 -0.3227  1.4846 -0.6213
+  201SOL     OW  614   0.039   0.512   1.167 -0.3820  0.4415 -0.1588
+  201SOL    HW1  615  -0.021   0.561   1.223 -1.3739 -1.4982  0.5836
+  201SOL    HW2  616   0.111   0.572   1.151 -2.0092  2.4944 -0.2107
+  202SOL     OW  617   1.207   0.684   1.504  0.1745  0.8391  0.2778
+  202SOL    HW1  618   1.178   0.669   1.594  1.4058  0.1195  0.5811
+  202SOL    HW2  619   1.150   0.629   1.451  1.0379 -0.6893  0.8803
+  203SOL     OW  620   0.104   0.130   1.637  0.3483 -0.1978  0.4295
+  203SOL    HW1  621   0.173   0.068   1.661  0.6514 -0.1759 -0.3658
+  203SOL    HW2  622   0.128   0.160   1.550 -1.4006 -1.2706 -0.4988
+  204SOL     OW  623   0.664   0.333   0.484 -0.5019  0.5074 -0.1531
+  204SOL    HW1  624   0.636   0.363   0.398  0.2203 -0.3359 -0.7075
+  204SOL    HW2  625   0.744   0.383   0.502 -0.9950  1.1307  0.3143
+  205SOL     OW  626   1.718   1.187   0.035  0.1019 -0.2635  0.1479
+  205SOL    HW1  627   1.700   1.281   0.036  1.5514  0.0948 -1.5510
+  205SOL    HW2  628   1.637   1.147   0.003  0.4417  0.7630 -2.1868
+  206SOL     OW  629   1.830   0.832   0.063  0.0241 -0.7700 -0.1381
+  206SOL    HW1  630   1.743   0.863   0.040  0.0302 -1.7006 -1.5835
+  206SOL    HW2  631   1.816   0.748   0.105  0.2634 -2.3400 -2.9703
+  207SOL     OW  632   1.013   1.355   0.890 -0.2500  0.2105  0.1626
+  207SOL    HW1  633   1.057   1.309   0.819  1.6440 -2.9574  3.0630
+  207SOL    HW2  634   0.934   1.304   0.908  0.4431 -0.3894  1.6704
+  208SOL     OW  635   1.407   0.307   1.672  0.1176  0.1925 -0.7822
+  208SOL    HW1  636   1.325   0.323   1.626 -0.5011  1.6870  0.7229
+  208SOL    HW2  637   1.475   0.336   1.611 -0.7356  3.5274 -0.3525
+  209SOL     OW  638   1.039   0.812   0.416  0.4649 -0.3159  0.6663
+  209SOL    HW1  639   0.962   0.813   0.359  1.5743 -0.9589 -0.9225
+  209SOL    HW2  640   1.029   0.734   0.470 -0.2237 -0.1281  0.8093
+  210SOL     OW  641   1.387   0.527   1.860  0.1367 -0.2000  0.3990
+  210SOL    HW1  642   1.305   0.564   1.828  0.5714  0.7206  0.3144
+  210SOL    HW2  643   1.411   0.461   1.795  0.6228  1.1183 -0.8116
+  211SOL     OW  644   1.707   0.257   0.342 -0.1176 -0.3400  0.3240
+  211SOL    HW1  645   1.670   0.314   0.274 -1.1406 -1.1743  0.1667
+  211SOL    HW2  646   1.771   0.312   0.387 -0.1592  0.5389 -0.6583
+  212SOL     OW  647   1.694   1.489   0.945 -0.0595  0.0324  0.2406
+  212SOL    HW1  648   1.709   1.578   0.914  0.9693 -0.7931 -1.7923
+  212SOL    HW2  649   1.782   1.450   0.950 -0.6292 -1.5645 -1.2353
+   1.88572   1.88572   1.88572
diff --git a/test/gromacs/grompp.mdp b/test/gromacs/grompp.mdp
new file mode 100644
index 000000000..bc1aea719
--- /dev/null
+++ b/test/gromacs/grompp.mdp
@@ -0,0 +1,60 @@
+;	Input file
+;
+define              =  
+; integrator
+integrator          =  md 
+nsteps              =  1000
+dt                  =  0.002
+;
+; removing CM translation and rotation
+comm_mode           =  Linear 
+nstcomm             =  1000
+;
+; output control 
+nstlog                   = 100
+nstenergy                = 10000
+nstxout                  = 0
+nstvout                  = 0  
+nstfout                  = 0
+; group definition  
+nstxtcout                = 10000
+xtc-precision            = 10000
+xtc-grps                 = protein
+;
+; neighbour searching
+nstlist             = 1
+ns_type             = grid
+pbc                 = xyz
+rlist               = 0.9 
+;
+; electrostatic
+rcoulomb            = 0.9 
+coulombtype         = pme
+fourierspacing      = 0.12
+;
+; vdw
+vdw-type            = Cut-off 
+rvdw                = 0.9 
+;
+; constraints
+constraints              = all-bonds 
+constraint-algorithm     = lincs
+lincs_iter               = 4
+;
+; temperature
+Tcoupl              = v-rescale 
+tc_grps             = system 
+tau_t               = 0.1 
+ref_t               = 300 
+;
+; pression
+Pcoupl              =  Berendsen
+Pcoupltype          =  isotropic
+tau_p               =  0.5
+compressibility     =  4.5e-5
+ref_p               =  1.0 
+;
+; initial velocities
+gen_vel             = yes
+gen_temp            = 300 
+gen_seed            = 12334 
diff --git a/test/gromacs/plumed.dat b/test/gromacs/plumed.dat
new file mode 100644
index 000000000..65ea3da71
--- /dev/null
+++ b/test/gromacs/plumed.dat
@@ -0,0 +1,33 @@
+LOAD ../../extensions/libplumedExtensions.dylib
+
+DISTANCE ATOMS=0,21 LABEL=C1 COMPONENTS 
+VOLUME   LABEL=vol
+ENERGY   LABEL=ene
+
+COMBINE LABEL=x  ARG=C1.x,C1.y,C1.z POWERS=2,2,2
+COMBINE LABEL=xx ARG=x              POWERS=0.5
+
+#RESTRAINT ARG=C1 AT=1.1 KAPPA=10000.0
+
+#MOVINGRESTRAINT ARG=ene AT0=-8525.08 KAPPA0=0.024  AT1=-8000 STEP0=0 STEP1=10000
+#RESTRAINT ARG=ene AT=-8525.08 KAPPA=-0.0002 STRIDE=2
+
+RESTRAINT ARG=C1 AT=0.4 KAPPA=1000.0
+
+#RESTRAINT ARG=vol AT=6.8 KAPPA=100.0
+
+FLUSH STRIDE=100
+
+PRINT ARG=C1,vol,ene,C1.x,C1.y,C1.z STRIDE=1 FILE=COLVAR
+
+##PRINT ...
+##  ARG=*.*
+##  STRIDE=10
+##  FILE=COLVAR_ALL
+##... PRINT
+
+DEBUG logActivity 
+
+ENDPLUMED
+
+
diff --git a/test/gromacs/topol.top b/test/gromacs/topol.top
new file mode 100644
index 000000000..bd196c124
--- /dev/null
+++ b/test/gromacs/topol.top
@@ -0,0 +1,225 @@
+;
+;	File 'topol.top' was generated
+;	By user: max (559)
+;	On host: ziggy.local
+;	At date: Thu Feb  5 14:28:39 2009
+;
+;	This is your topology file
+;	"It's Calling Me to Break my Bonds, Again..." (Van der Graaf)
+;
+; Include forcefield parameters
+#include "ffoplsaa.itp"
+
+[ moleculetype ]
+; Name            nrexcl
+Protein             3
+
+[ atoms ]
+;   nr       type  resnr residue  atom   cgnr     charge       mass  typeB    chargeB      massB
+     1   opls_135      1    ACE    CH3      1      -0.18     12.011   ; qtot -0.18
+     2   opls_140      1    ACE   HH31      1       0.06      1.008   ; qtot -0.12
+     3   opls_140      1    ACE   HH32      1       0.06      1.008   ; qtot -0.06
+     4   opls_140      1    ACE   HH33      1       0.06      1.008   ; qtot 0
+     5   opls_235      1    ACE      C      2        0.5     12.011   ; qtot 0.5
+     6   opls_236      1    ACE      O      2       -0.5    15.9994   ; qtot 0
+     7   opls_238      2    ALA      N      3       -0.5    14.0067   ; qtot -0.5
+     8   opls_241      2    ALA      H      3        0.3      1.008   ; qtot -0.2
+     9  opls_224B      2    ALA     CA      3       0.14     12.011   ; qtot -0.06
+    10   opls_140      2    ALA     HA      3       0.06      1.008   ; qtot 0
+    11   opls_135      2    ALA     CB      4      -0.18     12.011   ; qtot -0.18
+    12   opls_140      2    ALA    HB1      4       0.06      1.008   ; qtot -0.12
+    13   opls_140      2    ALA    HB2      4       0.06      1.008   ; qtot -0.06
+    14   opls_140      2    ALA    HB3      4       0.06      1.008   ; qtot 0
+    15   opls_235      2    ALA      C      5        0.5     12.011   ; qtot 0.5
+    16   opls_236      2    ALA      O      5       -0.5    15.9994   ; qtot 0
+    17   opls_238      3    NAC      N      6       -0.5    14.0067   ; qtot -0.5
+    18   opls_241      3    NAC      H      6        0.3      1.008   ; qtot -0.2
+    19   opls_242      3    NAC    CH3      7       0.02     12.011   ; qtot -0.18
+    20   opls_140      3    NAC   HH31      7       0.06      1.008   ; qtot -0.12
+    21   opls_140      3    NAC   HH32      7       0.06      1.008   ; qtot -0.06
+    22   opls_140      3    NAC   HH33      7       0.06      1.008   ; qtot 0
+
+[ bonds ]
+;  ai    aj funct            c0            c1            c2            c3
+    1     2     1 
+    1     3     1 
+    1     4     1 
+    1     5     1 
+    5     6     1 
+    5     7     1 
+    7     8     1 
+    7     9     1 
+    9    10     1 
+    9    11     1 
+    9    15     1 
+   11    12     1 
+   11    13     1 
+   11    14     1 
+   15    16     1 
+   15    17     1 
+   17    18     1 
+   17    19     1 
+   19    20     1 
+   19    21     1 
+   19    22     1 
+
+[ pairs ]
+;  ai    aj funct            c0            c1            c2            c3
+    1     8     1 
+    1     9     1 
+    2     6     1 
+    2     7     1 
+    3     6     1 
+    3     7     1 
+    4     6     1 
+    4     7     1 
+    5    10     1 
+    5    11     1 
+    5    15     1 
+    6     8     1 
+    6     9     1 
+    7    12     1 
+    7    13     1 
+    7    14     1 
+    7    16     1 
+    7    17     1 
+    8    10     1 
+    8    11     1 
+    8    15     1 
+    9    18     1 
+    9    19     1 
+   10    12     1 
+   10    13     1 
+   10    14     1 
+   10    16     1 
+   10    17     1 
+   11    16     1 
+   11    17     1 
+   12    15     1 
+   13    15     1 
+   14    15     1 
+   15    20     1 
+   15    21     1 
+   15    22     1 
+   16    18     1 
+   16    19     1 
+   18    20     1 
+   18    21     1 
+   18    22     1 
+
+[ angles ]
+;  ai    aj    ak funct            c0            c1            c2            c3
+    2     1     3     1 
+    2     1     4     1 
+    2     1     5     1 
+    3     1     4     1 
+    3     1     5     1 
+    4     1     5     1 
+    1     5     6     1 
+    1     5     7     1 
+    6     5     7     1 
+    5     7     8     1 
+    5     7     9     1 
+    8     7     9     1 
+    7     9    10     1 
+    7     9    11     1 
+    7     9    15     1 
+   10     9    11     1 
+   10     9    15     1 
+   11     9    15     1 
+    9    11    12     1 
+    9    11    13     1 
+    9    11    14     1 
+   12    11    13     1 
+   12    11    14     1 
+   13    11    14     1 
+    9    15    16     1 
+    9    15    17     1 
+   16    15    17     1 
+   15    17    18     1 
+   15    17    19     1 
+   18    17    19     1 
+   17    19    20     1 
+   17    19    21     1 
+   17    19    22     1 
+   20    19    21     1 
+   20    19    22     1 
+   21    19    22     1 
+
+[ dihedrals ]
+;  ai    aj    ak    al funct            c0            c1            c2            c3            c4            c5
+    2     1     5     6     3 
+    2     1     5     7     3 
+    3     1     5     6     3 
+    3     1     5     7     3 
+    4     1     5     6     3 
+    4     1     5     7     3 
+    1     5     7     8     3 
+    1     5     7     9     3 
+    6     5     7     8     3 
+    6     5     7     9     3 
+    5     7     9    10     3 
+    5     7     9    11     3 
+    5     7     9    15     3 
+    8     7     9    10     3 
+    8     7     9    11     3 
+    8     7     9    15     3 
+    7     9    11    12     3 
+    7     9    11    13     3 
+    7     9    11    14     3 
+   10     9    11    12     3 
+   10     9    11    13     3 
+   10     9    11    14     3 
+   15     9    11    12     3 
+   15     9    11    13     3 
+   15     9    11    14     3 
+    7     9    15    16     3 
+    7     9    15    17     3 
+   10     9    15    16     3 
+   10     9    15    17     3 
+   11     9    15    16     3 
+   11     9    15    17     3 
+    9    15    17    18     3 
+    9    15    17    19     3 
+   16    15    17    18     3 
+   16    15    17    19     3 
+   15    17    19    20     3 
+   15    17    19    21     3 
+   15    17    19    22     3 
+   18    17    19    20     3 
+   18    17    19    21     3 
+   18    17    19    22     3 
+
+[ dihedrals ]
+;  ai    aj    ak    al funct            c0            c1            c2            c3
+    1     7     5     6     1    improper_O_C_X_Y
+    5     9     7     8     1    improper_Z_N_X_Y
+    9    17    15    16     1    improper_O_C_X_Y
+   15    19    17    18     1    improper_Z_N_X_Y
+
+; Include Position restraint file
+#ifdef POSRES
+#include "posre.itp"
+#endif
+
+; Include water topology
+#include "tip3p.itp"
+
+#ifdef POSRES_WATER
+; Position restraint for each water oxygen
+[ position_restraints ]
+;  i funct       fcx        fcy        fcz
+   1    1       1000       1000       1000
+#endif
+
+; Include generic topology for ions
+#include "ions.itp"
+
+[ system ]
+; Name
+Protein in water
+
+[ molecules ]
+; Compound        #mols
+Protein             1
+SOL               209
diff --git a/test/link/.gitignore b/test/link/.gitignore
new file mode 100644
index 000000000..e9a57b6de
--- /dev/null
+++ b/test/link/.gitignore
@@ -0,0 +1,9 @@
+plumed
+plumed-static
+plumed-dummy
+plumedc
+plumedc-static
+plumedc-dummy
+plumedf
+plumedf-static
+plumedf-dummy
diff --git a/test/link/Makefile b/test/link/Makefile
new file mode 100644
index 000000000..6eb4d1806
--- /dev/null
+++ b/test/link/Makefile
@@ -0,0 +1,52 @@
+
+-include ../../Makefile.conf
+-include ../../src/Plumed.inc
+
+EXE=plumed plumedf plumedc \
+    plumed-static plumedf-static plumedc-static \
+    plumed-dummy plumedf-dummy plumedc-dummy
+
+all: $(EXE)
+
+plumed-dummy: main.o $(PLUMED_WRAPPER)
+	$(LD) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+plumed-static: main.o $(PLUMED_OBJ)
+	$(LD) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS) $(PLUMED_DYNAMIC_LIBS)
+
+plumed: main.o $(PLUMED_SHARED_OBJ)
+	$(LD) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+plumedf-dummy: mainf.o $(PLUMED_WRAPPER)
+	$(LDF90) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+plumedf-static: mainf.o $(PLUMED_OBJ)
+	$(LDF90) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS) $(PLUMED_DYNAMIC_LIBS)
+
+plumedf: mainf.o $(PLUMED_SHARED_OBJ)
+	$(LDF90) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+plumedc-dummy: mainc.o $(PLUMED_WRAPPER)
+	$(LD) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+plumedc-static: mainc.o $(PLUMED_OBJ)
+	$(LD) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS) $(PLUMED_DYNAMIC_LIBS)
+
+plumedc: mainc.o $(PLUMED_SHARED_OBJ)
+	$(LD) $(LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+clean:
+	rm -f *.o
+	rm -f $(EXE)
+	rm -f makefile.dep
+
+makefile.dep : *.c *.cpp *.h
+	for i in *.c *.cpp; do g++  $(CPPFLAGS) -MM "$${i}"; done > $@
+
+-include makefile.dep
+
+%.o : %.f90
+	$(FC) -c $(FFLAGS) $< -o $@
+
+
+
diff --git a/test/link/main.cpp b/test/link/main.cpp
new file mode 100644
index 000000000..bd591dc85
--- /dev/null
+++ b/test/link/main.cpp
@@ -0,0 +1,38 @@
+#include "Plumed.h"
+#include <cstdio>
+
+
+int ddoit(){
+  fprintf(stderr,"Callback\n");
+  return 10;
+}
+
+int main(int argc,char**argv){
+  PLMD::Plumed plumed;
+  bool inst=PLMD::installed();
+  char* input="plumed.dat";
+
+  if(argc>1 && argv[1]) input=argv[1];
+
+  if(inst){
+
+    int check;
+    plumed.cmd("checkAction DISTANCE",&check);
+    printf("Checking DISTANCE: %i\n",check);
+    plumed.cmd("checkAction DISTANCE1",&check);
+    printf("Checking DISTANCE1: %i\n",check);
+
+//   {
+//     plumed_function_holder xxx={(plumed_function_pointer)ddoit};
+//     plumed.cmd("doit",&xxx);
+//   }
+
+    plumed.cmd("setMDEngine","specific");
+    plumed.cmd("setLog",stdout);
+    int n=20;
+    plumed.cmd("setNatoms",&n);
+    plumed.cmd("setPlumedDat",input);
+    plumed.cmd("init");
+  }
+  return 0;
+}
diff --git a/test/link/mainc.c b/test/link/mainc.c
new file mode 100644
index 000000000..a7e035d81
--- /dev/null
+++ b/test/link/mainc.c
@@ -0,0 +1,25 @@
+#include "Plumed.h"
+#include <stdlib.h>
+
+int main(int argc,char** argv){
+  int check;
+  plumed p;
+  int natoms=3;
+
+  plumed_installed(&check);
+  if(check==1){
+    plumed_g_create();
+    plumed_g_cmd("setMDEngine","ACCode");
+    plumed_g_cmd("setNatoms",&natoms);
+    plumed_g_cmd("init",NULL);
+    plumed_g_cmd("read",NULL);
+    plumed_g_finalize();
+
+    p=plumed_create();
+    plumed_cmd(p,"setNatoms",&natoms);
+    plumed_cmd(p,"init",NULL);
+    plumed_cmd(p,"read",NULL);
+    plumed_finalize(p);
+  }
+  return 0;
+}
diff --git a/test/link/mainf.f90 b/test/link/mainf.f90
new file mode 100644
index 000000000..844856d52
--- /dev/null
+++ b/test/link/mainf.f90
@@ -0,0 +1,14 @@
+PROGRAM MAIN
+  IMPLICIT NONE
+  INTEGER :: check,natoms
+  natoms=5
+  CALL plumed_installed(check)
+  IF(check==1) THEN
+    CALL plumed_g_create()
+    CALL plumed_g_cmd("setMDEngine"//char(0),"AFortranCode"//char(0))
+    CALL plumed_g_cmd("setNatoms"//char(0),natoms)
+    CALL plumed_g_cmd("setPlumedDat"//char(0),"plumed.dat"//char(0))
+    CALL plumed_g_cmd("init"//char(0),0)
+    CALL plumed_g_finalize()
+  ENDIF
+END PROGRAM MAIN
diff --git a/test/link/plumed.dat b/test/link/plumed.dat
new file mode 100644
index 000000000..65c18c2e1
--- /dev/null
+++ b/test/link/plumed.dat
@@ -0,0 +1,4 @@
+DISTANCE LABEL=l1 ATOMS=0,1
+DISTANCE LABEL=l2 ATOMS=1,2
+PRINT
+PRINT
diff --git a/test/namd/.gitignore b/test/namd/.gitignore
new file mode 100644
index 000000000..eef64acc2
--- /dev/null
+++ b/test/namd/.gitignore
@@ -0,0 +1,7 @@
+*
+!namd_input
+!dia2.pdb
+!dia2.psf
+!plumed.dat
+!par_all27_prot_lipid.prm
+!.gitignore
diff --git a/test/namd/dia2.pdb b/test/namd/dia2.pdb
new file mode 100644
index 000000000..2ec141292
--- /dev/null
+++ b/test/namd/dia2.pdb
@@ -0,0 +1,24 @@
+REMARK original generated coordinate pdb file
+ATOM      1  C   ALA     2      -0.186  -1.490  -0.181  1.00  0.00      DIA  C
+ATOM      2  O   ALA     2      -0.926  -2.447  -0.497  1.00  0.00      DIA  O
+ATOM      3  NT  ALA     2       0.008  -1.112   0.725  1.00  0.00      DIA  N
+ATOM      4  HNT ALA     2       0.533  -0.396   1.184  1.00  0.00      DIA  H
+ATOM      5  CAT ALA     2      -0.502  -1.632   1.410  1.00  0.00      DIA  C
+ATOM      6  HT1 ALA     2      -0.216  -2.590   1.371  1.00  0.00      DIA  H
+ATOM      7  HT2 ALA     2      -0.309  -1.255   2.315  1.00  0.00      DIA  H
+ATOM      8  HT3 ALA     2      -1.480  -1.560   1.212  1.00  0.00      DIA  H
+ATOM      9  CAY ALA     2      -0.096   2.144  -0.669  1.00  0.00      DIA  C
+ATOM     10  HY1 ALA     2       0.871   2.385  -0.588  1.00  0.00      DIA  H
+ATOM     11  HY2 ALA     2      -0.565   2.318   0.197  1.00  0.00      DIA  H
+ATOM     12  HY3 ALA     2      -0.520   2.679  -1.400  1.00  0.00      DIA  H
+ATOM     13  CY  ALA     2      -0.172   1.172  -0.892  1.00  0.00      DIA  C
+ATOM     14  OY  ALA     2      -1.139   0.931  -0.973  1.00  0.00      DIA  O
+ATOM     15  N   ALA     2       0.746   0.780  -0.955  1.00  0.00      DIA  N
+ATOM     16  HN  ALA     2       1.713   1.021  -0.873  1.00  0.00      DIA  H
+ATOM     17  CA  ALA     2       0.634  -0.654  -1.283  1.00  0.00      DIA  C
+ATOM     18  HA  ALA     2       0.099  -0.774  -2.218  1.00  0.00      DIA  H
+ATOM     19  CB  ALA     2       2.063  -1.223  -1.276  1.00  0.00      DIA  C
+ATOM     20  HB1 ALA     2       2.670  -0.716  -2.057  1.00  0.00      DIA  H
+ATOM     21  HB2 ALA     2       2.556  -1.051  -0.295  1.00  0.00      DIA  H
+ATOM     22  HB3 ALA     2       2.070  -2.314  -1.490  1.00  0.00      DIA  H
+END
diff --git a/test/namd/dia2.psf b/test/namd/dia2.psf
new file mode 100644
index 000000000..3f581d6d0
--- /dev/null
+++ b/test/namd/dia2.psf
@@ -0,0 +1,98 @@
+PSF
+
+       6 !NTITLE
+ REMARKS original generated structure x-plor psf file
+ REMARKS 2 patches were applied to the molecule.
+ REMARKS topology top_all27_prot_lipid.rtf 
+ REMARKS segment DIA { first ACE; last CT3; auto none  }
+ REMARKS patch ACE DIA:2  
+ REMARKS patch CT3 DIA:2  
+
+      22 !NATOM
+       1 DIA  2    ALA  C    C      0.510000       12.0110           0
+       2 DIA  2    ALA  O    O     -0.510000       15.9990           0
+       3 DIA  2    ALA  NT   NH1   -0.470000       14.0070           0
+       4 DIA  2    ALA  HNT  H      0.310000        1.0080           0
+       5 DIA  2    ALA  CAT  CT3   -0.110000       12.0110           0
+       6 DIA  2    ALA  HT1  HA     0.090000        1.0080           0
+       7 DIA  2    ALA  HT2  HA     0.090000        1.0080           0
+       8 DIA  2    ALA  HT3  HA     0.090000        1.0080           0
+       9 DIA  2    ALA  CAY  CT3   -0.270000       12.0110           0
+      10 DIA  2    ALA  HY1  HA     0.090000        1.0080           0
+      11 DIA  2    ALA  HY2  HA     0.090000        1.0080           0
+      12 DIA  2    ALA  HY3  HA     0.090000        1.0080           0
+      13 DIA  2    ALA  CY   C      0.510000       12.0110           0
+      14 DIA  2    ALA  OY   O     -0.510000       15.9990           0
+      15 DIA  2    ALA  N    NH1   -0.470000       14.0070           0
+      16 DIA  2    ALA  HN   H      0.310000        1.0080           0
+      17 DIA  2    ALA  CA   CT1    0.070000       12.0110           0
+      18 DIA  2    ALA  HA   HB     0.090000        1.0080           0
+      19 DIA  2    ALA  CB   CT3   -0.270000       12.0110           0
+      20 DIA  2    ALA  HB1  HA     0.090000        1.0080           0
+      21 DIA  2    ALA  HB2  HA     0.090000        1.0080           0
+      22 DIA  2    ALA  HB3  HA     0.090000        1.0080           0
+
+      21 !NBOND: bonds
+       1       3       1      17       2       1       3       4
+       3       5       5       6       5       7       5       8
+       9      10       9      11       9      12      13       9
+      13      15      14      13      15      16      15      17
+      17      18      19      17      19      20      19      21
+      19      22
+
+      36 !NTHETA: angles
+       1      17      18       1       3       5       1       3       4
+       3       5       8       3       5       7       3       5       6
+       3       1       2       3       1      17       4       3       5
+       6       5       8       6       5       7       7       5       8
+       9      13      14       9      13      15      10       9      12
+      10       9      11      11       9      12      13      15      17
+      13      15      16      13       9      12      13       9      11
+      13       9      10      15      17      18      15      17       1
+      15      13      14      16      15      17      17      19      22
+      17      19      21      17      19      20      17       1       2
+      19      17      18      19      17       1      19      17      15
+      20      19      22      20      19      21      21      19      22
+
+      41 !NPHI: dihedrals
+       1      17      19      20       1      17      19      21
+       1      17      19      22       1      17      15      13
+       1      17      15      16       1       3       5       6
+       1       3       5       7       1       3       5       8
+       2       1       3       4       2       1       3       5
+       2       1      17      19       2       1      17      15
+       2       1      17      18       3       1      17      19
+       3       1      17      15       3       1      17      18
+       4       3       1      17       4       3       5       6
+       4       3       5       7       4       3       5       8
+       5       3       1      17       9      13      15      16
+       9      13      15      17      10       9      13      15
+      10       9      13      14      11       9      13      15
+      11       9      13      14      12       9      13      15
+      12       9      13      14      13      15      17      19
+      13      15      17      18      14      13      15      16
+      14      13      15      17      15      17      19      20
+      15      17      19      21      15      17      19      22
+      16      15      17      19      16      15      17      18
+      18      17      19      20      18      17      19      21
+      18      17      19      22
+
+       4 !NIMPHI: impropers
+       1      17       3       2       3       1       5       4
+      13       9      15      14      15      13      17      16
+
+       0 !NDON: donors
+
+
+       0 !NACC: acceptors
+
+
+       0 !NNB
+
+       0       0       0       0       0       0       0       0
+       0       0       0       0       0       0       0       0
+       0       0       0       0       0       0
+
+       1       0 !NGRP
+       0       0       0
+
diff --git a/test/namd/namd_input b/test/namd/namd_input
new file mode 100644
index 000000000..3b4cd6ab5
--- /dev/null
+++ b/test/namd/namd_input
@@ -0,0 +1,43 @@
+# metadynamics 
+
+plumed            on
+plumedfile      plumed.dat
+
+# set system
+structure   ./dia2.psf
+coordinates ./dia2.pdb
+
+# ffield
+paratypecharmm on
+parameters ./par_all27_prot_lipid.prm
+exclude scaled1-4
+1-4scaling 1.0
+
+#approx
+switching on
+switchdist 20
+cutoff 22
+pairlistdist 22
+margin 0
+stepspercycle 1
+
+# integrator
+timestep 0.2
+
+#output
+outputenergies 1 
+outputtiming 1
+binaryoutput no
+dcdfreq 10000
+outputname outconf
+
+# protocol
+temperature 300.0
+# Constant Temperature Control
+langevin            on    
+langevinDamping     5     
+langevinTemp        300
+
+#script 
+numsteps     1000
+seed		791064882
diff --git a/test/namd/par_all27_prot_lipid.prm b/test/namd/par_all27_prot_lipid.prm
new file mode 100755
index 000000000..025f4f378
--- /dev/null
+++ b/test/namd/par_all27_prot_lipid.prm
@@ -0,0 +1,3681 @@
+*>CHARMM22 All-Hydrogen Parameter File for Proteins and Lipids <<
+*>>>>> Includes phi, psi cross term map (CMAP) correction <<<<<<<
+*>>>>>>>>>>>>>>>>>>>>>>   July, 2003   <<<<<<<<<<<<<<<<<<<<<<<<<<
+* All comments to ADM jr. via the CHARMM web site: www.charmm.org
+*               parameter set discussion forum
+*
+
+! references
+!
+!PROTEINS
+!
+!MacKerell, A.D., Jr,. Feig, M., Brooks, C.L., III, Extending the
+!treatment of backbone energetics in protein force fields: limitations
+!of gas-phase quantum mechanics in reproducing protein conformational
+!distributions in molecular dynamics simulations, Journal of
+!Computational Chemistry, 25: 1400-1415, 2004.
+!
+!MacKerell, Jr., A. D.; Bashford, D.; Bellott, M.; Dunbrack Jr., R.L.;
+!Evanseck, J.D.; Field, M.J.; Fischer, S.; Gao, J.; Guo, H.; Ha, S.;
+!Joseph-McCarthy, D.; Kuchnir, L.; Kuczera, K.; Lau, F.T.K.; Mattos,
+!C.; Michnick, S.; Ngo, T.; Nguyen, D.T.; Prodhom, B.; Reiher, III,
+!W.E.; Roux, B.; Schlenkrich, M.; Smith, J.C.; Stote, R.; Straub, J.;
+!Watanabe, M.; Wiorkiewicz-Kuczera, J.; Yin, D.; Karplus, M.  All-atom
+!empirical potential for molecular modeling and dynamics Studies of
+!proteins.  Journal of Physical Chemistry B, 1998, 102, 3586-3616.
+!
+!ZINC
+!
+!Roland H. Stote and Martin Karplus, Zinc Binding in Proteins and
+!Solution: A Simple but Accurate Nonbonded Representation, PROTEINS:
+!Structure, Function, and Genetics 23:12-31 (1995)
+!
+!LIPIDS
+!
+!Feller, S.E. Gawrisch, G. and MacKerell, Jr., A.D. Polyunsaturated
+!Fatty Acids in Lipid Bilayers: Intrinsic and Environmental
+!Contributions to Their Unique Physical Properties. Journal of
+!the American Chemical Society, 2002, 124:318-326
+!
+!Feller, S. and MacKerell, Jr., A.D. An Improved Empirical Potential
+!Energy Function for  Molecular Simulations of Phospholipids, Journal
+!of Physical Chemistry B, 2000, 104: 7510-7515.
+!
+!and
+!
+!Schlenkrich, M., Brickmann, J., MacKerell, Jr., A.D., and Karplus, M.
+!Empirical Potential Energy Function for Phospholipids: Criteria for
+!Parameter Optimization and Applications, in "Biological Membranes: A
+!Molecular Perspective from Computation and Experiment," K.M. Merz and
+!B. Roux, Eds. Birkhauser, Boston, 1996, pp 31-81.
+!
+!new ALKANES
+!
+!Yin, D. and MacKerell, Jr. A.D. Combined Ab initio/Empirical Approach
+!for the Optimization of Lennard-Jones Parameters. Journal of
+!Computational Chemistry, 1998, 19: 334-338.
+!
+!ALKENES
+!
+!Feller, S.E., Yin, D., Pastor, R.W., and MacKerell, Jr., A.D.,
+!Molecular Dynamics Simulation of Unsaturated Lipids at Low Hydration:
+!Parameterization and Comparison with Diffraction Studies.  Biophysical
+!Journal, 73:2269-2279, 1997.
+!
+!new PHOSPHATE
+!
+!MacKerell, Jr., A.D. Influence of Water and Sodium on the Energetics
+!of Dimethylphosphate and its Implications For DNA Structure, Journal
+!de Chimie Physique, 1997, 94: 1436-1447.
+!
+!IONS
+!
+!all ions from Roux and coworkers
+!
+!Sodium
+!
+!Beglov, D. and Roux, B., Finite Representation of an Infinite
+!Bulk System: Solvent Boundary Potential for Computer Simulations,
+!Journal of Chemical Physics, 1994, 100: 9050-9063
+!
+
+BONDS
+!
+!V(bond) = Kb(b - b0)**2
+!
+!Kb: kcal/mole/A**2
+!b0: A
+!
+!atom type Kb          b0
+!
+!Carbon Dioxide
+CST  OST   937.96      1.1600 ! JES
+!Heme to Sulfate (PSUL) link
+SS   FE    250.0       2.3200 !force constant a guess
+           !equilbrium bond length optimized to reproduce 
+           !CSD survey values of
+           !2.341pm0.01 (mean, standard error)
+           !adm jr., 7/01
+C    C     600.000     1.3350 ! ALLOW ARO HEM
+                ! Heme vinyl substituent (KK, from propene (JCS))
+CA   CA    305.000     1.3750 ! ALLOW   ARO
+                ! benzene, JES 8/25/89
+CE1  CE1   440.000     1.3400   ! 
+		! for butene; from propene, yin/adm jr., 12/95
+CE1  CE2   500.000     1.3420   ! 
+		! for propene, yin/adm jr., 12/95
+CE1  CT2   365.000     1.5020   ! 
+		! for butene; from propene, yin/adm jr., 12/95
+CE1  CT3   383.000     1.5040   ! 
+		! for butene, yin/adm jr., 12/95
+CE2  CE2   510.000     1.3300   ! 
+		! for ethene, yin/adm jr., 12/95
+CP1  C     250.000     1.4900 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP1  CC    250.000     1.4900 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP1  CD    200.000     1.4900 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP1   222.500     1.5270 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP2   222.500     1.5370 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  CP2   222.500     1.5370 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CPB  CE1   450.000     1.3800 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CPB  CPA   299.800     1.4432 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPB  CPB   340.700     1.3464 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPH1 CPH1  410.000     1.3600 ! ALLOW ARO
+                ! histidine, adm jr., 6/27/90
+CPM  CPA   360.000     1.3716 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPT  CA    305.000     1.3680 ! ALLOW   ARO
+                ! adm jr., 12/30/91, for jwk
+CPT  CPT   360.000     1.4000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CT1  C     250.000     1.4900 ! ALLOW   ALI PEP POL ARO
+                ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)
+CT1  CC    200.000     1.5220 ! ALLOW   POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT1  CD    200.000     1.5220 ! ALLOW   POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT1  CT1   222.500     1.5000 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT2  C     250.000     1.4900 ! ALLOW   ALI PEP POL ARO
+                ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)
+CT2  CA    230.000     1.4900 ! ALLOW   ALI ARO
+                ! phe,tyr, JES 8/25/89
+CT2  CC    200.000     1.5220 ! ALLOW   POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT2  CD    200.000     1.5220 ! ALLOW   POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT2  CPB   230.000     1.4900 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT2  CPH1  229.630     1.5000 ! ALLOW ARO
+                ! his, adm jr., 7/22/89, FC from CT2CT, BL from crystals
+CT2  CT1   222.500     1.5380 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT2  CT2   222.500     1.5300 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  C     250.000     1.4900 ! ALLOW   ALI PEP POL ARO
+                ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)
+CT3  CA    230.000     1.4900 ! ALLOW   ALI ARO
+                ! toluene, adm jr. 3/7/92
+CT3  CC    200.000     1.5220 ! ALLOW   POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT3  CD    200.000     1.5220 ! ALLOW   POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT3  CPB   230.000     1.4900 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT3  CPH1  229.630     1.5000 ! ALLOW ARO
+                ! his, adm jr., 7/22/89, FC from CT2CT, BL from crystals
+CT3  CS    190.000     1.5310 ! ALLOW   SUL
+                ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+CT3  CT1   222.500     1.5380 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  CT2   222.500     1.5280 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  CT3   222.500     1.5300 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CY   CA    350.000     1.3650 ! ALLOW   ARO
+                !adm jr., 5/08/91, indole CCDB structure search
+CY   CPT   350.000     1.4400 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CY   CT2   230.000     1.5100 ! ALLOW ARO
+                !JWK  Kb from alkane freq.. b0 from TRP crystal
+FE   CM    258.000     1.9000 ! ALLOW HEM
+                ! Heme (6-liganded): CO ligand (KK 05/13/91)
+FE   CPM     0.000     3.3814 ! ALLOW HEM
+                ! Heme (6-liganded): for "ic para" only (KK 05/13/91)
+H    CD    330.000     1.1100 ! ALLOW   PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+!HA   C     330.000     1.1000 ! ALLOW ARO HEM
+                ! Heme vinyl substituent (KK, from propene (JCS))
+HA   CA    340.000     1.0830 ! ALLOW ARO
+                ! trp, adm jr., 10/02/89
+HA   CC    317.130     1.1000 ! ALLOW POL
+                ! adm jr., 5/13/91, formamide geometry and vibrations
+HA   CP2   309.000     1.1110 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP3   309.000     1.1110 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CPM   367.600     1.0900 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+HA   CS    300.000     1.1110 ! ALLOW   SUL
+                ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+HA   CT1   309.000     1.1110 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT2   309.000     1.1110 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT3   322.000     1.1110 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CY    330.000     1.0800 ! ALLOW   ARO
+                ! JWK 05/14/91 new r0 from indole
+HE1  CE1   360.500     1.1000   ! 
+		! for propene, yin/adm jr., 12/95
+HE2  CE2   365.000     1.1000   ! 
+		! for ethene, yin/adm jr., 12/95
+HB   CP1   330.000     1.0800 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CT1   330.000     1.0800 ! ALLOW   PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT2   330.000     1.0800 ! ALLOW   PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT3   330.000     1.0800 ! ALLOW   PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HP   CA    340.000     1.0800 ! ALLOW   ARO
+                ! phe,tyr JES 8/25/89
+HP   CY    350.000     1.0800 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+HR1  CPH1  375.000     1.0830 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH2  340.000     1.0900 ! ALLOW ARO
+                ! his, adm jr., 6/28/29
+HR2  CPH2  333.000     1.0700 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR3  CPH1  365.000     1.0830 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HT   HT      0.000     1.5139 ! ALLOW WAT
+                ! FROM TIPS3P GEOMETRY (FOR SHAKE/W PARAM)
+N    C     260.000     1.3000 ! ALLOW PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP1   320.000     1.4340 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP3   320.000     1.4550 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NC2  C     463.000     1.3650 ! ALLOW   PEP POL ARO
+                ! 403.0->463.0, 1.305->1.365 guanidinium (KK)
+NC2  CT2   261.000     1.4900 ! ALLOW   ALI POL
+                ! arg, (DS)
+NC2  CT3   261.000     1.4900 ! ALLOW   ALI POL
+                ! methylguanidinium, adm jr., 3/26/92
+NC2  HC    455.000     1.0000 ! ALLOW   POL
+                ! 405.0->455.0 GUANIDINIUM (KK)
+NH1  C     370.000     1.3450 ! ALLOW   PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT1   320.000     1.4300 ! ALLOW   ALI PEP POL ARO
+                ! NMA Gas & Liquid Phase IR Spectra (LK)
+NH1  CT2   320.000     1.4300 ! ALLOW   ALI PEP POL ARO
+                ! NMA Gas & Liquid Phase IR Spectra (LK)
+NH1  CT3   320.000     1.4300 ! ALLOW   ALI PEP POL ARO
+                ! NMA Gas & Liquid Phase IR Spectra (LK)
+NH1  H     440.000     0.9970 ! ALLOW   PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  HC    405.000     0.9800 ! ALLOW   PEP POL ARO
+                ! (DS)
+NH2  CC    430.000     1.3600 ! ALLOW   PEP POL ARO
+                ! adm jr. 4/10/91, acetamide
+NH2  CT2   240.000     1.4550
+                ! from NH2  CT3, neutral glycine, adm jr.
+NH2  CT3   240.000     1.4550 ! ALLOW   POL
+                ! methylamine geom/freq, adm jr., 6/2/92
+NH2  H     480.000     1.0000 ! ALLOW   POL
+                ! adm jr. 8/13/90 acetamide geometry and vibrations
+NH2  HC    460.000     1.0000 ! ALLOW   POL
+                ! methylamine geom/freq, adm jr., 6/2/92
+NH3  CT1   200.000     1.4800 ! ALLOW   ALI POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+NH3  CT2   200.000     1.4800 ! ALLOW   ALI POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+NH3  CT3   200.000     1.4800 ! ALLOW   ALI POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+NH3  HC    403.000     1.0400 ! ALLOW   POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+NP   CP1   320.000     1.4850 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP3   320.000     1.5020 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   HC    460.000     1.0060 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NPH  CPA   377.200     1.3757 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NPH  FE    270.200     1.9580 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NR1  CPH1  400.000     1.3800 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR1  CPH2  400.000     1.3600 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR1  H     466.000     1.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  CPH1  400.000     1.3800 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  CPH2  400.000     1.3200 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  FE     65.000     2.2000 ! ALLOW HEM
+                ! Heme (6-liganded): His ligand (KK 05/13/91)
+NR3  CPH1  380.000     1.3700 ! ALLOW ARO
+                ! his, adm jr., 6/28/90
+NR3  CPH2  380.000     1.3200 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  H     453.000     1.0000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NY   CA    270.000     1.3700 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+NY   CPT   270.000     1.3750 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+NY   H     465.000     0.9760 ! ALLOW   ARO
+                ! indole JWK   08/28/89
+O    C     620.000     1.2300 ! ALLOW   PEP POL ARO
+                ! Peptide geometry, condensed phase (LK)
+O    CC    650.000     1.2300 ! ALLOW   PEP POL ARO
+                ! adm jr. 4/10/91, acetamide
+OB   CC    750.000     1.2200 ! ALLOW   PEP POL ARO
+                ! adm jr., 10/17/90, acetic acid vibrations and geom.
+OB   CD    750.000     1.2200 ! ALLOW   PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+OC   CA    525.000     1.2600 ! ALLOW   PEP POL ARO ION
+                ! adm jr. 8/27/91, phenoxide
+OC   CC    525.000     1.2600 ! ALLOW   PEP POL ARO ION
+                ! adm jr. 7/23/91, acetic acid
+OC   CT2   450.000     1.3300 ! ALLOW   ALC
+                ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92
+OC   CT3   450.000     1.3300 ! ALLOW   ALC
+                ! methoxide 6-31+G* geom/freq, adm jr., 6/1/92
+OH1  CA    334.300     1.4110 ! ALLOW   ARO ALC
+                ! MeOH, EMB 10/10/89,
+OH1  CD    230.000     1.4000 ! ALLOW   PEP POL ARO ALC
+                ! adm jr. 5/02/91, acetic acid pure solvent
+OH1  CT1   428.000     1.4200 ! ALLOW   ALI ALC ARO
+                ! methanol vib fit EMB 11/21/89
+OH1  CT2   428.000     1.4200 ! ALLOW   ALI ALC ARO
+                ! methanol vib fit EMB 11/21/89
+OH1  CT3   428.000     1.4200 ! ALLOW   ALI ALC ARO
+                ! methanol vib fit EMB 11/21/89
+OH1  H     545.000     0.9600 ! ALLOW   ALC ARO
+                ! EMB 11/21/89 methanol vib fit
+OM   CM   1115.000     1.1280 ! ALLOW HEM
+                ! Heme (6-liganded): CO ligand (KK 05/13/91)
+OM   FE    250.000     1.8000 ! ALLOW HEM
+                ! Heme (6-liganded): O2 ligand (KK 05/13/91)
+OM   OM    600.000     1.2300 ! ALLOW HEM
+                ! Heme (6-liganded): O2 ligand (KK 05/13/91)
+OS   CD    150.000     1.3340 ! ALLOW POL PEP
+                ! adm jr. 5/02/91, acetic acid pure solvent
+OS   CT3   340.000     1.4300 ! ALLOW POL PEP
+                ! adm jr., 4/05/91, for PRES CT1 from methylacetate
+OT   HT    450.000     0.9572 ! ALLOW   WAT
+                ! FROM TIPS3P GEOM
+S    CT2   198.000     1.8180 ! ALLOW   ALI SUL ION
+                ! fitted to C-S s   9/26/92 (FL)
+S    CT3   240.000     1.8160 ! ALLOW   ALI SUL ION
+                ! fitted to C-S s   9/26/92 (FL)
+S    HS    275.000     1.3250 ! ALLOW   SUL ION
+                ! methanethiol pure solvent, adm jr., 6/22/92
+SM   CT2   214.000     1.8160 ! ALLOW   SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+SM   CT3   214.000     1.8160 ! ALLOW   SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+SM   SM    173.000     2.0290 ! ALLOW   SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+SS   CS    205.000     1.8360 ! ALLOW   SUL
+                ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+!lipid section
+CTL3  CL    200.0       1.522   ! methyl acetate
+CTL2  CL    200.0       1.522   ! methyl acetate
+CTL1  CL    200.0       1.522   ! methyl acetate
+OBL   CL    750.0       1.220   ! methyl acetate
+OCL   CL    525.0       1.260   ! acetate, protein
+OSL   CL    150.0       1.334   ! methyl acetate
+OHL   CL    230.0       1.40    ! methyl acetate
+HOL   OHL   545.0       0.960   ! acetic acid
+CTL1  HAL1  309.00      1.111   ! alkanes, 3/92
+CTL2  HAL2  309.00      1.111   ! alkanes, 4/98
+CTL3  HAL3  322.00      1.111   ! alkanes, 4/98
+CTL3  OSL   340.0       1.43    ! phosphate
+CTL2  OSL   340.0       1.43    ! phosphate
+CTL1  OSL   340.0       1.43    ! phosphate
+OSL   PL    270.0       1.60    ! phosphate
+O2L   PL    580.0       1.48    ! phosphate
+OHL   PL    237.0       1.59    ! phosphate
+NH3L  HCL   410.0       1.04    ! ethanolamine
+NH3L  CTL2  261.0       1.51    ! ethanolamine
+NTL   CTL2  215.00      1.51    ! tetramethylammonium
+NTL   CTL5  215.00      1.51    ! tetramethylammonium
+CTL5  HL    300.00      1.08    ! tetramethylammonium
+CTL2  HL    300.00      1.08    ! tetramethylammonium
+CTL1  CTL1  222.500     1.500   ! alkanes, 3/92
+CTL1  CTL2  222.500     1.538   ! alkanes, 3/92
+CTL1  CTL3  222.500     1.538   ! alkanes, 3/92
+CTL2  CTL2  222.500     1.530   ! alkanes, 3/92
+CTL2  CTL3  222.500     1.528   ! alkanes, 3/92
+CTL3  CTL3  222.500     1.530   ! alkanes, 3/92
+OHL   CTL1  428.0       1.420   !  glycerol
+OHL   CTL2  428.0       1.420   !  glycerol
+OHL   CTL3  428.0       1.420   !  glycerol
+SL    O2L   540.0       1.448   ! methylsulfate
+SL    OSL   250.0       1.575   ! methylsulfate
+!HT    HT      0.0       1.5139  ! from TIPS3P geometry (for SHAKE w/PARAM)
+!HT    OT    450.0       0.9572  ! from TIPS3P geometry
+CEL2  CEL2  510.000     1.330   ! ethene yin,adm jr., 12/95
+HEL2  CEL2  365.000     1.100   ! propene; from ethene, yin,adm jr., 12/95
+CEL1  CTL3  383.000     1.504   ! butene, yin,adm jr., 12/95
+CEL1  CEL2  500.000     1.342   ! propene, yin,adm jr., 12/95
+HEL1  CEL1  360.500     1.100   ! propene, yin,adm jr., 12/95
+CEL1  CTL2  365.000     1.502   ! butene; from propene, yin,adm jr., 12/95
+CEL1  CEL1  440.000     1.340   ! butene, yin,adm jr., 12/95
+
+ANGLES
+!
+!V(angle) = Ktheta(Theta - Theta0)**2
+!
+!V(Urey-Bradley) = Kub(S - S0)**2
+!
+!Ktheta: kcal/mole/rad**2
+!Theta0: degrees
+!Kub: kcal/mole/A**2 (Urey-Bradley)
+!S0: A
+!
+!atom types     Ktheta    Theta0   Kub     S0
+!
+!Carbon Dioxide, JES
+OST  CST  OST    3000.00  180.0000 ! CO2, JES
+!Heme to Sulfate (PSUL) link
+CS   SS   FE    50.0      100.6    !force constant a guess
+                !equilibrium angle optimized to reproduce
+                !CSD survey values
+                !107.5pm0.6 (mean, standard error)
+                !adm jr., 7/01
+SS   FE   NPH   100.0       90.0    !force constant a guess
+                !adm jr., 7/01
+!
+CA   CA   CA    40.000    120.00   35.00   2.41620 ! ALLOW   ARO
+                ! JES 8/25/89
+CE1  CE1  CT2    48.00    123.50   !
+                ! for 2-butene, yin/adm jr., 12/95
+CE1  CE1  CT3    48.00    123.50   ! 
+		! for 2-butene, yin/adm jr., 12/95
+CE1  CT2  CT3    32.00    112.20   ! 
+		! for 1-butene; from propene, yin/adm jr., 12/95
+CE2  CE1  CT2    48.00    126.00   ! 
+		! for 1-butene; from propene, yin/adm jr., 12/95
+CE2  CE1  CT3    47.00    125.20   ! 
+		! for propene, yin/adm jr., 12/95
+CP1  N    C      60.000   117.0000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP1  C      52.000   112.3000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP1  CC     52.000   112.3000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP1  CD     50.000   112.3000 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP2  CP1    70.000   108.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  CP2  CP2    70.000   108.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    C      60.000   117.0000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    CP1   100.000   114.2000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  NP   CP1   100.000   111.0000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CPA  CPB  CE1    70.000   126.7400 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CPA  CPM  CPA    94.200   125.1200 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPA  NPH  CPA   139.300   103.9000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPB  CE1  CE2    70.000   121.5000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CPB  CPB  CE1    70.000   126.7500 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CPB  CPB  CPA    30.800   106.5100 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPH2 NR1  CPH1  130.000   107.5000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+CPH2 NR2  CPH1  130.000   104.0000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+CPH2 NR3  CPH1  145.000   108.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+CPM  CPA  CPB    61.600   124.0700 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPT  CA   CA     60.000   118.0000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CPT  CPT  CA     60.000   122.0000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CPT  CY   CA   120.000    107.40   25.00   2.26100 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CPT  NY   CA    110.000   108.0000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CT1  CT1  C      52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+CT1  CT1  CC     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT1  CT1  CT1   53.350    111.00    8.00   2.56100 ! ALLOW ALI
+                ! alkane update, adm jr., 3/2/92
+CT1  CT2  CA     51.800   107.5000 ! ALLOW   ALI ARO
+                ! PARALLH19 (JES)
+CT1  CT2  CC     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT1  CT2  CD     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT1  CT2  CPH1   58.350   113.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted
+CT1  CT2  CT1   58.350    113.50   11.16   2.56100 ! ALLOW   ALI
+                ! alkane frequencies (MJF), alkane geometries (SF)
+CT1  NH1  C      50.000   120.0000 ! ALLOW   ALI PEP POL ARO
+                ! NMA Vib Modes (LK)
+CT2  CA   CA     45.800   122.3000 ! ALLOW   ALI ARO
+                ! PARALLH19 (JES)
+CT2  CPB  CPA    65.000   126.7400 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT2  CPB  CPB    65.000   126.7500 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT2  CPH1 CPH1   45.800   130.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS
+CT2  CT1  C      52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+CT2  CT1  CC     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT2  CT1  CD     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT2  CT1  CT1   53.350    111.00    8.00   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT2  CT2  C      52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! from CT2  CT1  C, for lactams, adm jr.
+CT2  CT2  CC     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+CT2  CT2  CD     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT2  CT2  CPB    70.000   113.0000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT2  CT2  CT1   58.350    113.50   11.16   2.56100 ! ALLOW   ALI
+                ! alkane frequencies (MJF), alkane geometries (SF)
+CT2  CT2  CT2   58.350    113.60   11.16   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT2  CT3  CT1   58.350    113.50   11.16   2.56100 ! ALLOW   ALI
+                ! alkane frequencies (MJF), alkane geometries (SF)
+CT2  CY   CA     45.800   129.4000 ! ALLOW ARO
+                !adm jr., 5/08/91,  indole CCDB structure search
+CT2  CY   CPT    45.800   124.0000 ! ALLOW ARO
+                !adm jr., 5/08/91,  indole CCDB structure search
+CT2  NC2  C      62.300   120.0000 ! ALLOW   ALI POL PEP ARO
+                ! 107.5->120.0 to make planar Arg (KK)
+CT2  NH1  C      50.000   120.0000 ! ALLOW   ALI PEP POL ARO
+                ! NMA Vib Modes (LK)
+CT2  OS   CD    40.000    109.60   30.00   2.26510 ! ALLOW  POL PEP
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT3  CA   CA     45.800   122.3000 ! ALLOW   ALI ARO
+                ! toluene, adm jr., 3/7/92
+CT3  CPB  CPA    65.000   126.7400 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT3  CPB  CPB    65.000   126.7500 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT3  CPH1 CPH1   45.800   130.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS
+CT3  CT1  C      52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+CT3  CT1  CC     52.000   108.0000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/09/92, for ALA cter
+CT3  CT1  CT1   53.350    108.50    8.00   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  CT1  CT2   53.350    114.00    8.00   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  CT1  CT3   53.350    114.00    8.00   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  CT2  CA     51.800   107.5000 ! ALLOW   ALI ARO
+                ! ethylbenzene, adm jr., 3/7/92
+CT3  CT2  CPH1   58.350   113.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted
+CT3  CT2  CT1   58.350    113.50   11.16   2.56100 ! ALLOW   ALI
+                ! alkane frequencies (MJF), alkane geometries (SF)
+CT3  CT2  CT2   58.000    115.00    8.00   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  CT2  CT3   53.350    114.00    8.00   2.56100 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CT3  NC2  C      62.300   120.0000 ! ALLOW   ALI POL PEP ARO
+                ! methylguanidinium, adm jr., 3/26/92
+CT3  NH1  C      50.000   120.0000 ! ALLOW   ALI PEP POL ARO
+                ! NMA Vib Modes (LK)
+CT3  OS   CD    40.000    109.60   30.00   2.26510 ! ALLOW  POL PEP
+                ! adm jr. 5/02/91, acetic acid pure solvent
+CT3  S    CT2    34.000    95.0000 ! ALLOW   ALI SUL ION
+                ! expt. MeEtS,    3/26/92 (FL)
+CY   CPT  CA    160.000   130.6000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CY   CPT  CPT   110.000   107.4000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+CY   CT2  CT1    58.350   114.0000 ! ALLOW ARO
+                ! from TRP crystal, JWK
+CY   CT2  CT3    58.350   114.0000 ! ALLOW ARO
+                ! from TRP crystal, JWK
+FE   NPH  CPA    96.150   128.0500 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+FE   NR2  CPH1   30.000   133.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+FE   NR2  CPH2   30.000   123.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+H    NH1  C      34.000   123.0000 ! ALLOW   PEP POL ARO
+                ! NMA Vib Modes (LK)
+H    NH1  CT1    35.000   117.0000 ! ALLOW   PEP POL ARO ALI
+                ! NMA Vibrational Modes (LK)
+H    NH1  CT2    35.000   117.0000 ! ALLOW   PEP POL ARO ALI
+                ! NMA Vibrational Modes (LK)
+H    NH1  CT3    35.000   117.0000 ! ALLOW   PEP POL ARO ALI
+                ! NMA Vibrational Modes (LK)
+H    NH2  CC     50.000   120.0000 ! ALLOW   POL PEP ARO
+                ! his, adm jr. 8/13/90 acetamide geometry and vibrations
+H    NH2  H      23.000   120.0000 ! ALLOW   POL
+                ! adm jr. 8/13/90 acetamide geometry and vibrations
+H    NR1  CPH1  30.000    125.50   20.00   2.15000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+H    NR1  CPH2  30.000    127.00   20.00   2.14000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+H    NR3  CPH1  25.000    126.00   15.00   2.13000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+H    NR3  CPH2  25.000    126.00   15.00   2.09000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+H    NY   CA     28.000   126.0000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+H    NY   CPT    28.000   126.0000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+H    OH1  CA     65.000   108.0000 ! ALLOW   ALC ARO
+                ! JES 8/25/89 phenol
+H    OH1  CD     55.000   115.0000 ! ALLOW   ALC ARO PEP POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+H    OH1  CT1    57.500   106.0000 ! ALLOW   ALC ARO ALI
+                ! methanol vib fit EMB 11/21/89
+H    OH1  CT2    57.500   106.0000 ! ALLOW   ALC ARO ALI
+                ! methanol vib fit EMB 11/21/89
+H    OH1  CT3    57.500   106.0000 ! ALLOW   ALC ARO ALI
+                ! methanol vib fit EMB 11/21/89
+!HA   C    C      50.000   120.5000 ! ALLOW   PEP POL ARO
+                ! Heme vinyl substituent (KK from propene (JCS))
+!HA   C    CPB    50.000   120.0000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+!HA   C    HA     50.000   118.0000 ! ALLOW   PEP POL ARO
+                ! Heme vinyl substituent (KK from propene (JCS))
+HA   CA   CA    29.000    120.00   25.00   2.15250 ! ALLOW ARO
+                ! trp, adm jr., 10/02/89
+HA   CA   CPT    41.000   122.0000 ! ALLOW   ARO
+                !adm jr., 5/08/91, indole CCDB structure search
+HA   CA   CY    32.000    125.00   25.00   2.17300 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+HA   CP2  CP1   33.430    110.10   22.53   2.17900 ! ALLOW ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP2  CP2   26.500    110.10   22.53   2.17900 ! ALLOW ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP2  CP3   26.500    110.10   22.53   2.17900 ! ALLOW ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP2  HA    35.500    109.00    5.40   1.80200 ! ALLOW ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP3  CP2   26.500    110.10   22.53   2.17900 ! ALLOW ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP3  HA    35.500    109.00    5.40   1.80200 ! ALLOW ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CPM  CPA    12.700   117.4400 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+HA   CPM  FE      0.000   180.0000 ! ALLOW HEM
+                ! Heme (6-liganded): for "ic para" only (KK 05/13/91)
+HA   CS   CT3   34.600    110.10   22.53   2.17900 ! ALLOW SUL
+                ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+HA   CS   HA    35.500    108.40   14.00   1.77500 ! ALLOW SUL
+                ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+HA   CT1  C     33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! alanine dipeptide, LK, replaced, adm jr., 5/09/91
+HA   CT1  CD    33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+HA   CT1  CT1   34.500    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT1  CT2   34.500    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT1  CT3   34.500    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT1  HA    35.500    109.00    5.40   1.80200 ! TEST for test cpd
+                ! based on HA   CT2  HA
+HA   CT2  C     33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! alanine dipeptide, LK, replaced, adm jr., 5/09/91
+HA   CT2  CA     49.300   107.5000 ! ALLOW   ALI ARO
+                ! PARALLH19 (JES)
+HA   CT2  CC    33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+HA   CT2  CD    33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+HA   CT2  CE1    45.00    111.50   ! 
+		! for 1-butene; from propene, yin/adm jr., 12/95
+HA   CT2  CPB    50.000   109.5000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+HA   CT2  CPH1   33.430   109.5000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED
+HA   CT2  CT1   33.430    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane frequencies (MJF), alkane geometries (SF)
+HA   CT2  CT2   26.500    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT2  CT3   34.600    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT2  CY     33.430   109.5000 ! ALLOW ARO
+                ! ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA
+HA   CT2  HA    35.500    109.00    5.40   1.80200 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT3  C     33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! alanine dipeptide, LK, replaced, adm jr., 5/09/91
+HA   CT3  CA     49.300   107.5000 ! ALLOW   ALI ARO
+                ! toluene, adm jr. 3/7/92
+HA   CT3  CC    33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+HA   CT3  CD    33.000    109.50   30.00   2.16300 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+HA   CT3  CE1    42.00    111.50   ! 
+		! for 2-butene, yin/adm jr., 12/95
+HA   CT3  CPB    50.000   109.5000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+HA   CT3  CPH1   33.430   109.5000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED
+HA   CT3  CS    34.600    110.10   22.53   2.17900 ! ALLOW SUL
+                ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+HA   CT3  CT1   33.430    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane frequencies (MJF), alkane geometries (SF)
+HA   CT3  CT2   34.600    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT3  CT3   37.500    110.10   22.53   2.17900 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CT3  HA    35.500    108.40    5.40   1.80200 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+HA   CY   CA    20.000    126.40   25.00   2.18600 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+HA   CY   CPT   32.000    126.40   25.00   2.25500 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+HE1  CE1  CE1    52.00    119.50   ! 
+		! for 2-butene, yin/adm jr., 12/95
+HE1  CE1  CE2    42.00    118.00   ! 
+		! for propene, yin/adm jr., 12/95
+HE1  CE1  CT2    40.00    116.00   ! 
+		! for 1-butene; from propene, yin/adm jr., 12/95
+HE1  CE1  CT3    22.00    117.00   ! 
+		! for propene, yin/adm jr., 12/95
+HE1  CE1  CPB    50.000   120.0000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+HE2  CE2  CE1    45.00    120.50   ! 
+		! for propene, yin/adm jr., 12/95
+HE2  CE2  CE2    55.50    120.50   ! 
+		! for ethene, yin/adm jr., 12/95
+HE2  CE2  HE2    19.00    119.00   ! 
+		! for propene, yin/adm jr., 12/95
+HB   CP1  C      50.000   112.0000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CP1  CC     50.000   112.0000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CP1  CD     50.000   112.0000 ! ALLOW PEP POL PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CP1  CP2    35.000   118.0000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CT1  C      50.000   109.5000 ! ALLOW  PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT1  CC     50.000   109.5000 ! ALLOW  PEP POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+HB   CT1  CD     50.000   109.5000 ! ALLOW  PEP POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+HB   CT1  CT1    35.000   111.0000 ! ALLOW  PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT1  CT2    35.000   111.0000 ! ALLOW  PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT1  CT3    35.000   111.0000 ! ALLOW  PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT2  C      50.000   109.5000 ! ALLOW  PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT2  CC     50.000   109.5000 ! ALLOW  PEP POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+HB   CT2  CD     50.000   109.5000 ! ALLOW  PEP POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+HB   CT2  HB     36.000   115.0000 ! ALLOW   PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT3  C      50.000   109.5000 ! ALLOW  PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HC   NC2  C      49.000   120.0000 ! ALLOW   POL PEP ARO
+                ! 35.3->49.0 GUANIDINIUM (KK)
+HC   NC2  CT2    40.400   120.0000 ! ALLOW   POL ALI
+                ! 107.5->120.0 to make planar Arg (KK)
+HC   NC2  CT3    40.400   120.0000 ! ALLOW   POL ALI
+                ! methylguanidinium, adm jr., 3/26/92
+HC   NC2  HC     25.000   120.0000 ! ALLOW   POL
+                ! 40.0->25.0 GUANIDINIUM (KK)
+HC   NH2  CT2    50.000   111.0000 ! ALLOW   POL
+                ! from HC NH2 CT3, neutral glycine, adm jr.
+HC   NH2  CT3    50.000   111.0000 ! ALLOW   POL
+                ! methylamine geom/freq, adm jr., 6/2/92
+HC   NH2  HC     39.000   106.5000 ! ALLOW   POL
+                ! 40.0->25.0 GUANIDINIUM (KK)
+HC   NH3  CT1   30.000    109.50   20.00   2.07400 ! ALLOW   POL ALI
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+HC   NH3  CT2   30.000    109.50   20.00   2.07400 ! ALLOW   POL ALI
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+HC   NH3  CT3   30.000    109.50   20.00   2.07400 ! ALLOW   POL ALI
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+HC   NH3  HC     44.000   109.5000 ! ALLOW   POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+HC   NP   CP1   33.000    109.50    4.00   2.05600 ! ALLOW POL ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP3   33.000    109.50    4.00   2.05600 ! ALLOW POL ALI PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   HC     51.000   107.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HP   CA   CA    30.000    120.00   22.00   2.15250 ! ALLOW   ARO
+                ! JES 8/25/89 benzene
+HP   CA   CPT   30.000    122.00   22.00   2.14600 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+HP   CA   CY    32.000    125.00   25.00   2.17300 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+HP   CY   CA    32.000    126.40   25.00   2.18600 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+HP   CY   CPT   32.000    126.40   25.00   2.25500 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+HR1  CPH1 CPH1  22.000    130.00   15.00   2.21500 ! ALLOW ARO
+                ! adm jr., 6/27/90, his
+HR3  CPH1 CPH1  25.000    130.00   20.00   2.20000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HS   S    CT2    38.800    95.0000 ! ALLOW   SUL ION ALI
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HS   S    CT3    43.000    95.0000 ! ALLOW   SUL ION ALI
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HT   OT   HT     55.000   104.5200 ! ALLOW WAT
+                ! TIP3P GEOMETRY, ADM JR.
+N    C    CP1    20.000   112.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT1    20.000   112.5000 ! ALLOW ALI PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT2    20.000   112.5000 ! ALLOW ALI PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT3    20.000   112.5000 ! ALLOW ALI PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP1  C      50.000   108.2000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP1  CC     50.000   108.2000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP1  CD     50.000   108.2000 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP1  CP2    70.000   110.8000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP1  HB     48.000   112.0000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP3  CP2    70.000   110.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CP3  HA     48.000   108.0000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NC2  C    NC2   52.000    120.00   90.00   2.36420 ! ALLOW   POL PEP ARO
+                ! changed from 60.0/120.3 for guanidinium (KK)
+NC2  CT2  CT2    67.700   107.5000 ! ALLOW   ALI POL
+                ! arg, (DS)
+NC2  CT2  HA     51.500   107.5000 ! ALLOW   ALI POL
+                ! arg, (DS)
+NC2  CT3  HA     51.500   107.5000 ! ALLOW   ALI POL
+                ! methylguanidinium, adm jr., 3/26/92
+NH1  C    CP1    80.000   116.5000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CT1    80.000   116.5000 ! ALLOW   ALI PEP POL ARO
+                ! NMA Vib Modes (LK)
+NH1  C    CT2    80.000   116.5000 ! ALLOW   ALI PEP POL ARO
+                ! NMA Vib Modes (LK)
+NH1  C    CT3    80.000   116.5000 ! ALLOW   ALI PEP POL ARO
+                ! NMA Vib Modes (LK)
+NH1  CT1  C      50.000   107.0000 ! ALLOW   PEP POL ARO ALI
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT1  CC     50.000   107.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+NH1  CT1  CD     50.000   107.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 5/02/91, acetic acid pure solvent
+NH1  CT1  CT1    70.000   113.5000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT1  CT2    70.000   113.5000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT1  CT3    70.000   113.5000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT1  HB     48.000   108.0000 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT2  C      50.000   107.0000 ! ALLOW   PEP POL ARO ALI
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT2  CC     50.000   107.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 5/20/92, for asn,asp,gln,glu and cters
+NH1  CT2  CD     50.000   107.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 5/02/91, acetic acid pure solvent
+NH1  CT2  CT2    70.000   113.5000 ! ALLOW   ALI PEP POL ARO
+                ! from NH1  CT1  CT2, for lactams, adm jr.
+NH1  CT2  HA     51.500   109.5000 ! ALLOW   ALI PEP POL ARO
+                ! from NH1  CT3  HA, for lactams, adm jr.
+NH1  CT2  HB     48.000   108.0000 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  CT3  HA     51.500   109.5000 ! ALLOW   ALI PEP POL ARO
+                ! NMA crystal (JCS)
+NH2  CC   CP1    80.000   112.5000 ! ALLOW ALI PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CT1   50.000    116.50   50.00   2.45000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 8/13/90 acetamide geometry and vibrations
+NH2  CC   CT2   50.000    116.50   50.00   2.45000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 8/13/90 acetamide geometry and vibrations
+NH2  CC   CT3   50.000    116.50   50.00   2.45000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 8/13/90 acetamide geometry and vibrations
+NH2  CC   HA    44.000    111.00   50.00   1.98000 ! ALLOW POL
+                ! adm jr., 5/13/91, formamide geometry and vibrations
+NH2  CT2  HA    38.000    109.50   50.00   2.14000
+                !from NH2  CT3  HA, neutral lysine
+NH2  CT2  HB    38.000    109.50   50.00   2.14000
+                !from NH2  CT3  HA, neutral glycine, adm jr.
+NH2  CT2  CD    52.000   108.0000
+                !from CT2 CT2 CD, neutral glycine, adm jr.
+NH2  CT2  CT2    67.700   110.0000 ! ALLOW   ALI POL
+                !from NH3  CT2  CT2, neutral lysine
+NH2  CT3  HA    38.000    109.50   50.00   2.14000 ! ALLOW POL
+                ! methylamine geom/freq, adm jr., 6/2/92
+NH3  CT1  C      43.700   110.0000 ! ALLOW   PEP POL ARO ALI
+                ! new aliphatics, adm jr., 2/3/92
+NH3  CT1  CC     43.700   110.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+NH3  CT1  CT1    67.700   110.0000 ! ALLOW   ALI POL
+                ! new aliphatics, adm jr., 2/3/92
+NH3  CT1  CT2    67.700   110.0000 ! ALLOW   ALI POL
+                ! new aliphatics, adm jr., 2/3/92
+NH3  CT1  CT3    67.700   110.0000 ! ALLOW   ALI POL
+                ! new aliphatics, adm jr., 2/3/92
+NH3  CT1  HB     51.500   107.5000 ! ALLOW   ALI POL PEP
+                ! new aliphatics, adm jr., 2/3/92
+NH3  CT2  C      43.700   110.0000 ! ALLOW   PEP POL ARO ALI
+                ! alanine (JCS)
+NH3  CT2  CC     43.700   110.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+NH3  CT2  CD     43.700   110.0000 ! ALLOW   PEP POL ARO ALI
+                ! adm jr. 5/02/91, acetic acid pure solvent
+NH3  CT2  CT2    67.700   110.0000 ! ALLOW   ALI POL
+                ! alanine (JCS)
+NH3  CT2  HA    45.000    107.50   35.00   2.10100 ! ALLOW   ALI POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+NH3  CT2  HB     51.500   107.5000 ! ALLOW   ALI POL PEP
+                ! for use on NTER -- from NH3 CT2HA (JCS) -- (LK)
+NH3  CT3  HA    45.000    107.50   35.00   2.10100 ! ALLOW   ALI POL
+                ! new stretch and bend; methylammonium (KK 03/10/92)
+NP   CP1  C      50.000   106.0000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP1  CC     50.000   106.0000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP1  CD     50.000   106.0000 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP1  CP2    70.000   108.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP1  HB     51.500   107.5000 ! ALLOW ALI POL PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP3  CP2    70.000   108.5000 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP3  HA     51.500   109.1500 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NPH  CPA  CPB   122.000   111.5400 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NPH  CPA  CPM    88.000   124.3900 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NPH  FE   CM     50.000    90.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+NPH  FE   CPM     0.000    45.0000 ! ALLOW HEM
+                ! Heme (6-liganded): for "ic para" only  (KK 05/13/91)
+NPH  FE   NPH    14.390    90.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NR1  CPH1 CPH1  130.000   106.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR1  CPH1 CT2    45.800   124.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FC FROM CA CT2CT
+NR1  CPH1 CT3    45.800   124.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FC FROM CA CT2CT
+NR1  CPH1 HR3   25.000    124.00   20.00   2.14000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+NR1  CPH2 HR1   25.000    122.50   20.00   2.14000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR2  CPH1 CPH1  130.000   110.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  CPH1 CT2    45.800   120.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FC FROM CA CT2CT
+NR2  CPH1 HR3   25.000    120.00   20.00   2.14000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+NR2  CPH2 HR1   25.000    125.00   20.00   2.12000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR2  CPH2 NR1   130.000   112.5000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR2  FE   CM     50.000   180.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+NR2  FE   NPH    50.000    90.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+NR3  CPH1 CPH1  145.000   108.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR3  CPH1 CT2    45.800   122.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FC FROM CA CT2CT
+NR3  CPH1 HR1   22.000    122.00   15.00   2.18000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH2 HR2   32.000    126.00   25.00   2.14000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH2 NR3   145.000   108.0000 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NY   CA   CY   120.000    110.00   25.00   2.24000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+NY   CA   HA    32.000    125.00   25.00   2.17700 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+NY   CA   HP    32.000    125.00   25.00   2.17700 ! ALLOW   ARO
+                ! JWK 05/14/91 new theta0 and r0UB from indole
+NY   CPT  CA    160.000   130.6000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+NY   CPT  CPT   110.000   107.4000 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+O    C    CP1    80.000   118.0000 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    CT1    80.000   121.0000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    CT2    80.000   121.0000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    CT3    80.000   121.0000 ! ALLOW   ALI PEP POL ARO
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    H      50.000   121.7000 ! ALLOW   PEP POL ARO
+                ! acetaldehyde (JCS)
+O    C    N      80.000   122.5000 ! ALLOW PRO PEP POL ARO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    NH1    80.000   122.5000 ! ALLOW   PEP POL ARO
+                ! NMA Vib Modes (LK)
+O    CC   CP1    80.000   118.0000 ! ALLOW ALI PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    CC   CT1   15.000    121.00   50.00   2.44000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/10/91, acetamide update
+O    CC   CT2   15.000    121.00   50.00   2.44000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/10/91, acetamide update
+O    CC   CT3   15.000    121.00   50.00   2.44000 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 4/10/91, acetamide update
+O    CC   HA     44.000   122.0000 ! ALLOW POL
+                ! adm jr., 5/13/91, formamide geometry and vibrations
+O    CC   NH2   75.000    122.50   50.00   2.37000 ! ALLOW   POL PEP ARO
+                ! adm jr. 4/10/91, acetamide update
+OB   CD   CP1   70.000    125.00   20.00   2.44200 ! ALLOW ALI PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OB   CD   CT1   70.000    125.00   20.00   2.44200 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+OB   CD   CT2   70.000    125.00   20.00   2.44200 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+OB   CD   CT3   70.000    125.00   20.00   2.44200 ! ALLOW   ALI PEP POL ARO
+                ! adm jr. 5/02/91, acetic acid pure solvent
+OC   CA   CA     40.000   120.0000 ! ALLOW  POL ARO
+                ! adm jr. 8/27/91, phenoxide
+OC   CC   CP1   40.000    118.00   50.00   2.38800 ! ALLOW ALI PEP POL ARO ION PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OC   CC   CT1   40.000    118.00   50.00   2.38800 ! ALLOW   ALI PEP POL ARO ION
+                ! adm jr. 7/23/91, correction, ACETATE (KK)
+OC   CC   CT2   40.000    118.00   50.00   2.38800 ! ALLOW   ALI PEP POL ARO ION
+                ! adm jr. 7/23/91, correction, ACETATE (KK)
+OC   CC   CT3   40.000    118.00   50.00   2.38800 ! ALLOW   ALI PEP POL ARO ION
+                ! adm jr. 7/23/91, correction, ACETATE (KK)
+OC   CC   OC   100.000    124.00   70.00   2.22500 ! ALLOW   POL ION PEP ARO
+                ! adm jr. 7/23/91, correction, ACETATE (KK)
+OC   CT2  CT3    65.000   122.0000 ! ALLOW  ALC
+                ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92
+OC   CT2  HA     65.000   118.3000 ! ALLOW  ALC
+                ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92
+OC   CT3  HA     65.000   118.3000 ! ALLOW  ALC
+                ! methoxide 6-31+G* geom/freq, adm jr., 6/1/92
+OH1  CA   CA     45.200   120.0000 ! ALLOW   ARO ALC
+                ! PARALLH19 WITH [122.3] (JES)
+OH1  CD   CT2    55.000   110.5000 ! ALLOW   ALI PEP POL ARO ALC
+                ! adm jr, 10/17/90, acetic acid vibrations
+OH1  CD   CT3    55.000   110.5000 ! ALLOW   ALI PEP POL ARO ALC
+                ! adm jr, 10/17/90, acetic acid vibrations
+OH1  CD   OB    50.000    123.00  210.00   2.26200 ! ALLOW   PEP POL ARO ALC
+                ! adm jr, 10/17/90, acetic acid vibrations
+OH1  CT1  CT1    75.700   110.1000 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT1  CT3    75.700   110.1000 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT1  HA     45.900   108.8900 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT2  CT1    75.700   110.1000 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT2  CT2    75.700   110.1000 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT2  CT3    75.700   110.1000 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT2  HA     45.900   108.8900 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OH1  CT3  HA     45.900   108.8900 ! ALLOW   ALI ALC ARO
+                ! MeOH, EMB, 10/10/89
+OM   CM   FE     35.000   180.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+OM   FE   NPH     5.000    90.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+OM   OM   FE      0.000   180.0000 ! ALLOW HEM
+                ! Heme (6-liganded): ligand links (KK 05/13/91)
+OS   CD   CP1   55.000    109.00   20.00   2.32600 ! ALLOW POL PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OS   CD   CT1   55.000    109.00   20.00   2.32600 ! ALLOW POL PEP
+                ! adm jr., 4/05/91, for PRES CT1 from methylacetate
+OS   CD   CT2   55.000    109.00   20.00   2.32600 ! ALLOW POL PEP
+                ! adm jr., 4/05/91, for PRES CT1 from methylacetate
+OS   CD   CT3   55.000    109.00   20.00   2.32600 ! ALLOW POL PEP
+                ! adm jr., 4/05/91, for PRES CT1 from methylacetate
+OS   CD   OB    90.000    125.90  160.00   2.25760 ! ALLOW  PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+OS   CT2  HA     60.000   109.5000 ! ALLOW PEP POL
+                ! adm jr. 4/05/91, for PRES CT1 from methyl acetate
+OS   CT3  HA     60.000   109.5000 ! ALLOW PEP POL
+                ! adm jr. 4/05/91, for PRES CT1 from methyl acetate
+S    CT2  CT1    58.000   112.5000 ! ALLOW   ALI SUL ION
+                ! as in expt.MeEtS & DALC crystal,  5/15/92
+S    CT2  CT2    58.000   114.5000 ! ALLOW   ALI SUL ION
+                ! expt. MeEtS,     3/26/92 (FL)
+S    CT2  CT3    58.000   114.5000 ! ALLOW   ALI SUL ION
+                ! expt. MeEtS,     3/26/92 (FL)
+S    CT2  HA     46.100   111.3000 ! ALLOW   ALI SUL ION
+                ! vib. freq. and HF/6-31G* geo. (DTN) 8/24/90
+S    CT3  HA     46.100   111.3000 ! ALLOW   ALI SUL ION
+                ! vib. freq. and HF/6-31G* geo. (DTN) 8/24/90
+SM   CT2  CT1    58.000   112.5000 ! ALLOW   ALI SUL ION
+                ! as in expt.MeEtS & DALC crystal,  5/15/92
+SM   CT2  HA     38.000   111.0000 ! ALLOW   ALI SUL ION
+                ! new S-S atom type 8/24/90
+SM   CT3  HA     38.000   111.0000 ! ALLOW   ALI SUL ION
+                ! new S-S atom type 8/24/90
+SM   SM   CT2    72.500   103.3000 ! ALLOW   ALI SUL ION
+                ! expt. dimethyldisulfide,    3/26/92 (FL)
+SM   SM   CT3    72.500   103.3000 ! ALLOW   ALI SUL ION
+                ! expt. dimethyldisulfide,    3/26/92 (FL)
+SS   CS   CT3    55.000   118.0000 ! ALLOW SUL
+                ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+SS   CS   HA     40.000   112.3000 ! ALLOW SUL
+                ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+!lipid section
+OBL  CL   CTL3    70.0     125.0     20.0   2.442  ! methyl acetate
+OBL  CL   CTL2    70.0     125.0     20.0   2.442  ! methyl acetate
+OBL  CL   CTL1    70.0     125.0     20.0   2.442  ! methyl acetate
+OSL  CL   OBL     90.0     125.9    160.0   2.2576 ! acetic acid
+CL   OSL  CTL1    40.0     109.6     30.0   2.2651 ! methyl acetate
+CL   OSL  CTL2    40.0     109.6     30.0   2.2651 ! methyl acetate
+CL   OSL  CTL3    40.0     109.6     30.0   2.2651 ! methyl acetate
+HAL2 CTL2 CL      33.00    109.50   30.00   2.163  ! methyl acetate
+HAL3 CTL3 CL      33.00    109.50   30.00   2.163  ! methyl acetate
+CTL2 CTL2 CL      52.0     108.00   ! alkane
+CTL3 CTL2 CL      52.0     108.00   ! alkane
+OSL  CL   CTL3    55.0     109.0    20.00   2.3260 ! methyl acetate
+OSL  CL   CTL2    55.0     109.0    20.00   2.3260 ! methyl acetate
+OHL  CL   OBL     50.0     123.0    210.0   2.2620 ! acetic acid
+OCL  CL   CTL2    40.0     118.0     50.0   2.3880 ! acetate
+OCL  CL   CTL3    40.0     118.0     50.0   2.3880 ! acetate
+OCL  CL   OCL    100.0     124.0     70.0   2.2250 ! acetate
+OHL  CL   CTL3    55.0     110.50   ! acetic acid
+OHL  CL   CTL2    55.0     110.50   ! acetic acid
+HOL  OHL  CL     55.0      115.0    ! acetic acid
+OSL  CTL1 CTL2   75.700    110.10   ! acetic acid
+OSL  CTL1 CTL3   75.700    110.10   ! acetic acid
+OSL  CTL2 CTL1   75.700    110.10   ! acetic acid
+OSL  CTL2 CTL2   75.700    110.10   ! acetic acid
+OSL  CTL2 CTL3   75.700    110.10   ! acetic acid
+HAL2 CTL2 HAL2   35.500    109.00    5.40   1.80200 ! alkane, 3/92
+HAL3 CTL3 HAL3   35.500    108.40    5.40   1.80200 ! alkane, 3/92
+HAL1 CTL1 OSL    60.0      109.5    ! phosphate
+HAL2 CTL2 OSL    60.0      109.5    ! phosphate
+HAL3 CTL3 OSL    60.0      109.5    ! phosphate
+CTL2 OSL  PL     20.0      120.0    35.0    2.33   ! phosphate
+CTL3 OSL  PL     20.0      120.0    35.0    2.33   ! phosphate
+HOL  OHL  PL     30.0      115.0    40.0    2.30   ! phosphate
+OSL  PL   OSL    80.0      104.3    ! phosphate
+OSL  PL   O2L    98.9      111.6    ! phosphate
+OSL  PL   OHL    48.1      108.0    ! phosphate
+O2L  PL   O2L   120.0      120.0    ! phosphate
+O2L  PL   OHL    98.9      108.23   ! phosphate
+NTL  CTL2 HL     40.0      109.5    27.     2.13   ! tetramethylammonium
+NTL  CTL5 HL     40.0      109.5    27.     2.13   ! tetramethylammonium
+HL   CTL2 HL     24.0      109.50   28.     1.767  ! tetramethylammonium
+HL   CTL5 HL     24.0      109.50   28.     1.767  ! tetramethylammonium
+CTL2 NTL  CTL2   60.0      109.5    26.     2.466  ! tetraethylammonium, from CTL5 NTL  CTL2
+CTL5 NTL  CTL2   60.0      109.5    26.     2.466  ! tetramethylammonium
+CTL5 NTL  CTL5   60.0      109.5    26.     2.466  ! tetramethylammonium
+HL   CTL2 CTL2   33.430    110.10   22.53   2.179  ! alkane
+HL   CTL2 CTL3   33.430    110.10   22.53   2.179  ! alkane
+HAL1 CTL1 CTL1   34.500    110.10   22.53   2.179  ! alkane, 3/92
+HAL1 CTL1 CTL2   34.500    110.10   22.53   2.179  ! alkane, 3/92
+HAL1 CTL1 CTL3   34.500    110.10   22.53   2.179  ! alkane, 3/92
+HAL2 CTL2 CTL1   26.500    110.10   22.53   2.179  ! alkane, 4/98
+HAL2 CTL2 CTL2   26.500    110.10   22.53   2.179  ! alkane, 4/98
+HAL2 CTL2 CTL3   34.600    110.10   22.53   2.179  ! alkane, 4/98
+HAL3 CTL3 CTL1   33.430    110.10   22.53   2.179  ! alkane, 4/98
+HAL3 CTL3 CTL2   34.600    110.10   22.53   2.179  ! alkane, 4/98
+HAL3 CTL3 CTL3   37.500    110.10   22.53   2.179  ! alkane, 4/98
+NTL  CTL2 CTL2   67.7      115.00   ! tetramethylammonium
+NTL  CTL2 CTL3   67.7      115.00   ! tetramethylammonium
+HCL  NH3L CTL2   33.0      109.50    4.00   2.056  ! ethanolamine
+HCL  NH3L HCL    41.0      109.50   ! ethanolamine
+NH3L CTL2 CTL2   67.7      110.00   ! ethanolamine
+NH3L CTL2 HAL2   45.0      107.50   35.00   2.0836 ! ethanolamine
+CTL1 CTL1 CTL1   53.350    111.00    8.00   2.561  ! alkane, 3/92
+CTL1 CTL1 CTL2   58.350    113.50   11.16   2.561  ! glycerol
+CTL1 CTL1 CTL3   53.350    108.50    8.00   2.561  ! alkane, 3/92
+CTL1 CTL2 CTL1   58.350    113.50   11.16   2.561  ! glycerol
+CTL1 CTL2 CTL2   58.350    113.50   11.16   2.561  ! glycerol
+CTL1 CTL2 CTL3   58.350    113.50   11.16   2.561  ! glycerol
+CTL2 CTL1 CTL2   58.350    113.50   11.16   2.561  ! glycerol
+CTL2 CTL1 CTL3   58.350    113.50   11.16   2.561  ! glycerol
+CTL2 CTL2 CTL2   58.350    113.60   11.16   2.561  ! alkane, 3/92
+CTL2 CTL2 CTL3   58.000    115.00    8.00   2.561  ! alkane, 3/92
+HOL  OHL  CTL1   57.500    106.00   ! glycerol
+HOL  OHL  CTL2   57.500    106.00   ! glycerol
+HOL  OHL  CTL3   57.500    106.00   ! glycerol
+OHL  CTL1 CTL2   75.700    110.10   ! glycerol
+OHL  CTL2 CTL1   75.700    110.10   ! glycerol
+OHL  CTL2 CTL2   75.700    110.10   ! glycerol
+OHL  CTL2 CTL3   75.700    110.10   ! glycerol
+OHL  CTL1 HAL1   45.900    108.89   ! glycerol
+OHL  CTL2 HAL2   45.900    108.89   ! glycerol
+OHL  CTL3 HAL3   45.900    108.89   ! glycerol
+O2L  SL   O2L   130.0      109.47  35.0    2.45 ! methylsulfate
+O2L  SL   OSL    85.0       98.0                ! methylsulfate
+CTL2 OSL  SL     15.0      109.0   27.00   1.90 ! methylsulfate
+CTL3 OSL  SL     15.0      109.0   27.00   1.90 ! methylsulfate
+!HT   OT   HT     55.0      104.52   ! FROM TIPS3P GEOMETRY
+CEL1 CEL1 CTL2   48.00     123.50   ! from 2-butene, yin,adm jr., 12/95
+CEL1 CEL1 CTL3   48.00     123.50   ! 2-butene, yin,adm jr., 12/95
+CEL2 CEL1 CTL2   48.00     126.00   ! 1-butene; from propene, yin,adm jr., 12/95
+CEL2 CEL1 CTL3   47.00     125.20   ! propene, yin,adm jr., 12/95
+HEL1 CEL1 CEL1   52.00     119.50   ! 2-butene, yin,adm jr., 12/95
+HEL1 CEL1 CEL2   42.00     118.00   ! propene, yin,adm jr., 12/95
+HEL1 CEL1 CTL2   40.00     116.00   ! 1-butene; from propene, yin,adm jr., 12/95
+HEL1 CEL1 CTL3   22.00     117.00   ! propene, yin,adm jr., 12/95
+HEL2 CEL2 CEL1   45.00     120.50   ! propene, yin,adm jr., 12/95
+HEL2 CEL2 CEL2   55.50     120.50   ! ethene, yin,adm jr., 12/95
+HEL2 CEL2 HEL2   19.00     119.00   ! propene, yin,adm jr., 12/95
+CEL1 CTL2 CTL2   32.00     112.20   ! 1-butene; from propene, yin,adm jr., 12/95
+CEL1 CTL2 CTL3   32.00     112.20   ! 1-butene; from propene, yin,adm jr., 12/95
+HAL2 CTL2 CEL1   45.00     111.50   ! 1-butene; from propene, yin,adm jr., 12/95
+HAL3 CTL3 CEL1   42.00     111.50   ! 2-butene, yin,adm jr., 12/95
+CEL1 CTL2 CEL1   30.0      114.0    ! 1,4-dipentene, adm jr., 2/00
+
+DIHEDRALS
+!
+!V(dihedral) = Kchi(1 + cos(n(chi) - delta))
+!
+!Kchi: kcal/mole
+!n: multiplicity
+!delta: degrees
+!
+!atom types             Kchi    n   delta
+!
+!Heme to Sulfate (PSUL) link
+X    FE   SS   X        0.0000  4     0.00 ! guess
+                !adm jr., 7/01
+X    CS   SS   X        0.0000  3     0.20 ! guess
+                !from methanethiol, HS S CT3 HA
+                !adm jr., 7/01
+
+C    CT1  NH1  C        0.2000  1   180.00 ! ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+C    CT2  NH1  C        0.2000  1   180.00 ! ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+C    N    CP1  C        0.8000  3     0.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CA   CA   CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89
+CA   CPT  CPT  CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CA   CT2  CT1  C        0.0400  3     0.00 ! ALLOW   ARO
+                ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92
+CA   CY   CPT  CA       3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+CA   NY   CPT  CA       3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CC   CP1  N    C        0.8000  3     0.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CC   CT1  CT2  CA       0.0400  3     0.00 ! ALLOW   ARO
+                ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92
+CC   CT1  NH1  C        0.2000  1   180.00 ! ALLOW PEP POL
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+CC   CT2  NH1  C        0.2000  1   180.00 ! ALLOW PEP POL
+                ! Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c
+CD   CP1  N    C        0.0000  1   180.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CD   CT1  NH1  C        0.2000  1   180.00 ! ALLOW PEP POL
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+CD   CT2  NH1  C        0.2000  1   180.00 ! ALLOW PEP POL
+                ! Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c
+CE1  CE1  CT3  HA       0.0300  3     0.00 ! 
+		! for butene, yin/adm jr., 12/95
+CE2  CE1  CT2  CT3      0.5000  1   180.00 !
+                ! 1-butene, adm jr., 2/00 update
+CE2  CE1  CT2  CT3      1.3000  3   180.00 !
+		! 1-butene, adm jr., 2/00 update
+CE2  CE1  CT2  HA       0.1200  3     0.00 ! 
+		! for butene, yin/adm jr., 12/95
+CE2  CE1  CT3  HA       0.0500  3   180.00 ! 
+		! for propene, yin/adm jr., 12/95
+CP1  C    N    CP1      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP1  C    N    CP1      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP1  N    C        0.8000  3     0.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP3  N    C        0.0000  3   180.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP3  N    CP1      0.1000  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP2  CP3  NP   CP1      0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    C    CP1      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    C    CP1      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    CP1  C        0.1000  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    CP1  CC       0.1000  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  N    CP1  CP2      0.1000  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  NP   CP1  C        0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  NP   CP1  CC       0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  NP   CP1  CD       0.0800  3     0.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CP3  NP   CP1  CP2      0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CPH2 NR1  CPH1 CPH1    14.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+CPH2 NR2  CPH1 CPH1    14.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+CPH2 NR3  CPH1 CPH1    12.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+CPT  CA   CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CPT  CPT  CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CPT  CPT  CY   CA       4.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CPT  CPT  NY   CA       5.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CT1  C    N    CP1      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT1  C    N    CP1      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT1  C    N    CP3      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT1  C    N    CP3      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT1  C    NH1  CT1      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT1  C    NH1  CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT1  CT1  NH1  C        1.8000  1     0.00 ! ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+CT1  CT2  CA   CA       0.2300  2   180.00 ! ALLOW   ARO ALI
+                ! ethylbenzene ethyl rotation, adm jr. 3/7/92
+CT1  CT2  CPH1 CPH1     0.2000  1     0.00 ! ALLOW ARO
+                ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92
+CT1  CT2  CPH1 CPH1     0.2700  2     0.00 ! ALLOW ARO
+                ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92
+CT1  CT2  CPH1 CPH1     0.0000  3     0.00 ! ALLOW ARO
+                ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92
+CT1  CT2  CY   CA       0.2300  2   180.00 ! ALLOW ARO
+                ! from ethylbenzene, adm jr., 3/7/92
+CT1  CT2  CY   CPT      0.2300  2   180.00 ! ALLOW ARO
+                ! from ethylbenzene, adm jr., 3/7/92
+CT1  NH1  C    CP1      1.6000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT1  NH1  C    CP1      2.5000  2   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  C    N    CP1      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  C    N    CP1      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  C    N    CP3      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  C    N    CP3      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  C    NH1  CT1      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT2  C    NH1  CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT2  C    NH1  CT2      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT2  C    NH1  CT2      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT2  C    NH1  CT3      1.6000  1     0.00 !  ALLOW PEP
+                ! from CT2  C    NH1  CT2, adm jr. 10/21/96
+CT2  C    NH1  CT3      2.5000  2   180.00 !  ALLOW PEP
+                ! from CT2  C    NH1  CT2, adm jr. 10/21/96
+CT2  CA   CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89 toluene and ethylbenzene
+CT2  CPH1 NR1  CPH2     3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2
+CT2  CPH1 NR2  CPH2     3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2
+CT2  CPH1 NR3  CPH2     2.5000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+CT2  CT1  NH1  C        1.8000  1     0.00 ! ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+CT2  CT2  CPH1 CPH1     0.4000  1     0.00 ! ALLOW ARO
+                ! 4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89
+CT2  CT2  CT2  CT2      0.1500  1     0.00 ! ALLOW ALI
+                ! alkane update, adm jr., 3/2/92, butane trans/gauche
+CT2  CT2  NH1  C        1.8000  1     0.00 ! ALLOW PEP
+                ! from CT2  CT1  NH1  C, for lactams, adm jr.
+CT2  CY   CPT  CA       3.0000  2   180.00 ! ALLOW ARO
+                ! JWK
+CT2  CY   CPT  CPT      3.0000  2   180.00 ! ALLOW ARO
+                !JWK
+CT2  NH1  C    CP1      1.6000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  NH1  C    CP1      2.5000  2   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT2  NH1  C    CT1      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT2  NH1  C    CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT2  SM   SM   CT2      1.0000  1     0.00 ! ALLOW   ALI SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+CT2  SM   SM   CT2      4.1000  2     0.00 ! ALLOW   ALI SUL ION
+                ! mp 6-311G** dimethyldisulfide,  3/26/92 (FL)
+CT2  SM   SM   CT2      0.9000  3     0.00 ! ALLOW   ALI SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+CT3  C    N    CP1      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT3  C    N    CP1      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT3  C    N    CP3      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT3  C    N    CP3      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT3  C    NH1  CT1      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT3  C    NH1  CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT3  C    NH1  CT2      1.6000  1     0.00 !  ALLOW PEP
+                ! for acetylated GLY N-terminus, adm jr.
+CT3  C    NH1  CT2      2.5000  2   180.00 !  ALLOW PEP
+                ! for acetylated GLY N-terminus, adm jr.
+CT3  C    NH1  CT3      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT3  C    NH1  CT3      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT3  CA   CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! toluene, adm jr., 3/7/92
+CT3  CE1  CE2  HE2      5.2000  2   180.00 ! 
+		! for propene, yin/adm jr., 12/95
+CT3  CPH1 NR1  CPH2     3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2
+CT3  CT1  NH1  C        1.8000  1     0.00 ! ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+CT3  CT2  CA   CA       0.2300  2   180.00 ! ALLOW   ARO ALI
+                ! ethylbenzene ethyl rotation, adm jr. 3/7/92
+CT3  CT2  CPH1 CPH1     0.2000  1     0.00 ! ALLOW ARO
+                ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92
+CT3  CT2  CPH1 CPH1     0.2700  2     0.00 ! ALLOW ARO
+                ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92
+CT3  CT2  CPH1 CPH1     0.0000  3     0.00 ! ALLOW ARO
+                ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92
+CT3  CT2  CT2  CT2      0.1500  1     0.00 ! ALLOW ALI
+                ! alkane update, adm jr., 3/2/92, butane trans/gauche
+CT3  CT2  CT2  CT3      0.1500  1     0.00 ! ALLOW ALI
+                ! alkane update, adm jr., 3/2/92, butane trans/gauche
+CT3  CT2  CY   CA       0.2300  2   180.00 ! ALLOW ARO
+                ! from ethylbenzene, adm jr., 3/7/92
+CT3  CT2  CY   CPT      0.2300  2   180.00 ! ALLOW ARO
+                ! from ethylbenzene, adm jr., 3/7/92
+CT3  CT2  S    CT3      0.2400  1   180.00 ! ALOW    ALI SUL ION
+                ! expt. MeEtS,      3/26/92 (FL)
+CT3  CT2  S    CT3      0.3700  3     0.00 ! ALOW    ALI SUL ION
+                ! DTN 8/24/90
+CT3  NH1  C    CP1      1.6000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT3  NH1  C    CP1      2.5000  2   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+CT3  NH1  C    CT1      1.6000  1     0.00 !  ALLOW PEP
+                ! Revised to adjust NMA cis/trans energy difference. (LK)
+CT3  NH1  C    CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+CT3  S    CT2  CT2      0.2400  1   180.00 ! ALOW    ALI SUL ION
+                ! expt. MeEtS,      3/26/92 (FL)
+CT3  S    CT2  CT2      0.3700  3     0.00 ! ALOW    ALI SUL ION
+                ! expt. MeEtS,      3/26/92 (FL)
+CT3  SM   SM   CT3      1.0000  1     0.00 ! ALLOW   ALI SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+CT3  SM   SM   CT3      4.1000  2     0.00 ! ALLOW   ALI SUL ION
+                ! mp 6-311G** dimethyldisulfide,   3/26/92 (FL)
+CT3  SM   SM   CT3      0.9000  3     0.00 ! ALLOW   ALI SUL ION
+                ! improved CSSC dihedral in DMDS  5/15/92 (FL)
+CY   CA   NY   CPT      5.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CY   CPT  CA   CA       3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+CY   CPT  CPT  CA      10.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+H    NH1  C    CP1      2.5000  2   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+H    NH1  C    CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+H    NH1  C    CT2      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+H    NH1  C    CT3      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+H    NH1  CT1  C        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+H    NH1  CT1  CC       0.0000  1     0.00 ! ALLOW PEP POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+H    NH1  CT1  CD       0.0000  1     0.00 ! ALLOW PEP POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+H    NH1  CT1  CT1      0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+H    NH1  CT1  CT2      0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+H    NH1  CT1  CT3      0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+H    NH1  CT2  C        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+H    NH1  CT2  CC       0.0000  1     0.00 ! ALLOW PEP POL
+                ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92
+H    NH1  CT2  CD       0.0000  1     0.00 ! ALLOW PEP POL
+                ! adm jr. 5/02/91, acetic acid pure solvent
+H    NH1  CT2  CT2      0.0000  1     0.00 ! ALLOW PEP
+                ! from H    NH1  CT2  CT3, for lactams, adm jr.
+H    NH1  CT2  CT3      0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+H    NH2  CC   CT1      1.4000  2   180.00 !  ALLOW   PEP POL ARO PRO
+                ! adm jr. 4/10/91, acetamide update
+H    NH2  CC   CT2      1.4000  2   180.00 !  ALLOW   PEP POL ARO PRO
+                ! adm jr. 4/10/91, acetamide update
+H    NH2  CC   CT3      1.4000  2   180.00 !  ALLOW   PEP POL ARO PRO
+                ! adm jr. 4/10/91, acetamide update
+H    NH2  CC   CP1      2.5000  2   180.00 ! ALLOW PEP POL ARO PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+H    NR1  CPH1 CPH1     1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 7/20/89
+H    NR1  CPH1 CT2      1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 7/22/89, FROM HA CPH1 NR1 H
+H    NR1  CPH1 CT3      1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 7/22/89, FROM HA CPH1 NR1 H
+H    NR3  CPH1 CPH1     1.4000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+H    NR3  CPH1 CT2      3.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA
+H    NR3  CPH1 CT3      3.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA
+H    NY   CA   CY       0.8000  2   180.00 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+H    NY   CPT  CA       0.8000  2   180.00 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+H    NY   CPT  CPT      0.8000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+H    OH1  CA   CA       0.9900  2   180.00 ! ALLOW   ARO ALC
+                ! phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92
+H    OH1  CT1  CT1      1.3300  1     0.00 ! ALLOW ALC
+                ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT1  CT1      0.1800  2     0.00 ! ALLOW ALC
+                ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT1  CT1      0.3200  3     0.00 ! ALLOW ALC
+                ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT1  CT3      1.3300  1     0.00 ! ALLOW ALC
+                ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT1  CT3      0.1800  2     0.00 ! ALLOW ALC
+                ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT1  CT3      0.3200  3     0.00 ! ALLOW ALC
+                ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT1      1.3000  1     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT1      0.3000  2     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT1      0.4200  3     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT2      1.3000  1     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT2      0.3000  2     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT2      0.4200  3     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT3      1.3000  1     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT3      0.3000  2     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+H    OH1  CT2  CT3      0.4200  3     0.00 ! ALLOW ALC
+                ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93
+HA   CA   CA   CA       3.5000  2   180.00 ! ALLOW ARO
+                ! adm jr., 10/02/89
+HA   CA   CA   CPT      3.5000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CA   CA   HA       2.5000  2   180.00 ! ALLOW ARO
+                ! ADM JR., 10/02/89
+HA   CA   CPT  CPT      3.0000  2   180.00 ! ALLOW   ARO
+                ! TRP (JES)
+HA   CA   CPT  CY       4.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CA   CY   CPT      1.2000  2   180.00 ! ALLOW ARO
+                ! JWK
+HA   CA   CY   CT2      1.2000  2   180.00 ! ALLOW ARO
+                ! JWK
+HA   CA   NY   CPT      3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CA   NY   H        1.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CC   NH2  H        1.4000  2   180.00 !  ALLOW PEP POL
+                ! adm jr. 4/10/91, acetamide update
+HA   CP3  N    C        0.0000  3   180.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP3  N    CP1      0.1000  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CP3  NP   CP1      0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HA   CT1  CT2  CA       0.0400  3     0.00 ! ALLOW   ARO
+                ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92
+HA   CT2  CPH1 CPH1     0.0000  3     0.00 ! ALLOW ARO
+                ! 4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89
+HA   CT2  CY   CA       0.2500  2   180.00 ! ALLOW ARO
+                ! JWK
+HA   CT2  CY   CPT      0.2500  2   180.00 ! ALLOW ARO
+                ! JWK
+HA   CT2  NH1  C        0.0000  3     0.00 ! ALLOW PEP
+                ! LK for autogenerate dihe, sp2-methyl, no dihedral potential
+HA   CT2  NH1  H        0.0000  3     0.00 ! ALLOW PEP
+                ! LK for autogenerate dihe, sp2-methyl, no dihedral potential
+HA   CT2  S    CT3      0.2800  3     0.00 ! ALLOW   ALI SUL ION
+                ! DTN 8/24/90
+HA   CT3  CPH1 CPH1     0.0000  3     0.00 ! ALLOW ARO
+                ! 4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89
+HA   CT3  CS   HA       0.1600  3     0.00 ! ALLOW SUL
+                ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+HA   CT3  CT2  CA       0.0400  3     0.00 ! ALLOW   ARO
+                ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92
+HA   CT3  NH1  C        0.0000  3     0.00 ! ALLOW PEP
+                ! LK for autogenerate dihe, sp2-methyl, no dihedral potential
+HA   CT3  NH1  H        0.0000  3     0.00 ! ALLOW PEP
+                ! LK for autogenerate dihe, sp2-methyl, no dihedral potential
+HA   CT3  S    CT2      0.2800  3     0.00 ! ALLOW   ALI SUL ION
+                ! DTN 8/24/90
+HA   CY   CA   CPT      1.2000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CY   CA   HA       1.2000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CY   CPT  CA       3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HA   CY   CPT  CPT      3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+HE1  CE1  CE1  HE1      1.0000  2   180.00 ! 
+                ! 2-butene, adm jr., 8/98 update
+CT3  CE1  CE1  HE1      1.0000  2   180.00 !
+                ! 2-butene, adm jr., 8/98 update
+HE1  CE1  CE2  HE2      5.2000  2   180.00 ! 
+		! for propene, yin/adm jr., 12/95
+HE1  CE1  CT2  HA       0.0000  3     0.00
+		! butene, adm jr., 2/00 update
+HE1  CE1  CT2  CT3      0.1200  3     0.00 ! 
+		! for butene, yin/adm jr., 12/95
+HE1  CE1  CT3  HA       0.0000  3     0.00
+		! butene, adm jr., 2/00 update
+HE2  CE2  CE1  CT2      5.2000  2   180.00 ! 
+		! for butene, yin/adm jr., 12/95
+HE2  CE2  CE1  CPB      5.2000  2   180.00 !
+                ! for vinyl, from butene, yin/adm jr., 12/95
+HB   CP1  N    C        0.8000  3     0.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CP1  N    CP3      0.1000  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CP1  NP   CP3      0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HB   CT1  NH1  C        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT1  NH1  H        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT2  NH1  C        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT2  NH1  H        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT3  NH1  C        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HB   CT3  NH1  H        0.0000  1     0.00 ! ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+HC   NH2  CT2  CT2       0.1100  3     0.00
+                !from X CT3 NH2 X, neutral lysine
+HC   NH2  CT2  HA       0.1100  3     0.00
+                !from X CT3 NH2 X, neutral lysine
+HC   NH2  CT2  HB       0.1100  3     0.00
+                !from X CT3 NH2 X, neutral glycine, adm jr.
+HC   NH2  CT2  CD       0.1100  3     0.00
+                !from X CT3 NH2 X, neutral glycine, adm jr.
+HC   NP   CP1  C        0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP1  CC       0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP1  CD       0.0800  3     0.00 ! ALLOW PRO PEP
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP1  CP2      0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP1  HB       0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP3  CP2      0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HC   NP   CP3  HA       0.0800  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+HP   CA   CA   CA       4.2000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89 benzene
+HP   CA   CA   CPT      3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+HP   CA   CA   CT2      4.2000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89 toluene and ethylbenzene
+HP   CA   CA   CT3      4.2000  2   180.00 ! ALLOW   ARO
+                ! toluene, adm jr., 3/7/92
+HP   CA   CA   HP       2.4000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89 benzene
+HP   CA   CPT  CPT      3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK indole 05/14/91
+HP   CA   CPT  CY       3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+HP   CA   CY   CPT      2.0000  2   180.00 ! ALLOW ARO
+                !adm jr., 12/30/91, for jwk
+HP   CA   CY   CT2      1.2000  2   180.00 ! ALLOW ARO
+                ! JWK indole 05/14/91
+HP   CA   NY   CPT      2.0000  2   180.00 ! ALLOW   ARO
+                !adm jr., 12/30/91, for jwk
+HP   CA   NY   H        0.4000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+HP   CY   CA   HP       1.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+HP   CY   CPT  CA       2.8000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+HP   CY   CPT  CPT      2.8000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+HR1  CPH1 CPH1 CT2      1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH1 CPH1 CT3      1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH1 CPH1 HR1      1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90, his
+HR1  CPH1 NR3  CPH2     2.5000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH1 NR3  H        3.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH2 NR1  CPH1     3.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH2 NR1  H        1.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR1  CPH2 NR2  CPH1     3.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR2  CPH2 NR3  CPH1     3.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+HR2  CPH2 NR3  H        0.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90, YES, 0.0
+HR3  CPH1 CPH1 CT2      2.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 CPH1 CT3      2.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 CPH1 HR3      2.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 NR1  CPH2     3.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 NR1  H        1.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 NR2  CPH2     3.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HS   S    CT2  CT1      0.2400  1     0.00 ! ALLOW   ALI SUL ION
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HS   S    CT2  CT1      0.1500  2     0.00 ! ALLOW   ALI SUL ION
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HS   S    CT2  CT1      0.2700  3     0.00 ! ALLOW   ALI SUL ION
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HS   S    CT2  CT3      0.2400  1     0.00 ! ALLOW   ALI SUL ION
+                ! ethanethiol C-C-S-H surface, adm jr., 4/18/93
+HS   S    CT2  CT3      0.1500  2     0.00 ! ALLOW   ALI SUL ION
+                ! ethanethiol C-C-S-H surface, adm jr., 4/18/93
+HS   S    CT2  CT3      0.2700  3     0.00 ! ALLOW   ALI SUL ION
+                ! ethanethiol C-C-S-H surface, adm jr., 4/18/93
+HS   S    CT2  HA       0.2000  3     0.00 ! ALLOW   ALI SUL ION
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HS   S    CT3  HA       0.2000  3     0.00 ! ALLOW   ALI SUL ION
+                ! methanethiol pure solvent, adm jr., 6/22/92
+N    C    CP1  CP2      0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CP1  CP2      0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CP1  HB       0.4000  1   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CP1  HB       0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CP1  N        0.3000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CP1  N       -0.3000  4     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT1  CT1      0.0000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT1  CT2      0.0000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT1  CT3      0.0000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT1  HB       0.0000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT2  HB       0.0000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    C    CT3  HA       0.0000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+N    CT1  CT2  CA       0.0400  3     0.00 ! ALLOW   ARO
+                ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92
+NH1  C    CP1  CP2      0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CP1  CP2      0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CP1  HB       0.4000  1   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CP1  HB       0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CP1  N        0.3000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CP1  N       -0.3000  4     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  C    CT1  CT1      0.0000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)
+NH1  C    CT1  CT2      0.0000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)
+NH1  C    CT1  CT3      0.0000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)
+NH1  C    CT1  HB       0.0000  1     0.00 !   ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  C    CT1  NH1      0.6000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93
+NH1  C    CT2  CT2      0.0000  1     0.00 !   ALLOW PEP
+                ! from NH1  C    CT1  CT2, for lactams, adm jr.
+NH1  C    CT2  HA       0.0000  3     0.00 ! ALLOW PEP
+                ! LK for autogenerate dihe, sp2-methyl, no dihedral potential
+NH1  C    CT2  HB       0.0000  1     0.00 !   ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+NH1  C    CT2  NH1      0.6000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93
+NH1  C    CT3  HA       0.0000  3     0.00 ! ALLOW PEP
+                ! LK for autogenerate dihe, sp2-methyl, no dihedral potential
+NH1  CT1  C    N        0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH1  CT2  C    N        0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CP1  CP2      0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CP1  CP2      0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CP1  HB       0.4000  1   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CP1  HB       0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CP1  N        0.3000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CP1  N       -0.3000  4     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH2  CC   CT2  HA       0.0000  3   180.00 ! ALLOW POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+NH3  CT1  C    N        0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH3  CT1  C    NH1      0.6000  1     0.00 ! ALLOW PEP PRO
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93
+NH3  CT1  CC   NH2      0.4000  1     0.00 ! ALLOW PEP PRO
+                ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92
+NH3  CT2  C    N        0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NH3  CT2  C    NH1      0.4000  1     0.00 ! ALLOW PEP PRO
+                ! adm jr. 3/24/92, for PRES GLYP
+NH3  CT2  CC   NH2      0.4000  1     0.00 ! ALLOW PEP PRO
+                ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92
+NP   CP1  C    N        0.3000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP1  C    NH1      0.3000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NP   CP1  CC   NH2      0.3000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NR1  CPH1 CPH1 CT2      3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA
+NR1  CPH1 CPH1 CT3      3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA
+NR1  CPH1 CPH1 HR3      3.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+NR1  CPH1 CT2  CT1      0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR1  CPH1 CT2  CT2      0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR1  CPH1 CT2  CT3      0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR1  CPH1 CT2  HA       0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR1  CPH1 CT3  HA       0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR1  CPH2 NR2  CPH1    14.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  CPH1 CPH1 CT2      3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA
+NR2  CPH1 CPH1 CT3      3.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA
+NR2  CPH1 CPH1 HR3      3.0000  2   180.00 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+NR2  CPH1 CPH1 NR1     14.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  CPH1 CT2  CT1      0.1900  3     0.00 ! ALLOW ARO
+                ! HIS CB-CG TORSION,
+NR2  CPH1 CT2  CT2      0.1900  3     0.00 ! ALLOW ARO
+                ! HIS CB-CG TORSION,
+NR2  CPH1 CT2  CT3      0.1900  3     0.00 ! ALLOW ARO
+                ! HIS CB-CG TORSION,
+NR2  CPH1 CT2  HA       0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR2  CPH1 CT3  HA       0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR2  CPH2 NR1  CPH1    14.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR2  CPH2 NR1  H        1.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR3  CPH1 CPH1 CT2      2.5000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH1 CPH1 CT3      2.5000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH1 CPH1 HR1      2.5000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH1 CPH1 NR3     12.0000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH1 CT2  CT1      0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR3  CPH1 CT2  CT2      0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR3  CPH1 CT2  CT3      0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR3  CPH1 CT2  HA       0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR3  CPH1 CT3  HA       0.1900  3     0.00 ! ALLOW ARO
+                ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89
+NR3  CPH2 NR3  CPH1    12.0000  2   180.00 ! ALLOW ARO
+                ! his, ADM JR., 7/20/89
+NR3  CPH2 NR3  H        1.4000  2   180.00 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NY   CA   CY   CPT      4.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+NY   CA   CY   CT2      3.5000  2   180.00 ! ALLOW ARO
+                ! JWK
+NY   CA   CY   HA       3.5000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+NY   CA   CY   HP       3.5000  2   180.00 ! ALLOW   ARO
+                ! JWK indole 05/14/91
+NY   CPT  CA   CA       2.8000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+NY   CPT  CA   HA       4.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 09/05/89
+NY   CPT  CA   HP       3.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+NY   CPT  CPT  CA      10.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+NY   CPT  CPT  CY       5.0000  2   180.00 ! ALLOW   ARO
+                ! JWK 05/14/91 fit to indole
+O    C    CP1  CP2      0.4000  1   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    CP1  CP2      0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    CP1  HB       0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    CP1  HB       0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    CP1  N       -0.3000  4     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    CT1  CT1      1.4000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+O    C    CT1  CT2      1.4000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+O    C    CT1  CT3      1.4000  1     0.00 !   ALLOW PEP
+                ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c
+O    C    CT1  HB       0.0000  1     0.00 !   ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    CT1  NH1      0.0000  1     0.00 !   ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    CT1  NH3      0.0000  1     0.00 ! ALLOW PEP PRO
+                ! Backbone parameter set made complete RLD 8/8/90
+O    C    CT2  CT2      1.4000  1     0.00 !   ALLOW PEP
+                ! from O    C    CT1  CT2, for lactams, adm jr.
+O    C    CT2  HA       0.0000  3   180.00 ! ALLOW POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    C    CT2  HB       0.0000  1     0.00 !   ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    CT2  NH1      0.0000  1     0.00 !   ALLOW PEP
+                ! Alanine Dipeptide ab initio calc's (LK)
+O    C    CT2  NH3      0.0000  1     0.00 ! ALLOW PEP PRO
+                ! Backbone parameter set made complete RLD 8/8/90
+O    C    CT3  HA       0.0000  3   180.00 ! ALLOW POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    C    N    CP1      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    N    CP1      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    N    CP3      2.7500  2   180.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    N    CP3      0.3000  4     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    C    NH1  CT1      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+O    C    NH1  CT2      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+O    C    NH1  CT3      2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+O    C    NH1  H        2.5000  2   180.00 !  ALLOW PEP
+                ! Gives appropriate NMA cis/trans barrier. (LK)
+O    CC   CP1  CP2      0.4000  1   180.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    CC   CP1  CP2      0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    CC   CP1  HB       0.4000  1     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    CC   CP1  HB       0.6000  2     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    CC   CP1  N       -0.3000  4     0.00 ! ALLOW PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+O    CC   CT2  HA       0.0000  3   180.00 ! ALLOW POL
+                ! adm jr. 4/05/91, for asn,asp,gln,glu and cters
+O    CC   NH2  H        1.4000  2   180.00 !  ALLOW PEP POL ARO PRO
+                ! adm jr. 4/10/91, acetamide update
+OB   CD   OS   CT2      0.9650  1   180.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+OB   CD   OS   CT2      3.8500  2   180.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+OB   CD   OS   CT3      0.9650  1   180.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+OB   CD   OS   CT3      3.8500  2   180.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+OC   CA   CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! adm jr. 8/27/91, phenoxide
+OC   CA   CA   HP       4.2000  2   180.00 ! ALLOW   ARO
+                ! adm jr. 8/27/91, phenoxide
+OC   CC   CP1  CP2      0.1600  3     0.00 ! ALLOW PEP PRO POL
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OC   CC   CP1  HB       0.1600  3     0.00 ! ALLOW PEP PRO POL
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OC   CC   CP1  N        0.1600  3     0.00 ! ALLOW PEP PRO POL
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OC   CC   CP1  NP       0.1600  3     0.00 ! ALLOW PEP PRO POL
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+OC   CC   CT1  NH3      3.2000  2   180.00 ! ALLOW PEP PRO
+                ! adm jr. 4/17/94, zwitterionic glycine
+OC   CC   CT2  NH3      3.2000  2   180.00 ! ALLOW PEP PRO
+                ! adm jr. 4/17/94, zwitterionic glycine
+OH1  CA   CA   CA       3.1000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89 phenol
+OH1  CA   CA   HP       4.2000  2   180.00 ! ALLOW   ARO
+                ! JES 8/25/89 phenol
+S    CT2  CT2  HA       0.0100  3     0.00 ! ALLOW   ALI SUL ION
+                ! DTN 8/24/90
+SM   CT2  CT2  HA       0.0100  3     0.00 ! ALLOW   ALI SUL ION
+                ! DTN 8/24/90
+SM   SM   CT2  CT1      0.3100  3     0.00 ! ALLOW  SUL ALI
+                ! S-S for cys-cys, dummy parameter for now ... DTN  9/04/90
+SM   SM   CT2  CT2      0.3100  3     0.00 ! ALLOW  SUL ALI
+                ! S-S for cys-cys, dummy parameter for now ... DTN  9/04/90
+SM   SM   CT2  HA       0.1580  3     0.00 ! ALLOW   ALI SUL ION
+                ! expt. dimethyldisulfide,    3/26/92 (FL)
+SM   SM   CT3  HA       0.1580  3     0.00 ! ALLOW   ALI SUL ION
+                ! expt. dimethyldisulfide,    3/26/92 (FL)
+SS   CS   CT3  HA       0.1500  3     0.00 ! ALLOW SUL
+                ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92
+!X    C    C    X        4.0000  2   180.00 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+X    C    NC2  X        2.2500  2   180.00 ! ALLOW   PEP POL ARO
+                ! 9.0->2.25 GUANIDINIUM (KK)
+X    CD   OH1  X        2.0500  2   180.00 ! ALLOW   PEP POL ARO ALC
+                ! adm jr, 10/17/90, acetic acid C-Oh rotation barrier
+X    CD   OS   X        2.0500  2   180.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    CE1  CE1  X        0.1500  1     0.00
+                ! 2-butene, adm jr., 2/00 update
+X    CE1  CE1  X        8.5000  2   180.00
+                ! 2-butene, adm jr., 2/00 update
+X    CE2  CE2  X        4.9000  2   180.00 ! 
+		! for ethene, yin/adm jr., 12/95
+X    CP1  C    X        0.0000  6   180.00 ! ALLOW   POL PEP PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+X    CP1  CC   X        0.0000  6   180.00 ! ALLOW   POL PEP
+                ! changed to 0.0 RLD 5/19/92
+X    CP1  CD   X        0.0000  6   180.00 ! ALLOW   POL PEP
+                ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92
+X    CP1  CP2  X        0.1400  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+X    CP2  CP2  X        0.1600  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+X    CP3  CP2  X        0.1400  3     0.00 ! ALLOW PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+X    CPA  CPB  X        0.0000  2     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91)
+X    CPA  CPM  X        0.0000  2     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91)
+X    CPB  CE1  X        3.0000  2   180.00 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+X    CPB  CPB  X        0.0000  2     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91)
+X    CPB  CT2  X        0.0000  6     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+X    CPB  CT3  X        0.0000  6     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+X    CPT  CPT  X        0.0000  2   180.00 ! ALLOW   ARO
+                ! JWK indole 05/14/91
+X    CT1  CC   X        0.0500  6   180.00 ! ALLOW   POL PEP
+                ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK)
+X    CT1  CD   X        0.0000  6   180.00 ! ALLOW   POL PEP
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    CT1  CT1  X        0.2000  3     0.00 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+X    CT1  CT2  X        0.2000  3     0.00 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+X    CT1  CT3  X        0.2000  3     0.00 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+X    CT1  NH3  X        0.1000  3     0.00 ! ALLOW   ALI POL
+                ! 0.715->0.10 METHYLAMMONIUM (KK)
+X    CT1  OH1  X        0.1400  3     0.00 ! ALLOW   ALI ALC ARO
+                ! EMB  11/21/89 methanol vib fit
+X    CT1  OS   X       -0.1000  3     0.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    CT2  CA   X        0.0000  6     0.00 ! ALLOW   ALI ARO
+                ! toluene, adm jr., 3/7/92
+X    CT2  CC   X        0.0500  6   180.00 ! ALLOW   POL PEP
+                ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK)
+X    CT2  CD   X        0.0000  6   180.00 ! ALLOW   POL PEP
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    CT2  CT2  X        0.1950  3     0.00 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+X    CT2  CT3  X        0.1600  3     0.00 ! ALLOW   ALI
+                ! rotation barrier in Ethane (SF)
+X    CT2  NC2  X        0.0000  6   180.00 ! ALLOW   ALI POL
+                ! methylguanidinium, adm jr., 3/26/92
+X    CT2  NH3  X        0.1000  3     0.00 ! ALLOW   ALI POL
+                ! 0.715->0.10 METHYLAMMONIUM (KK)
+X    CT2  OH1  X        0.1400  3     0.00 ! ALLOW   ALI ALC ARO
+                ! EMB  11/21/89 methanol vib fit
+X    CT2  OS   X       -0.1000  3     0.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    CT3  CA   X        0.0000  6     0.00 ! ALLOW   ALI ARO
+                ! toluene, adm jr., 3/7/92
+X    CT3  CC   X        0.0500  6   180.00 ! ALLOW   POL PEP
+                ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK)
+X    CT3  CD   X        0.0000  6   180.00 ! ALLOW   POL PEP
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    CT3  CT3  X        0.1550  3     0.00 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+X    CT3  NC2  X        0.0000  6   180.00 ! ALLOW   ALI POL
+                ! methylguanidinium, adm jr., 3/26/92
+X    CT3  NH2  X        0.1100  3     0.00 ! ALLOW   POL
+                ! methylamine geom/freq, adm jr., 6/2/92
+X    CT3  NH3  X        0.0900  3     0.00 ! ALLOW   ALI POL
+                ! fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92
+X    CT3  OH1  X        0.1400  3     0.00 ! ALLOW   ALI ALC ARO
+                ! EMB  11/21/89 methanol vib fit
+X    CT3  OS   X       -0.1000  3     0.00 ! ALLOW   PEP POL
+                ! adm jr. 3/19/92, from lipid methyl acetate
+X    FE   CM   X        0.0500  4     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): ligands (KK 05/13/91)
+X    FE   NPH  X        0.0000  2     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): for "ic para" only (KK 05/13/91)
+X    FE   OM   X        0.0000  4     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): ligands (KK 05/13/91)
+X    NPH  CPA  X        0.0000  2     0.00 ! ALLOW HEM
+                ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91)
+!lipid section
+X    CTL1 OHL  X        0.14    3     0.00 ! glycerol
+X    CTL2 OHL  X        0.14    3     0.00 ! glycerol
+X    CTL3 OHL  X        0.14    3     0.00 ! glycerol
+OBL  CL   CTL2 HAL2     0.00    6   180.00 ! acetic acid
+OBL  CL   CTL3 HAL3     0.00    6   180.00 ! acetic acid
+OSL  CL   CTL2 HAL2     0.00    6   180.00 ! acetic acid
+OSL  CL   CTL3 HAL3     0.00    6   180.00 ! acetic acid
+OBL  CL   OSL  CTL1     0.965   1   180.00 ! methyl acetate
+OBL  CL   OSL  CTL1     3.85    2   180.00 ! methyl acetate
+OBL  CL   OSL  CTL2     0.965   1   180.00 ! methyl acetate
+OBL  CL   OSL  CTL2     3.85    2   180.00 ! methyl acetate
+OBL  CL   OSL  CTL3     0.965   1   180.00 ! methyl acetate
+OBL  CL   OSL  CTL3     3.85    2   180.00 ! methyl acetate
+X    CL   OSL  X        2.05    2   180.00 ! methyl acetate
+X    CTL2 CL   X        0.05    6   180.00 ! methyl acetate
+X    CTL3 CL   X        0.05    6   180.00 ! methyl acetate
+X    CL   OHL  X        2.05    2   180.00 ! acetic acid
+HAL2 CTL2 CL   OHL      0.00    6   180.00
+HAL3 CTL3 CL   OHL      0.00    6   180.00
+OSL  PL   OSL  CTL2     1.20    1   180.00 ! phosphate, new NA, 4/98, adm jr.
+OSL  PL   OSL  CTL2     0.10    2   180.00 ! phosphate, new NA, 4/98, adm jr.
+OSL  PL   OSL  CTL2     0.10    3   180.00 ! phosphate, new NA, 4/98, adm jr.
+O2L  PL   OSL  CTL2     0.10    3     0.00 ! phosphate, new NA, 4/98, adm jr.
+OSL  PL   OSL  CTL3     1.20    1   180.00 ! phosphate, new NA, 4/98, adm jr.
+OSL  PL   OSL  CTL3     0.10    2   180.00 ! phosphate, new NA, 4/98, adm jr.
+OSL  PL   OSL  CTL3     0.10    3   180.00 ! phosphate, new NA, 4/98, adm jr.
+O2L  PL   OSL  CTL3     0.10    3     0.00 ! phosphate, new NA, 4/98, adm jr.
+OHL  PL   OSL  CTL2     0.95    2     0.00 ! terminal phosphate
+OHL  PL   OSL  CTL2     0.50    3     0.00 ! terminal phosphate
+OHL  PL   OSL  CTL3     0.95    2     0.00 ! terminal phosphate
+OHL  PL   OSL  CTL3     0.50    3     0.00 ! terminal phosphate
+X    OHL  PL   X        0.30    3     0.00 ! terminal phosphate
+X    CTL1 OSL  X        0.00    3     0.00 ! phosphate, new NA, 4/98, adm jr.
+X    CTL2 OSL  X        0.00    3     0.00 ! phosphate, new NA, 4/98, adm jr.
+X    CTL3 OSL  X        0.00    3     0.00 ! phosphate, new NA, 4/98, adm jr.
+CTL3 CTL2 OSL  CL       0.7     1   180.00 ! ethyl acetate, 12/92
+CTL2 CTL2 OSL  CL       0.7     1   180.00 ! ethyl acetate, 12/92
+CTL3 CTL1 OSL  CL       0.7     1   180.00 ! ethyl acetate, 12/92
+CTL2 CTL1 OSL  CL       0.7     1   180.00 ! ethyl acetate, 12/92
+CTL1 CTL2 CL   OSL     -0.15    1   180.00 ! methyl propionate, 12/92
+CTL1 CTL2 CL   OSL      0.53    2   180.00 ! methyl propionate, 12/92
+CTL2 CTL2 CL   OSL     -0.15    1   180.00 ! methyl propionate, 12/92
+CTL2 CTL2 CL   OSL      0.53    2   180.00 ! methyl propionate, 12/92
+CTL3 CTL2 CL   OSL     -0.15    1   180.00 ! methyl propionate, 12/92
+CTL3 CTL2 CL   OSL      0.53    2   180.00 ! methyl propionate, 12/92
+X    CTL2 NTL  X        0.26    3     0.00 ! tetramethylammonium  
+X    CTL5 NTL  X        0.23    3     0.00 ! tetramethylammonium
+X    CTL2 NH3L X        0.10    3     0.00 ! ethanolamine
+NH3L CTL2 CTL2 OHL      0.7     1   180.00 ! ethanolamine
+NH3L CTL2 CTL2 OSL      0.7     1   180.00 ! ethanolamine
+NTL  CTL2 CTL2 OHL      4.3     1   180.00 ! choline, 12/92
+NTL  CTL2 CTL2 OHL     -0.4     3   180.00 ! choline, 12/92
+NTL  CTL2 CTL2 OSL      3.3     1   180.00 ! choline, 12/92
+NTL  CTL2 CTL2 OSL     -0.4     3   180.00 ! choline, 12/92
+X    CTL1 CTL1 X        0.200   3     0.00 ! alkane, 3/92
+X    CTL1 CTL2 X        0.200   3     0.00 ! alkane, 3/92
+X    CTL1 CTL3 X        0.200   3     0.00 ! alkane, 3/92
+X    CTL2 CTL2 X        0.1900  3     0.00 ! alkane, 4/98, yin and mackerell
+X    CTL2 CTL3 X        0.1600  3     0.00 ! alkane, 4/98, yin and mackerell
+X    CTL3 CTL3 X        0.1525  3     0.00 ! alkane, 4/98, yin and mackerell
+CTL3 CTL2 CTL2 CTL3     0.10    2   180.00 ! alkane, 4/98, adm jr., lower butane gauche conformer
+CTL3 CTL2 CTL2 CTL3     0.15    4     0.00 ! alkane, 4/98, adm jr.
+CTL3 CTL2 CTL2 CTL3     0.10    6   180.00 ! alkane, 4/98, adm jr.
+CTL2 CTL2 CTL2 CTL3     0.10    2   180.00 ! alkane, 4/98, adm jr.
+CTL2 CTL2 CTL2 CTL3     0.15    4     0.00 ! alkane, 4/98, adm jr.
+CTL2 CTL2 CTL2 CTL3     0.10    6   180.00 ! alkane, 4/98, adm jr.
+CTL2 CTL2 CTL2 CTL2     0.10    2   180.00 ! alkane, 4/98, adm jr.
+CTL2 CTL2 CTL2 CTL2     0.15    4     0.00 ! alkane, 4/98, adm jr.
+CTL2 CTL2 CTL2 CTL2     0.10    6   180.00 ! alkane, 4/98, adm jr.
+HAL3 CTL3 OSL  SL       0.00    3     0.00 ! methylsulfate
+CTL2 OSL  SL   O2L      0.00    3     0.00 ! methylsulfate
+CTL3 OSL  SL   O2L      0.00    3     0.00 ! methylsulfate
+HEL1 CEL1 CEL1 HEL1     1.0000  2   180.00 ! 2-butene, adm jr., 8/98 update
+CTL3 CEL1 CEL1 HEL1     1.0000  2   180.00 ! 2-butene, adm jr., 8/98 update
+X    CEL1 CEL1 X        0.1500  1     0.00 ! 2-butene, adm jr., 2/00 update
+X    CEL1 CEL1 X        8.5000  2   180.00 ! 2-butene, adm jr., 2/00 update
+X    CEL2 CEL2 X        4.9000  2   180.00 ! ethene, yin,adm jr., 12/95
+CTL2 CEL1 CEL2 HEL2     5.2000  2   180.00 ! propene, yin,adm jr., 12/95
+CTL3 CEL1 CEL2 HEL2     5.2000  2   180.00 ! propene, yin,adm jr., 12/95
+HEL1 CEL1 CEL2 HEL2     5.2000  2   180.00 ! propene, yin,adm jr., 12/95
+CEL1 CEL1 CTL2 HAL2     0.0300  3     0.00 ! butene, yin,adm jr., 12/95
+CEL1 CEL1 CTL3 HAL3     0.0300  3     0.00 ! butene, yin,adm jr., 12/95
+CEL1 CEL1 CTL2 CTL2     0.5000  1   180.00 ! 1-butene, adm jr., 2/00 update
+CEL1 CEL1 CTL2 CTL2     1.3000  3   180.00 ! 1-butene, adm jr., 2/00 update
+CEL1 CEL1 CTL2 CTL3     0.5000  1   180.00 ! 1-butene, adm jr., 2/00 update
+CEL1 CEL1 CTL2 CTL3     1.3000  3   180.00 ! 1-butene, adm jr., 2/00 update
+CEL2 CEL1 CTL2 CTL2     0.5000  1   180.00 ! 1-butene, adm jr., 2/00 update
+CEL2 CEL1 CTL2 CTL2     1.3000  3   180.00 ! 1-butene, adm jr., 2/00 update
+CEL2 CEL1 CTL2 CTL3     0.5000  1   180.00 ! 1-butene, adm jr., 2/00 update
+CEL2 CEL1 CTL2 CTL3     1.3000  3   180.00 ! 1-butene, adm jr., 2/00 update
+CEL2 CEL1 CTL2 HAL2     0.1200  3     0.00 ! 1-butene, yin,adm jr., 12/95
+CEL2 CEL1 CTL3 HAL3     0.0500  3   180.00 ! propene, yin,adm jr., 12/95
+HEL1 CEL1 CTL2 CTL2     0.1200  3     0.00 ! butene, yin,adm jr., 12/95
+HEL1 CEL1 CTL2 CTL3     0.1200  3     0.00 ! butene, yin,adm jr., 12/95
+HEL1 CEL1 CTL2 HAL2     0.0000  3     0.00 ! butene, adm jr., 2/00 update
+HEL1 CEL1 CTL3 HAL3     0.0000  3     0.00 ! butene, adm jr., 2/00 update
+! 1,4-dipentene, adm jr., 2/00 
+CEL2 CEL1 CTL2 CEL1     1.200  1    180.00 !1,4-dipentene
+CEL2 CEL1 CTL2 CEL1     0.400  2    180.00 !1,4-dipentene
+CEL2 CEL1 CTL2 CEL1     1.300  3    180.00 !1,4-dipentene
+CEL1 CTL2 CEL1 HEL1     0.000  2      0.00 !1,4-dipentene
+CEL1 CTL2 CEL1 HEL1     0.000  3      0.00 !1,4-dipentene
+! 2,5-diheptene, adm jr., 2/00
+! for CIS double bonds in polyunsaturated lipids (default)
+CEL1 CEL1 CTL2 CEL1     1.000  1    180.00 !2,5-diheptane
+CEL1 CEL1 CTL2 CEL1     0.100  2      0.00 !2,5-diheptane
+CEL1 CEL1 CTL2 CEL1     0.300  3    180.00 !2,5-diheptane
+CEL1 CEL1 CTL2 CEL1     0.200  4      0.00 !2,5-diheptane
+! for TRANS double bonds in polyunsaturated lipids
+! uncomment following 4 lines and comment previous 4 lines to use
+!CEL1 CEL1 CTL2 CEL1     1.200  1    180.00 !2,5-diheptane
+!CEL1 CEL1 CTL2 CEL1     0.200  2    180.00 !2,5-diheptane
+!CEL1 CEL1 CTL2 CEL1     1.200  3    180.00 !2,5-diheptane
+!CEL1 CEL1 CTL2 CEL1     0.100  4    180.00 !2,5-diheptane
+! methylbutyrate
+CTL3 CTL2 CTL2 CL        0.21   1    180.00 !
+CTL3 CTL2 CTL2 CL        0.39   2      0.00 !
+CTL3 CTL2 CTL2 CL        0.35   3    180.00 !
+CTL3 CTL2 CTL2 CL        0.11   4      0.00 !
+CTL3 CTL2 CTL2 CL        0.09   6    180.00 !
+CTL2 CTL2 CTL2 CL        0.21   1    180.00 !
+CTL2 CTL2 CTL2 CL        0.39   2      0.00 !
+CTL2 CTL2 CTL2 CL        0.35   3    180.00 !
+CTL2 CTL2 CTL2 CL        0.11   4      0.00 !
+CTL2 CTL2 CTL2 CL        0.09   6    180.00 !
+
+IMPROPER
+!
+!V(improper) = Kpsi(psi - psi0)**2
+!
+!Kpsi: kcal/mole/rad**2
+!psi0: degrees
+!note that the second column of numbers (0) is ignored
+!
+!atom types           Kpsi                   psi0
+!
+CPB  CPA  NPH  CPA    20.8000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPB  X    X    CE1    90.0000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT2  X    X    CPB    90.0000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+CT3  X    X    CPB    90.0000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+!HA   C    C    HA     20.0000         0      0.0000 ! ALLOW   PEP POL ARO
+                ! Heme vinyl substituent (KK, from propene (JCS))
+HA   CPA  CPA  CPM    29.4000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+!HA   CPB  C    C      20.0000         0      0.0000 ! ALLOW HEM ARO
+                ! Heme (6-liganded): substituents (KK 05/13/91)
+!HA   HA   C    C      20.0000         0    180.0000 ! ALLOW   PEP POL ARO
+                ! Heme vinyl substituent (KK, from propene (JCS))
+HE2  HE2  CE2  CE2     3.0            0      0.00   ! 
+		! for ethene, yin/adm jr., 12/95
+HR1  NR1  NR2  CPH2    0.5000         0      0.0000 ! ALLOW ARO
+                ! his, adm jr., 7/05/90
+HR1  NR2  NR1  CPH2    0.5000         0      0.0000 ! ALLOW ARO
+                ! his, adm jr., 7/05/90
+HR3  CPH1 NR1  CPH1    0.5000         0      0.0000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 NR2  CPH1    0.5000         0      0.0000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  CPH1 NR3  CPH1    1.0000         0      0.0000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  NR1  CPH1 CPH1    0.5000         0      0.0000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HR3  NR2  CPH1 CPH1    0.5000         0      0.0000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+N    C    CP1  CP3     0.0000         0      0.0000 ! ALLOW PRO
+                ! 6-31g* AcProNH2 and ProNH2  RLD 5/19/92
+NC2  X    X    C      40.0000         0      0.0000 ! ALLOW   PEP POL ARO
+                ! 5.75->40.0 GUANIDINIUM (KK)
+NH1  X    X    H      20.0000         0      0.0000 ! ALLOW   PEP POL ARO
+                ! NMA Vibrational Modes (LK)
+NH2  X    X    H       4.0000         0      0.0000 ! ALLOW   POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+NPH  CPA  CPA  FE    137.4000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NPH  CPA  CPB  CPB    40.6000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NPH  CPA  CPM  CPA    18.3000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NPH  CPM  CPB  CPA    32.7000         0      0.0000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NR1  CPH1 CPH2 H       0.4500         0      0.0000 ! ALLOW ARO
+                ! his, adm jr., 7/05/90
+NR1  CPH2 CPH1 H       0.4500         0      0.0000 ! ALLOW ARO
+                ! his, adm jr., 7/05/90
+NR3  CPH1 CPH2 H       1.2000         0      0.0000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NR3  CPH2 CPH1 H       1.2000         0      0.0000 ! ALLOW ARO
+                ! his, adm jr., 6/27/90
+NY   CA   CY   CPT   100.0000         0      0.0000 ! ALLOW ARO
+                !adm jr., 5/15/91,  indole 3-21G HE1 out-of-plane surf.
+O    CP1  NH2  CC     45.0000         0      0.0000 ! ALLOW PEP POL PRO
+                ! 6-31g* AcProNH2 and ProNH2  RLD 5/19/92
+O    CT1  NH2  CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    CT2  NH2  CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    CT3  NH2  CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    HA   NH2  CC     45.0000         0      0.0000 ! ALLOW PEP POL PRO
+                ! adm jr., 5/13/91, formamide geometry and vibrations
+O    N    CT2  CC    120.0000         0      0.0000 ! ALLOW PEP POL PRO
+                ! 6-31g* AcProNH2 and ProNH2  RLD 5/19/92
+O    NH2  CP1  CC     45.0000         0      0.0000 ! ALLOW PEP POL PRO
+                ! 6-31g* AcProNH2 and ProNH2  RLD 5/19/92
+O    NH2  CT1  CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    NH2  CT2  CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    NH2  CT3  CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 8/13/90 acetamide geometry and vibrations
+O    NH2  HA   CC     45.0000         0      0.0000 ! ALLOW PEP POL
+                ! adm jr., 5/13/91, formamide geometry and vibrations
+O    X    X    C     120.0000         0      0.0000 ! ALLOW   PEP POL ARO
+                ! NMA Vibrational Modes (LK)
+OB   X    X    CD    100.0000         0      0.0000 ! ALLOW   ALC ARO POL
+                ! adm jr., 10/17/90, acetic acid vibrations
+OC   X    X    CC     96.0000         0      0.0000 ! ALLOW   PEP POL ARO ION
+                ! 90.0->96.0 acetate, single impr (KK)
+CC   X    X    CT1    96.0000         0      0.0000 ! ALLOW   PEP POL ARO ION
+                ! 90.0->96.0 acetate, single impr (KK)
+CC   X    X    CT2    96.0000         0      0.0000 ! ALLOW   PEP POL ARO ION
+                ! 90.0->96.0 acetate, single impr (KK)
+CC   X    X    CT3    96.0000         0      0.0000 ! ALLOW   PEP POL ARO ION
+                ! 90.0->96.0 acetate, single impr (KK)
+!lipid section
+OBL  X    X    CL         100.00    0     0.00 ! acetic acid
+HEL2 HEL2 CEL2 CEL2         3.00    0     0.00 ! ethene, yin,adm jr., 12/95
+OCL  X    X    CL          96.00    0     0.00 ! acetate
+
+CMAP
+! 2D grid correction data.  The following surfaces are the correction
+! to the CHARMM22 phi, psi alanine, proline and glycine dipeptide surfaces.
+! Use of CMAP requires generation with the topology file containing the
+! CMAP specifications along with version 31 or later of CHARMM.  Note that
+! use of "skip CMAP" yields the charmm22 energy surfaces.
+!
+! references
+!MacKerell, A.D., Jr., Feig, M., Brooks, C.L., III, Accurate Treatment of
+!Protein Backbone Conformational Energetics in Empirical Force Fields, Submitted
+!for publication.
+
+!MacKerell, A.D., Jr., Feig, M., Brooks, C.L., III, Improved Treatment of the 
+!Protein Backbone in Empirical Force Fields, Journal of the American Chemical
+!Society, In Press.
+
+
+! alanine map
+C    NH1  CT1  C    NH1  CT1  C    NH1   24
+
+!-180
+0.126790 0.768700 0.971260 1.250970 2.121010
+2.695430 2.064440 1.764790 0.755870 -0.713470
+0.976130 -2.475520 -5.455650 -5.096450 -5.305850
+-3.975630 -3.088580 -2.784200 -2.677120 -2.646060
+-2.335350 -2.010440 -1.608040 -0.482250
+
+!-165
+-0.802290 1.377090 1.577020 1.872290 2.398990
+2.461630 2.333840 1.904070 1.061460 0.518400
+-0.116320 -3.575440 -5.284480 -5.160310 -4.196010
+-3.276210 -2.715340 -1.806200 -1.101780 -1.210320
+-1.008810 -0.637100 -1.603360 -1.776870
+
+!-150
+-0.634810 1.156210 1.624350 2.047200 2.653910
+2.691410 2.296420 1.960450 1.324930 2.038290
+-1.151510 -3.148610 -4.058280 -4.531850 -3.796370
+-2.572090 -1.727250 -0.961410 -0.282910 -0.479120
+-1.039340 -1.618060 -1.725460 -1.376360
+
+!-135
+0.214000 1.521370 1.977440 2.377950 2.929470
+2.893410 2.435810 2.162970 1.761500 1.190090
+-1.218610 -2.108900 -2.976100 -3.405340 -2.768440
+-1.836030 -0.957950 0.021790 -0.032760 -0.665880
+-1.321170 -1.212320 -0.893170 -0.897040
+
+!-120
+0.873950 1.959160 2.508990 2.841100 3.698960
+3.309330 2.614300 2.481720 2.694660 1.082440
+-0.398320 -1.761800 -2.945110 -3.294690 -2.308300
+-0.855480 -0.087320 0.439040 0.691880 -0.586330
+-1.027210 -0.976640 -0.467580 0.104020
+
+!-105
+1.767380 2.286650 2.818030 3.065500 3.370620
+3.397440 2.730310 2.878790 2.542010 1.545240
+-0.092150 -1.694440 -2.812310 -2.802430 -1.856360
+-0.306240 -0.122440 0.444680 0.810150 -0.058630
+-0.270290 -0.178830 0.202360 0.493810
+
+!-90
+1.456010 2.743180 2.589450 3.046230 3.451510
+3.319160 3.052900 3.873720 2.420650 0.949100
+0.008370 -1.382980 -2.138930 -2.087380 -1.268300
+-0.494370 0.267580 0.908250 0.537520 0.306260
+0.069540 0.097460 0.263060 0.603220
+
+!-75
+1.396790 3.349090 2.180920 2.942960 3.814070
+3.675800 3.555310 3.887290 2.101260 -0.190940
+-0.732240 -1.382040 -0.673880 -0.817390 -0.826980
+-0.111800 0.053710 0.296400 0.692240 0.428960
+-0.036100 -0.033820 -0.194300 0.400210
+
+!-60
+0.246650 1.229980 1.716960 3.168570 4.208190
+4.366860 4.251080 3.348110 0.997540 -1.287540
+-1.179900 -0.684300 -0.853660 -1.158760 -0.347550
+0.114810 0.242800 0.322420 0.370140 -0.374950
+-0.676940 -1.323430 -1.366650 -0.218770
+
+!-45
+-1.196730 0.078060 2.347410 4.211350 5.376000
+5.364940 4.355200 2.436510 0.408470 -0.590840
+-0.435960 -0.501210 -0.822230 -0.607210 0.057910
+0.246580 -0.070570 0.379430 0.247770 -0.571680
+-1.282910 -1.715770 -1.839820 -1.987110
+
+!-30
+-1.174720 1.067030 4.180460 6.741610 6.070770
+4.781470 2.758340 1.295810 0.571150 -0.196480
+0.251860 -0.732140 1.289360 1.497590 1.890550
+2.198490 0.169290 0.534000 0.331780 -1.276320
+-2.550070 -3.312150 -3.136670 -2.642260
+
+!-15
+0.293590 5.588070 3.732620 3.217620 3.272450
+2.492320 1.563700 1.356760 0.831410 0.630170
+1.591970 0.821920 0.486070 0.715760 0.996020
+1.591580 -0.367400 0.181770 -0.613920 -2.267900
+-3.516460 -3.597700 -3.043340 -1.765020
+
+!0
+2.832310 0.787990 0.323280 0.479230 0.628600
+0.976330 1.238750 1.671950 1.645480 2.520340
+1.606970 0.776350 0.119780 0.070390 0.121170
+-1.569230 -1.213010 -1.846360 -2.744510 -3.792530
+-3.934880 -3.615930 -2.675750 -0.924170
+
+!15
+-0.778340 -1.912680 -2.052140 -1.846280 -1.047430
+0.183400 1.682950 2.223500 1.358370 2.448660
+1.436920 0.678570 -0.237060 -0.535320 -0.790380
+-2.182580 -3.251140 -4.195110 -4.269270 -3.908210
+-3.455620 -2.773970 1.755370 0.313410
+
+!30
+-2.963810 -3.483730 -3.517080 -2.724860 -1.405510
+0.336200 1.428450 1.394630 0.970370 2.462720
+1.522430 0.553620 -0.407380 -1.482950 -3.613920
+-4.159810 -4.945580 -4.784040 -3.764540 -2.959140
+-1.963850 -1.071260 -1.599580 -2.445320
+
+!45
+-4.029070 -3.932660 -3.558480 -2.513980 -1.037320
+0.362000 0.814380 0.754110 0.502370 1.903420
+0.770220 -0.416420 -3.286310 -3.875270 -4.907800
+-5.704430 -5.645660 -4.396040 -2.865450 -2.368170
+-2.860490 -3.416560 -3.666490 -3.859070
+
+!60
+-3.338270 -2.960220 -2.311700 -1.272890 -0.246470
+0.722610 0.668070 0.438130 2.395330 1.632470
+-2.041450 -3.218100 -3.915080 -4.852510 -5.696500
+-6.314370 -5.683690 -4.170620 -3.141000 -3.508820
+-3.756430 -3.640810 -3.640430 -3.550690
+
+!75
+-2.244860 -1.632100 -1.000640 -0.170440 0.526440
+0.823710 0.517140 -0.013120 -0.370910 -1.213720
+-2.305650 -3.420580 -4.484960 -5.693140 -6.199150
+-6.253870 -5.211310 -4.174380 -3.685150 -4.151360
+-4.161970 -3.725150 -3.715310 -2.606760
+
+!90
+-1.720840 -1.177830 -0.428430 0.277730 0.807900
+0.803260 0.482510 -0.336900 -0.786270 -1.774070
+-2.793220 -3.828560 -5.211800 -6.636850 -6.989940
+-6.108800 -5.452410 -3.911450 -4.321000 -4.587240
+-4.102610 -3.772820 -3.157300 -2.648390
+
+!105
+-1.850640 -1.092420 -0.445020 0.128490 1.005520
+0.884820 0.485850 -0.218470 -0.857670 -1.682330
+-3.014400 -4.481110 -6.053510 -6.865400 -6.871130
+-5.728240 -3.912230 -4.802110 -5.034640 -4.715990
+-4.601080 -4.086220 -3.274630 -2.410940
+
+!120
+-1.969230 -1.116650 -0.540250 -0.150330 0.763520
+1.038890 0.758480 0.313530 -0.333050 -1.872770
+-3.366270 -5.008260 -6.124810 -7.034830 -6.724320
+-3.700200 -4.510620 -5.185650 -5.361620 -4.847490
+-4.444320 -4.004260 -3.415720 -2.751230
+
+!135
+-2.111250 -1.168960 -0.322790 -0.006920 0.316660
+1.086270 0.939170 0.625340 -0.166360 -1.830310
+-3.469470 -4.946030 -6.112560 -1.915580 -4.047310
+-4.996740 -4.996730 -4.842690 -4.886620 -4.300540
+-4.494620 -4.442210 -4.163570 -3.183510
+
+!150
+-1.757590 -0.403620 0.023920 0.362390 0.634520
+1.264920 1.361360 0.948420 -0.073680 -1.483560
+-3.152820 1.835120 -1.762860 -5.093660 -5.744830
+-5.390070 -4.783930 -4.190630 -4.115420 -4.042280
+-4.125570 -4.028550 -4.026100 -2.937910
+
+!165
+-0.810590 -0.071500 0.378890 0.543310 1.277880
+1.641310 1.698840 1.519950 0.631950 -1.088670
+-2.736530 -0.735240 -4.563830 -6.408350 -5.889450
+-5.141750 -4.194970 -3.666490 -3.843450 -3.818830
+-3.826180 -3.596820 -2.994790 -2.231020
+
+! alanine before proline map
+
+C    NH1  CT1  C    NH1  CT1  C    N     24
+
+!-180
+0.126790 0.768700 0.971260 1.250970 2.121010
+2.695430 2.064440 1.764790 0.755870 -0.713470
+0.976130 -2.475520 -5.455650 -5.096450 -5.305850
+-3.975630 -3.088580 -2.784200 -2.677120 -2.646060
+-2.335350 -2.010440 -1.608040 -0.482250
+
+!-165
+-0.802290 1.377090 1.577020 1.872290 2.398990
+2.461630 2.333840 1.904070 1.061460 0.518400
+-0.116320 -3.575440 -5.284480 -5.160310 -4.196010
+-3.276210 -2.715340 -1.806200 -1.101780 -1.210320
+-1.008810 -0.637100 -1.603360 -1.776870
+
+!-150
+-0.634810 1.156210 1.624350 2.047200 2.653910
+2.691410 2.296420 1.960450 1.324930 2.038290
+-1.151510 -3.148610 -4.058280 -4.531850 -3.796370
+-2.572090 -1.727250 -0.961410 -0.282910 -0.479120
+-1.039340 -1.618060 -1.725460 -1.376360
+
+!-135
+0.214000 1.521370 1.977440 2.377950 2.929470
+2.893410 2.435810 2.162970 1.761500 1.190090
+-1.218610 -2.108900 -2.976100 -3.405340 -2.768440
+-1.836030 -0.957950 0.021790 -0.032760 -0.665880
+-1.321170 -1.212320 -0.893170 -0.897040
+
+!-120
+0.873950 1.959160 2.508990 2.841100 3.698960
+3.309330 2.614300 2.481720 2.694660 1.082440
+-0.398320 -1.761800 -2.945110 -3.294690 -2.308300
+-0.855480 -0.087320 0.439040 0.691880 -0.586330
+-1.027210 -0.976640 -0.467580 0.104020
+
+!-105
+1.767380 2.286650 2.818030 3.065500 3.370620
+3.397440 2.730310 2.878790 2.542010 1.545240
+-0.092150 -1.694440 -2.812310 -2.802430 -1.856360
+-0.306240 -0.122440 0.444680 0.810150 -0.058630
+-0.270290 -0.178830 0.202360 0.493810
+
+!-90
+1.456010 2.743180 2.589450 3.046230 3.451510
+3.319160 3.052900 3.873720 2.420650 0.949100
+0.008370 -1.382980 -2.138930 -2.087380 -1.268300
+-0.494370 0.267580 0.908250 0.537520 0.306260
+0.069540 0.097460 0.263060 0.603220
+
+!-75
+1.396790 3.349090 2.180920 2.942960 3.814070
+3.675800 3.555310 3.887290 2.101260 -0.190940
+-0.732240 -1.382040 -0.673880 -0.817390 -0.826980
+-0.111800 0.053710 0.296400 0.692240 0.428960
+-0.036100 -0.033820 -0.194300 0.400210
+
+!-60
+0.246650 1.229980 1.716960 3.168570 4.208190
+4.366860 4.251080 3.348110 0.997540 -1.287540
+-1.179900 -0.684300 -0.853660 -1.158760 -0.347550
+0.114810 0.242800 0.322420 0.370140 -0.374950
+-0.676940 -1.323430 -1.366650 -0.218770
+
+!-45
+-1.196730 0.078060 2.347410 4.211350 5.376000
+5.364940 4.355200 2.436510 0.408470 -0.590840
+-0.435960 -0.501210 -0.822230 -0.607210 0.057910
+0.246580 -0.070570 0.379430 0.247770 -0.571680
+-1.282910 -1.715770 -1.839820 -1.987110
+
+!-30
+-1.174720 1.067030 4.180460 6.741610 6.070770
+4.781470 2.758340 1.295810 0.571150 -0.196480
+0.251860 -0.732140 1.289360 1.497590 1.890550
+2.198490 0.169290 0.534000 0.331780 -1.276320
+-2.550070 -3.312150 -3.136670 -2.642260
+
+!-15
+0.293590 5.588070 3.732620 3.217620 3.272450
+2.492320 1.563700 1.356760 0.831410 0.630170
+1.591970 0.821920 0.486070 0.715760 0.996020
+1.591580 -0.367400 0.181770 -0.613920 -2.267900
+-3.516460 -3.597700 -3.043340 -1.765020
+
+!0
+2.832310 0.787990 0.323280 0.479230 0.628600
+0.976330 1.238750 1.671950 1.645480 2.520340
+1.606970 0.776350 0.119780 0.070390 0.121170
+-1.569230 -1.213010 -1.846360 -2.744510 -3.792530
+-3.934880 -3.615930 -2.675750 -0.924170
+
+!15
+-0.778340 -1.912680 -2.052140 -1.846280 -1.047430
+0.183400 1.682950 2.223500 1.358370 2.448660
+1.436920 0.678570 -0.237060 -0.535320 -0.790380
+-2.182580 -3.251140 -4.195110 -4.269270 -3.908210
+-3.455620 -2.773970 1.755370 0.313410
+
+!30
+-2.963810 -3.483730 -3.517080 -2.724860 -1.405510
+0.336200 1.428450 1.394630 0.970370 2.462720
+1.522430 0.553620 -0.407380 -1.482950 -3.613920
+-4.159810 -4.945580 -4.784040 -3.764540 -2.959140
+-1.963850 -1.071260 -1.599580 -2.445320
+
+!45
+-4.029070 -3.932660 -3.558480 -2.513980 -1.037320
+0.362000 0.814380 0.754110 0.502370 1.903420
+0.770220 -0.416420 -3.286310 -3.875270 -4.907800
+-5.704430 -5.645660 -4.396040 -2.865450 -2.368170
+-2.860490 -3.416560 -3.666490 -3.859070
+
+!60
+-3.338270 -2.960220 -2.311700 -1.272890 -0.246470
+0.722610 0.668070 0.438130 2.395330 1.632470
+-2.041450 -3.218100 -3.915080 -4.852510 -5.696500
+-6.314370 -5.683690 -4.170620 -3.141000 -3.508820
+-3.756430 -3.640810 -3.640430 -3.550690
+
+!75
+-2.244860 -1.632100 -1.000640 -0.170440 0.526440
+0.823710 0.517140 -0.013120 -0.370910 -1.213720
+-2.305650 -3.420580 -4.484960 -5.693140 -6.199150
+-6.253870 -5.211310 -4.174380 -3.685150 -4.151360
+-4.161970 -3.725150 -3.715310 -2.606760
+
+!90
+-1.720840 -1.177830 -0.428430 0.277730 0.807900
+0.803260 0.482510 -0.336900 -0.786270 -1.774070
+-2.793220 -3.828560 -5.211800 -6.636850 -6.989940
+-6.108800 -5.452410 -3.911450 -4.321000 -4.587240
+-4.102610 -3.772820 -3.157300 -2.648390
+
+!105
+-1.850640 -1.092420 -0.445020 0.128490 1.005520
+0.884820 0.485850 -0.218470 -0.857670 -1.682330
+-3.014400 -4.481110 -6.053510 -6.865400 -6.871130
+-5.728240 -3.912230 -4.802110 -5.034640 -4.715990
+-4.601080 -4.086220 -3.274630 -2.410940
+
+!120
+-1.969230 -1.116650 -0.540250 -0.150330 0.763520
+1.038890 0.758480 0.313530 -0.333050 -1.872770
+-3.366270 -5.008260 -6.124810 -7.034830 -6.724320
+-3.700200 -4.510620 -5.185650 -5.361620 -4.847490
+-4.444320 -4.004260 -3.415720 -2.751230
+
+!135
+-2.111250 -1.168960 -0.322790 -0.006920 0.316660
+1.086270 0.939170 0.625340 -0.166360 -1.830310
+-3.469470 -4.946030 -6.112560 -1.915580 -4.047310
+-4.996740 -4.996730 -4.842690 -4.886620 -4.300540
+-4.494620 -4.442210 -4.163570 -3.183510
+
+!150
+-1.757590 -0.403620 0.023920 0.362390 0.634520
+1.264920 1.361360 0.948420 -0.073680 -1.483560
+-3.152820 1.835120 -1.762860 -5.093660 -5.744830
+-5.390070 -4.783930 -4.190630 -4.115420 -4.042280
+-4.125570 -4.028550 -4.026100 -2.937910
+
+!165
+-0.810590 -0.071500 0.378890 0.543310 1.277880
+1.641310 1.698840 1.519950 0.631950 -1.088670
+-2.736530 -0.735240 -4.563830 -6.408350 -5.889450
+-5.141750 -4.194970 -3.666490 -3.843450 -3.818830
+-3.826180 -3.596820 -2.994790 -2.231020
+
+! proline
+C    N    CP1  C    N    CP1    C    NH1 24
+
+! -180.00
+-4.60660 -4.28920 -4.51420 -5.49210 -6.65460
+-7.18530 -7.63320 -8.41920 -9.12510 -8.97830
+-9.02750 -8.88890 -8.61060 -8.10240 -7.96680
+-7.98860 -7.96190 -7.56330 -7.73950 -8.31580
+-9.33380 -9.61880 -7.91860 -6.00570
+
+! -165.00
+-3.21030 -2.90350 -3.04340 -3.83720 -4.92360
+-5.41790 -5.78320 -6.62490 -7.17820 -7.59500
+-7.60980 -7.39440 -6.68190 -6.24950 -5.83810
+-5.90510 -5.57900 -4.89950 -5.18840 -6.13180
+-6.93510 -7.49160 -5.84410 -4.48890
+
+! -150.00
+-2.23750 -2.26520 -2.55120 -3.67610 -4.61620
+-5.01560 -5.36920 -5.93110 -6.16820 -6.48830
+-6.54220 -6.14310 -5.33350 -4.85090 -4.50790
+-4.44050 -4.34380 -4.13820 -4.35620 -5.24880
+-6.05280 -6.18610 -4.80390 -3.41730
+
+! -135.00
+-2.12830 -2.02010 -2.90220 -3.88240 -4.63610
+-5.02000 -5.46090 -5.79830 -5.63220 -6.41490
+-6.20330 -5.57550 -4.58160 -4.15850 -4.00710
+-3.95020 -3.76880 -4.09690 -4.52680 -5.33410
+-5.97380 -5.68710 -4.70040 -3.33790
+
+! -120.00
+-2.20610 -2.22370 -2.85110 -3.55370 -4.33320
+-4.57860 -4.95030 -5.23950 -5.37730 -6.14740
+-5.98660 -5.17760 -4.16090 -3.78450 -3.83210
+-3.86590 -4.21340 -4.26250 -4.16200 -4.62160
+-5.47440 -5.38280 -4.39100 -3.16760
+
+! -105.00
+-1.32980 -1.44660 -2.00420 -2.84440 -3.31580
+-3.15410 -2.83060 -3.04980 -4.04810 -5.02030
+-4.84090 -3.88520 -2.79540 -2.49190 -2.65990
+-3.34670 -3.60580 -3.76970 -4.07430 -4.21930
+-4.66740 -4.23940 -3.37160 -2.10050
+
+!  -90.00
+-0.27400 -0.41780 -0.92340 -1.48470 -1.84370
+-1.42480 -1.14210 -1.83280 -2.97900 -3.57000
+-3.33310 -2.24200 -1.31350 -0.96640  0.38300
+-0.57540 -0.74080 -0.59130 -0.41960 -2.64120
+-3.25380 -2.85540 -2.09970 -0.95660
+
+!  -75.00
+ 0.26880  0.18190  0.00300 -0.45390 -0.24210
+ 0.21240  0.33320 -0.95520 -2.17670 -2.66490
+-2.24910 -1.35480 -0.35030  1.84000  0.81880
+ 0.41530  0.58460  0.65350  0.54960  0.41300
+ 0.23350 -2.13490 -1.54900 -0.38340
+
+!  -60.00
+-0.48820 -0.40730 -0.25210 -0.20490  0.53370
+ 1.05990  0.72540 -0.68300 -2.10190 -2.83530
+-2.55500 -1.33940 -0.24710  1.63190  1.10600
+ 1.16350  1.30720  1.49310  1.16160  0.99320
+-2.33360 -2.59380 -2.01110 -1.46840
+
+!  -45.00
+-2.41010 -1.30740 -0.85960 -0.06830  0.20500
+ 0.00650 -0.59750 -2.39820 -3.98270 -4.46610
+-3.51230 -1.99330  0.96050  0.80870  0.64450
+ 0.82590  1.00550  1.28110  0.96670 -2.71140
+-4.18330 -4.83370 -4.49950 -3.47920
+
+!  -30.00
+-3.46300 -2.06680 -0.84260 -0.70440 -1.85140
+-2.59990 -3.62600 -5.08050 -6.35480 -6.08340
+-4.78650 -1.24210 -0.81660 -0.60170 -0.50040
+-0.41020 -0.28450 -0.14620 -3.14950 -5.16280
+-6.81940 -7.52060 -7.12480 -5.49420
+
+!  -15.00
+-2.70550 -1.11410 -0.82120 -3.80470 -4.50780
+-4.64960 -5.78530 -7.04450 -7.30810 -6.56450
+-3.47860 -2.68630 -1.78120 -1.48400 -1.45930
+-1.43060 -5.75320 -2.72500 -6.45790 -8.16530
+-9.86330 -9.80710 -8.62670 -6.49690
+
+!    0.00
+-2.73190 -3.83060 -5.26960 -5.91610 -6.71690
+-7.05420 -7.77520 -7.81220 -7.54160 -4.98400
+-5.05070 -4.28910 -3.78740 -3.64600 -3.91990
+-3.55740 -3.03470 -5.78910 -7.02720 -8.04090
+-8.60950 -8.27740 -7.10120 -5.12040
+
+!   15.00
+-3.17420 -4.66830 -6.17790 -7.26760 -8.22560
+-8.32120 -7.64880 -7.00240 -4.77210 -5.65380
+-5.36790 -4.43640 -4.37720 -4.45280 -4.47980
+-4.07260 -6.75420 -7.56910 -7.95830 -7.87760
+-7.88160 -7.29010 -7.15600 -5.19260
+
+!   30.00
+-2.96240 -4.87720 -6.64930 -7.95180 -8.47610
+-7.49950 -6.26260 -6.35040 -4.34190 -4.49790
+-4.27480 -1.75620 -3.89990 -3.81400 -3.99610
+-6.66430 -7.66400 -7.80660 -7.21980 -6.83750
+-6.88220 -7.10200 -5.10200 -2.38920
+
+!45
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!60
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!75
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!90
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!105
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!120
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!135
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!150
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!165
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!2 adjacent prolines
+C    N    CP1  C    N    CP1    C    N 24
+
+! -180.00
+-4.60660 -4.28920 -4.51420 -5.49210 -6.65460
+-7.18530 -7.63320 -8.41920 -9.12510 -8.97830
+-9.02750 -8.88890 -8.61060 -8.10240 -7.96680
+-7.98860 -7.96190 -7.56330 -7.73950 -8.31580
+-9.33380 -9.61880 -7.91860 -6.00570
+
+! -165.00
+-3.21030 -2.90350 -3.04340 -3.83720 -4.92360
+-5.41790 -5.78320 -6.62490 -7.17820 -7.59500
+-7.60980 -7.39440 -6.68190 -6.24950 -5.83810
+-5.90510 -5.57900 -4.89950 -5.18840 -6.13180
+-6.93510 -7.49160 -5.84410 -4.48890
+
+! -150.00
+-2.23750 -2.26520 -2.55120 -3.67610 -4.61620
+-5.01560 -5.36920 -5.93110 -6.16820 -6.48830
+-6.54220 -6.14310 -5.33350 -4.85090 -4.50790
+-4.44050 -4.34380 -4.13820 -4.35620 -5.24880
+-6.05280 -6.18610 -4.80390 -3.41730
+
+! -135.00
+-2.12830 -2.02010 -2.90220 -3.88240 -4.63610
+-5.02000 -5.46090 -5.79830 -5.63220 -6.41490
+-6.20330 -5.57550 -4.58160 -4.15850 -4.00710
+-3.95020 -3.76880 -4.09690 -4.52680 -5.33410
+-5.97380 -5.68710 -4.70040 -3.33790
+
+! -120.00
+-2.20610 -2.22370 -2.85110 -3.55370 -4.33320
+-4.57860 -4.95030 -5.23950 -5.37730 -6.14740
+-5.98660 -5.17760 -4.16090 -3.78450 -3.83210
+-3.86590 -4.21340 -4.26250 -4.16200 -4.62160
+-5.47440 -5.38280 -4.39100 -3.16760
+
+! -105.00
+-1.32980 -1.44660 -2.00420 -2.84440 -3.31580
+-3.15410 -2.83060 -3.04980 -4.04810 -5.02030
+-4.84090 -3.88520 -2.79540 -2.49190 -2.65990
+-3.34670 -3.60580 -3.76970 -4.07430 -4.21930
+-4.66740 -4.23940 -3.37160 -2.10050
+
+!  -90.00
+-0.27400 -0.41780 -0.92340 -1.48470 -1.84370
+-1.42480 -1.14210 -1.83280 -2.97900 -3.57000
+-3.33310 -2.24200 -1.31350 -0.96640  0.38300
+-0.57540 -0.74080 -0.59130 -0.41960 -2.64120
+-3.25380 -2.85540 -2.09970 -0.95660
+
+!  -75.00
+ 0.26880  0.18190  0.00300 -0.45390 -0.24210
+ 0.21240  0.33320 -0.95520 -2.17670 -2.66490
+-2.24910 -1.35480 -0.35030  1.84000  0.81880
+ 0.41530  0.58460  0.65350  0.54960  0.41300
+ 0.23350 -2.13490 -1.54900 -0.38340
+
+!  -60.00
+-0.48820 -0.40730 -0.25210 -0.20490  0.53370
+ 1.05990  0.72540 -0.68300 -2.10190 -2.83530
+-2.55500 -1.33940 -0.24710  1.63190  1.10600
+ 1.16350  1.30720  1.49310  1.16160  0.99320
+-2.33360 -2.59380 -2.01110 -1.46840
+
+!  -45.00
+-2.41010 -1.30740 -0.85960 -0.06830  0.20500
+ 0.00650 -0.59750 -2.39820 -3.98270 -4.46610
+-3.51230 -1.99330  0.96050  0.80870  0.64450
+ 0.82590  1.00550  1.28110  0.96670 -2.71140
+-4.18330 -4.83370 -4.49950 -3.47920
+
+!  -30.00
+-3.46300 -2.06680 -0.84260 -0.70440 -1.85140
+-2.59990 -3.62600 -5.08050 -6.35480 -6.08340
+-4.78650 -1.24210 -0.81660 -0.60170 -0.50040
+-0.41020 -0.28450 -0.14620 -3.14950 -5.16280
+-6.81940 -7.52060 -7.12480 -5.49420
+
+!  -15.00
+-2.70550 -1.11410 -0.82120 -3.80470 -4.50780
+-4.64960 -5.78530 -7.04450 -7.30810 -6.56450
+-3.47860 -2.68630 -1.78120 -1.48400 -1.45930
+-1.43060 -5.75320 -2.72500 -6.45790 -8.16530
+-9.86330 -9.80710 -8.62670 -6.49690
+
+!    0.00
+-2.73190 -3.83060 -5.26960 -5.91610 -6.71690
+-7.05420 -7.77520 -7.81220 -7.54160 -4.98400
+-5.05070 -4.28910 -3.78740 -3.64600 -3.91990
+-3.55740 -3.03470 -5.78910 -7.02720 -8.04090
+-8.60950 -8.27740 -7.10120 -5.12040
+
+!   15.00
+-3.17420 -4.66830 -6.17790 -7.26760 -8.22560
+-8.32120 -7.64880 -7.00240 -4.77210 -5.65380
+-5.36790 -4.43640 -4.37720 -4.45280 -4.47980
+-4.07260 -6.75420 -7.56910 -7.95830 -7.87760
+-7.88160 -7.29010 -7.15600 -5.19260
+
+!   30.00
+-2.96240 -4.87720 -6.64930 -7.95180 -8.47610
+-7.49950 -6.26260 -6.35040 -4.34190 -4.49790
+-4.27480 -1.75620 -3.89990 -3.81400 -3.99610
+-6.66430 -7.66400 -7.80660 -7.21980 -6.83750
+-6.88220 -7.10200 -5.10200 -2.38920
+
+!45
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!60
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!75
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!90
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!105
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!120
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!135
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!150
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+!165
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000 0.000000
+0.000000 0.000000 0.000000 0.000000
+
+! glycine map
+
+C    NH1  CT2  C    NH1  CT2  C    NH1   24
+
+!-180
+-0.549160 -0.535500 -0.588110 -0.754620 -0.679290
+-0.038150 0.298460 0.326040 -0.375610 -1.704360
+-3.061280 -3.956460 -3.576280 -1.038930 2.012450
+-1.714610 -0.377660 0.317310 0.294580 -0.042920
+-0.676620 -0.744600 -0.586590 -0.554770
+
+!-165
+-0.709450 -0.896700 -0.990850 -1.319240 -0.940260
+-0.126160 0.329180 0.258100 -0.534910 -1.715700
+-2.780320 -3.153350 -1.636020 1.822690 -2.675640
+-1.810120 -0.410680 0.180860 0.196710 -0.000430
+-0.271890 -0.462500 -0.348750 -0.477660
+
+!-150
+-1.224850 -1.482430 -1.665900 -1.656770 -1.119780
+-1.642540 -0.054220 -0.290670 -0.887080 -1.626260
+-2.165440 -1.546500 0.753400 -2.949180 -2.225630
+-1.664160 -0.628990 0.000490 0.033160 -0.092820
+-0.339050 -0.563330 -0.794980 -0.710760
+
+!-135
+-1.787640 -2.117750 -2.143020 -1.803720 -1.567160
+-0.886880 -0.801350 -0.851590 -1.020630 -1.337360
+-1.062570 0.338010 -4.372310 -2.435890 -2.220710
+-1.718060 -0.758950 -0.207560 0.100910 -0.055650
+-0.288370 -0.880610 -1.267450 -1.465530
+
+!-120
+-2.348270 -2.593790 -2.596140 -2.364070 -1.970070
+-1.705860 -1.435540 -1.289220 -1.358170 -0.975570
+-3.514390 -4.283210 -3.975820 -3.215190 -2.394430
+-1.455320 -0.553910 -0.158900 -0.173830 -0.297950
+-0.661220 -1.068330 -1.601800 -1.914850
+
+!-105
+-2.788800 -3.079570 -3.178150 -3.013710 -2.626630
+-2.266680 -1.951490 -1.681850 -1.195390 -2.567680
+-3.632800 -4.748210 -4.662850 -4.255190 -2.776760
+-1.695490 -0.893140 -0.633810 -0.467320 -0.540540
+-0.950190 -1.401500 -1.959970 -2.412680
+
+!-90
+-3.857170 -3.713610 -3.902110 -3.611370 -3.040850
+-2.406460 -1.975250 -1.452040 -0.971860 -2.808170
+-4.181160 -4.981430 -5.446890 -4.359900 -2.864390
+-1.898510 -1.139090 -0.971340 -1.065550 -1.020680
+-1.141350 -1.794480 -2.420970 -2.939990
+
+!-75
+-4.987770 -4.995210 -4.485310 -3.892550 -3.228630
+-2.345360 -1.664160 -1.105500 -1.945510 -3.715530
+-4.492140 -5.536170 -5.708500 -3.675410 -2.986660
+-1.859410 -0.756620 -1.269930 -1.312730 -1.607440
+-1.892510 -2.659400 -3.347950 -3.970600
+
+!-60
+-6.183650 -5.456080 -4.878940 -4.000820 -2.683230
+-2.067520 -1.094850 -1.119790 -2.962910 -3.687830
+-4.993340 -4.666260 -3.796280 -3.374140 -2.495430
+-1.453990 -0.877560 -1.002930 -1.337310 -2.431360
+-2.948140 -4.008100 -4.821040 -5.565810
+
+!-45
+-6.755760 -5.850030 -4.362190 -2.714090 -1.708710
+-0.526660 -0.536700 -2.037170 -3.892650 -4.558570
+-4.237410 -3.735160 -3.688580 -3.009910 -2.112940
+-1.455400 -0.925490 -1.121840 -1.561900 -2.751370
+-4.094860 -5.207530 -6.128530 -6.613030
+
+!-30
+-5.716250 -4.434060 -2.788600 -0.974400 -0.729200
+-0.904940 -1.833540 -3.017700 -3.313450 -3.336010
+-3.181640 -3.594720 -1.231370 -0.603790 0.128810
+-1.222610 -0.909150 -0.837700 -1.346820 -3.040880
+-4.731110 -5.844860 -6.428460 -6.424880
+
+!-15
+-3.991110 -2.046000 0.082550 -2.676110 -2.828500
+-2.596640 -2.843330 -3.011480 -2.312640 -2.405980
+-3.086210 -1.164620 -1.231660 -0.871900 -0.348980
+-1.735900 -0.914150 -0.484520 -1.818040 -3.602550
+-5.330320 -5.992270 -5.588080 -5.408360
+
+!0
+-1.147060 -3.317730 -4.305100 -4.615200 -4.533780
+-3.622950 -2.832800 -1.872810 -1.144300 -1.994070
+-0.741980 -1.115010 -1.229250 -1.103680 -0.742430
+-1.973970 -1.070020 -1.802220 -2.712770 -3.624130
+-4.537100 -4.619970 -4.310890 -3.318290
+
+!15
+-3.997710 -5.408360 -5.588080 -5.992270 -5.330320
+-3.602550 -1.818040 -0.484520 -0.914150 -1.735900
+-0.348980 -0.871900 -1.231660 -1.164620 -3.086210
+-2.405980 -2.312640 -3.011480 -2.843330 -2.596640
+-2.828500 -2.676110 0.082550 -2.046000
+
+!30
+-5.710850 -6.424880 -6.428460 -5.844860 -4.731110
+-3.040880 -1.346820 -0.837700 -0.909150 -1.222610
+0.128810 -0.603790 -1.231370 -3.594720 -3.181640
+-3.336010 -3.313450 -3.017700 -1.833540 -0.904940
+-0.729200 -0.974400 -2.788600 -4.434060
+
+!45
+-6.754940 -6.613030 -6.128530 -5.207530 -4.094860
+-2.751370 -1.561900 -1.121840 -0.925490 -1.455400
+-2.112940 -3.009910 -3.688580 -3.735160 -4.237410
+-4.558570 -3.892650 -2.037170 -0.536700 -0.526660
+-1.708710 -2.714090 -4.362190 -5.850030
+
+!60
+-6.188070 -5.565810 -4.821040 -4.008100 -2.948140
+-2.431360 -1.337310 -1.002930 -0.877560 -1.453990
+-2.495430 -3.374140 -3.796280 -4.666260 -4.993340
+-3.687830 -2.962910 -1.119790 -1.094850 -2.067520
+-2.683230 -4.000820 -4.878940 -5.456080
+
+!75
+-4.986080 -3.970600 -3.347950 -2.659400 -1.892510
+-1.607440 -1.312730 -1.269930 -0.756620 -1.859410
+-2.986660 -3.675410 -5.708500 -5.536170 -4.492140
+-3.715530 -1.945510 -1.105500 -1.664160 -2.345360
+-3.228630 -3.892550 -4.485310 -4.995210
+
+!90
+-3.879190 -2.939990 -2.420970 -1.794480 -1.141350
+-1.020680 -1.065550 -0.971340 -1.139090 -1.898510
+-2.864390 -4.359900 -5.446890 -4.981430 -4.181160
+-2.808170 -0.971860 -1.452040 -1.975250 -2.406460
+-3.040850 -3.611370 -3.902110 -3.713610
+
+!105
+-2.793280 -2.412680 -1.959970 -1.401500 -0.950190
+-0.540540 -0.467320 -0.633810 -0.893140 -1.695490
+-2.776760 -4.255190 -4.662850 -4.448210 -3.332800
+-2.567680 -1.195390 -1.681850 -1.951490 -2.266680
+-2.626630 -3.013710 -3.178150 -3.079570
+
+!120
+-2.330190 -1.914850 -1.601800 -1.068330 -0.661220
+-0.297950 -0.173830 -0.158900 -0.553910 -1.455320
+-2.394430 -3.215190 -3.975820 -3.783210 -3.014390
+-0.975570 -1.358170 -1.289220 -1.435540 -1.705860
+-1.970070 -2.364070 -2.596140 -2.593790
+
+!135
+-1.796120 -1.465530 -1.267450 -0.880610 -0.288370
+-0.055650 0.100910 -0.207560 -0.758950 -1.718060
+-2.220710 -2.435890 -4.372310 0.338010 -1.062570
+-1.337360 -1.020630 -0.851590 -0.801350 -0.886880
+-1.567160 -1.803720 -2.143020 -2.117750
+
+!150
+-1.263610 -0.710760 -0.794980 -0.563330 -0.339050
+-0.092820 0.033160 0.000490 -0.628990 -1.664160
+-2.225630 -2.949180 0.753400 -1.546500 -2.165440
+-1.626260 -0.887080 -0.290670 -0.054220 -1.642540
+-1.119780 -1.656770 -1.665900 -1.482430
+
+!165
+-0.684660 -0.477660 -0.348750 -0.462500 -0.271890
+-0.000430 0.196710 0.180860 -0.410680 -1.810120
+-2.675640 1.822690 -1.636020 -3.153350 -2.780320
+-1.715700 -0.534910 0.258100 0.329180 -0.126160
+-0.940260 -1.319240 -0.990850 -0.896700
+
+! glycine before proline map: use glycine map
+
+C    NH1  CT2  C    NH1  CT2  C    N   24
+
+!-180
+-0.549160 -0.535500 -0.588110 -0.754620 -0.679290
+-0.038150 0.298460 0.326040 -0.375610 -1.704360
+-3.061280 -3.956460 -3.576280 -1.038930 2.012450
+-1.714610 -0.377660 0.317310 0.294580 -0.042920
+-0.676620 -0.744600 -0.586590 -0.554770
+
+!-165
+-0.709450 -0.896700 -0.990850 -1.319240 -0.940260
+-0.126160 0.329180 0.258100 -0.534910 -1.715700
+-2.780320 -3.153350 -1.636020 1.822690 -2.675640
+-1.810120 -0.410680 0.180860 0.196710 -0.000430
+-0.271890 -0.462500 -0.348750 -0.477660
+
+!-150
+-1.224850 -1.482430 -1.665900 -1.656770 -1.119780
+-1.642540 -0.054220 -0.290670 -0.887080 -1.626260
+-2.165440 -1.546500 0.753400 -2.949180 -2.225630
+-1.664160 -0.628990 0.000490 0.033160 -0.092820
+-0.339050 -0.563330 -0.794980 -0.710760
+
+!-135
+-1.787640 -2.117750 -2.143020 -1.803720 -1.567160
+-0.886880 -0.801350 -0.851590 -1.020630 -1.337360
+-1.062570 0.338010 -4.372310 -2.435890 -2.220710
+-1.718060 -0.758950 -0.207560 0.100910 -0.055650
+-0.288370 -0.880610 -1.267450 -1.465530
+
+!-120
+-2.348270 -2.593790 -2.596140 -2.364070 -1.970070
+-1.705860 -1.435540 -1.289220 -1.358170 -0.975570
+-3.514390 -4.283210 -3.975820 -3.215190 -2.394430
+-1.455320 -0.553910 -0.158900 -0.173830 -0.297950
+-0.661220 -1.068330 -1.601800 -1.914850
+
+!-105
+-2.788800 -3.079570 -3.178150 -3.013710 -2.626630
+-2.266680 -1.951490 -1.681850 -1.195390 -2.567680
+-3.632800 -4.748210 -4.662850 -4.255190 -2.776760
+-1.695490 -0.893140 -0.633810 -0.467320 -0.540540
+-0.950190 -1.401500 -1.959970 -2.412680
+
+!-90
+-3.857170 -3.713610 -3.902110 -3.611370 -3.040850
+-2.406460 -1.975250 -1.452040 -0.971860 -2.808170
+-4.181160 -4.981430 -5.446890 -4.359900 -2.864390
+-1.898510 -1.139090 -0.971340 -1.065550 -1.020680
+-1.141350 -1.794480 -2.420970 -2.939990
+
+!-75
+-4.987770 -4.995210 -4.485310 -3.892550 -3.228630
+-2.345360 -1.664160 -1.105500 -1.945510 -3.715530
+-4.492140 -5.536170 -5.708500 -3.675410 -2.986660
+-1.859410 -0.756620 -1.269930 -1.312730 -1.607440
+-1.892510 -2.659400 -3.347950 -3.970600
+
+!-60
+-6.183650 -5.456080 -4.878940 -4.000820 -2.683230
+-2.067520 -1.094850 -1.119790 -2.962910 -3.687830
+-4.993340 -4.666260 -3.796280 -3.374140 -2.495430
+-1.453990 -0.877560 -1.002930 -1.337310 -2.431360
+-2.948140 -4.008100 -4.821040 -5.565810
+
+!-45
+-6.755760 -5.850030 -4.362190 -2.714090 -1.708710
+-0.526660 -0.536700 -2.037170 -3.892650 -4.558570
+-4.237410 -3.735160 -3.688580 -3.009910 -2.112940
+-1.455400 -0.925490 -1.121840 -1.561900 -2.751370
+-4.094860 -5.207530 -6.128530 -6.613030
+
+!-30
+-5.716250 -4.434060 -2.788600 -0.974400 -0.729200
+-0.904940 -1.833540 -3.017700 -3.313450 -3.336010
+-3.181640 -3.594720 -1.231370 -0.603790 0.128810
+-1.222610 -0.909150 -0.837700 -1.346820 -3.040880
+-4.731110 -5.844860 -6.428460 -6.424880
+
+!-15
+-3.991110 -2.046000 0.082550 -2.676110 -2.828500
+-2.596640 -2.843330 -3.011480 -2.312640 -2.405980
+-3.086210 -1.164620 -1.231660 -0.871900 -0.348980
+-1.735900 -0.914150 -0.484520 -1.818040 -3.602550
+-5.330320 -5.992270 -5.588080 -5.408360
+
+!0
+-1.147060 -3.317730 -4.305100 -4.615200 -4.533780
+-3.622950 -2.832800 -1.872810 -1.144300 -1.994070
+-0.741980 -1.115010 -1.229250 -1.103680 -0.742430
+-1.973970 -1.070020 -1.802220 -2.712770 -3.624130
+-4.537100 -4.619970 -4.310890 -3.318290
+
+!15
+-3.997710 -5.408360 -5.588080 -5.992270 -5.330320
+-3.602550 -1.818040 -0.484520 -0.914150 -1.735900
+-0.348980 -0.871900 -1.231660 -1.164620 -3.086210
+-2.405980 -2.312640 -3.011480 -2.843330 -2.596640
+-2.828500 -2.676110 0.082550 -2.046000
+
+!30
+-5.710850 -6.424880 -6.428460 -5.844860 -4.731110
+-3.040880 -1.346820 -0.837700 -0.909150 -1.222610
+0.128810 -0.603790 -1.231370 -3.594720 -3.181640
+-3.336010 -3.313450 -3.017700 -1.833540 -0.904940
+-0.729200 -0.974400 -2.788600 -4.434060
+
+!45
+-6.754940 -6.613030 -6.128530 -5.207530 -4.094860
+-2.751370 -1.561900 -1.121840 -0.925490 -1.455400
+-2.112940 -3.009910 -3.688580 -3.735160 -4.237410
+-4.558570 -3.892650 -2.037170 -0.536700 -0.526660
+-1.708710 -2.714090 -4.362190 -5.850030
+
+!60
+-6.188070 -5.565810 -4.821040 -4.008100 -2.948140
+-2.431360 -1.337310 -1.002930 -0.877560 -1.453990
+-2.495430 -3.374140 -3.796280 -4.666260 -4.993340
+-3.687830 -2.962910 -1.119790 -1.094850 -2.067520
+-2.683230 -4.000820 -4.878940 -5.456080
+
+!75
+-4.986080 -3.970600 -3.347950 -2.659400 -1.892510
+-1.607440 -1.312730 -1.269930 -0.756620 -1.859410
+-2.986660 -3.675410 -5.708500 -5.536170 -4.492140
+-3.715530 -1.945510 -1.105500 -1.664160 -2.345360
+-3.228630 -3.892550 -4.485310 -4.995210
+
+!90
+-3.879190 -2.939990 -2.420970 -1.794480 -1.141350
+-1.020680 -1.065550 -0.971340 -1.139090 -1.898510
+-2.864390 -4.359900 -5.446890 -4.981430 -4.181160
+-2.808170 -0.971860 -1.452040 -1.975250 -2.406460
+-3.040850 -3.611370 -3.902110 -3.713610
+
+!105
+-2.793280 -2.412680 -1.959970 -1.401500 -0.950190
+-0.540540 -0.467320 -0.633810 -0.893140 -1.695490
+-2.776760 -4.255190 -4.662850 -4.448210 -3.332800
+-2.567680 -1.195390 -1.681850 -1.951490 -2.266680
+-2.626630 -3.013710 -3.178150 -3.079570
+
+!120
+-2.330190 -1.914850 -1.601800 -1.068330 -0.661220
+-0.297950 -0.173830 -0.158900 -0.553910 -1.455320
+-2.394430 -3.215190 -3.975820 -3.783210 -3.014390
+-0.975570 -1.358170 -1.289220 -1.435540 -1.705860
+-1.970070 -2.364070 -2.596140 -2.593790
+
+!135
+-1.796120 -1.465530 -1.267450 -0.880610 -0.288370
+-0.055650 0.100910 -0.207560 -0.758950 -1.718060
+-2.220710 -2.435890 -4.372310 0.338010 -1.062570
+-1.337360 -1.020630 -0.851590 -0.801350 -0.886880
+-1.567160 -1.803720 -2.143020 -2.117750
+
+!150
+-1.263610 -0.710760 -0.794980 -0.563330 -0.339050
+-0.092820 0.033160 0.000490 -0.628990 -1.664160
+-2.225630 -2.949180 0.753400 -1.546500 -2.165440
+-1.626260 -0.887080 -0.290670 -0.054220 -1.642540
+-1.119780 -1.656770 -1.665900 -1.482430
+
+!165
+-0.684660 -0.477660 -0.348750 -0.462500 -0.271890
+-0.000430 0.196710 0.180860 -0.410680 -1.810120
+-2.675640 1.822690 -1.636020 -3.153350 -2.780320
+-1.715700 -0.534910 0.258100 0.329180 -0.126160
+-0.940260 -1.319240 -0.990850 -0.896700
+
+NONBONDED nbxmod  5 atom cdiel shift vatom vdistance vswitch -
+cutnb 14.0 ctofnb 12.0 ctonnb 10.0 eps 1.0 e14fac 1.0 wmin 1.5 
+                !adm jr., 5/08/91, suggested cutoff scheme
+!
+!V(Lennard-Jones) = Eps,i,j[(Rmin,i,j/ri,j)**12 - 2(Rmin,i,j/ri,j)**6]
+!
+!epsilon: kcal/mole, Eps,i,j = sqrt(eps,i * eps,j)
+!Rmin/2: A, Rmin,i,j = Rmin/2,i + Rmin/2,j
+!
+!atom  ignored    epsilon      Rmin/2   ignored   eps,1-4       Rmin/2,1-4
+!
+!carbons
+C      0.000000  -0.110000     2.000000 ! ALLOW   PEP POL ARO
+                ! NMA pure solvent, adm jr., 3/3/93
+CA     0.000000  -0.070000     1.992400 ! ALLOW   ARO
+                ! benzene (JES)
+CC     0.000000  -0.070000     2.000000 ! ALLOW   PEP POL ARO
+                ! adm jr. 3/3/92, acetic acid heat of solvation
+CD     0.000000  -0.070000     2.000000 ! ALLOW  POL
+                ! adm jr. 3/19/92, acetate a.i. and dH of solvation
+CE1    0.000000  -0.068000     2.090000 ! 
+		! for propene, yin/adm jr., 12/95
+CE2    0.000000  -0.064000     2.080000 ! 
+		! for ethene, yin/adm jr., 12/95
+CM     0.000000  -0.110000     2.100000 ! ALLOW HEM
+                ! Heme (6-liganded): CO ligand carbon (KK 05/13/91)
+CP1    0.000000  -0.020000     2.275000   0.000000  -0.010000     1.900000 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CP2    0.000000  -0.055000     2.175000   0.000000  -0.010000     1.900000 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CP3    0.000000  -0.055000     2.175000   0.000000  -0.010000     1.900000 ! ALLOW   ALI
+                ! alkane update, adm jr., 3/2/92
+CPA    0.000000  -0.090000     1.800000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPB    0.000000  -0.090000     1.800000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPH1   0.000000  -0.050000     1.800000 ! ALLOW ARO
+                ! adm jr., 10/23/91, imidazole solvation and sublimation
+CPH2   0.000000  -0.050000     1.800000 ! ALLOW ARO
+                ! adm jr., 10/23/91, imidazole solvation and sublimation
+CPM    0.000000  -0.090000     1.800000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+CPT    0.000000  -0.090000     1.800000   0.000000  -0.090000     1.900000 ! ALLOW   ARO
+                ! benzene (JES)
+CS     0.000000  -0.110000     2.200000 ! ALLOW SUL
+                ! methylthiolate to water and F.E. of solvation, adm jr. 6/1/92
+CST    0.000000  -0.058000     1.563000 ! 
+                ! carbon dioxide, JES
+CT1    0.000000  -0.020000     2.275000   0.000000  -0.010000     1.900000 ! ALLOW   ALI
+                ! isobutane pure solvent properties, adm jr, 2/3/92
+CT2    0.000000  -0.055000     2.175000   0.000000  -0.010000     1.900000 ! ALLOW   ALI
+                ! propane pure solvent properties, adm jr, 2/3/92
+CT3    0.000000  -0.080000     2.060000   0.000000  -0.010000     1.900000 ! ALLOW   ALI
+                ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92
+CY     0.000000  -0.070000     1.992400 ! ALLOW   ARO
+                ! TRP, JWK 08/29/89
+!new alkanes atoms types for conversion to new LJ parameters for c27 (see toppar_all22_prot_aliphatic_c27.str)
+CT       0.0       -0.0200    2.275 0.0 -0.01 1.9 ! from CT1x: needs work
+CT1x     0.0       -0.0200    2.275 0.0 -0.01 1.9 ! alkane, 3/92: needs work
+CT2x     0.0       -0.0560    2.010 0.0 -0.01 1.9 ! alkane, 4/98, yin, adm jr.
+CT3x     0.0       -0.0780    2.040 0.0 -0.01 1.9 ! alkane, 4/98, yin, adm jr.
+! hydrogens
+H      0.000000  -0.046000     0.224500 ! ALLOW PEP POL SUL ARO ALC
+                ! same as TIP3P hydrogen, adm jr., 7/20/89
+HA     0.000000  -0.022000     1.320000 ! ALLOW PEP ALI POL SUL ARO PRO ALC
+                ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92
+HE1    0.000000  -0.031000     1.250000 ! 
+		! for propene, yin/adm jr., 12/95
+HE2    0.000000  -0.026000     1.260000 ! 
+		! for ethene, yin/adm jr., 12/95
+HB     0.000000  -0.022000     1.320000 ! ALLOW PEP ALI POL SUL ARO PRO ALC
+                ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92
+HC     0.000000  -0.046000     0.224500 ! ALLOW POL
+                ! new, small polar Hydrogen, see also adm jr. JG 8/27/89
+HP     0.000000  -0.030000     1.358200   0.000000  -0.030000     1.358200 ! ALLOW ARO
+                ! JES 8/25/89 values from Jorgensen fit to hydration energy
+HR1    0.000000  -0.046000     0.900000 ! ALLOW ARO
+                ! adm jr., 6/27/90, his
+HR2    0.000000  -0.046000     0.700000 ! ALLOW ARO
+                ! adm jr., 6/27/90, his
+HR3    0.000000  -0.007800     1.468000 ! ALLOW ARO
+                ! adm jr., 3/24/92, maintain old aliphatic H VDW params
+HS     0.000000  -0.100000     0.450000 ! ALLOW SUL
+                ! methanethiol pure solvent, adm jr., 6/22/92
+HT     0.000000  -0.046000     0.224500 ! ALLOW WAT
+                !TIP3P HYDROGEN PARAMETERS, adm jr., NBFIX obsolete
+!new alkanes atoms types for conversion to new LJ parameters for c27 (see toppar_all22_prot_aliphatic_c27.str)
+HA1     0.0       -0.022     1.3200 ! alkane, 3/92
+HA2     0.0       -0.028     1.3400 ! alkane, yin and mackerell, 4/98
+HA3     0.0       -0.024     1.3400 ! alkane, yin and mackerell, 4/98
+!nitrogens
+N      0.000000  -0.200000     1.850000   0.000000  -0.000100     1.850000 ! ALLOW   PRO
+                ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93
+NC2    0.000000  -0.200000     1.850000 ! ALLOW   POL
+                ! JG 8/27/89; note: NH1 in ARG was changed to NC2.
+NH1    0.000000  -0.200000     1.850000   0.000000  -0.200000     1.550000 ! ALLOW   PEP POL ARO
+                ! This 1,4 vdW allows the C5 dipeptide minimum to exist.(LK)
+NH2    0.000000  -0.200000     1.850000 ! ALLOW   POL
+                ! adm jr.
+NH3    0.000000  -0.200000     1.850000 ! ALLOW   POL
+                ! adm jr.
+NP     0.000000  -0.200000     1.850000 ! ALLOW  PRO
+                ! N-terminal proline; from 6-31g* +ProNH2  RLD 9/28/90
+NPH    0.000000  -0.200000     1.850000 ! ALLOW HEM
+                ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)
+NR1    0.000000  -0.200000     1.850000 ! ALLOW ARO
+                ! His, adm jr., 9/4/89
+NR2    0.000000  -0.200000     1.850000 ! ALLOW ARO
+                ! His, adm jr., 9/4/89
+NR3    0.000000  -0.200000     1.850000 ! ALLOW ARO
+                ! His, adm jr., 9/4/89
+NY     0.000000  -0.200000     1.850000 ! ALLOW   ARO
+                ! trp, JWK
+! oxygens
+O      0.000000  -0.120000     1.700000   0.000000  -0.120000     1.400000 ! ALLOW   PEP POL
+                ! This 1,4 vdW allows the C5 dipeptide minimum to exist.(LK)
+OB     0.000000  -0.120000     1.700000   0.000000  -0.120000     1.400000 ! ALLOW   PEP POL ARO
+                ! adm jr., 10/17/90, acetic acid carbonyl O
+OC     0.000000  -0.120000     1.700000 ! ALLOW   POL ION
+                ! JG 8/27/89
+OH1    0.000000  -0.152100     1.770000 ! ALLOW   ALC ARO
+                ! adm jr. 8/14/90, MeOH nonbond and solvent (same as TIP3P)
+OM     0.000000  -0.120000     1.700000 ! ALLOW HEM
+                ! Heme (6-liganded): CO ligand oxygen (KK 05/13/91)
+OS     0.000000  -0.152100     1.770000 ! ALLOW   ALC ARO
+                ! adm jr. 9/17/90, avoid O* wildcard
+OST    0.000000  -0.165000     1.692000 ! 
+                ! carbon dioxide, JES
+OT     0.000000  -0.152100     1.768200 ! ALLOW   WAT
+                !TIP3P OXYGEN PARAMETERS, adm jr., NBFIX obsolete
+! sulfurs
+S      0.000000  -0.450000     2.000000 ! ALLOW   SUL ION
+                ! adm jr., 3/3/92, methanethiol/ethylmethylsulfide pure solvent
+SM     0.000000  -0.380000     1.975000 ! ALLOW  SUL  ION
+                ! adm jr., 3/3/92, dimethyldisulphide pure solvent
+SS     0.000000  -0.470000     2.200000 ! ALLOW  SUL
+                ! methylthiolate to water and F.E. of solvation, adm jr. 6/1/92
+! ions and miscellaneous types
+SOD      0.0     -0.0469    1.36375   ! sodium
+                   ! D. Beglovd and B. Roux, dA=-100.8 kcal/mol
+POT      0.0     -0.0870    1.76375   ! potassium
+                   ! D. Beglovd and B. Roux, dA=-82.36+2.8 = -79.56 kca/mol
+CLA      0.0     -0.150     2.27      ! chloride
+                   ! D. Beglovd and B. Roux, dA=-83.87+4.46 = -79.40 kcal/mol
+CAL      0.0     -0.120     1.367     ! Calcium
+                   ! S. Marchand and B. Roux, dA = -384.8 kcal/mol
+!CAL      0.000000  -0.120000     1.710000 ! Calcium (BP) in proteins prior
+                   ! to 2003; not recommended due to need for NBFIX terms
+MG       0.0     -0.0150    1.18500   ! Magnesium
+                   ! B. Roux dA = -441.65
+CES      0.0     -0.1900    2.100
+                   ! Cesium, so far untested.
+ZN     0.000000  -0.250000     1.090000 ! ALLOW  ION
+                ! RHS March 18, 1990
+FE     0.010000   0.000000     0.650000 ! ALLOW HEM
+                ! Heme (6-liganded): Iron atom (KK 05/13/91)
+HE     0.000000  -0.021270     1.4800   !
+                ! helium, experimental pot. energy surface, adm jr., 12/95
+NE     0.000000  -0.086000     1.5300
+                ! neon, semiempirical pot. energy surface, adm jr., 12/95
+CLAL   0.000000  -0.030000     1.908200 ! chlorine from Jorgensen/BOSS
+                ! for choroacetaldehyde
+DUM    0.000000  -0.000000     0.000000 !
+                ! dummy atom
+!pyridine series LJ parametes (see toppar_pyridines.str)
+CAP    0.000000  -0.070000     1.992400 !
+FA     0.000000  -0.12000      1.700000
+                ! from 1,3-difluorobenzene pure solvent
+CN     0.000000  -0.200000     1.750000 ! cyanopyridine
+NC     0.000000  -0.600000     1.850000 ! cyanopyridine
+OCA    0.000000  -0.120000     1.700000   0.000000  -0.120000 1.400000 ! 3acp
+COA    0.000000  -0.110000     2.000000 ! 3acp
+!fluorinated alkanes LJ parameters (see toppar_fluoro_alkanes.str)
+CF1    0.000000  -0.060000     1.900000
+CF2    0.000000  -0.042000     2.050000
+CF3    0.000000  -0.020000     2.300000
+HF1    0.000000  -0.028000     1.3200
+HF2    0.000000  -0.030000     1.3000
+F1     0.0       -0.135        1.63
+F2     0.0       -0.105        1.63
+F3     0.0       -0.097        1.60
+!protein model compounds (see toppar_all22_prot_model.str)
+C3     0.000000  -0.020000     2.275000 ! cyclopropane, JMW and CBP 4/04
+!retinol model compounds
+CC1A   0.0   -0.0680     2.0900 !
+CC1B   0.0   -0.0680     2.0900 !
+CC2    0.0   -0.0640     2.0800 !
+NS1    0.000000  -0.200000     1.850000 !N for deprotonated Schiff's base
+NS2    0.000000  -0.200000     1.850000 !N for protonated Schiff's base
+!lipid section
+HOL      0.0       -0.046     0.2245
+HAL1     0.0       -0.022     1.3200 ! alkane, 3/92
+HAL2     0.0       -0.028     1.3400 ! alkane, yin and mackerell, 4/98
+HAL3     0.0       -0.024     1.3400 ! alkane, yin and mackerell, 4/98
+HCL      0.0       -0.046     0.2245 ! ethanolamine
+!HT       0.0       -0.046     0.2245
+HL       0.0       -0.046     0.7    ! polar H on NC4+
+HEL1     0.0       -0.031     1.25   ! alkene, yin,adm jr., 12/95
+HEL2     0.0       -0.026     1.26   ! alkene, yin,adm jr., 12/95
+!
+CL       0.0       -0.070     2.00   ! methyl acetate update
+CTL1     0.0       -0.0200    2.275 0.0 -0.01 1.9 ! alkane, 3/92
+CTL2     0.0       -0.0560    2.010 0.0 -0.01 1.9 ! alkane, 4/98, yin, adm jr.
+CTL3     0.0       -0.0780    2.040 0.0 -0.01 1.9 ! alkane, 4/98, yin, adm jr.
+CTL5     0.0       -0.0800    2.06  0.0 -0.01 1.9 ! old CTL3
+                                                  ! maintained for tetramethylammonium
+CEL1     0.0       -0.068     2.09   ! alkene, yin,adm jr., 12/95
+CEL2     0.0       -0.064     2.08   ! alkene, yin,adm jr., 12/95
+!
+OBL      0.0       -0.12      1.70  0.0 -0.12 1.4
+OCL      0.0       -0.12      1.70
+O2L      0.0       -0.12      1.70
+OHL      0.0       -0.1521    1.77
+OSL      0.0       -0.1521    1.77
+!OT       0.0       -0.1521    1.7682
+!
+NH3L     0.0       -0.20      1.85  ! ethanolamine
+NTL      0.0       -0.20      1.85  ! as all other nitogens
+!
+SL       0.0       -0.47      2.1   ! methylsulfate
+PL       0.0       -0.585     2.15  ! ADM Jr.
+!DUM      0.0       -0.00      0.0   ! dummy atom
+!
+! ions, note lack of NBFIXes
+!
+!SOD    0.0       -0.0469    1.36375   ! sodium
+                   ! D. Beglovd and B. Roux, dA=-100.8 kcal/mol
+!POT    0.0       -0.0870    1.76375   ! potassium
+                   ! D. Beglovd and B. Roux, dA=-82.36+2.8 = -79.56 kca/mol
+!CLA    0.0       -0.150     2.27      ! chloride
+                   ! D. Beglovd and B. Roux, dA=-83.87+4.46 = -79.40 kcal/mol
+!CAL    0.0       -0.120     1.367     ! Calcium
+                   ! S. Marchand and B. Roux, dA = -384.8 kcal/mol
+!MG     0.0       -0.0150    1.18500   ! Magnesium
+                   ! B. Roux dA = -441.65
+!CES    0.0       -0.1900    2.100
+                   ! Cesium, so far untested.
+!ZN     0.0       -0.250000   1.090000  !
+                   ! RHS March 18, 1990
+
+
+HBOND CUTHB 0.5  ! If you want to do hbond analysis (only), then use
+                 ! READ PARAM APPEND CARD
+                 ! to append hbond parameters from the file: par_hbond.inp
+
+END
diff --git a/test/namd/plumed.dat b/test/namd/plumed.dat
new file mode 100644
index 000000000..d21247cc8
--- /dev/null
+++ b/test/namd/plumed.dat
@@ -0,0 +1,31 @@
+DISTANCE ATOMS=0,21 LABEL=C1 COMPONENTS 
+VOLUME   LABEL=vol
+ENERGY   LABEL=ene
+
+COMBINE LABEL=x  ARG=C1.x,C1.y,C1.z POWERS=2,2,2
+COMBINE LABEL=xx ARG=x              POWERS=0.5
+
+#RESTRAINT ARG=C1 AT=1.1 KAPPA=10000.0
+
+#MOVINGRESTRAINT ARG=ene AT0=-8525.08 KAPPA0=0.024  AT1=-8000 STEP0=0 STEP1=10000
+#RESTRAINT ARG=ene AT=-8525.08 KAPPA=-0.0002 STRIDE=2
+
+RESTRAINT ARG=C1 AT=0.4 KAPPA=1000.0
+
+#RESTRAINT ARG=vol AT=6.8 KAPPA=100.0
+
+FLUSH STRIDE=100
+
+PRINT ARG=C1,vol,ene,C1.x,C1.y,C1.z STRIDE=1 FILE=COLVAR
+
+##PRINT ...
+##  ARG=*.*
+##  STRIDE=10
+##  FILE=COLVAR_ALL
+##... PRINT
+
+DEBUG logActivity 
+
+ENDPLUMED
+
+
diff --git a/test/simplemd/.gitignore b/test/simplemd/.gitignore
new file mode 100644
index 000000000..2ae9f99c3
--- /dev/null
+++ b/test/simplemd/.gitignore
@@ -0,0 +1,8 @@
+simplemd
+simplemd-static
+simplemd-dummy
+*.mod
+energies.dat
+output.xyz
+trajectory.xyz
+COLVAR
diff --git a/test/simplemd/Makefile b/test/simplemd/Makefile
new file mode 100644
index 000000000..a6823209c
--- /dev/null
+++ b/test/simplemd/Makefile
@@ -0,0 +1,37 @@
+
+-include ../../Makefile.conf
+-include ../../src/Plumed.inc
+
+SRC=routines.f90 simplemd.f90 ran1.f gasdev.f
+OBJ=routines.o simplemd.o ran1.o gasdev.o
+
+EXE=simplemd-dummy simplemd-static simplemd
+
+all: $(EXE)
+
+simplemd-dummy: $(OBJ) $(PLUMED_WRAPPER)
+	$(LDF90) $(PLUMED_LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+simplemd-static: $(OBJ) $(PLUMED_OBJ)
+	$(LDF90) $(PLUMED_LDFLAGS) $^ -o $@ $(PLUMED_LIBS) $(PLUMED_DYNAMIC_LIBS)
+
+simplemd: $(OBJ) $(PLUMED_SHARED_OBJ)
+	$(LDF90) $(PLUMED_LDFLAGS) $^ -o $@ $(PLUMED_LIBS)
+
+clean:
+	rm -f *.o
+	rm -f $(EXE)
+	rm -f *.mod
+	rm -f energies.dat output.xyz trajectory.xyz
+
+# this is due to module inclusion:
+simplemd.o: routines.o
+
+%.o : %.f90
+	$(FC) -c $(FFLAGS) $(DOUBLEPRECISION) $< -o $@
+
+%.o : %.f
+	$(FC) -c $(FFLAGS) $(DOUBLEPRECISION) $< -o $@
+
+
+
diff --git a/test/simplemd/gasdev.f b/test/simplemd/gasdev.f
new file mode 100644
index 000000000..6e9533f9a
--- /dev/null
+++ b/test/simplemd/gasdev.f
@@ -0,0 +1,23 @@
+      FUNCTION gasdev(idum)
+      INTEGER idum
+      REAL gasdev
+CU    USES ran1
+      INTEGER iset
+      REAL fac,gset,rsq,v1,v2,ran1
+      SAVE iset,gset
+      DATA iset/0/
+      if (iset.eq.0) then
+1       v1=2.*ran1(idum)-1.
+        v2=2.*ran1(idum)-1.
+        rsq=v1**2+v2**2
+        if(rsq.ge.1..or.rsq.eq.0.)goto 1
+        fac=sqrt(-2.*log(rsq)/rsq)
+        gset=v1*fac
+        gasdev=v2*fac
+        iset=1
+      else
+        gasdev=gset
+        iset=0
+      endif
+      return
+      END
diff --git a/test/simplemd/in b/test/simplemd/in
new file mode 100644
index 000000000..75eb5f934
--- /dev/null
+++ b/test/simplemd/in
@@ -0,0 +1,10 @@
+inputfile input.xyz
+outputfile output.xyz
+temperature 0.722
+tstep 0.005
+friction 1
+forcecutoff 2.5
+listcutoff  3.0
+nstep 2000
+nconfig 10 trajectory.xyz
+nstat   10 energies.dat
diff --git a/test/simplemd/input.xyz b/test/simplemd/input.xyz
new file mode 100644
index 000000000..bd0d514ea
--- /dev/null
+++ b/test/simplemd/input.xyz
@@ -0,0 +1,110 @@
+108
+5.0388 5.0388 5.0388
+Ar 0 0 0
+Ar 0.8398 0 0.8398
+Ar 0.8398 0.8398 0
+Ar 0 0.8398 0.8398
+Ar 0 0 1.6796
+Ar 0.8398 0 2.5194
+Ar 0.8398 0.8398 1.6796
+Ar 0 0.8398 2.5194
+Ar 0 0 3.3592
+Ar 0.8398 0 4.199
+Ar 0.8398 0.8398 3.3592
+Ar 0 0.8398 4.199
+Ar 0 1.6796 0
+Ar 0.8398 1.6796 0.8398
+Ar 0.8398 2.5194 0
+Ar 0 2.5194 0.8398
+Ar 0 1.6796 1.6796
+Ar 0.8398 1.6796 2.5194
+Ar 0.8398 2.5194 1.6796
+Ar 0 2.5194 2.5194
+Ar 0 1.6796 3.3592
+Ar 0.8398 1.6796 4.199
+Ar 0.8398 2.5194 3.3592
+Ar 0 2.5194 4.199
+Ar 0 3.3592 0
+Ar 0.8398 3.3592 0.8398
+Ar 0.8398 4.199 0
+Ar 0 4.199 0.8398
+Ar 0 3.3592 1.6796
+Ar 0.8398 3.3592 2.5194
+Ar 0.8398 4.199 1.6796
+Ar 0 4.199 2.5194
+Ar 0 3.3592 3.3592
+Ar 0.8398 3.3592 4.199
+Ar 0.8398 4.199 3.3592
+Ar 0 4.199 4.199
+Ar 1.6796 0 0
+Ar 2.5194 0 0.8398
+Ar 2.5194 0.8398 0
+Ar 1.6796 0.8398 0.8398
+Ar 1.6796 0 1.6796
+Ar 2.5194 0 2.5194
+Ar 2.5194 0.8398 1.6796
+Ar 1.6796 0.8398 2.5194
+Ar 1.6796 0 3.3592
+Ar 2.5194 0 4.199
+Ar 2.5194 0.8398 3.3592
+Ar 1.6796 0.8398 4.199
+Ar 1.6796 1.6796 0
+Ar 2.5194 1.6796 0.8398
+Ar 2.5194 2.5194 0
+Ar 1.6796 2.5194 0.8398
+Ar 1.6796 1.6796 1.6796
+Ar 2.5194 1.6796 2.5194
+Ar 2.5194 2.5194 1.6796
+Ar 1.6796 2.5194 2.5194
+Ar 1.6796 1.6796 3.3592
+Ar 2.5194 1.6796 4.199
+Ar 2.5194 2.5194 3.3592
+Ar 1.6796 2.5194 4.199
+Ar 1.6796 3.3592 0
+Ar 2.5194 3.3592 0.8398
+Ar 2.5194 4.199 0
+Ar 1.6796 4.199 0.8398
+Ar 1.6796 3.3592 1.6796
+Ar 2.5194 3.3592 2.5194
+Ar 2.5194 4.199 1.6796
+Ar 1.6796 4.199 2.5194
+Ar 1.6796 3.3592 3.3592
+Ar 2.5194 3.3592 4.199
+Ar 2.5194 4.199 3.3592
+Ar 1.6796 4.199 4.199
+Ar 3.3592 0 0
+Ar 4.199 0 0.8398
+Ar 4.199 0.8398 0
+Ar 3.3592 0.8398 0.8398
+Ar 3.3592 0 1.6796
+Ar 4.199 0 2.5194
+Ar 4.199 0.8398 1.6796
+Ar 3.3592 0.8398 2.5194
+Ar 3.3592 0 3.3592
+Ar 4.199 0 4.199
+Ar 4.199 0.8398 3.3592
+Ar 3.3592 0.8398 4.199
+Ar 3.3592 1.6796 0
+Ar 4.199 1.6796 0.8398
+Ar 4.199 2.5194 0
+Ar 3.3592 2.5194 0.8398
+Ar 3.3592 1.6796 1.6796
+Ar 4.199 1.6796 2.5194
+Ar 4.199 2.5194 1.6796
+Ar 3.3592 2.5194 2.5194
+Ar 3.3592 1.6796 3.3592
+Ar 4.199 1.6796 4.199
+Ar 4.199 2.5194 3.3592
+Ar 3.3592 2.5194 4.199
+Ar 3.3592 3.3592 0
+Ar 4.199 3.3592 0.8398
+Ar 4.199 4.199 0
+Ar 3.3592 4.199 0.8398
+Ar 3.3592 3.3592 1.6796
+Ar 4.199 3.3592 2.5194
+Ar 4.199 4.199 1.6796
+Ar 3.3592 4.199 2.5194
+Ar 3.3592 3.3592 3.3592
+Ar 4.199 3.3592 4.199
+Ar 4.199 4.199 3.3592
+Ar 3.3592 4.199 4.199
diff --git a/test/simplemd/plumed.dat b/test/simplemd/plumed.dat
new file mode 100644
index 000000000..59fe653f3
--- /dev/null
+++ b/test/simplemd/plumed.dat
@@ -0,0 +1,27 @@
+DISTANCE LABEL=C1 ATOMS=0,1 COMPONENTS
+
+RESTRAINT ...
+  KAPPA=10.0 
+  ARG=C1
+  STRIDE=5
+  AT=10.0 
+  LABEL=rest
+... RESTRAINT
+
+PRINT ...
+  STRIDE=25
+  ARG=C1,C1.x,C1.y,C1.z,rest.*
+  FILE=COLVAR
+... PRINT
+
+# DEBUG logActivity
+
+FLUSH STRIDE=100
+
+ENDPLUMED
+
+commenti
+
+F::COMBINE LABEL=X ARG=C1.x,C1.y,C1.z COEFFICIENTS=1.0,1.0,1.0 POWERS=2.0,2.0,2.0
+F::COMBINE LABEL=Y ARG=X COEFFICIENTS=1.0 POWERS=0.5
+#RESTRAINT  KAPPA=10.0 ARG=Y STRIDE=5 AT=1.0
diff --git a/test/simplemd/ran1.f b/test/simplemd/ran1.f
new file mode 100644
index 000000000..7d9fca515
--- /dev/null
+++ b/test/simplemd/ran1.f
@@ -0,0 +1,27 @@
+      FUNCTION ran1(idum)
+      INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV
+      REAL ran1,AM,EPS,RNMX
+      PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
+     *NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
+      INTEGER j,k,iv(NTAB),iy
+      SAVE iv,iy
+      DATA iv /NTAB*0/, iy /0/
+      if (idum.le.0.or.iy.eq.0) then
+        idum=max(-idum,1)
+        do 11 j=NTAB+8,1,-1
+          k=idum/IQ
+          idum=IA*(idum-k*IQ)-IR*k
+          if (idum.lt.0) idum=idum+IM
+          if (j.le.NTAB) iv(j)=idum
+11      continue
+        iy=iv(1)
+      endif
+      k=idum/IQ
+      idum=IA*(idum-k*IQ)-IR*k
+      if (idum.lt.0) idum=idum+IM
+      j=1+iy/NDIV
+      iy=iv(j)
+      iv(j)=idum
+      ran1=min(AM*iy,RNMX)
+      return
+      END
diff --git a/test/simplemd/routines.f90 b/test/simplemd/routines.f90
new file mode 100644
index 000000000..c132a8aa9
--- /dev/null
+++ b/test/simplemd/routines.f90
@@ -0,0 +1,396 @@
+module routines
+implicit none
+contains
+subroutine read_input(temperature,tstep,friction, &
+                      forcecutoff,listcutoff,nstep,&
+                      nconfig,nstat, &
+                      wrapatoms, &
+                      inputfile,outputfile,trajfile,statfile, &
+                      maxneighbours,idum)
+  implicit none
+  real,           intent(out) :: temperature
+  real,           intent(out) :: tstep
+  real,           intent(out) :: friction
+  real,           intent(out) :: forcecutoff
+  real,           intent(out) :: listcutoff
+  integer,        intent(out) :: nstep
+  integer,        intent(out) :: nconfig
+  integer,        intent(out) :: nstat
+  logical,        intent(out) :: wrapatoms
+  integer,        intent(out) :: maxneighbours
+  character(256), intent(out) :: inputfile
+  character(256), intent(out) :: outputfile
+  character(256), intent(out) :: trajfile
+  character(256), intent(out) :: statfile
+  integer, intent(out) :: idum
+  integer :: iostat
+  character(256) :: line,keyword,keyword1
+  integer :: i
+  logical :: foundsharp
+! default values
+  temperature=1.0
+  tstep=0.005
+  friction=0.0
+  forcecutoff=2.5
+  listcutoff=3.0
+  nstep=1
+  nconfig=10
+  nstat=1
+  maxneighbours=1000
+  idum=0
+  wrapatoms=.false.
+  statfile=""
+  trajfile=""
+  outputfile=""
+  inputfile=""
+  
+  do
+    read(*,"(a)",iostat=iostat) line
+! when the file finishes, exit the loop
+    if(iostat/=0) exit
+! delete everything past an eventual "#" comment
+    foundsharp=.false.
+    do i=1,len(line)
+      if(line(i:i)=="#") foundsharp=.true.
+      if(foundsharp) line(i:i)=" "
+    end do
+! if the remaining line is empty, skip it
+    if(len_trim(line)==0) cycle
+! read the first word from line
+    read(line,*) keyword
+! the second word is then read to the proper variable
+    select case(keyword)
+    case("temperature")
+      read(line,*) keyword1,temperature
+    case("tstep")
+      read(line,*) keyword1,tstep
+    case("friction")
+      read(line,*) keyword1,friction
+    case("forcecutoff")
+      read(line,*) keyword1,forcecutoff
+    case("listcutoff")
+      read(line,*) keyword1,listcutoff
+    case("nstep")
+      read(line,*) keyword1,nstep
+    case("nconfig")
+      read(line,*) keyword1,nconfig,trajfile
+    case("nstat")
+      read(line,*) keyword1,nstat,statfile
+    case("maxneighbours")
+      read(line,*) keyword1,maxneighbours
+    case("wrapatoms")
+      read(line,*) keyword1,wrapatoms
+    case("inputfile")
+      read(line,*) keyword1,inputfile
+    case("outputfile")
+      read(line,*) keyword1,outputfile
+    case("seed")
+      read(line,*) keyword1,idum
+      idum=-idum ! idum for ran1() needs to be negative
+    case default
+! an unknown word will stop the execution
+      write(0,*) "Unknown keyword :",trim(keyword)
+      stop
+    end select
+  end do
+  if(inputfile=="") then
+    write(0,*) "Specify input file"
+    stop
+  end if
+  if(outputfile=="") then
+    write(0,*) "Specify output file"
+    stop
+  end if
+  if(trajfile=="") then
+    write(0,*) "Specify traj file"
+    stop
+  end if
+  if(statfile=="") then
+    write(0,*) "Specify stat file"
+    stop
+  end if
+end subroutine read_input
+
+subroutine read_positions(inputfile,natoms,positions,cell)
+! read positions and cell from a file called inputfile
+! natoms (input variable) and number of atoms in the file should be consistent
+  implicit none
+  character(*), intent(in)  :: inputfile
+  integer,      intent(in)  :: natoms
+  real,         intent(out) :: positions(3,natoms)
+  real,         intent(out) :: cell(3)
+  integer :: iatom
+  character(100) :: atomname
+  open(10,file=inputfile)
+  read(10,*)
+  read(10,*) cell
+  do iatom=1,natoms
+    read(10,*) atomname,positions(:,iatom)
+  end do
+! note: atomname is read but not used
+  close(10)
+end subroutine read_positions
+
+subroutine read_natoms(inputfile,natoms)
+! read the number of atoms in file "input.xyz"
+  implicit none
+  character(*),     intent(in) :: inputfile
+  integer,          intent(out):: natoms
+  open(10,file=inputfile)
+  read(10,*) natoms
+  close(10)
+end subroutine read_natoms
+
+subroutine write_positions(trajfile,natoms,positions,cell,wrapatoms)
+! write positions on file trajfile
+! positions are appended at the end of the file
+  implicit none
+  character(*), intent(in) :: trajfile
+  integer,      intent(in) :: natoms
+  real,         intent(in) :: positions(3,natoms)
+  real,         intent(in) :: cell(3)
+  logical,      intent(in) :: wrapatoms
+  integer :: iatom
+  real :: pos(3)
+  logical, save :: first=.true.
+  if(first) then
+    open(10,file=trajfile)
+    first=.false.
+  else
+    open(10,file=trajfile,position="append")
+  end if
+  write(10,*) natoms
+  write(10,*) cell
+  do iatom=1,natoms
+! usually, it is better not to apply pbc here, so that diffusion
+! is more easily calculated from a trajectory file:
+    if(wrapatoms) then
+      call pbc(cell,positions(:,iatom),pos)
+    else
+      pos=positions(:,iatom)
+    end if
+    write(10,*) "Ar",pos
+  end do
+  close(10)
+end subroutine write_positions
+
+subroutine write_final_positions(outputfile,natoms,positions,cell,wrapatoms)
+! write positions on file outputfile
+  character(*), intent(in) :: outputfile
+  integer,      intent(in) :: natoms
+  real,         intent(in) :: positions(3,natoms)
+  real,         intent(in) :: cell(3)
+  logical,      intent(in) :: wrapatoms
+  integer :: iatom
+  real :: pos(3)
+  open(10,file=outputfile)
+  write(10,*) natoms
+  write(10,*) cell
+  do iatom=1,natoms
+! usually, it is better not to apply pbc here, so that diffusion
+! is more easily calculated from a trajectory file:
+    if(wrapatoms) then
+      call pbc(cell,positions(:,iatom),pos)
+    else
+      pos=positions(:,iatom)
+    end if
+    write(10,*) "Ar",pos
+  end do
+  close(10)
+end subroutine write_final_positions
+
+subroutine write_statistics(statfile,istep,tstep,natoms,engkin,engconf,engint)
+! write statistics on file statfile
+  character(*), intent(in) :: statfile
+  integer,      intent(in) :: istep
+  real,         intent(in) :: tstep
+  integer,      intent(in) :: natoms
+  real,         intent(in) :: engkin
+  real,         intent(in) :: engconf
+  real,         intent(in) :: engint
+  logical, save :: first=.true.
+  integer, save :: last_time_reopened=0
+  if(first) then
+! first time this routine is called, open the file
+    open(666,file=statfile)
+    first=.false.
+  end if
+  if(istep-last_time_reopened>100) then
+! every 100 steps, reopen the file to flush the buffer
+    close(666)
+    open(666,file=statfile,position="append")
+    last_time_reopened=istep
+  end if
+  write(666,"(i10,99g13.6)") istep,istep*tstep,2.0*engkin/(3.0*natoms),engconf,engkin+engconf,engkin+engconf+engint
+end subroutine write_statistics
+
+subroutine randomize_velocities(natoms,temperature,masses,velocities,idum)
+! randomize the velocities according to the temperature
+  implicit none
+  integer, intent(in)    :: natoms
+  real,    intent(in)    :: temperature
+  real,    intent(in)    :: masses(natoms)
+  real,    intent(out)   :: velocities(3,natoms)
+  integer, intent(inout) :: idum
+  real, external :: gasdev
+  integer :: iatom,i
+  do iatom=1,natoms
+    do i=1,3
+      velocities(i,iatom)=sqrt(temperature/masses(iatom))*gasdev(idum)
+    end do
+  end do
+end subroutine randomize_velocities
+
+subroutine compute_engkin(natoms,masses,velocities,engkin)
+! calculate the kinetic energy from the velocities
+  implicit none
+  integer, intent(in) :: natoms
+  real,    intent(in) :: masses(natoms)
+  real,    intent(in) :: velocities(3,natoms)
+  real,    intent(out):: engkin
+  integer :: iatom
+  engkin=0.0
+  do iatom=1,natoms
+    engkin=engkin+0.5*masses(iatom)*sum(velocities(:,iatom)**2)
+  end do
+end subroutine compute_engkin
+
+subroutine pbc(cell,vin,vout)
+! apply periodic boundary condition to a vector
+  implicit none
+  real, intent(in) :: cell(3)
+  real, intent(in) :: vin(3)
+  real, intent(out) :: vout(3)
+  integer :: i
+  do i=1,3
+    vout(i)=vin(i)-nint(vin(i)/cell(i))*cell(i)
+  end do
+end subroutine pbc
+
+subroutine check_list(natoms,positions,positions0,listcutoff,forcecutoff,recompute)
+! check if the neighbour list have to be recomputed
+  implicit none
+  integer, intent(in)    :: natoms
+  real,    intent(in)    :: positions(3,natoms)
+  real,    intent(in)    :: positions0(3,natoms)
+  real,    intent(in)    :: listcutoff
+  real,    intent(in)    :: forcecutoff
+  logical, intent(out)   :: recompute
+  real :: displacement(3) ! displacement from positions0 to positions
+  real :: delta2          ! square of the 'skin' thickness
+  integer :: iatom
+  recompute=.false.
+  delta2=(0.5*(listcutoff-forcecutoff))**2
+! if ANY atom moved more than half of the skin thickness, recompute is set to .true.
+  do iatom=1,natoms
+    displacement=positions(:,iatom)-positions0(:,iatom)
+    if(sum(displacement**2)>delta2) recompute=.true.
+  end do
+end subroutine check_list
+
+subroutine compute_list(natoms,listsize,positions,cell,listcutoff,point,list)
+  implicit none
+  integer, intent(in)  :: natoms
+  integer, intent(in)  :: listsize
+  real,    intent(in)  :: positions(3,natoms)
+  real,    intent(in)  :: cell(3)
+  real,    intent(in)  :: listcutoff
+! see Allen-Tildesey for a definition of point and list
+  integer, intent(out) :: point(natoms)
+  integer, intent(out) :: list(listsize)
+  integer :: iatom,jatom  ! indexes of the two involved atoms
+  real :: distance(3)     ! distance of the two atoms
+  real :: distance_pbc(3) ! minimum-image distance of the two atoms
+  real    :: listcutoff2  ! squared list cutoff
+  listcutoff2=listcutoff**2
+  point(1)=1
+  do iatom=1,natoms-1
+    point(iatom+1)=point(iatom)
+    do jatom=iatom+1,natoms
+      distance=positions(:,iatom)-positions(:,jatom)
+      call pbc(cell,distance,distance_pbc)
+! if the interparticle distance is larger than the cutoff, skip
+      if(sum(distance_pbc**2)>listcutoff2) cycle
+      if(point(iatom+1)>listsize) then
+! too many neighbours
+        write(0,*) "Verlet list size exceeded"
+        write(0,*) "Increase maxneighbours"
+        stop
+      end if
+      list(point(iatom+1))=jatom
+      point(iatom+1)=point(iatom+1)+1
+    end do
+  end do
+end subroutine compute_list
+
+subroutine compute_forces(natoms,listsize,positions,cell,forcecutoff,point,list,forces,engconf)
+  implicit none
+  integer, intent(in)  :: natoms
+  integer, intent(in)  :: listsize
+  real,    intent(in)  :: positions(3,natoms)
+  real,    intent(in)  :: cell(3)
+  real,    intent(in)  :: forcecutoff
+  integer, intent(in)  :: point(natoms)
+  integer, intent(in)  :: list(listsize)
+  real,    intent(out) :: forces(3,natoms)
+  real,    intent(out) :: engconf
+  integer :: iatom,jatom  ! indexes of the two involved atoms
+  integer :: jlist        ! counter for the neighbours of iatom
+  real :: distance(3)     ! distance of the two atoms
+  real :: distance_pbc(3) ! minimum-image distance of the two atoms
+  real :: distance_pbc2   ! squared minimum-image distance
+  real :: forcecutoff2    ! squared force cutoff
+  real :: f(3)            ! force
+  real :: engcorrection   ! energy necessary shift the potential avoiding discontinuities
+  forcecutoff2=forcecutoff**2
+  engconf=0.0
+  forces=0.0
+  engcorrection=4.0*(1.0/forcecutoff2**6-1.0/forcecutoff2**3)
+  do iatom=1,natoms-1
+    do jlist=point(iatom),point(iatom+1)-1
+      jatom=list(jlist)
+      distance=positions(:,iatom)-positions(:,jatom)
+      call pbc(cell,distance,distance_pbc)
+      distance_pbc2=sum(distance_pbc**2)
+! if the interparticle distance is larger than the cutoff, skip
+      if(distance_pbc2>forcecutoff2) cycle
+      engconf=engconf+4.0*(1.0/distance_pbc2**6-1.0/distance_pbc2**3)-engcorrection
+      f=2.0*distance_pbc*4.0*(6.0/distance_pbc2**7-3.0/distance_pbc2**4)
+! same force on the two atoms, with opposite sign:
+      forces(:,iatom)=forces(:,iatom)+f
+      forces(:,jatom)=forces(:,jatom)-f
+    end do
+  end do
+end subroutine compute_forces
+
+subroutine thermostat(natoms,masses,dt,friction,temperature,velocities,engint,idum)
+! Langevin thermostat, implemented as decribed in Bussi and Parrinello, Phys. Rev. E (2007)
+! it is a linear combination of old velocities and new, randomly chosen, velocity,
+! with proper coefficients
+  implicit none
+  integer, intent(in)    :: natoms
+  real,    intent(in)    :: masses(natoms)
+  real,    intent(in)    :: dt
+  real,    intent(in)    :: friction
+  real,    intent(in)    :: temperature
+  real,    intent(inout) :: velocities(3,natoms)
+  real,    intent(inout) :: engint ! contribution of phase-space compression
+                                   ! its increment is equal to minus the kinetic-energy increment due to the
+                                   ! thermostat
+  integer, intent(inout) :: idum
+  real :: c1 ! coefficient for the old velocity
+  real :: c2 ! coefficient for the new velocity
+  real, external :: gasdev
+  integer :: i,iatom
+  c1=exp(-friction*dt)
+  do iatom=1,natoms
+    c2=sqrt((1.0-c1**2)*temperature/masses(iatom))
+    do i=1,3
+      engint=engint+0.5*masses(iatom)*velocities(i,iatom)**2
+      velocities(i,iatom)=c1*velocities(i,iatom)+c2*gasdev(idum)
+      engint=engint-0.5*masses(iatom)*velocities(i,iatom)**2
+    end do
+  end do
+end subroutine thermostat
+end module routines
+
diff --git a/test/simplemd/simplemd.f90 b/test/simplemd/simplemd.f90
new file mode 100644
index 000000000..a7beba17d
--- /dev/null
+++ b/test/simplemd/simplemd.f90
@@ -0,0 +1,204 @@
+
+program simplemd
+use routines
+implicit none
+
+integer              :: natoms          ! number of atoms
+real,    allocatable :: positions(:,:)  ! atomic positions
+real,    allocatable :: velocities(:,:) ! velocities
+                                        ! was calculated last time
+real,    allocatable :: masses(:)       ! masses
+real,    allocatable :: forces(:,:)     ! forces   
+real                 :: cell(3)         ! cell size
+real                 :: cell9(9)         ! cell size
+
+! neighbour list variables
+! see Allen and Tildesey book for details
+integer              :: listsize        ! size of the list array
+integer, allocatable :: list(:)         ! neighbour list
+integer, allocatable :: point(:)        ! pointer to neighbour list
+real,    allocatable :: positions0(:,:) ! reference atomic positions, i.e. positions when the neighbour list
+
+! input parameters
+! all of them have a reasonable default value, set in read_input()
+real           :: tstep          ! simulation timestep
+real           :: temperature    ! temperature
+real           :: friction       ! friction for Langevin dynamics (for NVE, use 0)
+real           :: listcutoff     ! cutoff for neighbour list
+real           :: forcecutoff    ! cutoff for forces
+integer        :: nstep          ! number of steps
+integer        :: nconfig        ! stride for output of configurations
+integer        :: nstat          ! stride for output of statistics
+integer        :: maxneighbour   ! maximum average number of neighbours per atom
+integer        :: idum           ! seed
+logical        :: wrapatoms      ! if true, atomic coordinates are written wrapped in minimal cell
+character(256) :: inputfile      ! name of file with starting configuration (xyz)
+character(256) :: outputfile     ! name of file with final configuration (xyz)
+character(256) :: trajfile       ! name of the trajectory file (xyz)
+character(256) :: statfile       ! name of the file with statistics
+
+
+real    :: engkin         ! kinetic energy
+real    :: engconf        ! configurational energy
+real    :: engint         ! integral for conserved energy in Langevin dynamics
+
+logical :: recompute_list ! control if the neighbour list have to be recomputed
+integer :: istep          ! step counter
+integer :: iatom
+
+logical :: plumed
+integer :: plumedavailable
+
+CALL plumed_installed(plumedavailable)
+
+plumed=.false.
+if(plumedavailable>0)plumed=.true.
+
+IF(plumed) THEN
+  CALL plumed_g_create()
+END IF
+
+call read_input(temperature,tstep,friction,forcecutoff, &
+                listcutoff,nstep,nconfig,nstat, &
+                wrapatoms, &
+                inputfile,outputfile,trajfile,statfile, &
+                maxneighbour,idum)
+
+! number of atoms is read from file inputfile
+call read_natoms(inputfile,natoms)
+
+! write the parameters in output so they can be checked
+write(*,*) "Starting configuration           : ",trim(inputfile)
+write(*,*) "Final configuration              : ",trim(outputfile)
+write(*,*) "Number of atoms                  : ",natoms
+write(*,*) "Temperature                      : ",temperature
+write(*,*) "Time step                        : ",tstep
+write(*,*) "Friction                         : ",friction
+write(*,*) "Cutoff for forces                : ",forcecutoff
+write(*,*) "Cutoff for neighbour list        : ",listcutoff
+write(*,*) "Number of steps                  : ",nstep
+write(*,*) "Stride for trajectory            : ",nconfig
+write(*,*) "Trajectory file                  : ",trim(trajfile)
+write(*,*) "Stride for statistics            : ",nstat
+write(*,*) "Statistics file                  : ",trim(statfile)
+write(*,*) "Max average number of neighbours : ",maxneighbour
+write(*,*) "Seed                             : ",idum
+write(*,*) "Are atoms wrapped on output?     : ",wrapatoms
+
+! Since each atom pair is counted once, the total number of pairs
+! will be half of the number of neighbours times the number of atoms
+listsize=maxneighbour*natoms/2
+
+! allocation of dynamical arrays
+allocate(positions(3,natoms))
+allocate(positions0(3,natoms))
+allocate(velocities(3,natoms))
+allocate(forces(3,natoms))
+allocate(masses(natoms))
+allocate(point(natoms))
+allocate(list(listsize))
+
+
+! masses are hard-coded to 1
+masses=1.0
+
+! energy integral initialized to 0
+engint=0.0
+
+! positions are read from file inputfile
+call read_positions(inputfile,natoms,positions,cell)
+
+! velocities are randomized according to temperature
+call randomize_velocities(natoms,temperature,masses,velocities,idum)
+
+!CALL init_metadyn(natoms,tstep,masses,masses,1,1.0D0,"plumed.dat"//char(0));
+IF(plumed) THEN
+  CALL plumed_g_cmd("setNatoms"//char(0),natoms)
+  CALL plumed_g_cmd("setMDEngine"//char(0),"simplemd"//char(0))
+  CALL plumed_g_cmd("setTimestep"//char(0),tstep)
+  CALL plumed_g_cmd("setPlumedDat"//char(0),"plumed.dat"//char(0))
+  CALL plumed_g_cmd("init"//char(0))
+ENDIF
+
+
+! neighbour list are computed, and reference positions are saved
+call compute_list(natoms,listsize,positions,cell,listcutoff,point,list)
+write(*,*) "List size: ",point(natoms)-1
+positions0=positions
+
+! forces are computed before starting md
+call compute_forces(natoms,listsize,positions,cell,forcecutoff,point,list,forces,engconf)
+
+! here is the main md loop
+! Langevin thermostat is applied before and after a velocity-Verlet integrator
+! the overall structure is:
+!   thermostat
+!   update velocities
+!   update positions
+!   (eventually recompute neighbour list)
+!   compute forces
+!   update velocities
+!   thermostat
+!   (eventually dump output informations)
+do istep=1,nstep
+  call thermostat(natoms,masses,0.5*tstep,friction,temperature,velocities,engint,idum)
+
+  do iatom=1,natoms
+    velocities(:,iatom)=velocities(:,iatom)+forces(:,iatom)*0.5*tstep/masses(iatom)
+  end do
+
+  do iatom=1,natoms
+    positions(:,iatom)=positions(:,iatom)+velocities(:,iatom)*tstep
+  end do
+
+! a check is performed to decide whether to recalculate the neighbour list
+  call check_list(natoms,positions,positions0,listcutoff,forcecutoff,recompute_list)
+  if(recompute_list) then
+    call compute_list(natoms,listsize,positions,cell,listcutoff,point,list)
+    positions0=positions
+    write(*,*) "Neighbour list recomputed at step ",istep
+    write(*,*) "List size: ",point(natoms)-1
+  end if
+
+  call compute_forces(natoms,listsize,positions,cell,forcecutoff,point,list,forces,engconf)
+!  forces=0.0
+IF(plumed) THEN
+  CALL plumed_g_cmd("setMasses"//char(0),masses)
+  CALL plumed_g_cmd("setForces"//char(0),forces)
+  CALL plumed_g_cmd("setStep"//char(0),istep)
+  CALL plumed_g_cmd("setPositions"//char(0),positions)
+  CALL plumed_g_cmd("calc"//char(0),0)
+ENDIF
+
+  do iatom=1,natoms
+    velocities(:,iatom)=velocities(:,iatom)+forces(:,iatom)*0.5*tstep/masses(iatom)
+  end do
+
+  call thermostat(natoms,masses,0.5*tstep,friction,temperature,velocities,engint,idum)
+
+! kinetic energy is calculated
+  call compute_engkin(natoms,masses,velocities,engkin)
+
+! eventually, write positions and statistics
+  if(modulo(istep,nconfig)==0) call write_positions(trajfile,natoms,positions,cell,wrapatoms)
+  if(modulo(istep,nstat)==0)   call write_statistics(statfile,istep,tstep,natoms,engkin,engconf,engint)
+
+end do
+
+call write_final_positions(outputfile,natoms,positions,cell,wrapatoms)
+write(*,*) "Execution completed"
+
+! deallocation of all allocatable array
+deallocate(positions)
+deallocate(velocities)
+deallocate(forces)
+deallocate(masses)
+deallocate(positions0)
+deallocate(point)
+deallocate(list)
+
+IF(plumed) THEN
+  CALL plumed_g_finalize()
+END IF
+
+end program simplemd
diff --git a/tools/plumed b/tools/plumed
new file mode 100755
index 000000000..2729175a5
--- /dev/null
+++ b/tools/plumed
@@ -0,0 +1,71 @@
+#! /bin/bash
+
+MANUAL="\
++++ PLUMED tool +++
+
+Actions (choose only one):
+  help
+                    print this help and exit
+  patch
+                    patch an MD code (patch -h for help)
+  newcv
+                    create a new collective variable from a template  (newcv -h for help)
+Options:
+  --root ROOT
+                    set path to plumed directory (default: PLUMED_ROOT environment variable)
+"
+
+prefix=""
+action=""
+
+exitloop=""
+
+while [ -n "$*" ]
+do
+
+  prefix_option="$prefix$1"
+  prefix=""
+
+  case "$prefix_option" in
+    (help|--help|-h)    echo "$MANUAL" ; exit ;;
+    (patch)             action=patch; exitloop=yes ;;
+    (newcv)             action=newcv; exitloop=yes ;;
+    (--root=*)          PLUMED_ROOT="${prefix_option#--root=}" ;;
+    (*)
+      echo "ERROR: Unknown option $prefix_option. Use 'plumed help' for help"
+      exit
+  esac
+  shift
+
+  test -n "$exitloop" && break
+done
+
+if [ -z "$action" ] ; then
+  echo "Nothing to do. Use 'plumed help' for help"
+  exit
+fi
+
+echo "PLUMED tool"
+echo
+if [ -z "$PLUMED_ROOT" ]
+then
+  echo "ERROR: I cannot find PLUMED"
+  echo "Please set PLUMED_ROOT environment variable or use --root"
+  exit
+fi
+if [ ! -d "$PLUMED_ROOT/patches/" ]
+then
+  echo "ERROR: cannot find $PLUMED_ROOT/patches/ directory"
+  echo "Check your PLUMED_ROOT variable or --root option"
+  exit
+fi
+
+export PLUMED_ROOT
+
+case "$action" in
+  (patch) ${PLUMED_ROOT}/patches/patch.sh "$@" ;;
+  (newcv) ${PLUMED_ROOT}/tools/scripts/newcv.sh "$@" ;;
+esac
+
+
+
diff --git a/tools/scripts/newcv.sh b/tools/scripts/newcv.sh
new file mode 100755
index 000000000..02c3e7d62
--- /dev/null
+++ b/tools/scripts/newcv.sh
@@ -0,0 +1,16 @@
+#! /bin/bash
+
+if [ $# != 2 ] ;
+then
+  echo "ERROR"
+  echo "type 'plumed newcv directive cvname'"
+  echo "E.g. 'plumed newcv TORSION Torsion'"
+  exit 1
+fi
+
+directive=$1
+cvname=$2
+
+sed "s/TEMPLATE/$directive/g
+     s/Template/$cvname/g" $PLUMED_ROOT/src/ColvarTemplate.cpp > Colvar${cvname}.cpp
+
diff --git a/user-doc/.gitignore b/user-doc/.gitignore
new file mode 100644
index 000000000..628872b9e
--- /dev/null
+++ b/user-doc/.gitignore
@@ -0,0 +1,6 @@
+/html
+/latex
+/*.tmp
+/DocPostproc.txt
+/automatic
+
diff --git a/user-doc/Doc.txt b/user-doc/Doc.txt
new file mode 100644
index 000000000..2b779464e
--- /dev/null
+++ b/user-doc/Doc.txt
@@ -0,0 +1,176 @@
+/**
+\mainpage User guide
+
+Introduction
+
+\section WhatsNew What's new
+
+\subsection NewInputSyntax New syntax for the input file
+
+Briefly describe the difference between old and new input
+
+\subsection NewFeatures List of new features
+
+List of new features
+
+\section Topics
+
+\subpage Installation
+
+\subpage BasicUsage
+
+\subpage AdvancedTopics
+
+\subpage Tools
+
+\page Reference
+
+List of directives to manipulate input: \subpage InputDirectives
+
+List of collective variables: \subpage Colvar
+
+List of functions: \subpage Function
+
+List of free energy methods: \subpage Bias
+
+List of general purpose directives: \subpage GenericDirectives
+
+\page Installation
+
+\section CompilingPlumed Compiling Plumed
+
+How to configure
+
+How to compile
+
+\section Patching Patching your MD code
+
+\section Testing Testing the installation
+
+\section InstallingPlumedOnAMainframe Installing Plumed on a mainframe
+
+Notes on shared libraries, modules, etc.
+
+\page BasicUsage Basic usage
+
+\section HowToActivatePlumed How to activate Plumed
+
+\section TheInputFile The input file
+
+Directives
+
+Continued lines
+
+Labeling the directives
+
+Units (see \ref UNITS).
+
+\section MonitoringSimulationsI Monitoring simulations I: Collective variables
+
+Example with \ref DISTANCE and \ref PRINT
+
+For more collective variables, see \ref Colvar
+
+\section MonitoringSimulationsII Monitoring simulations II: Functions
+
+Example with \ref COMBINE
+
+For more, see \ref Function
+
+\section BiasingSimulations Biasing simulations
+
+Example with \ref RESTRAINT
+
+For more, see \ref Bias
+
+\page AdvancedTopics Advanced topics
+
+\section AdvancedInput Advanced input file
+
+Inclusion of other files
+
+Loading libraries
+
+\section AtomGroups Atom groups
+
+\section AtomAlignment Atom alignement
+
+\section ReplicaExchange Replica exchange
+
+Discuss the way input is provided.
+A different bias is allowed on the different replicas.
+
+\page Tools
+
+\page InputDirectives Input directives
+
+These are directives which can be used to manipulate the input file.
+
+\section Comments
+
+\section ContinuationLines Continuation lines
+
+\section INCLUDE
+
+\section LOAD
+
+\section ENDPLUMED
+
+\page Colvar Collective Variables
+
+\attention This page should be automatically generated from the .cpp files
+
+@COLVAR@
+
+\page Function Functions
+
+The following keywords are available for all directives of this section:
+- ARG:
+  This keyword is used to specify on which variables the function is computed
+  It is a comma-separated list of labels. Here is an example with \ref COMBINE
+\verbatim
+DISTANCE  ATOMS=1,5 LABEL=d1
+DISTANCE  ATOMS=2,6 LABEL=d2
+COMBINE   ARG=d1,d2 POWERS=2
+\endverbatim
+
+\attention This page should be automatically generated from the .cpp files
+
+@FUNCTION@
+
+\page Bias 
+
+The following keywords are available for all directives of this section:
+
+- ARG:
+  This keyword is used to specify on which variables the bias is acting.
+  It is a comma-separated list of labels. Here is an example with \ref RESTRAINT
+\verbatim
+DISTANCE  ATOMS=1,5 LABEL=d1
+DISTANCE  ATOMS=2,6 LABEL=d2
+RESTRAINT ARG=d1,d2 AT=5.0,6.0 KAPPA=100.0,50.0
+\endverbatim
+- STRIDE:
+  PLUMED implements a multiple-time-step scheme. Using the keyword STRIDE
+  one can set how frequently the bias should be applied, in units of time steps.
+  It can be used to decrease the impact of variables which are computationally heavy.
+  Here is an example with \ref RESTRAINT
+\verbatim
+DISTANCE  ATOMS=1,5 LABEL=d1
+RESTRAINT ARG=d1 AT=5.0 KAPPA=100.0 STRIDE=2
+\endverbatim
+
+\attention This page should be automatically generated from the .cpp files
+
+@BIAS@
+
+\page GenericDirectives Generic directives
+
+\attention The following pages should be automatically generated from the .cpp files
+
+@GENERIC@
+
+
+
+*/
+
diff --git a/user-doc/Doxyfile b/user-doc/Doxyfile
new file mode 100644
index 000000000..d119df1d3
--- /dev/null
+++ b/user-doc/Doxyfile
@@ -0,0 +1,1649 @@
+# Doxyfile 1.7.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           =  "A PLUMED CLONE"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, 
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given extension. 
+# Doxygen has a built-in mapping, but you can override or extend it using this 
+# tag. The format is ext=language, where ext is a file extension, and language 
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penality. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will roughly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. The create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = DocPostproc.txt
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.vhd *.vhdl
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the stylesheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
+# the documentation publisher. This should be a reverse domain-name style 
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [0,1..20]) 
+# that doxygen will group on one line in the generated HTML documentation. 
+# Note that a value of 0 will completely suppress the enum values from
+# appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 200
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the
+# mathjax.org site, so you can quickly see the result without installing 
+# MathJax, but it is strongly recommended to install a local copy of MathJax 
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a PHP enabled web server instead of at the web client 
+# using Javascript. Doxygen will generate the search PHP script and index 
+# file to put on the web server. The advantage of the server 
+# based approach is that it scales better to large projects and allows 
+# full text search. The disadvantages are that it is more difficult to setup 
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links. 
+# Note that each tag file must have a unique name 
+# (where the name does NOT include the path) 
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called FreeSans.ttf to the output 
+# directory and reference it in all dot files that doxygen generates. This 
+# font does not include all possible unicode characters however, so when you need 
+# these (or just want a differently looking font) you can specify the font name 
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
+# which can be done by putting it in a standard location or by setting the 
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
+# containing the font.
+
+DOT_FONTNAME           = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the 
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
+# different font using DOT_FONTNAME you can set the path where dot 
+# can find it using this tag.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif. 
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
diff --git a/user-doc/Makefile b/user-doc/Makefile
new file mode 100644
index 000000000..e41a54dae
--- /dev/null
+++ b/user-doc/Makefile
@@ -0,0 +1,9 @@
+
+.PHONY: all clean
+
+all:
+	./extract
+	doxygen
+
+clean:
+	rm -fr html latex automatic DocPostproc.txt *~
diff --git a/user-doc/extract b/user-doc/extract
new file mode 100755
index 000000000..83fca78cd
--- /dev/null
+++ b/user-doc/extract
@@ -0,0 +1,38 @@
+#! /bin/bash
+mkdir automatic
+
+cat ../src/*cpp |
+awk '{
+  if($1=="//+ENDPLUMEDOC") inside=0;
+  if(inside && $1!="/**" && $1!="*/") print $0 >output
+  if($1=="//+PLUMEDOC"){
+    if($2=="COLVAR" || $2=="FUNCTION" || $2=="BIAS" || $2=="GENERIC"){
+      output="automatic/"$2".txt";
+      print "\\section "$3 > output
+      inside=1;
+    }
+  }
+}'
+
+cat Doc.txt |
+{
+  while read -r LINE ;
+  do
+  if [ "$LINE" = "@COLVAR@" ]
+  then
+    cat automatic/COLVAR.txt
+  elif [ "$LINE" = "@BIAS@" ]
+  then
+    cat automatic/BIAS.txt
+  elif [ "$LINE" = "@FUNCTION@" ]
+  then
+    cat automatic/FUNCTION.txt
+  elif [ "$LINE" = "@GENERIC@" ]
+  then
+    cat automatic/GENERIC.txt
+  else
+    echo -E "$LINE"
+  fi
+  done
+} > DocPostproc.txt
+
-- 
GitLab