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