diff -Naur lammps-29Jan09/doc/Section_commands.html lammps-12Feb09/doc/Section_commands.html
--- lammps-29Jan09/doc/Section_commands.html 2009-01-19 10:18:42.000000000 -0700
+++ lammps-12Feb09/doc/Section_commands.html 2009-02-06 09:12:07.000000000 -0700
@@ -372,8 +372,9 @@
lj/cut/coul/cut | lj/cut/coul/debye | lj/cut/coul/long | lj/cut/coul/long/tip4p |
lj/expand | lj/gromacs | lj/gromacs/coul/gromacs | lj/smooth |
lubricate | meam | morse | morse/opt |
-peri/pmb | resquared | soft | sw |
-table | tersoff | tersoff/zbl | yukawa
+ |
peri/pmb | reax | resquared | soft |
+sw | table | tersoff | tersoff/zbl |
+yukawa
|
These are pair styles contributed by users, which can be used if
diff -Naur lammps-29Jan09/doc/Section_commands.txt lammps-12Feb09/doc/Section_commands.txt
--- lammps-29Jan09/doc/Section_commands.txt 2009-01-19 10:18:42.000000000 -0700
+++ lammps-12Feb09/doc/Section_commands.txt 2009-02-06 09:12:07.000000000 -0700
@@ -530,6 +530,7 @@
"morse"_pair_morse.html,
"morse/opt"_pair_morse.html,
"peri/pmb"_pair_peri_pmb.html,
+"reax"_pair_reax.html,
"resquared"_pair_resquared.html,
"soft"_pair_soft.html,
"sw"_pair_sw.html,
diff -Naur lammps-29Jan09/doc/Section_start.html lammps-12Feb09/doc/Section_start.html
--- lammps-29Jan09/doc/Section_start.html 2009-01-08 17:14:52.000000000 -0700
+++ lammps-12Feb09/doc/Section_start.html 2009-02-10 11:37:23.000000000 -0700
@@ -356,38 +356,53 @@
"make package-check" will list differences between src and package
versions of the same files.
-To use the "meam" package you must build LAMMPS with the MEAM library
-in lib/meam, which computes the modified embedded atom method
-potential, which is a generalization of EAM potentials that can be
-used to model a wider variety of materials. This MEAM implementation
-was written by Greg Wagner at Sandia. To build LAMMPS with MEAM, you
-must use a low-level LAMMPS Makefile that includes the MEAM directory
-in its paths. See Makefile.linux_meam as an example. You must also
-build MEAM itself as a library before building LAMMPS, so that LAMMPS
-can link against it. This requires a F90 compiler. The library is
-built by typing "make" from within the meam directory with the
-appropriate Makefile, e.g. "make -f Makefile.icc". If one of the
-provided Makefiles is not appropriate for your system you can edit or
-add one as needed.
-
-Note that linking a Fortran library to a C++ code can be problematic
-(e.g. Fortran routine names can't be found due to non-standard
-underscore rules) and typically requires additional C++ or F90
-libraries be included in the link. You may need to read documentation
-for your compiler about how to do this correctly.
-
-To use the "poems" package you must build LAMMPS with the POEMS
-library in lib/poems, which computes the constrained rigid-body motion
-of articulated (jointed) multibody systems. POEMS was written and is
-distributed by Prof Kurt Anderson's group at Rensselaer Polytechnic
-Institute (RPI). To build LAMMPS with POEMS, you must use a low-level
-LAMMPS Makefile that includes the POEMS directory in its paths. See
-Makefile.g++_poems as an example. You must also build POEMS itself as
-a library before building LAMMPS, so that LAMMPS can link against it.
-The POEMS library is built by typing "make" from within the poems
-directory with the appropriate Makefile, e.g. "make -f Makefile.g++".
-If one of the provided Makefiles is not appropriate for your system
-you can edit or add one as needed.
+
Some packages require that additional libraries first be compiled,
+which LAMMPS will link to when it builds. Currently, these are the
+"meam", "poems", and "reax" packages. You should look at the README
+files in the lib directories (e.g. lib/reax/README) for instructions
+on how to build the libraries themselves.
+
+The "meam" library in lib/meam computes the modified embedded atom
+method potential, which is a generalization of EAM potentials that can
+be used to model a wider variety of materials. This MEAM
+implementation was written by Greg Wagner at Sandia. It requires a
+F90 compiler to build.
+
+The "reax" library in lib/reax computes the Reactive Force Field
+(ReaxFF) potential, developed by Adri van Duin in Bill Goddard's group
+at CalTech. This implementation in LAMMPS uses many of Adri's files
+and was developed by Aidan Thompson at Sandia and Hansohl Cho at MIT.
+It requires a F77 or F90 compiler to build.
+
+The "poems" library in lib/poems computes the constrained rigid-body
+motion of articulated (jointed) multibody systems. POEMS was written
+and is distributed by Prof Kurt Anderson's group at Rensselaer
+Polytechnic Institute (RPI).
+
+In all cases, these libraries are built by typing
+
+make -f Makefile.foo
+
+in the appropriate directory, e.g. in lib/reax.
+
+You should use the Makefile that is a match for your system. If one
+of the provided Makefiles is not appropriate for your system you can
+edit or add one as needed.
+
+Once the desired library or libraries are built, you can build LAMMPS.
+You will need to create and use a lo-level LAMMPS makefile in src/MAKE
+that links with the specific libraries you want. See a Makefile.foo
+that has the library name in it to see how this is done.
+E.g. Makefile.g++_reax or Makefile.g++_poems_meam. Typically these
+will have additional -I, -L, and -l arguments that enable compiling
+and linking with files from the library.
+
+Note that linking a Fortran library (like MEAM or REAX) to a C++ code
+(like LAMMPS) can be tricky. E.g. Fortran routine may not be found
+due to non-standard underscore rules. It typically requires
+additional C++ or Fortran libraries be included in the link. You may
+need to read documentation for your Fortran and C++ compilers about
+how to do this correctly.
diff -Naur lammps-29Jan09/doc/Section_start.txt lammps-12Feb09/doc/Section_start.txt
--- lammps-29Jan09/doc/Section_start.txt 2009-01-08 17:14:52.000000000 -0700
+++ lammps-12Feb09/doc/Section_start.txt 2009-02-10 11:37:23.000000000 -0700
@@ -349,38 +349,53 @@
"make package-check" will list differences between src and package
versions of the same files.
-To use the "meam" package you must build LAMMPS with the MEAM library
-in lib/meam, which computes the modified embedded atom method
-potential, which is a generalization of EAM potentials that can be
-used to model a wider variety of materials. This MEAM implementation
-was written by Greg Wagner at Sandia. To build LAMMPS with MEAM, you
-must use a low-level LAMMPS Makefile that includes the MEAM directory
-in its paths. See Makefile.linux_meam as an example. You must also
-build MEAM itself as a library before building LAMMPS, so that LAMMPS
-can link against it. This requires a F90 compiler. The library is
-built by typing "make" from within the meam directory with the
-appropriate Makefile, e.g. "make -f Makefile.icc". If one of the
-provided Makefiles is not appropriate for your system you can edit or
-add one as needed.
-
-Note that linking a Fortran library to a C++ code can be problematic
-(e.g. Fortran routine names can't be found due to non-standard
-underscore rules) and typically requires additional C++ or F90
-libraries be included in the link. You may need to read documentation
-for your compiler about how to do this correctly.
-
-To use the "poems" package you must build LAMMPS with the POEMS
-library in lib/poems, which computes the constrained rigid-body motion
-of articulated (jointed) multibody systems. POEMS was written and is
-distributed by Prof Kurt Anderson's group at Rensselaer Polytechnic
-Institute (RPI). To build LAMMPS with POEMS, you must use a low-level
-LAMMPS Makefile that includes the POEMS directory in its paths. See
-Makefile.g++_poems as an example. You must also build POEMS itself as
-a library before building LAMMPS, so that LAMMPS can link against it.
-The POEMS library is built by typing "make" from within the poems
-directory with the appropriate Makefile, e.g. "make -f Makefile.g++".
-If one of the provided Makefiles is not appropriate for your system
-you can edit or add one as needed.
+Some packages require that additional libraries first be compiled,
+which LAMMPS will link to when it builds. Currently, these are the
+"meam", "poems", and "reax" packages. You should look at the README
+files in the lib directories (e.g. lib/reax/README) for instructions
+on how to build the libraries themselves.
+
+The "meam" library in lib/meam computes the modified embedded atom
+method potential, which is a generalization of EAM potentials that can
+be used to model a wider variety of materials. This MEAM
+implementation was written by Greg Wagner at Sandia. It requires a
+F90 compiler to build.
+
+The "reax" library in lib/reax computes the Reactive Force Field
+(ReaxFF) potential, developed by Adri van Duin in Bill Goddard's group
+at CalTech. This implementation in LAMMPS uses many of Adri's files
+and was developed by Aidan Thompson at Sandia and Hansohl Cho at MIT.
+It requires a F77 or F90 compiler to build.
+
+The "poems" library in lib/poems computes the constrained rigid-body
+motion of articulated (jointed) multibody systems. POEMS was written
+and is distributed by Prof Kurt Anderson's group at Rensselaer
+Polytechnic Institute (RPI).
+
+In all cases, these libraries are built by typing
+
+make -f Makefile.foo :pre
+
+in the appropriate directory, e.g. in lib/reax.
+
+You should use the Makefile that is a match for your system. If one
+of the provided Makefiles is not appropriate for your system you can
+edit or add one as needed.
+
+Once the desired library or libraries are built, you can build LAMMPS.
+You will need to create and use a lo-level LAMMPS makefile in src/MAKE
+that links with the specific libraries you want. See a Makefile.foo
+that has the library name in it to see how this is done.
+E.g. Makefile.g++_reax or Makefile.g++_poems_meam. Typically these
+will have additional -I, -L, and -l arguments that enable compiling
+and linking with files from the library.
+
+Note that linking a Fortran library (like MEAM or REAX) to a C++ code
+(like LAMMPS) can be tricky. E.g. Fortran routine may not be found
+due to non-standard underscore rules. It typically requires
+additional C++ or Fortran libraries be included in the link. You may
+need to read documentation for your Fortran and C++ compilers about
+how to do this correctly.
:line
diff -Naur lammps-29Jan09/doc/compute_pe_atom.html lammps-12Feb09/doc/compute_pe_atom.html
--- lammps-29Jan09/doc/compute_pe_atom.html 2008-04-04 08:24:01.000000000 -0600
+++ lammps-12Feb09/doc/compute_pe_atom.html 2009-02-12 13:45:46.000000000 -0700
@@ -60,8 +60,8 @@
in the last 2 columns of thermo output:
compute peratom all pe/atom
-compute p all reduce sum c_peratom
-thermo_style custom step temp etotal press pe c_p
+compute pe all reduce sum c_peratom
+thermo_style custom step temp etotal press pe c_pe
IMPORTANT NOTE: The per-atom energy does NOT include contributions due
to long-range Coulombic interactions (via the
diff -Naur lammps-29Jan09/doc/compute_pe_atom.txt lammps-12Feb09/doc/compute_pe_atom.txt
--- lammps-29Jan09/doc/compute_pe_atom.txt 2008-04-04 08:24:01.000000000 -0600
+++ lammps-12Feb09/doc/compute_pe_atom.txt 2009-02-12 13:45:46.000000000 -0700
@@ -57,8 +57,8 @@
in the last 2 columns of thermo output:
compute peratom all pe/atom
-compute p all reduce sum c_peratom
-thermo_style custom step temp etotal press pe c_p :pre
+compute pe all reduce sum c_peratom
+thermo_style custom step temp etotal press pe c_pe :pre
IMPORTANT NOTE: The per-atom energy does NOT include contributions due
to long-range Coulombic interactions (via the
diff -Naur lammps-29Jan09/doc/pair_coeff.html lammps-12Feb09/doc/pair_coeff.html
--- lammps-29Jan09/doc/pair_coeff.html 2009-01-08 17:14:52.000000000 -0700
+++ lammps-12Feb09/doc/pair_coeff.html 2009-02-06 09:12:07.000000000 -0700
@@ -130,6 +130,7 @@
pair_style morse - Morse potential
pair_style morse/opt - optimized version of Morse potential
pair_style peri/pmb - peridynamic PMB potential
+pair_style reax - ReaxFF potential
pair_style resquared - Everaers RE-Squared ellipsoidal potential
pair_style soft - Soft (cosine) potential
pair_style sw - Stillinger-Weber 3-body potential
diff -Naur lammps-29Jan09/doc/pair_coeff.txt lammps-12Feb09/doc/pair_coeff.txt
--- lammps-29Jan09/doc/pair_coeff.txt 2009-01-08 17:14:52.000000000 -0700
+++ lammps-12Feb09/doc/pair_coeff.txt 2009-02-06 09:12:07.000000000 -0700
@@ -126,6 +126,7 @@
"pair_style morse"_pair_morse.html - Morse potential
"pair_style morse/opt"_pair_morse.html - optimized version of Morse potential
"pair_style peri/pmb"_pair_peri_pmb.html - peridynamic PMB potential
+"pair_style reax"_pair_reax.html - ReaxFF potential
"pair_style resquared"_pair_resquared.html - Everaers RE-Squared ellipsoidal potential
"pair_style soft"_pair_soft.html - Soft (cosine) potential
"pair_style sw"_pair_sw.html - Stillinger-Weber 3-body potential
diff -Naur lammps-29Jan09/doc/pair_reax.html lammps-12Feb09/doc/pair_reax.html
--- lammps-29Jan09/doc/pair_reax.html 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/doc/pair_reax.html 2009-02-12 13:45:46.000000000 -0700
@@ -0,0 +1,144 @@
+
+LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Commands
+
+
+
+
+
+
+
+
+
+pair_style reax command
+
+Syntax:
+
+pair_style reax hbcut precision
+
+- hbcut = hydrogen-bond cutoff (distance units)
+
- precision = precision for charge equilibration
+
+Examples:
+
+pair_style reax
+pair_style reax 10.0 1.0e-5
+pair_coeff * * ffield.reax C H O N
+
+Description:
+
+The pair style computes the ReaxFF potential of van Duin, Goddard and
+co-workers. ReaxFF uses distance-dependent bond-order functions to
+represent the contributions of chemical bonding to the potential
+energy. Details of the ReaxFF and its interatomic potential energy
+calculation are given in the following publications: (van Duin
+2001) and (van Duin 2003).
+
+LAMMPS provides a ReaxFF potential file in its potentials dir, namely
+potentials/ffield.reax. Its format is identical to that used by van
+Duin and co-workers. It contains parameterizations for the following
+elements: C, H, O, N, S, and Si. You can use your another file in
+place of it, and ReaxFF files with parameterizations for other
+elements or for specific chemical systems may be available elsewhere.
+
+The hbcut and precision settings are optional arguments. If
+neither is provided, default settings are used: hbcut = 10 (which is
+Angstroms in real units) and precision = 1.0e-6 (one part in 10^6).
+If you wish to override either of these defaults, then both settings
+must be specified.
+
+Use of this pair style requires that a charge be defined for every
+atom since the potential performs charge equilibration. See the
+atom_style and read_data commands
+for details on how to specify charges.
+
+The thermo variable evdwl stores the sum of all the ReaxFF potential
+energy contributions, with the exception of the Coulombic and charge
+equilibration contributions which are stored in the thermo variable
+ecoul. The output of these quantities is controlled by the
+thermo command.
+
+Only a single pair_coeff command is used with the reax style which
+specifies a ReaxFF potential file with parameters for all needed
+elements. These are mapped to LAMMPS atom types by specifying N
+additional arguments after the filename in the pair_coeff command,
+where N is the number of LAMMPS atom types:
+
+- filename
+
- N indices = mapping of ReaxFF elements to atom types
+
+The specification of the filename and the mapping of LAMMPS atom types
+recognized by the ReaxFF is done differently than for other LAMMPS
+potentials, due to the non-portable difficulty of passing character
+strings (e.g. filename, element names) between C++ and Fortran.
+
+The filename has to be "ffield.reax" and it has to exist in the
+directory you are running LAMMPS in. This means you cannot prepend a
+path to the file in the potentials dir. Rather, you should copy that
+file into the directory you are running from. If you wish to use
+another ReaxFF potential file, then name it "ffield.reax" and put in
+your running dir.
+
+In the ReaxFF potential file, near the top, is a section that contains
+element names, each with a couple dozen numeric parameters. The
+ffield.reax provided with LAMMPS lists 6 elements: C, H, O, N, S, Si.
+Think of these as numbered 1 to 6. Each of the N indices you specify
+for the N atom types of LAMMPS atoms must be an integer from 1 to 6.
+Atoms with LAMMPS type 1 will be mapped to whatever element you
+specify as the first index value, etc.
+
+As an example, if your LAMMPS simulation has 4 atoms types and you
+want the 1st two to be C, the 3rd to be N, and the 4th to be H, you
+would use the following pair_coeff command:
+
+pair_coeff * * ffield.reax 1 1 4 2
+
+
+
+Mixing, shift, table, tail correction, restart, rRESPA info:
+
+This pair style does not support the pair_modify
+mix, shift, table, and tail options.
+
+This pair style does not write its information to binary restart
+files, since it is stored in potential files. Thus, you
+need to re-specify the pair_style and pair_coeff commands in an input
+script that reads a restart file.
+
+This pair style can only be used via the pair keyword of the
+run_style respa command. It does not support the
+inner, middle, outer keywords.
+
+Restrictions:
+
+This pair style is part of the "reax" package. It is only enabled if
+LAMMPS was built with that package, which also requires the REAX
+library be built and linked with LAMMPS. See the Making
+LAMMPS section for more info.
+
+The ffield.reax potential file provided with LAMMPS in the potentials
+directory is parameterized for real units. You can use
+the ReaxFF potential with any LAMMPS units, but you would need to
+create your own potential file with coefficients listed in the
+appropriate units if your simulation doesn't use "real" units. This
+would be somewhat tricky, so contact the LAMMPS authors if you wish to
+do this.
+
+Related commands:
+
+pair_coeff
+
+Default: none
+
+
+
+
+
+(van Duin 2001) van Duin, Dasgupta, Lorant, Goddard
+Journal of Physical Chemistry A, 105, 9396-9409 (2001).
+
+
+
+(van Duin 2003) van Duin, Strachan, Stewman, Zhang, Xu, Goddard,
+Journal of Physical Chemistry A, 107, 3803-3811 (2003).
+
+
diff -Naur lammps-29Jan09/doc/pair_reax.txt lammps-12Feb09/doc/pair_reax.txt
--- lammps-29Jan09/doc/pair_reax.txt 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/doc/pair_reax.txt 2009-02-12 13:45:46.000000000 -0700
@@ -0,0 +1,137 @@
+"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
+
+:link(lws,http://lammps.sandia.gov)
+:link(ld,Manual.html)
+:link(lc,Section_commands.html#comm)
+
+:line
+
+pair_style reax command :h3
+
+[Syntax:]
+
+pair_style reax hbcut precision :pre
+
+hbcut = hydrogen-bond cutoff (distance units)
+precision = precision for charge equilibration :ul
+
+[Examples:]
+
+pair_style reax
+pair_style reax 10.0 1.0e-5
+pair_coeff * * ffield.reax C H O N :pre
+
+[Description:]
+
+The pair style computes the ReaxFF potential of van Duin, Goddard and
+co-workers. ReaxFF uses distance-dependent bond-order functions to
+represent the contributions of chemical bonding to the potential
+energy. Details of the ReaxFF and its interatomic potential energy
+calculation are given in the following publications: "(van Duin
+2001)"_#van_Duin_2001 and "(van Duin 2003)"_#van_Duin_2003.
+
+LAMMPS provides a ReaxFF potential file in its potentials dir, namely
+potentials/ffield.reax. Its format is identical to that used by van
+Duin and co-workers. It contains parameterizations for the following
+elements: C, H, O, N, S, and Si. You can use your another file in
+place of it, and ReaxFF files with parameterizations for other
+elements or for specific chemical systems may be available elsewhere.
+
+The {hbcut} and {precision} settings are optional arguments. If
+neither is provided, default settings are used: {hbcut} = 10 (which is
+Angstroms in real units) and {precision} = 1.0e-6 (one part in 10^6).
+If you wish to override either of these defaults, then both settings
+must be specified.
+
+Use of this pair style requires that a charge be defined for every
+atom since the potential performs charge equilibration. See the
+"atom_style"_atom_style.html and "read_data"_read_data.html commands
+for details on how to specify charges.
+
+The thermo variable {evdwl} stores the sum of all the ReaxFF potential
+energy contributions, with the exception of the Coulombic and charge
+equilibration contributions which are stored in the thermo variable
+{ecoul}. The output of these quantities is controlled by the
+"thermo"_thermo.html command.
+
+Only a single pair_coeff command is used with the {reax} style which
+specifies a ReaxFF potential file with parameters for all needed
+elements. These are mapped to LAMMPS atom types by specifying N
+additional arguments after the filename in the pair_coeff command,
+where N is the number of LAMMPS atom types:
+
+filename
+N indices = mapping of ReaxFF elements to atom types :ul
+
+The specification of the filename and the mapping of LAMMPS atom types
+recognized by the ReaxFF is done differently than for other LAMMPS
+potentials, due to the non-portable difficulty of passing character
+strings (e.g. filename, element names) between C++ and Fortran.
+
+The filename has to be "ffield.reax" and it has to exist in the
+directory you are running LAMMPS in. This means you cannot prepend a
+path to the file in the potentials dir. Rather, you should copy that
+file into the directory you are running from. If you wish to use
+another ReaxFF potential file, then name it "ffield.reax" and put in
+your running dir.
+
+In the ReaxFF potential file, near the top, is a section that contains
+element names, each with a couple dozen numeric parameters. The
+ffield.reax provided with LAMMPS lists 6 elements: C, H, O, N, S, Si.
+Think of these as numbered 1 to 6. Each of the N indices you specify
+for the N atom types of LAMMPS atoms must be an integer from 1 to 6.
+Atoms with LAMMPS type 1 will be mapped to whatever element you
+specify as the first index value, etc.
+
+As an example, if your LAMMPS simulation has 4 atoms types and you
+want the 1st two to be C, the 3rd to be N, and the 4th to be H, you
+would use the following pair_coeff command:
+
+pair_coeff * * ffield.reax 1 1 4 2 :pre
+
+:line
+
+[Mixing, shift, table, tail correction, restart, rRESPA info]:
+
+This pair style does not support the "pair_modify"_pair_modify.html
+mix, shift, table, and tail options.
+
+This pair style does not write its information to "binary restart
+files"_restart.html, since it is stored in potential files. Thus, you
+need to re-specify the pair_style and pair_coeff commands in an input
+script that reads a restart file.
+
+This pair style can only be used via the {pair} keyword of the
+"run_style respa"_run_style.html command. It does not support the
+{inner}, {middle}, {outer} keywords.
+
+[Restrictions:]
+
+This pair style is part of the "reax" package. It is only enabled if
+LAMMPS was built with that package, which also requires the REAX
+library be built and linked with LAMMPS. See the "Making
+LAMMPS"_Section_start.html#2_3 section for more info.
+
+The ffield.reax potential file provided with LAMMPS in the potentials
+directory is parameterized for real "units"_units.html. You can use
+the ReaxFF potential with any LAMMPS units, but you would need to
+create your own potential file with coefficients listed in the
+appropriate units if your simulation doesn't use "real" units. This
+would be somewhat tricky, so contact the LAMMPS authors if you wish to
+do this.
+
+[Related commands:]
+
+"pair_coeff"_pair_coeff.html
+
+[Default:] none
+
+:line
+
+:link(van_Duin_2001)
+[(van Duin 2001)] van Duin, Dasgupta, Lorant, Goddard
+Journal of Physical Chemistry A, 105, 9396-9409 (2001).
+
+:link(van_Duin_2003)
+[(van Duin 2003)] van Duin, Strachan, Stewman, Zhang, Xu, Goddard,
+Journal of Physical Chemistry A, 107, 3803-3811 (2003).
diff -Naur lammps-29Jan09/doc/pair_style.html lammps-12Feb09/doc/pair_style.html
--- lammps-29Jan09/doc/pair_style.html 2009-01-08 17:14:52.000000000 -0700
+++ lammps-12Feb09/doc/pair_style.html 2009-02-06 09:12:07.000000000 -0700
@@ -132,6 +132,7 @@
pair_style morse - Morse potential
pair_style morse/opt - optimized version of Morse potential
pair_style peri/pmb - peridynamic PMB potential
+pair_style reax - ReaxFF potential
pair_style resquared - Everaers RE-Squared ellipsoidal potential
pair_style soft - Soft (cosine) potential
pair_style sw - Stillinger-Weber 3-body potential
diff -Naur lammps-29Jan09/doc/pair_style.txt lammps-12Feb09/doc/pair_style.txt
--- lammps-29Jan09/doc/pair_style.txt 2009-01-08 17:14:52.000000000 -0700
+++ lammps-12Feb09/doc/pair_style.txt 2009-02-06 09:12:07.000000000 -0700
@@ -128,6 +128,7 @@
"pair_style morse"_pair_morse.html - Morse potential
"pair_style morse/opt"_pair_morse.html - optimized version of Morse potential
"pair_style peri/pmb"_pair_peri_pmb.html - peridynamic PMB potential
+"pair_style reax"_pair_reax.html - ReaxFF potential
"pair_style resquared"_pair_resquared.html - Everaers RE-Squared ellipsoidal potential
"pair_style soft"_pair_soft.html - Soft (cosine) potential
"pair_style sw"_pair_sw.html - Stillinger-Weber 3-body potential
diff -Naur lammps-29Jan09/examples/README lammps-12Feb09/examples/README
--- lammps-29Jan09/examples/README 2008-07-25 08:47:38.000000000 -0600
+++ lammps-12Feb09/examples/README 2009-02-12 14:03:10.000000000 -0700
@@ -42,6 +42,7 @@
peptide: dynamics of a small solvated peptide chain (5-mer)
peri: Peridynamic model of cylinder impacted by indenter
pour: pouring of granular particles into a 3d box, then chute flow
+reax: RDX and TATB models using the ReaxFF
rigid: rigid bodies modeled as independent or coupled
shear: sideways shear applied to 2d solid, with and without a void
diff -Naur lammps-29Jan09/examples/reax/data.rdx lammps-12Feb09/examples/reax/data.rdx
--- lammps-29Jan09/examples/reax/data.rdx 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/data.rdx 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,43 @@
+# Position data for C H O N system
+
+21 atoms
+4 atom types
+
+35 48 xlo xhi
+35 48 ylo yhi
+35 48 zlo zhi
+
+Masses
+
+1 12.0000
+2 1.0080
+3 15.9990
+4 14.0000
+
+Atoms
+
+1 1 0 39.24155 41.46863 38.92277
+2 4 0 39.27964 41.53820 40.44084
+3 1 0 40.64521 41.50620 41.10779
+4 4 0 41.60957 40.51708 40.47343
+5 1 0 41.62276 40.43167 38.95576
+6 4 0 40.23819 40.48531 38.33063
+7 4 0 38.24418 40.70058 41.12136
+8 4 0 41.66978 39.19116 41.16286
+9 4 0 39.66004 39.14553 38.00265
+10 3 0 37.19348 40.43753 40.52718
+11 3 0 38.34902 40.47543 42.33157
+12 3 0 41.39553 39.12212 42.36547
+13 3 0 42.20174 38.23511 40.58913
+14 3 0 40.42044 38.20021 37.76930
+15 3 0 38.45458 39.05315 37.74847
+16 2 0 38.20622 41.30517 38.53402
+17 2 0 39.53639 42.48383 38.55015
+18 2 0 41.09313 42.52384 40.96591
+19 2 0 40.57077 41.37146 42.21506
+20 2 0 42.17264 41.33745 38.59030
+21 2 0 42.21828 39.56012 38.58766
+
+
+
+
diff -Naur lammps-29Jan09/examples/reax/data.tatb lammps-12Feb09/examples/reax/data.tatb
--- lammps-29Jan09/examples/reax/data.tatb 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/data.tatb 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,406 @@
+# Position data for TATB, C6H6N6O6, 16 molecules
+
+384 atoms
+4 atom types
+
+0.0 0.136240000000E+02 xlo xhi
+0.0 0.171149153805E+02 ylo yhi
+0.0 0.151826391451E+02 zlo zhi
+
+-0.575315630927E+01 -6.325466 7.4257288 xy xz yz
+
+Masses
+
+1 12.0000
+2 1.0080
+3 15.9990
+4 14.0000
+
+Atoms
+
+ 1 1 0 -1.54861 11.25031 5.49299
+ 2 1 0 -1.07764 10.65860 4.23736
+ 3 1 0 -1.00861 11.47314 3.03061
+ 4 1 0 -1.46778 12.85997 3.04000
+ 5 1 0 -2.01189 13.43735 4.28107
+ 6 1 0 -2.02233 12.63421 5.51085
+ 7 2 0 -0.73103 8.77550 5.26339
+ 8 2 0 -0.19413 8.98399 3.21664
+ 9 2 0 -0.98832 13.09964 0.98046
+ 10 2 0 -1.85010 14.78207 2.00945
+ 11 2 0 -2.92995 14.29644 6.58777
+ 12 2 0 -2.59566 12.42307 7.59092
+ 13 4 0 -1.49808 10.48244 6.73385
+ 14 4 0 -0.69448 9.36219 4.20529
+ 15 4 0 -0.51800 10.87564 1.77786
+ 16 4 0 -1.41310 13.60495 1.92669
+ 17 4 0 -2.54205 14.78207 4.28105
+ 18 4 0 -2.48495 13.16402 6.65589
+ 20 3 0 -1.91867 11.02530 7.85252
+ 21 3 0 -1.06280 9.24479 6.72301
+ 22 3 0 -0.12257 9.63028 1.76565
+ 23 3 0 -0.48743 11.60954 0.69872
+ 24 3 0 -2.53256 15.51411 3.17907
+ 25 3 0 -3.02427 15.29626 5.39167
+ 26 1 0 -0.08296 17.35525 4.93569
+ 27 1 0 5.19923 0.83205 6.19132
+ 28 1 0 5.13019 0.01751 7.39807
+ 29 1 0 -0.16379 15.74559 7.38868
+ 30 1 0 0.38033 15.16821 6.14761
+ 31 1 0 0.39076 15.97134 4.91783
+ 32 2 0 4.85261 2.71515 5.16529
+ 35 2 0 4.31571 2.50664 7.21204
+ 36 2 0 5.10990 -1.60900 9.44822
+ 37 2 0 0.21854 13.82349 8.41923
+ 38 2 0 1.29838 14.30912 3.84092
+ 41 2 0 0.96410 16.18249 2.83776
+ 42 4 0 -0.13348 18.12312 3.69483
+ 43 4 0 4.81607 2.12845 6.22339
+ 44 4 0 4.63959 0.61500 8.65082
+ 47 4 0 -0.21847 15.00060 8.50199
+ 48 4 0 0.91048 13.82348 6.14763
+ 49 4 0 0.85339 15.44153 3.77279
+ 50 3 0 0.28711 17.58026 2.57616
+ 51 3 0 5.18440 2.24586 3.70568
+ 52 3 0 4.24415 1.86036 8.66303
+ 53 3 0 4.60901 -0.11890 9.72995
+ 54 3 0 0.90099 13.09144 7.24960
+ 55 3 0 1.39270 13.30929 5.03702
+ 56 1 0 5.26339 11.25031 5.49299
+ 57 1 0 5.73436 10.65860 4.23736
+ 58 1 0 5.80339 11.47314 3.03061
+ 59 1 0 5.34422 12.85997 3.04000
+ 60 1 0 4.80011 13.43735 4.28107
+ 61 1 0 4.78967 12.63421 5.51085
+ 62 2 0 6.08097 8.77550 5.26339
+ 63 2 0 6.61787 8.98399 3.21664
+ 64 2 0 5.82368 13.09964 0.98046
+ 65 2 0 4.96190 14.78207 2.00945
+ 66 2 0 3.88205 14.29644 6.58777
+ 68 2 0 4.21634 12.42307 7.59092
+ 69 4 0 5.31392 10.48244 6.73385
+ 70 4 0 6.11752 9.36219 4.20529
+ 71 4 0 6.29400 10.87564 1.77786
+ 72 4 0 5.39890 13.60495 1.92669
+ 73 4 0 4.26995 14.78207 4.28105
+ 74 4 0 4.32705 13.16402 6.65589
+ 75 3 0 4.89333 11.02530 7.85252
+ 76 3 0 5.74920 9.24479 6.72301
+ 77 3 0 6.68943 9.63028 1.76565
+ 78 3 0 6.32457 11.60954 0.69872
+ 79 3 0 4.27944 15.51411 3.17907
+ 80 3 0 3.78773 15.29626 5.39167
+ 83 1 0 6.72904 17.35525 4.93569
+ 84 1 0 12.01123 0.83205 6.19132
+ 85 1 0 11.94219 0.01751 7.39807
+ 86 1 0 6.64821 15.74559 7.38868
+ 89 1 0 7.19233 15.16821 6.14761
+ 90 1 0 7.20276 15.97135 4.91783
+ 91 2 0 11.66461 2.71515 5.16529
+ 92 2 0 11.12771 2.50664 7.21204
+ 95 2 0 11.92190 -1.60900 9.44822
+ 96 2 0 7.03054 13.82349 8.41923
+ 97 2 0 8.11038 14.30912 3.84092
+ 98 2 0 7.77610 16.18249 2.83776
+ 99 4 0 6.67852 18.12312 3.69483
+ 100 4 0 11.62807 2.12845 6.22339
+ 101 4 0 11.45159 0.61500 8.65082
+ 102 4 0 6.59353 15.00060 8.50199
+ 103 4 0 7.72248 13.82348 6.14763
+ 104 4 0 7.66539 15.44154 3.77279
+ 105 3 0 7.09911 17.58026 2.57616
+ 106 3 0 11.99640 2.24586 3.70568
+ 107 3 0 11.05615 1.86036 8.66303
+ 108 3 0 11.42101 -0.11890 9.72995
+ 109 3 0 7.71299 13.09144 7.24960
+ 110 3 0 8.20470 13.30929 5.03701
+ 111 1 0 1.32797 2.69285 5.49299
+ 112 1 0 1.79894 2.10114 4.23735
+ 113 1 0 1.86797 2.91569 3.03061
+ 114 1 0 1.40880 4.30251 3.04000
+ 116 1 0 0.86468 4.87989 4.28107
+ 117 1 0 0.85425 4.07676 5.51085
+ 118 2 0 -3.60760 17.33296 5.26338
+ 119 2 0 -3.07071 17.54145 3.21664
+ 120 2 0 1.88826 4.54219 0.98046
+ 121 2 0 1.02647 6.22461 2.00945
+ 122 2 0 -0.05338 5.73898 6.58776
+ 123 2 0 0.28092 3.86561 7.59092
+ 124 4 0 1.37850 1.92498 6.73385
+ 125 4 0 -3.57105 17.91965 4.20529
+ 126 4 0 -3.39458 19.43310 1.77786
+ 127 4 0 1.46348 5.04750 1.92669
+ 128 4 0 0.33453 6.22462 4.28105
+ 131 4 0 0.39163 4.60657 6.65589
+ 132 3 0 0.95791 2.46784 7.85252
+ 133 3 0 1.81378 0.68733 6.72300
+ 134 3 0 -2.99915 18.18775 1.76565
+ 137 3 0 -3.36401 20.16700 0.69873
+ 138 3 0 0.34402 6.95666 3.17908
+ 139 3 0 -0.14770 6.73881 5.39166
+ 140 1 0 2.79361 8.79780 4.93569
+ 143 1 0 2.32264 9.38950 6.19133
+ 144 1 0 2.25361 8.57496 7.39807
+ 145 1 0 2.71279 7.18814 7.38868
+ 146 1 0 3.25691 6.61076 6.14761
+ 147 1 0 3.26733 7.41389 4.91783
+ 148 2 0 1.97603 11.27260 5.16529
+ 149 2 0 1.43914 11.06410 7.21204
+ 150 2 0 2.23333 6.94846 9.44822
+ 151 2 0 3.09512 5.26603 8.41923
+ 152 2 0 4.17495 5.75167 3.84092
+ 153 2 0 3.84068 7.62504 2.83776
+ 154 4 0 2.74309 9.56567 3.69483
+ 155 4 0 1.93948 10.68591 6.22339
+ 156 4 0 1.76301 9.17246 8.65082
+ 157 4 0 2.65811 6.44315 8.50199
+ 158 4 0 3.78706 5.26603 6.14763
+ 159 4 0 3.72996 6.88408 3.77279
+ 160 3 0 3.16369 9.02281 2.57616
+ 161 3 0 2.30781 10.80332 3.70567
+ 162 3 0 1.36757 10.41782 8.66304
+ 164 3 0 1.73243 8.43856 9.72995
+ 165 3 0 3.77757 4.53399 7.24961
+ 166 3 0 4.26928 4.75184 5.03701
+ 167 1 0 8.13997 2.69285 5.49299
+ 168 1 0 8.61094 2.10114 4.23735
+ 169 1 0 8.67997 2.91569 3.03061
+ 170 1 0 8.22080 4.30251 3.04000
+ 171 1 0 7.67668 4.87989 4.28107
+ 172 1 0 7.66625 4.07676 5.51085
+ 173 2 0 3.20440 17.33296 5.26338
+ 174 2 0 3.74129 17.54145 3.21664
+ 175 2 0 8.70026 4.54219 0.98046
+ 176 2 0 7.83847 6.22461 2.00945
+ 179 2 0 6.75862 5.73898 6.58776
+ 180 2 0 7.09292 3.86561 7.59092
+ 181 4 0 8.19050 1.92498 6.73385
+ 182 4 0 3.24095 17.91965 4.20529
+ 185 4 0 3.41742 19.43310 1.77786
+ 186 4 0 8.27548 5.04750 1.92669
+ 187 4 0 7.14653 6.22462 4.28105
+ 188 4 0 7.20363 4.60657 6.65589
+ 191 3 0 7.76991 2.46784 7.85252
+ 192 3 0 8.62578 0.68733 6.72300
+ 211 3 0 3.81285 18.18774 1.76565
+ 225 3 0 3.44799 20.16700 0.69872
+ 226 3 0 7.15602 6.95666 3.17908
+ 231 3 0 6.66430 6.73881 5.39166
+ 232 1 0 9.60561 8.79780 4.93569
+ 237 1 0 9.13464 9.38950 6.19133
+ 238 1 0 9.06561 8.57496 7.39807
+ 259 1 0 9.52479 7.18814 7.38868
+ 273 1 0 10.06891 6.61076 6.14761
+ 274 1 0 10.07933 7.41389 4.91783
+ 279 2 0 8.78803 11.27260 5.16529
+ 280 2 0 8.25114 11.06410 7.21204
+ 285 2 0 9.04533 6.94846 9.44822
+ 286 2 0 9.90712 5.26603 8.41923
+ 307 2 0 10.98695 5.75167 3.84092
+ 321 2 0 10.65268 7.62504 2.83776
+ 322 4 0 9.55509 9.56567 3.69483
+ 327 4 0 8.75148 10.68591 6.22339
+ 328 4 0 8.57501 9.17246 8.65082
+ 333 4 0 9.47011 6.44315 8.50199
+ 334 4 0 10.59906 5.26603 6.14763
+ 355 4 0 10.54196 6.88408 3.77279
+ 369 3 0 9.97569 9.02281 2.57616
+ 370 3 0 9.11981 10.80332 3.70567
+ 375 3 0 8.17957 10.41782 8.66304
+ 376 3 0 8.54443 8.43856 9.72995
+ 381 3 0 10.58957 4.53399 7.24961
+ 382 3 0 11.08128 4.75184 5.03701
+ 19 1 0 -1.83476 6.40572 13.08431
+ 33 1 0 -1.36379 5.81401 11.82868
+ 34 1 0 -1.29476 6.62855 10.62193
+ 39 1 0 -1.75393 8.01538 10.63132
+ 40 1 0 -2.29804 8.59276 11.87239
+ 45 1 0 -2.30848 7.78962 13.10217
+ 46 2 0 -1.01718 3.93091 12.85471
+ 67 2 0 -0.48028 4.13940 10.80796
+ 81 2 0 -1.27447 8.25505 8.57178
+ 82 2 0 -2.13625 9.93748 9.60077
+ 87 2 0 -3.21610 9.45185 14.17909
+ 88 2 0 -2.88181 7.57848 15.18224
+ 93 4 0 -1.78423 5.63785 14.32517
+ 94 4 0 -0.98063 4.51760 11.79661
+ 115 4 0 -0.80415 6.03105 9.36918
+ 129 4 0 -1.69925 8.76036 9.51801
+ 130 4 0 -2.82820 9.93748 11.87237
+ 135 4 0 -2.77110 8.31943 14.24721
+ 136 3 0 -2.20482 6.18071 15.44384
+ 141 3 0 -1.34895 4.40020 14.31433
+ 142 3 0 -0.40872 4.78569 9.35697
+ 163 3 0 -0.77358 6.76495 8.29004
+ 177 3 0 -2.81871 10.66952 10.77039
+ 178 3 0 -3.31042 10.45167 12.98299
+ 183 1 0 -0.36911 12.51066 12.52701
+ 184 1 0 4.91308 -4.01254 13.78265
+ 189 1 0 4.84404 -4.82709 14.98939
+ 190 1 0 -0.44994 10.90100 14.98000
+ 193 1 0 0.09418 10.32362 13.73893
+ 194 1 0 0.10461 11.12675 12.50915
+ 195 2 0 4.56646 -2.12944 12.75661
+ 196 2 0 4.02956 -2.33795 14.80336
+ 197 2 0 4.82375 -6.45359 17.03954
+ 198 2 0 -0.06761 8.97890 16.01055
+ 199 2 0 1.01223 9.46454 11.43224
+ 200 2 0 0.67795 11.33790 10.42908
+ 201 4 0 -0.41963 13.27853 11.28615
+ 202 4 0 4.52992 -2.71614 13.81471
+ 203 4 0 4.35344 -4.22959 16.24214
+ 204 4 0 -0.50462 10.15601 16.09331
+ 205 4 0 0.62433 8.97889 13.73895
+ 206 4 0 0.56724 10.59694 11.36411
+ 207 3 0 0.00096 12.73567 10.16748
+ 208 3 0 4.89825 -2.59873 11.29700
+ 209 3 0 3.95800 -2.98423 16.25435
+ 210 3 0 4.32286 -4.96349 17.32127
+ 212 3 0 0.61484 8.24685 14.84092
+ 213 3 0 1.10655 8.46470 12.62834
+ 214 1 0 4.97724 6.40572 13.08431
+ 215 1 0 5.44821 5.81401 11.82868
+ 216 1 0 5.51724 6.62855 10.62193
+ 217 1 0 5.05807 8.01538 10.63132
+ 218 1 0 4.51396 8.59276 11.87239
+ 219 1 0 4.50352 7.78962 13.10217
+ 220 2 0 5.79482 3.93091 12.85471
+ 221 2 0 6.33172 4.13940 10.80796
+ 222 2 0 5.53753 8.25505 8.57178
+ 223 2 0 4.67575 9.93748 9.60077
+ 224 2 0 3.59590 9.45185 14.17909
+ 227 2 0 3.93019 7.57848 15.18224
+ 228 4 0 5.02777 5.63785 14.32517
+ 229 4 0 5.83137 4.51760 11.79661
+ 230 4 0 6.00785 6.03105 9.36918
+ 233 4 0 5.11275 8.76036 9.51801
+ 234 4 0 3.98380 9.93748 11.87237
+ 235 4 0 4.04090 8.31943 14.24721
+ 236 3 0 4.60718 6.18071 15.44384
+ 239 3 0 5.46305 4.40020 14.31433
+ 240 3 0 6.40328 4.78569 9.35697
+ 241 3 0 6.03842 6.76495 8.29004
+ 242 3 0 3.99329 10.66952 10.77039
+ 243 3 0 3.50158 10.45167 12.98299
+ 244 1 0 6.44289 12.51066 12.52701
+ 245 1 0 11.72508 -4.01254 13.78265
+ 246 1 0 11.65604 -4.82709 14.98939
+ 247 1 0 6.36206 10.90100 14.98000
+ 248 1 0 6.90618 10.32362 13.73893
+ 249 1 0 6.91661 11.12675 12.50915
+ 250 2 0 11.37846 -2.12944 12.75661
+ 251 2 0 10.84156 -2.33795 14.80336
+ 252 2 0 11.63575 -6.45360 17.03954
+ 253 2 0 6.74439 8.97890 16.01055
+ 254 2 0 7.82423 9.46454 11.43224
+ 255 2 0 7.48995 11.33790 10.42908
+ 256 4 0 6.39237 13.27853 11.28615
+ 257 4 0 11.34192 -2.71614 13.81471
+ 258 4 0 11.16544 -4.22959 16.24214
+ 260 4 0 6.30738 10.15601 16.09331
+ 261 4 0 7.43633 8.97889 13.73895
+ 262 4 0 7.37924 10.59694 11.36411
+ 263 3 0 6.81296 12.73567 10.16748
+ 264 3 0 11.71025 -2.59873 11.29700
+ 265 3 0 10.77000 -2.98423 16.25435
+ 266 3 0 11.13486 -4.96350 17.32127
+ 267 3 0 7.42684 8.24685 14.84092
+ 268 3 0 7.91855 8.46470 12.62834
+ 269 1 0 1.04182 -2.15174 13.08431
+ 270 1 0 1.51279 -2.74345 11.82867
+ 271 1 0 1.58182 -1.92890 10.62193
+ 272 1 0 1.12265 -0.54208 10.63132
+ 275 1 0 0.57853 0.03530 11.87239
+ 276 1 0 0.56810 -0.76783 13.10217
+ 277 2 0 -3.89375 12.48837 12.85470
+ 278 2 0 -3.35686 12.69686 10.80796
+ 281 2 0 1.60211 -0.30240 8.57178
+ 282 2 0 0.74032 1.38002 9.60077
+ 283 2 0 -0.33952 0.89439 14.17908
+ 284 2 0 -0.00523 -0.97898 15.18224
+ 287 4 0 1.09235 -2.91961 14.32517
+ 288 4 0 -3.85720 13.07506 11.79661
+ 289 4 0 -3.68073 14.58851 9.36918
+ 290 4 0 1.17733 0.20291 9.51801
+ 291 4 0 0.04838 1.38003 11.87237
+ 292 4 0 0.10548 -0.23802 14.24721
+ 293 3 0 0.67176 -2.37675 15.44384
+ 294 3 0 1.52763 -4.15726 14.31432
+ 295 3 0 -3.28530 13.34315 9.35697
+ 296 3 0 -3.65016 15.32241 8.29004
+ 297 3 0 0.05787 2.11207 10.77040
+ 298 3 0 -0.43385 1.89422 12.98299
+ 299 1 0 2.50746 3.95321 12.52701
+ 300 1 0 2.03649 4.54491 13.782650
+ 301 1 0 1.96746 3.73037 14.98939
+ 302 1 0 2.42664 2.34355 14.98000
+ 303 1 0 2.97076 1.76617 13.73893
+ 304 1 0 2.98118 2.56930 12.50915
+ 305 2 0 1.68988 6.42801 12.75661
+ 306 2 0 1.15299 6.21951 14.80336
+ 308 2 0 1.94718 2.10387 17.03954
+ 309 2 0 2.80897 0.42144 16.01055
+ 310 2 0 3.88880 0.90708 11.43224
+ 311 2 0 3.55453 2.78045 10.42908
+ 312 4 0 2.45694 4.72108 11.28615
+ 313 4 0 1.65333 5.84132 13.81471
+ 314 4 0 1.47686 4.32787 16.24214
+ 315 4 0 2.37196 1.59856 16.09331
+ 316 4 0 3.50091 0.42144 13.73895
+ 317 4 0 3.44381 2.03949 11.36411
+ 318 3 0 2.87754 4.17822 10.16748
+ 319 3 0 2.02166 5.95873 11.29699
+ 320 3 0 1.08142 5.57323 16.25436
+ 323 3 0 1.44628 3.59397 17.32127
+ 324 3 0 3.49142 -0.31060 14.84093
+ 325 3 0 3.98313 -0.09275 12.62833
+ 326 1 0 7.85382 -2.15174 13.08431
+ 329 1 0 8.32479 -2.74345 11.82867
+ 330 1 0 8.39382 -1.92890 10.62193
+ 331 1 0 7.93465 -0.54208 10.63132
+ 332 1 0 7.39053 0.03530 11.87239
+ 335 1 0 7.38010 -0.76783 13.10217
+ 336 2 0 2.91825 12.48837 12.85470
+ 337 2 0 3.45514 12.69686 10.80796
+ 338 2 0 8.41411 -0.30240 8.57178
+ 339 2 0 7.55232 1.38002 9.60077
+ 340 2 0 6.47247 0.89439 14.17908
+ 341 2 0 6.80677 -0.97898 15.18224
+ 342 4 0 7.90435 -2.91961 14.32517
+ 343 4 0 2.95479 13.07506 11.79661
+ 344 4 0 3.13127 14.58851 9.36918
+ 345 4 0 7.98933 0.20291 9.51801
+ 346 4 0 6.86038 1.38003 11.87237
+ 347 4 0 6.91748 -0.23802 14.24721
+ 348 3 0 7.48376 -2.37675 15.44384
+ 349 3 0 8.33963 -4.15726 14.31432
+ 350 3 0 3.52670 13.34315 9.35697
+ 351 3 0 3.16184 15.32241 8.29004
+ 352 3 0 6.86987 2.11207 10.77040
+ 353 3 0 6.37815 1.89422 12.98298
+ 354 1 0 9.31946 3.95321 12.52701
+ 356 1 0 8.84849 4.54491 13.78265
+ 357 1 0 8.77946 3.73037 14.98939
+ 358 1 0 9.23864 2.34355 14.98000
+ 359 1 0 9.78276 1.76617 13.73893
+ 360 1 0 9.79318 2.56930 12.50915
+ 361 2 0 8.50188 6.42801 12.75661
+ 362 2 0 7.96499 6.21951 14.80336
+ 363 2 0 8.75918 2.10387 17.03954
+ 364 2 0 9.62097 0.42144 16.01055
+ 365 2 0 10.70080 0.90708 11.43224
+ 366 2 0 10.36653 2.78045 10.42908
+ 367 4 0 9.26894 4.72108 11.28615
+ 368 4 0 8.46533 5.84132 13.81471
+ 371 4 0 8.28886 4.32787 16.24214
+ 372 4 0 9.18396 1.59856 16.09331
+ 373 4 0 10.31291 0.42144 13.73895
+ 374 4 0 10.25581 2.03949 11.36411
+ 377 3 0 9.68954 4.17822 10.16748
+ 378 3 0 8.83366 5.95873 11.29699
+ 379 3 0 7.89342 5.57323 16.25436
+ 380 3 0 8.25828 3.59397 17.32127
+ 383 3 0 10.30342 -0.31060 14.84093
+ 384 3 0 10.79513 -0.09275 12.62833
+
+
diff -Naur lammps-29Jan09/examples/reax/dump.reax.rdx lammps-12Feb09/examples/reax/dump.reax.rdx
--- lammps-29Jan09/examples/reax/dump.reax.rdx 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/dump.reax.rdx 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,330 @@
+ITEM: TIMESTEP
+0
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.326273 0.497587 0.301752
+4 4 0.508428 0.424391 0.421033
+5 1 0.509443 0.417821 0.304289
+6 4 0.402938 0.421947 0.256202
+7 4 0.249552 0.438506 0.470874
+8 4 0.51306 0.322397 0.474066
+9 4 0.358465 0.318887 0.230973
+10 3 0.168729 0.418272 0.425168
+13 3 0.55398 0.248855 0.429933
+14 3 0.416957 0.24617 0.213023
+15 3 0.265737 0.311781 0.211421
+16 2 0.246632 0.485013 0.271848
+20 2 0.551742 0.487496 0.276177
+21 2 0.555252 0.350778 0.275974
+11 3 0.257617 0.421187 0.563967
+12 3 0.491964 0.317086 0.566575
+19 2 0.428521 0.490112 0.555005
+2 4 0.329203 0.502938 0.418526
+3 1 0.434247 0.500477 0.46983
+17 2 0.348953 0.575679 0.273088
+18 2 0.468702 0.578757 0.458916
+ITEM: TIMESTEP
+10
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.326608 0.497799 0.301796
+4 4 0.509047 0.424706 0.421159
+5 1 0.509378 0.418195 0.30433
+6 4 0.403081 0.422251 0.255579
+7 4 0.249271 0.43843 0.47105
+8 4 0.513202 0.322148 0.474253
+9 4 0.358356 0.318629 0.230768
+10 3 0.168648 0.41811 0.425345
+13 3 0.553897 0.248682 0.430113
+14 3 0.416761 0.245994 0.213026
+15 3 0.265742 0.311523 0.211429
+16 2 0.246958 0.484537 0.272224
+20 2 0.551782 0.487771 0.276191
+21 2 0.554731 0.350696 0.276375
+11 3 0.257418 0.421022 0.563961
+12 3 0.491975 0.316833 0.566569
+19 2 0.428303 0.489601 0.554577
+2 4 0.329007 0.503612 0.41864
+3 1 0.434338 0.500675 0.469516
+17 2 0.349179 0.57589 0.2731
+18 2 0.468779 0.578958 0.458727
+ITEM: TIMESTEP
+20
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.327232 0.497802 0.302068
+4 4 0.509935 0.425027 0.421406
+5 1 0.508975 0.418625 0.30459
+6 4 0.403251 0.422559 0.254659
+7 4 0.249268 0.438894 0.471023
+8 4 0.51358 0.322478 0.47425
+9 4 0.358506 0.318959 0.230424
+10 3 0.16851 0.417708 0.425778
+13 3 0.553644 0.248298 0.430546
+14 3 0.416258 0.245601 0.213081
+15 3 0.265797 0.310905 0.2115
+16 2 0.247627 0.485471 0.272048
+20 2 0.551392 0.488204 0.276441
+21 2 0.554913 0.351713 0.2762
+11 3 0.256954 0.420606 0.56389
+12 3 0.491979 0.316226 0.566508
+19 2 0.428654 0.490491 0.554061
+2 4 0.32863 0.504499 0.418865
+3 1 0.434319 0.500648 0.46888
+17 2 0.349815 0.575901 0.273369
+18 2 0.468778 0.57894 0.458118
+ITEM: TIMESTEP
+30
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.327152 0.498104 0.301881
+4 4 0.510181 0.425474 0.421312
+5 1 0.509279 0.418722 0.304416
+6 4 0.403465 0.423007 0.254455
+7 4 0.248819 0.439412 0.471254
+8 4 0.514291 0.322525 0.474545
+9 4 0.358537 0.319 0.229662
+10 3 0.16852 0.417275 0.426034
+13 3 0.553247 0.24802 0.430812
+14 3 0.415835 0.245307 0.213333
+15 3 0.265872 0.310432 0.211776
+16 2 0.247602 0.485874 0.27181
+20 2 0.550881 0.489024 0.276768
+21 2 0.555297 0.351903 0.275991
+11 3 0.256714 0.420178 0.563717
+12 3 0.491831 0.315759 0.566356
+19 2 0.428862 0.490762 0.554233
+2 4 0.32878 0.504988 0.418759
+3 1 0.434436 0.500921 0.469066
+17 2 0.350905 0.5761 0.273765
+18 2 0.468845 0.579092 0.457104
+ITEM: TIMESTEP
+40
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.327429 0.498468 0.3018
+4 4 0.509509 0.425182 0.421141
+5 1 0.509381 0.419121 0.304355
+6 4 0.40336 0.422734 0.255143
+7 4 0.248614 0.440186 0.471334
+8 4 0.515014 0.322904 0.474686
+9 4 0.358717 0.319379 0.22896
+10 3 0.168609 0.416969 0.425823
+13 3 0.552903 0.247872 0.430601
+14 3 0.415866 0.245146 0.213734
+15 3 0.26573 0.31039 0.212199
+16 2 0.247793 0.485681 0.271957
+20 2 0.552301 0.488274 0.27594
+21 2 0.554988 0.351771 0.276209
+11 3 0.256885 0.41986 0.563678
+12 3 0.491482 0.315709 0.566353
+19 2 0.428594 0.490502 0.554034
+2 4 0.329053 0.504291 0.418582
+3 1 0.43457 0.501235 0.468873
+17 2 0.349474 0.576628 0.272865
+18 2 0.469067 0.579609 0.458902
+ITEM: TIMESTEP
+50
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.326925 0.498436 0.301528
+4 4 0.509 0.425035 0.420987
+5 1 0.509724 0.41867 0.304158
+6 4 0.403321 0.422594 0.255677
+7 4 0.248321 0.440383 0.471478
+8 4 0.515334 0.322818 0.474887
+9 4 0.358684 0.319294 0.22862
+10 3 0.168879 0.416955 0.425261
+13 3 0.55266 0.248025 0.430059
+14 3 0.416244 0.245305 0.21418
+15 3 0.265578 0.310821 0.212667
+16 2 0.247483 0.485768 0.271684
+20 2 0.551538 0.488768 0.276386
+21 2 0.555312 0.351574 0.275962
+11 3 0.2574 0.41981 0.563631
+12 3 0.491115 0.316112 0.566341
+19 2 0.428647 0.490502 0.554443
+2 4 0.329301 0.503794 0.418392
+3 1 0.434537 0.501162 0.469467
+17 2 0.350474 0.576427 0.273298
+18 2 0.468964 0.579358 0.457882
+ITEM: TIMESTEP
+60
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.327058 0.497995 0.301769
+4 4 0.509231 0.424815 0.421196
+5 1 0.509351 0.418429 0.304417
+6 4 0.403254 0.422371 0.255384
+7 4 0.248666 0.440173 0.471222
+8 4 0.514913 0.322916 0.474652
+9 4 0.358727 0.319414 0.229155
+10 3 0.169105 0.417076 0.424867
+13 3 0.552527 0.248218 0.42973
+14 3 0.416483 0.245515 0.214438
+15 3 0.265546 0.311176 0.212951
+16 2 0.247647 0.486179 0.271548
+20 2 0.551221 0.488554 0.276654
+21 2 0.555529 0.351854 0.275991
+11 3 0.257718 0.419883 0.563518
+12 3 0.490989 0.316436 0.566299
+19 2 0.428739 0.490808 0.554335
+2 4 0.329 0.503768 0.418553
+3 1 0.434315 0.500681 0.469259
+17 2 0.350589 0.576047 0.273553
+18 2 0.468756 0.578935 0.457764
+ITEM: TIMESTEP
+70
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.327228 0.49794 0.30183
+4 4 0.510027 0.425014 0.421459
+5 1 0.509236 0.418488 0.304544
+6 4 0.403405 0.422581 0.254543
+7 4 0.248993 0.439189 0.470947
+8 4 0.513911 0.322519 0.474402
+9 4 0.358544 0.319031 0.230246
+10 3 0.169142 0.417237 0.424633
+13 3 0.552527 0.2483 0.429598
+14 3 0.416596 0.245628 0.214497
+15 3 0.265529 0.311369 0.213038
+16 2 0.247687 0.485106 0.272032
+20 2 0.551801 0.48801 0.276345
+21 2 0.554684 0.351123 0.276457
+11 3 0.257807 0.420002 0.563474
+12 3 0.491064 0.316618 0.566325
+19 2 0.428259 0.489637 0.554111
+2 4 0.328619 0.504475 0.418762
+3 1 0.434313 0.500596 0.469083
+17 2 0.349964 0.576075 0.273226
+18 2 0.468794 0.578958 0.458543
+ITEM: TIMESTEP
+80
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.32711 0.497758 0.301843
+4 4 0.510092 0.425389 0.421302
+5 1 0.509238 0.418223 0.304546
+6 4 0.40362 0.422989 0.254558
+7 4 0.249837 0.438431 0.470332
+8 4 0.512756 0.32259 0.47384
+9 4 0.358586 0.319167 0.231624
+10 3 0.169227 0.417323 0.42484
+13 3 0.552411 0.248378 0.429892
+14 3 0.416262 0.245739 0.214485
+15 3 0.265825 0.311236 0.213065
+16 2 0.247545 0.485205 0.271944
+20 2 0.55209 0.487535 0.276227
+21 2 0.554866 0.351083 0.276411
+11 3 0.257514 0.420042 0.563142
+12 3 0.491334 0.316488 0.566117
+19 2 0.428333 0.489771 0.554295
+2 4 0.328904 0.504773 0.418568
+3 1 0.434217 0.500401 0.469239
+17 2 0.349481 0.575935 0.27303
+18 2 0.468715 0.578816 0.459064
+ITEM: TIMESTEP
+90
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.326935 0.498273 0.301488
+4 4 0.509614 0.425531 0.421036
+5 1 0.509829 0.418404 0.304244
+6 4 0.403738 0.423173 0.2551
+7 4 0.250263 0.437831 0.469933
+8 4 0.512022 0.322505 0.47352
+9 4 0.35854 0.319109 0.232513
+10 3 0.169213 0.417294 0.424819
+13 3 0.552245 0.248284 0.430023
+14 3 0.416083 0.245763 0.214608
+15 3 0.265905 0.311107 0.213212
+16 2 0.247407 0.484796 0.27188
+20 2 0.552743 0.48764 0.275884
+21 2 0.554738 0.350576 0.276519
+11 3 0.257415 0.420002 0.562942
+12 3 0.491432 0.316414 0.565997
+19 2 0.428058 0.489335 0.55451
+2 4 0.329371 0.504557 0.418306
+3 1 0.43446 0.500917 0.469602
+17 2 0.34919 0.576466 0.272688
+18 2 0.46896 0.579319 0.459469
+ITEM: TIMESTEP
+100
+ITEM: NUMBER OF ATOMS
+21
+ITEM: BOX BOUNDS
+35 48
+35 48
+35 48
+ITEM: ATOMS
+1 1 0.327483 0.498915 0.301434
+4 4 0.509137 0.425356 0.420887
+5 1 0.509945 0.419177 0.304176
+6 4 0.4037 0.423015 0.255628
+7 4 0.250144 0.437683 0.469852
+8 4 0.511984 0.322312 0.473586
+9 4 0.358472 0.318975 0.232614
+10 3 0.169236 0.417105 0.424553
+13 3 0.551932 0.248123 0.429875
+14 3 0.416118 0.245651 0.214965
+15 3 0.265804 0.311083 0.213608
+16 2 0.24777 0.485768 0.271724
+20 2 0.553332 0.488017 0.275592
+21 2 0.555154 0.351523 0.2762
+11 3 0.257596 0.419852 0.562724
+12 3 0.491237 0.316397 0.566006
+19 2 0.428507 0.490218 0.55427
+2 4 0.329585 0.504077 0.41824
+3 1 0.434712 0.501501 0.469167
+17 2 0.349329 0.577108 0.272362
+18 2 0.469281 0.579959 0.459824
diff -Naur lammps-29Jan09/examples/reax/dump.reax.tatb lammps-12Feb09/examples/reax/dump.reax.tatb
--- lammps-29Jan09/examples/reax/dump.reax.tatb 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/dump.reax.tatb 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,786 @@
+ITEM: TIMESTEP
+0
+ITEM: NUMBER OF ATOMS
+384
+ITEM: BOX BOUNDS
+-12.0786 13.624
+0 24.5406
+0 15.1826
+ITEM: ATOMS
+7 2 -0.73103 8.7755 5.26339
+8 2 -0.19413 8.98399 3.21664
+13 4 -1.49808 10.4824 6.73385
+14 4 -0.69448 9.36219 4.20529
+21 3 -1.0628 9.24479 6.72301
+32 2 4.85261 2.71515 5.16529
+51 3 5.1844 2.24586 3.70568
+62 2 6.08097 8.7755 5.26339
+63 2 6.61787 8.98399 3.21664
+69 4 5.31392 10.4824 6.73385
+70 4 6.11752 9.36219 4.20529
+76 3 5.7492 9.24479 6.72301
+91 2 -1.95939 2.71515 5.16529
+106 3 -1.6276 2.24586 3.70568
+111 1 1.32797 2.69285 5.49299
+112 1 1.79894 2.10114 4.23735
+113 1 1.86797 2.91569 3.03061
+114 1 1.4088 4.30251 3.04
+116 1 0.86468 4.87989 4.28107
+117 1 0.85425 4.07676 5.51085
+120 2 1.88826 4.54219 0.98046
+121 2 1.02647 6.22461 2.00945
+122 2 -0.05338 5.73898 6.58776
+123 2 0.28092 3.86561 7.59092
+126 4 2.35858 2.31818 1.77786
+127 4 1.46348 5.0475 1.92669
+128 4 0.33453 6.22462 4.28105
+131 4 0.39163 4.60657 6.65589
+134 3 2.75401 1.07283 1.76565
+137 3 2.38915 3.05208 0.69873
+138 3 0.34402 6.95666 3.17908
+139 3 -0.1477 6.73881 5.39166
+140 1 2.79361 8.7978 4.93569
+143 1 2.32264 9.3895 6.19133
+144 1 2.25361 8.57496 7.39807
+145 1 2.71279 7.18814 7.38868
+146 1 3.25691 6.61076 6.14761
+147 1 3.26733 7.41389 4.91783
+149 2 1.43914 11.0641 7.21204
+152 2 4.17495 5.75167 3.84092
+153 2 3.84068 7.62504 2.83776
+154 4 2.74309 9.56567 3.69483
+155 4 1.93948 10.6859 6.22339
+158 4 3.78706 5.26603 6.14763
+159 4 3.72996 6.88408 3.77279
+160 3 3.16369 9.02281 2.57616
+165 3 3.77757 4.53399 7.24961
+166 3 4.26928 4.75184 5.03701
+167 1 8.13997 2.69285 5.49299
+168 1 8.61094 2.10114 4.23735
+169 1 8.67997 2.91569 3.03061
+170 1 8.2208 4.30251 3.04
+171 1 7.67668 4.87989 4.28107
+172 1 7.66625 4.07676 5.51085
+175 2 8.70026 4.54219 0.98046
+176 2 7.83847 6.22461 2.00945
+179 2 6.75862 5.73898 6.58776
+180 2 7.09292 3.86561 7.59092
+185 4 9.17058 2.31818 1.77786
+186 4 8.27548 5.0475 1.92669
+187 4 7.14653 6.22462 4.28105
+188 4 7.20363 4.60657 6.65589
+211 3 9.56601 1.07282 1.76565
+225 3 9.20115 3.05208 0.69872
+226 3 7.15602 6.95666 3.17908
+231 3 6.6643 6.73881 5.39166
+232 1 -4.01839 8.7978 4.93569
+237 1 -4.48936 9.3895 6.19133
+238 1 -4.55839 8.57496 7.39807
+259 1 -4.09921 7.18814 7.38868
+273 1 -3.55509 6.61076 6.14761
+274 1 -3.54467 7.41389 4.91783
+280 2 -5.37286 11.0641 7.21204
+307 2 -2.63705 5.75167 3.84092
+321 2 -2.97132 7.62504 2.83776
+322 4 -4.06891 9.56567 3.69483
+327 4 -4.87252 10.6859 6.22339
+334 4 -3.02494 5.26603 6.14763
+355 4 -3.08204 6.88408 3.77279
+369 3 -3.64831 9.02281 2.57616
+381 3 -3.03443 4.53399 7.24961
+382 3 -2.54272 4.75184 5.03701
+197 2 5.39606 3.2356 1.8569
+198 2 6.25786 1.55317 0.827911
+203 4 4.92575 5.4596 1.0595
+204 4 5.82085 2.73028 0.910671
+209 3 4.53031 6.70496 1.07171
+210 3 4.89517 4.7257 2.13863
+252 2 -1.41594 3.23559 1.8569
+253 2 -0.554144 1.55317 0.827911
+258 4 -1.88625 5.4596 1.0595
+260 4 -0.991154 2.73028 0.910671
+265 3 -2.28169 6.70496 1.07171
+266 3 -1.91683 4.72569 2.13863
+293 3 1.24407 7.31244 0.261201
+348 3 8.05607 7.31244 0.261201
+20 3 -1.91867 11.0253 7.85252
+75 3 4.89333 11.0253 7.85252
+150 2 2.23333 6.94846 9.44822
+151 2 3.09512 5.26603 8.41923
+156 4 1.76301 9.17246 8.65082
+157 4 2.65811 6.44315 8.50199
+162 3 1.36757 10.4178 8.66304
+164 3 1.73243 8.43856 9.72995
+285 2 -4.57867 6.94846 9.44822
+286 2 -3.71688 5.26603 8.41923
+328 4 -5.04899 9.17246 8.65082
+333 4 -4.15389 6.44315 8.50199
+375 3 -5.44443 10.4178 8.66304
+376 3 -5.07957 8.43856 9.72995
+19 1 -1.83476 6.40572 13.0843
+33 1 -1.36379 5.81401 11.8287
+34 1 -1.29476 6.62855 10.6219
+39 1 -1.75393 8.01538 10.6313
+40 1 -2.29804 8.59276 11.8724
+45 1 -2.30848 7.78962 13.1022
+81 2 -1.27447 8.25505 8.57178
+82 2 -2.13625 9.93748 9.60077
+87 2 -3.2161 9.45185 14.1791
+88 2 -2.88181 7.57848 15.1822
+115 4 -0.80415 6.03105 9.36918
+129 4 -1.69925 8.76036 9.51801
+130 4 -2.8282 9.93748 11.8724
+135 4 -2.7711 8.31943 14.2472
+142 3 -0.40872 4.78569 9.35697
+163 3 -0.77358 6.76495 8.29004
+177 3 -2.81871 10.6695 10.7704
+178 3 -3.31042 10.4517 12.983
+183 1 -0.36911 12.5107 12.527
+184 1 -0.840076 13.1024 13.7827
+189 1 -0.909116 12.2878 14.9894
+190 1 -0.44994 10.901 14.98
+193 1 0.09418 10.3236 13.7389
+194 1 0.10461 11.1267 12.5091
+196 2 -1.7236 14.777 14.8034
+199 2 1.01223 9.46454 11.4322
+200 2 0.67795 11.3379 10.4291
+201 4 -0.41963 13.2785 11.2861
+202 4 -1.22324 14.3988 13.8147
+205 4 0.62433 8.97889 13.739
+206 4 0.56724 10.5969 11.3641
+207 3 0.00096 12.7357 10.1675
+212 3 0.61484 8.24685 14.8409
+213 3 1.10655 8.4647 12.6283
+214 1 4.97724 6.40572 13.0843
+215 1 5.44821 5.81401 11.8287
+216 1 5.51724 6.62855 10.6219
+217 1 5.05807 8.01538 10.6313
+218 1 4.51396 8.59276 11.8724
+219 1 4.50352 7.78962 13.1022
+222 2 5.53753 8.25505 8.57178
+223 2 4.67575 9.93748 9.60077
+224 2 3.5959 9.45185 14.1791
+227 2 3.93019 7.57848 15.1822
+230 4 6.00785 6.03105 9.36918
+233 4 5.11275 8.76036 9.51801
+234 4 3.9838 9.93748 11.8724
+235 4 4.0409 8.31943 14.2472
+240 3 6.40328 4.78569 9.35697
+241 3 6.03842 6.76495 8.29004
+242 3 3.99329 10.6695 10.7704
+243 3 3.50158 10.4517 12.983
+244 1 -7.18111 12.5107 12.527
+245 1 -7.65208 13.1024 13.7827
+246 1 -7.72112 12.2878 14.9894
+247 1 -7.26194 10.901 14.98
+248 1 -6.71782 10.3236 13.7389
+249 1 -6.70739 11.1267 12.5091
+251 2 -8.5356 14.777 14.8034
+254 2 -5.79977 9.46454 11.4322
+255 2 -6.13405 11.3379 10.4291
+256 4 -7.23163 13.2785 11.2861
+257 4 -8.03524 14.3988 13.8147
+261 4 -6.18767 8.97889 13.739
+262 4 -6.24476 10.5969 11.3641
+263 3 -6.81104 12.7357 10.1675
+267 3 -6.19716 8.24685 14.8409
+268 3 -5.70545 8.4647 12.6283
+277 2 -3.89375 12.4884 12.8547
+278 2 -3.35686 12.6969 10.808
+287 4 -4.66081 14.1953 14.3252
+288 4 -3.8572 13.0751 11.7966
+294 3 -4.22553 12.9577 14.3143
+305 2 1.68988 6.42801 12.7566
+319 3 2.02166 5.95873 11.297
+336 2 2.91825 12.4884 12.8547
+337 2 3.45514 12.6969 10.808
+342 4 2.15119 14.1953 14.3252
+343 4 2.95479 13.0751 11.7966
+349 3 2.58647 12.9577 14.3143
+361 2 -5.12212 6.42801 12.7566
+378 3 -4.79034 5.95873 11.297
+1 1 -1.54861 11.2503 5.49299
+2 1 -1.07764 10.6586 4.23736
+3 1 -1.00861 11.4731 3.03061
+4 1 -1.46778 12.86 3.04
+5 1 -2.01189 13.4374 4.28107
+6 1 -2.02233 12.6342 5.51085
+9 2 -0.98832 13.0996 0.98046
+10 2 -1.8501 14.7821 2.00945
+11 2 -2.92995 14.2964 6.58777
+12 2 -2.59566 12.4231 7.59092
+15 4 -0.518 10.8756 1.77786
+16 4 -1.4131 13.605 1.92669
+17 4 -2.54205 14.7821 4.28105
+18 4 -2.48495 13.164 6.65589
+22 3 -0.12257 9.63028 1.76565
+23 3 -0.48743 11.6095 0.69872
+24 3 -2.53256 15.5141 3.17907
+25 3 -3.02427 15.2963 5.39167
+26 1 -0.08296 17.3553 4.93569
+27 1 -0.553926 17.947 6.19132
+28 1 -0.622966 17.1324 7.39807
+29 1 -0.16379 15.7456 7.38868
+30 1 0.38033 15.1682 6.14761
+31 1 0.39076 15.9713 4.91783
+35 2 -1.43745 19.6216 7.21204
+38 2 1.29838 14.3091 3.84092
+41 2 0.9641 16.1825 2.83776
+42 4 -0.13348 18.1231 3.69483
+43 4 -0.937086 19.2434 6.22339
+48 4 0.91048 13.8235 6.14763
+49 4 0.85339 15.4415 3.77279
+50 3 0.28711 17.5803 2.57616
+54 3 0.90099 13.0914 7.2496
+55 3 1.3927 13.3093 5.03702
+56 1 5.26339 11.2503 5.49299
+57 1 5.73436 10.6586 4.23736
+58 1 5.80339 11.4731 3.03061
+59 1 5.34422 12.86 3.04
+60 1 4.80011 13.4374 4.28107
+61 1 4.78967 12.6342 5.51085
+64 2 5.82368 13.0996 0.98046
+65 2 4.9619 14.7821 2.00945
+66 2 3.88205 14.2964 6.58777
+68 2 4.21634 12.4231 7.59092
+71 4 6.294 10.8756 1.77786
+72 4 5.3989 13.605 1.92669
+73 4 4.26995 14.7821 4.28105
+74 4 4.32705 13.164 6.65589
+77 3 6.68943 9.63028 1.76565
+78 3 6.32457 11.6095 0.69872
+79 3 4.27944 15.5141 3.17907
+80 3 3.78773 15.2963 5.39167
+83 1 -6.89496 17.3553 4.93569
+84 1 -7.36593 17.947 6.19132
+85 1 -7.43497 17.1324 7.39807
+86 1 -6.97579 15.7456 7.38868
+89 1 -6.43167 15.1682 6.14761
+90 1 -6.42124 15.9713 4.91783
+92 2 -8.24945 19.6216 7.21204
+97 2 -5.51362 14.3091 3.84092
+98 2 -5.8479 16.1825 2.83776
+99 4 -6.94548 18.1231 3.69483
+100 4 -7.74909 19.2434 6.22339
+103 4 -5.90152 13.8235 6.14763
+104 4 -5.95861 15.4415 3.77279
+105 3 -6.52489 17.5803 2.57616
+109 3 -5.91101 13.0914 7.2496
+110 3 -5.4193 13.3093 5.03701
+118 2 -3.6076 17.333 5.26338
+119 2 -3.07071 17.5415 3.21664
+124 4 -4.37466 19.0399 6.73385
+125 4 -3.57105 17.9197 4.20529
+133 3 -3.93938 17.8022 6.723
+148 2 1.97603 11.2726 5.16529
+161 3 2.30781 10.8033 3.70567
+173 2 3.2044 17.333 5.26338
+174 2 3.74129 17.5415 3.21664
+181 4 2.43734 19.0399 6.73385
+182 4 3.24095 17.9197 4.20529
+192 3 2.87262 17.8022 6.723
+279 2 -4.83597 11.2726 5.16529
+370 3 -4.50419 10.8033 3.70567
+136 3 -1.63251 15.8699 0.261201
+236 3 5.17949 15.8699 0.261201
+308 2 2.51949 11.7931 1.8569
+309 2 3.38128 10.1106 0.827911
+314 4 2.04917 14.0171 1.0595
+315 4 2.94427 11.2877 0.910671
+320 3 1.65373 15.2624 1.07172
+323 3 2.01859 13.2832 2.13863
+363 2 -4.29251 11.7931 1.8569
+364 2 -3.43072 10.1106 0.827911
+371 4 -4.76283 14.0171 1.0595
+372 4 -3.86773 11.2877 0.910671
+379 3 -5.15827 15.2624 1.07172
+380 3 -4.79341 13.2832 2.13863
+36 2 -0.643256 15.5059 9.44822
+37 2 0.21854 13.8235 8.41923
+44 4 -1.11357 17.7299 8.65082
+47 4 -0.21847 15.0006 8.50199
+52 3 -1.50901 18.9753 8.66303
+53 3 -1.14415 16.996 9.72995
+95 2 -7.45526 15.5059 9.44822
+96 2 -6.59346 13.8235 8.41923
+101 4 -7.92557 17.7299 8.65082
+102 4 -7.03047 15.0006 8.50199
+107 3 -8.32101 18.9753 8.66303
+108 3 -7.95615 16.996 9.72995
+132 3 -4.79525 19.5828 7.85252
+191 3 2.01675 19.5828 7.85252
+46 2 -6.77034 21.0458 12.8547
+67 2 -6.23344 21.2543 10.808
+93 4 -7.53739 22.7528 14.3252
+94 4 -6.73379 21.6325 11.7966
+141 3 -7.10211 21.5151 14.3143
+195 2 -1.1867 14.9855 12.7566
+208 3 -0.854906 14.5162 11.297
+220 2 0.0416637 21.0458 12.8547
+221 2 0.578564 21.2543 10.808
+228 4 -0.725386 22.7528 14.3252
+229 4 0.0782137 21.6325 11.7966
+239 3 -0.290106 21.5151 14.3143
+250 2 -7.9987 14.9855 12.7566
+264 3 -7.66691 14.5162 11.297
+269 1 -4.71134 14.9632 13.0843
+270 1 -4.24037 14.3715 11.8287
+271 1 -4.17134 15.186 10.6219
+272 1 -4.63051 16.5728 10.6313
+275 1 -5.17463 17.1502 11.8724
+276 1 -5.18506 16.3471 13.1022
+281 2 -4.15105 16.8125 8.57178
+282 2 -5.01284 18.4949 9.60077
+283 2 -6.09268 18.0093 14.1791
+284 2 -5.75839 16.1359 15.1822
+289 4 -3.68073 14.5885 9.36918
+290 4 -4.57583 17.3178 9.51801
+291 4 -5.70478 18.4949 11.8724
+292 4 -5.64768 16.8769 14.2472
+295 3 -3.2853 13.3432 9.35697
+296 3 -3.65016 15.3224 8.29004
+297 3 -5.69529 19.227 10.7704
+298 3 -6.18701 19.0091 12.983
+299 1 -3.2457 21.0681 12.527
+300 1 -3.71667 21.6598 13.7827
+301 1 -3.7857 20.8453 14.9894
+302 1 -3.32652 19.4585 14.98
+303 1 -2.7824 18.8811 13.7389
+304 1 -2.77198 19.6842 12.5091
+306 2 -4.60017 23.3344 14.8034
+310 2 -1.86436 18.022 11.4322
+311 2 -2.19863 19.8954 10.4291
+312 4 -3.29622 21.836 11.2861
+313 4 -4.09983 22.9562 13.8147
+316 4 -2.25225 17.5364 13.739
+317 4 -2.30935 19.1544 11.3641
+318 3 -2.87562 21.2931 10.1675
+324 3 -2.26174 16.8043 14.8409
+325 3 -1.77003 17.0222 12.6283
+326 1 2.10066 14.9632 13.0843
+329 1 2.57163 14.3715 11.8287
+330 1 2.64066 15.186 10.6219
+331 1 2.18149 16.5728 10.6313
+332 1 1.63737 17.1502 11.8724
+335 1 1.62694 16.3471 13.1022
+338 2 2.66095 16.8125 8.57178
+339 2 1.79916 18.4949 9.60077
+340 2 0.719314 18.0093 14.1791
+341 2 1.05361 16.1359 15.1822
+344 4 3.13127 14.5885 9.36918
+345 4 2.23617 17.3178 9.51801
+346 4 1.10722 18.4949 11.8724
+347 4 1.16432 16.8769 14.2472
+350 3 3.5267 13.3432 9.35697
+351 3 3.16184 15.3224 8.29004
+352 3 1.11671 19.227 10.7704
+353 3 0.624994 19.0091 12.983
+354 1 -10.0577 21.0681 12.527
+356 1 -10.5287 21.6598 13.7827
+357 1 -10.5977 20.8453 14.9894
+358 1 -10.1385 19.4585 14.98
+359 1 -9.5944 18.8811 13.7389
+360 1 -9.58398 19.6842 12.5091
+362 2 -11.4122 23.3344 14.8034
+365 2 -8.67636 18.022 11.4322
+366 2 -9.01063 19.8954 10.4291
+367 4 -10.1082 21.836 11.2861
+368 4 -10.9118 22.9562 13.8147
+373 4 -9.06425 17.5364 13.739
+374 4 -9.12135 19.1544 11.3641
+377 3 -9.68762 21.2931 10.1675
+383 3 -9.07374 16.8043 14.8409
+384 3 -8.58203 17.0222 12.6283
+ITEM: TIMESTEP
+25
+ITEM: NUMBER OF ATOMS
+384
+ITEM: BOX BOUNDS
+-12.0786 13.624
+0 24.5406
+0 15.1826
+ITEM: ATOMS
+7 2 -0.736195 8.77832 5.29684
+8 2 -0.190919 8.99287 3.17605
+13 4 -1.49785 10.4746 6.74655
+14 4 -0.692656 9.35602 4.20509
+21 3 -1.06488 9.25084 6.72231
+32 2 4.85777 2.71233 5.13185
+51 3 5.18648 2.23981 3.70638
+62 2 6.0758 8.77832 5.29684
+63 2 6.62108 8.99287 3.17605
+69 4 5.31415 10.4746 6.74655
+70 4 6.11934 9.35602 4.20509
+76 3 5.74712 9.25084 6.72231
+91 2 -1.95423 2.71233 5.13185
+106 3 -1.62552 2.23981 3.70638
+227 2 10.2696 0.120702 0.0137087
+112 1 1.80159 2.09155 4.23712
+113 1 1.87248 2.91095 3.02055
+114 1 1.4094 4.30795 3.03197
+116 1 0.860846 4.89034 4.28111
+117 1 0.851031 4.08058 5.51937
+120 2 1.90516 4.50173 0.962498
+121 2 1.02131 6.23943 2.01549
+122 2 -0.0581547 5.76197 6.57081
+348 3 8.05782 7.31058 0.255275
+126 4 2.36349 2.31238 1.7655
+127 4 1.46404 5.05077 1.92095
+128 4 0.328952 6.23892 4.28118
+131 4 0.389167 4.60919 6.66168
+134 3 2.75185 1.07894 1.76683
+137 3 2.38854 3.04961 0.704654
+138 3 0.343596 6.95351 3.18484
+139 3 -0.145357 6.73609 5.38672
+140 1 2.79372 8.80429 4.926
+143 1 2.31999 9.39909 6.19156
+144 1 2.2491 8.5797 7.40813
+145 1 2.71219 7.18271 7.39671
+146 1 3.26074 6.60031 6.14757
+147 1 3.27055 7.41007 4.90931
+149 2 1.43593 11.0552 7.25263
+152 2 4.17973 5.72869 3.85787
+153 2 3.82675 7.65709 2.82365
+154 4 2.74286 9.57355 3.68212
+155 4 1.93766 10.6921 6.22359
+158 4 3.79264 5.25173 6.1475
+159 4 3.73242 6.88146 3.767
+160 3 3.16194 9.02467 2.58209
+165 3 3.77799 4.53714 7.24385
+166 3 4.26694 4.75456 5.04195
+88 2 3.45758 0.120702 0.0137087
+168 1 8.61359 2.09155 4.23712
+169 1 8.68448 2.91095 3.02055
+170 1 8.2214 4.30795 3.03197
+171 1 7.67285 4.89034 4.28111
+172 1 7.66303 4.08058 5.51937
+175 2 8.71716 4.50173 0.962497
+176 2 7.83331 6.23943 2.01549
+179 2 6.75385 5.76197 6.57081
+293 3 1.24582 7.31058 0.255275
+185 4 9.1755 2.31238 1.7655
+186 4 8.27604 5.05077 1.92095
+187 4 7.14095 6.23892 4.28118
+188 4 7.20117 4.60919 6.66168
+211 3 9.56385 1.07893 1.76683
+225 3 9.20054 3.04961 0.704646
+226 3 7.1556 6.95351 3.18484
+231 3 6.66664 6.73609 5.38672
+232 1 -4.01828 8.80429 4.926
+237 1 -4.49201 9.39909 6.19156
+238 1 -4.5629 8.5797 7.40813
+259 1 -4.09981 7.18271 7.39671
+273 1 -3.55126 6.60031 6.14757
+274 1 -3.54145 7.41007 4.90931
+280 2 -5.37607 11.0552 7.25263
+307 2 -2.63227 5.72869 3.85787
+321 2 -2.98525 7.65709 2.82365
+322 4 -4.06914 9.57355 3.68212
+327 4 -4.87434 10.6921 6.22359
+334 4 -3.01936 5.25173 6.1475
+355 4 -3.07958 6.88146 3.767
+369 3 -3.65006 9.02467 2.58209
+381 3 -3.03401 4.53714 7.24385
+382 3 -2.54506 4.75456 5.04195
+197 2 5.37916 3.27605 1.87486
+198 2 6.26302 1.53835 0.821868
+203 4 4.92083 5.4654 1.07186
+204 4 5.82029 2.72701 0.91641
+209 3 4.53247 6.69885 1.07053
+210 3 4.89577 4.72817 2.13271
+252 2 -1.43284 3.27604 1.87486
+253 2 -0.548982 1.53835 0.821868
+258 4 -1.89117 5.4654 1.07186
+260 4 -0.991711 2.72701 0.91641
+265 3 -2.27953 6.69885 1.07053
+266 3 -1.91623 4.72816 2.13271
+1 1 -1.54872 11.2438 5.50269
+56 1 5.26328 11.2438 5.50269
+20 3 -1.91692 11.0234 7.84659
+75 3 4.89508 11.0234 7.84659
+150 2 2.21643 6.98892 9.46618
+151 2 3.10028 5.25121 8.41319
+156 4 1.75809 9.17826 8.66318
+157 4 2.65755 6.43988 8.50773
+162 3 1.36973 10.4117 8.66185
+164 3 1.73303 8.44104 9.72402
+285 2 -4.59557 6.98892 9.46618
+286 2 -3.71172 5.25121 8.41319
+328 4 -5.05391 9.17826 8.66318
+333 4 -4.15445 6.43988 8.50773
+375 3 -5.44227 10.4117 8.66185
+376 3 -5.07897 8.44104 9.72402
+180 2 7.10685 3.83356 7.60503
+33 1 -1.36114 5.80442 11.8285
+34 1 -1.29025 6.62381 10.6119
+39 1 -1.75333 8.02082 10.6233
+40 1 -2.30187 8.60321 11.8724
+45 1 -2.3117 7.79343 13.1107
+81 2 -1.25757 8.21459 8.55382
+82 2 -2.14141 9.9523 9.60681
+87 2 -3.22087 9.47483 14.1621
+378 3 -4.78826 5.95268 11.2977
+115 4 -0.799231 6.02525 9.35682
+129 4 -1.69869 8.76363 9.51227
+130 4 -2.83378 9.95178 11.8725
+135 4 -2.77356 8.32205 14.253
+142 3 -0.410876 4.7918 9.35815
+163 3 -0.774183 6.76247 8.29597
+177 3 -2.81913 10.6664 10.7762
+178 3 -3.30808 10.4489 12.978
+183 1 -0.369003 12.5172 12.5173
+184 1 -0.842727 13.112 13.7829
+189 1 -0.913624 12.2926 14.9995
+190 1 -0.450541 10.8956 14.988
+193 1 0.0980141 10.3132 13.7389
+194 1 0.107829 11.1229 12.5006
+196 2 -1.72681 14.7681 14.8439
+199 2 1.01701 9.44155 11.4492
+200 2 0.664023 11.3699 10.415
+201 4 -0.419862 13.2864 11.2734
+202 4 -1.22506 14.4049 13.8149
+205 4 0.629908 8.96459 13.7388
+206 4 0.569703 10.5943 11.3583
+207 3 -0.000792083 12.7375 10.1734
+212 3 0.615264 8.25 14.8352
+213 3 1.10421 8.46742 12.6333
+123 2 0.294847 3.83356 7.60503
+215 1 5.45086 5.80442 11.8285
+216 1 5.52175 6.62381 10.6119
+217 1 5.05867 8.02082 10.6233
+218 1 4.51013 8.60321 11.8724
+219 1 4.5003 7.79343 13.1107
+222 2 5.55443 8.21459 8.55382
+223 2 4.67059 9.9523 9.60681
+224 2 3.59113 9.47483 14.1621
+361 2 -5.11695 6.42519 12.7232
+230 4 6.01277 6.02525 9.35682
+233 4 5.11331 8.76363 9.51227
+234 4 3.97822 9.95178 11.8725
+235 4 4.03844 8.32205 14.253
+240 3 6.40112 4.7918 9.35815
+241 3 6.03782 6.76247 8.29597
+242 3 3.99287 10.6664 10.7762
+243 3 3.50392 10.4489 12.978
+244 1 -7.181 12.5172 12.5173
+245 1 -7.65473 13.112 13.7829
+246 1 -7.72562 12.2926 14.9995
+247 1 -7.26254 10.8956 14.988
+248 1 -6.71399 10.3132 13.7389
+249 1 -6.70417 11.1229 12.5006
+251 2 -8.53881 14.7681 14.8439
+254 2 -5.79499 9.44155 11.4492
+255 2 -6.14798 11.3699 10.415
+256 4 -7.23186 13.2864 11.2734
+257 4 -8.03706 14.4049 13.8149
+261 4 -6.18209 8.96459 13.7388
+262 4 -6.2423 10.5943 11.3583
+263 3 -6.81279 12.7375 10.1734
+267 3 -6.19674 8.25 14.8352
+268 3 -5.70779 8.46742 12.6333
+277 2 -3.89891 12.4912 12.8881
+278 2 -3.35365 12.7057 10.7674
+287 4 -4.66057 14.1874 14.3379
+288 4 -3.85538 13.0689 11.7964
+294 3 -4.2276 12.9637 14.3136
+305 2 1.69505 6.42519 12.7232
+319 3 2.02374 5.95268 11.2977
+336 2 2.91308 12.4912 12.8881
+337 2 3.45835 12.7057 10.7674
+342 4 2.15143 14.1874 14.3379
+343 4 2.95661 13.0689 11.7964
+349 3 2.5844 12.9637 14.3136
+269 1 -4.71144 14.9567 13.094
+326 1 2.10056 14.9567 13.094
+341 2 7.39301 8.67816 0.0137082
+2 1 -1.07499 10.649 4.23714
+3 1 -1.0041 11.4684 3.02055
+4 1 -1.46718 12.8654 3.03197
+5 1 -2.01572 13.4478 4.28111
+6 1 -2.02555 12.638 5.51937
+9 2 -0.971422 13.0592 0.962498
+10 2 -1.85526 14.7969 2.01549
+11 2 -2.93472 14.3194 6.57082
+380 3 -4.79281 13.2856 2.13271
+15 4 -0.513081 10.8698 1.7655
+16 4 -1.41254 13.6082 1.92095
+17 4 -2.54763 14.7964 4.28118
+18 4 -2.48741 13.1666 6.66168
+22 3 -0.124726 9.63639 1.76683
+23 3 -0.488033 11.6071 0.704645
+24 3 -2.53298 15.511 3.18483
+25 3 -3.02193 15.2935 5.38673
+26 1 -0.0828531 17.3617 4.92599
+27 1 -0.556576 17.9566 6.19154
+28 1 -0.627474 17.1372 7.40813
+29 1 -0.16439 15.7402 7.39671
+30 1 0.384164 15.1578 6.14757
+31 1 0.393979 15.9675 4.90931
+35 2 -1.44066 19.6127 7.25263
+38 2 1.30316 14.2861 3.85787
+41 2 0.950173 16.2145 2.82365
+42 4 -0.133712 18.131 3.68212
+43 4 -0.938911 19.2495 6.22359
+48 4 0.916058 13.8092 6.1475
+49 4 0.855853 15.4389 3.767
+50 3 0.285358 17.5821 2.58209
+54 3 0.901414 13.0946 7.24384
+55 3 1.39036 13.312 5.04196
+284 2 0.581007 8.67816 0.0137082
+57 1 5.73701 10.649 4.23714
+58 1 5.8079 11.4684 3.02055
+59 1 5.34482 12.8654 3.03197
+60 1 4.79628 13.4478 4.28111
+61 1 4.78645 12.638 5.51937
+64 2 5.84058 13.0592 0.962498
+65 2 4.95674 14.7969 2.01549
+66 2 3.87728 14.3194 6.57082
+379 3 -5.15611 15.2563 1.07054
+71 4 6.29892 10.8698 1.7655
+72 4 5.39946 13.6082 1.92095
+73 4 4.26437 14.7964 4.28118
+74 4 4.32459 13.1666 6.66168
+77 3 6.68727 9.63639 1.76683
+78 3 6.32397 11.6071 0.704645
+79 3 4.27902 15.511 3.18483
+80 3 3.79007 15.2935 5.38673
+83 1 -6.89485 17.3617 4.92599
+84 1 -7.36858 17.9566 6.19154
+85 1 -7.43947 17.1372 7.40813
+86 1 -6.97639 15.7402 7.39671
+89 1 -6.42784 15.1578 6.14757
+90 1 -6.41802 15.9675 4.90931
+92 2 -8.25266 19.6127 7.25263
+97 2 -5.50884 14.2861 3.85787
+98 2 -5.86183 16.2145 2.82365
+99 4 -6.94571 18.131 3.68213
+100 4 -7.75091 19.2495 6.22359
+103 4 -5.89594 13.8092 6.1475
+104 4 -5.95615 15.4389 3.767
+105 3 -6.52664 17.5821 2.58209
+109 3 -5.91059 13.0946 7.24384
+110 3 -5.42164 13.312 5.04195
+118 2 -3.61276 17.3358 5.29682
+119 2 -3.0675 17.5503 3.17605
+124 4 -4.37442 19.032 6.74656
+125 4 -3.56923 17.9135 4.20509
+133 3 -3.94145 17.8083 6.7223
+148 2 1.9812 11.2698 5.13184
+161 3 2.30989 10.7973 3.70637
+173 2 3.19924 17.3358 5.29682
+174 2 3.7445 17.5503 3.17605
+181 4 2.43758 19.032 6.74656
+182 4 3.24277 17.9135 4.20509
+192 3 2.87055 17.8083 6.7223
+279 2 -4.8308 11.2698 5.13184
+370 3 -4.50211 10.7973 3.70637
+136 3 -1.63076 15.868 0.255274
+236 3 5.18124 15.868 0.255274
+308 2 2.50259 11.8335 1.87486
+309 2 3.38644 10.0958 0.821874
+314 4 2.04425 14.0229 1.07186
+315 4 2.94371 11.2845 0.91641
+320 3 1.65589 15.2563 1.07054
+323 3 2.01919 13.2856 2.13271
+363 2 -4.30941 11.8335 1.87486
+364 2 -3.42556 10.0958 0.821874
+371 4 -4.76775 14.0229 1.07186
+372 4 -3.86829 11.2845 0.91641
+111 1 -4.42529 19.8013 5.50268
+167 1 2.38671 19.8013 5.50268
+36 2 -0.660154 15.5464 9.46618
+37 2 0.223702 13.8087 8.41319
+44 4 -1.11849 17.7357 8.66318
+47 4 -0.219027 14.9973 8.50773
+52 3 -1.50685 18.9692 8.66185
+53 3 -1.14354 16.9985 9.72403
+95 2 -7.47215 15.5464 9.46618
+96 2 -6.5883 13.8087 8.41319
+101 4 -7.93049 17.7357 8.66318
+102 4 -7.03103 14.9973 8.50773
+107 3 -8.31885 18.9692 8.66185
+108 3 -7.95554 16.9985 9.72403
+132 3 -4.79349 19.5809 7.84659
+191 3 2.01851 19.5809 7.84659
+46 2 -6.7755 21.0486 12.8882
+67 2 -6.23023 21.2632 10.7674
+93 4 -7.53715 22.7449 14.3379
+94 4 -6.73196 21.6263 11.7964
+141 3 -7.10418 21.5212 14.3136
+195 2 -1.18153 14.9827 12.7232
+208 3 -0.85283 14.5101 11.2977
+220 2 0.0364986 21.0486 12.8882
+221 2 0.581775 21.2632 10.7674
+228 4 -0.725154 22.7449 14.3379
+229 4 0.0800379 21.6263 11.7964
+239 3 -0.292183 21.5212 14.3136
+250 2 -7.99353 14.9827 12.7232
+264 3 -7.66483 14.5101 11.2977
+68 2 4.23027 12.391 7.60503
+270 1 -4.23772 14.3619 11.8284
+271 1 -4.16683 15.1813 10.6119
+272 1 -4.62991 16.5783 10.6233
+275 1 -5.17846 17.1607 11.8724
+276 1 -5.18828 16.3509 13.1107
+281 2 -4.13415 16.7721 8.55382
+282 2 -5.018 18.5098 9.60681
+283 2 -6.09745 18.0323 14.1621
+384 3 -8.58437 17.0249 12.6333
+289 4 -3.67581 14.5827 9.35682
+290 4 -4.57527 17.3211 9.51227
+291 4 -5.71035 18.5092 11.8725
+292 4 -5.65014 16.8795 14.253
+295 3 -3.28746 13.3493 9.35815
+296 3 -3.65076 15.3199 8.29597
+297 3 -5.69571 19.2238 10.7762
+298 3 -6.18466 19.0064 12.978
+299 1 -3.24559 21.0746 12.5173
+300 1 -3.71932 21.6694 13.7829
+301 1 -3.7902 20.85 14.9995
+302 1 -3.32712 19.453 14.988
+303 1 -2.77856 18.8706 13.7389
+304 1 -2.76876 19.6804 12.5006
+306 2 -4.60338 23.3255 14.844
+310 2 -1.85958 17.999 11.4492
+311 2 -2.21255 19.9274 10.415
+312 4 -3.29645 21.8439 11.2734
+313 4 -4.10165 22.9624 13.8149
+316 4 -2.24667 17.5221 13.7388
+317 4 -2.30688 19.1518 11.3583
+318 3 -2.87737 21.295 10.1734
+324 3 -2.26131 16.8075 14.8352
+325 3 -1.77237 17.0249 12.6333
+12 2 -2.58173 12.391 7.60503
+329 1 2.57428 14.3619 11.8284
+330 1 2.64517 15.1813 10.6119
+331 1 2.18209 16.5783 10.6233
+332 1 1.63354 17.1607 11.8724
+335 1 1.62372 16.3509 13.1107
+338 2 2.67785 16.7721 8.55382
+339 2 1.794 18.5098 9.60681
+340 2 0.714539 18.0323 14.1621
+383 3 -9.07331 16.8075 14.8352
+344 4 3.13619 14.5827 9.35682
+345 4 2.23673 17.3211 9.51227
+346 4 1.10165 18.5092 11.8725
+347 4 1.16186 16.8795 14.253
+350 3 3.52454 13.3493 9.35815
+351 3 3.16124 15.3199 8.29597
+352 3 1.11629 19.2238 10.7762
+353 3 0.627336 19.0064 12.978
+354 1 -10.0576 21.0746 12.5173
+356 1 -10.5313 21.6694 13.7829
+357 1 -10.6022 20.85 14.9995
+358 1 -10.1391 19.453 14.988
+359 1 -9.59056 18.8706 13.7389
+360 1 -9.58076 19.6804 12.5006
+362 2 -11.4154 23.3255 14.844
+365 2 -8.67158 17.999 11.4492
+366 2 -9.02455 19.9274 10.415
+367 4 -10.1084 21.8439 11.2734
+368 4 -10.9137 22.9624 13.8149
+373 4 -9.05867 17.5221 13.7388
+374 4 -9.11888 19.1518 11.3583
+377 3 -9.68937 21.295 10.1734
+19 1 -7.58802 23.5141 13.094
+214 1 -0.776023 23.5141 13.094
diff -Naur lammps-29Jan09/examples/reax/ffield.reax lammps-12Feb09/examples/reax/ffield.reax
--- lammps-29Jan09/examples/reax/ffield.reax 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/ffield.reax 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,210 @@
+Reactive MD-force field
+ 39 ! Number of general parameters
+ 50.0000 !Overcoordination parameter
+ 9.5469 !Overcoordination parameter
+ 127.8302 !Valency angle conjugation parameter
+ 3.0000 !Triple bond stabilisation parameter
+ 6.5000 !Triple bond stabilisation parameter
+ 0.0000 !C2-correction
+ 1.0496 !Undercoordination parameter
+ 9.0000 !Triple bond stabilisation parameter
+ 11.5054 !Undercoordination parameter
+ 13.4059 !Undercoordination parameter
+ 0.0000 !Triple bond stabilization energy
+ 0.0000 !Lower Taper-radius
+ 10.0000 !Upper Taper-radius
+ 2.8793 !Not used
+ 33.8667 !Valency undercoordination
+ 7.0994 !Valency angle/lone pair parameter
+ 1.0563 !Valency angle
+ 2.0384 !Valency angle parameter
+ 6.1431 !Not used
+ 6.9290 !Double bond/angle parameter
+ 0.3989 !Double bond/angle parameter: overcoord
+ 3.9954 !Double bond/angle parameter: overcoord
+ -2.4837 !Not used
+ 5.7796 !Torsion/BO parameter
+ 10.0000 !Torsion overcoordination
+ 1.9487 !Torsion overcoordination
+ -1.2327 !Conjugation 0 (not used)
+ 2.1645 !Conjugation
+ 1.5591 !vdWaals shielding
+ 0.1000 !Cutoff for bond order (*100)
+ 2.0038 !Valency angle conjugation parameter
+ 0.6121 !Overcoordination parameter
+ 1.2172 !Overcoordination parameter
+ 1.8512 !Valency/lone pair parameter
+ 0.5000 !Not used
+ 20.0000 !Not used
+ 5.0000 !Molecular energy (not used)
+ 0.0000 !Molecular energy (not used)
+ 3.6942 !Valency angle conjugation parameter
+ 6 ! Nr of atoms; cov.r; valency;a.m;Rvdw;Evdw;gammaEEM;cov.r2;#
+ alfa;gammavdW;valency;Eunder;Eover;chiEEM;etaEEM;n.u.
+ cov r3;Elp;Heat inc.;n.u.;n.u.;n.u.;n.u.
+ ov/un;val1;n.u.;val3,vval4
+ C 1.3763 4.0000 12.0000 1.8857 0.1818 0.8712 1.2596 4.0000
+ 9.5928 2.0784 4.0000 22.6732 79.5548 5.7254 6.9235 0.0000
+ 1.2065 0.0000 -0.8579 4.9417 28.3475 11.9957 0.8563 0.0000
+ -2.8846 4.1590 1.0564 4.0000 2.9663 0.0000 0.0000 0.0000
+ H 0.6646 1.0000 1.0080 1.6030 0.0600 0.7625 -0.1000 1.0000
+ 9.3951 4.4187 1.0000 0.0000 121.1250 3.8196 9.8832 1.0000
+ -0.1000 0.0000 -0.1339 3.5803 2.8733 1.0000 1.0698 0.0000
+ -13.0615 3.0626 1.0338 1.0000 2.8793 0.0000 0.0000 0.0000
+ O 1.2699 2.0000 15.9990 1.9741 0.0880 1.0804 1.0624 6.0000
+ 10.2186 7.7719 4.0000 27.3264 116.0768 8.5000 7.8386 2.0000
+ 0.9446 8.6170 -1.2371 17.0845 3.7082 0.5350 0.9745 0.0000
+ -3.1456 2.6656 1.0493 4.0000 2.9225 0.0000 0.0000 0.0000
+ N 1.2226 3.0000 14.0000 1.9324 0.1376 0.8596 1.1839 5.0000
+ 10.0667 7.8431 4.0000 32.5000 100.0000 6.8418 6.3404 2.0000
+ 1.0497 14.5853 -1.1222 2.0637 3.2584 3.1136 0.9745 0.0000
+ -4.2059 2.6491 1.0183 4.0000 2.8793 0.0000 0.0000 0.0000
+ S 1.9405 2.0000 32.0600 2.0677 0.2099 1.0336 1.5479 6.0000
+ 9.9575 4.9055 4.0000 52.9998 112.1416 6.5000 8.2545 2.0000
+ 1.4601 9.7177 -2.3700 5.7487 23.2859 12.7147 0.9745 0.0000
+ -11.0000 2.7466 1.0338 4.0000 2.8793 0.0000 0.0000 0.0000
+ Si 2.0276 4.0000 28.0600 2.2042 0.1322 0.8218 1.5758 4.0000
+ 11.9413 2.0618 4.0000 11.8211 136.4845 1.8038 7.3852 0.0000
+ -1.0000 0.0000 -2.3700 6.4918 8.5961 0.2368 0.8563 0.0000
+ -3.8112 3.1873 1.0338 4.0000 2.5791 0.0000 0.0000 0.0000
+ 18 ! Nr of bonds; Edis1;LPpen;n.u.;pbe1;pbo5;13corr;pbo6
+ pbe2;pbo3;pbo4;n.u.;pbo1;pbo2;ovcorr
+ 1 1 145.4070 103.0681 73.7841 0.2176 -0.7816 1.0000 28.4167 0.3217
+ 0.1111 -0.1940 8.6733 1.0000 -0.0994 5.9724 1.0000 0.0000
+ 1 2 167.1752 0.0000 0.0000 -0.4421 0.0000 1.0000 6.0000 0.5969
+ 17.4194 1.0000 0.0000 1.0000 -0.0099 8.5445 0.0000 0.0000
+ 2 2 188.1606 0.0000 0.0000 -0.3140 0.0000 1.0000 6.0000 0.6816
+ 8.6247 1.0000 0.0000 1.0000 -0.0183 5.7082 0.0000 0.0000
+ 1 3 171.0470 67.2480 130.3792 0.3600 -0.1696 1.0000 12.0338 0.3796
+ 0.3647 -0.2660 7.4396 1.0000 -0.1661 5.0637 0.0000 0.0000
+ 3 3 90.2465 160.9645 40.0000 0.9950 -0.2435 1.0000 28.1614 0.9704
+ 0.8145 -0.1850 7.5281 1.0000 -0.1283 6.2396 1.0000 0.0000
+ 1 4 134.9992 139.6314 78.5681 0.0420 -0.1370 1.0000 23.6247 0.2415
+ 0.1522 -0.3161 7.0000 1.0000 -0.1301 5.4980 1.0000 0.0000
+ 3 4 127.7074 177.1058 40.0000 0.4561 -0.1481 1.0000 31.4801 0.2000
+ 0.8968 -0.3555 7.0000 1.0000 -0.1219 7.0000 1.0000 0.0000
+ 4 4 151.9142 87.1928 151.4761 0.4280 -0.1001 1.0000 12.3631 0.6229
+ 0.1721 -0.1614 12.1345 1.0000 -0.0882 5.3056 1.0000 0.0000
+ 2 3 216.6018 0.0000 0.0000 -0.4201 0.0000 1.0000 6.0000 0.9143
+ 4.7737 1.0000 0.0000 1.0000 -0.0591 5.9451 0.0000 0.0000
+ 2 4 223.1853 0.0000 0.0000 -0.4661 0.0000 1.0000 6.0000 0.5178
+ 7.8731 1.0000 0.0000 1.0000 -0.0306 6.1506 0.0000 0.0000
+ 1 5 128.9942 74.5848 55.2528 0.1035 -0.5211 1.0000 18.9617 0.6000
+ 0.2949 -0.2398 8.1175 1.0000 -0.1029 5.6731 1.0000 0.0000
+ 2 5 151.5159 0.0000 0.0000 -0.4721 0.0000 1.0000 6.0000 0.6000
+ 9.4366 1.0000 0.0000 1.0000 -0.0290 7.0050 1.0000 0.0000
+ 3 5 0.0000 0.0000 0.0000 0.5563 -0.4038 1.0000 49.5611 0.6000
+ 0.4259 -0.4577 12.7569 1.0000 -0.1100 7.1145 1.0000 0.0000
+ 4 5 0.0000 0.0000 0.0000 0.4438 -0.2034 1.0000 40.3399 0.6000
+ 0.3296 -0.3153 9.1227 1.0000 -0.1805 5.6864 1.0000 0.0000
+ 5 5 96.1871 93.7006 68.6860 0.0955 -0.4781 1.0000 17.8574 0.6000
+ 0.2723 -0.2373 9.7875 1.0000 -0.0950 6.4757 1.0000 0.0000
+ 6 6 109.1904 70.8314 30.0000 0.2765 -0.3000 1.0000 16.0000 0.1583
+ 0.2804 -0.1994 8.1117 1.0000 -0.0675 8.2993 0.0000 0.0000
+ 2 6 137.1002 0.0000 0.0000 -0.1902 0.0000 1.0000 6.0000 0.4256
+ 17.7186 1.0000 0.0000 1.0000 -0.0377 6.4281 0.0000 0.0000
+ 3 6 191.1743 52.0733 43.3991 -0.2584 -0.3000 1.0000 36.0000 0.8764
+ 1.0248 -0.3658 4.2151 1.0000 -0.5004 4.2605 1.0000 0.0000
+ 8 ! Nr of off-diagonal terms; Ediss;Ro;gamma;rsigma;rpi;rpi2
+ 1 2 0.0455 1.7218 10.4236 1.0379 -1.0000 -1.0000
+ 2 3 0.0469 1.9185 10.3707 0.9406 -1.0000 -1.0000
+ 2 4 0.0999 1.8372 9.6539 0.9692 -1.0000 -1.0000
+ 1 3 0.1186 1.9820 9.5927 1.2936 1.1203 1.0805
+ 1 4 0.1486 1.8922 9.7989 1.3746 1.2091 1.1427
+ 3 4 0.1051 2.0060 10.0691 1.3307 1.1034 1.0060
+ 2 6 0.0470 1.6738 11.6877 1.1931 -1.0000 -1.0000
+ 3 6 0.1263 1.8163 10.6833 1.6266 1.2052 -1.0000
+ 62 ! Nr of angles;at1;at2;at3;Thetao,o;ka;kb;pv1;pv2
+ 1 1 1 70.0265 13.6338 2.1884 0.0000 0.1676 26.3587 1.0400
+ 1 1 2 69.7786 10.3544 8.4326 0.0000 0.1153 0.0000 1.0400
+ 2 1 2 74.6020 11.8629 2.9294 0.0000 0.1367 0.0000 1.0400
+ 1 2 2 0.0000 0.0000 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 2 1 0.0000 3.4110 7.7350 0.0000 0.0000 0.0000 1.0400
+ 2 2 2 0.0000 27.9213 5.8635 0.0000 0.0000 0.0000 1.0400
+ 1 1 3 72.9588 16.7105 3.5244 0.0000 1.1127 0.0000 1.1880
+ 3 1 3 80.0708 45.0000 2.1487 0.0000 1.1127 -35.0000 1.1880
+ 1 1 4 61.5055 45.0000 1.2242 0.0000 1.1127 0.0000 1.1880
+ 3 1 4 71.9345 45.0000 1.5052 0.0000 1.1127 0.0000 1.1880
+ 4 1 4 51.3604 45.0000 0.6846 0.0000 1.1127 0.0000 1.1880
+ 2 1 3 66.6150 13.6403 3.8212 0.0000 0.0755 0.0000 1.0500
+ 2 1 4 68.9632 16.3575 3.1449 0.0000 0.0755 0.0000 1.0500
+ 1 2 4 0.0000 0.0019 6.3000 0.0000 0.0000 0.0000 1.0400
+ 1 3 1 79.1091 45.0000 0.7067 0.0000 0.6142 0.0000 1.0783
+ 1 3 3 83.7151 42.6867 0.9699 0.0000 0.6142 0.0000 1.0783
+ 1 3 4 79.5876 45.0000 1.1761 0.0000 0.6142 0.0000 1.0783
+ 3 3 3 80.0108 38.3716 1.1572 -38.4200 0.6142 0.0000 1.0783
+ 3 3 4 81.5614 19.8012 3.9968 0.0000 0.6142 0.0000 1.0783
+ 4 3 4 85.3564 36.5858 1.7504 0.0000 0.6142 0.0000 1.0783
+ 1 3 2 78.1533 44.7226 1.3136 0.0000 0.1218 0.0000 1.0500
+ 2 3 3 84.1057 9.6413 7.5000 0.0000 0.1218 0.0000 1.0500
+ 2 3 4 79.4629 44.0409 2.2959 0.0000 0.1218 0.0000 1.0500
+ 2 3 2 79.2954 26.3838 2.2044 0.0000 0.1218 0.0000 1.0500
+ 1 4 1 66.1477 22.9891 1.5923 0.0000 1.6777 0.0000 1.0500
+ 1 4 3 91.9273 38.0207 0.5387 0.0000 1.6777 0.0000 1.0500
+ 1 4 4 92.6933 9.9708 1.6094 0.0000 1.6777 0.0000 1.0500
+ 3 4 3 73.4749 42.7640 1.7325 -17.5007 1.6777 0.0000 1.0500
+ 3 4 4 73.9183 44.8857 1.1980 -0.9193 1.6777 0.0000 1.0500
+ 4 4 4 74.0572 15.4709 5.4220 0.0000 1.6777 0.0000 1.0500
+ 1 4 2 72.7016 33.4153 1.0224 0.0000 0.0222 0.0000 1.0500
+ 2 4 3 82.4368 44.1900 1.9273 0.0000 0.0222 0.0000 1.0500
+ 2 4 4 82.6883 39.9831 1.1916 0.0000 0.0222 0.0000 1.0500
+ 2 4 2 71.2183 14.4528 3.6870 0.0000 0.0222 0.0000 1.0500
+ 1 2 3 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 2 5 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 3 2 3 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 3 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 4 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 2 2 3 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 2 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 1 5 74.9397 25.0560 1.8787 0.1463 0.0559 0.0000 1.0400
+ 1 5 1 86.9521 36.9951 2.0903 0.1463 0.0559 0.0000 1.0400
+ 2 1 5 74.9397 25.0560 1.8787 0.0000 0.0000 0.0000 1.0400
+ 1 5 2 86.1791 36.9951 2.0903 0.0000 0.0000 0.0000 1.0400
+ 1 5 5 85.3644 36.9951 2.0903 0.1463 0.0559 0.0000 1.0400
+ 2 5 2 93.1959 36.9951 2.0903 0.0000 0.0000 0.0000 1.0400
+ 2 5 5 84.3331 36.9951 2.0903 0.0000 0.0000 0.0000 1.0400
+ 6 6 6 69.3456 21.7361 1.4283 0.0000 -0.2101 0.0000 1.3241
+ 2 6 6 75.6168 21.5317 1.0435 0.0000 2.5179 0.0000 1.0400
+ 2 6 2 78.3939 20.9772 0.8630 0.0000 2.8421 0.0000 1.0400
+ 3 6 6 70.3016 15.4081 1.3267 0.0000 2.1459 0.0000 1.0400
+ 2 6 3 73.8232 16.6592 3.7425 0.0000 0.8613 0.0000 1.0400
+ 3 6 3 90.0344 7.7656 1.7264 0.0000 0.7689 0.0000 1.0400
+ 6 3 6 22.1715 3.6615 0.3160 0.0000 4.1125 0.0000 1.0400
+ 2 3 6 83.7634 5.6693 2.7780 0.0000 1.6982 0.0000 1.0400
+ 3 3 6 73.4663 25.0761 0.9143 0.0000 2.2466 0.0000 1.0400
+ 2 2 6 0.0000 47.1300 6.0000 0.0000 1.6371 0.0000 1.0400
+ 6 2 6 0.0000 31.5209 6.0000 0.0000 1.6371 0.0000 1.0400
+ 3 2 6 0.0000 31.0427 4.5625 0.0000 1.6371 0.0000 1.0400
+ 2 2 5 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 20 ! Nr of torsions;at1;at2;at3;at4;;V1;V2;V3;V2(BO);vconj;n.u;n
+ 1 1 1 1 0.0000 23.2168 0.1811 -4.6220 -1.9387 0.0000 0.0000
+ 1 1 1 2 0.0000 45.7984 0.3590 -5.7106 -2.9459 0.0000 0.0000
+ 2 1 1 2 0.0000 44.6445 0.3486 -5.1725 -0.8717 0.0000 0.0000
+ 0 1 2 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
+ 0 2 2 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
+ 0 1 3 0 5.0520 16.7344 0.5590 -3.0181 -2.0000 0.0000 0.0000
+ 0 2 3 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000
+ 0 3 3 0 0.0115 68.9706 0.8253 -28.4693 0.0000 0.0000 0.0000
+ 0 1 4 0 -4.0616 66.2036 0.3855 -4.4414 -2.0000 0.0000 0.0000
+ 0 2 4 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000
+ 0 3 4 0 1.1130 14.8049 0.0231 -10.7175 -2.0000 0.0000 0.0000
+ 0 4 4 0 -0.0851 37.4200 0.0107 -3.5209 -2.0000 0.0000 0.0000
+ 0 1 1 0 0.0000 0.9305 0.0000 -24.2568 0.0000 0.0000 0.0000
+ 4 1 4 4 -3.6064 43.6430 0.0004 -11.5507 -2.0000 0.0000 0.0000
+ 0 1 5 0 3.3423 30.3435 0.0365 -2.7171 0.0000 0.0000 0.0000
+ 0 5 5 0 -0.0555 -42.7738 0.1515 -2.2056 0.0000 0.0000 0.0000
+ 0 2 5 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
+ 0 6 6 0 0.0000 0.0000 0.1200 -2.4426 0.0000 0.0000 0.0000
+ 0 2 6 0 0.0000 0.0000 0.1200 -2.4847 0.0000 0.0000 0.0000
+ 0 3 6 0 0.0000 0.0000 0.1200 -2.4703 0.0000 0.0000 0.0000
+ 9 ! Nr of hydrogen bonds;at1;at2;at3;Rhb;Dehb;vhb1
+ 3 2 3 2.0431 -6.6813 3.5000 1.7295
+ 3 2 4 1.6740 -10.9581 3.5000 1.7295
+ 4 2 3 1.4889 -9.6465 3.5000 1.7295
+ 4 2 4 1.8324 -8.0074 3.5000 1.7295
+ 3 2 5 2.6644 -3.9547 3.5000 1.7295
+ 4 2 5 4.0476 -5.7038 3.5000 1.7295
+ 5 2 3 2.1126 -4.5790 3.5000 1.7295
+ 5 2 4 2.2066 -5.7038 3.5000 1.7295
+ 5 2 5 1.9461 -4.0000 3.5000 1.7295
diff -Naur lammps-29Jan09/examples/reax/in.reax.rdx lammps-12Feb09/examples/reax/in.reax.rdx
--- lammps-29Jan09/examples/reax/in.reax.rdx 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/in.reax.rdx 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,24 @@
+# REAX potential for RDX system
+# this run is equivalent to GRASP testreax
+
+units real
+
+atom_style charge
+read_data data.rdx
+
+pair_style reax 10.0 1.0e-6
+pair_coeff * * ffield.reax 1 2 3 4
+
+neighbor 2.5 bin
+neigh_modify every 10 delay 0 check no
+
+fix 1 all nve
+
+thermo 10
+thermo_modify format float %15.14g
+
+timestep 1.0
+
+dump 1 all atom 10 dump.reax.rdx
+
+run 100
diff -Naur lammps-29Jan09/examples/reax/in.reax.tatb lammps-12Feb09/examples/reax/in.reax.tatb
--- lammps-29Jan09/examples/reax/in.reax.tatb 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/in.reax.tatb 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,25 @@
+# REAX potential for TATB system
+# this run is equivalent to GRASP testtatb
+
+units real
+
+atom_style charge
+read_data data.tatb
+
+pair_style reax 10.0 1.0e-6
+pair_coeff * * ffield.reax 1 2 3 4
+
+neighbor 2.5 bin
+neigh_modify delay 0 every 5 check no
+
+fix 1 all nve
+
+thermo 1
+thermo_style custom step temp evdwl ecoul pe ke etotal press
+
+timestep 0.0625
+
+dump 1 all atom 25 dump.reax.tatb
+dump_modify 1 scale no
+
+run 25
diff -Naur lammps-29Jan09/examples/reax/log.reax.rdx.9Jan09.linux.1 lammps-12Feb09/examples/reax/log.reax.rdx.9Jan09.linux.1
--- lammps-29Jan09/examples/reax/log.reax.rdx.9Jan09.linux.1 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/log.reax.rdx.9Jan09.linux.1 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,60 @@
+LAMMPS (9 Jan 2009)
+# REAX potential for RDX system
+# this run is equivalent to GRASP testreax
+
+units real
+
+atom_style charge
+read_data data.rdx
+ orthogonal box = (35 35 35) to (48 48 48)
+ 1 by 1 by 1 processor grid
+ 21 atoms
+
+pair_style reax 10.0 1.0e-6
+pair_coeff * * ffield.reax 1 2 3 4
+
+neighbor 2.5 bin
+neigh_modify every 10 delay 0 check no
+
+fix 1 all nve
+
+thermo 10
+thermo_modify format float %15.14g
+
+timestep 1.0
+
+dump 1 all atom 10 dump.reax.rdx
+
+run 100
+Memory usage per processor = 1.9804 Mbytes
+Step Temp E_pair E_mol TotEng Press
+ 0 0 -2047.6192801334 0 -2047.6192801334 1411.6115263466
+ 10 3.6258171813679 -2047.9367433642 0 -2047.7205859183 -299.36769970561
+ 20 3.4854376925069 -2048.0660279873 0 -2047.8582394332 475.16845315344
+ 30 2.5137625579087 -2047.6831945786 0 -2047.5333336047 -338.78447400608
+ 40 3.028268506362 -2047.8909509029 0 -2047.7104170389 30.336593968351
+ 50 1.9909740924203 -2047.6767143308 0 -2047.5580200191 -711.00589942496
+ 60 3.0218387059402 -2047.8022916718 0 -2047.6221411281 885.14836573571
+ 70 3.7978262058847 -2048.0109710832 0 -2047.7845591128 -398.03834475587
+ 80 3.7467426883643 -2047.9462376339 0 -2047.7228710687 225.47962761808
+ 90 2.6678278539028 -2047.7300185675 0 -2047.5709728059 -443.01207186006
+ 100 2.7677479999004 -2047.863150798 0 -2047.698148177 -203.18419576651
+Loop time of 0.624502 on 1 procs for 100 steps with 21 atoms
+
+Pair time (%) = 0.621737 (99.5573)
+Neigh time (%) = 0.00102305 (0.163819)
+Comm time (%) = 0.000733376 (0.117434)
+Outpt time (%) = 0.000679255 (0.108767)
+Other time (%) = 0.000328779 (0.0526466)
+
+Nlocal: 21 ave 21 max 21 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Nghost: 546 ave 546 max 546 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Neighs: 1110 ave 1110 max 1110 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+
+Total # of neighbors = 1110
+Ave neighs/atom = 52.8571
+Neighbor list builds = 10
+Dangerous builds = 0
diff -Naur lammps-29Jan09/examples/reax/log.reax.rdx.9Jan09.linux.4 lammps-12Feb09/examples/reax/log.reax.rdx.9Jan09.linux.4
--- lammps-29Jan09/examples/reax/log.reax.rdx.9Jan09.linux.4 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/log.reax.rdx.9Jan09.linux.4 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,60 @@
+LAMMPS (9 Jan 2009)
+# REAX potential for RDX system
+# this run is equivalent to GRASP testreax
+
+units real
+
+atom_style charge
+read_data data.rdx
+ orthogonal box = (35 35 35) to (48 48 48)
+ 1 by 2 by 2 processor grid
+ 21 atoms
+
+pair_style reax 10.0 1.0e-6
+pair_coeff * * ffield.reax 1 2 3 4
+
+neighbor 2.5 bin
+neigh_modify every 10 delay 0 check no
+
+fix 1 all nve
+
+thermo 10
+thermo_modify format float %15.14g
+
+timestep 1.0
+
+dump 1 all atom 10 dump.reax.rdx
+
+run 100
+Memory usage per processor = 2.12595 Mbytes
+Step Temp E_pair E_mol TotEng Press
+ 0 0 -2047.619198364 0 -2047.619198364 1411.6115014455
+ 10 3.6258172064233 -2047.9367430834 0 -2047.720585636 -299.36773853231
+ 20 3.4854376755222 -2048.0660277267 0 -2047.8582391737 475.16836372124
+ 30 2.5137625613646 -2047.6831945262 0 -2047.5333335521 -338.78451555999
+ 40 3.0282685107275 -2047.8909508952 0 -2047.7104170309 30.336594625277
+ 50 1.9909741168896 -2047.6767142995 0 -2047.5580199864 -711.00591844289
+ 60 3.0218388134802 -2047.802290215 0 -2047.6221396649 885.14839263854
+ 70 3.7978262741497 -2048.0109705523 0 -2047.7845585778 -398.03839906035
+ 80 3.7467427256751 -2047.9462376146 0 -2047.7228710472 225.47957554937
+ 90 2.6678279363425 -2047.7300185521 0 -2047.5709727857 -443.01208904133
+ 100 2.7677479912881 -2047.8631507982 0 -2047.6981481776 -203.18423218689
+Loop time of 0.975732 on 4 procs for 100 steps with 21 atoms
+
+Pair time (%) = 0.751038 (76.9718)
+Neigh time (%) = 0.000374079 (0.0383383)
+Comm time (%) = 0.217836 (22.3254)
+Outpt time (%) = 0.00597531 (0.612392)
+Other time (%) = 0.000507712 (0.052034)
+
+Nlocal: 5.25 ave 14 max 0 min
+Histogram: 1 0 2 0 0 0 0 0 0 1
+Nghost: 355.5 ave 433 max 282 min
+Histogram: 1 0 0 0 2 0 0 0 0 1
+Neighs: 305 ave 784 max 0 min
+Histogram: 1 0 1 1 0 0 0 0 0 1
+
+Total # of neighbors = 1220
+Ave neighs/atom = 58.0952
+Neighbor list builds = 10
+Dangerous builds = 0
diff -Naur lammps-29Jan09/examples/reax/log.reax.tatb.9Jan09.linux.1 lammps-12Feb09/examples/reax/log.reax.tatb.9Jan09.linux.1
--- lammps-29Jan09/examples/reax/log.reax.tatb.9Jan09.linux.1 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/log.reax.tatb.9Jan09.linux.1 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,76 @@
+LAMMPS (9 Jan 2009)
+# REAX potential for TATB system
+# this run is equivalent to GRASP testtatb
+
+units real
+
+atom_style charge
+read_data data.tatb
+ triclinic box = (0 0 0) to (13.624 17.1149 15.1826) with tilt (-5.75316 -6.32547 7.42573)
+ 1 by 1 by 1 processor grid
+ 384 atoms
+
+pair_style reax 10.0 1.0e-6
+pair_coeff * * ffield.reax 1 2 3 4
+
+neighbor 2.5 bin
+neigh_modify delay 0 every 5 check no
+
+fix 1 all nve
+
+thermo 1
+thermo_style custom step temp evdwl ecoul pe ke etotal press
+
+timestep 0.0625
+
+dump 1 all atom 25 dump.reax.tatb
+dump_modify 1 scale no
+
+run 25
+Memory usage per processor = 6.47708 Mbytes
+Step Temp E_vdwl E_coul PotEng KinEng TotEng Press
+ 0 0 -42896.832 -2080.6298 -44977.462 0 -44977.462 350844.92
+ 1 1.5362501 -42898.549 -2080.6611 -44979.21 1.7538604 -44977.456 351524.29
+ 2 6.1403173 -42903.695 -2080.736 -44984.431 7.0100948 -44977.421 353564.02
+ 3 13.798172 -42912.254 -2080.9718 -44993.226 15.752687 -44977.473 356972.83
+ 4 24.486472 -42924.199 -2081.2329 -45005.432 27.954986 -44977.477 361762.22
+ 5 38.17262 -42939.494 -2081.5712 -45021.065 43.579781 -44977.485 367944.3
+ 6 54.814793 -42958.09 -2081.9848 -45040.075 62.579322 -44977.496 375525.26
+ 7 74.361855 -42980.094 -2082.4701 -45062.564 84.89523 -44977.669 384488.13
+ 8 96.753115 -43005.107 -2083.0273 -45088.135 110.45822 -44977.676 394820.42
+ 9 121.91206 -43032.705 -2083.6635 -45116.368 139.18094 -44977.188 406680.23
+ 10 149.75446 -43063.797 -2084.3724 -45148.169 170.96721 -44977.202 419448.39
+ 11 180.18901 -43097.773 -2085.1575 -45182.93 205.71283 -44977.218 433126.49
+ 12 213.10176 -43134.679 -2086.0149 -45220.694 243.28768 -44977.407 447323.77
+ 13 248.35364 -43173.885 -2086.9468 -45260.832 283.533 -44977.299 461500.69
+ 14 285.77131 -43215.627 -2087.9521 -45303.579 326.25089 -44977.329 474776.65
+ 15 325.13312 -43259.523 -2089.0299 -45348.553 371.18831 -44977.365 485994.64
+ 16 366.14805 -43305.244 -2090.1788 -45395.422 418.01302 -44977.409 493592.79
+ 17 408.43184 -43352.353 -2091.3994 -45443.752 466.28631 -44977.466 495609.06
+ 18 451.48082 -43400.279 -2092.6891 -45492.968 515.43319 -44977.535 489764.64
+ 19 494.65084 -43448.29 -2094.0464 -45542.336 564.71825 -44977.618 473698.76
+ 20 537.15237 -43495.483 -2095.4689 -45590.952 613.24013 -44977.712 445393.41
+ 21 578.07545 -43540.818 -2096.9532 -45637.772 659.95998 -44977.812 403758.92
+ 22 616.45506 -43583.188 -2098.4958 -45681.684 703.77607 -44977.908 349235.78
+ 23 651.3754 -43621.54 -2100.0897 -45721.629 743.64289 -44977.987 284158.54
+ 24 682.06338 -43654.313 -2101.7345 -45756.048 778.67782 -44977.37 211816.13
+ 25 708.05182 -43682.322 -2103.422 -45785.744 808.34754 -44977.396 138937.27
+Loop time of 8.67501 on 1 procs for 25 steps with 384 atoms
+
+Pair time (%) = 8.59189 (99.0418)
+Neigh time (%) = 0.0744822 (0.858583)
+Comm time (%) = 0.00496221 (0.0572011)
+Outpt time (%) = 0.0024147 (0.0278352)
+Other time (%) = 0.00126433 (0.0145744)
+
+Nlocal: 384 ave 384 max 384 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Nghost: 7559 ave 7559 max 7559 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Neighs: 286819 ave 286819 max 286819 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+
+Total # of neighbors = 286819
+Ave neighs/atom = 746.924
+Neighbor list builds = 5
+Dangerous builds = 0
diff -Naur lammps-29Jan09/examples/reax/log.reax.tatb.9Jan09.linux.4 lammps-12Feb09/examples/reax/log.reax.tatb.9Jan09.linux.4
--- lammps-29Jan09/examples/reax/log.reax.tatb.9Jan09.linux.4 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/examples/reax/log.reax.tatb.9Jan09.linux.4 2009-02-12 14:03:10.000000000 -0700
@@ -0,0 +1,76 @@
+LAMMPS (9 Jan 2009)
+# REAX potential for TATB system
+# this run is equivalent to GRASP testtatb
+
+units real
+
+atom_style charge
+read_data data.tatb
+ triclinic box = (0 0 0) to (13.624 17.1149 15.1826) with tilt (-5.75316 -6.32547 7.42573)
+ 1 by 2 by 2 processor grid
+ 384 atoms
+
+pair_style reax 10.0 1.0e-6
+pair_coeff * * ffield.reax 1 2 3 4
+
+neighbor 2.5 bin
+neigh_modify delay 0 every 5 check no
+
+fix 1 all nve
+
+thermo 1
+thermo_style custom step temp evdwl ecoul pe ke etotal press
+
+timestep 0.0625
+
+dump 1 all atom 25 dump.reax.tatb
+dump_modify 1 scale no
+
+run 25
+Memory usage per processor = 3.08409 Mbytes
+Step Temp E_vdwl E_coul PotEng KinEng TotEng Press
+ 0 0 -42896.832 -2080.6306 -44977.462 0 -44977.462 350844.92
+ 1 1.5362501 -42898.549 -2080.6611 -44979.21 1.7538604 -44977.456 351524.29
+ 2 6.1403173 -42903.695 -2080.736 -44984.431 7.0100948 -44977.421 353564.02
+ 3 13.798172 -42912.254 -2080.9729 -44993.227 15.752687 -44977.474 356972.84
+ 4 24.486472 -42924.199 -2081.2309 -45005.43 27.954986 -44977.475 361762.21
+ 5 38.17262 -42939.494 -2081.5707 -45021.065 43.579781 -44977.485 367944.29
+ 6 54.814793 -42958.09 -2081.9854 -45040.075 62.579322 -44977.496 375525.33
+ 7 74.361855 -42980.094 -2082.4699 -45062.564 84.89523 -44977.669 384488.09
+ 8 96.753115 -43005.107 -2083.0269 -45088.134 110.45822 -44977.676 394820.42
+ 9 121.91207 -43032.705 -2083.6626 -45116.368 139.18094 -44977.187 406680.22
+ 10 149.75446 -43063.797 -2084.3728 -45148.169 170.96721 -44977.202 419448.39
+ 11 180.18901 -43097.773 -2085.1572 -45182.93 205.71283 -44977.217 433126.49
+ 12 213.10176 -43134.679 -2086.0148 -45220.694 243.28768 -44977.406 447323.77
+ 13 248.35364 -43173.885 -2086.9469 -45260.832 283.533 -44977.299 461500.69
+ 14 285.77131 -43215.627 -2087.9531 -45303.58 326.25089 -44977.33 474776.65
+ 15 325.13312 -43259.523 -2089.0299 -45348.553 371.18831 -44977.365 485994.64
+ 16 366.14805 -43305.244 -2090.1788 -45395.422 418.01302 -44977.409 493592.79
+ 17 408.43184 -43352.353 -2091.3994 -45443.752 466.28631 -44977.466 495609.06
+ 18 451.48082 -43400.279 -2092.6894 -45492.968 515.43319 -44977.535 489764.64
+ 19 494.65084 -43448.29 -2094.046 -45542.335 564.71825 -44977.617 473698.77
+ 20 537.15237 -43495.483 -2095.4689 -45590.952 613.24013 -44977.712 445393.41
+ 21 578.07545 -43540.818 -2096.9535 -45637.772 659.95998 -44977.812 403758.91
+ 22 616.45506 -43583.188 -2098.4937 -45681.682 703.77607 -44977.906 349235.9
+ 23 651.3754 -43621.54 -2100.0898 -45721.63 743.64289 -44977.987 284158.53
+ 24 682.06338 -43654.313 -2101.7343 -45756.047 778.67782 -44977.37 211816.14
+ 25 708.05182 -43682.322 -2103.4222 -45785.744 808.34754 -44977.397 138937.26
+Loop time of 4.36095 on 4 procs for 25 steps with 384 atoms
+
+Pair time (%) = 4.20042 (96.3188)
+Neigh time (%) = 0.0155269 (0.356043)
+Comm time (%) = 0.128759 (2.95254)
+Outpt time (%) = 0.0149072 (0.341834)
+Other time (%) = 0.00134313 (0.030799)
+
+Nlocal: 96 ave 96 max 96 min
+Histogram: 4 0 0 0 0 0 0 0 0 0
+Nghost: 5118 ave 5118 max 5118 min
+Histogram: 4 0 0 0 0 0 0 0 0 0
+Neighs: 79731 ave 79731 max 79731 min
+Histogram: 4 0 0 0 0 0 0 0 0 0
+
+Total # of neighbors = 318924
+Ave neighs/atom = 830.531
+Neighbor list builds = 5
+Dangerous builds = 0
diff -Naur lammps-29Jan09/lib/README lammps-12Feb09/lib/README
--- lammps-29Jan09/lib/README 2007-01-30 14:52:55.000000000 -0700
+++ lammps-12Feb09/lib/README 2009-02-06 09:39:43.000000000 -0700
@@ -11,3 +11,4 @@
poems POEMS rigid-body integration package from RPI
meam modified embedded atom method (MEAM) potential from Greg Wagner
+reax ReaxFF potential, from Adri van Duin via Aidan Thompson
diff -Naur lammps-29Jan09/lib/meam/Makefile lammps-12Feb09/lib/meam/Makefile
--- lammps-29Jan09/lib/meam/Makefile 2008-03-18 14:20:01.000000000 -0600
+++ lammps-12Feb09/lib/meam/Makefile 1969-12-31 17:00:00.000000000 -0700
@@ -1,48 +0,0 @@
-# *
-# *_________________________________________________________________________*
-# * MEAM: MODEFIED EMBEDDED ATOM METHOD *
-# * DESCRIPTION: SEE READ-ME *
-# * FILE NAME: Makefile *
-# * AUTHORS: Greg Wagner, Sandia National Laboratories *
-# * CONTACT: gjwagne@sandia.gov *
-# *_________________________________________________________________________*/
-
-SHELL = /bin/sh
-
-# ------ FILES ------
-
-SRC = meam_data.F meam_setup_done.F meam_setup_global.F meam_setup_param.F meam_dens_init.F meam_dens_final.F meam_force.F meam_cleanup.F
-
-FILES = $(SRC) Makefile
-
-# ------ DEFINITIONS ------
-
-LIB = libmeam.a
-OBJ = $(SRC:.F=.o)
-
-# ------ SETTINGS ------
-
-F90 = ifort
-F90FLAGS = -O
-ARCHIVE = ar
-ARCHFLAG = -rc
-USRLIB =
-SYSLIB =
-
-# ------ MAKE PROCEDURE ------
-
-lib: $(OBJ)
- $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
-
-# ------ COMPILE RULES ------
-
-%.o:%.F
- $(F90) $(F90FLAGS) -c $<
-
-# ------ CLEAN ------
-
-clean:
- -rm *.o *.mod *~ $(LIB)
-
-tar:
- -tar -cvf ../MEAM.tar $(FILES)
diff -Naur lammps-29Jan09/lib/reax/Makefile.g77 lammps-12Feb09/lib/reax/Makefile.g77
--- lammps-29Jan09/lib/reax/Makefile.g77 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/Makefile.g77 2009-02-12 08:41:49.000000000 -0700
@@ -0,0 +1,50 @@
+# *
+# *_________________________________________________________________________*
+# * Fortran Library for Reactive Force Field *
+# * DESCRIPTION: SEE READ-ME *
+# * FILE NAME: Makefile *
+# * CONTRIBUTING AUTHORS: Hansohl Cho(MIT), Aidan Thompson(SNL) *
+# * and Greg Wagner(SNL) *
+# * CONTACT: hansohl@mit.edu, athompson@sandia.gov, gjwagne@sandia.gov *
+# *_________________________________________________________________________*/
+
+SHELL = /bin/sh
+
+# ------ FILES ------
+
+SRC = reax_connect.F reax_inout.F reax_lammps.F reax_poten.F reax_reac.F reax_charges.F
+
+FILES = $(SRC) Makefile
+
+# ------ DEFINITIONS ------
+
+LIB = libreax.a
+OBJ = $(SRC:.F=.o)
+
+# ------ SETTINGS ------
+
+F90 = g77
+F90FLAGS = -O -g
+ARCHIVE = ar
+ARCHFLAG = -rc
+USRLIB =
+SYSLIB =
+
+# ------ MAKE PROCEDURE ------
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
+
+# ------ COMPILE RULES ------
+
+%.o:%.F
+ $(F90) $(F90FLAGS) -c $<
+
+# ------ CLEAN ------
+
+clean:
+ -rm *.o *.mod *~ $(LIB)
+
+tar:
+ -tar -cvf ../REAX.tar $(FILES)
+
diff -Naur lammps-29Jan09/lib/reax/Makefile.g95 lammps-12Feb09/lib/reax/Makefile.g95
--- lammps-29Jan09/lib/reax/Makefile.g95 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/Makefile.g95 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,50 @@
+# *
+# *_________________________________________________________________________*
+# * Fortran Library for Reactive Force Field *
+# * DESCRIPTION: SEE READ-ME *
+# * FILE NAME: Makefile *
+# * CONTRIBUTING AUTHORS: Hansohl Cho(MIT), Aidan Thompson(SNL) *
+# * and Greg Wagner(SNL) *
+# * CONTACT: hansohl@mit.edu, athompson@sandia.gov, gjwagne@sandia.gov *
+# *_________________________________________________________________________*/
+
+SHELL = /bin/sh
+
+# ------ FILES ------
+
+SRC = reax_connect.F reax_inout.F reax_lammps.F reax_poten.F reax_reac.F reax_charges.F
+
+FILES = $(SRC) Makefile
+
+# ------ DEFINITIONS ------
+
+LIB = libreax.a
+OBJ = $(SRC:.F=.o)
+
+# ------ SETTINGS ------
+
+F90 = g95
+F90FLAGS = -O
+ARCHIVE = ar
+ARCHFLAG = -rc
+USRLIB =
+SYSLIB =
+
+# ------ MAKE PROCEDURE ------
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
+
+# ------ COMPILE RULES ------
+
+%.o:%.F
+ $(F90) $(F90FLAGS) -c $<
+
+# ------ CLEAN ------
+
+clean:
+ -rm *.o *.mod *~ $(LIB)
+
+tar:
+ -tar -cvf ../REAX.tar $(FILES)
+
diff -Naur lammps-29Jan09/lib/reax/Makefile.gfortran lammps-12Feb09/lib/reax/Makefile.gfortran
--- lammps-29Jan09/lib/reax/Makefile.gfortran 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/Makefile.gfortran 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,50 @@
+# *
+# *_________________________________________________________________________*
+# * Fortran Library for Reactive Force Field *
+# * DESCRIPTION: SEE READ-ME *
+# * FILE NAME: Makefile *
+# * CONTRIBUTING AUTHORS: Hansohl Cho(MIT), Aidan Thompson(SNL) *
+# * and Greg Wagner(SNL) *
+# * CONTACT: hansohl@mit.edu, athompson@sandia.gov, gjwagne@sandia.gov *
+# *_________________________________________________________________________*/
+
+SHELL = /bin/sh
+
+# ------ FILES ------
+
+SRC = reax_connect.F reax_inout.F reax_lammps.F reax_poten.F reax_reac.F reax_charges.F
+
+FILES = $(SRC) Makefile
+
+# ------ DEFINITIONS ------
+
+LIB = libreax.a
+OBJ = $(SRC:.F=.o)
+
+# ------ SETTINGS ------
+
+F90 = gfortran
+F90FLAGS = -O -fno-second-underscore
+ARCHIVE = ar
+ARCHFLAG = -rc
+USRLIB =
+SYSLIB =
+
+# ------ MAKE PROCEDURE ------
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
+
+# ------ COMPILE RULES ------
+
+%.o:%.F
+ $(F90) $(F90FLAGS) -c $<
+
+# ------ CLEAN ------
+
+clean:
+ -rm *.o *.mod *~ $(LIB)
+
+tar:
+ -tar -cvf ../REAX.tar $(FILES)
+
diff -Naur lammps-29Jan09/lib/reax/Makefile.ifort lammps-12Feb09/lib/reax/Makefile.ifort
--- lammps-29Jan09/lib/reax/Makefile.ifort 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/Makefile.ifort 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,50 @@
+# *
+# *_________________________________________________________________________*
+# * Fortran Library for Reactive Force Field *
+# * DESCRIPTION: SEE READ-ME *
+# * FILE NAME: Makefile *
+# * CONTRIBUTING AUTHORS: Hansohl Cho(MIT), Aidan Thompson(SNL) *
+# * and Greg Wagner(SNL) *
+# * CONTACT: hansohl@mit.edu, athompson@sandia.gov, gjwagne@sandia.gov *
+# *_________________________________________________________________________*/
+
+SHELL = /bin/sh
+
+# ------ FILES ------
+
+SRC = reax_connect.F reax_inout.F reax_lammps.F reax_poten.F reax_reac.F reax_charges.F
+
+FILES = $(SRC) Makefile
+
+# ------ DEFINITIONS ------
+
+LIB = libreax.a
+OBJ = $(SRC:.F=.o)
+
+# ------ SETTINGS ------
+
+F90 = ifort
+F90FLAGS = -O
+ARCHIVE = ar
+ARCHFLAG = -rc
+USRLIB =
+SYSLIB =
+
+# ------ MAKE PROCEDURE ------
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
+
+# ------ COMPILE RULES ------
+
+%.o:%.F
+ $(F90) $(F90FLAGS) -c $<
+
+# ------ CLEAN ------
+
+clean:
+ -rm *.o *.mod *~ $(LIB)
+
+tar:
+ -tar -cvf ../REAX.tar $(FILES)
+
diff -Naur lammps-29Jan09/lib/reax/Makefile.pgf90 lammps-12Feb09/lib/reax/Makefile.pgf90
--- lammps-29Jan09/lib/reax/Makefile.pgf90 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/Makefile.pgf90 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,50 @@
+# *
+# *_________________________________________________________________________*
+# * Fortran Library for Reactive Force Field *
+# * DESCRIPTION: SEE READ-ME *
+# * FILE NAME: Makefile *
+# * CONTRIBUTING AUTHORS: Hansohl Cho(MIT), Aidan Thompson(SNL) *
+# * and Greg Wagner(SNL) *
+# * CONTACT: hansohl@mit.edu, athompson@sandia.gov, gjwagne@sandia.gov *
+# *_________________________________________________________________________*/
+
+SHELL = /bin/sh
+
+# ------ FILES ------
+
+SRC = reax_connect.F reax_inout.F reax_lammps.F reax_poten.F reax_reac.F reax_charges.F
+
+FILES = $(SRC) Makefile
+
+# ------ DEFINITIONS ------
+
+LIB = libreax.a
+OBJ = $(SRC:.F=.o)
+
+# ------ SETTINGS ------
+
+F90 = pgf90
+F90FLAGS = -O
+ARCHIVE = ar
+ARCHFLAG = -rc
+USRLIB =
+SYSLIB =
+
+# ------ MAKE PROCEDURE ------
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
+
+# ------ COMPILE RULES ------
+
+%.o:%.F
+ $(F90) $(F90FLAGS) -c $<
+
+# ------ CLEAN ------
+
+clean:
+ -rm *.o *.mod *~ $(LIB)
+
+tar:
+ -tar -cvf ../REAX.tar $(FILES)
+
diff -Naur lammps-29Jan09/lib/reax/README lammps-12Feb09/lib/reax/README
--- lammps-29Jan09/lib/reax/README 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/README 2009-02-12 09:09:50.000000000 -0700
@@ -0,0 +1,34 @@
+ReaxFF library
+
+Aidan Thompson, Sandia National Labs
+athomps at sandia.gov
+Jan 2008
+
+--------------
+
+This library is an implementation of the ReaxFF potential,
+specifically designed to work with LAMMPS. It is derived from Adri van
+Duin's original serial code, with intervening incarnations in CMDF and
+GRASP.
+
+This library can be built with any decent Fortran compiler, before
+LAMMPS is built, so LAMMPS can link against it. The compiler must
+produce object files compatible with the LAMMPS C++ compiler. If not,
+the LAMMPS build will fail during linking.
+
+Build the library using one of the provided Makefiles or create your
+own, specific to your compiler and system. For example:
+
+make -f Makefile.g95
+
+If the build is successful, you should end up with a libreax.a file.
+
+Note that the include file reax_defs.h is used by both the ReaxFF
+library source files and the LAMMPS pair_reax.cpp source file (from
+module REAX). It contains dimensions of statically-allocated arrays
+created by the ReaxFF library. The size of these arrays must be set
+small enough to avoid exceeding the available machine memory, and
+large enough to fit the actual data generated by ReaxFF. If you change
+the values in reax_defs.h, you must first rebuild the library and then
+rebuild LAMMPS.
+
diff -Naur lammps-29Jan09/lib/reax/cbka.blk lammps-12Feb09/lib/reax/cbka.blk
--- lammps-29Jan09/lib/reax/cbka.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbka.blk 2009-02-12 09:09:50.000000000 -0700
@@ -0,0 +1,116 @@
+#include "reax_defs.h"
+ implicit real*8 (a-h,o-z),integer(i-n)
+ parameter (nneighmax=NNEIGHMAXDEF)
+ parameter (nat=NATDEF) !Max number of atoms
+ parameter (nattot=NATTOTDEF) !Max number of global atoms
+ parameter (nsort=NSORTDEF) !Max number of atom types
+ parameter (mbond=MBONDDEF) !Max number of bonds connected to one atom
+ parameter (na1mx3=3*nat) !3*max number of atoms
+ parameter (navib=NAVIBDEF) !for 2nd derivatives
+ parameter (nbotym=NBOTYMDEF) !Max number of bond types
+ parameter (nvatym=NVATYMDEF) !Max number of valency angle types
+ parameter (ntotym=NTOTYMDEF) !Max number of torsion angle types
+ parameter (nhbtym=NHBTYMDEF) !Max number of hydrogen bond types
+ parameter (nodmtym=NODMTYMDEF) !Max number of off-diagonal Morse types
+ parameter (nboallmax=NBOALLMAXDEF) !Max number of all bonds
+ parameter (nbomax=NBOMAXDEF) !Max number of bonds
+ parameter (nhbmax=NHBMAXDEF) !Max number of hydrogen bonds
+ parameter (nvamax=NVAMAXDEF) !Max number of valency angles
+ parameter (nopmax=NOPMAXDEF) !Max number of out of plane angles
+ parameter (ntomax=NTOMAXDEF) !Max number of torsion angles
+ parameter (npamax=NPAMAXDEF) !Max number of general parameters in force field
+ parameter (nmolmax=NMOLMAXDEF) !Max number of molecules in system
+ parameter (nmolset=NMOLSETDEF) !Max number of molecules in training set
+ parameter (mrestra=MRESTRADEF) !Max number of restraints
+ parameter (mtreg=MTREGDEF) !Max number of temperature regimes
+ parameter (mtzone=MTZONEDEF) !Max number of temperature zones
+ parameter (mvreg=MVREGDEF) !Max number of volume regimes
+ parameter (mvzone=MVZONEDEF) !Max number of volume zones
+ parameter (mereg=MEREGDEF) !Max number of electric field regimes
+ parameter (mezone=MEZONEDEF) !Max number of electric field zones
+ character*1 qr,qrset,qresi2
+ character*2 qaset,qadd
+ character*3 qresi1
+ character*5 qlabel,qffty,qbgfaxes,qbgfsgn,qresi3
+ character*20 qkeyw
+ character*25 qfile
+ character*40 qffield,qformat,qstrana2
+ character*60 qremark,qremset,qmolset
+ character*200 qstrana1
+ common
+ $/cbka/ dhbdc(nhbmax,3,3),cp(nat,3),
+ $ cadd(nat,3),d2(3*navib,3*navib),
+ $ veladd(3,nat),
+ $ aold(3,nat),dic(3,nat),pvdw1(nsort,nsort),
+ $ pvdw2(nsort,nsort),angimp(nat,6),
+ $ yt(na1mx3),pt(na1mx3),gi(na1mx3),enmolset(nmolset),
+ $ ai(na1mx3),bi(na1mx3),yi(na1mx3),pn(na1mx3),tbo(nat),
+ $ chgbgf(nattot),
+ $ abo2(nat),bor4(nat),bos(nbomax),
+ $ eldef(nat),vradic(nat),
+ $ vmo2(nat),
+ $ ro(nbomax),dbondr(nbomax),
+ $ dbosidr(nbomax),thgo(nopmax),
+ $ elmol(nmolmax),
+ $ elaf(nsort),vpq(nsort),
+ $ rvdw(nsort),alf(nsort),eps(nsort),chat(nsort),
+ $ rcore(nsort,nsort),ecore(nsort,nsort),acore(nsort,nsort),
+ $ vlp2(nsort),
+ $ valp2(nsort),vincr(nsort),
+ $ vval3(nsort),
+ $ vuncor(nbotym),
+ $ vop(nsort),
+ $ sigqeq(nsort),
+ $ rrcha(mrestra),
+ $ rmstra3(mrestra),
+ $ rmcha(mrestra),
+ $ rtcha(mrestra),rvcha(mrestra),
+ $ v2bo(ntotym),v3bo(ntotym),
+ $ eel,fctor,elr,
+ $ presx2,presy2,presz2,
+ $ tset2,
+ $ enmol,formol,vvol,tpnrad,
+ $ delvib,
+ $ taut2,tincr,xmasmd,
+ $ gdicmax,parc1,parc2,sumelec,
+ $ xinh,fsnh,vqnh,snh,ham,errnh,sumhe,
+ $ swa,swb2,swc0,swc1,swc2,swc3,swc4,swc5,swc6,
+ $ swc7,plr,endpo2,ccpar,
+ $ c4,estrmin,endpo,accincr,
+ $ endpoold,xadd,yadd,zadd,addist,taddmol,
+ $ Hug_E0, Hug_P0, Hug_V0, xImpVcm, shock_vel,
+ $ shock_z_sep
+ common
+ $/cbka/
+ $ ioop(nopmax,9),ifreqset(nmolset),
+ $ ijk(nat,4),icgeopt(nmolset),
+ $ irap(50),irdo(50,2),
+ $ ityadd(nat),
+ $ nmoloo(nat),iradic(nat),idef(nsort),nasort(nsort),
+ $ ibgr1(nattot),ibgr2(nattot),idupc(6),
+ $ imolsta(nat),
+ $ ncent2(nbomax),irads,nrdd,nrddf,nbiolab,nuge,
+ $ nbon2,npar,nodmty,ngnh,irac,nincrop,
+ $ nboty,mdstep,
+ $ nreac,
+ $ nbonop,icelo2,
+ $ iaddfreq,iveladd,invt,
+ $ noop,ndtau,
+ $ nelc3,nfc,nsav2,nmmax,ibh2,
+ $ nmmaxold,nfcold,icellold,imodfile,
+ $ icelo2old,inmov1,inmov2,nchaold,naa,nadattempt,
+ $ nequi,iadj,
+ $ ntest,nmm,
+ $ nmolo5o,nradcount,nmollset,iflga,
+ $ iperiod,ibgfversion,iremark,iconne,
+ $ kx,ky,kz,iexco,iruid,ibity,nvlist,
+ $ ityrad,iredo,iexx,iexy,iexz,ncellopt,
+ $ ndata2,nprob,nit,i5758,ingeo,nmoloold,itemp,
+ $ icgeo,ishock_type,isymm,
+ $ qadd(nat),qlabel(nattot),qffty(nattot),qresi1(nattot),
+ $ qresi2(nattot),qresi3(nattot),
+ $ qremark(20),qformat(20),qr,qffield,
+ $ qstrana1,qstrana2,qmolset(nmolset)
+***********************************************************************
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkabo.blk lammps-12Feb09/lib/reax/cbkabo.blk
--- lammps-29Jan09/lib/reax/cbkabo.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkabo.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbkabo/ abo(nat)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkatomcoord.blk lammps-12Feb09/lib/reax/cbkatomcoord.blk
--- lammps-29Jan09/lib/reax/cbkatomcoord.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkatomcoord.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,3 @@
+ common
+ $/cbkatomcoord/ id(nat,3),xmasat(nat),vel(3,nat),accel(3,nat)
+
diff -Naur lammps-29Jan09/lib/reax/cbkbo.blk lammps-12Feb09/lib/reax/cbkbo.blk
--- lammps-29Jan09/lib/reax/cbkbo.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkbo.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,3 @@
+ common
+ $/cbkbo/ bo(nbomax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkboncor.blk lammps-12Feb09/lib/reax/cbkboncor.blk
--- lammps-29Jan09/lib/reax/cbkboncor.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkboncor.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+ common
+ $/cbkboncor/ dbosindc(nbomax,3,2*mbond+2),dbosidc(nbomax,3,2),
+ $ bo131(nsort),bo132(nsort),bo133(nsort),
+ $ ovc(nbotym),v13cor(nbotym)
+
diff -Naur lammps-29Jan09/lib/reax/cbkbopi.blk lammps-12Feb09/lib/reax/cbkbopi.blk
--- lammps-29Jan09/lib/reax/cbkbopi.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkbopi.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,3 @@
+ common
+ $/cbkbopi/ bopi(nbomax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkbopi2.blk lammps-12Feb09/lib/reax/cbkbopi2.blk
--- lammps-29Jan09/lib/reax/cbkbopi2.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkbopi2.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,3 @@
+ common
+ $/cbkbopi2/ bopi2(nbomax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkbosi.blk lammps-12Feb09/lib/reax/cbkbosi.blk
--- lammps-29Jan09/lib/reax/cbkbosi.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkbosi.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbkbosi/ bosi(nbomax)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkc.blk lammps-12Feb09/lib/reax/cbkc.blk
--- lammps-29Jan09/lib/reax/cbkc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkc.blk 2009-02-12 09:09:50.000000000 -0700
@@ -0,0 +1,5 @@
+ common
+ $/cbkc/ c(nat,3),cglobal(nattot,3),itag(nat),
+ $chgglobal(nattot)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkch.blk lammps-12Feb09/lib/reax/cbkch.blk
--- lammps-29Jan09/lib/reax/cbkch.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkch.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbkch/ ch(nat)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkcha.blk lammps-12Feb09/lib/reax/cbkcha.blk
--- lammps-29Jan09/lib/reax/cbkcha.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkcha.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+ common
+ $/cbkcha/ ech,syscha,chisys
+ $ vfieldx,vfieldy,vfieldz,nmcharge,ioldchg
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkcharmol.blk lammps-12Feb09/lib/reax/cbkcharmol.blk
--- lammps-29Jan09/lib/reax/cbkcharmol.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkcharmol.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbkcharmol/ vmcha(nmolmax),
+ $ iat1mc(nmolmax),iat2mc(nmolmax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkchb.blk lammps-12Feb09/lib/reax/cbkchb.blk
--- lammps-29Jan09/lib/reax/cbkchb.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkchb.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,3 @@
+ common
+ $/cbkchb/ chi(nsort),eta(nsort),gam(nsort)
+
diff -Naur lammps-29Jan09/lib/reax/cbkconst.blk lammps-12Feb09/lib/reax/cbkconst.blk
--- lammps-29Jan09/lib/reax/cbkconst.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkconst.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+ common
+ $/cbkconst/ dgrrdn,one,half,three,zero,caljou,rgasc,xjouca
+ $ convmd
+
diff -Naur lammps-29Jan09/lib/reax/cbkcovbon.blk lammps-12Feb09/lib/reax/cbkcovbon.blk
--- lammps-29Jan09/lib/reax/cbkcovbon.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkcovbon.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+ common
+ $/cbkcovbon/ de2(nbotym),de3(nbotym),psi(nbotym),
+ $ psp(nbotym)
+
diff -Naur lammps-29Jan09/lib/reax/cbkd.blk lammps-12Feb09/lib/reax/cbkd.blk
--- lammps-29Jan09/lib/reax/cbkd.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkd.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,7 @@
+ integer Lvirial,Latomvirial
+
+ common
+ $/cbkd/ d(3,nat),estrain(nat)
+
+ common
+ $/cbkvirial/ atomvirial(6,nat),virial(6),Lvirial,Latomvirial
diff -Naur lammps-29Jan09/lib/reax/cbkdbodc.blk lammps-12Feb09/lib/reax/cbkdbodc.blk
--- lammps-29Jan09/lib/reax/cbkdbodc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdbodc.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,3 @@
+ common
+ $/cbkdbodc/ dbodc(nbomax,3,2)
+
diff -Naur lammps-29Jan09/lib/reax/cbkdbopi2ndc.blk lammps-12Feb09/lib/reax/cbkdbopi2ndc.blk
--- lammps-29Jan09/lib/reax/cbkdbopi2ndc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdbopi2ndc.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+
+ common
+ $/cbkdbopi2ndc/ dbopi2ndc(nbomax,3,2*mbond+2)
+
diff -Naur lammps-29Jan09/lib/reax/cbkdbopidc.blk lammps-12Feb09/lib/reax/cbkdbopidc.blk
--- lammps-29Jan09/lib/reax/cbkdbopidc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdbopidc.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/dbopidc/ dbopi2dc(nbomax,3,2),dbopidc(nbomax,3,2)
+
diff -Naur lammps-29Jan09/lib/reax/cbkdbopindc.blk lammps-12Feb09/lib/reax/cbkdbopindc.blk
--- lammps-29Jan09/lib/reax/cbkdbopindc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdbopindc.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+
+ common
+ $/dbopindc/ dbopindc(nbomax,3,2*mbond+2)
+
diff -Naur lammps-29Jan09/lib/reax/cbkdcell.blk lammps-12Feb09/lib/reax/cbkdcell.blk
--- lammps-29Jan09/lib/reax/cbkdcell.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdcell.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbkdcell/ dcell(3,nat,27)
+
diff -Naur lammps-29Jan09/lib/reax/cbkdhdc.blk lammps-12Feb09/lib/reax/cbkdhdc.blk
--- lammps-29Jan09/lib/reax/cbkdhdc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdhdc.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbkdhdc/ dhdc(nvamax,3,3)
+
diff -Naur lammps-29Jan09/lib/reax/cbkdistan.blk lammps-12Feb09/lib/reax/cbkdistan.blk
--- lammps-29Jan09/lib/reax/cbkdistan.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdistan.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbkdistan/ axis(3),aaxh,baxh,caxh,iortho
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkdrdc.blk lammps-12Feb09/lib/reax/cbkdrdc.blk
--- lammps-29Jan09/lib/reax/cbkdrdc.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkdrdc.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbkdrdc/ drdc(nbomax,3,2)
+
diff -Naur lammps-29Jan09/lib/reax/cbkefield.blk lammps-12Feb09/lib/reax/cbkefield.blk
--- lammps-29Jan09/lib/reax/cbkefield.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkefield.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+
+ common
+ $/cbkefield/ efix,efiy,efiz,c1
+
diff -Naur lammps-29Jan09/lib/reax/cbkenergies.blk lammps-12Feb09/lib/reax/cbkenergies.blk
--- lammps-29Jan09/lib/reax/cbkenergies.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkenergies.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,7 @@
+
+ common
+ $/cbkenergies/ eb,eoop,epen,estrc,deda(3),pressu,
+ $ efi,elp,emol,ea,eres,et,eradbo,
+ $ ev,eco,ecoa,ehb,sw,ew,ep,ekin
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkeregime.blk lammps-12Feb09/lib/reax/cbkeregime.blk
--- lammps-29Jan09/lib/reax/cbkeregime.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkeregime.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+ character*5 qetype
+ common
+ $/cbkeregime/ qetype(mereg,mezone),nnereg(mereg),nerc,
+ $ ereg(mereg,mezone),nitec(mereg)
+
diff -Naur lammps-29Jan09/lib/reax/cbkff.blk lammps-12Feb09/lib/reax/cbkff.blk
--- lammps-29Jan09/lib/reax/cbkff.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkff.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,9 @@
+ character*2 qas
+ common
+ $/cbkff/ gamcco(nsort,nsort),vpar(npamax),vovun(nsort),
+ $ stlp(nsort),aval(nsort),vlp1(nsort),
+ $ vover(nbotym),valp1(nsort),
+ $ vka(nvatym),qas(nsort),amas(nsort),e1(nbotym),
+ $ valf(nsort),de1(nbotym),swb,nvs(nvatym,3),nso,nvaty
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkfftorang.blk lammps-12Feb09/lib/reax/cbkfftorang.blk
--- lammps-29Jan09/lib/reax/cbkfftorang.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkfftorang.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,8 @@
+
+
+
+
+ common
+ $/cbkfftorang/ v4(ntotym),vconj(ntotym),
+ $ v1(ntotym),v2(ntotym),v3(ntotym)
+
diff -Naur lammps-29Jan09/lib/reax/cbkh.blk lammps-12Feb09/lib/reax/cbkh.blk
--- lammps-29Jan09/lib/reax/cbkh.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkh.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbkh/ h(nvamax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkhbond.blk lammps-12Feb09/lib/reax/cbkhbond.blk
--- lammps-29Jan09/lib/reax/cbkhbond.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkhbond.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+ common
+
+ $/cbkhbond/ hhb(nhbmax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkia.blk lammps-12Feb09/lib/reax/cbkia.blk
--- lammps-29Jan09/lib/reax/cbkia.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkia.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+
+ common
+ $/cbkia/ ia(nat,mbond+3),iag(nat,mbond+3)
+
diff -Naur lammps-29Jan09/lib/reax/cbkidbo.blk lammps-12Feb09/lib/reax/cbkidbo.blk
--- lammps-29Jan09/lib/reax/cbkidbo.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkidbo.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,7 @@
+
+
+
+ common
+ $/cbkidbo/ idbo(nbomax,2*mbond+2),dbondc(nbomax,3,2*mbond+2),
+ $ idbo1(nbomax)
+
diff -Naur lammps-29Jan09/lib/reax/cbkimove.blk lammps-12Feb09/lib/reax/cbkimove.blk
--- lammps-29Jan09/lib/reax/cbkimove.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkimove.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+ common
+ $/cbkimove/ imove(nattot)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkinit.blk lammps-12Feb09/lib/reax/cbkinit.blk
--- lammps-29Jan09/lib/reax/cbkinit.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkinit.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+ character*40 qruid
+ common
+ $/cbkinit/ tsetor,nzero,none,ntwo,nthree,qruid,systime,
+ $ ustime,two,pi,avognr,axiss(3),pset,rdndgr
+
diff -Naur lammps-29Jan09/lib/reax/cbklonpar.blk lammps-12Feb09/lib/reax/cbklonpar.blk
--- lammps-29Jan09/lib/reax/cbklonpar.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbklonpar.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbklonpar/ vlp(nat),dvlpdsbo(nat)
+
diff -Naur lammps-29Jan09/lib/reax/cbkmolec.blk lammps-12Feb09/lib/reax/cbkmolec.blk
--- lammps-29Jan09/lib/reax/cbkmolec.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkmolec.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+
+ common
+ $/cbkmolec/ nmolat2(nmolmax,nat),elmol2(nmolmax)
+
diff -Naur lammps-29Jan09/lib/reax/cbknmolat.blk lammps-12Feb09/lib/reax/cbknmolat.blk
--- lammps-29Jan09/lib/reax/cbknmolat.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbknmolat.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+
+ common
+ $/cbknmolat/ nmolat(nmolmax,nat)
+
diff -Naur lammps-29Jan09/lib/reax/cbknonbon.blk lammps-12Feb09/lib/reax/cbknonbon.blk
--- lammps-29Jan09/lib/reax/cbknonbon.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbknonbon.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,6 @@
+
+
+ common
+ $/cbknonbon/ gamwco(nsort,nsort),sw1,p3co(nsort,nsort),
+ $ p2co(nsort,nsort),p1co(nsort,nsort)
+
diff -Naur lammps-29Jan09/lib/reax/cbknubon2.blk lammps-12Feb09/lib/reax/cbknubon2.blk
--- lammps-29Jan09/lib/reax/cbknubon2.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbknubon2.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbknubon2/ nubon1(nat,mbond), nubon2(nat,mbond)
+
diff -Naur lammps-29Jan09/lib/reax/cbknvlbo.blk lammps-12Feb09/lib/reax/cbknvlbo.blk
--- lammps-29Jan09/lib/reax/cbknvlbo.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbknvlbo.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbknvlbo/ nvlbo(nneighmax*nat)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbknvlown.blk lammps-12Feb09/lib/reax/cbknvlown.blk
--- lammps-29Jan09/lib/reax/cbknvlown.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbknvlown.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,2 @@
+ common
+ $/cbknvlown/ nvlown(nneighmax*nat)
diff -Naur lammps-29Jan09/lib/reax/cbkpairs.blk lammps-12Feb09/lib/reax/cbkpairs.blk
--- lammps-29Jan09/lib/reax/cbkpairs.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkpairs.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+ common
+ $/cbkpairs/ nvl1(nneighmax*nat),nvl2(nneighmax*nat),nvpair,nvlself
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkpres.blk lammps-12Feb09/lib/reax/cbkpres.blk
--- lammps-29Jan09/lib/reax/cbkpres.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkpres.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+
+ common
+ $/cbkpres/ presx,presy,presz
+
diff -Naur lammps-29Jan09/lib/reax/cbkqa.blk lammps-12Feb09/lib/reax/cbkqa.blk
--- lammps-29Jan09/lib/reax/cbkqa.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkqa.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+ character*2 qa
+ common
+ $/cbkqa/ qa(nattot)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkrbo.blk lammps-12Feb09/lib/reax/cbkrbo.blk
--- lammps-29Jan09/lib/reax/cbkrbo.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkrbo.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbkrbo/ rbo(nbomax),ibsym(nbomax),ib(nbomax,3)
+
diff -Naur lammps-29Jan09/lib/reax/cbkrestr.blk lammps-12Feb09/lib/reax/cbkrestr.blk
--- lammps-29Jan09/lib/reax/cbkrestr.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkrestr.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,12 @@
+ common
+ $/cbkrestr/ vkrv(mrestra),vrstra(mrestra),vkr2v(mrestra),
+ $ dismacen(mrestra),rmstra1(mrestra),
+ $ rrstra(mrestra),vkrst2(mrestra),
+ $ rmstra2(mrestra),rmstrax(mrestra),rmstray(mrestra),
+ $ rmstraz(mrestra),cmo(nat,3),vmo1(nat),trstra(mrestra),
+ $ vkrt(mrestra),vkr2t(mrestra),vkrstr(mrestra),
+ $ irstrav(mrestra,3),irstra(mrestra,2),itend(mrestra),
+ $ irstram(mrestra,5),itstart(mrestra),irstrat(mrestra,4),
+ $ imorph
+
+
diff -Naur lammps-29Jan09/lib/reax/cbksrtbon1.blk lammps-12Feb09/lib/reax/cbksrtbon1.blk
--- lammps-29Jan09/lib/reax/cbksrtbon1.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbksrtbon1.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,13 @@
+ character*60 qmol
+ common
+ $/cbksrtbon1/ dbodr(nbomax),dbopidr(nbomax),
+ $ dbopi2dr(nbomax),
+ $ rob1(nsort,nsort),rob2(nsort,nsort),
+ $ rob3(nsort,nsort),
+ $ rat(nsort),rapt(nsort),vnq(nsort),bom(nbotym),
+ $ pdp(nbotym),ptp(nbotym),pdo(nbotym),
+ $ popi(nbotym),bop1(nbotym),bop2(nbotym),cutoff,
+ $ nbs(nbotym,2),
+ $ nsbma2,nsbmax,nboty2,nbonall,qfile(nmolset),qmol
+
+
diff -Naur lammps-29Jan09/lib/reax/cbksrthb.blk lammps-12Feb09/lib/reax/cbksrthb.blk
--- lammps-29Jan09/lib/reax/cbksrthb.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbksrthb.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,8 @@
+
+
+ common
+ $/cbksrthb/ vhb1(nhbtym),vhb2(nhbtym),rhb(nhbtym),
+ $ dehb(nhbtym),ihb(nhbmax,8),nhb,
+ $ nphb(nsort),nhbs(nhbtym,3),nhbty,hbcut
+
+
diff -Naur lammps-29Jan09/lib/reax/cbktorang.blk lammps-12Feb09/lib/reax/cbktorang.blk
--- lammps-29Jan09/lib/reax/cbktorang.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbktorang.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbktorang/ dargtdc(ntomax,3,4),thg(ntomax)
+
diff -Naur lammps-29Jan09/lib/reax/cbktorsion.blk lammps-12Feb09/lib/reax/cbktorsion.blk
--- lammps-29Jan09/lib/reax/cbktorsion.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbktorsion.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,7 @@
+
+
+
+ common
+ $/cbktorsion/ nts(ntotym,4),ntoty,ntor,it(ntomax,11)
+
+
diff -Naur lammps-29Jan09/lib/reax/cbktregime.blk lammps-12Feb09/lib/reax/cbktregime.blk
--- lammps-29Jan09/lib/reax/cbktregime.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbktregime.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,8 @@
+ common
+ $/cbktregime/ dttreg(mtreg,mtzone),tdamptreg(mtreg,mtzone),
+ $ ia1treg(mtreg,mtzone),ia2treg(mtreg,mtzone),
+ $ tsettreg(mtreg,mtzone),nntreg(mtreg),ittc(mtreg),
+ $ nittc(mtreg),ifieldz,ifieldx,ifieldy,
+ $ nrestra,nrestram,nrestrat,nrestrav,ntrc
+
+
diff -Naur lammps-29Jan09/lib/reax/cbkvalence.blk lammps-12Feb09/lib/reax/cbkvalence.blk
--- lammps-29Jan09/lib/reax/cbkvalence.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkvalence.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+
+
+ common
+ $/cbkvalence/ nval,iv(nvamax,6)
+
diff -Naur lammps-29Jan09/lib/reax/cbkvregime.blk lammps-12Feb09/lib/reax/cbkvregime.blk
--- lammps-29Jan09/lib/reax/cbkvregime.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cbkvregime.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,7 @@
+ character*5 qvtype
+ common
+ $/cbkvregime/ ivsca(mvreg,mvzone),dvvreg(mvreg,mvzone),
+ $ nnvreg(mvreg),invrc,nitvc(mvreg),
+ $ qvtype(mvreg,mvzone)
+
+
diff -Naur lammps-29Jan09/lib/reax/cellcoord.blk lammps-12Feb09/lib/reax/cellcoord.blk
--- lammps-29Jan09/lib/reax/cellcoord.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/cellcoord.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,4 @@
+
+ common
+ $/cellcoord/ tm11,tm21,tm31,tm22,tm32,tm33,angle(3),angles(3)
+
diff -Naur lammps-29Jan09/lib/reax/control.blk lammps-12Feb09/lib/reax/control.blk
--- lammps-29Jan09/lib/reax/control.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/control.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,12 @@
+ common
+ $/control/ vrange,cutof2,cutof3,vlbora,tstep,range,taut,volcha,
+ $ axis1,axis2,axis3,taup,
+ $ icpres,nmethod,noutpt,inpt,napp,ianaly,ncha2,
+ $ nrand,ntscale,itstep,ndebug,icentr,itrout,
+ $ nchaudixmolo,itrans,nsav,
+ $ nrep1,ncontrol,nhop2,nsav3,ngeofor,ifreq,
+ $ nprevrun,maxstp,nvel,nsurp,ncons,
+ $ ncha,icell,imolde,nchaud
+*********************************************************************************
+
+
diff -Naur lammps-29Jan09/lib/reax/opt.blk lammps-12Feb09/lib/reax/opt.blk
--- lammps-29Jan09/lib/reax/opt.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/opt.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,23 @@
+ parameter (maxdat=5000)
+ parameter (maxmdat=2500)
+ parameter (maxkop=2500)
+ character*80 qff
+ character*60 qmdat
+ character*100 qdatid
+ character*2 qas2
+ common
+ $/opt/ fpar(7,nvatym,40),datopt(maxdat),caldat(maxdat),
+ $ compdat(maxdat),weightdat(maxdat),
+ $ devi(maxdat),vkop(maxkop),devkop(maxkop),sdy(3),
+ $ valpar,valnew,change,vchange,
+ $ molin(maxmdat,nsort),
+ $ iboo(nbotym,2),idmo(nodmtym,2),ivao(nvatym,5),
+ $ itoo(ntotym,7),ihbo(nhbtym,5),iheada(maxmdat),
+ $ ndatm(maxmdat),iheada2(maxmdat),ichn(3),
+ $ ikop1(maxkop),ikop2(maxkop),idat(maxdat),mu1(maxkop),
+ $ mu2(maxkop),
+ $ ndata,imam,iopt,iheatf,nkop,iagain,
+ $ qdatid(maxdat),qmdat(maxmdat),qff(250),qas2(nsort)
+***********************************************************************
+
+
diff -Naur lammps-29Jan09/lib/reax/reax_charges.F lammps-12Feb09/lib/reax/reax_charges.F
--- lammps-29Jan09/lib/reax/reax_charges.F 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_charges.F 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,85 @@
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+************************************************************************
+
+ subroutine taper(r,r2)
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkconst.blk"
+#include "cbkenergies.blk"
+#include "cbkinit.blk"
+#include "cbknonbon.blk"
+************************************************************************
+* *
+* Taper function for Coulomb interaction *
+* *
+************************************************************************
+ r3=r2*r
+ SW=SWC7*R3*R3*R+SWC6*R3*R3+SWC5*R3*R2+SWC4*R2*R2+SWC3*R3+SWC2*R2+
+ $SWC1*R+SWC0
+ SW1=7.0D0*SWC7*R3*R3+6.0D0*SWC6*R3*R2+5.0D0*SWC5*R2*R2+
+ $4.0D0*SWC4*R3+THREE*SWC3*R2+TWO*SWC2*R+SWC1
+ return
+ end
+************************************************************************
+************************************************************************
+
+ subroutine tap7th
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkff.blk"
+#include "cbkh.blk"
+#include "control.blk"
+
+************************************************************************
+* *
+* 7th order taper function setup *
+* *
+************************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In tap7th'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ D1=SWB-SWA
+ D7=D1**7.0D0
+ SWA2=SWA*SWA
+ SWA3=SWA2*SWA
+ SWB2=SWB*SWB
+ SWB3=SWB2*SWB
+
+************************************************************************
+* 7th order taper function *
+************************************************************************
+
+ SWC7= 20.0D0/D7
+ SWC6= -70.0D0*(SWA+SWB)/D7
+ SWC5= 84.0D0*(SWA2+3.0D0*SWA*SWB+SWB2)/D7
+ SWC4= -35.0D0*(SWA3+9.0D0*SWA2*SWB+9.0D0*SWA*SWB2+SWB3)/D7
+ SWC3= 140.0D0*(SWA3*SWB+3.0D0*SWA2*SWB2+SWA*SWB3)/D7
+ SWC2=-210.0D0*(SWA3*SWB2+SWA2*SWB3)/D7
+ SWC1= 140.0D0*SWA3*SWB3/D7
+ SWC0=(-35.0D0*SWA3*SWB2*SWB2+21.0D0*SWA2*SWB3*SWB2+
+ $7.0D0*SWA*SWB3*SWB3+SWB3*SWB3*SWB)/D7
+
+ return
+ END
diff -Naur lammps-29Jan09/lib/reax/reax_connect.F lammps-12Feb09/lib/reax/reax_connect.F
--- lammps-29Jan09/lib/reax/reax_connect.F 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_connect.F 2009-02-12 09:09:50.000000000 -0700
@@ -0,0 +1,1545 @@
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+**********************************************************************
+
+ subroutine srtatom
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkatomcoord.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkqa.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+**********************************************************************
+* *
+* Determine atom types in system *
+* *
+**********************************************************************
+* Requires the following variables
+* ndebug - opt.blk; determines whether to debug or not; everywhere
+* xmasmd - cbka.blk; some sort of atmoic mass?; srtatom, reac.f
+* molin - opt.blk; keeps info on?; srtatom
+* nso - cbka.blk; number of atoms?; srtatom, inout.f
+* nprob - cbka.blk; does?; connect.f, inout.f, reac.f
+* nasort - cbka.blk; a sorting array; srtatom
+* ia - cbka.blk; atom numbers?; poten.f, inout.f, connect.f, charges.f
+* iag - cbka.blk; ; connect.f, inout.f, poten.f, reac.f
+* xmasat - cbka.blk; does?; srtatom, reac.f
+* amas - cbka.blk; ? ; srtatom, ffinpt, molanal, ovcor
+* qa - cbka.blk; some sort of error statement variable?; srtatom, srtbon1, inout.f, radbo
+*
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In srtatom'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ xmasmd=0.0
+ do i1=1,nso
+ molin(nprob,i1)=0
+ nasort(i1)=0
+ end do
+ do i1=1,na
+ ia(i1,1)=0
+ iag(i1,1)=0
+ do i2=1,nso
+ if (qa(i1).eq.qas(i2)) then
+ ia(i1,1)=i2
+ iag(i1,1)=i2
+ molin(nprob,i2)=molin(nprob,i2)+1
+ xmasat(i1)=amas(i2)
+ xmasmd=xmasmd+amas(i2)
+ nasort(i2)=nasort(i2)+1
+ end if
+ end do
+ if (ia(i1,1).eq.0) then
+ write (*,*)'Unknown atom type: ',qa(i1)
+ stop 'Unknown atom type'
+ end if
+ end do
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine molec
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkdcell.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkmolec.blk"
+#include "cbknmolat.blk"
+#include "control.blk"
+#include "small.blk"
+ dimension nmolo2(nat),iseen(nmolmax),isee2(nmolmax)
+**********************************************************************
+* *
+* Determine changes in molecules *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In molec'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ npreac=0
+
+ do i1=1,nmolo
+ natmol=0
+ do i2=1,na
+ if (ia(i2,3+mbond).eq.i1) then
+ natmol=natmol+1
+ nmolat(i1,natmol+1)=i2
+ end if
+ end do
+ nmolat(i1,1)=natmol
+ end do
+
+ if (nmolo5.lt.nmolo5o) nradcount=0 !reset reaction counter
+ do i1=1,nmolo5
+ natmol=0
+ do i2=1,na
+ if (iag(i2,3+mbond).eq.i1) then
+ natmol=natmol+1
+ nmolat2(i1,natmol+1)=i2
+ end if
+ end do
+ nmolat2(i1,1)=natmol
+ end do
+ nmolo5o=nmolo5
+
+ do i1=nmolo+1,nmoloold
+ do i2=1,nmolat(i1,1)
+ nmolat(i1,1+i2)=0
+ end do
+ nmolat(i1,1)=0
+ end do
+
+ do i1=1,nmolo
+ elmol(i1)=0.0
+ do i2=1,nmolat(i1,1)
+ ihu=nmolat(i1,i2+1)
+ ity=ia(ihu,1)
+ elmol(i1)=elmol(i1)+stlp(ity)
+ end do
+ end do
+
+ do i1=1,nmolo5
+ elmol2(i1)=0.0
+ do i2=1,nmolat2(i1,1)
+ ihu=nmolat2(i1,i2+1)
+ ity=iag(ihu,1)
+ elmol2(i1)=elmol2(i1)+stlp(ity)
+ end do
+ end do
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine dista2 (n1,n2,dista,dx,dy,dz)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+**********************************************************************
+* *
+* Determine interatomic distances *
+* *
+**********************************************************************
+c$$$* if (ndebug.eq.1) then
+c$$$C* open (65,file='fort.65',status='unknown',access='append')
+c$$$* write (65,*) 'In dista2'
+c$$$* call timer(65)
+c$$$* close (65)
+c$$$* end if
+
+ dx=c(n1,1)-c(n2,1)
+ dy=c(n1,2)-c(n2,2)
+ dz=c(n1,3)-c(n2,3)
+ dista=sqrt(dx*dx+dy*dy+dz*dz)
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine srtbon1(lprune,lhb,hbcut_in)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkbo.blk"
+#include "cbkbosi.blk"
+#include "cbkbopi.blk"
+#include "cbkbopi2.blk"
+#include "cbkc.blk"
+#include "cbkch.blk"
+#include "cbkconst.blk"
+#include "cbkdbopidc.blk"
+#include "cbkdrdc.blk"
+#include "cbkia.blk"
+#include "cbknubon2.blk"
+#include "cbknvlbo.blk"
+#include "cbkpairs.blk"
+#include "cbknvlown.blk"
+#include "cbkqa.blk"
+#include "cbkrbo.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbkdbodc.blk"
+#include "cbksrtbon1.blk"
+#include "cbkff.blk"
+#include "cbksrthb.blk"
+ logical found
+ integer nboncol(nboallmax)
+ integer iball(nboallmax,3)
+
+**********************************************************************
+* *
+* Determine connections within the molecule *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In srtbon1'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+c Transfer hbcut from C++ calling function
+ hbcut = hbcut_in
+
+ do i1=1,na
+ abo(i1)=0.0d0
+ end do
+ nbonall=0
+ nbon2=0
+ nsbmax=0
+ nsbma2=0
+
+ if (imolde.eq.0) then
+
+ nmolo=0
+ nmolo5=0
+ end if
+ if (imolde.eq.0) then
+ do i1=1,na
+ do i2=2,mbond+3
+ ia(i1,i2)=0
+ iag(i1,i2)=0
+ end do
+ end do
+
+ else
+
+ do i1=1,na
+ do i2=2,mbond+2
+ ia(i1,i2)=0
+ iag(i1,i2)=0
+ end do
+ end do
+
+ end if
+
+ do i1=1,na
+ do i2=1,mbond
+ nubon1(i1,i2)=0
+ nubon2(i1,i2)=0
+ end do
+ end do
+
+* First detect all bonds and create preliminary list
+
+ do 11 ivl=1,nvpair
+ if (nvlbo(ivl).eq.0) goto 11 !not in bond order range
+ i1=nvl1(ivl)
+ i2=nvl2(ivl)
+ call dista2(i1,i2,dis,dxm,dym,dzm)
+ ih1=ia(i1,1)
+ ih2=ia(i2,1)
+ disdx=dxm/dis
+ disdy=dym/dis
+ disdz=dzm/dis
+ itype=0
+ if (ih1.gt.ih2) then
+ ih1=ia(i2,1)
+ ih2=ia(i1,1)
+ end if
+ do i3=1,nboty2
+ if (ih1.eq.nbs(i3,1).and.ih2.eq.nbs(i3,2)) itype=i3
+ end do
+ if (itype.eq.0.and.rat(ih1).gt.zero.and.rat(ih2).gt.zero) then
+c$$$ call mdsav(1,qfile(nprob))
+ write (*,*)qa(i1),'-',qa(i2),'Fatal: Unknown bond in molecule'
+ stop
+ end if
+
+ rhulp=dis/rob1(ih1,ih2)
+
+**********************************************************************
+* *
+* Determine bond orders *
+* *
+**********************************************************************
+ rh2=zero
+ rh2p=zero
+ rh2pp=zero
+ ehulp=zero
+ ehulpp=zero
+ ehulppp=zero
+ bomh=bom(itype)
+ if (rapt(ih1).gt.zero.and.rapt(ih2).gt.zero) then
+ rhulp2=dis/rob2(ih1,ih2)
+ rh2p=rhulp2**ptp(itype)
+ ehulpp=bomh*exp(pdp(itype)*rh2p)
+ end if
+ if (vnq(ih1).gt.zero.and.vnq(ih2).gt.zero) then
+ rhulp3=dis/rob3(ih1,ih2)
+ rh2pp=rhulp3**popi(itype)
+ ehulppp=bomh*exp(pdo(itype)*rh2pp)
+ end if
+
+ if (rat(ih1).gt.zero.and.rat(ih2).gt.zero) then
+ rh2=rhulp**bop2(itype)
+ ehulp=bomh*(1.0+cutoff)*exp(bop1(itype)*rh2)
+ end if
+
+ bor=ehulp+ehulpp+ehulppp
+
+ j1=i1
+ j2=i2
+
+**********************************************************************
+* *
+* Determine bond orders *
+* *
+**********************************************************************
+ if (bor.gt.cutoff) then
+ nbonall=nbonall+1
+ if (nbonall.gt.nboallmax) then
+ write (6,*)'nbonall = ',nbonall,
+ $ ' reax_defs.h::NBOALLMAXDEF = ',NBOALLMAXDEF,
+ $ ' after',ivl, ' of ',nvpair,' pairs completed.'
+ stop 'Too many bonds; maybe wrong cell parameters.'
+ end if
+ iball(nbonall,1)=itype
+ iball(nbonall,2)=j1
+ iball(nbonall,3)=j2
+
+ ia(i1,2)=ia(i1,2)+1
+ if (ia(i1,2).gt.mbond) then
+ write (6,*)'ia(i1,2) = ',ia(i1,2),
+ $ ' reax_defs.h::MBONDDEF = ',MBONDDEF,
+ $ ' after',ivl, ' of ',nvpair,' pairs completed.'
+ stop 'Too many bonds on atom. Increase MBONDDEF'
+ end if
+
+ if (i1.ne.i2) then
+ ia(i2,2)=ia(i2,2)+1
+ if (ia(i2,2).gt.mbond) then
+ write (6,*)'ia(i1,2) = ',ia(i1,2),
+ $ ' reax_defs.h::MBONDDEF = ',MBONDDEF,
+ $ ' after',ivl, ' of ',nvpair,' pairs completed.'
+ stop 'Too many bonds on atom. Increase MBONDDEF'
+ end if
+ endif
+
+ ia(i1,ia(i1,2)+2)=i2
+ ia(i2,ia(i2,2)+2)=i1
+ if (abs(de1(iball(nbonall,1))).gt.-0.01) then
+ nubon2(i1,ia(i1,2))=nbonall
+ nubon2(i2,ia(i2,2))=nbonall
+ else
+ nbonall=nbonall-1 !Inorganics
+ end if
+ end if
+ 11 continue
+
+**********************************************************************
+* *
+* lprune controls level of bond-pruning performed to increase *
+* performance. For correct results, it should be set to 4. *
+* However, making it smaller can speed up *
+* force calculation and may not have a big effect on forces. *
+* Setting it to 0 turns off pruning, useful for debugging. *
+* *
+**********************************************************************
+*********************************************************************
+* *
+* lhb controls whether or not to unprune ghost bonds that *
+* may possibly form ghost hydrogen bonds. *
+* Setting it to 1 causes unpruning, and so is the safe option. *
+* If lprune = 0, then pruning is not used, results are exact *
+* and lhb has no effect. *
+* *
+**********************************************************************
+ if (lprune .gt. 0) then
+**********************************************************************
+* *
+* Eliminate bonds that are not in 1-6 interaction *
+* with local atom, or closer. *
+* Need additional sweep to catch possible hydrogen bonds *
+* *
+**********************************************************************
+
+ ntmp0 = 0
+ ntmp1 = 0
+ ntmp2 = 0
+ ntmp3 = 0
+ ntmp4 = 0
+ ntmp5 = 0
+ ntmp6 = 0
+ ntmphb = 0
+
+* color 1 are bonds with two local atoms
+* color 2 are bonds with one local atom
+* color 3 are bonds adjacent to bond with one local atom
+
+ do i1 = 1,nbonall
+ if (iball(i1,2).le.na_local) then
+ if (iball(i1,3).le.na_local) then
+ nboncol(i1) = 1
+ ntmp1 = ntmp1+1
+ else
+ nboncol(i1) = 2
+ ntmp2 = ntmp2+1
+ endif
+ else if (iball(i1,3).le.na_local) then
+ nboncol(i1) = 2
+ ntmp2 = ntmp2+1
+ else
+ nboncol(i1) = 0
+ endif
+ end do
+
+ if (lprune .ge. 3) then
+ do i1 = 1,nbonall
+ if (nboncol(i1).eq.2) then
+ if (iball(i1,2).le.na_local) then
+ i3=iball(i1,3)
+ else
+ i3=iball(i1,2)
+ endif
+
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.0) then
+ nboncol(i5)=3
+ ntmp3 = ntmp3+1
+ endif
+ end do
+ endif
+ end do
+ endif
+* color 4 bonds are part of a 1-4 interaction with local atom
+
+ if (lprune .ge. 4) then
+ do i1 = 1,nbonall
+ if (nboncol(i1).eq.3) then
+* One end definitely has a bond of color 2
+* Find it and color bonds on other end 4
+ i3=iball(i1,2)
+ i3b=0
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.2) then
+ i3b=iball(i1,3)
+ endif
+ end do
+
+ if (i3b.eq.0) then
+ i3=iball(i1,3)
+ i3b=0
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.2) then
+ i3b=iball(i1,2)
+ endif
+ end do
+ endif
+
+ if (i3b.eq.0) then
+ stop 'Could not find color 2 from color 3 bond'
+ endif
+
+ do i4 = 1,ia(i3b,2)
+ i5=nubon2(i3b,i4)
+ if (nboncol(i5).eq.0) then
+ nboncol(i5)=4
+ ntmp4 = ntmp4+1
+ endif
+ end do
+
+ endif
+ end do
+ endif
+
+* color 5 bonds are part of a 1-5 interaction with local atom
+
+ if (lprune .ge. 5) then
+ do i1 = 1,nbonall
+ if (nboncol(i1).eq.4) then
+* One end definitely has a bond of color 3
+* Find it and color bonds on other end 5
+ i3=iball(i1,2)
+ i3b=0
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.3) then
+ i3b=iball(i1,3)
+ endif
+ end do
+
+ if (i3b.eq.0) then
+ i3=iball(i1,3)
+ i3b=0
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.3) then
+ i3b=iball(i1,2)
+ endif
+ end do
+ endif
+
+ if (i3b.eq.0) then
+ stop 'Could not find color 3 from color 4 bond'
+ endif
+
+ do i4 = 1,ia(i3b,2)
+ i5=nubon2(i3b,i4)
+ if (nboncol(i5).eq.0) then
+ nboncol(i5)=5
+ ntmp5 = ntmp5+1
+ endif
+ end do
+
+ endif
+ end do
+ endif
+
+* color 6 bonds are part of a 1-6 interaction with local atom
+
+ if (lprune .ge. 6) then
+ do i1 = 1,nbonall
+ if (nboncol(i1).eq.5) then
+* One end definitely has a bond of color 4
+* Find it and color bonds on other end 6
+ i3=iball(i1,2)
+ i3b=0
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.4) then
+ i3b=iball(i1,3)
+ endif
+ end do
+
+ if (i3b.eq.0) then
+ i3=iball(i1,3)
+ i3b=0
+ do i4 = 1,ia(i3,2)
+ i5=nubon2(i3,i4)
+ if (nboncol(i5).eq.4) then
+ i3b=iball(i1,2)
+ endif
+ end do
+ endif
+
+ if (i3b.eq.0) then
+ stop 'Could not find color 4 from color 5 bond'
+ endif
+
+ do i4 = 1,ia(i3b,2)
+ i5=nubon2(i3b,i4)
+ if (nboncol(i5).eq.0) then
+ nboncol(i5)=6
+ ntmp6 = ntmp6+1
+ endif
+ end do
+
+ endif
+ end do
+ endif
+
+* Catch all the possible hydrogen bonds
+* This section replicates the logic used in srthb()
+ if (lhb .eq. 1) then
+c Outer loop must be Verlet list, because ia() does not store Verlet entries,
+c but it does store bond entries in nubon2()
+ do ivl=1,nvpair !Use Verlet-list to find donor-acceptor pairs
+
+ j1=nvl1(ivl)
+ j2=nvl2(ivl)
+ ihhb1=nphb(ia(j1,1))
+ ihhb2=nphb(ia(j2,1))
+
+ if (ihhb1.gt.ihhb2) then !Make j1 donor(H) atom and j2 acceptor(O) atom
+ j2=nvl1(ivl)
+ j1=nvl2(ivl)
+ ihhb1=nphb(ia(j1,1))
+ ihhb2=nphb(ia(j2,1))
+ end if
+
+* Only need to compute bonds where j1 is local
+ if (j1 .le. na_local) then
+
+ if (ihhb1.eq.1.and.ihhb2.eq.2) then
+ call dista2(j1,j2,dishb,dxm,dym,dzm)
+ if (dishb.lt.hbcut) then
+ do i23=1,ia(j1,2) !Search for acceptor atoms bound to donor atom
+ if (nboncol(nubon2(j1,i23)).eq.0) then
+ j3=ia(j1,2+i23)
+ if (nphb(ia(j3,1)).eq.2.and.j3.ne.j2) then
+ nboncol(nubon2(j1,i23))=-1
+ ntmphb = ntmphb+1
+ endif
+ endif
+ end do
+ end if
+ end if
+ end if
+ end do
+ end if
+
+* Compact the list, removing all uncolored bonds
+
+ nbon = 0
+ do i1 = 1,nbonall
+ if (nboncol(i1).eq.0) then
+ ntmp0=ntmp0+1
+ else
+ nbon = nbon+1
+
+ if (nbon.gt.nbomax) then
+ write (6,*)nbon,nbomax
+ write (6,*)'nbon = ',nbon,' reax_defs.h::NBOMAXDEF = ',
+ $ NBOMAXDEF,' after',i1, ' of ',nbonall,
+ $ ' initial bonds completed.'
+ stop 'Too many pruned bonds; increase NBOMAXDEF'
+ end if
+
+
+ ib(nbon,1) = iball(i1,1)
+ ib(nbon,2) = iball(i1,2)
+ ib(nbon,3) = iball(i1,3)
+ endif
+ end do
+
+**********************************************************************
+* *
+* Do not perform ghost-bond pruning *
+* *
+**********************************************************************
+
+ else
+
+ nbon = 0
+ do i1 = 1,nbonall
+ nbon = nbon+1
+
+ if (nbon.gt.nbomax) then
+ write (6,*)nbon,nbomax
+ write (6,*)'nbon = ',nbon,' reax_defs.h::NBOMAXDEF = ',
+ $ NBOMAXDEF,' after',i1, ' of ',nbonall,
+ $ ' initial bonds completed.'
+ stop 'Too many pruned bonds; increase NBOMAXDEF'
+ end if
+
+ ib(nbon,1) = iball(i1,1)
+ ib(nbon,2) = iball(i1,2)
+ ib(nbon,3) = iball(i1,3)
+ end do
+
+ endif
+
+ do i1=1,na
+ do i2=2,mbond+2
+ ia(i1,i2)=0
+ iag(i1,i2)=0
+ end do
+ end do
+
+* Generate full set of bond data structures
+
+ do 10 i0 = 1,nbon
+ i1 = ib(i0,2)
+ i2 = ib(i0,3)
+ call dista2(i1,i2,dis,dxm,dym,dzm)
+* do 10 i1=1,na-1
+* do 10 i2=i1+1,na
+* call dista2(i1,i2,dis,dxm,dym,dzm)
+ ih1=ia(i1,1)
+ ih2=ia(i2,1)
+* if (dis.gt.5.0*rob) goto 10
+ disdx=dxm/dis
+ disdy=dym/dis
+ disdz=dzm/dis
+ itype=0
+ if (ih1.gt.ih2) then
+ ih1=ia(i2,1)
+ ih2=ia(i1,1)
+ end if
+ do i3=1,nboty2
+ if (ih1.eq.nbs(i3,1).and.ih2.eq.nbs(i3,2)) itype=i3
+ end do
+ if (itype.eq.0.and.rat(ih1).gt.zero.and.rat(ih2).gt.zero) then
+c$$$ call mdsav(1,qfile(nprob))
+ write (*,*)qa(i1),'-',qa(i2),'Fatal: Unknown bond in molecule'
+ stop
+ end if
+
+ rhulp=dis/rob1(ih1,ih2)
+
+**********************************************************************
+* *
+* Determine bond orders *
+* *
+**********************************************************************
+ rh2=zero
+ rh2p=zero
+ rh2pp=zero
+ ehulp=zero
+ ehulpp=zero
+ ehulppp=zero
+ bomh=bom(itype)
+ if (rapt(ih1).gt.zero.and.rapt(ih2).gt.zero) then
+ rhulp2=dis/rob2(ih1,ih2)
+ rh2p=rhulp2**ptp(itype)
+ ehulpp=bomh*exp(pdp(itype)*rh2p)
+ end if
+ if (vnq(ih1).gt.zero.and.vnq(ih2).gt.zero) then
+ rhulp3=dis/rob3(ih1,ih2)
+ rh2pp=rhulp3**popi(itype)
+ ehulppp=bomh*exp(pdo(itype)*rh2pp)
+ end if
+
+ if (rat(ih1).gt.zero.and.rat(ih2).gt.zero) then
+ rh2=rhulp**bop2(itype)
+ ehulp=bomh*(1.0+cutoff)*exp(bop1(itype)*rh2)
+ end if
+
+ bor=ehulp+ehulpp+ehulppp
+ borsi=ehulp
+ borpi=ehulpp
+ borpi2=ehulppp
+ dbordrob=bop2(itype)*bop1(itype)*rh2*(1.0/dis)*ehulp+
+ $ptp(itype)*pdp(itype)*rh2p*(1.0/dis)*ehulpp+
+ $popi(itype)*pdo(itype)*rh2pp*(1.0/dis)*ehulppp
+ dborsidrob=bop2(itype)*bop1(itype)*rh2*(1.0/dis)*ehulp
+ dborpidrob=ptp(itype)*pdp(itype)*rh2p*(1.0/dis)*ehulpp
+ dborpi2drob=popi(itype)*pdo(itype)*rh2pp*(1.0/dis)*ehulppp
+
+ nbon2=nbon2+1
+ j1=i1
+ j2=i2
+
+**********************************************************************
+* *
+* Determine bond orders *
+* *
+**********************************************************************
+ ib(i0,1)=itype
+ ib(i0,2)=j1
+ ib(i0,3)=j2
+ ibsym(i0)=ivl
+ drdc(i0,1,1)=disdx
+ drdc(i0,2,1)=disdy
+ drdc(i0,3,1)=disdz
+ drdc(i0,1,2)=-disdx
+ drdc(i0,2,2)=-disdy
+ drdc(i0,3,2)=-disdz
+ abo(i1)=abo(i1)+bor-cutoff
+ if (i1.ne.i2) abo(i2)=abo(i2)+bor-cutoff
+ bo(i0)=bor-cutoff
+ bos(i0)=bor-cutoff
+ bosi(i0)=borsi-cutoff
+ bopi(i0)=borpi
+ bopi2(i0)=borpi2
+ rbo(i0)=dis
+ dbodr(i0)=dbordrob
+* dbosidr(i0)=dborsidrob
+ dbopidr(i0)=dborpidrob
+ dbopi2dr(i0)=dborpi2drob
+ dbodc(i0,1,1)=dbodr(i0)*drdc(i0,1,1)
+ dbodc(i0,2,1)=dbodr(i0)*drdc(i0,2,1)
+ dbodc(i0,3,1)=dbodr(i0)*drdc(i0,3,1)
+ dbodc(i0,1,2)=dbodr(i0)*drdc(i0,1,2)
+ dbodc(i0,2,2)=dbodr(i0)*drdc(i0,2,2)
+ dbodc(i0,3,2)=dbodr(i0)*drdc(i0,3,2)
+* dbosidc(i0,1,1)=dbosidr(i0)*drdc(i0,1,1)
+* dbosidc(i0,2,1)=dbosidr(i0)*drdc(i0,2,1)
+* dbosidc(i0,3,1)=dbosidr(i0)*drdc(i0,3,1)
+* dbosidc(i0,1,2)=dbosidr(i0)*drdc(i0,1,2)
+* dbosidc(i0,2,2)=dbosidr(i0)*drdc(i0,2,2)
+* dbosidc(i0,3,2)=dbosidr(i0)*drdc(i0,3,2)
+ dbopidc(i0,1,1)=dbopidr(i0)*drdc(i0,1,1)
+ dbopidc(i0,2,1)=dbopidr(i0)*drdc(i0,2,1)
+ dbopidc(i0,3,1)=dbopidr(i0)*drdc(i0,3,1)
+ dbopidc(i0,1,2)=dbopidr(i0)*drdc(i0,1,2)
+ dbopidc(i0,2,2)=dbopidr(i0)*drdc(i0,2,2)
+ dbopidc(i0,3,2)=dbopidr(i0)*drdc(i0,3,2)
+ dbopi2dc(i0,1,1)=dbopi2dr(i0)*drdc(i0,1,1)
+ dbopi2dc(i0,2,1)=dbopi2dr(i0)*drdc(i0,2,1)
+ dbopi2dc(i0,3,1)=dbopi2dr(i0)*drdc(i0,3,1)
+ dbopi2dc(i0,1,2)=dbopi2dr(i0)*drdc(i0,1,2)
+ dbopi2dc(i0,2,2)=dbopi2dr(i0)*drdc(i0,2,2)
+ dbopi2dc(i0,3,2)=dbopi2dr(i0)*drdc(i0,3,2)
+ ia(i1,2)=ia(i1,2)+1
+ if (i1.ne.i2) ia(i2,2)=ia(i2,2)+1
+ ia(i1,ia(i1,2)+2)=i2
+ ia(i2,ia(i2,2)+2)=i1
+ if (ia(i1,2).gt.nsbma2) nsbma2=ia(i1,2)
+ if (ia(i2,2).gt.nsbma2) nsbma2=ia(i2,2)
+ if (bor.gt.cutof3) then
+ iag(i1,2)=iag(i1,2)+1
+ iag(i2,2)=iag(i2,2)+1
+ iag(i1,iag(i1,2)+2)=i2
+ iag(i2,iag(i2,2)+2)=i1
+ nubon1(i1,iag(i1,2))=i0
+ nubon1(i2,iag(i2,2))=i0
+ if (iag(i1,2).gt.nsbmax) nsbmax=iag(i1,2)
+ if (iag(i2,2).gt.nsbmax) nsbmax=iag(i2,2)
+ end if
+ nubon2(i1,ia(i1,2))=i0
+ nubon2(i2,ia(i2,2))=i0
+
+ 10 continue
+
+**********************************************************************
+* *
+* Sort molecules *
+* *
+**********************************************************************
+ imolde = 1
+ if (imolde.eq.1) return !fixed molecular definitions
+
+ FOUND=.FALSE.
+ DO 31 K1=1,NA
+ IF (IA(K1,3+mbond).EQ.0) FOUND=.TRUE.
+ 31 IF (IA(K1,3+mbond).GT.NMOLO) NMOLO=IA(K1,3+mbond)
+ IF (.NOT.FOUND) GOTO 32
+************************************************************************
+* *
+* Molecule numbers are assigned. No restrictions are made for the *
+* sequence of the numbers in the connection table. *
+* *
+************************************************************************
+ N3=1
+ 34 N2=N3
+ NMOLO=NMOLO+1
+ if (nmolo.gt.nmolmax) then
+ write (*,*)nmolmax
+ write (*,*)'Too many molecules in system; increase nmolmax'
+ write (*,*)'nmolmax = ',nmolmax
+ write (*,*)'nmolo = ',nmolo
+ write (*,*)'n2 = ',n2
+ stop 'Too many molecules in system'
+ end if
+ IA(N2,3+mbond)=NMOLO
+ 37 FOUND=.FALSE.
+ DO 36 N1=N2+1,NA
+ IF (IA(N1,3+mbond).NE.0) GOTO 36
+ DO 35 L=1,mbond
+ IF (IA(N1,l+2).EQ.0) GOTO 36
+ IF (IA(IA(N1,l+2),3+mbond).EQ.NMOLO) THEN
+ FOUND=.TRUE.
+ IA(N1,3+mbond)=NMOLO
+ GOTO 36
+ ENDIF
+ 35 CONTINUE
+ 36 CONTINUE
+ IF (FOUND) GOTO 37
+ DO 33 N3=N2+1,NA
+ 33 IF (IA(N3,3+mbond).EQ.0) GOTO 34
+************************************************************************
+* *
+* The assigned or input molecule numbers are checked for their *
+* consistency. *
+* *
+************************************************************************
+ 32 FOUND=.FALSE.
+ DO 42 N1=1,NA
+ DO 41 L=1,mbond
+ IF (IA(N1,L+2).EQ.0) GOTO 42
+ IF (IA(IA(N1,L+2),3+mbond).NE.IA(N1,3+mbond)) THEN
+ FOUND=.TRUE.
+ ENDIF
+ 41 CONTINUE
+ 42 CONTINUE
+ IF (FOUND) THEN
+ write (7,1000)NA,qmol
+ do i1=1,NA
+ write (7,1100)i1,ia(i1,1),(ia(i1,2+i2),i2=1,nsbmax),
+ $ia(i1,3+mbond)
+ end do
+ write (7,*)tm11,tm22,tm33,angle(1),angle(2),angle(3)
+ STOP' Mol.nrs. not consistent; maybe wrong cell parameters'
+ end if
+**********************************************************************
+* *
+* Sort molecules again *
+* This sort is on iag, enforces bond order cutoff *
+* *
+**********************************************************************
+ FOUND=.FALSE.
+ DO 61 K1=1,NA
+ IF (IAG(K1,3+mbond).EQ.0) FOUND=.TRUE.
+ 61 IF (IAG(K1,3+mbond).GT.NMOLO5) NMOLO5=IAG(K1,3+mbond)
+ IF (.NOT.FOUND) GOTO 62
+************************************************************************
+* *
+* Molecule numbers are assigned. No restrictions are made for the *
+* sequence of the numbers in the connection table. *
+* *
+************************************************************************
+ N3=1
+ 64 N2=N3
+ NMOLO5=NMOLO5+1
+ if (nmolo5.gt.nmolmax) stop 'Too many molecules in system'
+ IAG(N2,3+mbond)=NMOLO5
+ 67 FOUND=.FALSE.
+ DO 66 N1=N2+1,NA
+ IF (IAG(N1,3+mbond).NE.0) GOTO 66
+ DO 65 L=1,mbond
+ IF (IAG(N1,l+2).EQ.0) GOTO 66
+ IF (IAG(IAG(N1,l+2),3+mbond).EQ.NMOLO5) THEN
+ FOUND=.TRUE.
+ IAG(N1,3+mbond)=NMOLO5
+ GOTO 66
+ ENDIF
+ 65 CONTINUE
+ 66 CONTINUE
+ IF (FOUND) GOTO 67
+ DO 63 N3=N2+1,NA
+ 63 IF (IAG(N3,3+mbond).EQ.0) GOTO 64
+************************************************************************
+* *
+* The assigned or input molecule numbers are checked for their *
+* consistency. *
+* *
+************************************************************************
+ 62 FOUND=.FALSE.
+ DO 72 N1=1,NA
+ DO 71 L=1,mbond
+ IF (IAG(N1,L+2).EQ.0) GOTO 72
+ IF (IAG(IAG(N1,L+2),3+mbond).NE.IAG(N1,3+mbond)) THEN
+ FOUND=.TRUE.
+ ENDIF
+ 71 CONTINUE
+ 72 CONTINUE
+ IF (FOUND) THEN
+ write (7,1000)NA,qmol
+ do i1=1,NA
+ write (7,1100)i1,iag(i1,1),(iag(i1,2+i2),i2=1,nsbmax),
+ $iag(i1,3+mbond)
+ end do
+ write (7,*)tm11,tm22,tm33,angle(1),angle(2),angle(3)
+ STOP' Mol.nrs. not consistent; maybe wrong cell parameters'
+ ENDIF
+
+**********************************************************************
+* *
+* Format part *
+* *
+**********************************************************************
+ 1000 format (i3,2x,a60)
+ 1100 format (8i3)
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine srtang
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkbo.blk"
+#include "cbknubon2.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkrbo.blk"
+#include "cbkvalence.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+
+ dimension a(3),b(3),j(3)
+ dimension ityva(100)
+
+**********************************************************************
+* *
+* Find valency angles in molecule *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In srtang'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ nval=0
+ if (nvaty.eq.0) return
+ do iindexatom=1,na
+ inumbonds=ia(iindexatom,2)
+ do jindexbond=1,inumbonds-1
+ jindexbondlist = nubon2(iindexatom,jindexbond)
+ if (bo(jindexbondlist).lt.cutof2) goto 51
+ k4=ib(jindexbondlist,2)
+ k5=ib(jindexbondlist,3)
+ do kindexbond=jindexbond+1,inumbonds
+ kindexbondlist = nubon2(iindexatom,kindexbond)
+ iju=0
+ if (bo(kindexbondlist).lt.cutof2) goto 50
+ if (bo(jindexbondlist)*bo(kindexbondlist).lt.0.001) goto 50
+ k7=ib(kindexbondlist,2)
+ k8=ib(kindexbondlist,3)
+
+* Exclude angles that have no local atoms.
+* Angles with non-local center atom are not needed for angle
+* energies, but are needed to construct torsions.
+ if ( k4 .le. na_local .or.
+ $ k5 .le. na_local .or.
+ $ k7 .le. na_local .or.
+ $ k8 .le. na_local) then
+
+ if (k4.eq.k7.and.k5.eq.k8.and.k4.ne.k8.and.k5.ne.k7) then
+ nval=nval+1
+ iv(nval,2)=k5
+ iv(nval,3)=k4
+ iv(nval,4)=k8
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ nval=nval+1
+ iv(nval,2)=k4
+ iv(nval,3)=k5
+ iv(nval,4)=k7
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ iju=2
+ write(6,*) 'Aaaah!'
+ end if
+ if (iju.eq.2) goto 50
+
+ if (k4.eq.k8.and.k5.eq.k7.and.k4.ne.k7.and.k5.ne.k8) then
+ nval=nval+1
+ iv(nval,2)=k5
+ iv(nval,3)=k4
+ iv(nval,4)=k7
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ nval=nval+1
+ iv(nval,2)=k4
+ iv(nval,3)=k5
+ iv(nval,4)=k8
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ iju=2
+ write(6,*) 'Aaaah!'
+ end if
+ if (iju.eq.2) goto 50
+
+ if (k4.eq.k7) then
+ nval=nval+1
+ iv(nval,2)=k5
+ iv(nval,3)=k4
+ iv(nval,4)=k8
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ iju=1
+ end if
+ if (iju.eq.1) goto 50
+
+ if (k4.eq.k8) then
+ nval=nval+1
+ iv(nval,2)=k5
+ iv(nval,3)=k4
+ iv(nval,4)=k7
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ iju=1
+ end if
+ if (iju.eq.1) goto 50
+
+ if (k5.eq.k7) then
+ nval=nval+1
+ iv(nval,2)=k4
+ iv(nval,3)=k5
+ iv(nval,4)=k8
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ iju=1
+ end if
+ if (iju.eq.1) goto 50
+
+ if (k5.eq.k8) then
+ nval=nval+1
+ iv(nval,2)=k4
+ iv(nval,3)=k5
+ iv(nval,4)=k7
+ iv(nval,5)=jindexbondlist
+ iv(nval,6)=kindexbondlist
+ iju=1
+ end if
+ if (iju.eq.1) goto 50
+
+ write (6,*)'nval = ',nval,
+ $ ' after',iindexatom, ' of ',na,' atoms completed.'
+ stop 'Adjacent bonds did not make an angle'
+
+ endif
+
+ 50 continue
+
+ if (nval.gt.nvamax) then
+ write (6,*)'nval = ',nval,' reax_defs.h::NVAMAXDEF = ',
+ $ NVAMAXDEF,
+ $ ' after',iindexatom, ' of ',na,' atoms completed.'
+ stop 'Too many valency angles. Increase NVAMAXDEF'
+ endif
+
+ if (iju.gt.0) then
+**********************************************************************
+* *
+* Determine force field types of angles *
+* *
+**********************************************************************
+ ityva(1)=0
+ ih1=ia(iv(nval,2),1)
+ ih2=ia(iv(nval,3),1)
+ ih3=ia(iv(nval,4),1)
+ if (ih3.lt.ih1) then
+ ih3=ia(iv(nval,2),1)
+ ih2=ia(iv(nval,3),1)
+ ih1=ia(iv(nval,4),1)
+ end if
+
+ nfound=0
+ do i3=1,nvaty
+ if (ih1.eq.nvs(i3,1).and.ih2.eq.nvs(i3,2).and.
+ $ih3.eq.nvs(i3,3)) then
+ nfound=nfound+1
+ ityva(nfound)=i3
+ end if
+ end do
+
+ if (ityva(1).eq.0.or.abs(vka(ityva(1))).lt.0.001) then !Valence angle does not exist in force field;ignore
+ nval=nval-1
+ ihul=0
+ else
+ iv(nval,1)=ityva(1)
+ ihul=1
+
+ do i3=1,nfound-1 !Found multiple angles of the same type
+ nval=nval+1
+ iv(nval,1)=ityva(i3+1)
+ do i4=2,6
+ iv(nval,i4)=iv(nval-1,i4)
+ end do
+
+ end do
+
+ end if
+
+ if (iju.eq.2) then
+ ityva(1)=0
+ ih1=ia(iv(nval-ihul,2),1)
+ ih2=ia(iv(nval-ihul,3),1)
+ ih3=ia(iv(nval-ihul,4),1)
+ if (ih3.lt.ih1) then
+ ih3=ia(iv(nval-ihul,2),1)
+ ih2=ia(iv(nval-ihul,3),1)
+ ih1=ia(iv(nval-ihul,4),1)
+ end if
+
+ nfound=0
+ do i3=1,nvaty
+ if (ih1.eq.nvs(i3,1).and.ih2.eq.nvs(i3,2).and.
+ $ih3.eq.nvs(i3,3)) then
+ nfound=nfound+1
+ ityva(nfound)=i3
+ end if
+ end do
+
+ if (ityva(1).eq.0.or.abs(vka(ityva(1))).lt.0.001) then !Valence angle does not exist in force field;ignore
+ if (ihul.eq.1) then
+ do i3=1,6
+ iv(nval-1,i3)=iv(nval,i3)
+ end do
+ end if
+ nval=nval-1
+ else
+ iv(nval-ihul,1)=ityva(1)
+
+ do i3=1,nfound-1 !Found multiple angles of the same type
+ nval=nval+1
+ iv(nval,1)=ityva(i3+1)
+ do i4=2,6
+ iv(nval,i4)=iv(nval-1,i4)
+ end do
+
+ end do
+
+ end if
+
+ end if
+
+ end if
+
+ end do
+ 51 continue
+ end do
+ end do
+
+ nbonop=0
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine srttor
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkbo.blk"
+#include "cbkrbo.blk"
+#include "cbkia.blk"
+#include "cbktorsion.blk"
+#include "cbkvalence.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbknubon2.blk"
+**********************************************************************
+* *
+* Find torsion angles in molecule *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$ open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In srttor'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ ntor=0
+ if (ntoty.eq.0) return
+ do 61 i1=1,nbon
+ k2=ib(i1,2)
+ k3=ib(i1,3)
+c Only compute interaction if both atoms local
+c are local or else flip a coin
+ if (k2 .gt. na_local) go to 61
+ if (k3 .gt. na_local) then
+ if (itag(k2) .lt. itag(k3)) go to 61
+ if (itag(k2) .eq. itag(k3)) then
+ if(c(k2,3) .gt. c(k3,3)) go to 61
+ if(c(k2,3) .eq. c(k3,3) .and.
+ $ c(k2,2) .gt. c(k3,2)) go to 61
+ if(c(k2,3) .eq. c(k3,3) .and.
+ $ c(k2,2) .eq. c(k3,2) .and.
+ $ c(k2,1) .gt. c(k3,1)) go to 61
+ endif
+ endif
+
+ iob1=ia(k2,2)
+ iob2=ia(k3,2)
+ do 60 i2=1,iob1 !Atoms connected to k2
+ k4=ia(k2,2+i2)
+ ibo2=nubon2(k2,i2)
+ do 60 i3=1,iob2 !Atoms connected to k3
+ k5=ia(k3,2+i3)
+ ibo3=nubon2(k3,i3)
+ bopr=bo(i1)*bo(ibo2)*bo(ibo3)
+ if (bopr.gt.cutof2.and.k2.ne.k5.and.k3.ne.k4.and.k4.ne.k5) then
+
+ ntor=ntor+1
+ it(ntor,2)=k4
+ it(ntor,3)=k2
+ it(ntor,4)=k3
+ it(ntor,5)=k5
+ it(ntor,6)=ibo2
+ it(ntor,7)=i1
+ it(ntor,8)=ibo3
+
+**********************************************************************
+* *
+* Determine force field types of torsion angles *
+* *
+**********************************************************************
+ ity=0
+ ih1=ia(it(ntor,2),1)
+ ih2=ia(it(ntor,3),1)
+ ih3=ia(it(ntor,4),1)
+ ih4=ia(it(ntor,5),1)
+
+ if (ih2.gt.ih3) then
+ ih1=ia(it(ntor,5),1)
+ ih2=ia(it(ntor,4),1)
+ ih3=ia(it(ntor,3),1)
+ ih4=ia(it(ntor,2),1)
+ end if
+
+ if (ih2.eq.ih3.and.ih4.lt.ih1) then
+ ih1=ia(it(ntor,5),1)
+ ih2=ia(it(ntor,4),1)
+ ih3=ia(it(ntor,3),1)
+ ih4=ia(it(ntor,2),1)
+ end if
+
+ do i4=1,ntoty
+ if (ih1.eq.nts(i4,1).and.ih2.eq.nts(i4,2).and.ih3.eq.nts(i4,3)
+ $.and.ih4.eq.nts(i4,4)) ity=i4
+ end do
+
+ if (ity.eq.0) then
+ do i4=1,ntoty
+ if (nts(i4,1).eq.0.and.ih2.eq.nts(i4,2).and.ih3.eq.nts(i4,3)
+ $.and.nts(i4,4).eq.0) ity=i4
+ end do
+ end if
+
+ if (ity.eq.0) then
+ ntor=ntor-1 !Torsion angle does not exist in force field: ignore
+ else
+ it(ntor,1)=ity
+ end if
+
+ end if
+
+ 60 continue
+ 61 continue
+
+ if (ntor.gt.ntomax) stop 'Too many torsion angles'
+* do i1=1,ntor
+* write (41,'(20i4)')i1,it(i1,1),it(i1,2),it(i1,3),
+* $it(i1,4),it(i1,5),it(i1,6),it(i1,7),it(i1,8)
+* end do
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine srtoop
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkbo.blk"
+#include "cbkrbo.blk"
+#include "cbkvalence.blk"
+#include "control.blk"
+#include "small.blk"
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In srtoop'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+**********************************************************************
+* *
+* Find out of plane angles in molecule *
+* *
+**********************************************************************
+ noop=0
+ do i1=1,nval
+ k2=iv(i1,2)
+ k3=iv(i1,3)
+ k4=iv(i1,4)
+ k5=iv(i1,5)
+ k6=iv(i1,6)
+ do i2=1,nbon
+ k7=ib(i2,2)
+ k8=ib(i2,3)
+ if (bo(i2).gt.cutof2) then
+ if (k7.eq.k3.and.k8.ne.k4.and.k8.ne.k2) then
+ noop=noop+1
+ ioop(noop,2)=k8
+ ioop(noop,3)=k3
+ ioop(noop,4)=k2
+ ioop(noop,5)=k4
+ ioop(noop,6)=i2
+ ioop(noop,7)=iv(i1,5)
+ ioop(noop,8)=iv(i1,6)
+ ioop(noop,9)=i1
+ end if
+ if (k8.eq.k3.and.k7.ne.k4.and.k7.ne.k2) then
+ noop=noop+1
+ ioop(noop,2)=k7
+ ioop(noop,3)=k3
+ ioop(noop,4)=k2
+ ioop(noop,5)=k4
+ ioop(noop,6)=i2
+ ioop(noop,7)=iv(i1,5)
+ ioop(noop,8)=iv(i1,6)
+ ioop(noop,9)=i1
+ end if
+ end if
+ end do
+ end do
+
+ do i1=1,noop
+ call caltor(ioop(i1,2),ioop(i1,3),ioop(i1,4),ioop(i1,5),hoop)
+ end do
+
+**********************************************************************
+ return
+ end
+**********************************************************************
+
+**********************************************************************
+
+ subroutine srthb
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkbo.blk"
+#include "cbkconst.blk"
+#include "cbkia.blk"
+#include "cbkrbo.blk"
+#include "cbksrthb.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbkpairs.blk"
+#include "cbknvlown.blk"
+#include "cbknubon2.blk"
+**********************************************************************
+* *
+* Find hydrogen bonds in molecule *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$ open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In srthb'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ nhb=0
+**********************************************************************
+* *
+* Locate donor/acceptor bonds *
+* *
+**********************************************************************
+c Outer loop must be Verlet list, because ia() does not store Verlet entries,
+c but it does store bond entries in nubon2()
+c
+c The problem with using the nvlown ownership criterion
+c is that it would require that we unprune every bond that is within
+c certain distance, as well as its first and second neighbor bonds.
+c
+c For the ownership criterion based on H atom location no unpruning is required.
+c Apparently lprune=4 is sufficient here, implying that we need to capture first and
+c second neighbor bonds of the O-H bond, and of course we need to include all hydrogen
+c bond partners within hbcut.
+c
+
+ do 20 ivl=1,nvpair !Use Verlet-list to find donor-acceptor pairs
+
+ j1=nvl1(ivl)
+ j2=nvl2(ivl)
+ ity1=ia(j1,1)
+ ity2=ia(j2,1)
+ ihhb1=nphb(ia(j1,1))
+ ihhb2=nphb(ia(j2,1))
+
+ if (ihhb1.gt.ihhb2) then !Make j1 donor(H) atom and j2 acceptor(O) atom
+ j2=nvl1(ivl)
+ j1=nvl2(ivl)
+ ity1=ia(j1,1)
+ ity2=ia(j2,1)
+ ihhb1=nphb(ia(j1,1))
+ ihhb2=nphb(ia(j2,1))
+ end if
+
+* Only need to compute bonds where j1 is local
+ if (j1 .le. na_local) then
+
+ if (ihhb1.eq.1.and.ihhb2.eq.2) then
+ call dista2(j1,j2,dishb,dxm,dym,dzm)
+ if (dishb.lt.hbcut) then
+ do 10 i23=1,ia(j1,2) !Search for acceptor atoms bound to donor atom
+ j3=ia(j1,2+i23)
+ ity3=ia(j3,1)
+ nbohb=nubon2(j1,i23)
+ if (nphb(ity3).eq.2.and.j3.ne.j2.and.bo(nbohb).gt.0.01) then
+**********************************************************************
+* *
+* Accept hydrogen bond and find hydrogen bond type *
+* *
+**********************************************************************
+ nhb=nhb+1
+
+ if (nhb.gt.nhbmax) then
+ write (*,*)nhb,nhbmax
+ write (*,*)'Maximum number of hydrogen bonds exceeded'
+ stop 'Maximum number of hydrogen bonds exceeded'
+ end if
+
+ ihb(nhb,1)=0
+
+ do i3=1,nhbty
+ if (ity3.eq.nhbs(i3,1).and.ity1.eq.nhbs(i3,2).and.ity2.eq.
+ $nhbs(i3,3)) ihb(nhb,1)=i3
+ end do
+
+ if (ihb(nhb,1).eq.0) then !Hydrogen bond not in force field
+ nhb=nhb-1
+* write (*,*)'Warning: added hydrogen bond ',ity3,ity1,ity2
+* nhbty=nhbty+1
+* nhbs(nhbty,1)=ity3
+* nhbs(nhbty,2)=ity1
+* nhbs(nhbty,3)=ity2
+* rhb(nhbty)=2.70
+* dehb(nhbty)=zero
+* vhb1(nhbty)=5.0
+* vhb2(nhbty)=20.0
+* ihb(nhb,1)=nhbty
+ end if
+
+ ihb(nhb,2)=j3
+ ihb(nhb,3)=j1
+ ihb(nhb,4)=j2
+ ihb(nhb,5)=nbohb
+ ihb(nhb,6)=k1
+ ihb(nhb,7)=k2
+ ihb(nhb,8)=k3
+* write (64,*)nhb,ihb(nhb,1),j3,j1,j2,nbohb,k1,k2,k3,bo(nbohb),
+* $dishb
+ end if
+
+ 10 continue
+
+ end if
+ end if
+ end if
+ 20 end do
+
+* stop 'end in srthb'
+ return
+ end
+**********************************************************************
diff -Naur lammps-29Jan09/lib/reax/reax_defs.h lammps-12Feb09/lib/reax/reax_defs.h
--- lammps-29Jan09/lib/reax/reax_defs.h 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_defs.h 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,70 @@
+#define PORTABLECOMMENTFLAG
+#ifndef PORTABLECOMMENTFLAG
+// This is just a way to have portable comments
+// for both C++ and FORTRAN preprocessing.
+ /* ///:EOH~ */
+ /* */
+ /* This file contains array dimension parameters for all the main */
+ /* ReaxFF data structures, some of which need to be directly accessed */
+ /* by Grasp C++ functions. If they are set too small, the calculation */
+ /* will run out of allocated memory. If they are set too big, the machine */
+ /* will not be able to allocate enough memory. */
+ /* */
+
+ /* NNEIGHMAXDEF = Max number of neighbors / NATDEF */
+ /* NATDEF = Max number of atoms */
+ /* NATTOTDEF = Max number of global atoms */
+ /* NSORTDEF = Max number of atom types */
+ /* MBONDDEF = Max number of bonds connected to one atom */
+ /* NAVIBDEF = for 2nd derivatives */
+ /* NBOTYMDEF = Max number of bond types */
+ /* NVATYMDEF = Max number of valency angle types */
+ /* NTOTYMDEF = Max number of torsion angle types */
+ /* NHBTYMDEF = Max number of hydrogen bond types */
+ /* NODMTYMDEF = Max number of off-diagonal Morse types */
+ /* NBOALLMAXDEF = Max number of all bonds */
+ /* NBOMAXDEF = Max number of bonds */
+ /* NHBMAXDEF = Max number of hydrogen bonds */
+ /* NVAMAXDEF = Max number of valency angles */
+ /* NOPMAXDEF = Max number of out of plane angles */
+ /* NTOMAXDEF = Max number of torsion angles */
+ /* NPAMAXDEF = Max number of general parameters in force field */
+ /* NMOLMAXDEF = Max number of molecules in system */
+ /* NMOLSETDEF = Max number of molecules in training set */
+ /* MRESTRADEF = Max number of restraints */
+ /* MTREGDEF = Max number of temperature regimes */
+ /* MTZONEDEF = Max number of temperature zones */
+ /* MVREGDEF = Max number of volume regimes */
+ /* MVZONEDEF = Max number of volume zones */
+ /* MEREGDEF = Max number of electric field regimes */
+ /* MEZONEDEF = Max number of electric field zones */
+#endif
+
+#define NNEIGHMAXDEF 120
+#define NATDEF 40000
+#define NATTOTDEF 39744
+#define NSORTDEF 20
+#define MBONDDEF 20
+#define NAVIBDEF 50
+#define NBOTYMDEF 200
+#define NVATYMDEF 200
+#define NTOTYMDEF 200
+#define NHBTYMDEF 200
+#define NODMTYMDEF 20
+#define NBOALLMAXDEF 180000
+#define NBOMAXDEF 90000
+#define NHBMAXDEF 400000
+#define NVAMAXDEF 300000
+#define NOPMAXDEF 00010
+#define NTOMAXDEF 65000
+#define NPAMAXDEF 50
+#define NMOLMAXDEF 2000
+#define NMOLSETDEF 1500
+#define MRESTRADEF 100
+#define MTREGDEF 100
+#define MTZONEDEF 5
+#define MVREGDEF 100
+#define MVZONEDEF 6
+#define MEREGDEF 100
+#define MEZONEDEF 3
+
diff -Naur lammps-29Jan09/lib/reax/reax_inout.F lammps-12Feb09/lib/reax/reax_inout.F
--- lammps-29Jan09/lib/reax/reax_inout.F 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_inout.F 2009-02-12 13:48:12.000000000 -0700
@@ -0,0 +1,3870 @@
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+**********************************************************************
+
+ subroutine ffinpt
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkboncor.blk"
+#include "cbkconst.blk"
+#include "cbkcovbon.blk"
+#include "cbkff.blk"
+#include "cbkfftorang.blk"
+#include "cbknonbon.blk"
+#include "cbksrthb.blk"
+#include "cbktorsion.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "valang.blk"
+#include "cbksrtbon1.blk"
+#include "cbkchb.blk"
+ dimension rcore2(nsort),ecore2(nsort),acore2(nsort)
+**********************************************************************
+* *
+* Read in force field *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In ffinpt'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ open (4,file='ffield.reax',status='old')
+ rewind (4)
+ iline=0
+ read (4,'(a40)',end=990,err=990)qffield
+ iline=iline+1
+**********************************************************************
+* *
+* Read in general force field parameters *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990)npar
+ iline=iline+1
+ do i1=1,npar
+ read (4,1300,end=990,err=990)vpar(i1)
+ iline=iline+1
+ end do
+ cutoff=0.01*vpar(30)
+ swa=vpar(12)
+ if (abs(swa).gt.0.01) write (*,*)
+ $'Warning: non-zero value for lower Taper-radius cutoff'
+ swb=vpar(13)
+ if (swb.lt.zero) stop
+ $'Negative value for upper Taper-radius cutoff'
+ if (swb.lt.5.0) write (*,*)
+ $'Warning: very low value for upper Taper-radius cutoff:',swb
+**********************************************************************
+* *
+* Read in atom type data *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990) nso
+ iline=iline+1
+ read (4,*,end=990,err=990)
+ iline=iline+1
+ read (4,*,end=990,err=990)
+ iline=iline+1
+ read (4,*,end=990,err=990)
+ iline=iline+1
+ if (nso.gt.nsort) stop 'Maximum number of atom types exceeded'
+ do i1=1,nso
+ read (4,1200,end=990,err=990)qas(i1),rat(i1),aval(i1),amas(i1),
+ $rvdw(i1),eps(i1),gam(i1),rapt(i1),stlp(i1)
+ iline=iline+1
+ read (4,1250,end=990,err=990)alf(i1),vop(i1),valf(i1),
+ $valp1(i1),valp2(i1),chi(i1),eta(i1),vnphb
+ iline=iline+1
+ read (4,1250,end=990,err=990)vnq(i1),vlp1(i1),vincr(i1),
+ $bo131(i1),bo132(i1),bo133(i1),sigqeq(i1),default
+ iline=iline+1
+ read (4,1250,end=990,err=990)vovun(i1),vval1(i1),vrom,
+ $vval3(i1),vval4(i1),rcore2(i1),ecore2(i1),acore2(i1)
+ iline=iline+1
+ idef(i1)=int(default)
+ nphb(i1)=int(vnphb)
+ end do
+**********************************************************************
+* *
+* Calculate van der Waals and Coulomb pair-parameters *
+* *
+**********************************************************************
+ do i1=1,nso
+ do i2=1,nso
+ rcore(i1,i2)=sqrt(rcore2(i1)*rcore2(i2))
+ ecore(i1,i2)=sqrt(ecore2(i1)*ecore2(i2))
+ acore(i1,i2)=sqrt(acore2(i1)*acore2(i2))
+ p1co(i1,i2)=sqrt(4.0*rvdw(i1)*rvdw(i2))
+ p2co(i1,i2)=sqrt(eps(i1)*eps(i2))
+ p3co(i1,i2)=sqrt(alf(i1)*alf(i2))
+ gamwh=sqrt(vop(i1)*vop(i2))
+ gamwco(i1,i2)=1.0/gamwh**vpar(29)
+ gamch=sqrt(gam(i1)*gam(i2))
+ gamcco(i1,i2)=1.0/gamch**3
+ rob1(i1,i2)=0.50*(rat(i1)+rat(i2))
+ rob2(i1,i2)=0.50*(rapt(i1)+rapt(i2))
+ rob3(i1,i2)=0.50*(vnq(i1)+vnq(i2))
+ end do
+ end do
+**********************************************************************
+* *
+* Read in bond type data *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990)nboty
+ iline=iline+1
+ read (4,*,end=990,err=990)
+ iline=iline+1
+ if (2*nboty.gt.nbotym) stop 'Maximum nr. of bond types exceeded'
+ ih=0
+ do i1=1,nboty
+ ih=ih+1
+ read (4,1400,end=990,err=990)nbs(ih,1),nbs(ih,2),de1(ih),
+ $de2(ih),de3(ih),psi(ih),pdo(ih),v13cor(ih),popi(ih),vover(ih)
+ iline=iline+1
+ read (4,1450,end=990,err=990)psp(ih),pdp(ih),ptp(ih),
+ $bom(ih),bop1(ih),bop2(ih),ovc(ih),vuncor(ih)
+ iline=iline+1
+ if (nbs(ih,1).ne.nbs(ih,2)) then
+ ih=ih+1
+ nbs(ih,1)=nbs(ih-1,2)
+ nbs(ih,2)=nbs(ih-1,1)
+ de1(ih)=de1(ih-1)
+ de2(ih)=de2(ih-1)
+ de3(ih)=de3(ih-1)
+ psi(ih)=psi(ih-1)
+ pdo(ih)=pdo(ih-1)
+ v13cor(ih)=v13cor(ih-1)
+ vover(ih)=vover(ih-1)
+ psp(ih)=psp(ih-1)
+ pdp(ih)=pdp(ih-1)
+ ptp(ih)=ptp(ih-1)
+ bop1(ih)=bop1(ih-1)
+ bop2(ih)=bop2(ih-1)
+* bop3(ih)=bop3(ih-1)
+* bop4(ih)=bop4(ih-1)
+ bom(ih)=bom(ih-1)
+ popi(ih)=popi(ih-1)
+ ovc(ih)=ovc(ih-1)
+ end if
+ end do
+ nboty2=ih
+**********************************************************************
+* *
+* Read in off-diagonal parameters *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990)nodmty
+ iline=iline+1
+ if (nodmty.gt.nodmtym)
+ $stop 'Maximum nr. of off-diagonal Morse types exceeded'
+ ih=0
+ do i1=1,nodmty
+ ih=ih+1
+ read (4,1400,end=990,err=990)nodm1,nodm2,deodmh,rodmh,godmh,
+ $rsig,rpi,rpi2
+ iline=iline+1
+ if (rsig.gt.zero) rob1(nodm1,nodm2)=rsig
+ if (rsig.gt.zero) rob1(nodm2,nodm1)=rsig
+ if (rpi.gt.zero) rob2(nodm1,nodm2)=rpi
+ if (rpi.gt.zero) rob2(nodm2,nodm1)=rpi
+ if (rpi2.gt.zero) rob3(nodm1,nodm2)=rpi2
+ if (rpi2.gt.zero) rob3(nodm2,nodm1)=rpi2
+ if (rodmh.gt.zero) p1co(nodm1,nodm2)=2.0*rodmh
+ if (rodmh.gt.zero) p1co(nodm2,nodm1)=2.0*rodmh
+ if (deodmh.gt.zero) p2co(nodm1,nodm2)=deodmh
+ if (deodmh.gt.zero) p2co(nodm2,nodm1)=deodmh
+ if (godmh.gt.zero) p3co(nodm1,nodm2)=godmh
+ if (godmh.gt.zero) p3co(nodm2,nodm1)=godmh
+ end do
+**********************************************************************
+* *
+* Read in valency angle and conjugation type data *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990)nvaty
+ iline=iline+1
+ if (nvaty.gt.nvatym)
+ $stop 'Maximum nr. of valency angle types exceeded'
+ do i1=1,nvaty
+ read (4,1500,end=990,err=990)nvs(i1,1),nvs(i1,2),
+ $nvs(i1,3),th0(i1),vka(i1),vka3(i1),vka8(i1),vkac(i1),vkap(i1),
+ $vval2(i1)
+ iline=iline+1
+ end do
+**********************************************************************
+* *
+* Read in torsion angle type data *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990)ntoty
+ iline=iline+1
+ if (ntoty.gt.ntotym)
+ $stop 'Maximum nr. of torsion angle types exceeded'
+ do i1=1,ntoty
+ read (4,1600,end=990,err=990)nts(i1,1),nts(i1,2),nts(i1,3),
+ $nts(i1,4),v1(i1),
+ $v2(i1),v3(i1),v4(i1),vconj(i1),v2bo(i1),v3bo(i1)
+ iline=iline+1
+ end do
+**********************************************************************
+* *
+* Read in hydrogen bond type data *
+* *
+**********************************************************************
+ read (4,1100,end=990,err=990)nhbty
+ iline=iline+1
+ if (nhbty.gt.nhbtym)
+ $stop 'Maximum nr. of hydrogen bond types exceeded'
+ do i1=1,nhbty
+ read (4,1500,end=990,err=990)nhbs(i1,1),nhbs(i1,2),
+ $nhbs(i1,3),rhb(i1),dehb(i1),vhb1(i1),vhb2(i1)
+ iline=iline+1
+ end do
+**********************************************************************
+* *
+* Calculate vdWaals interaction parameters *
+* *
+**********************************************************************
+ do i1=1,nso
+ do i2=1,nso
+ rr=(rvdw(i1)+rvdw(i2))
+ rr2=rr*rr
+ eps2=sqrt(eps(i1)*eps(i2))
+ rr6=rr2*rr2*rr2
+ pvdw1(i1,i2)=eps2*rr6*rr6
+ pvdw1(i2,i1)=eps2*rr6*rr6
+ pvdw2(i1,i2)=2.0*eps2*rr6
+ pvdw2(i2,i1)=2.0*eps2*rr6
+ end do
+ end do
+**********************************************************************
+* *
+* Error part *
+* *
+**********************************************************************
+ goto 999
+ 990 write (*,*)'Error or end-of-file reading unit 4 on line:',iline
+ stop
+ 999 continue
+ close(4)
+**********************************************************************
+* *
+* Format part *
+* *
+**********************************************************************
+ 1100 format (i3,2x,a2,3x,3d22.15)
+ 1200 format (1x,a2,10f9.4)
+ 1250 format (3x,10f9.4)
+ 1300 format (f10.4)
+ 1400 format (2i3,8f9.4)
+ 1450 format (6x,8f9.4)
+ 1500 format (3i3,7f9.4)
+ 1600 format (4i3,7f9.4)
+ return
+ end
+**********************************************************************
+***********************************************************************
+
+ subroutine mdsav(node)
+
+***********************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkatomcoord.blk"
+#include "cbkbo.blk"
+#include "cbkc.blk"
+#include "cbkch.blk"
+#include "cbkconst.blk"
+#include "cbkdistan.blk"
+#include "cbkenergies.blk"
+#include "cbkia.blk"
+#include "cbkinit.blk"
+#include "cbklonpar.blk"
+#include "cbknubon2.blk"
+#include "cbkqa.blk"
+#include "cbktregime.blk"
+#include "cbksrtbon1.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+
+ dimension idum(mbond+3),bodum(mbond+3),qat2(2)
+ character*25 qfileh
+ character*33 qfile2
+ character*4 qext
+ character*6 qmdfi
+ character *7 var
+ character *3 qat2,pepname
+ character *1 qrtemp
+************************************************************************
+* *
+* Save coordinates, velocities and accelerations of MD-system *
+* *
+************************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In mdsav'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+************************************************************************
+c
+c This is just for test purposes
+c
+************************************************************************
+c$$$ write(6,*) '***************************'
+c$$$ write(6,*) 'mdsav node number is ',node
+c$$$ write(6,*) '***************************'
+ return
+
+
+ qfileh='Unknown'
+ qmdfi='moldyn'
+ pepname=' '
+ ipeptide=0
+ if (ni.eq.2) qmdfi='molsav'
+
+ if (iopt.eq.0) then
+
+ do i1=1,mbond+3
+ idum(i1)=nzero
+ bodum(i1)=zero
+ end do
+C if (napp.eq.1)
+C $open (7,file='fort.7',status='unknown',access='append')
+ if (napp.ne.1)
+ $open (7,file='fort.7',status='unknown')
+ nsbmaxh=5*((nsbmax/5)+1)
+ write (7,100)na,qmol,mdstep,nsbmaxh
+ if (nbiolab.eq.1) write (67,101)na,qmol
+ do i1=1,na
+ bosum=0.0
+ do i3=1,nsbmax
+ if (iag(i1,2+i3).gt.0) bosum=bosum+bo(nubon1(i1,i3))
+ end do
+ if (nsbmax.lt.5) then
+ write (7,200)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2)),
+ $(idum(i2),i2=1,5-iag(i1,2)),
+ $iag(i1,3+mbond),(bo(nubon1(i1,i2)),i2=1,iag(i1,2)),
+ $(bodum(i2),i2=1,5-iag(i1,2)),abo(i1),vlp(i1),ch(i1)
+ if (nbiolab.eq.1) then !Delphi-connection table output
+ write (67,201)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2))
+ end if
+ else if (nsbmax.lt.10) then
+ write (7,210)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2)),
+ $(idum(i2),i2=1,10-iag(i1,2)),
+ $iag(i1,3+mbond),(bo(nubon1(i1,i2)),i2=1,iag(i1,2)),
+ $(bodum(i2),i2=1,10-iag(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbmax.lt.15) then
+ write (7,220)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2)),
+ $(idum(i2),i2=1,15-iag(i1,2)),
+ $iag(i1,3+mbond),(bo(nubon1(i1,i2)),i2=1,iag(i1,2)),
+ $(bodum(i2),i2=1,15-iag(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbmax.lt.20) then
+ write (7,230)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2)),
+ $(idum(i2),i2=1,20-iag(i1,2)),
+ $iag(i1,3+mbond),(bo(nubon1(i1,i2)),i2=1,iag(i1,2)),
+ $(bodum(i2),i2=1,20-iag(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbmax.lt.25) then
+ write (7,240)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2)),
+ $(idum(i2),i2=1,25-iag(i1,2)),
+ $iag(i1,3+mbond),(bo(nubon1(i1,i2)),i2=1,iag(i1,2)),
+ $(bodum(i2),i2=1,25-iag(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbmax.gt.25) then
+ write (7,250)i1,iag(i1,1),(iag(i1,2+i2),i2=1,iag(i1,2)),
+ $(idum(i2),i2=1,35-iag(i1,2)),
+ $iag(i1,3+mbond),(bo(nubon1(i1,i2)),i2=1,iag(i1,2)),
+ $(bodum(i2),i2=1,35-iag(i1,2)),abo(i1),vlp(i1),ch(i1)
+ end if
+ end do
+ boss=zero
+ vlps=0.0
+C if (napp.eq.1)
+C $open (8,file='fort.8',status='unknown',access='append')
+ if (napp.ne.1)
+ $open (8,file='fort.8',status='unknown')
+ nsbmaxh=5*((nsbma2/5)+1)
+ write (8,100)na,qmol,mdstep,nsbmaxh
+ chsum=0.0
+ do i1=1,na
+ bosum=0.0
+ do i3=1,nsbma2
+ if (ia(i1,2+i3).gt.0) bosum=bosum+bo(nubon2(i1,i3))
+ end do
+ if (nsbma2.lt.5) then
+ write (8,200)i1,ia(i1,1),(ia(i1,2+i2),i2=1,ia(i1,2)),
+ $(idum(i2),i2=1,5-ia(i1,2)),
+ $ia(i1,3+mbond),(bo(nubon2(i1,i2)),i2=1,ia(i1,2)),
+ $(bodum(i2),i2=1,5-ia(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbma2.lt.10) then
+ write (8,210)i1,ia(i1,1),(ia(i1,2+i2),i2=1,ia(i1,2)),
+ $(idum(i2),i2=1,10-ia(i1,2)),
+ $ia(i1,3+mbond),(bo(nubon2(i1,i2)),i2=1,ia(i1,2)),
+ $(bodum(i2),i2=1,10-ia(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbma2.lt.15) then
+ write (8,220)i1,ia(i1,1),(ia(i1,2+i2),i2=1,ia(i1,2)),
+ $(idum(i2),i2=1,15-ia(i1,2)),
+ $ia(i1,3+mbond),(bo(nubon2(i1,i2)),i2=1,ia(i1,2)),
+ $(bodum(i2),i2=1,15-ia(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbma2.lt.20) then
+ write (8,230)i1,ia(i1,1),(ia(i1,2+i2),i2=1,ia(i1,2)),
+ $(idum(i2),i2=1,20-ia(i1,2)),
+ $ia(i1,3+mbond),(bo(nubon2(i1,i2)),i2=1,ia(i1,2)),
+ $(bodum(i2),i2=1,20-ia(i1,2)),abo(i1),vlp(i1),ch(i1)
+ else if (nsbma2.lt.25) then
+ write (8,240)i1,ia(i1,1),(ia(i1,2+i2),i2=1,ia(i1,2)),
+ $(idum(i2),i2=1,25-ia(i1,2)),
+ $ia(i1,3+mbond),(bo(nubon2(i1,i2)),i2=1,ia(i1,2)),
+ $(bodum(i2),i2=1,25-ia(i1,2)),abo(i1),vlp(i1),ch(i1)
+ end if
+ boss=boss+bosum/2.0
+ vlps=vlps+vlp(i1)
+ chsum=chsum+ch(i1)
+ end do
+ write (7,*)2.0*boss,vlps,2.0*boss+2.0*vlps,chsum
+ close(8)
+ close(7)
+
+ end if
+
+ if (noutpt.eq.0) then
+ write (var,'(f7.4)')float(mdstep/nsav)/1d4
+ if (ni.eq.0) open (unit=67,file=qmdfi//var(3:7),
+ $status='unknown')
+ write (67,300)qmol
+ do i1=1,na
+ write (67,400)i1,qa(i1),(c(i1,i2),i2=1,3)
+ end do
+ write (67,*)
+ close(67)
+ end if
+
+ if (noutpt.eq.2) then
+C open (88,file='moldyn.bgf',status='unknown',access='append')
+ call writebgf(88)
+ close (88)
+ end if
+
+ if ((ni.eq.1.and.iopt.eq.0).or.(ni.eq.1.and.iopt.eq.1.and.
+ $iflga.eq.1)) then
+ qrtemp=qr
+ if (qr.eq.'I') qr='C'
+ if (qfileh.eq.' ') then
+ write (*,*)'Warning: no file name given; use Unknown'
+ qfileh='Unknown'
+ end if
+ qfile2=qfileh
+ if (imodfile.eq.0) then
+ istart=1
+ qstrana1(1:25)=qfileh
+ call stranal(istart,iend,vout,iout,1)
+ qfile2=qfileh(istart:iend-1)//".geo"
+ end if
+ call writegeo(98)
+
+ if (imodfile.eq.1.or.iopt.eq.0) then
+ open (88,file=qfile2,status='unknown')
+ call writegeo(88)
+ close (88)
+ end if
+
+ qr=qrtemp
+
+ if (iopt.eq.0) then
+
+ do i1=1,na
+ write (56,410) i1,ch(i1)
+ write (55,410) i1,chgbgf(i1)
+ end do
+**********************************************************************
+* *
+* Write .pdb output file *
+* *
+**********************************************************************
+ open (unit=47,file='output.pdb',status='unknown')
+ do i1=1,na
+ write (47,412)'ATOM ',i1,qa(i1),pepname,ipeptide,c(i1,1),
+ $c(i1,2),c(i1,3),1.0,2.2,qa(i1)
+ end do
+ write (47,*) 'TER'
+ write (47,*) 'END'
+ close (47)
+
+ if (nsurp.eq.0) then
+ if (kx.gt.0.or.ky.gt.0.or.kz.gt.0) then
+ qrtemp=qr
+**********************************************************************
+* *
+* Write crystal structure including periodic images *
+* *
+**********************************************************************
+* mux=(1+kx+kx)
+* muy=(1+ky+ky)
+* muz=(1+kz+kz)
+* qr='F'
+* write (86,'(2x,a1,1x,a60)')qr,qmol
+* qr=qrtemp
+* write (86,'(3f10.4)')mux*axiss(1),muy*axiss(2),muz*axiss(3)
+* write (86,'(3f10.4)')angle(1),angle(2),angle(3)
+* do i1=1,na
+* write (86,'(i4,1x,a2,3x,3d22.15)')i1,qa(i1),(c(i1,i2),i2=1,3)
+* end do
+* nhulp=na+1
+* do k1=-kx,kx
+* do k2=-ky,ky
+* do k3=-kz,kz
+* if (k1.ne.0.or.k2.ne.0.or.k3.ne.0) then
+* do i1=1,na
+* cx=c(i1,1)+k1*tm11
+* cy=c(i1,2)+k1*tm21+k2*tm22
+* cz=c(i1,3)+k1*tm31+k2*tm32+k3*tm33
+* write (86,'(i4,1x,a2,3x,3d22.15)')nhulp,qa(i1),cx,cy,cz
+* nhulp=nhulp+1
+* end do
+* end if
+* end do
+* end do
+* end do
+* write (86,*)
+**********************************************************************
+* *
+* Write crystal structure with extra unit cells *
+* *
+**********************************************************************
+ mux=1+iexx
+ muy=1+iexy
+ muz=1+iexz
+ qr='F'
+ write (85,'(2x,a1,1x,a60)')qr,qmol
+ qr=qrtemp
+ write (85,'(3f10.4)')mux*axiss(1),muy*axiss(2),muz*axiss(3)
+ write (85,'(3f10.4)')angle(1),angle(2),angle(3)
+ do i1=1,na
+ write (85,'(i4,1x,a2,3x,3d22.15)')i1,qa(i1),(c(i1,i2),i2=1,3)
+ end do
+ nhulp=na+1
+ do k1=0,iexx
+ do k2=0,iexy
+ do k3=0,iexz
+ if (k1.ne.0.or.k2.ne.0.or.k3.ne.0) then
+ do i1=1,na
+ cx=c(i1,1)+k1*tm11
+ cy=c(i1,2)+k1*tm21+k2*tm22
+ cz=c(i1,3)+k1*tm31+k2*tm32+k3*tm33
+ write (85,'(i4,1x,a2,3x,3d22.15)')nhulp,qa(i1),cx,cy,cz
+ nhulp=nhulp+1
+ end do
+ end if
+ end do
+ end do
+ end do
+ write (85,*)
+
+ end if
+ end if
+ end if
+
+ end if
+
+ if (ni.eq.0.or.ni.eq.2) then
+**********************************************************************
+* *
+* Write ASCII trajectory file *
+* *
+**********************************************************************
+ if (ni.eq.0) open(unit=66,file=qmdfi//'.vel',status='unknown')
+ if (ni.eq.2) then
+ write (var,'(f7.4)')float(mdstep/nsav3)/1d4
+ open (unit=66,file=qmdfi//var(3:7),status='unknown')
+ end if
+ write (66,500)axis(1),axis(2),axis(3)
+ write (66,550)angle(1),angle(2),angle(3)
+ write (66,600)na,((c(i,j),j=1,3),qlabel(i),i=1,na)
+ write (66,700)((vel(j,i),j=1,3),i=1,na)
+ write (66,800)((accel(j,i),j=1,3),i=1,na)
+ write (66,900)((aold(j,i),j=1,3),i=1,na)
+ write (66,1000)tempmd
+ write (66,1050)
+ close (66)
+ end if
+ if (ni.ne.2.and.iopt.eq.0) then
+
+C open (unit=68,file='xmolout',status='unknown',access='append')
+ write (68,1200)na
+ write (68,1300)qmol,mdstep+nit+nprevrun,estrc,
+ $axis(1),axis(2),axis(3),angle(1),angle(2),angle(3)
+ do i1=1,na
+ if (ixmolo.eq.0) write (68,1400)qa(i1),(c(i1,i2),i2=1,3)
+ if (ixmolo.eq.1) write (68,1400)qa(i1),(c(i1,i2),i2=1,3),
+ $(vel(i2,i1)/1e+10,i2=1,3),iag(i1,3+mbond)
+ if (ixmolo.eq.2) write (68,1401)qa(i1),(c(i1,i2),i2=1,3),
+ $iag(i1,3+mbond)
+ end do
+ close (68)
+
+ if (itrout.ne.0) then
+C open (unit=69,file='xmolout2',status='unknown',access='append')
+ write (69,1200)na
+ write (69,1300)qmol,mdstep+nit+nprevrun,estrc,
+ $axis(1),axis(2),axis(3),angle(1),angle(2),angle(3)
+ do i1=1,na
+ if (ixmolo.eq.0) write (69,1400)qa(i1),(cp(i1,i2),i2=1,3)
+ if (ixmolo.eq.1) write (69,1400)qa(i1),(cp(i1,i2),i2=1,3),
+ $(vel(i2,i1)/1e+10,i2=1,3),iag(i1,3+mbond)
+ if (ixmolo.eq.2) write (68,1401)qa(i1),(c(i1,i2),i2=1,3),
+ $iag(i1,3+mbond)
+ end do
+ close (69)
+ end if
+
+ call molanal
+ end if
+**********************************************************************
+* *
+* Generate BIOGRAF output-file *
+* *
+**********************************************************************
+ if ((ni.eq.1.and.iopt.eq.0).or.(ni.eq.1.and.iopt.eq.1.and.
+ $iflga.eq.1)) then
+
+ if (qfileh.eq.' ') then
+ write (*,*)'Warning: no file name given; use Unknown'
+ qfileh='Unknown'
+ end if
+ qfile2=qfileh
+ if (imodfile.eq.0) then
+ istart=1
+ qstrana1(1:25)=qfileh
+ call stranal(istart,iend,vout,iout,1)
+ qfile2=qfileh(istart:iend-1)//".bgf"
+ end if
+ call writebgf(90)
+
+ if (imodfile.eq.1.or.iopt.eq.0) then
+ open (88,file=qfile2,status='unknown')
+ call writebgf(88)
+ close (88)
+ end if
+
+ end if
+
+ return
+**********************************************************************
+* *
+* Format part *
+* *
+**********************************************************************
+ 100 format (i4,1x,a40,'Iteration:',i8,' #Bonds:',i4)
+ 101 format (i3,2x,a40)
+ 200 format (8i4,8f7.3)
+ 201 format (8i3)
+ 210 format (13i4,13f7.3)
+ 220 format (18i4,18f7.3)
+ 230 format (23i4,23f7.3)
+ 240 format (28i4,28f7.3)
+ 250 format (38i4,38f7.3)
+ 300 format (2x,a1,1x,a60)
+ 301 format (2x,a1,1x,f6.2,a60)
+ 302 format (2x,a1,1x,2f6.2,a60)
+ 310 format (2x,a1,1x,a60)
+ 320 format (3f10.4)
+ 400 format (i4,1x,a2,3x,3(d21.14,1x),1x,a5,1x,i5)
+ 410 format (i4,f12.6)
+ 412 format(A6,I5,1x,A2,3x,A3,2x,i4,4x,3f8.3,f6.2,f6.2,4x,2x,A6)
+ 500 format (1x,'Lattice parameters:',/(3f15.8))
+ 550 format (3f15.8)
+ 600 format (i4,1x,'Atom coordinates (Angstrom):',/
+ $(3d24.15,1x,a5))
+ 700 format (1x,'Atom velocities (Angstrom/s):',/(3d24.15))
+ 800 format (1x,'Atom accelerations (Angstrom/s**2):',/(3d24.15))
+ 900 format (1x,'Previous atom accelerations:',/(3d24.15))
+ 1000 format (1x,'MD-temperature (K):',/(1d24.15))
+ 1050 format (1x,'Connections, bond orders and lone pairs:')
+ 1100 format (8i3,8f8.4)
+ 1200 format (i4)
+ 1300 format (a40,i6,f12.4,6f7.2)
+ 1400 format (a2,3f10.5,3f15.5,i6)
+ 1401 format (a2,3f10.5,i6)
+ 1500 format ('BIOGRF',i4)
+ 1600 format ('XTLGRF',i4)
+ 1700 format ('DESCRP ',a60)
+ 1800 format ('REMARK ',a60)
+ 1900 format ('FFIELD ',a40)
+ 2000 format ('RUTYPE ',a40)
+ 2100 format ('CRYSTX ',6f11.5)
+ 2200 format ('CELLS ',6i5)
+ 2300 format ('# At1 At2 R12 Force1 Force2 ',
+ $'dR12/dIteration(MD only)')
+ 2400 format ('BOND RESTRAINT ',2i4,f8.4,f8.2,f8.5,f10.7)
+ 2500 format ('# At1 At2 At3 Angle Force1 Force2',
+ $' dAngle/dIteration (MD only)')
+ 2600 format ('ANGLE RESTRAINT ',3i4,2f8.2,f8.4,f9.6)
+ 2700 format ('# At1 At2 At3 At3 Angle Force1 ',
+ $'Force2 dAngle/dIteration (MD only)')
+ 2800 format ('TORSION RESTRAINT ',4i4,2f8.2,f8.4,f9.6)
+ 2900 format ('FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,',
+ $'3f10.5,1x,a5,i3,i2,1x,f8.5)')
+ 3000 format ('HETATM',1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,
+ $a5,i3,i2,1x,f8.5)
+ 3100 format ('FORMAT CONECT (a6,12i6)')
+ 3200 format ('CONECT',12i6)
+ 3300 format ('UNIT ENERGY kcal')
+ 3400 format ('ENERGY',5x,f14.6)
+ 3500 format ('END')
+ end
+
+************************************************************************
+************************************************************************
+
+ subroutine readc
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkcha.blk"
+#include "cbkconst.blk"
+#include "cbkdistan.blk"
+#include "cbkinit.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+
+ character*6 qident
+ character*20 qhulp
+* dimension qident(100)
+************************************************************************
+* *
+* Read control file *
+* *
+************************************************************************
+c$$$c if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$c write (65,*) 'In readc'
+c$$$c call timer(65)
+c$$$c close (65)
+c$$$c end if
+ if (mdstep.gt.0.or.nit.gt.0) nmmsav=nmm
+************************************************************************
+* *
+* Set default values *
+* *
+************************************************************************
+ nreac=0
+ axis1=200.0d0
+ axis2=200.0d0
+ axis3=200.0d0
+ cutof2=0.001d0
+ cutof3=0.300d0
+ tsetor=298.0d0
+ tset2=298.0d0
+ pset=0.0d0
+ tincr=0.0d0
+ tstep=0.5d0
+* swa=0.0 !Moved to force field
+* swb=12.5 !Moved to force field
+ taut=2.5d0
+ taut2=2.5d0
+ ndtau=50000
+ taup=500.0d0
+ vqnd=100.0d0
+ errnh=1.0d0
+ range=2.5d0
+ maxstp=1000
+ nequi=0
+ nmethod=3
+ ncha=3
+ ncha2=1
+ nchaud=1
+ nvlist=25
+ nrep1=5
+ nsav=50
+ icheck=0
+ ivels=0
+ itfix=0
+ ncontrol=25
+ noutpt=0
+ napp=0
+ nsurp=0
+ ncons=2
+ nrand=0
+ nmm=0
+ endpo=1.0d0
+ endpo2=1.0d0
+ nfc=50
+ nsav2=50
+ nmmax=50
+ i5758=0
+ parc1=1.0d0
+ parc2=0.001d0
+ icell=0
+ ingeo=1
+ ccpar=1.0005d0
+ icelo2=0
+ nrdd=0
+ nrddf=200000
+ nbiolab=0
+c ngeofor=0
+ nincrop=0
+ accerr=2.50d0
+ vrange=2.50d0
+ vlbora=5.00d0
+ nsav3=1000
+ nhop2=25
+ nprevrun=0
+ ndebug=0
+ volcha=10.00d0
+ ixmolo=0
+ inpt=0
+ iconne=0
+ imolde=0
+ ianaly=0
+ icentr=0
+ itrans=0
+ itrout=0
+ tpnrad=300.0d0
+ ityrad=3
+ iexx=1
+ iexy=1
+ iexz=1
+ syscha=0.00d0
+ inmov1=0
+ inmov2=0
+ vfield=0.00d0
+ itstep=0
+ ifreq=0
+ isymm=1
+ icpres=0
+ delvib=0.0001d0
+c shock variables
+ shock_vel = 2.d0 ! impact velocity for shock simulations (nm/ps)
+ shock_z_sep = 10.0d0 ! separation z value to apply initial velocities in shocks
+ ishock_type = 0.0d0 ! shock type. 0: simple impact; 1: compressing c axis
+c Hugoniostat variables
+ Hug_E0 = 0.d0 ! Reference energy
+ Hug_P0 = 0.d0 ! Reference pressure
+ Hug_V0 = 0.d0 ! Reference volume
+c Shear flow simulations for viscosity
+ xImpVcm = 1.d0 ! velocity applied in shear simulations (in nm/ps), left half mover at -xImpVcm and right at +xImpVcm
+c$$$************************************************************************
+c$$$* *
+c$$$* Read control-file *
+c$$$* *
+c$$$************************************************************************
+c$$$ open (10,file='control',status='old')
+c$$$ 10 read (10,'(a20)',end=20,err=30)qhulp
+c$$$ if (qhulp(1:1).eq.'#') goto 10
+c$$$ read (qhulp,*,err=30)vhulp
+c$$$ read (qhulp,'(8x,a6)',err=30)qident
+c$$$ if (qident.eq.'Hug_V0') Hug_P0=vhulp
+c$$$ if (qident.eq.'Hug_P0') Hug_V0=vhulp
+c$$$ if (qident.eq.'Hug_E0') Hug_E0=vhulp
+c$$$ if (qident.eq.'shea_v') xImpVcm=vhulp
+c$$$ if (qident.eq.'shok_t') ishock_type=int(vhulp)
+c$$$ if (qident.eq.'shok_z') shock_z_sep=vhulp
+c$$$ if (qident.eq.'shok_v') shock_vel=vhulp
+c$$$ if (qident.eq.'nreac') nreac=int(vhulp)
+c$$$ if (qident.eq.'axis1') axis1=vhulp
+c$$$ if (qident.eq.'axis2') axis2=vhulp
+c$$$ if (qident.eq.'axis3') axis3=vhulp
+c$$$ if (qident.eq.'cutof2') cutof2=vhulp
+c$$$ if (qident.eq.'cutof3') cutof3=vhulp
+c$$$ if (qident.eq.'mdtemp') tsetor=vhulp
+c$$$ if (qident.eq.'mdtem2') tset2=vhulp
+c$$$ if (qident.eq.'mdpres') pset=vhulp*0.001
+c$$$ if (qident.eq.'tincr') tincr=vhulp
+c$$$ if (qident.eq.'tstep') tstep=vhulp
+c$$$* if (qident.eq.'lowtap') swa=vhulp !Moved to force field
+c$$$* if (qident.eq.'uptap') swb=vhulp !Moved to force field
+c$$$ if (qident.eq.'tdamp1') taut=vhulp
+c$$$ if (qident.eq.'tdamp2') taut2=vhulp
+c$$$ if (qident.eq.'ntdamp') ndtau=int(vhulp)
+c$$$ if (qident.eq.'pdamp1') taup=vhulp
+c$$$ if (qident.eq.'tdhoov') vqnd=vhulp
+c$$$ if (qident.eq.'achoov') errnh=vhulp/100.0
+c$$$ if (qident.eq.'range') range=vhulp
+c$$$ if (qident.eq.'nmdit') maxstp=int(vhulp)
+c$$$ if (qident.eq.'nmdeqi') nequi=int(vhulp)
+c$$$ if (qident.eq.'imdmet') nmethod=int(vhulp)
+c$$$ if (qident.eq.'icharg') ncha=int(vhulp)
+ nchaold=ncha
+c$$$ if (qident.eq.'ichaen') ncha2=int(vhulp)
+c$$$ if (qident.eq.'ichupd') nchaud=int(vhulp)
+c$$$ if (qident.eq.'iout1') nrep1=int(vhulp)
+c$$$ if (qident.eq.'iout2') nsav=int(vhulp)
+c$$$ if (qident.eq.'icheck') ntest=int(vhulp)
+c$$$ if (qident.eq.'ivels') nvel=int(vhulp)
+c$$$ if (qident.eq.'itfix') ntscale=int(vhulp)
+c$$$ if (qident.eq.'irecon') ncontrol=int(vhulp)
+c$$$ if (qident.eq.'iout3') noutpt=int(vhulp)
+c$$$ if (qident.eq.'iappen') napp=int(vhulp)
+c$$$ if (qident.eq.'isurpr') nsurp=int(vhulp)
+c$$$ if (qident.eq.'itdmet') ncons=int(vhulp)
+c$$$ if (qident.eq.'iravel') nrand=int(vhulp)
+c$$$ if (qident.eq.'imetho') nmm=int(vhulp)
+c$$$ if (qident.eq.'endmm') endpo=vhulp
+ endpoold=endpo
+c$$$ if (qident.eq.'endmd') endpo2=vhulp
+c$$$ if (qident.eq.'imaxmo') nfc=int(vhulp)
+ nfcold=nfc
+c$$$ if (qident.eq.'iout4') nsav2=int(vhulp)
+c$$$ if (qident.eq.'imaxit') nmmax=int(vhulp)
+ nmmaxold=nmmax
+c$$$ if (qident.eq.'iout5') i5758=int(vhulp)
+c$$$ if (qident.eq.'parsca') parc1=vhulp
+c$$$ if (qident.eq.'parext') parc2=vhulp
+c$$$ if (qident.eq.'icelop') icell=int(vhulp)
+ icellold=icell
+c$$$ if (qident.eq.'igeopt') ingeo=int(vhulp)
+c$$$ if (qident.eq.'celopt') ccpar=vhulp
+c$$$ if (qident.eq.'icelo2') icelo2=int(vhulp)
+ icelo2old=icelo2
+c$$$ if (qident.eq.'ideve1') nrdd=int(vhulp)
+c$$$ if (qident.eq.'ideve2') nrddf=int(vhulp)
+c$$$ if (qident.eq.'ibiola') nbiolab=int(vhulp)
+c$$$c if (qident.eq.'igeofo') ngeofor=int(vhulp)
+c$$$ if (qident.eq.'iincop') nincrop=int(vhulp)
+c$$$ if (qident.eq.'accerr') accincr=vhulp
+c$$$ if (qident.eq.'iout6') nsav3=int(vhulp)
+c$$$ if (qident.eq.'irten') nhop2=int(vhulp)
+c$$$ if (qident.eq.'npreit') nprevrun=int(vhulp)
+c$$$ if (qident.eq.'idebug') ndebug=int(vhulp)
+c$$$ if (qident.eq.'volcha') volcha=vhulp
+c$$$ if (qident.eq.'ixmolo') ixmolo=int(vhulp)
+c$$$ if (qident.eq.'inpt') inpt=int(vhulp)
+c$$$ if (qident.eq.'iconne') iconne=int(vhulp)
+c$$$ if (qident.eq.'imolde') imolde=int(vhulp)
+c$$$ if (qident.eq.'ianaly') ianaly=int(vhulp)
+c$$$ if (qident.eq.'icentr') icentr=int(vhulp)
+c$$$ if (qident.eq.'itrans') itrans=int(vhulp)
+c$$$ if (qident.eq.'itrout') itrout=int(vhulp)
+c$$$ if (qident.eq.'nvlist') nvlist=int(vhulp)
+c$$$ if (qident.eq.'vrange') vrange=vhulp
+c$$$ if (qident.eq.'vlbora') vlbora=vhulp
+c$$$ if (qident.eq.'tpnrad') tpnrad=vhulp
+c$$$ if (qident.eq.'ityrad') ityrad=int(vhulp)
+c$$$ if (qident.eq.'iexx') iexx=int(vhulp)
+c$$$ if (qident.eq.'iexy') iexy=int(vhulp)
+c$$$ if (qident.eq.'iexz') iexz=int(vhulp)
+c$$$ if (qident.eq.'syscha') syscha=vhulp
+c$$$ if (qident.eq.'inmov1') inmov1=int(vhulp)
+c$$$ if (qident.eq.'inmov2') inmov2=int(vhulp)
+c$$$ if (qident.eq.'itstep') itstep=int(vhulp)
+c$$$ if (qident.eq.'ifreq') ifreq=int(vhulp)
+c$$$ if (qident.eq.'isymm') isymm=int(vhulp)
+c$$$ if (qident.eq.'icpres') icpres=int(vhulp)
+c$$$ if (qident.eq.'delvib') delvib=vhulp
+c$$$ goto 10
+c$$$ 20 continue
+ close (10)
+ axis(1)=axis1
+ axis(2)=axis2
+ axis(3)=axis3
+ if (axiss(1).gt.zero) then
+ axis(1)=axiss(1)
+ axis(2)=axiss(2)
+ axis(3)=axiss(3)
+ end if
+ if (tincr.lt.0.0001.and.tincr.gt.-0.0001) tset=tsetor
+ iequi=1
+ if (nequi.gt.0) iequi=0
+ if (iopt.eq.1.and.napp.eq.1) then
+ stop 'No fort.7 and fort.8 append with iopt=1 !'
+ end if
+ if (mdstep.gt.0.or.nit.gt.0) nmm=nmmsav
+ if (mdstep.gt.0.and.itstep.eq.1) then
+ tstepmax=tstep
+ tstep=tstep*(tsetor/tempmd)
+ if (tstep.gt.tstepmax) tstep=tstepmax
+ end if
+ tstep=1.0d-15*tstep
+ taus=taut
+ taut=1.0d-15*taut
+ taut2=1.0d-15*taut2
+ taup=1.0d-15*taup
+ ts2=tstep/2.0
+ ts22=tstep*ts2
+ return
+ 30 continue
+ write (*,*)'Error reading control-file'
+ stop 'Error reading control-file'
+************************************************************************
+* *
+* Format part *
+* *
+************************************************************************
+ 1050 format (f7.3)
+ 1055 format (f7.4)
+ 1056 format (f9.4)
+ 1060 format (i8)
+ 1070 format (f7.5)
+ end
+************************************************************************
+************************************************************************
+
+ subroutine staint
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkdcell.blk"
+#include "cbkqa.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+ dimension bvt(nat,4)
+************************************************************************
+* *
+* Generate cartesian coordinates from internal coordinate input *
+* *
+************************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In staint'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ k=0
+ 10 read (3,1200,end=20,err=20)(ijk(k+1,k1),k1=1,3),k2,qa(k+1),
+ $bvt(k+1,3),bvt(k+1,2),bvt(k+1,1)
+ qlabel(k+1)=qa(k+1)
+ qresi1(k+1)=' '
+ qresi2(k+1)=' '
+ qresi3(k+1)=' '
+ qffty(k+1)=' '
+ if (k2.ne.k+1) then
+ write (*,*)'Wrong order in internal coordinates at atom:',k2
+ goto 20
+* stop 'Wrong order in internal coordinates'
+ end if
+ k=k+1
+ if (k.gt.nat) then
+ write (*,*)na,nat
+ stop 'Maximum number of atoms exceeded'
+ end if
+ goto 10
+ 20 continue
+ na=k
+
+************************************************************************
+* *
+* CALCULATION OF CARTESIAN COORDINATES FROM INTERNAL COORDINAATES *
+* *
+************************************************************************
+
+ 12 C(1,1)=ZERO
+ C(1,2)=ZERO
+ C(1,3)=ZERO
+ C(2,1)=BVT(2,1)
+ C(2,2)=ZERO
+ C(2,3)=ZERO
+ HR=(BVT(3,2)-90.0D0)*DGRRDN
+ C(3,1)=C(2,1)+BVT(3,1)*SIN(HR)
+ C(3,2)=BVT(3,1)*COS(HR)
+ C(3,3)=ZERO
+ DO 32 K1=4,NA
+ J=IJK(K1,2)
+ KB=K1-1
+ XH=C(J,1)
+ YH=C(J,2)
+ ZH=C(J,3)
+ DO 13 K2=1,KB
+ C(K2,1)=C(K2,1)-XH
+ C(K2,2)=C(K2,2)-YH
+ C(K2,3)=C(K2,3)-ZH
+ DO 13 K3=1,3
+ 13 IF (ABS(C(K2,K3)).LT.1.0D-15) C(K2,K3)=1.0D-15
+ K=IJK(K1,3)
+ P2=C(K,2)*C(K,2)+C(K,3)*C(K,3)
+ IF (P2.NE.ZERO) THEN
+ P=SQRT(P2)
+ Q=SQRT(C(K,1)*C(K,1)+P2)
+ SA=C(K,2)/P
+ CA=C(K,3)/P
+ SB=-C(K,1)/Q
+ CB=P/Q
+ ELSE
+ SA=ZERO
+ CA=ONE
+ SB=ONE
+ CB=ZERO
+ ENDIF
+ DO 16 K2=1,KB
+ AZ=C(K2,1)
+ BZ=C(K2,2)
+ C(K2,1)=AZ*CB+BZ*SB*SA+C(K2,3)*SB*CA
+ C(K2,2)=BZ*CA-C(K2,3)*SA
+ 16 C(K2,3)=-AZ*SB+BZ*CB*SA+C(K2,3)*CB*CA
+ IF (C(K,3).LE.ZERO) THEN
+ DO 17 K2=1,KB
+ 17 C(K2,3)=-C(K2,3)
+ ENDIF
+ I=IJK(K1,1)
+ IF (1.0D5*ABS(C(I,1)).LE.ABS(C(I,2))) THEN
+ T1=HALF*PI
+ ELSE
+ YX=ABS(C(I,2)/C(I,1))
+ T1=ATAN(YX)
+ ENDIF
+ IF (C(I,1).GE.ZERO.AND.C(I,2).LT.ZERO) T1=TWO*PI-T1
+ IF (C(I,1).LT.ZERO.AND.C(I,2).GE.ZERO) T1=PI-T1
+ IF (C(I,1).LT.ZERO.AND.C(I,2).LT.ZERO) T1=T1+PI
+ DO 31 K2=1,KB
+ IF (C(K2,1).EQ.ZERO.AND.C(K2,2).EQ.ZERO) GOTO 31
+ IF (1.0D5*ABS(C(K2,1)).LT.ABS(C(K2,2))) THEN
+ T2=HALF*PI
+ ELSE
+ YX=ABS(C(K2,2)/C(K2,1))
+ T2=ATAN(YX)
+ ENDIF
+ IF (C(K2,1).GE.ZERO.AND.C(K2,2).LT.ZERO) T2=TWO*PI-T2
+ IF (C(K2,1).LT.ZERO.AND.C(K2,2).GE.ZERO) T2=PI-T2
+ IF (C(K2,1).LT.ZERO.AND.C(K2,2).LT.ZERO) T2=T2+PI
+ T3=T2-T1
+ IF (T3.LT.ZERO)T3=T3+TWO*PI
+ RZ=SQRT(C(K2,1)*C(K2,1)+C(K2,2)*C(K2,2))
+ C(K2,1)=RZ*COS(T3)
+ C(K2,2)=RZ*SIN(T3)
+ 31 CONTINUE
+ HR=(BVT(K1,2)-90.0D0)*DGRRDN
+ HT=BVT(K1,3)*DGRRDN
+ CHR=COS(HR)
+ C(K1,1)=BVT(K1,1)*CHR*COS(HT)
+ C(K1,2)=BVT(K1,1)*CHR*SIN(HT)
+ 32 C(K1,3)=C(IJK(K1,3),3)+BVT(K1,1)*SIN(HR)
+
+ return
+ 1200 FORMAT(4I3,1X,A2,3F10.5,4X,I1,F10.5)
+ end
+************************************************************************
+************************************************************************
+
+ subroutine outint
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkbo.blk"
+#include "cbkconst.blk"
+#include "cbkia.blk"
+#include "cbkinit.blk"
+#include "cbknubon2.blk"
+#include "cbkqa.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbksrtbon1.blk"
+************************************************************************
+* *
+* Output internal coordinates *
+* *
+************************************************************************
+ dimension dvdc(3,3),dargdc(3,3)
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In outint'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ write (91,50)qmol
+ open (82,file='output.MOP',status='unknown')
+ write (82,*)
+ write (82,'(a40)')qmol
+ write (82,*)
+ close (82)
+
+* IF (NMOLO.GT.1) THEN
+* WRITE(6,*)' OUTPUT INTERNAL COORDINATES NOT POSSIBLE FOR ',
+* $'CALCULATION ON MORE THAN ONE MOLECULE'
+* RETURN
+* END IF
+
+************************************************************************
+* *
+* Output of internal coordinates. *
+* First 3 atoms of other input file. *
+* *
+************************************************************************
+ N1=1
+ N2=2
+ N3=3
+C open (82,file='output.MOP',status='unknown',access='append')
+ write(91,100)N1,qa(n1)
+ write(82,'(2x,a2,f12.6,i3,f12.6,i3,f12.6,i3,1x,3i4)')qa(n1),
+ $zero,nzero,zero,nzero,zero,nzero,nzero,nzero,nzero
+ call dista2(n1,n2,rr,dx,dy,dz)
+ write(91,200)N1,N2,qa(n2),RR
+ write(82,'(2x,a2,f12.6,i3,f12.6,i3,f12.6,i3,1x,3i4)')qa(n2),
+ $rr,none,zero,nzero,zero,nzero,n1,nzero,nzero
+ close (82)
+
+ call dista2(n2,n3,rr,dx,dy,dz)
+ hv=zero
+ call calvalres(n1,n2,n3,arg,hv,dvdc,dargdc)
+ WRITE(91,300)N1,N2,N3,qa(n3),rdndgr*HV,RR
+C open (82,file='output.MOP',status='unknown',access='append')
+ write(82,'(2x,a2,f12.6,i3,f12.6,i3,f12.6,i3,1x,3i4)')qa(n3),
+ $rr,none,rdndgr*hv,none,zero,nzero,n2,n1,nzero
+ close (82)
+
+ naih=3
+
+ do i1=naih+1,na
+ bomax=zero
+ j1=0
+ do i2=1,ia(i1,2)
+ iob=ia(i1,2+i2)
+ ncubo=nubon2(i1,i2)
+ if (bo(ncubo).gt.bomax.and.iob.lt.i1) then
+ bomax=bo(ncubo)
+ j1=iob
+ end if
+ end do
+ if (j1.eq.0) j1=i1-1
+ call dista2(j1,i1,rr,dx,dy,dz)
+
+ bomax=zero
+ j2=0
+ do i2=1,ia(j1,2)
+ iob=ia(j2,2+i2)
+ ncubo=nubon2(j1,i2)
+ if (bo(ncubo).gt.bomax.and.iob.lt.i1.and.
+ $abo(iob).gt.bo(ncubo)+0.2) then
+ bomax=bo(ncubo)
+ j2=iob
+ end if
+ end do
+ if (j2.eq.0) j2=i1-2
+ if (j2.eq.j1) j2=j2+1
+
+ call calvalres(j2,j1,i1,arg,hh,dvdc,dargdc)
+
+ bomax=zero
+ j3=0
+ do i2=1,ia(j2,2)
+ iob=ia(j2,2+i2)
+ ncubo=nubon2(j2,i2)
+ if (bo(ncubo).gt.bomax.and.iob.lt.i1.and.iob.ne.j1) then
+ bomax=bo(ncubo)
+ j3=iob
+ end if
+ end do
+ if (j3.eq.0) j3=i1-3
+ if (j3.eq.j2.and.j3.ne.j1-1) j3=j3+1
+ if (j3.eq.j2.and.j3.ne.j1-2) j3=j3+2
+ if (j3.eq.j1.and.j3.ne.j2-1) j3=j3+1
+ if (j3.eq.j1.and.j3.ne.j2-2) j3=j3+2
+
+ call caltor(j3,j2,j1,i1,ht)
+
+ write(91,400)j3,j2,j1,i1,qa(i1),ht,rdndgr*hh,rr
+C open (82,file='output.MOP',status='unknown',access='append')
+ write(82,'(2x,a2,f12.6,i3,f12.6,i3,f12.6,i3,1x,3i4)')qa(i1),
+ $rr,none,rdndgr*hh,none,ht,none,j1,j2,j3
+ close (82)
+ end do
+
+ close(82)
+ return
+ 50 format (' I',2x,a60)
+ 100 FORMAT(9X,I3,1x,a2)
+ 200 FORMAT(6X,2I3,1x,a2,20X,F10.5)
+ 300 FORMAT(3X,3I3,1x,a2,10X,2F10.5)
+ 400 FORMAT(4I3,1x,a2,3F10.5)
+
+ end
+************************************************************************
+************************************************************************
+
+ subroutine outres
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkbo.blk"
+#include "cbkch.blk"
+#include "cbkd.blk"
+#include "cbkenergies.blk"
+#include "cbkh.blk"
+#include "cbkimove.blk"
+#include "cbkrbo.blk"
+#include "cbktorang.blk"
+#include "cbktorsion.blk"
+#include "cbktregime.blk"
+#include "cbkvalence.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+#include "cbkinit.blk"
+
+************************************************************************
+* *
+* Output molecular data *
+* *
+************************************************************************
+ dimension isort(100),iad1(100),iad2(100),iad3(100),iad4(100)
+ character*60 qm2
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In outres'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ read (9,100,end=50)idata,qm2
+* if (qm2.ne.qmol) then
+* write (*,*)'Wrong molecule in outres-file'
+* write (*,*)qmol
+* write (*,*)qm2
+* return
+* end if
+ do 25 i1=1,idata
+ read (9,200)isort(i1),iad1(i1),iad2(i1),iad3(i1),iad4(i1)
+ ndata2=ndata2+1
+
+ if (isort(i1).eq.1) then
+* do i2=1,nbon
+* if (ib(i2,2).eq.iad1(i1).and.ib(i2,3).eq.iad2(i1)) then
+* if (iopt.ne.1) write (81,*)iad1(i1),iad2(i1),rbo(i2)
+* caldat(ndata2)=rbo(i2)
+* end if
+* end do
+ call dista2(iad1(i1),iad2(i1),dish,dx,dy,dz)
+ write (81,*)iad1(i1),iad2(i1),dish
+ caldat(ndata2)=dish
+ end if
+
+ if (isort(i1).eq.2) then
+ do i2=1,nval
+ if (iv(i2,2).eq.iad1(i1).and.iv(i2,3).eq.iad2(i1).and.
+ $iv(i2,4).eq.iad3(i1)) then
+ if (iopt.ne.1) write (81,*)iad1(i1),iad2(i1),
+ $iad3(i1),h(i2)*rdndgr
+ caldat(ndata2)=h(i2)*rdndgr
+ end if
+ end do
+ end if
+
+ if (isort(i1).eq.3) then
+ do i2=1,ntor
+ if (it(i2,2).eq.iad1(i1).and.it(i2,3).eq.iad2(i1).and.
+ $it(i2,4).eq.iad3(i1).and.it(i2,5).eq.iad4(i1)) then
+ if (iopt.ne.1) write (81,*)iad1(i1),iad2(i1),iad3(i1),iad4(i1),
+ $abs(thg(i2))
+ caldat(ndata2)=abs(thg(i2))
+ end if
+ end do
+ end if
+
+ if (isort(i1).eq.4) then
+ if (iopt.ne.1) write (81,*)estrmin
+ caldat(ndata2)=estrmin
+ end if
+
+ if (isort(i1).eq.5) then
+ if (iopt.ne.1) write (81,*)estrmin
+ caldat(ndata2)=estrmin
+ end if
+
+ if (isort(i1).eq.6) then
+ if (iopt.ne.1) write (81,*)iad1(i1),axiss(iad1(i1))
+ caldat(ndata2)=axiss(iad1(i1))
+ end if
+
+ if (isort(i1).eq.7) then
+ if (iopt.ne.1) write (81,*)eco
+ caldat(ndata2)=eco
+ end if
+
+ if (isort(i1).eq.8) then
+ do i2=1,nbon
+ if (ib(i2,2).eq.iad1(i1).and.ib(i2,3).eq.iad2(i1)) then
+ if (iopt.ne.1) write (81,*)iad1(i1),iad2(i1),bo(i2)
+ caldat(ndata2)=bo(i2)
+ end if
+ end do
+ end if
+
+ if (isort(i1).eq.9) then
+ if (iopt.ne.1) write (81,*)ch(iad1(i1))
+ caldat(ndata2)=ch(iad1(i1))
+ end if
+
+ if (isort(i1).eq.10) then
+ rmsg=0.0
+ nmovh=0
+ do i2=1,na
+ do i3=1,3
+ rmsg=rmsg+imove(i2)*d(i3,i2)*d(i3,i2)
+ nmovh=nmovh+imove(i2)
+ end do
+ end do
+ rmsg=sqrt(rmsg/float(nmovh*3))
+
+ if (iopt.ne.1) write (81,*)rmsg
+ caldat(ndata2)=rmsg
+ end if
+
+ if (isort(i1).eq.11) then
+ if (iopt.ne.1) write (81,*)1000.0*pressu
+ caldat(ndata2)=1000.0*pressu
+ end if
+
+ 25 continue
+
+ 50 return
+************************************************************************
+* *
+* Format part *
+* *
+************************************************************************
+ 100 format (i3,a60)
+ 200 format (5i3)
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readgeo
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkdistan.blk"
+#include "cbkinit.blk"
+#include "cbkqa.blk"
+#include "cbksrtbon1.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+ character*80 qromb
+ character*25 qfileh
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readgeo'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ if (ngeofor.eq.-1) return
+
+**********************************************************************
+* *
+* Read in system geometry *
+* *
+**********************************************************************
+ if (ngeofor.eq.0) then
+ call readdelphi (qfileh,iend,naold)
+ namov=na
+ end if
+
+ if (ngeofor.eq.1) then
+ call readbgf(iend,naold)
+ end if
+
+
+
+ if (ngeofor.eq.2) then
+**********************************************************************
+* *
+* Read in free format (xmol) geometry *
+* *
+**********************************************************************
+ qr='1'
+ read (3,'(i6)')na
+ namov=na
+ read (3,'(a60)')qmol
+ do i1=1,na
+ read (3,'(a80)')qromb
+ ifirstchar=80
+ do i2=1,80
+ if (qromb(i2:i2).ne.' '.and.i2.lt.ifirstchar) ifirstchar=i2
+ end do
+ read (qromb(ifirstchar:80),'(a2)')qa(i1)
+ read (qromb(ifirstchar+2:80),*)c(i1,1),c(i1,2),c(i1,3)
+ qlabel(i1)=qa(i1)
+ qresi1(i1)=' '
+ qresi2(i1)=' '
+ qresi3(i1)=' '
+ qffty(i1)=' '
+ end do
+ ibity=1
+ axiss(1)=-1.0
+ end if
+
+
+ if (ngeofor.eq.3) then
+**********************************************************************
+* *
+* Read in ChemDraw CC1-file *
+* *
+**********************************************************************
+ qr='1'
+ read (3,*)na
+ namov=na
+ read (3,'(a60)')qmol
+ do i1=1,na
+ read (3,'(2x,a2,5x,3f12.6)')qa(i1),c(i1,1),c(i1,2),c(i1,3)
+ end do
+ end if
+
+ if (ngeofor.eq.4) then
+**********************************************************************
+* *
+* Read in .pdb-format *
+* *
+**********************************************************************
+ qr='C'
+ call readpdb(iendf)
+ namov=na
+ ibity=1
+ axiss(1)=-1.0
+ qfile(nprob)=qmol
+ if (iendf.eq.1) stop 'End-of-file while reading in .pdb'
+ end if
+
+**********************************************************************
+* *
+* Set up periodic system *
+* *
+**********************************************************************
+ axis(1)=axiss(1)
+ axis(2)=axiss(2)
+ axis(3)=axiss(3)
+ angle(1)=angles(1)
+ angle(2)=angles(2)
+ angle(3)=angles(3)
+ if (axiss(1).lt.zero) then
+ axis(1)=axis1
+ axis(2)=axis2
+ axis(3)=axis3
+ angle(1)=90.0
+ angle(2)=90.0
+ angle(3)=90.0
+ end if
+ halfa=angle(1)*dgrrdn
+ hbeta=angle(2)*dgrrdn
+ hgamma=angle(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axis(1)*sinbet*sinphi
+ tm21=axis(1)*sinbet*cosphi
+ tm31=axis(1)*cosbet
+ tm22=axis(2)*sinalf
+ tm32=axis(2)*cosalf
+ tm33=axis(3)
+
+ return
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readdelphi (qfileh,iend,naold)
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkdcell.blk"
+#include "cbkdistan.blk"
+#include "cbkff.blk"
+#include "cbkh.blk"
+#include "cbkinit.blk"
+#include "cbkqa.blk"
+#include "cbkrestr.blk"
+#include "cbksrtbon1.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+ character*25 qfileh
+**********************************************************************
+* *
+* Read in geometries in Delphi-format (xyz) *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readdelphi'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ if (imodfile.eq.1) then
+ open (3,file=qfileh,status='old')
+ end if
+ nmmax=nmmaxold
+ nfc=nfcold
+ ibity=1
+ iredo=1
+ endpo=endpoold
+ icell=icellold
+ icelo2=icelo2old
+ iend=0
+ read (3,1000,end=900)qr,qmol
+**********************************************************************
+* *
+* Read in restraint information (optional) *
+* *
+**********************************************************************
+ if (qr.eq.'R'.or.qr.eq.'P'.or.qr.eq.'X') then
+ qmol=qmol(7:60)
+ qmolset(nuge)=qmol
+ read (18,1070,end=4,err=4) nrestra
+ do i1=1,nrestra
+ read (18,1090)irstra(i1,1),irstra(i1,2),rrstra(i1),vkrstr(i1),
+ $vkrst2(i1),rrcha(i1)
+ end do
+ 4 continue
+ end if
+**********************************************************************
+* *
+* Read in torsion restraint information (optional) *
+* *
+**********************************************************************
+ if (qr.eq.'T'.or.qr.eq.'X') then
+ if (qr.eq.'T') then
+ qmol=qmol(7:60)
+ qmolset(nuge)=qmol
+ end if
+ read (28,1070,end=6,err=6) nrestrat
+ do i1=1,nrestrat
+ read (28,1091)irstrat(i1,1),irstrat(i1,2),irstrat(i1,3),
+ $irstrat(i1,4),trstra(i1),vkrt(i1),vkr2t(i1),rtcha(i1)
+ end do
+ 6 continue
+ end if
+**********************************************************************
+* *
+* Read in valency angle restraint information (optional) *
+* *
+**********************************************************************
+ if (qr.eq.'V') then
+ qmol=qmol(7:60)
+ qmolset(nuge)=qmol
+ read (38,1070,end=7,err=7) nrestrav
+ do i1=1,nrestrav
+ read (38,1092)irstrav(i1,1),irstrav(i1,2),irstrav(i1,3),
+ $vrstra(i1),vkrv(i1),vkr2v(i1)
+ end do
+ 7 continue
+ end if
+**********************************************************************
+* *
+* Read in geometry *
+* *
+**********************************************************************
+ ibh2=0
+ iequi=1
+ iexco=0
+ if (nequi.gt.0) iequi=0
+ axiss(1)=-1.0
+
+ if (qr.eq.'O'.or.qr.eq.'L') stop 'Not xyz-format'
+
+ if (qr.eq.'I') then !Delphi internal coordinates
+ if (nsurp.ge.2) stop 'Int.coordinates only with 1 gemetry'
+ call staint
+ goto 20
+ end if
+
+ if (qr.eq.'B') then !Previous geometry with volume reduction
+ read (3,*)
+ vred=(1.0-0.01*volcha)**(0.33333)
+ iexco=1
+ na=naold
+ do i1=1,3
+ qmol=qmol
+ axiss(i1)=vred*axis(i1)
+ angles(i1)=angle(i1)
+ do i2=1,na
+ c(i2,i1)=vred*c(i2,i1)
+ end do
+ end do
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ ibity=2
+
+ goto 20
+ end if
+
+ if (qr.eq.'S') then !Previous geometry with volume expansion
+ read (3,*)
+ vexp=(1.0+0.01*volcha)**(0.33333)
+ na=naold
+ iexco=1
+ do i1=1,3
+ qmol=qmol
+ axiss(i1)=vexp*axis(i1)
+ angles(i1)=angle(i1)
+ do i2=1,na
+ c(i2,i1)=vexp*c(i2,i1)
+ end do
+ end do
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ ibity=2
+
+ goto 20
+ end if
+
+ if (qr.eq.'F'.or.qr.eq.'Y'.or.qr.eq.'3'.or.qr.eq.'5'.
+ $or.qr.eq.'P') then
+ kx=0
+ ky=0
+ kz=0
+ ibity=2
+ read(3,1005)axiss(1),axiss(2),axiss(3)
+ read(3,1005)angles(1),angles(2),angles(3)
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+
+ end if
+
+ if (qr.eq.'M'.or.qr.eq.'A') then
+ nmmsav=nmm
+ nmm=2
+ end if
+
+ if (qr.eq.'A') nmm=1
+
+ if (qr.eq.'D') then
+ endpo=endpo/25
+ nmmax=nmmax*5
+ qruid='HIGH PRECISION'
+ end if
+
+ if (qr.eq.'H') then
+ nmmax=nmmax/10
+ qruid='LOW PRECISION'
+ end if
+
+ if (qr.eq.'1'.or.qr.eq.'5') then
+ nmm=1
+ nmmax=1
+ qruid='SINGLE POINT'
+ end if
+
+ if (qr.eq.'Y') then
+ icell=0
+ qruid='NO CELL OPT'
+ end if
+
+ 10 read (3,1100,end=20,err=20)ir,qa(na+1),(c(na+1,i2),i2=1,3)
+ qlabel(na+1)=qa(na+1)
+ qresi1(na+1)=' '
+ qresi2(na+1)=' '
+ qresi3(na+1)=' '
+ qffty(na+1)=' '
+ if (ir.eq.0) goto 20
+ na=na+1
+
+ if (na.gt.nat) then
+ write (*,*)'Maximum number of atom exceeded ',na,nat
+ stop 'Maximum number of atoms exceeded'
+ end if
+
+ goto 10
+ 20 continue
+
+ if (imodfile.eq.1) close (3)
+
+ return
+ 900 iend=1
+ return
+ 1000 format (2x,a1,1x,a60)
+ 1005 format (3f10.4)
+ 1070 format (i3)
+ 1090 format (2i4,2f8.4,f8.6,f10.8)
+ 1091 format (4i4,2f8.4,3f8.6)
+ 1092 format (3i4,2f8.4,2f8.6)
+ 1100 format (i4,1x,a2,3x,3d22.15,1x,a5,1x,i5)
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readbgf(iendf,naold)
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkcha.blk"
+#include "cbkcharmol.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkdcell.blk"
+#include "cbkdistan.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkh.blk"
+#include "cbkimove.blk"
+#include "cbkinit.blk"
+#include "cbkqa.blk"
+#include "cbkrestr.blk"
+#include "cbksrtbon1.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+ character*80 qromb
+ character*2 qrom
+ character*5 quen
+ character*5 qlabhulp
+ character*25 qfileh
+ character*200 qhulp
+**********************************************************************
+* *
+* Read in BIOGRAF-geometry *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readbgf'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ iendf=0
+ ienread=0
+ iredo=0
+ qremark(1)=' '
+ enmol=zero
+ formol=zero
+c$$$ if (imodfile.eq.1) then
+c$$$ open (3,file=qfileh,status='old')
+c$$$ end if
+ open (3,file='fort.3',status='old')
+ read (3,'(a40)',end=900)qromb
+ ibity=0
+ if (qromb(1:6).eq.'BIOGRF') ibity=1
+ if (qromb(1:6).eq.'XTLGRF') ibity=2
+ if (ibity.eq.0) then
+ write (*,*)qromb(1:6)
+ stop 'Unknown Biograf-file'
+ end if
+ read (qromb,'(6x,i4)')ibgfversion
+ if (ibity.eq.1) qr='C'
+ if (ibity.eq.2) qr='F'
+ iremark=0
+ iformat=0
+ iline=0
+ iexco=0
+ iruid=1
+ vvol=1.0
+ nmcharge=0
+ nmmax=nmmaxold
+ nfc=nfcold
+ ncha=nchaold
+ endpo=endpoold
+ icell=icellold
+ icelo2=icelo2old
+ axiss(1)=-1.0
+
+ 30 read (3,'(a200)',end=46,err=40)qhulp
+ qstrana1(1:200)=qhulp
+ iline=iline+1
+ irecog=0
+
+ if (qhulp(1:6).eq.'DESCRP') then
+ read (qhulp,'(7x,a40)',end=46,err=46)qmol
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'REMARK') then
+ if (iremark.lt.20) iremark=iremark+1
+ read (qhulp,'(7x,a40)',end=46,err=46)qremark(iremark)
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'FORMAT') then
+ if (iformat.lt.20) iformat=iformat+1
+ read(qhulp,'(7x,a40)',end=46,err=46)qformat(iformat)
+ irecog=1
+ end if
+
+ if (qhulp(1:7).eq.'VCHANGE') then
+ read (qhulp(8:60),*)vvol
+ vred=(1.0+(vvol-1.0))**(0.33333333)
+ iexco=1
+ na=naold
+ qmol=qmol
+ do i1=1,3
+ axiss(i1)=vred*axis(i1)
+ angles(i1)=angle(i1)
+ do i2=1,na
+ cglobal(i2,i1)=vred*cglobal(i2,i1)
+ end do
+ end do
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ ibity=2
+ irecog=1
+ end if
+
+ if (qhulp(1:7).eq.'VCHANGX') then
+ read (qhulp(8:60),*)vvol
+ vred=vvol
+ iexco=1
+ na=naold
+ qmol=qmol
+ do i1=1,3
+ axiss(i1)=axis(i1)
+ angles(i1)=angle(i1)
+ do i2=1,na
+ cglobal(i2,i1)=cglobal(i2,i1)
+ end do
+ end do
+
+ axiss(1)=vred*axiss(1)
+ do i2=1,na
+ cglobal(i2,1)=vred*cglobal(i2,1)
+ end do
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ ibity=2
+ irecog=1
+ end if
+
+ if (qhulp(1:7).eq.'VCHANGY') then
+ read (qhulp(8:60),*)vvol
+ vred=vvol
+ iexco=1
+ na=naold
+ qmol=qmol
+ do i1=1,3
+ axiss(i1)=axis(i1)
+ angles(i1)=angle(i1)
+ do i2=1,na
+ cglobal(i2,i1)=cglobal(i2,i1)
+ end do
+ end do
+
+ axiss(2)=vred*axiss(2)
+ do i2=1,na
+ cglobal(i2,2)=vred*cglobal(i2,2)
+ end do
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ ibity=2
+ irecog=1
+ end if
+
+ if (qhulp(1:7).eq.'VCHANGZ') then
+ read (qhulp(8:60),*)vvol
+ vred=vvol
+ iexco=1
+ na=naold
+ qmol=qmol
+
+ do i1=1,3
+ axiss(i1)=axis(i1)
+ angles(i1)=angle(i1)
+ do i2=1,na
+ cglobal(i2,i1)=cglobal(i2,i1)
+ end do
+ end do
+
+ axiss(3)=vred*axiss(3)
+ do i2=1,na
+ cglobal(i2,3)=vred*cglobal(i2,3)
+ end do
+
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ ibity=2
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'CRYSTX') then
+ read (qhulp,'(8x,6f11.5)',end=46,err=46)axiss(1),
+ $axiss(2),axiss(3),angles(1),angles(2),angles(3)
+ kx=0
+ ky=0
+ kz=0
+ halfa=angles(1)*dgrrdn
+ hbeta=angles(2)*dgrrdn
+ hgamma=angles(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axiss(1)*sinbet*sinphi
+ tm21=axiss(1)*sinbet*cosphi
+ tm31=axiss(1)*cosbet
+ tm22=axiss(2)*sinalf
+ tm32=axiss(2)*cosalf
+ tm33=axiss(3)
+ kx=int(2.0*swb/tm11)
+ ky=int(2.0*swb/tm22)
+ kz=int(2.0*swb/tm33)
+ qr='F'
+ if (nmmax.eq.1.and.nmmaxold.gt.1) qr='5'
+ if (icell.eq.0.and.icellold.gt.0) qr='Y'
+ ibity=2
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'PERIOD') then
+ read (qhulp,'(7x,i3)',end=46,err=46)iperiod
+ irecog=1
+ end if
+
+ if (qhulp(1:4).eq.'AXES') then
+ read (qhulp,'(7x,a3)',end=46,err=46)qbgfaxes
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'SGNAME') then
+ read (qhulp,'(7x,a3)',end=46,err=46)qbgfsgn
+ irecog=1
+ end if
+
+* if (qhulp(1:5).eq.'CELLS') then
+* read (qhulp,'(7x,*)',end=40,err=40)kx,ky,kz
+* irecog=1
+* end if
+
+ if (qhulp(1:6).eq.'HETATM') then
+ if (ibgfversion.lt.400) then
+ read (qhulp,
+ $'(7x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5)'
+ $,end=40,err=40)
+ $ir,qlabel(na+1),qresi1(na+1),qresi2(na+1),qresi3(na+1),
+ $cglobal(na+1,1),cglobal(na+1,2),
+ $cglobal(na+1,3),qffty(na+1),ibgr1(na+1),ibgr2(na+1),
+ $chgglobal(na+1)
+ else
+ stop 'Unsupported Biograf-version'
+ end if
+ qlabhulp=qlabel(na+1)
+ if (qlabhulp(1:1).eq.' ') qlabhulp=qlabhulp(2:5)
+ if (qlabhulp(1:1).eq.' ') qlabhulp=qlabhulp(2:4)
+ if (qlabhulp(1:1).eq.' ') qlabhulp=qlabhulp(2:3)
+ if (qlabhulp(1:1).eq.'C ') qa(na+1)='C '
+ if (qlabhulp(1:2).eq.'Ca') qa(na+1)='Ca'
+ if (qlabhulp(1:2).eq.'Cl') qa(na+1)='Cl'
+ if (qlabhulp(1:2).eq.'Cu') qa(na+1)='Cu'
+ if (qlabhulp(1:2).eq.'Co') qa(na+1)='Co'
+ if (qlabhulp(1:1).eq.'H ') qa(na+1)='H '
+ if (qlabhulp(1:2).eq.'He') qa(na+1)='He'
+ if (qlabhulp(1:1).eq.'N ') qa(na+1)='N '
+ if (qlabhulp(1:2).eq.'Ni') qa(na+1)='Ni'
+ if (qlabhulp(1:1).eq.'O ') qa(na+1)='O '
+ if (qlabhulp(1:1).eq.'B ') qa(na+1)='B '
+ if (qlabhulp(1:1).eq.'F ') qa(na+1)='F '
+ if (qlabhulp(1:2).eq.'Fe') qa(na+1)='Fe'
+ if (qlabhulp(1:1).eq.'P ') qa(na+1)='P '
+ if (qlabhulp(1:1).eq.'S ') qa(na+1)='S '
+ if (qlabhulp(1:1).eq.'Y ') qa(na+1)='Y '
+ if (qlabhulp(1:2).eq.'Al ') qa(na+1)='Al'
+ if (qlabhulp(1:2).eq.'Au ') qa(na+1)='Au'
+ if (qlabhulp(1:2).eq.'Si') qa(na+1)='Si'
+ if (qlabhulp(1:2).eq.'Pt') qa(na+1)='Pt'
+ if (qlabhulp(1:2).eq.'Mo') qa(na+1)='Mo'
+ if (qlabhulp(1:2).eq.'Mg') qa(na+1)='Mg'
+ if (qlabhulp(1:2).eq.'Ar') qa(na+1)='Ar'
+ if (qlabhulp(1:2).eq.'Zr') qa(na+1)='Zr'
+ if (qlabhulp(1:2).eq.'Ti') qa(na+1)='Ti'
+ if (qlabhulp(1:2).eq.'Ru') qa(na+1)='Ru'
+ if (qlabhulp(1:2).eq.'Ba') qa(na+1)='Ba'
+ if (qlabhulp(1:2).eq.'Bi') qa(na+1)='Bi'
+ if (qlabhulp(1:2).eq.'Li') qa(na+1)='Li'
+ if (qlabhulp(1:2).eq.'V ') qa(na+1)='V '
+ if (qlabhulp(1:2).eq.'X ') qa(na+1)='X '
+ na=na+1
+ if (na.gt.nattot) then
+ write (*,*)'Number of atoms:read ',na
+ write (*,*)'Maximum number of atoms: ',nattot
+ stop
+ $'Maximum number of atoms exceeded; increase nattot in cbka.blk'
+ end if
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'RUTYPE') then !run-type identifiers
+ irecrun=0
+ read (qhulp,'(7x,a40)',end=46,err=46)qruid
+
+ if (qruid(1:10).eq.'NORMAL RUN') then
+ iruid=0
+ irecrun=1
+ end if
+
+ if (qruid(1:14).eq.'HIGH PRECISION') then
+ endpo=endpo/25
+ nmmax=nmmax*5
+ qr='D'
+ iruid=1
+ irecrun=1
+ end if
+
+ if (qruid(1:13).eq.'LOW PRECISION') then
+ nmmax=nmmax/10
+ qr='H'
+ iruid=1
+ irecrun=1
+ end if
+
+ if (qruid(1:12).eq.'SINGLE POINT') then
+ iruid=1
+ nmmax=1
+ qr='1'
+ if (ibity.eq.2) qr='5'
+ irecrun=1
+ end if
+
+ if (qruid(1:11).eq.'NO CELL OPT') then
+ iruid=1
+ icell=0
+ if (ibity.eq.2) qr='Y'
+ irecrun=1
+ end if
+
+ if (qruid(1:8).eq.'CELL OPT') then
+ iruid=1
+ icell=1
+ iexco=0 !Override from VCHANGE
+ read (qruid,'(8x,i6)',end=46,err=46)ncellopt
+ if (ncellopt.eq.2) icell=2 !cell optimisation during energy minimisation
+ if (ncellopt.eq.3) icelo2=4 !c/a optimisation
+ if (ncellopt.eq.4) icelo2=1 !only a optimisation
+ if (ncellopt.eq.5) icelo2=2 !only b optimisation
+ if (ncellopt.eq.6) icelo2=3 !only c optimisation
+ if (ncellopt.eq.7) then
+ icelo2=4 !c/a optimisation
+ icell=2 !cell optimisation during energy minimisation
+ end if
+ if (ibity.eq.2) qr='F'
+ irecrun=1
+ end if
+
+ if (qruid(1:6).eq.'MAXMOV') then
+ iruid=1
+ read (qruid,'(6x,i6)',end=46,err=46)nfc
+ irecrun=1
+ end if
+
+ if (qruid(1:4).eq.'REDO') then
+ iruid=1
+ read (qruid,'(4x,i6)',end=46,err=46)iredo
+ irecrun=1
+ end if
+
+ if (qruid(1:5).eq.'MAXIT') then
+ iruid=1
+ read (qruid,'(6x,i6)',end=46,err=46)nmmax
+ if (qruid(14:18).eq.'ENDPO') then
+ read (qruid,'(18x,f6.3)',end=46,err=46)endpo
+ end if
+ irecrun=1
+ end if
+ if (qruid(1:5).eq.'ENDPO') then
+ iruid=1
+ read (qruid,'(6x,f6.3)',end=46,err=46)endpo
+ irecrun=1
+ end if
+
+ if (qruid(1:9).eq.'CHARGEMET') then
+ iruid=1
+ read (qruid,'(9x,i6)',end=46,err=46)ncha
+ irecrun=1
+ end if
+
+ if (irecrun.eq.0) then
+ write (*,*)'Warning: ignored RUTYPE identifier ',qruid(1:12)
+ end if
+
+ irecog=1
+ end if
+
+ if (qhulp(1:14).eq.'BOND RESTRAINT') then
+ nrestra=nrestra+1
+ istart=15
+ call stranal(istart,iend,vout,iout,1)
+ irstra(nrestra,1)=iout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ irstra(nrestra,2)=iout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ rrstra(nrestra)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ vkrstr(nrestra)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ vkrst2(nrestra)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ rrcha(nrestra)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ itstart(nrestra)=iout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ itend(nrestra)=iout
+ istart=iend
+* read (qhulp,'(15x,2i4,f8.4,f8.2,f8.5,f10.7)',end=46,err=46)
+* $irstra(nrestra,1),irstra(nrestra,2),rrstra(nrestra),
+* $vkrstr(nrestra),vkrst2(nrestra),rrcha(nrestra)
+ qr='R'
+ irecog=1
+ end if
+
+ if (qhulp(1:15).eq.'ANGLE RESTRAINT') then
+ nrestrav=nrestrav+1
+ read (qhulp,'(16x,3i4,2f8.2,f8.4,f9.6)',end=46,err=46)
+ $irstrav(nrestrav,1),irstrav(nrestrav,2),irstrav(nrestrav,3),
+ $vrstra(nrestrav),vkrv(nrestrav),vkr2v(nrestrav),
+ $rvcha(nrestrav)
+ qr='V'
+ irecog=1
+ end if
+
+ if (qhulp(1:17).eq.'TORSION RESTRAINT') then
+ nrestrat=nrestrat+1
+ read (qhulp,'(18x,4i4,2f8.2,f8.4,f9.6)',end=46,err=46)
+ $irstrat(nrestrat,1),irstrat(nrestrat,2),irstrat(nrestrat,3),
+ $irstrat(nrestrat,4),trstra(nrestrat),vkrt(nrestrat),
+ $vkr2t(nrestrat),rtcha(nrestrat)
+ qr='T'
+ irecog=1
+ end if
+
+ if (qhulp(1:16).eq.'MASCEN RESTRAINT') then
+ nrestram=nrestram+1
+ istart=17
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ irstram(nrestram,1)=0
+ if (qstrana2.eq.'x') irstram(nrestram,1)=1
+ if (qstrana2.eq.'y') irstram(nrestram,1)=2
+ if (qstrana2.eq.'z') irstram(nrestram,1)=3
+ if (qstrana2.eq.'p') irstram(nrestram,1)=4 !fixed center of mass
+ if (irstram(nrestram,1).eq.0)
+ $stop 'Error in mass centre restraint'
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ irstram(nrestram,2)=iout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ irstram(nrestram,3)=iout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ rmstra1(nrestram)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ if (irstram(nrestram,1).le.3) irstram(nrestram,4)=iout
+ if (irstram(nrestram,1).eq.4) rmstra2(nrestram)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ if (irstram(nrestram,1).le.3) irstram(nrestram,5)=iout
+ if (irstram(nrestram,1).eq.4) rmstra3(nrestram)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ if (irstram(nrestram,1).le.3) rmstra2(nrestram)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ if (irstram(nrestram,1).le.3) rmstra3(nrestram)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ if (irstram(nrestram,1).le.3) rmcha(nrestram)=vout
+ irecog=1
+ end if
+
+ if (qhulp(1:9).eq.'MOLCHARGE') then
+ nmcharge=nmcharge+1
+ istart=10
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ iat1mc(nmcharge)=iout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ iat2mc(nmcharge)=iout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ vmcha(nmcharge)=vout
+ irecog=1
+ end if
+
+ if (qhulp(1:8).eq.'FIXATOMS') then
+ istart=9
+ call stranal(istart,iend,vout,iout,1)
+ if1=iout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ if2=iout
+ do i12=if1,if2
+ imove(i12)=0
+ end do
+ irecog=1
+ end if
+
+ if (qhulp(1:11).eq.'UNIT ENERGY') then
+ eenconv=zero
+ read (qhulp,'(14x,a5)',end=46,err=46)quen
+ if (quen.eq.'eV') eenconv=23.0408
+ if (quen.eq.'EV') eenconv=23.0408
+ if (quen.eq.'ev') eenconv=23.0408
+ if (quen.eq.'h') eenconv=627.5
+ if (quen.eq.'H') eenconv=627.5
+ if (quen.eq.'kcal') eenconv=1.0
+ if (quen.eq.'kCal') eenconv=1.0
+ if (quen.eq.'KCAL') eenconv=1.0
+ if (eenconv.eq.zero) then
+ write (*,*)quen,': unknown energy unit; assuming kcal/mol'
+ eenconv=1.0
+ end if
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'ENERGY') then
+ read (qhulp(7:80),*,end=46,err=46)enmol
+ ienread=1
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'GEOUPD') then
+ icgeopt(nprob)=0
+ icgeo=0
+ irecog=1
+ end if
+
+ if (qhulp(1:9).eq.'NO GEOUPD') then
+ icgeopt(nprob)=1
+ icgeo=1
+ irecog=1
+ end if
+
+ if (qhulp(1:9).eq.'FREQUENCY') then
+ ifreqset(nprob)=1
+ ifreq=1
+ irecog=1
+ end if
+
+* if (qhulp(1:5).eq.'FORCE') then
+* read (qhulp(6:80),*,end=46,err=46)formol
+* ienread=1
+* irecog=1
+* end if
+
+ if (qhulp(1:6).eq.'FFIELD') goto 30
+ if (qhulp(1:6).eq.'CONECT') goto 30
+ if (qhulp(1:5).eq.'ORDER') goto 30
+ if (qhulp(1:1).eq.'#') goto 30
+ if (qhulp(1:3).eq.'END') goto 45
+
+ if (irecog.eq.0) then
+ write (*,*)'Warning: ignored line starting with: ',qhulp(1:10)
+ end if
+
+ goto 30
+
+ 40 write (*,*)'Error on line ',iline+1,' of Biograf-input'
+ stop
+ 45 read (3,*,err=46,end=46)
+ 46 continue
+ if (ienread.eq.1) then
+ if (eenconv.eq.zero) then
+ write (*,*)'No energy unit given; assuming kcal/mol'
+ eenconv=1.0
+ end if
+ enmol=enmol*eenconv !Convert energies to kcal/mol
+ end if
+
+ namov=0 !calculate number of moving atoms
+ do i1=1,na
+ if (imove(i1).eq.1) namov=namov+1
+ end do
+
+ if (imodfile.eq.1) close (3)
+ return
+ 900 iendf=1
+ return
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readpdb (iendf)
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkqa.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+#include "cbksrtbon1.blk"
+ character*200 qhulp
+**********************************************************************
+* *
+* Read in .pdb-geometry *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readpdb'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ iendf=1
+ qmol='pdb_in'
+ 5 read (3,'(a200)',end=10,err=900) qhulp
+ qstrana1(1:200)=qhulp
+ istart=1
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+
+ if (qstrana2(1:6).eq.'HEADER') then
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ qmol=qstrana2(1:20)
+ end if
+
+ if (qstrana2(1:6).eq.'HETATM'.or.qstrana2(1:4).eq.'ATOM') then
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ qa(na+1)=qstrana2(1:2)
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ c(na+1,1)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ c(na+1,2)=vout
+ call stranal(istart,iend,vout,iout,1)
+ istart=iend
+ c(na+1,3)=vout
+ na=na+1
+ end if
+
+ if (qstrana2(1:3).eq.'END'.or.qstrana2(2:4).eq.'END') then
+ iendf=0
+ goto 10
+ end if
+
+ goto 5
+ 10 continue
+ return
+ 900 write (*,*)'Error reading in .pdb-format'
+ stop 'Error reading in .pdb-format'
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readtreg
+
+************************************************************************
+#include "cbka.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "small.blk"
+ dimension isumattreg(mtreg)
+ character*200 qrom
+**********************************************************************
+* *
+* Read in temperature regime *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readtreg'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ ntrc=0
+ open (19,file='tregime.in',status='old',err=60)
+ 10 read (19,'(a200)',end=50,err=900)qrom
+ qstrana1(1:200)=qrom
+ if (qrom(1:1).eq.'#') goto 10
+ istart=1
+ ntrc=ntrc+1
+ if (ntrc.gt.mtreg) then
+ write (*,*)'Too many temperature regimes in tregime.in;',
+ $' inrease mtreg in cbka.blk'
+ stop 'Too many temperature regimes in tregime.in'
+ end if
+ call stranal(istart,iend,vout,iout,1)
+ nittc(ntrc)=iout
+ istart=iend
+
+ if (ntrc.gt.1) then
+ if (nittc(ntrc).lt.nittc(ntrc-1)) then
+ ntrc=ntrc-1
+ write (*,*)'Warning: wrong order or empty line in tregime.in'
+ write (*,*)'Ignored lines below iteration:',nittc(ntrc)
+ goto 50
+ end if
+ end if
+
+ call stranal(istart,iend,vout,iout,1)
+ nntreg(ntrc)=iout
+ if (nntreg(ntrc).gt.mtzone) then
+ write (*,*)'Too many temperature zones in tregime.in;',
+ $' inrease mtzone in cbka.blk'
+ stop 'Too many temperature zones in tregime.in'
+ end if
+ istart=iend
+ isumattreg(ntrc)=0
+ do i1=1,nntreg(ntrc)
+ call stranal(istart,iend,vout,iout,1)
+ ia1treg(ntrc,i1)=iout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ ia2treg(ntrc,i1)=iout
+ istart=iend
+ isumattreg(ntrc)=isumattreg(ntrc)+1+ia2treg(ntrc,i1)-
+ $ia1treg(ntrc,i1)
+ call stranal(istart,iend,vout,iout,1)
+ tsettreg(ntrc,i1)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ tdamptreg(ntrc,i1)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ dttreg(ntrc,i1)=vout
+ istart=iend
+ end do
+ goto 10
+ 50 continue
+ close (19)
+ 60 continue
+**********************************************************************
+* *
+* Check consistency temperature programs in tregime.in *
+* *
+**********************************************************************
+ if (ntrc.gt.0) then
+ do i1=1,ntrc
+ if (isumattreg(i1).ne.na) then
+ write (*,*)'Inconsistency in temperature regime nr.',i1
+ write (*,*)'Number of atoms defined in tregime.in:',
+ $isumattreg(i1)
+ write (*,*)'Number of atoms in system:',na
+ stop 'Inconsistency in tregime.in'
+ end if
+ end do
+ end if
+
+ return
+ 900 stop 'Error reading tregime.in'
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readvreg
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkvregime.blk"
+#include "control.blk"
+ character*200 qrom
+**********************************************************************
+* *
+* Read in volume regime *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readvreg'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ nvrc=0
+ open (19,file='vregime.in',status='old',err=60)
+ 10 read (19,'(a200)',end=50,err=900)qrom
+ qstrana1(1:200)=qrom
+ if (qrom(1:1).eq.'#') goto 10
+ istart=1
+ nvrc=nvrc+1
+ if (nvrc.gt.mvreg) then
+ write (*,*)'Too many volume regimes in vregime.in;',
+ $' inrease mvreg in cbka.blk'
+ stop 'Too many volume regimes in vregime.in'
+ end if
+
+ call stranal(istart,iend,vout,iout,1)
+ nitvc(nvrc)=iout
+ istart=iend
+
+ if (nvrc.gt.1) then
+ if (nitvc(nvrc).lt.nitvc(nvrc-1)) then
+ nvrc=nvrc-1
+ write (*,*)'Warning: wrong order or empty line in vregime.in'
+ write (*,*)'Ignored lines below iteration:',nitvc(nvrc)
+ goto 50
+ end if
+ end if
+
+ call stranal(istart,iend,vout,iout,1)
+ nnvreg(nvrc)=iout
+ if (nnvreg(nvrc).gt.mvzone) then
+ write (*,*)'Too many volume regimes in vregime.in;',
+ $' inrease mvzone in cbka.blk'
+ stop 'Too many volume zones in vregime.in'
+ end if
+ istart=iend
+ do i1=1,nnvreg(nvrc)
+ call stranal(istart,iend,vout,iout,1)
+ if (qstrana2(1:1).ne.'a'.and.qstrana2(1:1).ne.'b'.and.
+ $qstrana2(1:1).ne.'c'.and.qstrana2(1:4).ne.'alfa'.and.
+ $qstrana2(1:4).ne.'beta'.and.qstrana2(1:5).ne.'gamma') then
+ write (*,*)qstrana2
+ write (*,*)'Invalid cell parameter type in vregime.in ;',
+ $' use a,b,c,alfa,beta or gamma'
+ stop 'Invalid cell parameter type in vregime.in'
+ end if
+ qvtype(nvrc,i1)=qstrana2
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ dvvreg(nvrc,i1)=vout
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ ivsca(nvrc,i1)=1
+ if (qstrana2(1:1).eq.'n') ivsca(nvrc,i1)=0
+ istart=iend
+ end do
+ goto 10
+ 50 continue
+ close (19)
+ 60 continue
+ return
+ 900 stop 'Error reading vregime.in'
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readereg
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkeregime.blk"
+#include "control.blk"
+ character*200 qrom
+**********************************************************************
+* *
+* Read in electric field regime *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readereg'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ nerc=0
+ open (19,file='eregime.in',status='old',err=60)
+ 10 read (19,'(a200)',end=50,err=900)qrom
+ qstrana1(1:200)=qrom
+ if (qrom(1:1).eq.'#') goto 10
+ istart=1
+ nerc=nerc+1
+ if (nerc.gt.mereg) then
+ write (*,*)'Too many electric field regimes in eregime.in;',
+ $' inrease mereg in cbka.blk'
+ stop 'Too many electric field regimes in eregime.in'
+ end if
+ call stranal(istart,iend,vout,iout,1)
+ nitec(nerc)=iout
+
+ if (nerc.gt.1) then
+ if (nitec(nerc).lt.nitec(nerc-1)) then
+ nerc=nerc-1
+ write (*,*)'Warning: wrong order or empty line in eregime.in'
+ write (*,*)'Ignored lines below iteration:',nitec(nerc)
+ goto 50
+ end if
+ end if
+
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ nnereg(nerc)=iout
+ if (nnereg(nerc).gt.mezone) then
+ write (*,*)'Too many electric field zones in eregime.in;',
+ $' inrease mezone in cbka.blk'
+ stop 'Too many electric field zones in vregime.in'
+ end if
+ istart=iend
+ do i1=1,nnereg(nerc)
+ call stranal(istart,iend,vout,iout,1)
+ if (qstrana2(1:1).ne.'x'.and.qstrana2(1:1).ne.'y'.and.
+ $qstrana2(1:1).ne.'z') then
+ write (*,*)qstrana2
+ write (*,*)'Invalid field direction in eregime.in ;',
+ $' use x,y or z'
+ stop 'Invalid field direction in eregime.in'
+ end if
+ qetype(nerc,i1)=qstrana2
+ istart=iend
+ call stranal(istart,iend,vout,iout,1)
+ ereg(nerc,i1)=vout
+ istart=iend
+ end do
+ goto 10
+ 50 continue
+ close (19)
+ 60 continue
+ return
+ 900 stop 'Error reading vregime.in'
+ end
+************************************************************************
+************************************************************************
+
+ subroutine readaddmol
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkatomcoord.blk"
+#include "cbkc.blk"
+#include "cbkff.blk"
+#include "cbkh.blk"
+#include "control.blk"
+ character*80 qromb
+ character*200 qhulp
+ character*5 qlabhulp
+**********************************************************************
+* *
+* Read in molecule coordinates. This molecule will be added to *
+* the system at regular intervals *
+* Accepts only .bgf-format *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readaddmol'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+**********************************************************************
+* *
+* Set default values *
+* *
+**********************************************************************
+ iaddfreq=-1 !frequency of molecule addition; <0: no addition
+ xadd=-9000.0 !x-coordinate for added molecule; <-5000.0: random
+ yadd=-9000.0 !y-coordinate for added molecule; <-5000.0: random
+ zadd=-9000.0 !z-coordinate for added molecule; <-5000.0: random
+ iveladd=1 !1: random initial velocities; 2: read in velocities
+ !from addmol.vel
+ addist=-1.00 !Minimum distance between added molecule and rest
+ !of system. < 0.0: do not check
+ nadattempt=10 !Number of attempts at adding the molecule
+ taddmol=-1.0 !Temperature added molecule. <0.0: system temperature
+ open (19,file='addmol.bgf',status='old',err=60)
+ read (19,'(a40)',end=900,err=900)qromb
+ if (qromb(1:6).ne.'BIOGRF') then
+ write (*,*)'addmol.bgf should start with BIOGRF'
+ stop 'addmol.bgf should start with BIOGRF'
+ end if
+ naa=0
+ iline=0
+ 30 read (19,'(a200)',end=900,err=900)qhulp
+ irecog=0
+ iline=iline+1
+
+ if (qhulp(1:6).eq.'DESCRP') then
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'FORMAT') then
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'REMARK') then
+ irecog=1
+ end if
+
+ if (qhulp(1:6).eq.'HETATM') then
+ irecog=1
+ read (qhulp,'(7x,i5,1x,a5,1x,3x,1x,1x,1x,5x,3f10.5)'
+ $,end=900,err=900)
+ $ir,qlabhulp,cadd(naa+1,1),cadd(naa+1,2),cadd(naa+1,3)
+ if (qlabhulp(1:1).eq.' ') qlabhulp=qlabhulp(2:5)
+ if (qlabhulp(1:1).eq.' ') qlabhulp=qlabhulp(2:4)
+ if (qlabhulp(1:1).eq.' ') qlabhulp=qlabhulp(2:3)
+ if (qlabhulp(1:1).eq.'C ') qadd(naa+1)='C '
+ if (qlabhulp(1:2).eq.'Ca') qadd(naa+1)='Ca'
+ if (qlabhulp(1:2).eq.'Cl') qadd(naa+1)='Cl'
+ if (qlabhulp(1:2).eq.'Cu') qadd(naa+1)='Cu'
+ if (qlabhulp(1:2).eq.'Co') qadd(naa+1)='Co'
+ if (qlabhulp(1:1).eq.'H ') qadd(naa+1)='H '
+ if (qlabhulp(1:2).eq.'He') qadd(naa+1)='He'
+ if (qlabhulp(1:1).eq.'N ') qadd(naa+1)='N '
+ if (qlabhulp(1:2).eq.'Ni') qadd(naa+1)='Ni'
+ if (qlabhulp(1:1).eq.'O ') qadd(naa+1)='O '
+ if (qlabhulp(1:1).eq.'B ') qadd(naa+1)='B '
+ if (qlabhulp(1:1).eq.'F ') qadd(naa+1)='F '
+ if (qlabhulp(1:2).eq.'Fe') qadd(naa+1)='Fe'
+ if (qlabhulp(1:1).eq.'P ') qadd(naa+1)='P '
+ if (qlabhulp(1:1).eq.'S ') qadd(naa+1)='S '
+ if (qlabhulp(1:1).eq.'Y ') qadd(naa+1)='Y '
+ if (qlabhulp(1:2).eq.'Al') qadd(naa+1)='Al'
+ if (qlabhulp(1:2).eq.'Au') qadd(naa+1)='Au'
+ if (qlabhulp(1:2).eq.'Si') qadd(naa+1)='Si'
+ if (qlabhulp(1:2).eq.'Pt') qadd(naa+1)='Pt'
+ if (qlabhulp(1:2).eq.'Mo') qadd(naa+1)='Mo'
+ if (qlabhulp(1:2).eq.'Mg') qadd(naa+1)='Mg'
+ if (qlabhulp(1:2).eq.'Ar') qadd(naa+1)='Ar'
+ if (qlabhulp(1:2).eq.'Zr') qadd(naa+1)='Zr'
+ if (qlabhulp(1:2).eq.'Ba') qadd(naa+1)='Ba'
+ if (qlabhulp(1:2).eq.'X ') qadd(naa+1)='X '
+ ityadd(naa+1)=0
+ do i1=1,nso !Find force field type
+ if (qadd(naa+1).eq.qas(i1)) ityadd(naa+1)=i1
+ end do
+ if (ityadd(naa+1).eq.0) then
+ write (*,*) 'Unknown atom type:',qadd(naa+1)
+ stop 'Unknown atom type'
+ end if
+ naa=naa+1
+ end if
+
+ if (qhulp(1:7).eq.'FREQADD') then
+ irecog=1
+ read (qhulp,'(8x,i6)',end=900,err=900) iaddfreq
+ end if
+
+ if (qhulp(1:6).eq.'VELADD') then
+ irecog=1
+ read (qhulp,'(8x,i6)',end=900,err=900) iveladd
+ end if
+
+ if (qhulp(1:6).eq.'STARTX') then
+ irecog=1
+ read (qhulp,'(7x,f8.2)',end=900,err=900) xadd
+ end if
+
+ if (qhulp(1:6).eq.'STARTY') then
+ irecog=1
+ read (qhulp,'(7x,f8.2)',end=900,err=900) yadd
+ end if
+
+ if (qhulp(1:6).eq.'STARTZ') then
+ irecog=1
+ read (qhulp,'(7x,f8.2)',end=900,err=900) zadd
+ end if
+
+ if (qhulp(1:6).eq.'ADDIST') then
+ irecog=1
+ read (qhulp,'(7x,f8.2)',end=900,err=900) addist
+ end if
+
+ if (qhulp(1:8).eq.'NATTEMPT') then
+ irecog=1
+ read (qhulp,'(9x,i6)',end=900,err=900) nadattempt
+ end if
+
+ if (qhulp(1:7).eq.'TADDMOL') then
+ irecog=1
+ read (qhulp,'(8x,f8.2)',end=900,err=900) taddmol
+ end if
+
+ if (qhulp(1:6).eq.'FFIELD') goto 30
+ if (qhulp(1:6).eq.'CONECT') goto 30
+ if (qhulp(1:5).eq.'ORDER') goto 30
+ if (qhulp(1:1).eq.'#') goto 30
+ if (qhulp(1:3).eq.'END') goto 45
+
+ if (irecog.eq.0) then
+ write (*,*)'Warning: ignored line starting with: ',qhulp(1:10)
+ end if
+
+ goto 30
+
+ 45 continue
+ close (19)
+ if (iveladd.eq.2) then
+ open (19,file='addmol.vel',status='old',err=800)
+ read (19,*)
+ read (19,'(3d24.15)',err=850,end=850)
+ $((veladd(j,i),j=1,3),i=1,naa)
+ close (19)
+ end if
+************************************************************************
+* *
+* Place molecule at origin *
+* *
+************************************************************************
+ ccx=0.0
+ ccy=0.0
+ ccz=0.0
+ do i1=1,naa
+ ccx=ccx+cadd(i1,1)/float(naa)
+ ccy=ccy+cadd(i1,2)/float(naa)
+ ccz=ccz+cadd(i1,3)/float(naa)
+ end do
+ do i1=1,naa
+ cadd(i1,1)=cadd(i1,1)-ccx
+ cadd(i1,2)=cadd(i1,2)-ccy
+ cadd(i1,3)=cadd(i1,3)-ccz
+ end do
+
+ 60 continue
+ return
+ 800 stop 'Error opening addmol.vel'
+ 850 stop 'Error or end of file reading addmol.vel'
+ 900 write (*,*)'Error or end-of-file reading addmol.bgf on line:',
+ $iline
+ return
+ end
+************************************************************************
+**********************************************************************
+
+ subroutine writegeo(nunit1)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkqa.blk"
+#include "cbkrestr.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+#include "cbksrtbon1.blk"
+#include "cbkinit.blk"
+**********************************************************************
+* *
+* Copy new geometries to unit nunit1 *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In writegeo'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ if (axiss(1).lt.zero) then
+ if (nrestra.eq.0.and.nrestrat.eq.0.and.
+ $nrestrav.eq.0)
+ $write (nunit1,300)qr,qmol
+ if (nrestra.gt.0) write (nunit1,301)qr,
+ $rrstra(1),qmol
+ if (nrestrav.gt.0) write (nunit1,301)qr,
+ $vrstra(1),qmol
+ if (nrestrat.gt.0) write (nunit1,301)qr,
+ $trstra(1),qmol
+ else
+ write (nunit1,310)qr,qmol
+ write (nunit1,320)axiss(1),axiss(2),axiss(3)
+ write (nunit1,320)angles(1),angles(2),angles(3)
+ end if
+ do i1=1,na
+ if (nbiolab.ne.1) write (nunit1,400)i1,qa(i1),(c(i1,i2),i2=1,3)
+ if (nbiolab.eq.1) write (nunit1,401)i1,qa(i1),(c(i1,i2),i2=1,3) !Delphi-format
+ end do
+ if (nbiolab.ne.1) write (nunit1,*)
+
+ return
+
+ 300 format (2x,a1,1x,a60)
+ 301 format (2x,a1,1x,f6.2,a60)
+ 310 format (2x,a1,1x,a60)
+ 320 format (3f10.4)
+ 400 format (i4,1x,a2,3x,3(d21.14,1x),1x,a5,1x,i5)
+ 401 format (i3,2x,a2,3x,3(d21.14,1x),1x,a5,1x,i5)
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine writebgf(nunit1)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkcha.blk"
+#include "cbkcharmol.blk"
+#include "cbkconst.blk"
+#include "cbkenergies.blk"
+#include "cbkia.blk"
+#include "cbkimove.blk"
+#include "cbkinit.blk"
+#include "cbkqa.blk"
+#include "cbkrestr.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "cbksrtbon1.blk"
+#include "small.blk"
+
+ dimension qdir(3)
+ character*2 qt
+ character*1 qdir
+**********************************************************************
+* *
+* Copy new Biograf-geometries to unit nunit1 *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In newbgf'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ irom=1
+ qdir(1)='x'
+ qdir(2)='y'
+ qdir(3)='z'
+ ibgfversion=200
+ if (ibity.eq.1) write (nunit1,1500)ibgfversion
+ if (ibity.eq.2) write (nunit1,1600)ibgfversion
+* if (qr.ne.'F'.and.qr.ne.'5'.and.qr.ne.'Y')
+* $write (nunit1,1500)ibgfversion
+* if (qr.eq.'F'.or.qr.eq.'5'.or.qr.eq.'Y')
+* $write (nunit1,1600)ibgfversion
+ write (nunit1,1700)qmol
+* write (nunit1,1700)qkeyw(nprob)
+ do i1=1,iremark
+ write (nunit1,1800)qremark(i1)
+ end do
+ qruid='NORMAL RUN'
+ if (iruid.eq.0) then
+ write (nunit1,2000)
+ else
+ if (abs(endpo-endpoold).gt.1e-5) write (nunit1,2010)endpo
+ if (nmmax.ne.nmmaxold) write (nunit1,2020)nmmax
+ if (nfc.ne.nfcold) write (nunit1,2030)nfc
+ if (ncha.ne.nchaold) write (nunit1,2036)ncha
+ if (iredo.gt.1) write (nunit1,2035)iredo
+ if (icell.ne.icellold) then
+ if (icell.eq.0) write (nunit1,2033)
+ if (icell.gt.0) write (nunit1,2034)ncellopt
+ end if
+ end if
+ if (iexco.ne.0.and.nsurp.gt.0) then
+ write (nunit1,2040)vvol
+ write (nunit1,3500)
+ write (nunit1,*)
+ return
+ end if
+ if (nmcharge.gt.0) then
+ do i3=1,nmcharge
+ write (nunit1,2050)iat1mc(i3),iat2mc(i3),vmcha(i3)
+ end do
+ end if
+
+ ims=0
+ do i1=1,na
+ if (ims.eq.0.and.imove(i1).eq.0) then
+ if1=i1
+ ims=1
+ end if
+ if (ims.eq.1.and.imove(i1).eq.1) then
+ write (nunit1,2060)if1,i1-1
+ ims=0
+ end if
+ end do
+ if (ims.eq.1) then
+ write (nunit1,2060)if1,na
+ end if
+
+* if (qr.eq.'F'.or.qr.eq.'5'.or.qr.eq.'Y')
+ if (ibity.eq.2)
+ $write (nunit1,2100)axiss(1),axiss(2),axiss(3),angles(1),
+ $angles(2),angles(3)
+
+ if (nrestra.gt.0) write (nunit1,2300)
+ do i2=1,nrestra
+ write (nunit1,2400)
+ $irstra(i2,1),irstra(i2,2),rrstra(i2),
+ $vkrstr(i2),vkrst2(i2),rrcha(i2),itstart(i2),itend(i2)
+ end do
+
+ if (nrestrav.gt.0) write (nunit1,2500)
+ do i2=1,nrestrav
+ write (nunit1,2600)
+ $irstrav(i2,1),irstrav(i2,2),irstrav(i2,3),
+ $vrstra(i2),vkrv(i2),vkr2v(i2),zero
+ end do
+
+ if (nrestrat.gt.0) write (nunit1,2700)
+ do i2=1,nrestrat
+ write (nunit1,2800)
+ $irstrat(i2,1),irstrat(i2,2),irstrat(i2,3),
+ $irstrat(i2,4),trstra(i2),vkrt(i2),
+ $vkr2t(i2),zero
+ end do
+
+ if (nrestram.gt.0) write (nunit1,2810)
+ do i2=1,nrestram
+ write (nunit1,2820)
+ $qdir(irstram(i2,1)),irstram(i2,2),irstram(i2,3),
+ $rmstra1(i2),irstram(i2,4),irstram(i2,5),rmstra2(i2),
+ $rmstra3(i2),rmcha(i2)
+ end do
+
+ if (icgeo.eq.0.and.ingeo.eq.0) write (nunit1,2830)
+ if (icgeo.eq.1.and.ingeo.eq.1) write (nunit1,2840)
+ if (ifreq.eq.1) write (nunit1,2850)
+ write (nunit1,2900)
+ do i2=1,na
+ write (nunit1,3000)i2,qa(i2),c(i2,1),c(i2,2),c(i2,3),
+ $qa(i2),irom,irom,chgbgf(i2)
+ end do
+ write (nunit1,3100)
+ if (nsurp.lt.2) then
+ do i1=1,na
+ write (nunit1,3200)i1,(iag(i1,2+i2),i2=1,iag(i1,2))
+ end do
+ write (nunit1,3300)
+ write (nunit1,3400)estrc
+ end if
+
+ write (nunit1,3500)
+ write (nunit1,*)
+
+ return
+ 1500 format ('BIOGRF',i4)
+ 1600 format ('XTLGRF',i4)
+ 1700 format ('DESCRP ',a60)
+ 1800 format ('REMARK ',a60)
+ 1900 format ('FFIELD ',a40)
+ 2000 format ('RUTYPE NORMAL RUN')
+ 2010 format ('RUTYPE ENDPO',f6.3)
+ 2020 format ('RUTYPE MAXIT',i6)
+ 2030 format ('RUTYPE MAXMOV',i6)
+ 2033 format ('RUTYPE NO CELL OPT')
+ 2034 format ('RUTYPE CELL OPT',i6)
+ 2035 format ('RUTYPE REDO',i6)
+ 2036 format ('RUTYPE CHARGEMET',i6)
+ 2040 format ('VCHANGE',f8.4)
+ 2050 format ('MOLCHARGE',2i4,f6.2)
+ 2060 format ('FIXATOMS',2i6)
+ 2100 format ('CRYSTX ',6f11.5)
+ 2200 format ('CELLS ',6i5)
+ 2300 format ('# At1 At2 R12 Force1 Force2 ',
+ $'dR12/dIter(MD) Start (MD) End (MD)')
+ 2400 format ('BOND RESTRAINT ',2i4,f8.4,f8.2,f8.4,1x,f10.7,2i8)
+ 2500 format ('# At1 At2 At3 Angle Force1 Force2',
+ $' dAngle/dIteration (MD only)')
+ 2600 format ('ANGLE RESTRAINT ',3i4,2f8.2,f8.4,f9.6)
+ 2700 format ('# At1 At2 At3 At3 Angle Force1 ',
+ $'Force2 dAngle/dIteration (MD only)')
+ 2800 format ('TORSION RESTRAINT ',4i4,2f8.2,f8.4,f9.6)
+ 2810 format ('# x/y/z At1 At2 R At3 At4 Force1',
+ $' Force2 dR/dIteration (MD only)')
+ 2820 format ('MASCEN RESTRAINT ',a1,1x,2i4,f8.2,2i4,2f8.2,f9.6)
+ 2830 format ('GEOUPD')
+ 2840 format ('NO GEOUPD')
+ 2850 format ('FREQUENCY')
+ 2900 format ('FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,',
+ $'3f10.5,1x,a5,i3,i2,1x,f8.5)')
+ 3000 format ('HETATM',1x,i5,1x,a2,3x,1x,3x,1x,1x,1x,5x,3f10.5,1x,
+ $a5,i3,i2,1x,f8.5)
+ 3100 format ('FORMAT CONECT (a6,12i6)')
+ 3200 format ('CONECT',12i6)
+ 3300 format ('UNIT ENERGY kcal')
+ 3400 format ('ENERGY',5x,f14.6)
+ 3500 format ('END')
+
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine writeen(tottime,sum1,sdev,sdeva,sum12,sumt,sump,
+ $sumtt,tmax,eaver,eav2,eav3,etot2,ediff)
+**********************************************************************
+#include "cbka.blk"
+#include "cbkcha.blk"
+#include "cbkenergies.blk"
+#include "cbkrestr.blk"
+#include "cbktorang.blk"
+#include "cbktorsion.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "small.blk"
+
+ dimension disres(mrestra)
+**********************************************************************
+* *
+* Write out MD statistics to units 71,73 and 76 *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In writeen'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ if (nrep1.gt.1)
+ $sdev=sqrt((sum12-sum1*sum1/float(nrep1))/float(nrep1-1))
+ eavn=eaver/float(mdstep)
+ if (mdstep.gt.1)
+ $sdeva=sqrt((eav3-eav2*eav2/float(mdstep))/float(mdstep-1))
+C open (71,file='fort.71',status='unknown',access='append')
+C open (73,file='fort.73',status='unknown',access='append')
+ write (71,'(i8,2i4,1x,19(f10.2,1x))')mdstep+nprevrun,nmolo,
+ $nmolo5,estrc,ekin,estrc+ekin,tempmd,sum1/float(nrep1),eavn,
+ $sumt/float(nrep1),tmax,sump/float(nrep1),sdev,sdeva,tset,
+ $tstep*1d+15,rmsg,tottime
+ write (73,'(i8,1x,14(f10.2,1x))')mdstep+nprevrun,eb,ea,elp,
+ $emol,ev,ecoa,ehb,et,eco,ew,ep,ech,efi
+ close (71)
+ close (73)
+
+ if ((sumt/float(nrep1)).gt.tset) then
+ if (invt.eq.0) write (*,*)'Switched to NVT in iteration',mdstep
+ invt=1
+ end if
+
+C if (nrestra.gt.0.or.nrestrat.gt.0)
+C $open (76,file='fort.76',status='unknown',access='append')
+
+ if (nrestra.gt.0) then
+ do i2=1,nrestra
+ call dista2(irstra(i2,1),irstra(i2,2),disres(i2),dx,dy,dz)
+ end do
+C open (76,file='fort.76',status='unknown',access='append')
+ write (76,'(i8,1x,40f12.4)')mdstep,eres,estrc,
+ $(rrstra(i2),disres(i2),i2=1,nrestra)
+ end if
+
+ if (nrestrat.gt.0) then
+C open (76,file='fort.76',status='unknown',access='append')
+ do i2=1,nrestrat
+ do i3=1,ntor
+ ih1=irstrat(i2,1)
+ ih2=irstrat(i2,2)
+ ih3=irstrat(i2,3)
+ ih4=irstrat(i2,4)
+ if (ih1.eq.it(i3,2).and.ih2.eq.it(i3,3).and.ih3.eq.it(i3,4)
+ $.and.ih4.eq.it(i3,5)) ittr=i3
+ end do
+ write (76,'(i8,1x,40f12.4)')mdstep,eres,
+ $trstra(i2),thg(ittr)
+ end do
+ end if
+
+ if (nrestra.gt.0.or.nrestrat.gt.0) close(76)
+
+ if (nrestram.gt.0) then
+C open (76,file='fort.76',status='unknown',access='append')
+ do i2=1,nrestram
+ write (76,'(2i8,1x,20f12.4)')mdstep,i2,eres,rmstra1(i2),
+ $dismacen(i2)
+ end do
+ close (76)
+ end if
+
+ return
+ end
+**********************************************************************
+************************************************************************
+
+ subroutine molanal
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkbo.blk"
+#include "cbkconst.blk"
+#include "cbkdcell.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkrbo.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+#include "cbksrtbon1.blk"
+ dimension iam(nat,mbond+3),nmolata(nmolmax,nat)
+ dimension molfra(nmolmax,nsort),ndup(nmolmax)
+ character*40 qmolan1
+ character*100 qmolan
+ logical found
+************************************************************************
+* *
+* Analyse and output molecular fragments *
+* *
+************************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In molanal'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ do i1=1,nmolmax
+ do i2=1,nsort
+ molfra(i1,i2)=0
+ end do
+ ndup(i1)=1
+ end do
+
+ do i1=1,na
+ do i2=1,mbond+3
+ iam(i1,i2)=0
+ end do
+ end do
+************************************************************************
+* *
+* Create connection table based on corrected bond orders *
+* *
+************************************************************************
+ do i1=1,nbon
+ if (bo(i1).gt.cutof3) then
+ j1=ib(i1,2)
+ j2=ib(i1,3)
+ iam(j1,2)=iam(j1,2)+1
+ iam(j1,2+iam(j1,2))=j2
+ iam(j2,2)=iam(j2,2)+1
+ iam(j2,2+iam(j2,2))=j1
+ end if
+ end do
+**********************************************************************
+* *
+* Find molecules *
+* *
+**********************************************************************
+ nmolo6=0
+ found=.FALSE.
+ DO 61 k1=1,na
+ IF (iam(K1,3+mbond).EQ.0) found=.TRUE.
+ 61 IF (iam(K1,3+mbond).GT.nmolo6) nmolo6=iam(K1,3+mbond)
+ IF (.NOT.FOUND) GOTO 62
+************************************************************************
+* *
+* Molecule numbers are assigned. No restrictions are made for the *
+* sequence of the numbers in the connection table. *
+* *
+************************************************************************
+ N3=1
+ 64 N2=N3
+ nmolo6=nmolo6+1
+ if (nmolo6.gt.nmolmax) stop 'Too many molecules in system'
+ iam(N2,3+mbond)=nmolo6
+ 67 FOUND=.FALSE.
+ DO 66 N1=N2+1,na
+ IF (iam(N1,3+mbond).NE.0) GOTO 66
+ DO 65 L=1,mbond
+ IF (iam(N1,l+2).EQ.0) GOTO 66
+ IF (iam(iam(N1,l+2),3+mbond).EQ.nmolo6) THEN
+ FOUND=.TRUE.
+ iam(N1,3+mbond)=nmolo6
+ GOTO 66
+ ENDIF
+ 65 CONTINUE
+ 66 CONTINUE
+ IF (FOUND) GOTO 67
+ DO 63 N3=N2+1,NA
+ 63 if (iam(N3,3+mbond).eq.0) goto 64
+************************************************************************
+* *
+* The assigned or input molecule numbers are checked for their *
+* consistency. *
+* *
+************************************************************************
+ 62 FOUND=.FALSE.
+ DO 72 N1=1,NA
+ DO 71 L=1,mbond
+ IF (iam(N1,L+2).EQ.0) GOTO 72
+ IF (iam(iam(N1,L+2),3+mbond).NE.iam(N1,3+mbond)) THEN
+ FOUND=.TRUE.
+ ENDIF
+ 71 CONTINUE
+ 72 CONTINUE
+ IF (FOUND) THEN
+ write (7,'(i4,a40)')na,qmol
+ do i1=1,na
+ write (7,'(40i4)')i1,iam(i1,1),(iam(i1,2+i2),i2=1,nsbmax),
+ $iam(i1,3+mbond)
+ end do
+ STOP' Mol.nrs. not consistent; maybe wrong cell parameters'
+ ENDIF
+
+ do i1=1,nmolo6
+ natmol=0
+ do i2=1,na
+ if (iam(i2,3+mbond).eq.i1) then
+ natmol=natmol+1
+ nmolata(i1,natmol+1)=i2
+ end if
+ end do
+ nmolata(i1,1)=natmol
+ end do
+************************************************************************
+* *
+* Analyze molecules *
+* *
+************************************************************************
+ do i1=1,nmolo6
+ do i2=1,nmolata(i1,1)
+ i3=nmolata(i1,1+i2)
+ ityp=ia(i3,1)
+ molfra(i1,ityp)=molfra(i1,ityp)+1
+ end do
+ end do
+
+ do i1=1,nmolo6
+ isee=0
+ do i2=1,nmolo6
+ isee2=1
+ do i3=1,nso
+ if (molfra(i1,i3).ne.molfra(i2,i3)) isee2=0
+ end do
+ if (isee2.eq.1.and.i1.gt.i2.and.isee.eq.0) then !molecule type already exists
+ ndup(i2)=ndup(i2)+1
+ ndup(i1)=0
+ isee=1
+ end if
+
+ end do
+ end do
+
+C open (45,file='molfra.out',status='unknown',access='append')
+ if (mdstep.eq.0) write (45,100)cutof3
+ write (45,110)
+ ntotmol=0
+ ntotat=0
+ vtotmass=zero
+ do i1=1,nmolo6
+ if (ndup(i1).gt.0) then
+* write (45,110)i1,(molfra(i1,i2),i2=1,nso),ndup(i1)
+ ntotmol=ntotmol+ndup(i1)
+ qmolan=' '
+ qmolan1=' '
+ istart=-4
+ ihulp=0
+ vmass=zero
+ do i2=1,nso
+ vmass=vmass+molfra(i1,i2)*amas(i2)
+ ntotat=ntotat+molfra(i1,i2)*ndup(i1)
+ if (molfra(i1,i2).gt.0) then
+ istart=istart+6
+ iend=istart+5
+ if (molfra(i1,i2).gt.1) then
+ write (qmolan(istart:iend),'(a2,i3)')qas(i2),molfra(i1,i2)
+ else
+ write (qmolan(istart:iend-2),'(a2)')qas(i2)
+ end if
+ end if
+ end do
+ ihulp=1
+ do i2=1,iend
+ if (qmolan(i2:i2).ne.' ') then
+ qmolan1(ihulp:ihulp)=qmolan(i2:i2)
+ ihulp=ihulp+1
+ end if
+ end do
+
+* write (45,120)ndup(i1),qmolan(1:iend),vmass
+ write (45,120)mdstep,ndup(i1),qmolan1,vmass
+ vtotmass=vtotmass+ndup(i1)*vmass
+ end if
+ end do
+ write (45,*)'Total number of molecules:',ntotmol
+ write (45,*)'Total number of atoms:',ntotat
+ write (45,*)'Total system mass:',vtotmass
+ close (45)
+ return
+ 100 format('Bond order cutoff:',f6.4)
+ 110 format('Iteration Freq. Molecular formula',15x,'Molecular mass')
+ 120 format(i8,i4,' x ',a35,f10.4)
+ end
+************************************************************************
+************************************************************************
+
+ subroutine stranal(istart,iend,vout,iout,icheck)
+
+************************************************************************
+#include "cbka.blk"
+#include "cbkconst.blk"
+#include "opt.blk"
+
+ character*1 qchar
+ dimension qchar(5)
+**********************************************************************
+* *
+* Analyze string for special characters; find words in string *
+* *
+**********************************************************************
+ qchar(1)=' '
+ qchar(2)='/'
+
+ ifound1=0
+ do i1=istart,200
+ ifound2=0
+ do i2=1,icheck
+
+ if (qstrana1(i1:i1).eq.qchar(i2)) then
+ ifound2=1
+ if (ifound1.eq.1) then !End of word
+ iend=i1
+ goto 10
+ end if
+
+ end if
+
+ end do
+
+ if (ifound2.eq.0.and.ifound1.eq.0) then !Start of word
+ istart2=i1
+ ifound1=1
+ end if
+
+ end do
+
+ 10 continue
+ qstrana2=' '
+ vout=zero
+ iout=0
+
+ if (ifound1.eq.1) then
+ qstrana2=qstrana1(istart2:iend-1)
+ istart=istart2
+ vout=zero
+ read (qstrana2,*,end=20,err=20) vout
+ 20 iout=int(vout)
+ end if
+
+ return
+ end
+************************************************************************
+**********************************************************************
+
+ subroutine dipmom(naold,dpmm,xdip,ydip,zdip,xdir,ydir,zdir)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkch.blk"
+#include "cbkconst.blk"
+#include "control.blk"
+#include "small.blk"
+**********************************************************************
+* *
+* Calculate and output dipole moment *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In dipmom'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+************************************************************************
+* *
+* CONVERSION FACTOR TO DEBYE UNITS IS CALCULATED *
+* THE CALCULATION IS INITIALIZED *
+* *
+************************************************************************
+
+ ELCHG=1.60217733D-19 ! [C] = [As]
+ CLIGHT=2.99792458D8 ! [m/s]
+ DBCONV=ONE/(CLIGHT*ELCHG*1.0D11)
+
+ CHCPX=ZERO
+ CHCPY=ZERO
+ CHCPZ=ZERO
+ CHCMX=ZERO
+ CHCMY=ZERO
+ CHCMZ=ZERO
+ XDIP=ZERO
+ YDIP=ZERO
+ ZDIP=ZERO
+ XGRD=ZERO
+ YGRD=ZERO
+ ZGRD=ZERO
+************************************************************************
+* *
+* CALCULATION OF MAGNITUDE AND CENTRES OF POSITIVE AND NEGATIVE *
+* CHARGES *
+* *
+************************************************************************
+
+ if (na.eq.0) na=naold
+ CHRG=ZERO
+ DO 4 K1=1,NA
+ CHK1=CH(K1)
+ IF (CHK1.EQ.ZERO) GOTO 4
+ IF (CHK1.LT.ZERO) GOTO 3
+ CHRG=CHRG+CHK1
+ CHCPX=CHCPX+CHK1*C(K1,1)
+ CHCPY=CHCPY+CHK1*C(K1,2)
+ CHCPZ=CHCPZ+CHK1*C(K1,3)
+ GOTO 4
+ 3 CHCMX=CHCMX-CHK1*C(K1,1)
+ CHCMY=CHCMY-CHK1*C(K1,2)
+ CHCMZ=CHCMZ-CHK1*C(K1,3)
+ 4 CONTINUE
+
+************************************************************************
+* *
+* CALCULATION OF DISTANCE BETWEEN CENTRES AND OF DIPOLE MOMENT *
+* IN DEBIJE UNITS *
+* *
+************************************************************************
+
+ CHDSTX=CHCPX-CHCMX
+ CHDSTY=CHCPY-CHCMY
+ CHDSTZ=CHCPZ-CHCMZ
+ DPMM=SQRT(CHDSTX*CHDSTX+CHDSTY*CHDSTY+CHDSTZ*CHDSTZ)/DBCONV
+ IF(DPMM.LT.1.0D-4)RETURN
+ XDIP=HALF*(CHCPX+CHCMX)/CHRG
+ YDIP=HALF*(CHCPY+CHCMY)/CHRG
+ ZDIP=HALF*(CHCPZ+CHCMZ)/CHRG
+ GRTST=MAX(CHDSTX,CHDSTY,CHDSTZ)
+ XDIR=-CHDSTX/GRTST
+ YDIR=-CHDSTY/GRTST
+ ZDIR=-CHDSTZ/GRTST
+ open (64,file='dipole.out',status='unknown')
+ write (64,100)dpmm,xdip,ydip,zdip,xdir,ydir,zdir
+ close (64)
+
+ 100 format ('Dipole moment (Debye):',f12.4,' Location:',3f12.4,
+ $' Direction (-side):',3f12.4)
+ return
+ end
+************************************************************************
+**********************************************************************
+
+ subroutine readtraj(ivels)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkatomcoord.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkdistan.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbkinit.blk"
+**********************************************************************
+* *
+* Read in trajectory file *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In readtraj'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ open(unit=66,file='moldyn.vel',status='old',err=10)
+ ivels=1
+ read (66,*)
+ read (66,100)aaxis,baxis,caxis
+ read (66,100)angles(1),angles(2),angles(3)
+ if (qr.eq.'F'.or.qr.eq.'P'.or.ngeofor.eq.1) then
+ axis(1)=aaxis
+ axis(2)=baxis
+ axis(3)=caxis
+ axiss(1)=axis(1)
+ axiss(2)=axis(2)
+ axiss(3)=axis(3)
+ angle(1)=angles(1)
+ angle(2)=angles(2)
+ angle(3)=angles(3)
+ halfa=angle(1)*dgrrdn
+ hbeta=angle(2)*dgrrdn
+ hgamma=angle(3)*dgrrdn
+ sinalf=sin(halfa)
+ cosalf=cos(halfa)
+ sinbet=sin(hbeta)
+ cosbet=cos(hbeta)
+ cosphi=(cos(hgamma)-cosalf*cosbet)/(sinalf*sinbet)
+ if (cosphi.gt.1.0) cosphi=1.0
+ sinphi=sqrt(one-cosphi*cosphi)
+ tm11=axis(1)*sinbet*sinphi
+ tm21=axis(1)*sinbet*cosphi
+ tm31=axis(1)*cosbet
+ tm22=axis(2)*sinalf
+ tm32=axis(2)*cosalf
+ tm33=axis(3)
+ end if
+ if (aaxis.ne.axis(1).or.baxis.ne.axis(2).or.caxis.ne.axis(3))
+ $stop 'Wrong cell parameters in moldyn.vel'
+ read (66,200)nan
+ if (nan.ne.na) stop 'Wrong number of atoms in moldyn.vel-file'
+ if (nbiolab.eq.1) write (*,*)'Warning: using labels in vels-file'
+ read (66,250)((c(i,j),j=1,3),qlabel(i),i=1,na)
+ read (66,*)
+ read (66,300)((vel(j,i),j=1,3),i=1,na)
+ read (66,*)
+ read (66,300)((accel(j,i),j=1,3),i=1,na)
+ read (66,*)
+ read (66,300,end=10,err=10)((aold(j,i),j=1,3),i=1,na)
+ read (66,*)
+ read (66,300,end=10,err=10)tempmd
+ read (66,*)
+ read (66,350,end=10,err=10)nsbma2
+ 10 continue
+**********************************************************************
+* *
+* Format part *
+* *
+**********************************************************************
+ 100 format(3d15.8)
+ 200 format(i4)
+ 250 format(3d24.15,1x,a5)
+ 300 format(3d24.15)
+ 350 format(i3)
+ 400 format (8i3,8f8.4)
+ return
+ end
+**********************************************************************
diff -Naur lammps-29Jan09/lib/reax/reax_lammps.F lammps-12Feb09/lib/reax/reax_lammps.F
--- lammps-29Jan09/lib/reax/reax_lammps.F 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_lammps.F 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,392 @@
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+**********************************************************************
+
+ subroutine getswb(swb_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkff.blk"
+ real*8 swb_tmp
+
+**********************************************************************
+* *
+* Report the value of swb *
+* *
+**********************************************************************
+
+ swb_tmp = swb
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getswa(swa_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkff.blk"
+ real*8 swa_tmp
+
+**********************************************************************
+* *
+* Report the value of swa *
+* *
+**********************************************************************
+
+ swa_tmp = swa
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getvrange(vrange_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "control.blk"
+ real*8 vrange_tmp
+
+**********************************************************************
+* *
+* Report the value of vrange *
+* *
+**********************************************************************
+
+ vrange_tmp = vrange
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnvlist(nvlist_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+ integer nvlist_tmp
+
+**********************************************************************
+* *
+* Report the value of nvlist *
+* *
+**********************************************************************
+
+ nvlist_tmp = nvlist
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getvlbora(vlbora_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "control.blk"
+ real*8 vlbora_tmp
+
+**********************************************************************
+* *
+* Report the value of vlbora *
+* *
+**********************************************************************
+
+ vlbora_tmp = vlbora
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnval(nval_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkvalence.blk"
+ integer nval_tmp
+
+**********************************************************************
+* *
+* Report the value of nval *
+* *
+**********************************************************************
+
+ nval_tmp = nval
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getntor(ntor_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbktorsion.blk"
+ integer ntor_tmp
+
+**********************************************************************
+* *
+* Report the value of ntor *
+* *
+**********************************************************************
+
+ ntor_tmp = ntor
+
+ return
+ end
+
+
+**********************************************************************
+
+ subroutine getnhb(nhb_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbksrthb.blk"
+ integer nhb_tmp
+
+**********************************************************************
+* *
+* Report the value of nhb *
+* *
+**********************************************************************
+
+ nhb_tmp = nhb
+
+ return
+ end
+
+
+**********************************************************************
+
+ subroutine getnbonall(nbonall_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbksrtbon1.blk"
+ integer nbonall_tmp
+
+**********************************************************************
+* *
+* Report the value of nbonall *
+* *
+**********************************************************************
+
+ nbonall_tmp = nbonall
+
+ return
+ end
+
+
+**********************************************************************
+
+ subroutine getnneighmax(nneighmax_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+ integer nneighmax_tmp
+
+**********************************************************************
+* *
+* Report the value of nneighmax *
+* *
+**********************************************************************
+
+ nneighmax_tmp = nneighmax
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnat(nat_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+ integer nat_tmp
+
+**********************************************************************
+* *
+* Report the value of nat *
+* *
+**********************************************************************
+
+ nat_tmp = nat
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnattot(nattot_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+ integer nattot_tmp
+
+**********************************************************************
+* *
+* Report the value of nattot *
+* *
+**********************************************************************
+
+ nattot_tmp = nattot
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnsort(nsort_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+ integer nsort_tmp
+
+**********************************************************************
+* *
+* Report the value of nsort *
+* *
+**********************************************************************
+
+ nsort_tmp = nsort
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getmbond(mbond_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+ integer mbond_tmp
+
+**********************************************************************
+* *
+* Report the value of mbond *
+* *
+**********************************************************************
+
+ mbond_tmp = mbond
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnso(nso_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkff.blk"
+ integer nso_tmp
+
+**********************************************************************
+* *
+* Report the value of nso *
+* *
+**********************************************************************
+
+ nso_tmp = nso
+
+ return
+ end
+
+
+**********************************************************************
+
+ subroutine setngeofor(ngeofor_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "control.blk"
+ integer ngeofor_tmp
+
+**********************************************************************
+* *
+* Set value of ngeofor
+* *
+**********************************************************************
+
+ ngeofor = ngeofor_tmp
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnsbmax(nsbmax_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbksrtbon1.blk"
+ integer nsbmax_tmp
+
+**********************************************************************
+* *
+* Report the value of nsbmax *
+* *
+**********************************************************************
+
+ nsbmax_tmp = nsbmax
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getnsbma2(nsbma2_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbksrtbon1.blk"
+ integer nsbma2_tmp
+
+**********************************************************************
+* *
+* Report the value of nsbma2 *
+* *
+**********************************************************************
+
+ nsbma2_tmp = nsbma2
+
+ return
+ end
+
+**********************************************************************
+
+ subroutine getcutof3(cutof3_tmp)
+
+**********************************************************************
+#include "cbka.blk"
+#include "control.blk"
+ real*8 cutof3_tmp
+
+**********************************************************************
+* *
+* Report the value of cutof3 *
+* *
+**********************************************************************
+
+ cutof3_tmp = cutof3
+
+ return
+ end
+
diff -Naur lammps-29Jan09/lib/reax/reax_poten.F lammps-12Feb09/lib/reax/reax_poten.F
--- lammps-29Jan09/lib/reax/reax_poten.F 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_poten.F 2009-02-12 09:09:50.000000000 -0700
@@ -0,0 +1,3971 @@
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+********************************************************************
+
+ subroutine calval
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkdhdc.blk"
+#include "cbkdrdc.blk"
+#include "cbkh.blk"
+#include "cbkrbo.blk"
+#include "cbkvalence.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+ dimension a(3),b(3),j(3),dradc(3,3),drbdc(3,3),dtdc(3,3),
+ $dargdc(3,3),dndc(3,3),dadc(3),dbdc(3)
+**********************************************************************
+* *
+* Calculate valency angles and their derivatives to cartesian *
+* coordinates *
+* Valency angle energies are calculated in valang *
+* *
+**********************************************************************
+**********************************************************************
+* Description of variables used in this routine.
+*
+* ndebug: stored in cbka.blk; control-parameter
+* third: local variable
+* twothird: local variable
+* dadc(3): local array; stores derivative distance to cartesians
+* dbdc(3): local array; stores derivative distance to cartesians
+* i1: local do-loop counter
+* i2: local do-loop counter
+* k1: local do-loop counter
+* k2: local do-loop counter
+* dradc(3,3): local array; stores derivatives bond lengths to
+* cartesians
+* drbdc(3,3): local array; stores derivatives bond lengths to
+* cartesians
+* nval: stored in cbka.blk; number of valence angles
+* ity: local integer; atom type
+* iv(nvalmax,6): stored in cbka.blk; valence angle identifiers
+* j(3): local integer array; stores valence angle atom numbers
+* la: local integer: stores bond numbers in valence angle
+* lb: local integer: stores bond numbers in valence angle
+* ivl1: local integer; stores symmetric copy number of bond
+* ivl2: local integer; stores symmetric copy number of bond
+* ibsym(nbomax): stored in cbka.blk; symmetric copy number of bond
+* isign1: local integer; -1 or 1
+* isign2: local integer; -1 or 1
+* rla: local variable; stores bond length for bond la
+* rlb: local variable; stores bond length for bond lb
+* rbo(nbomax): stored in cbka.blk; stores bond lengths
+* ix1,iy1,iz1,ix2,iy2,iz2: local integers; periodic cell shifts
+* a(3): local variable; distance in x,y and z-direction between atoms
+* b(3): local variable; distance in x,y and z-direction between atoms
+* c(nat,3): stored in cbka.blk; cartesian coordinate array
+* tm11,tm21,tm22,tm31,tm32,tm33: stored in cbka.blk; periodic cell
+* matrix
+* poem: local variable; product of bond lengths
+* tel: local variable; cross-product of x,y and z-interatomic
+* distances
+* arg: local variable; cosine of angle between bonds a and b
+* arg2: local variable; square of arg
+* s1ma22: local variable; used to check whether angle gets to 180
+* degrees
+* s1ma2: local variable; square root of s1ma22
+* hl: local variable; angle (in radians) between bonds a and b
+* h(nvamax): stored in cbka.blk; angle (in radians) between bonds a
+* and b
+* ib(nbomax,3): stored in cbka.blk: bond distance identifiers
+* drdc(nbomax,3,2): stored in cbka.blk; derivatives bond distances
+* to cartesian coordinates
+* dndc(3,3): local variable; temporary storage for calculating
+* derivatives of valence angle to cartesians
+* dtdc(3,3): local variable; temporary storage for calculating
+* derivatives of valence angle to cartesians
+* dargdc(3,3): local variable; temporary storage for calculating
+* derivatives of valence angle to cartesians
+* dhdc(nvamax,3,3): stored in cbka.blk; derivatives of valence angle
+* to cartesians
+*
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In calval'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+
+ third=1.0/3.0
+ twothird=2.0/3.0
+ dadc(1)=-1.0
+ dadc(2)=1.0
+ dadc(3)=0.0
+ dbdc(1)=0.0
+ dbdc(2)=1.0
+ dbdc(3)=-1.0
+ do k1=1,3
+ do k2=1,3
+ dradc(k1,k2)=0.0
+ drbdc(k1,k2)=0.0
+ end do
+ end do
+ if (nval.eq.0) return
+
+ do 10 i1=1,nval
+ ity=iv(i1,1)
+ j(1)=iv(i1,2)
+ j(2)=iv(i1,3)
+ j(3)=iv(i1,4)
+**********************************************************************
+* *
+* Determine valency angle *
+* *
+**********************************************************************
+ la=iv(i1,5)
+ lb=iv(i1,6)
+ ivl1=ibsym(la)
+ ivl2=ibsym(lb)
+ isign1=1
+ isign2=1
+ rla=rbo(la)
+ rlb=rbo(lb)
+
+ call dista2(j(2),j(1),dis,a(1),a(2),a(3))
+ call dista2(j(2),j(3),dis,b(1),b(2),b(3))
+
+ poem=rla*rlb
+ tel=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
+ arg=tel/poem
+ arg2=arg*arg
+ s1ma22=1.0-arg2
+ if (s1ma22.lt.1.0d-10) s1ma22=1.0d-10
+ s1ma2=sqrt(s1ma22)
+ if (arg.gt.1.0) arg=1.0
+ if (arg.lt.-1.0) arg=-1.0
+ hl=acos(arg)
+ h(i1)=hl
+**********************************************************************
+* *
+* Calculate derivative valency angle to cartesian coordinates *
+* *
+**********************************************************************
+ if (j(1).eq.ib(la,2)) then
+ do k1=1,3
+ dradc(k1,1)=drdc(la,k1,1)
+ dradc(k1,2)=drdc(la,k1,2)
+ end do
+ else
+ do k1=1,3
+ dradc(k1,1)=drdc(la,k1,2)
+ dradc(k1,2)=drdc(la,k1,1)
+ end do
+ end if
+ if (j(2).eq.ib(lb,2)) then
+ do k1=1,3
+ drbdc(k1,2)=drdc(lb,k1,1)
+ drbdc(k1,3)=drdc(lb,k1,2)
+ end do
+ else
+ do k1=1,3
+ drbdc(k1,2)=drdc(lb,k1,2)
+ drbdc(k1,3)=drdc(lb,k1,1)
+ end do
+ end if
+ do k1=1,3
+ do k2=1,3
+ dndc(k1,k2)=rla*drbdc(k1,k2)+rlb*dradc(k1,k2)
+ dtdc(k1,k2)=a(k1)*dbdc(k2)+b(k1)*dadc(k2)
+ dargdc(k1,k2)=(dtdc(k1,k2)-arg*dndc(k1,k2))/poem
+ dhdc(i1,k1,k2)=-dargdc(k1,k2)/s1ma2
+ end do
+ end do
+
+ 10 continue
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine boncor
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkc.blk"
+#include "cbkbo.blk"
+#include "cbkboncor.blk"
+#include "cbkbosi.blk"
+#include "cbkbopi.blk"
+#include "cbkbopi2.blk"
+#include "cbkconst.blk"
+#include "cbkdbopi2ndc.blk"
+#include "cbkdbopidc.blk"
+#include "cbkdbopindc.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbknubon2.blk"
+#include "cbkrbo.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbkdbodc.blk"
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In boncor'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+**********************************************************************
+* *
+* Correction for overcoordination and 1-3 bond orders *
+* *
+**********************************************************************
+**********************************************************************
+* Description of variables used in this routine.
+*
+* ndebug: stored in cbka.blk; control-parameter
+* i1: local do-loop counter
+* i2: local do-loop counter
+* k1: local do-loop counter
+* k2: local do-loop counter
+* nbon: stored in cbka.blk; number of bonds in system
+* ibt: local integer; stores bond type
+* ib(nbomax,3): stored in cbka.blk: bond distance identifiers
+* j1: local integer; stores atom number 1st atom in bond
+* j2: local integer; stores atom number 2nd atom in bond
+* ovc(nbotym): stored in cbka.blk: force field parameter for
+* overcoordination correction
+* v13cor(nbotym): stored in cbka.blk: force field parameter for
+* 1-3 bond order correction
+* idbo1(nbomax): stored in cbka.blk; number of atoms in the
+* derivative of the bond order
+* idbo(nbomax,2*mbond): stored in cbka.blk; atom numbers of the
+* atoms in the derivative of the bond order
+* dbondc(nbomax,3,2*mbond): stored in cbka.blk; derivative of
+* corrected total bond orders to cartesians
+* dbosindc(nbomax,3,2*mbond): stored in cbka.blk; derivative of
+* corrected sigma bond orders to cartesians
+* dbopindc(nbomax,3,2*mbond): stored in cbka.blk; derivative of
+* corrected pi bond orders to cartesians
+* dbopi2ndc(nbomax,3,2*mbond): stored in cbka.blk; derivative of
+* corrected double pi bond orders to cartesians
+* dbodc(nbomax,3,2): stored in cbka.blk; derivative of
+* uncorrected total bond orders to cartesians
+* dbosidc(nbomax,3,2): stored in cbka.blk; derivative of
+* uncorrected sigma bond orders to cartesians
+* dbopidc(nbomax,3,2): stored in cbka.blk; derivative of
+* uncorrected pi bond orders to cartesians
+* dbopi2dc(nbomax,3,2): stored in cbka.blk; derivative of
+* uncorrected double pi bond orders to cartesians
+* boo: local variable; storage of uncorrected total bond order
+* bo(nbomax): stored in cbka.blk; total bond order
+* bopi(nbomax): stored in cbka.blk; pi bond order
+* bopi2(nbomax): stored in cbka.blk; double pi bond order
+* bopio: local variable; storage of uncorrected pi bond order
+* bopi2o: local variable; storage of uncorrected double pi bond order
+* iti: local integer; atom type first atom in bond
+* itj: local integer; atom type second atom in bond
+* ia(nat,mbond+3): stored in cbka.blk; connection table without bond
+* order cutoff
+* aboi: local variable: total bond order around atom i
+* aboj: local variable: total bond order around atom j
+* abo(nat): stored in cbka.blk; total bond order around atoms
+* vp131: local variable; force field cross-term
+* vp132: local variable; force field cross-term
+* vp133: local variable; force field cross-term
+* bo131(nsort): stored in cbka.blk; force field parameter for 1-3
+* bond order correction
+* bo132(nsort): stored in cbka.blk; force field parameter for 1-3
+* bond order correction
+* bo133(nsort): stored in cbka.blk; force field parameter for 1-3
+* bond order correction
+* corrtot:local variable; total correction on bond order
+* dbodsboi1: local variable; derivative of bond order to sum of bond
+* orders around atom i
+* dbodsboj1: local variable; derivative of bond order to sum of bond
+* orders around atom j
+* ovi: local variable; overcoordination on atom i
+* ovj: local variable; overcoordination on atom j
+* aval(nat): stored in cbka.blk; nr. of valence electrons on atom
+* exphu1: local variable; stores exponential
+* exphu2: local variable; stores exponential
+* exp11: local variable; stores exponential
+* exp21: local variable; stores exponential
+* vpar(npamax): stored in cbka.blk: general parameters
+* exphu12: local variable; stores sum of exponential
+* ovcor: local variable; temporary storage for BO/ovcor corr.
+* huli: local variable; temporary storage for BO/ovcor corr.
+* hulj: local variable; temporary storage for BO/ovcor corr.
+* corr1: local variable; temporary storage for BO/ovcor corr.
+* corr2: local variable; temporary storage for BO/ovcor corr.
+* dbodsboi2: local variable; derivative of 1-3 BO correction to sum
+* of bond orders around atom i
+* dbodsboj2: local variable; derivative of 1-3 BO correction to sum
+* of bond orders around atom i
+* bocor1: local variable; 1-3 bond order correction
+* bocor2: local variable; 1-3 bond order correction
+* ovi2: local variable; overcoordination on atom i with reference to
+* total number of electrons on atom i, including lone
+* pairs
+* ovj2: local variable; overcoordination on atom j with reference to
+* total number of electrons on atom j, including lone
+* pairs
+* valf(nsort): stored in cbka.blk; total number of electrons on
+* atom, including lone pairs
+* cor1: local variable; temporary storage for BO/1-3 bond corr.
+* cor2: local variable; temporary storage for BO/1-3 bond corr.
+* exphu3: local variable; storage exponential
+* exphu4: local variable; storage exponential
+* corrtot2: local variable; square of corrtot
+* dbodboo: local variable; derivative of corrected total bond order to
+* uncorrected bond order
+* dbopidbopio: local variable; derivative of corrected pi bond order
+* to uncorrected pi bond order
+* dbopidboo: local variable; derivative of corrected pi bond order
+* to uncorrected total bond order
+* dbopi2dbopi2o: local variable; derivative of corrected double pi bond order
+* to uncorrected double pi bond order
+* dbopi2dboo: local variable; derivative of corrected double pi bond order
+* to uncorrected total bond order
+* dbodsboit: local variable; derivative of total bond order to sum
+* of bond orders around atom i
+* dbodsbojt: local variable; derivative of total bond order to sum
+* of bond orders around atom j
+* vhui: local variable; temporary storage
+* vhuj: local variable; temporary storage
+* dbopidsboit: local variable; derivative of pi bond order to sum
+* of bond orders around atom i
+* dbopidsbojt: local variable; derivative of pi bond order to sum
+* of bond orders around atom j
+* dbopi2dsboit: local variable; derivative of pi bond order to sum
+* of bond orders around atom i
+* dbopi2dsbojt: local variable; derivative of pi bond order to sum
+* of bond orders around atom j
+* nco: local integer; counter for number of atoms in derivative
+* ihl: local integer; helps to access right dbodc-term
+* nubon2(nat,mbond): stored in cbka.blk; stored bond number as a
+* function of atom number and connection number
+* iob: local integer; atom number of second atom in bond
+* ncubo: local integer; stores number of current bond
+* na: stored in cbka.blk: number of atoms in system
+* zero: stored in cbka.blk: value 0.00
+*
+**********************************************************************
+ do 10 i1=1,nbon
+ ibt=ib(i1,1)
+ j1=ib(i1,2)
+ j2=ib(i1,3)
+ if (ovc(ibt).lt.0.001.and.v13cor(ibt).lt.0.001) then
+ idbo1(i1)=2
+ idbo(i1,1)=j1
+ idbo(i1,2)=j2
+ do k1=1,3
+ dbondc(i1,k1,1)=dbodc(i1,k1,1)
+ dbondc(i1,k1,2)=dbodc(i1,k1,2)
+ dbosindc(i1,k1,1)=dbosidc(i1,k1,1)
+ dbosindc(i1,k1,2)=dbosidc(i1,k1,2)
+ dbopindc(i1,k1,1)=dbopidc(i1,k1,1)
+ dbopindc(i1,k1,2)=dbopidc(i1,k1,2)
+ dbopi2ndc(i1,k1,1)=dbopi2dc(i1,k1,1)
+ dbopi2ndc(i1,k1,2)=dbopi2dc(i1,k1,2)
+ end do
+ goto 10
+ end if
+ boo=bo(i1)
+ bopio=bopi(i1)
+ bopi2o=bopi2(i1)
+ iti=ia(j1,1)
+ itj=ia(j2,1)
+ aboi=abo(j1)
+ aboj=abo(j2)
+ vp131=sqrt(bo131(iti)*bo131(itj))
+ vp132=sqrt(bo132(iti)*bo132(itj))
+ vp133=sqrt(bo133(iti)*bo133(itj))
+ corrtot=1.0
+ dbodsboi1=zero
+ dbodsboj1=zero
+ if (ovc(ibt).gt.0.001) then
+ ovi=aboi-aval(iti)
+ ovj=aboj-aval(itj)
+
+**********************************************************************
+* *
+* Correction for overcoordination *
+* *
+**********************************************************************
+ exphu1=exp(-vpar(2)*ovi)
+ exphu2=exp(-vpar(2)*ovj)
+ exp11=exp(-vpar(1)*ovi)
+ exp21=exp(-vpar(1)*ovj)
+ exphu12=(exphu1+exphu2)
+ ovcor=-(1.0/vpar(2))*log(0.50*exphu12)
+* huli=((1.0/ovc(ibt))*aval(iti)+exp11+exp21)
+* hulj=((1.0/ovc(ibt))*aval(itj)+exp11+exp21)
+ huli=aval(iti)+exp11+exp21
+ hulj=aval(itj)+exp11+exp21
+ corr1=huli/(huli+ovcor)
+ corr2=hulj/(hulj+ovcor)
+ corrtot=0.50*(corr1+corr2)
+
+ dbodsboi1=0.50*(-vpar(1)*exp11/(huli+ovcor)-
+ $(corr1/(huli+ovcor))*
+ $(-vpar(1)*exp11+exphu1/exphu12)-vpar(1)*exp11/(hulj+ovcor)-
+ $(corr2/(hulj+ovcor))*(-vpar(1)*exp11+exphu1/exphu12))
+ dbodsboj1=0.50*(-vpar(1)*exp21/(huli+ovcor)-
+ $(corr1/(huli+ovcor))*
+ $(-vpar(1)*exp21+exphu2/exphu12)-vpar(1)*exp21/(hulj+ovcor)-
+ $(corr2/(hulj+ovcor))*(-vpar(1)*exp21+exphu2/exphu12))
+ end if
+**********************************************************************
+* *
+* Correction for 1-3 bond orders *
+* *
+**********************************************************************
+ dbodsboi2=zero
+ dbodsboj2=zero
+ bocor1=1.0
+ bocor2=1.0
+ if (v13cor(ibt).gt.0.001) then
+ ovi2=aboi-vval3(iti) !Modification for metal surfaces
+ ovj2=aboj-vval3(itj)
+* ovi2=aboi-valf(iti)
+* ovj2=aboj-valf(itj)
+* ovi2=aboi-aval(iti)
+* ovj2=aboj-aval(itj)
+ cor1=vp131*boo*boo-ovi2
+ cor2=vp131*boo*boo-ovj2
+* exphu3=v13cor(ibt)*exp(-vp132*cor1+vp133)
+* exphu4=v13cor(ibt)*exp(-vp132*cor2+vp133)
+ exphu3=exp(-vp132*cor1+vp133)
+ exphu4=exp(-vp132*cor2+vp133)
+ bocor1=1.0/(1.0+exphu3)
+ bocor2=1.0/(1.0+exphu4)
+ dbodsboi2=-bocor1*bocor1*bocor2*vp132*exphu3
+ dbodsboj2=-bocor1*bocor2*bocor2*vp132*exphu4
+ end if
+
+ bo(i1)=boo*corrtot*bocor1*bocor2
+ if (bo(i1).lt.1e-10) bo(i1)=zero
+ corrtot2=corrtot*corrtot
+ bopi(i1)=bopio*corrtot2*bocor1*bocor2
+ bopi2(i1)=bopi2o*corrtot2*bocor1*bocor2
+ if (bopi(i1).lt.1e-10) bopi(i1)=zero
+ if (bopi2(i1).lt.1e-10) bopi2(i1)=zero
+
+ dbodboo=corrtot*bocor1*bocor2+corrtot*
+ $bocor1*bocor1*bocor2*boo*vp132*vp131*2.0*boo*exphu3+
+ $corrtot*bocor1*bocor2*bocor2*boo*
+ $vp132*vp131*exphu4*2.0*boo
+
+ dbopidbopio=corrtot2*bocor1*bocor2
+
+ dbopidboo=corrtot2*
+ $bocor1*bocor1*bocor2*boo*vp132*vp131*2.0*bopio*exphu3+
+ $corrtot2*bocor1*bocor2*bocor2*boo*
+ $vp132*vp131*exphu4*2.0*bopio
+
+ dbopi2dbopi2o=corrtot2*bocor1*bocor2
+
+ dbopi2dboo=corrtot2*
+ $bocor1*bocor1*bocor2*boo*vp132*vp131*2.0*bopi2o*exphu3+
+ $corrtot2*bocor1*bocor2*bocor2*boo*
+ $vp132*vp131*exphu4*2.0*bopi2o
+
+ dbodsboit=boo*dbodsboi1*bocor1*bocor2+boo*corrtot*dbodsboi2
+ dbodsbojt=boo*dbodsboj1*bocor1*bocor2+boo*corrtot*dbodsboj2
+
+ vhui=2.0*corrtot*dbodsboi1*bocor1*bocor2+corrtot2*dbodsboi2
+ vhuj=2.0*corrtot*dbodsboj1*bocor1*bocor2+corrtot2*dbodsboj2
+ dbopidsboit=bopio*vhui
+ dbopidsbojt=bopio*vhuj
+
+ dbopi2dsboit=bopi2o*vhui
+ dbopi2dsbojt=bopi2o*vhuj
+
+**********************************************************************
+* *
+* Calculate bond order derivatives *
+* *
+**********************************************************************
+ idbo1(i1)=2+ia(j1,2)+ia(j2,2)
+ idbo(i1,1)=j1
+ idbo(i1,2)=j2
+ nco=0
+ do k1=1,3
+ dbondc(i1,k1,1)=dbodc(i1,k1,1)*dbodboo
+ dbondc(i1,k1,2)=dbodc(i1,k1,2)*dbodboo
+* dbosindc(i1,k1,1)=dbosidc(i1,k1,1)*dbosidboo
+* dbosindc(i1,k1,2)=dbosidc(i1,k1,2)*dbosidboo
+ dbopindc(i1,k1,1)=dbopidc(i1,k1,1)*dbopidbopio+
+ $dbodc(i1,k1,1)*dbopidboo
+ dbopindc(i1,k1,2)=dbopidc(i1,k1,2)*dbopidbopio+
+ $dbodc(i1,k1,2)*dbopidboo
+ dbopi2ndc(i1,k1,1)=dbopi2dc(i1,k1,1)*dbopi2dbopi2o+
+ $dbodc(i1,k1,1)*dbopi2dboo
+ dbopi2ndc(i1,k1,2)=dbopi2dc(i1,k1,2)*dbopi2dbopi2o+
+ $dbodc(i1,k1,2)*dbopi2dboo
+ end do
+ do i2=1,ia(j1,2)
+ ihl=0
+ iob=ia(j1,2+i2)
+ if (iob.lt.j1) ihl=1
+ ncubo=nubon2(j1,i2)
+ idbo(i1,2+nco+1)=iob
+ do k1=1,3
+ dbondc(i1,k1,1)=dbondc(i1,k1,1)+dbodc(ncubo,k1,1+ihl)*dbodsboit
+ dbondc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbodsboit
+
+* dbosindc(i1,k1,1)=dbosindc(i1,k1,1)+
+* $dbodc(ncubo,k1,1+ihl)*dbosidsboit
+* dbosindc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbosidsboit
+
+ dbopindc(i1,k1,1)=dbopindc(i1,k1,1)+
+ $dbodc(ncubo,k1,1+ihl)*dbopidsboit
+ dbopindc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbopidsboit
+
+ dbopi2ndc(i1,k1,1)=dbopi2ndc(i1,k1,1)+
+ $dbodc(ncubo,k1,1+ihl)*dbopi2dsboit
+ dbopi2ndc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbopi2dsboit
+
+ end do
+ nco=nco+1
+ end do
+ do i2=1,ia(j2,2)
+ ihl=0
+ iob=ia(j2,2+i2)
+ if (iob.lt.j2) ihl=1
+ ncubo=nubon2(j2,i2)
+ idbo(i1,2+nco+1)=iob
+ do k1=1,3
+
+ dbondc(i1,k1,2)=dbondc(i1,k1,2)+dbodc(ncubo,k1,1+ihl)*dbodsbojt
+ dbondc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbodsbojt
+
+* dbosindc(i1,k1,2)=dbosindc(i1,k1,2)+
+* $dbodc(ncubo,k1,1+ihl)*dbosidsbojt
+* dbosindc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbosidsbojt
+
+ dbopindc(i1,k1,2)=dbopindc(i1,k1,2)+
+ $dbodc(ncubo,k1,1+ihl)*dbopidsbojt
+ dbopindc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbopidsbojt
+
+ dbopi2ndc(i1,k1,2)=dbopi2ndc(i1,k1,2)+
+ $dbodc(ncubo,k1,1+ihl)*dbopi2dsbojt
+ dbopi2ndc(i1,k1,2+nco+1)=dbodc(ncubo,k1,2-ihl)*dbopi2dsbojt
+
+ end do
+ nco=nco+1
+ end do
+
+ 10 continue
+
+ do i1=1,na
+ abo(i1)=zero
+ end do
+* do i1=1,na
+* do i2=1,ia(i1,2)
+* iob=ia(i1,2+i2)
+* ncubo=nubon2(i1,i2)
+* abo(i1)=abo(i1)+bo(ncubo)
+* end do
+* end do
+ do i1=1,nbon
+ j1=ib(i1,2)
+ j2=ib(i1,3)
+ abo(j1)=abo(j1)+bo(i1)
+ if (j1.ne.j2) abo(j2)=abo(j2)+bo(i1)
+ end do
+
+ 15 continue
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine lonpar
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkconst.blk"
+#include "cbkc.blk"
+#include "cbkd.blk"
+#include "cbkdcell.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbklonpar.blk"
+#include "cbknubon2.blk"
+#include "control.blk"
+#include "small.blk"
+ dimension virial_tmp(3,3),virialsym(6)
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In lonpar'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+**********************************************************************
+* *
+* Calculate lone pair energy and first derivatives *
+* *
+**********************************************************************
+ elp=zero
+ do i1=1,na
+**********************************************************************
+* *
+* Determine number of lone pairs on atoms
+* *
+**********************************************************************
+ ity=ia(i1,1)
+ voptlp=0.50*(stlp(ity)-aval(ity))
+ vlp(i1)=zero
+ vund=abo(i1)-stlp(ity)
+ vlph=2.0*int(vund/2.0)
+ vlpex=vund-vlph
+ vp16h=vpar(16)-1.0
+
+ expvlp=exp(-vpar(16)*(2.0+vlpex)*(2.0+vlpex))
+ dvlpdsbo(i1)=-vpar(16)*2.0*(2.0+vlpex)*expvlp
+ vlp(i1)=expvlp-int(vund/2.0)
+* expvlp=exp(-vpar(16)*(2.0+vlpex))
+* dvlpdsbo(i1)=-vpar(16)*expvlp
+* expvlp=exp(-6.0*((-0.50*vlpex)**vpar(16)))
+* vlp(i1)=(1.0-expvlp)-int(vund/2.0)
+* dvlpdsbo(i1)=-0.5*6.0*vpar(16)*((-0.5*vlpex)**vp16h)*
+* $expvlp
+**********************************************************************
+* *
+* Calculate lone pair energy *
+* *
+**********************************************************************
+ if (i1 .le. na_local) then
+
+ diffvlp=voptlp-vlp(i1)
+ exphu1=exp(-75.0*diffvlp)
+ hulp1=1.0/(1.0+exphu1)
+ elph=vlp1(ity)*diffvlp*hulp1
+* elph=vlp1(ity)*diffvlp
+ delpdvlp=-vlp1(ity)*hulp1-vlp1(ity)*diffvlp*hulp1*hulp1*
+ $75.0*exphu1
+
+ elp=elp+elph
+ estrain(i1)=estrain(i1)+elph !atom energy
+
+ delpdsbo=delpdvlp*dvlpdsbo(i1)
+**********************************************************************
+* *
+* Calculate first derivative of lone pair energy to *
+* cartesian coordinates *
+* *
+**********************************************************************
+ do i3=1,ia(i1,2)
+ iob=ia(i1,2+i3)
+ ncubo=nubon2(i1,i3)
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = delpdsbo*dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+ endif
+
+ end do
+ endif
+
+ end do
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine covbon
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkabo.blk"
+#include "cbkbo.blk"
+#include "cbkbosi.blk"
+#include "cbkbopi.blk"
+#include "cbkbopi2.blk"
+#include "cbkconst.blk"
+#include "cbkcovbon.blk"
+#include "cbkd.blk"
+#include "cbkdbopi2ndc.blk"
+#include "cbkdbopindc.blk"
+#include "cbkdcell.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbknubon2.blk"
+#include "cbkqa.blk"
+#include "cbkrbo.blk"
+#include "control.blk"
+#include "small.blk"
+ dimension virial_tmp(3,3),virialsym(6)
+**********************************************************************
+* *
+* Calculate bond energy and first derivatives *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In covbon'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ eb=0.0d0
+ if (nbon.eq.0) return
+**********************************************************************
+* *
+* Calculate bond energies *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write(65,*) 'Bond forces'
+c$$$ write(65,*) 'nbon = ',nbon
+c$$$ endif
+
+ do 20 i1=1,nbon
+
+ boa=bo(i1)
+* if (boa.lt.cutof2) goto 20
+ j1=ib(i1,2)
+ j2=ib(i1,3)
+
+c Only compute interaction if both atoms
+c are local or else flip a coin
+ if (j1 .gt. na_local) go to 20
+ if (j2 .gt. na_local) then
+ if (itag(j1) .lt. itag(j2)) go to 20
+ if (itag(j1) .eq. itag(j2)) then
+ if(c(j1,3) .gt. c(j2,3)) go to 20
+ if(c(j1,3) .eq. c(j2,3) .and.
+ $ c(j1,2) .gt. c(j2,2)) go to 20
+ if(c(j1,3) .eq. c(j2,3) .and.
+ $ c(j1,2) .eq. c(j2,2) .and.
+ $ c(j1,1) .gt. c(j2,1)) go to 20
+ endif
+ endif
+ vsymm=1.0
+ if (j1.eq.j2) vsymm=0.5
+
+ bopia=bopi(i1)
+ bopi2a=bopi2(i1)
+ bosia=boa-bopia-bopi2a
+ if (bosia.lt.zero) bosia=zero
+ it1=ia(j1,1)
+ it2=ia(j2,1)
+ ibt=ib(i1,1)
+ de1h=vsymm*de1(ibt)
+ de2h=vsymm*de2(ibt)
+ de3h=vsymm*de3(ibt)
+
+ bopo1=bosia**psp(ibt)
+ exphu1=exp(psi(ibt)*(1.0-bopo1))
+ ebh=-de1h*bosia*exphu1-de2h*bopia-de3h*bopi2a
+
+ debdbo=-de1h*exphu1+de1h*exphu1*psp(ibt)*psi(ibt)*bopo1
+ debdbopi=-de2h
+ debdbopi2=-de3h
+
+ eb=eb+ebh
+ estrain(j1)=estrain(j1)+0.50*ebh !1st atom energy
+ estrain(j2)=estrain(j2)+0.50*ebh !2nd atom energy
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(i1)
+ ihu=idbo(i1,i2)
+ do k1=1,3
+ ftmp = debdbo*(dbondc(i1,k1,i2)-dbopindc(i1,k1,i2)-
+ $dbopi2ndc(i1,k1,i2))+
+ $debdbopi*dbopindc(i1,k1,i2)+
+ $debdbopi2*dbopi2ndc(i1,k1,i2)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(i1)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(i1)
+ ihu=idbo(i1,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+**********************************************************************
+* *
+* Stabilisation terminal triple bond in CO *
+* *
+**********************************************************************
+ if (boa.lt.1.00) goto 20
+* Stabilization for all triple bonds (not just for CO) in ReaxFF combustion FF
+* if ((qa(j1).eq.'C '.and.qa(j2).eq.'O ').or.
+* $(qa(j1).eq.'O '.and.qa(j2).eq.'C ')) then
+ ba=(boa-2.50)*(boa-2.50)
+ exphu=exp(-vpar(8)*ba)
+ oboa=abo(j1)-boa
+ obob=abo(j2)-boa
+ exphua1=exp(-vpar(4)*oboa)
+ exphub1=exp(-vpar(4)*obob)
+ ovoab=abo(j1)-aval(it1)+abo(j2)-aval(it2)
+ exphuov=exp(vpar(5)*ovoab)
+ hulpov=1.0/(1.0+25.0*exphuov)
+
+ estriph=vpar(11)*exphu*hulpov*(exphua1+exphub1)
+
+ eb=eb+estriph
+ estrain(j1)=estrain(j1)+0.50*estriph !1st atom energy
+ estrain(j2)=estrain(j2)+0.50*estriph !2nd atom energy
+
+ decobdbo=vpar(4)*vpar(11)*exphu*hulpov*(exphua1+exphub1)
+ $-2.0*vpar(11)*vpar(8)*(boa-2.50)*hulpov*exphu*
+ $(exphua1+exphub1)
+ decobdboua=-25.0*vpar(5)*vpar(11)*exphu*exphuov*hulpov*hulpov*
+ $(exphua1+exphub1)-vpar(11)*exphu*vpar(4)*hulpov*exphua1
+ decobdboub=-25.0*vpar(5)*vpar(11)*exphu*exphuov*hulpov*hulpov*
+ $(exphua1+exphub1)-vpar(11)*exphu*vpar(4)*hulpov*exphub1
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(i1)
+ ihu=idbo(i1,i2)
+ do k1=1,3
+ ftmp = decobdbo*dbondc(i1,k1,i2)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(i1)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(i1)
+ ihu=idbo(i1,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ do i3=1,ia(j1,2)
+ iob=ia(j1,2+i3)
+ ncubo=nubon2(j1,i3)
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = decobdboua*dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ end do
+
+ do i3=1,ia(j2,2)
+ iob=ia(j2,2+i3)
+ ncubo=nubon2(j2,i3)
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = decobdboub*dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ end do
+
+* endif
+
+ 20 continue
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine ovcor
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkabo.blk"
+#include "cbkbo.blk"
+#include "cbkbopi.blk"
+#include "cbkbopi2.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkdbopi2ndc.blk"
+#include "cbkdbopindc.blk"
+#include "cbkdcell.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbklonpar.blk"
+#include "cbknubon2.blk"
+#include "cbkrbo.blk"
+#include "control.blk"
+#include "small.blk"
+**********************************************************************
+* *
+* Calculate atom energy *
+* Correction for over- and undercoordinated atoms *
+* *
+**********************************************************************
+ dimension vlptemp(nat)
+ dimension virial_tmp(3,3),virialsym(6)
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In ovcor'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ do i1=1,na
+ ity1=ia(i1,1)
+ vlptemp(i1)=vlp(i1)
+ if (amas(ity1).gt.21.0) vlptemp(i1)=0.50*(stlp(ity1)-aval(ity1)) !Only for 1st-row elements
+ end do
+ 25 ea=zero
+ eaot=zero
+ eaut=zero
+ epen=0.0
+
+ do 30 i1=1,na_local
+ ity1=ia(i1,1)
+ dfvl=1.0
+ if (amas(ity1).gt.21.0) dfvl=0.0 !Only for 1st-row elements
+**********************************************************************
+* *
+* Calculate overcoordination energy *
+* Valency is corrected for lone pairs *
+* *
+**********************************************************************
+
+ voptlp=0.50*(stlp(ity1)-aval(ity1))
+ diffvlph=dfvl*(voptlp-vlptemp(i1))
+**********************************************************************
+* *
+* Determine coordination neighboring atoms *
+* *
+**********************************************************************
+ sumov=0.0
+ sumov2=0.0
+ do i3=1,ia(i1,2)
+ iat2=ia(i1,2+i3)
+ ity2=ia(iat2,1)
+ ncubo=nubon2(i1,i3)
+ if (bo(ncubo).gt.0.0) then
+ ibt=ib(ncubo,1)
+ voptlp2=0.50*(stlp(ity2)-aval(ity2))
+ diffvlp2=dfvl*(voptlp2-vlptemp(iat2))
+ sumov=sumov+(bopi(ncubo)+bopi2(ncubo))*
+ $(abo(iat2)-aval(ity2)-diffvlp2)
+ sumov2=sumov2+vover(ibt)*de1(ibt)*bo(ncubo)
+ endif
+ end do
+
+ exphu1=exp(vpar(32)*sumov)
+ vho=1.0/(1.0+vpar(33)*exphu1)
+ diffvlp=diffvlph*vho
+
+ vov1=abo(i1)-aval(ity1)-diffvlp
+ dvov1dsumov=diffvlph*vpar(32)*vpar(33)*vho*vho*exphu1
+ exphuo=exp(vovun(ity1)*vov1)
+ hulpo=1.0/(1.0+exphuo)
+
+ hulpp=(1.0/(vov1+aval(ity1)+1e-8))
+
+ eah=sumov2*hulpp*hulpo*vov1
+ deadvov1=-sumov2*hulpp*hulpp*vov1*hulpo+
+ $sumov2*hulpp*hulpo-sumov2*hulpp*vov1*vovun(ity1)*
+ $hulpo*hulpo*exphuo
+
+ ea=ea+eah
+ estrain(i1)=estrain(i1)+eah !atom energy
+**********************************************************************
+* *
+* Calculate first derivative of overcoordination energy to *
+* cartesian coordinates *
+* *
+**********************************************************************
+ do i3=1,ia(i1,2)
+ iob=ia(i1,2+i3)
+ ncubo=nubon2(i1,i3)
+ if (bo(ncubo).gt.0.0) then
+ ibt=ib(ncubo,1)
+ deadbo=vover(ibt)*de1(ibt)*hulpp*hulpo*vov1
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = deadvov1*(1.0+dfvl*vho*dvlpdsbo(i1))*
+ $dbondc(ncubo,k1,i4)+deadbo*dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ do i2=1,ia(i1,2)
+
+ iat2=ia(i1,2+i2)
+ ity2=ia(iat2,1)
+ nbosa=nubon2(i1,i2)
+ if (bo(nbosa).gt.0.0) then
+ deadvov2=deadvov1*dvov1dsumov*(bopi(nbosa)+bopi2(nbosa))
+
+ voptlp2=0.50*(stlp(ity2)-aval(ity2))
+ diffvlp2=dfvl*(voptlp2-vlptemp(iat2))
+ deadpibo=deadvov1*dvov1dsumov*(abo(iat2)-aval(ity2)-diffvlp2)
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(nbosa)
+ ihu=idbo(nbosa,i4)
+ do k1=1,3
+ ftmp = deadpibo*(dbopindc(nbosa,k1,i4)+
+ $dbopi2ndc(nbosa,k1,i4))
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(nbosa)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(nbosa)
+ ihu=idbo(nbosa,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+ endif
+
+ do i3=1,ia(iat2,2)
+ iob=ia(iat2,2+i3)
+ ncubo=nubon2(iat2,i3)
+ if (bo(ncubo).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = deadvov2*(1.0+dfvl*dvlpdsbo(iat2))*
+ $dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ endif
+
+ end do
+
+**********************************************************************
+* *
+* Calculate undercoordination energy *
+* *
+**********************************************************************
+ if (valp1(ity1).lt.zero) goto 30 !skip undercoordination
+ exphu2=exp(vpar(10)*sumov)
+ vuhu1=1.0+vpar(9)*exphu2
+ hulpu2=1.0/vuhu1
+
+ exphu3=-exp(vpar(7)*vov1)
+ hulpu3=-(1.0+exphu3)
+
+ dise2=valp1(ity1)
+ exphuu=exp(-vovun(ity1)*vov1)
+ hulpu=1.0/(1.0+exphuu)
+ eahu=dise2*hulpu*hulpu2*hulpu3
+ deaudvov1=dise2*hulpu2*vovun(ity1)*hulpu*hulpu*exphuu*hulpu3-
+ $dise2*hulpu*hulpu2*vpar(7)*exphu3
+
+ ea=ea+eahu
+ estrain(i1)=estrain(i1)+eahu !atom energy
+
+ deaudsumov=-dise2*hulpu*vpar(9)*vpar(10)*hulpu3*exphu2*
+ $hulpu2*hulpu2
+
+**********************************************************************
+* *
+* Calculate first derivative of atom energy to cartesian *
+* coordinates *
+* *
+**********************************************************************
+
+ do i3=1,ia(i1,2)
+ iob=ia(i1,2+i3)
+ ncubo=nubon2(i1,i3)
+ if (bo(ncubo).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = deaudvov1*(1.0+dfvl*vho*dvlpdsbo(i1))*
+ $dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ do i2=1,ia(i1,2)
+
+ iat2=ia(i1,2+i2)
+ ity2=ia(iat2,1)
+ nbosa=nubon2(i1,i2)
+ if (bo(nbosa).gt.0.0) then
+ deadvov2=(deaudsumov+dvov1dsumov*deaudvov1)*
+ $(bopi(nbosa)+bopi2(nbosa))
+
+ voptlp2=0.50*(stlp(ity2)-aval(ity2))
+ diffvlp2=dfvl*(voptlp2-vlptemp(iat2))
+ deadpibo1=(dvov1dsumov*deaudvov1+deaudsumov)*
+ $(abo(iat2)-aval(ity2)-diffvlp2)
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(nbosa)
+ ihu=idbo(nbosa,i4)
+ do k1=1,3
+ ftmp = deadpibo1*
+ $(dbopindc(nbosa,k1,i4)+dbopi2ndc(nbosa,k1,i4))
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(nbosa)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(nbosa)
+ ihu=idbo(nbosa,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ do i3=1,ia(iat2,2)
+ iob=ia(iat2,2+i3)
+ ncubo=nubon2(iat2,i3)
+ if (bo(ncubo).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = deadvov2*(1.0+dfvl*dvlpdsbo(iat2))*
+ $dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ endif
+
+ end do
+
+
+ 30 continue
+
+**********************************************************************
+* *
+* Calculate correction for C2 *
+* *
+**********************************************************************
+ if (abs(vpar(6)).gt.0.001) then
+ do 40 i1=1,na_local
+ ity1=ia(i1,1)
+ vov4=abo(i1)-aval(ity1)
+
+ do i2=1,ia(i1,2)
+ iat2=ia(i1,2+i2)
+ nbohu=nubon2(i1,i2)
+ if (bo(nbohu).gt.0.0) then
+
+ ibt=ib(nbohu,1)
+ elph=zero
+ deahu2dbo=zero
+ deahu2dsbo=zero
+ vov3=bo(nbohu)-vov4-0.040*(vov4**4)
+ if (vov3.gt.3.0) then
+ elph=vpar(6)*(vov3-3.0)*(vov3-3.0)
+ deahu2dbo=2.0*vpar(6)*(vov3-3.0)
+ deahu2dsbo=2.0*vpar(6)*(vov3-3.0)*(-1.0-
+ $0.16*(vov4**3))
+ end if
+
+ elp=elp+elph
+ estrain(i1)=estrain(i1)+elph !atom energy
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(nbohu)
+ ihu=idbo(nbohu,i3)
+ do k1=1,3
+ ftmp = deahu2dbo*dbondc(nbohu,k1,i3)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(nbohu)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(nbohu)
+ ihu=idbo(nbohu,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ do i3=1,ia(i1,2)
+ iob=ia(i1,2+i3)
+ ncubo=nubon2(i1,i3)
+ if (bo(ncubo).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = deahu2dsbo*dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ end if
+ end do
+
+ end if
+ end do
+
+ 40 continue
+ end if
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine molen
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkbo.blk"
+#include "cbkconst.blk"
+#include "cbkc.blk"
+#include "cbkd.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbknmolat.blk"
+#include "cbknubon2.blk"
+#include "control.blk"
+#include "small.blk"
+ dimension virial_tmp(3,3),virialsym(6)
+**********************************************************************
+* *
+* Calculate molecular energy and first derivatives *
+* Only used to prevent creating virtual electrons *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In molen'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ emol=zero
+ return
+ do i1=1,nmolo
+
+ enelm=0.0
+ do i2=1,na
+ if (ia(i2,3+mbond).eq.i1) then
+ it1=ia(i2,1)
+ enelm=enelm+aval(it1)
+ end if
+ end do
+
+ na1m=nmolat(i1,1)
+
+ enelm=2*int(enelm*0.50)
+* enelm=elmol(i1)
+ bomsum=zero
+ do i2=1,na1m
+ ihu=nmolat(i1,i2+1)
+ do i3=1,ia(ihu,2)
+ ihu2=nubon2(ihu,i3)
+ bomsum=bomsum+bo(ihu2)
+ end do
+ end do
+ diff=(bomsum-enelm)
+ exphu=exp(-vpar(37)*diff)
+ exphu2=1.0/(1.0+15.0*exphu)
+ emolh=zero
+ demoldsbo=zero
+ emolh=vpar(38)*exphu2
+ emol=emol+emolh
+ demoldsbo=vpar(38)*vpar(37)*15.0*exphu2*exphu2*exphu
+
+ do i2=1,na1m
+ ihu1=nmolat(i1,i2+1)
+ do i3=1,ia(ihu1,2)
+ iob=ia(ihu1,2+i3)
+ ncubo=nubon2(ihu1,i3)
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ do k1=1,3
+ ftmp = demoldsbo*dbondc(ncubo,k1,i4)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i4=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i4)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ end do
+ end do
+
+
+ end do
+
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine valang
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkbo.blk"
+#include "cbkbopi.blk"
+#include "cbkbopi2.blk"
+#include "cbkconst.blk"
+#include "cbkc.blk"
+#include "cbkd.blk"
+#include "cbkdbopi2ndc.blk"
+#include "cbkdbopindc.blk"
+#include "cbkdcell.blk"
+#include "cbkdhdc.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkh.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbklonpar.blk"
+#include "cbknubon2.blk"
+#include "cbkvalence.blk"
+#include "control.blk"
+#include "valang.blk"
+#include "small.blk"
+ dimension j(3)
+ dimension virial_tmp(3,3),virialsym(6)
+**********************************************************************
+* *
+* Calculate valency angle energies and first derivatives *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In valang'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+* eco=0.0
+ ev=0.0
+ ecoa=0.0
+ if (nval.eq.0) return
+
+ do 10 i1=1,nval
+ ity=iv(i1,1)
+ j(1)=iv(i1,2)
+ j(2)=iv(i1,3)
+ j(3)=iv(i1,4)
+
+ if (j(2) .le. na_local) then
+
+ la=iv(i1,5)
+ lb=iv(i1,6)
+ boa=bo(la)-cutof2
+ bob=bo(lb)-cutof2
+ if (boa.lt.zero.or.bob.lt.zero) goto 10
+
+ hl=h(i1) ! Calculated earlier in routine calval
+**********************************************************************
+* *
+* Calculate valency angle energy *
+* *
+**********************************************************************
+ nbocen=ia(j(2),2)
+ sbo2=0.0
+ vmbo=1.0
+
+ do i2=1,nbocen
+ ibv=nubon2(j(2),i2)
+ if (bo(ibv).gt.0.0) then
+ vmbo=vmbo*exp(-bo(ibv)**8)
+ sbo2=sbo2+bopi(ibv)+bopi2(ibv)
+ endif
+ end do
+
+ ity2=ia(j(2),1)
+* exbo=abo(j(2))-stlp(ia(j(2),1))
+ exbo=abo(j(2))-valf(ity2)
+* if (exbo.gt.zero) exbo=zero
+* expov=exp(vka8(ity)*exbo)
+* expov2=exp(-vpar(13)*exbo)
+* htov1=2.0+expov2
+* htov2=1.0+expov+expov2
+* evboadj=htov1/htov2
+ evboadj=1.0
+ expun=exp(-vkac(ity)*exbo)
+ expun2=exp(vpar(15)*exbo)
+ htun1=2.0+expun2
+ htun2=1.0+expun+expun2
+ evboadj2=vval4(ity2)-(vval4(ity2)-1.0)*htun1/htun2
+**********************************************************************
+* *
+* Calculate number of lone pairs *
+* *
+**********************************************************************
+ dsbo2dvlp=(1.0-vmbo)
+ vlpadj=zero
+ exlp1=abo(j(2))-stlp(ia(j(2),1))
+ exlp2=2.0*int(exlp1/2.0)
+ exlp=exlp1-exlp2
+ if (exlp.lt.zero) then
+* expvlp=exp(-vpar(16)*(2.0+exlp)*(2.0+exlp))
+* vlpadj=expvlp-int(exlp1/2.0)
+* dsbo2dvlp=(1.0-vmbo)*(1.0-vpar(34)*2.0*
+* $(2.0+exlp)*vpar(16)*expvlp)
+ vlpadj=vlp(j(2))
+ dsbo2dvlp=(1.0-vmbo)*(1.0+vpar(34)*dvlpdsbo(j(2)))
+ end if
+
+ sbo2=sbo2+(1.0-vmbo)*(-exbo-vpar(34)*vlpadj)
+ dsbo2dvmbo=exbo+vpar(34)*vlpadj
+
+ sbo2h=sbo2
+ powv=vpar(17)
+ if (sbo2.le.0.0) sbo2h=0.0
+ if (sbo2.gt.0.0.and.sbo2.le.1.0) sbo2h=sbo2**powv
+ if (sbo2.gt.1.0.and.sbo2.lt.2.0) sbo2h=2.0-(2.0-sbo2)**powv
+ if (sbo2.gt.2.0) sbo2h=2.0
+ thba=th0(ity)
+ expsbo=exp(-vpar(18)*(2.0-sbo2h))
+ thetao=180.0-thba*(1.0-expsbo)
+
+ thetao=thetao*dgrrdn
+ thdif=(thetao-hl)
+ thdi2=thdif*thdif
+ dthsbo=dgrrdn*thba*vpar(18)*expsbo
+ if (sbo2.lt.0.0) dthsbo=zero
+ if (sbo2.gt.0.0.and.sbo2.le.1.0)
+ $dthsbo=powv*(sbo2**(powv-1.0))*dgrrdn*thba*vpar(18)*expsbo
+ if (sbo2.gt.1.0.and.sbo2.lt.2.0)
+ $dthsbo=powv*((2.0-sbo2)**(powv-1.0))*dgrrdn*thba*vpar(18)*expsbo
+ if (sbo2.gt.2.0) dthsbo=zero
+
+ exphu=vka(ity)*exp(-vka3(ity)*thdi2)
+ exphu2=vka(ity)-exphu
+ if (vka(ity).lt.zero) exphu2=exphu2-vka(ity) !To avoid linear Me-H-Me angles (6/6/06)
+ boap=boa**vval2(ity)
+ boap2=boa**(vval2(ity)-1.0)
+ bobp=bob**vval2(ity)
+ bobp2=bob**(vval2(ity)-1.0)
+ exa=exp(-vval1(ity2)*boap)
+ exb=exp(-vval1(ity2)*bobp)
+ dexadboa=vval2(ity)*vval1(ity2)*exa*boap2
+ dexbdbob=vval2(ity)*vval1(ity2)*exb*bobp2
+ exa2=(1.0-exa)
+ exb2=(1.0-exb)
+
+ evh=evboadj2*evboadj*exa2*exb2*exphu2
+ devdlb=evboadj2*evboadj*dexbdbob*exa2*exphu2
+ devdla=evboadj2*evboadj*dexadboa*exb2*exphu2
+ devdsbo=2.0*evboadj2*evboadj*dthsbo*exa2*exb2*
+ $vka3(ity)*thdif*exphu
+ devdh=-2.0*evboadj2*evboadj*exa2*exb2*vka3(ity)*thdif*exphu
+
+ devdsbo2=
+ $evboadj*exa2*exb2*exphu2*(vval4(ity2)-1.0)*(-vpar(15)*expun2/htun2
+ $+htun1*(vpar(15)*expun2-vkac(ity)*expun)/(htun2*htun2))
+
+* devdsbo2=-evboadj2*exa2*exb2*exphu2*(vpar(13)*expov2/htov2+
+* $htov1*(vka8(ity)*expov-vpar(13)*expov2)/(htov2*htov2))+
+* $evboadj*exa2*exb2*exphu2*(vpar(14)-1.0)*(-vpar(15)*expun2/htun2
+* $+htun1*(vpar(15)*expun2-vkac(ity)*expun)/(htun2*htun2))
+
+ if (j(2) .le. na_local) then
+ ev=ev+evh
+ estrain(j(2))=estrain(j(2))+evh !central atom energy
+ endif
+
+* write (64,'(4i8,18f8.2)')mdstep,j(1),j(2),j(3),sbo2,sbo2h,
+* $thetao*rdndgr,hl*rdndgr,bo(la),bo(lb),bopi(la),
+* $vlp(j(2)),exbo,vlpadj,vmbo,evh,ev,vka(ity)
+**********************************************************************
+* *
+* Calculate penalty for two double bonds in valency angle *
+* *
+**********************************************************************
+ exbo=abo(j(2))-aval(ia(j(2),1))
+ expov=exp(vpar(22)*exbo)
+ expov2=exp(-vpar(21)*exbo)
+ htov1=2.0+expov2
+ htov2=1.0+expov+expov2
+ ecsboadj=htov1/htov2
+ exphu1=exp(-vpar(20)*(boa-2.0)*(boa-2.0))
+ exphu2=exp(-vpar(20)*(bob-2.0)*(bob-2.0))
+
+ epenh=vkap(ity)*ecsboadj*exphu1*exphu2
+ estrain(j(2))=estrain(j(2))+epenh
+ epen=epen+epenh
+ decoadboa=-2.0*vpar(20)*epenh*(boa-2.0)
+ decoadbob=-2.0*vpar(20)*epenh*(bob-2.0)
+
+ decdsbo2=-vkap(ity)*exphu1*exphu2*(vpar(21)*expov2/htov2+htov1*
+ $(vpar(22)*expov-vpar(21)*expov2)/(htov2*htov2))
+**********************************************************************
+* *
+* Calculate valency angle conjugation energy *
+* *
+**********************************************************************
+ unda=abo(j(1))-boa
+* ovb=abo(j(2))-valf(ia(j(2),1))
+ ovb=abo(j(2))-vval3(ia(j(2),1)) !Modification for Ru 7/6/2004
+
+ undc=abo(j(3))-bob
+ ba=(boa-1.50)*(boa-1.50)
+ bb=(bob-1.50)*(bob-1.50)
+ exphua=exp(-vpar(31)*ba)
+ exphub=exp(-vpar(31)*bb)
+ exphuua=exp(-vpar(39)*unda*unda)
+ exphuob=exp(vpar(3)*ovb)
+ exphuuc=exp(-vpar(39)*undc*undc)
+ hulpob=1.0/(1.0+exphuob)
+ ecoah=vka8(ity)*exphua*exphub*exphuua*exphuuc*hulpob
+ decodbola=-2.0*vka8(ity)*(boa-1.50)*vpar(31)*exphua*exphub
+ $*exphuua*exphuuc*hulpob+vpar(39)*vka8(ity)*exphua*exphub*
+ $exphuua*exphuuc*hulpob*2.0*unda
+ decodbolb=-2.0*vka8(ity)*(bob-1.50)*vpar(31)*exphua*exphub
+ $*exphuua*exphuuc*hulpob+vpar(39)*vka8(ity)*exphua*exphub*
+ $exphuua*exphuuc*hulpob*2.0*undc
+ decodboua=-2.0*unda*vka8(ity)*vpar(39)*exphua*exphub
+ $*exphuua*exphuuc*hulpob
+ decodbouc=-2.0*undc*vka8(ity)*vpar(39)*exphua*exphub
+ $*exphuua*exphuuc*hulpob
+ decodboob=-vka8(ity)*exphua*exphub*exphuua*exphuuc*hulpob*
+ $hulpob*vpar(3)*exphuob
+* decodboob=zero
+* decodboua=zero
+* decodbouc=zero
+
+ ecoa=ecoa+ecoah
+ estrain(j(2))=estrain(j(2))+ecoah !central atom energy
+
+**********************************************************************
+* *
+* Calculate derivative valency energy to cartesian coordinates *
+* *
+**********************************************************************
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do k1=1,3
+ do k2=1,3
+ ftmp = devdh*dhdc(i1,k1,k2)
+ d(k1,j(k2))=d(k1,j(k2))+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(j(k2),k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/3
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do k2=1,3
+ ihu=j(k2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(la)
+ ihu=idbo(la,i2)
+ do k1=1,3
+ ftmp = (devdla+decoadboa+decodbola)*
+ $dbondc(la,k1,i2)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(la)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(la)
+ ihu=idbo(la,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(lb)
+ ihu=idbo(lb,i2)
+ do k1=1,3
+ ftmp = (devdlb+decoadbob+decodbolb)*
+ $dbondc(lb,k1,i2)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(lb)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(lb)
+ ihu=idbo(lb,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ do i2=1,nbocen
+ j5=ia(j(2),2+i2)
+ ibv=nubon2(j(2),i2)
+ if (bo(ibv).gt.0.0) then
+ dvmbodbo=-vmbo*8.0*bo(ibv)**7
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ do k1=1,3
+ ftmp = (-dsbo2dvlp*devdsbo+devdsbo2+decdsbo2
+ $+dvmbodbo*dsbo2dvmbo*devdsbo)*
+ $dbondc(ibv,k1,i3)+devdsbo*(dbopindc(ibv,k1,i3)+
+ $dbopi2ndc(ibv,k1,i3))
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ibv)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ do i2=1,ia(j(1),2)
+ j5=ia(j(1),2+i2)
+ ibv=nubon2(j(1),i2)
+ if (bo(ibv).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ do k1=1,3
+ ftmp = decodboua*dbondc(ibv,k1,i3)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ibv)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ do i2=1,ia(j(2),2)
+ j5=ia(j(2),2+i2)
+ ibv=nubon2(j(2),i2)
+ if (bo(ibv).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ do k1=1,3
+ ftmp = decodboob*dbondc(ibv,k1,i3)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ibv)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ do i2=1,ia(j(3),2)
+ j5=ia(j(3),2+i2)
+ ibv=nubon2(j(3),i2)
+ if (bo(ibv).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ do k1=1,3
+ ftmp = decodbouc*dbondc(ibv,k1,i3)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ibv)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(ibv)
+ ihu=idbo(ibv,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ endif
+
+ 10 continue
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine hbond
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkbo.blk"
+#include "cbkconst.blk"
+#include "cbkc.blk"
+#include "cbkd.blk"
+#include "cbkdcell.blk"
+#include "cbkenergies.blk"
+#include "cbkidbo.blk"
+#include "cbksrthb.blk"
+#include "control.blk"
+#include "cbkhbond.blk"
+#include "small.blk"
+ dimension drda(3),j(3),dvdc(3,3),dargdc(3,3)
+ dimension virial_tmp(3,3),virialsym(6)
+**********************************************************************
+* *
+* Calculate hydrogen bond energies and first derivatives *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In hbond'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ ehb=zero
+ do 10 i1=1,nhb
+ ityhb=ihb(i1,1)
+ j(1)=ihb(i1,2)
+ j(2)=ihb(i1,3)
+ j(3)=ihb(i1,4)
+ la=ihb(i1,5)
+ boa=bo(la)
+ call dista2(j(2),j(3),rda,dxm,dym,dzm)
+ drda(1)=dxm/rda
+ drda(2)=dym/rda
+ drda(3)=dzm/rda
+ call calvalhb(j(1),j(2),j(3),ix,iy,iz,arg,hhb(i1),dvdc,dargdc)
+ rhu1=rhb(ityhb)/rda
+ rhu2=rda/rhb(ityhb)
+ sinhu=sin(hhb(i1)/2.0)
+ sin2=sinhu*sinhu
+ exphu1=exp(-vhb1(ityhb)*boa)
+ exphu2=exp(-vhb2(ityhb)*(rhu1+rhu2-2.0))
+ ehbh=(1.0-exphu1)*dehb(ityhb)*exphu2*sin2*sin2*sin2*sin2
+ ehb=ehb+ehbh
+ estrain(j(2))=estrain(j(2))+ehbh !2nd atom energy
+
+**********************************************************************
+* *
+* Calculate first derivatives *
+* *
+**********************************************************************
+ dehbdbo=vhb1(ityhb)*exphu1*dehb(ityhb)*exphu2*sin2*sin2*
+ $sin2*sin2
+ dehbdv=(1.0-exphu1)*dehb(ityhb)*exphu2*
+ $4.0*sin2*sin2*sin2*sinhu*cos(hhb(i1)/2.0)
+ dehbdrda=(1.0-exphu1)*dehb(ityhb)*sin2*sin2*sin2*sin2*
+ $vhb2(ityhb)*(rhb(ityhb)/(rda*rda)-1.0/rhb(ityhb))*exphu2
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do k1=1,3
+ ftmp = dehbdrda*drda(k1)
+ d(k1,j(2))=d(k1,j(2))+ftmp
+ d(k1,j(3))=d(k1,j(3))-ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+
+ $ ftmp*c(j(2),k1p)-ftmp*c(j(3),k1p)
+ end do
+ endif
+
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/2
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ ihu = j(2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ ihu = j(3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do k1=1,3
+ do k2=1,3
+ ftmp = dehbdv*dvdc(k1,k2)
+ d(k1,j(k2))=d(k1,j(k2))+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(j(k2),k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/3
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do k2=1,3
+ ihu=j(k2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(la)
+ ihu=idbo(la,i2)
+ do k1=1,3
+ ftmp = dehbdbo*dbondc(la,k1,i2)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(la)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(la)
+ ihu=idbo(la,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ 10 continue
+ return
+ end
+
+**********************************************************************
+**********************************************************************
+
+ subroutine torang
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkabo.blk"
+#include "cbkbo.blk"
+#include "cbkbopi.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkdbopindc.blk"
+#include "cbkdcell.blk"
+#include "cbkdhdc.blk"
+#include "cbkdrdc.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkfftorang.blk"
+#include "cbkh.blk"
+#include "cbkia.blk"
+#include "cbkidbo.blk"
+#include "cbkinit.blk"
+#include "cbknubon2.blk"
+#include "cbkrbo.blk"
+#include "cbktorang.blk"
+#include "cbktorsion.blk"
+#include "cbktregime.blk"
+#include "cbkvalence.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+
+ DIMENSION A(3),DRDA(3),DADC(4),DRADC(3,4),DRBDC(3,4),
+ $DRCDC(3,4),DHDDC(3,4),DHEDC(3,4),DRVDC(3,4),DTDC(3,4),
+ $DNDC(3,4)
+ dimension j(4),dh1rdc(3,3),dh2rdc(3,3),dargdc(3,3)
+ dimension virial_tmp(3,3),virialsym(6)
+**********************************************************************
+* *
+* Calculate torsion angle energies and first derivatives *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In torang'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ do k1=1,3
+ do k2=1,4
+ dhddc(k1,k2)=0.0
+ dhedc(k1,k2)=0.0
+ dradc(k1,k2)=0.0
+ drbdc(k1,k2)=0.0
+ drcdc(k1,k2)=0.0
+ end do
+ end do
+ et=0.0
+ eth12=0.0
+ eco=0.0
+ dadc(1)=1.0
+ dadc(2)=0.0
+ dadc(3)=0.0
+ dadc(4)=-1.0
+ if (ntor.eq.0) return
+
+ do 10 i1=1,ntor
+ j(1)=it(i1,2)
+ j(2)=it(i1,3)
+ j(3)=it(i1,4)
+ j(4)=it(i1,5)
+
+ ity=it(i1,1)
+ la=it(i1,6)
+ lb=it(i1,7)
+ lc=it(i1,8)
+ call calvalres(j(1),j(2),j(3),arg1,ht1,dh1rdc,dargdc)
+ call calvalres(j(2),j(3),j(4),arg2,ht2,dh2rdc,dargdc)
+ boa=bo(la)-cutof2
+ bob=bo(lb)-cutof2
+ boc=bo(lc)-cutof2
+ if (boa.lt.zero.or.bob.lt.zero.or.boc.lt.zero)
+ $goto 10
+ r42=0.0
+ ivl1=ibsym(la)
+ ivl2=ibsym(lb)
+ ivl3=ibsym(lc)
+ isign1=1
+ isign2=1
+ isign3=1
+ rla=rbo(la)
+ rlb=rbo(lb)
+
+ call dista2(j(1),j(4),r4,a(1),a(2),a(3))
+**********************************************************************
+* *
+* Determine torsion angle *
+* *
+**********************************************************************
+ d142=r4*r4
+ rla=rbo(la)
+ rlb=rbo(lb)
+ rlc=rbo(lc)
+ coshd=cos(ht1)
+ coshe=cos(ht2)
+ sinhd=sin(ht1)
+ sinhe=sin(ht2)
+ poem=2.0*rla*rlc*sinhd*sinhe
+ poem2=poem*poem
+ tel=rla*rla+rlb*rlb+rlc*rlc-d142-2.0*(rla*rlb*coshd-rla*rlc*
+ $coshd*coshe+rlb*rlc*coshe)
+ if (poem.lt.1e-20) poem=1e-20
+ arg=tel/poem
+ if (arg.gt.1.0) arg=1.0
+ if (arg.lt.-1.0) arg=-1.0
+ arg2=arg*arg
+ thg(i1)=acos(arg)*rdndgr
+ k1=j(1)
+ k2=j(2)
+ k3=j(3)
+ k4=j(4)
+ call dista2(k3,k2,dis,x3,y3,z3)
+ y32z32=y3*y3+z3*z3
+ wort1=sqrt(y32z32)+1e-6
+ wort2=sqrt(y32z32+x3*x3)+1e-6
+* if (wort1.lt.1e-6) wort1=1e-6
+* if (wort2.lt.1e-6) wort2=1e-6
+ sinalf=y3/wort1
+ cosalf=z3/wort1
+ sinbet=x3/wort2
+ cosbet=wort1/wort2
+ call dista2(k1,k2,dis,x1,y1,z1)
+ x1=x1*cosbet-y1*sinalf*sinbet-z1*cosalf*sinbet
+ y1=y1*cosalf-z1*sinalf
+ wort3=sqrt(x1*x1+y1*y1)+1e-6
+* if (wort3.lt.1e-6) wort3=1e-6
+ singam=y1/wort3
+ cosgam=x1/wort3
+ call dista2(k4,k2,dis,x4,y4,z4)
+ x4=x4*cosbet-y4*sinalf*sinbet-z4*cosalf*sinbet
+ y4=y4*cosalf-z4*sinalf
+ y4=x4*singam-y4*cosgam
+ if (y4.gt.0.0) thg(i1)=-thg(i1)
+ if (thg(i1).lt.-179.999999d0) thg(i1)=-179.999999d0
+ if (thg(i1).gt.179.999999d0) thg(i1)=179.999999d0
+ th2=thg(i1)*dgrrdn
+**********************************************************************
+* *
+* Calculate torsion angle energy *
+* *
+**********************************************************************
+ exbo1=abo(j(2))-valf(ia(j(2),1))
+ exbo2=abo(j(3))-valf(ia(j(3),1))
+ htovt=exbo1+exbo2
+ expov=exp(vpar(26)*htovt)
+ expov2=exp(-vpar(25)*(htovt))
+ htov1=2.0+expov2
+ htov2=1.0+expov+expov2
+ etboadj=htov1/htov2
+
+ btb2=bopi(lb)-1.0+etboadj
+ bo2t=1.0-btb2
+ bo2p=bo2t*bo2t
+ bocor2=exp(v4(ity)*bo2p)
+
+ hsin=sinhd*sinhe
+ ethhulp=0.50*v1(ity)*(1.0+arg)+v2(ity)*bocor2*(1.0-arg2)+
+ $v3(ity)*(0.50+2.0*arg2*arg-1.50*arg)
+
+ exphua=exp(-vpar(24)*boa)
+ exphub=exp(-vpar(24)*bob)
+ exphuc=exp(-vpar(24)*boc)
+ bocor4=(1.0-exphua)*(1.0-exphub)*(1.0-exphuc)
+ eth=hsin*ethhulp*bocor4
+
+ detdar=hsin*bocor4*(0.50*v1(ity)-2.0*v2(ity)*bocor2*arg+
+ $v3(ity)*(6.0*arg2-1.5d0))
+ detdhd=coshd*sinhe*bocor4*ethhulp
+ detdhe=sinhd*coshe*bocor4*ethhulp
+
+ detdboa=vpar(24)*exphua*(1.0-exphub)*(1.0-exphuc)*ethhulp*hsin
+ detdbopib=-bocor4*2.0*v4(ity)*v2(ity)*
+ $bo2t*bocor2*(1.0-arg2)*hsin
+ detdbob=vpar(24)*exphub*(1.0-exphua)*
+ $(1.0-exphuc)*ethhulp*hsin
+ detdboc=vpar(24)*exphuc*(1.0-exphua)*
+ $(1.0-exphub)*ethhulp*hsin
+
+ detdsbo1=-(detdbopib)*
+ $(vpar(25)*expov2/htov2+htov1*
+ $(vpar(26)*expov-vpar(25)*expov2)/(htov2*htov2))
+
+ et=et+eth
+ estrain(j(2))=estrain(j(2))+0.50*eth !2nd atom energy
+ estrain(j(3))=estrain(j(3))+0.50*eth !3rd atom energy
+
+**********************************************************************
+* *
+* Calculate conjugation energy *
+* *
+**********************************************************************
+ ba=(boa-1.50)*(boa-1.50)
+ bb=(bob-1.50)*(bob-1.50)
+ bc=(boc-1.50)*(boc-1.50)
+ exphua1=exp(-vpar(28)*ba)
+ exphub1=exp(-vpar(28)*bb)
+ exphuc1=exp(-vpar(28)*bc)
+ sbo=exphua1*exphub1*exphuc1
+ dbohua=-2.0*(boa-1.50)*vpar(28)*exphua1*exphub1*exphuc1
+ dbohub=-2.0*(bob-1.50)*vpar(28)*exphua1*exphub1*exphuc1
+ dbohuc=-2.0*(boc-1.50)*vpar(28)*exphua1*exphub1*exphuc1
+ arghu0=(arg2-1.0)*sinhd*sinhe
+ ehulp=vconj(ity)*(arghu0+1.0)
+ ecoh=ehulp*sbo
+ decodar=sbo*vconj(ity)*2.0*arg*sinhd*sinhe
+ decodbola=dbohua*ehulp
+ decodbolb=dbohub*ehulp
+ decodbolc=dbohuc*ehulp
+ decodhd=coshd*sinhe*vconj(ity)*sbo*(arg2-1.0)
+ decodhe=coshe*sinhd*vconj(ity)*sbo*(arg2-1.0)
+
+ eco=eco+ecoh
+ estrain(j(2))=estrain(j(2))+0.50*ecoh !2nd atom energy
+ estrain(j(3))=estrain(j(3))+0.50*ecoh !3rd atom energy
+
+ 1 continue
+**********************************************************************
+* *
+* Calculate derivative torsion angle and conjugation energy *
+* to cartesian coordinates *
+* *
+**********************************************************************
+ SINTH=SIN(THG(i1)*DGRRDN)
+ IF (SINTH.GE.0.0.AND.SINTH.LT.1.0D-10) SINTH=1.0D-10
+ IF (SINTH.LT.0.0.AND.SINTH.GT.-1.0D-10) SINTH=-1.0D-10
+ IF (j(1).EQ.IB(LA,2)) THEN
+ DO K1=1,3
+ DRADC(K1,1)=DRDC(LA,K1,1)
+ DRADC(K1,2)=DRDC(LA,K1,2)
+ end do
+ ELSE
+ DO K1=1,3
+ DRADC(K1,1)=DRDC(LA,K1,2)
+ DRADC(K1,2)=DRDC(LA,K1,1)
+ end do
+ ENDIF
+ IF (j(2).EQ.IB(LB,2)) THEN
+ DO K1=1,3
+ DRBDC(K1,2)=DRDC(LB,K1,1)
+ DRBDC(K1,3)=DRDC(LB,K1,2)
+ end do
+ ELSE
+ DO K1=1,3
+ DRBDC(K1,2)=DRDC(LB,K1,2)
+ DRBDC(K1,3)=DRDC(LB,K1,1)
+ end do
+ ENDIF
+ IF (j(3).EQ.IB(LC,2)) THEN
+ DO K1=1,3
+ DRCDC(K1,3)=DRDC(LC,K1,1)
+ DRCDC(K1,4)=DRDC(LC,K1,2)
+ end do
+ ELSE
+ DO K1=1,3
+ DRCDC(K1,3)=DRDC(LC,K1,2)
+ DRCDC(K1,4)=DRDC(LC,K1,1)
+ end do
+ ENDIF
+
+ do k1=1,3
+ dhddc(1,k1)=dh1rdc(1,k1)
+ dhddc(2,k1)=dh1rdc(2,k1)
+ dhddc(3,k1)=dh1rdc(3,k1)
+ dhedc(1,k1+1)=dh2rdc(1,k1)
+ dhedc(2,k1+1)=dh2rdc(2,k1)
+ dhedc(3,k1+1)=dh2rdc(3,k1)
+ end do
+
+**********************************************************************
+* write (64,*)j(1),j(2),j(3),j(4)
+* do k1=1,3
+* write (64,'(10f12.4)')(dh1rdc(k1,k2),k2=1,3),
+* $(dhdc(ld,k1,k2),k2=1,3),(dhddc(k1,k2),k2=1,4)
+* write (64,'(10f12.4)')(dh2rdc(k1,k2),k2=1,3),
+* $(dhdc(le,k1,k2),k2=1,3),(dhedc(k1,k2),k2=1,4)
+* end do
+* write (64,*)
+**********************************************************************
+ HTRA=RLA+COSHD*(RLC*COSHE-RLB)
+ HTRB=RLB-RLA*COSHD-RLC*COSHE
+ HTRC=RLC+COSHE*(RLA*COSHD-RLB)
+ HTHD=RLA*SINHD*(RLB-RLC*COSHE)
+ HTHE=RLC*SINHE*(RLB-RLA*COSHD)
+ HNRA=RLC*SINHD*SINHE
+ HNRC=RLA*SINHD*SINHE
+ HNHD=RLA*RLC*COSHD*SINHE
+ HNHE=RLA*RLC*SINHD*COSHE
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ DO K1=1,3
+ DRDA(K1)=A(K1)/R4
+ DO K2=1,4
+ DRVDC(K1,K2)=DRDA(K1)*DADC(K2)
+ DTDC(K1,K2)=2.0*(DRADC(K1,K2)*HTRA+DRBDC(K1,K2)*HTRB+DRCDC(K1,K2
+ $)*HTRC-DRVDC(K1,K2)*R4+DHDDC(K1,K2)*HTHD+DHEDC(K1,K2)*HTHE)
+ DNDC(K1,K2)=2.0*(DRADC(K1,K2)*HNRA+DRCDC(K1,K2)*HNRC+DHDDC(K1,K2
+ $)*HNHD+DHEDC(K1,K2)*HNHE)
+ DARGTDC(i1,K1,K2)=(DTDC(K1,K2)-ARG*DNDC(K1,K2))/POEM
+
+ ftmp = DARGTDC(i1,K1,K2)*detdar+
+ $dargtdc(i1,k1,k2)*decodar+(detdhd+decodhd)*dhddc(k1,k2)+
+ $(detdhe+decodhe)*dhedc(k1,k2)
+ D(K1,J(K2))=D(K1,J(K2))+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(j(k2),k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/4
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do k2=1,4
+ ihu=j(k2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(la)
+ ihu=idbo(la,i2)
+ do k1=1,3
+ ftmp = dbondc(la,k1,i2)*(detdboa+decodbola)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(la)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(la)
+ ihu=idbo(la,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(lb)
+ ihu=idbo(lb,i2)
+ do k1=1,3
+ ftmp = dbondc(lb,k1,i2)*(detdbob+decodbolb)
+ $ +dbopindc(lb,k1,i2)*detdbopib
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(lb)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(lb)
+ ihu=idbo(lb,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i2=1,idbo1(lc)
+ ihu=idbo(lc,i2)
+ do k1=1,3
+ ftmp = dbondc(lc,k1,i2)*(detdboc+decodbolc)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(lc)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i2=1,idbo1(lc)
+ ihu=idbo(lc,i2)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ do i2=1,ia(j(2),2)
+ iob=ia(j(2),2+i2)
+ ncubo=nubon2(j(2),i2)
+ if (bo(ncubo).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i3)
+ do k1=1,3
+ ftmp = detdsbo1*dbondc(ncubo,k1,i3)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ do i2=1,ia(j(3),2)
+ iob=ia(j(3),2+i2)
+ ncubo=nubon2(j(3),i2)
+ if (bo(ncubo).gt.0.0) then
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do i3=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i3)
+ do k1=1,3
+ ftmp = detdsbo1*dbondc(ncubo,k1,i3)
+ d(k1,ihu)=d(k1,ihu)+ftmp
+
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k1,k1p)=virial_tmp(k1,k1p)+ftmp*c(ihu,k1p)
+ end do
+ endif
+
+ end do
+ end do
+
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/idbo1(ncubo)
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ do i3=1,idbo1(ncubo)
+ ihu=idbo(ncubo,i3)
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ end do
+ endif
+
+ endif
+
+ endif
+ end do
+
+ 10 continue
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine nonbon
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkch.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkdcell.blk"
+#include "cbkenergies.blk"
+#include "cbkff.blk"
+#include "cbkia.blk"
+#include "cbknonbon.blk"
+#include "cbkpairs.blk"
+#include "cbknvlown.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+
+ dimension a(3),da(6)
+ dimension virial_tmp(3,3),virialsym(6)
+**********************************************************************
+* *
+* Calculate vdWaals and Coulomb energies and derivatives *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In nonbon'
+c$$$ call timer(65)
+c$$$ end if
+
+ ew=0.0
+ ep=0.0
+
+ c1c=332.0638
+ third=one/three
+ fothird=4.0/3.0
+ twothird=2.0/3.0
+ h15=(vpar(29)-1.0)/vpar(29)
+
+ nptmp=0
+ nstmp=0
+ do 10 ivl=1,nvpair-nvlself
+c Use precomputed midpoint criterion to decide if interaction is owned.
+ if (nvlown(ivl).eq.1) then
+
+ i1=nvl1(ivl)
+ i2=nvl2(ivl)
+
+ call dista2(i1,i2,rr,a(1),a(2),a(3))
+ if (rr.gt.swb.or.rr.lt.0.001) goto 10
+
+ ity1=ia(i1,1)
+ ity2=ia(i2,1)
+ imol1=iag(i1,3+mbond)
+ imol2=iag(i2,3+mbond)
+ rr2=rr*rr
+
+ sw=1.0
+ sw1=0.0
+ call taper(rr,rr2)
+**********************************************************************
+* *
+* Calculate vdWaals energy *
+* *
+**********************************************************************
+ p1=p1co(ity1,ity2)
+ p2=p2co(ity1,ity2)
+ p3=p3co(ity1,ity2)
+ hulpw=(rr**vpar(29)+gamwco(ity1,ity2))
+ rrw=hulpw**(1.0/vpar(29))
+ h1=exp(p3*(1.0-rrw/p1))
+ h2=exp(0.50*p3*(1.0-rrw/p1))
+
+ ewh=p2*(h1-2.0*h2)
+ rrhuw=rr**(vpar(29)-1.0)
+ dewdr=(p2*p3/p1)*(h2-h1)*rrhuw*(hulpw**(-h15))
+
+**********************************************************************
+* *
+* Calculate Coulomb energy *
+* *
+**********************************************************************
+ q1q2=ch(i1)*ch(i2)
+ hulp1=(rr2*rr+gamcco(ity1,ity2))
+ eph=c1c*q1q2/(hulp1**third)
+ depdr=-c1c*q1q2*rr2/(hulp1**fothird)
+**********************************************************************
+* *
+* Taper correction *
+* *
+**********************************************************************
+ ephtap=eph*sw
+ depdrtap=depdr*sw+eph*sw1
+ ewhtap=ewh*sw
+ dewdrtap=dewdr*sw+ewh*sw1
+
+* write (64,*)i1,i2,p1,p2,p3,gamwco(ity1,ity2),vpar(29),ewh,ew
+ ew=ew+ewhtap
+ ep=ep+ephtap
+ estrain(i1)=estrain(i1)+0.50*(ewhtap+ephtap) !1st atom energy
+ estrain(i2)=estrain(i2)+0.50*(ewhtap+ephtap) !2nd atom energy
+
+**********************************************************************
+* *
+* Calculate derivatives vdWaals energy to cartesian *
+* coordinates *
+* *
+**********************************************************************
+
+ if (Lvirial.eq.1) then
+ do k1=1,3
+ do k2=1,3
+ virial_tmp(k1,k2) = 0.0
+ end do
+ end do
+ endif
+
+ do k4=1,3
+ ftmp = (dewdrtap+depdrtap)*(a(k4)/rr)
+ d(k4,i1)=d(k4,i1)+ftmp
+ d(k4,i2)=d(k4,i2)-ftmp
+ if (Lvirial.eq.1) then
+ do k1p=1,3
+ virial_tmp(k4,k1p)=virial_tmp(k4,k1p)+
+ $ ftmp*c(i1,k1p)-ftmp*c(i2,k1p)
+ end do
+ endif
+ end do
+
+ if (Lvirial.eq.1) then
+ virialsym(1) = virial_tmp(1,1)
+ virialsym(2) = virial_tmp(2,2)
+ virialsym(3) = virial_tmp(3,3)
+ virialsym(4) = virial_tmp(1,2)
+ virialsym(5) = virial_tmp(1,3)
+ virialsym(6) = virial_tmp(2,3)
+ do k1 = 1,6
+ virial(k1) = virial(k1) + virialsym(k1)
+ end do
+
+ if (Latomvirial.eq.1) then
+ frac = 1.0d0/2
+ do k1 = 1,6
+ vtmp = virialsym(k1)*frac
+ ihu=i1
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ ihu=i2
+ atomvirial(k1,ihu) = atomvirial(k1,ihu) + vtmp
+ end do
+ endif
+
+ endif
+
+ endif
+
+ 10 continue
+
+ return
+ end
+
+**********************************************************************
+**********************************************************************
+
+ subroutine efield
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkch.blk"
+#include "cbkcha.blk"
+#include "cbkd.blk"
+#include "cbkefield.blk"
+#include "cbkenergies.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "small.blk"
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In efield'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+**********************************************************************
+* *
+* Electric field *
+* *
+**********************************************************************
+ efi=0.0
+ efix=0.0
+ efiy=0.0
+ efiz=0.0
+ c1c=332.0638 !Coulomb energy conversion
+ c1=23.02 !conversion from kcal to eV
+
+ if (ifieldx.eq.1) then
+ do i1=1,na
+ efih=vfieldx*c1*c1c*ch(i1)*c(i1,1)
+ efix=efix+efih
+ estrain(i1)=estrain(i1)+efih !atom energy
+
+ defidc=c1*c1c*vfieldx*ch(i1)
+ d(1,i1)=d(1,i1)+defidc
+ end do
+ end if
+
+ if (ifieldy.eq.1) then
+ do i1=1,na
+ efih=vfieldy*c1*c1c*ch(i1)*c(i1,2)
+ efiy=efiy+efih
+ estrain(i1)=estrain(i1)+efih !atom energy
+
+ defidc=c1*c1c*vfieldy*ch(i1)
+ d(2,i1)=d(2,i1)+defidc
+ end do
+ end if
+
+ if (ifieldz.eq.1) then
+ do i1=1,na
+ efih=vfieldz*c1*c1c*ch(i1)*c(i1,3)
+ efiz=efiz+efih
+ estrain(i1)=estrain(i1)+efih !atom energy
+
+ defidc=c1*c1c*vfieldz*ch(i1)
+ d(3,i1)=d(3,i1)+defidc
+ end do
+ end if
+
+ efi=efix+efiy+efiz
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine restraint
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkatomcoord.blk"
+#include "cbkc.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkenergies.blk"
+#include "cbkrestr.blk"
+#include "cbktorang.blk"
+#include "cbktorsion.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "small.blk"
+#include "cbkinit.blk"
+ dimension drda(3),j(4),dhrdc(3,3),dargdc(3,3)
+**********************************************************************
+* *
+* Calculate distance restraint energy *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In restraint'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ do i1=1,nrestra
+ ih1=irstra(i1,1)
+ ih2=irstra(i1,2)
+ if (itend(i1).eq.0.or.(mdstep.gt.itstart(i1).and.mdstep.lt.
+ $itend(i1))) then
+ call dista2(ih1,ih2,rr,dx,dy,dz)
+ diffr=rr-rrstra(i1)
+* diffr=rrstra(i1)
+ exphu=exp(-vkrst2(i1)*(diffr*diffr))
+ erh=vkrstr(i1)*(1.0-exphu)
+ deresdr=2.0*vkrst2(i1)*diffr*vkrstr(i1)*exphu
+* deresdr=-2.0*vkrst2(i1)*diffr*vkrstr(i1)*exphu
+ eres=eres+erh
+ drda(1)=dx/rr
+ drda(2)=dy/rr
+ drda(3)=dz/rr
+ do k1=1,3
+ d(k1,ih1)=d(k1,ih1)+deresdr*drda(k1)
+ d(k1,ih2)=d(k1,ih2)-deresdr*drda(k1)
+ end do
+ end if
+ end do
+
+**********************************************************************
+* *
+* Calculate angle restraint energy *
+* *
+**********************************************************************
+ do i1=1,nrestrav
+ j(1)=irstrav(i1,1)
+ j(2)=irstrav(i1,2)
+ j(3)=irstrav(i1,3)
+ ittr=0
+* do i2=1,nval
+* if (j(1).eq.iv(i2,2).and.j(2).eq.iv(i2,3).and.j(3).eq.iv(i2,4))
+* $ittr=i2
+* end do
+* if (ittr.eq.0) stop 'Wrong valence angle restraint'
+ call calvalres(j(1),j(2),j(3),arg,hr,dhrdc,dargdc)
+ vaval=hr*rdndgr
+ diffv=-(vaval-vrstra(i1))*dgrrdn
+ exphu=exp(-vkr2v(i1)*(diffv*diffv))
+ erh=vkrv(i1)*(1.0-exphu)
+ deresdv=-2.0*vkr2v(i1)*diffv*vkrv(i1)*exphu
+ eres=eres+erh
+ do k1=1,3
+ do k2=1,3
+ d(k1,j(k2))=d(k1,j(k2))+deresdv*dhrdc(k1,k2)
+ end do
+ end do
+
+ end do
+
+**********************************************************************
+* *
+* Calculate torsion restraint energy *
+* *
+**********************************************************************
+ do i1=1,nrestrat
+ j(1)=irstrat(i1,1)
+ j(2)=irstrat(i1,2)
+ j(3)=irstrat(i1,3)
+ j(4)=irstrat(i1,4)
+ ittr=0
+ do i2=1,ntor
+ if (j(1).eq.it(i2,2).and.j(2).eq.it(i2,3).and.j(3).eq.it(i2,4)
+ $.and.j(4).eq.it(i2,5)) ittr=i2
+ if (j(4).eq.it(i2,2).and.j(3).eq.it(i2,3).and.j(2).eq.it(i2,4)
+ $.and.j(1).eq.it(i2,5)) ittr=i2
+ end do
+ if (ittr.eq.0) then
+ write (*,*)'Wrong torsion restraint'
+ write (*,*)i1,j(1),j(2),j(3),j(4)
+ stop 'Wrong torsion restraint'
+ end if
+ vtor=thg(ittr)
+ difft=-(vtor-trstra(i1))*dgrrdn
+ exphu=exp(-vkr2t(i1)*(difft*difft))
+ erh=vkrt(i1)*(1.0-exphu)
+ deresdt=2.0*vkr2t(i1)*difft*vkrt(i1)*exphu
+ if (vtor.lt.zero) deresdt=-deresdt
+ eres=eres+erh
+ do k1=1,3
+ do k2=1,4
+ d(k1,j(k2))=d(k1,j(k2))+deresdt*dargtdc(ittr,k1,k2)
+ end do
+ end do
+
+ end do
+**********************************************************************
+* *
+* Calculate mass centre restraint energy *
+* *
+**********************************************************************
+ do i1=1,nrestram
+ j1=irstram(i1,2)
+ j2=irstram(i1,3)
+ j3=irstram(i1,4)
+ j4=irstram(i1,5)
+ kdir=irstram(i1,1)
+ cmx1=0.0
+ cmy1=0.0
+ cmz1=0.0
+ cmx2=0.0
+ cmy2=0.0
+ cmz2=0.0
+ summas1=0.0
+ summas2=0.0
+ do i2=j1,j2
+ cmx1=cmx1+c(i2,1)*xmasat(i2)
+ cmy1=cmy1+c(i2,2)*xmasat(i2)
+ cmz1=cmz1+c(i2,3)*xmasat(i2)
+ summas1=summas1+xmasat(i2)
+ end do
+ cmx1=cmx1/summas1
+ cmy1=cmy1/summas1
+ cmz1=cmz1/summas1
+ if (mdstep.lt.2) then
+ rmstrax(i1)=cmx1
+ rmstray(i1)=cmy1
+ rmstraz(i1)=cmz1
+ end if
+ if (kdir.le.3) then
+ do i2=j3,j4
+ cmx2=cmx2+c(i2,1)*xmasat(i2)
+ cmy2=cmy2+c(i2,2)*xmasat(i2)
+ cmz2=cmz2+c(i2,3)*xmasat(i2)
+ summas2=summas2+xmasat(i2)
+ end do
+ cmx2=cmx2/summas2
+ cmy2=cmy2/summas2
+ cmz2=cmz2/summas2
+ end if
+ if (kdir.eq.1) dist=cmx1-cmx2
+ if (kdir.eq.2) dist=cmy1-cmy2
+ if (kdir.eq.3) dist=cmz1-cmz2
+ if (kdir.eq.4) then
+ distx=cmx1-rmstrax(i1)
+ disty=cmy1-rmstray(i1)
+ distz=cmz1-rmstraz(i1)
+ dist=sqrt(distx*distx+disty*disty+distz*distz)
+ end if
+ dismacen(i1)=dist
+ dist=dist-rmstra1(i1)
+ erh=rmstra2(i1)*dist*dist
+ deresdr=2.0*dist*rmstra2(i1)
+* exphu=exp(-rmstra3(i1)*(dist*dist))
+* erh=rmstra2(i1)*(1.0-exphu)
+* deresdr=2.0*rmstra3(i1)*dist*rmstra2(i1)*exphu
+ eres=eres+erh
+ if (kdir.le.3) then
+ do i2=j1,j2
+ d(kdir,i2)=d(kdir,i2)+deresdr*xmasat(i2)/summas1
+ end do
+ do i2=j3,j4
+ d(kdir,i2)=d(kdir,i2)-deresdr*xmasat(i2)/summas2
+ end do
+ end if
+ if (kdir.eq.4.and.mdstep.gt.5) then
+ do i2=j1,j2
+ d(1,i2)=d(1,i2)+deresdr*(distx/dist)*(xmasat(i2)/summas1)
+ d(2,i2)=d(2,i2)+deresdr*(disty/dist)*(xmasat(i2)/summas1)
+ d(3,i2)=d(3,i2)+deresdr*(distz/dist)*(xmasat(i2)/summas1)
+ end do
+ end if
+ end do
+**********************************************************************
+* *
+* Calculate morphing energy *
+* *
+**********************************************************************
+ if (imorph.eq.1) then
+ distot=zero
+ do i1=1,na
+ dmx=c(i1,1)-cmo(i1,1)
+ dmy=c(i1,2)-cmo(i1,2)
+ dmz=c(i1,3)-cmo(i1,3)
+ dism=sqrt(dmx*dmx+dmy*dmy+dmz*dmz)
+ distot=distot+dism
+* exphu=exp(-vmo2(i1)*(dism*dism))
+* erh=vmo1(i1)*(1.0-exphu)
+ erh=vmo1(i1)*dism
+ eres=eres+erh
+* deresddis=2.0*vmo2(i1)*dism*vmo1(i1)*exphu
+ deresddis=vmo1(i1)
+ drda1=dmx/dism
+ drda2=dmy/dism
+ drda3=dmz/dism
+ d(1,i1)=d(1,i1)+deresddis*drda1
+ d(2,i1)=d(2,i1)+deresddis*drda2
+ d(3,i1)=d(3,i1)+deresddis*drda3
+ end do
+
+ end if
+
+
+ return
+ end
+**********************************************************************
+********************************************************************
+
+ subroutine calvalres (ja1,ja2,ja3,arg,hr,dhrdc,dargdc)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+ dimension a(3),b(3),j(3),dradc(3,3),drbdc(3,3),dtdc(3,3),
+ $dargdc(3,3),dndc(3,3),dadc(3),dbdc(3),dhrdc(3,3)
+**********************************************************************
+* *
+* Calculate valency angles and their derivatives to cartesian *
+* coordinates for restraint calculations *
+* *
+**********************************************************************
+c$$$* if (ndebug.eq.1) then
+c$$$C* open (65,file='fort.65',status='unknown',access='append')
+c$$$* write (65,*) 'In calvalres'
+c$$$* call timer(65)
+c$$$* close (65)
+c$$$* end if
+
+ dadc(1)=-1.0
+ dadc(2)=1.0
+ dadc(3)=0.0
+ dbdc(1)=0.0
+ dbdc(2)=1.0
+ dbdc(3)=-1.0
+ do k1=1,3
+ do k2=1,3
+ dradc(k1,k2)=0.0
+ drbdc(k1,k2)=0.0
+ end do
+ end do
+**********************************************************************
+* *
+* Determine valency angle *
+* *
+**********************************************************************
+ call dista2(ja1,ja2,rla,dx1,dy1,dz1)
+ call dista2(ja2,ja3,rlb,dx2,dy2,dz2)
+
+ a(1)=-dx1
+ a(2)=-dy1
+ a(3)=-dz1
+ b(1)=dx2
+ b(2)=dy2
+ b(3)=dz2
+ poem=rla*rlb
+ tel=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
+ arg=tel/poem
+ arg2=arg*arg
+ s1ma22=1.0-arg2
+ if (s1ma22.lt.1.0d-10) s1ma22=1.0d-10
+ s1ma2=sqrt(s1ma22)
+ if (arg.gt.1.0) arg=1.0
+ if (arg.lt.-1.0) arg=-1.0
+ hr=acos(arg)
+**********************************************************************
+* *
+* Calculate derivative valency angle to cartesian coordinates *
+* *
+**********************************************************************
+ do k1=1,3
+ dradc(k1,1)=-a(k1)/rla
+ dradc(k1,2)=a(k1)/rla
+ end do
+
+ do k1=1,3
+ drbdc(k1,2)=b(k1)/rlb
+ drbdc(k1,3)=-b(k1)/rlb
+ end do
+
+ do k1=1,3
+ do k2=1,3
+ dndc(k1,k2)=rla*drbdc(k1,k2)+rlb*dradc(k1,k2)
+ dtdc(k1,k2)=a(k1)*dbdc(k2)+b(k1)*dadc(k2)
+ dargdc(k1,k2)=(dtdc(k1,k2)-arg*dndc(k1,k2))/poem
+ dhrdc(k1,k2)=-dargdc(k1,k2)/s1ma2
+ end do
+ end do
+
+ 10 continue
+
+ return
+ end
+**********************************************************************
+********************************************************************
+
+ subroutine calvalhb (ja1,ja2,ja3,ix,iy,iz,arg,hr,dhrdc,dargdc)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+ dimension a(3),b(3),j(3),dradc(3,3),drbdc(3,3),dtdc(3,3),
+ $dargdc(3,3),dndc(3,3),dadc(3),dbdc(3),dhrdc(3,3)
+**********************************************************************
+* *
+* Calculate valency angles and their derivatives to cartesian *
+* coordinates for hydrogen bond calculations *
+* *
+**********************************************************************
+c$$$* if (ndebug.eq.1) then
+c$$$* open (65,file='fort.65',status='unknown',access='append')
+c$$$* write (65,*) 'In calvalhb'
+c$$$* call timer(65)
+c$$$* close (65)
+c$$$* end if
+
+ dadc(1)=-1.0
+ dadc(2)=1.0
+ dadc(3)=0.0
+ dbdc(1)=0.0
+ dbdc(2)=1.0
+ dbdc(3)=-1.0
+ do k1=1,3
+ do k2=1,3
+ dradc(k1,k2)=0.0
+ drbdc(k1,k2)=0.0
+ end do
+ end do
+**********************************************************************
+* *
+* Determine valency angle *
+* *
+**********************************************************************
+ call dista2(ja1,ja2,rla,dx1,dy1,dz1)
+ call dista2(ja2,ja3,rlb,dx2,dy2,dz2)
+
+ a(1)=-dx1
+ a(2)=-dy1
+ a(3)=-dz1
+ b(1)=dx2
+ b(2)=dy2
+ b(3)=dz2
+ poem=rla*rlb
+ tel=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
+ arg=tel/poem
+ arg2=arg*arg
+ s1ma22=1.0-arg2
+ if (s1ma22.lt.1.0d-10) s1ma22=1.0d-10
+ s1ma2=sqrt(s1ma22)
+ if (arg.gt.1.0) arg=1.0
+ if (arg.lt.-1.0) arg=-1.0
+ hr=acos(arg)
+**********************************************************************
+* *
+* Calculate derivative valency angle to cartesian coordinates *
+* *
+**********************************************************************
+ do k1=1,3
+ dradc(k1,1)=-a(k1)/rla
+ dradc(k1,2)=a(k1)/rla
+ end do
+
+ do k1=1,3
+ drbdc(k1,2)=b(k1)/rlb
+ drbdc(k1,3)=-b(k1)/rlb
+ end do
+
+ do k1=1,3
+ do k2=1,3
+ dndc(k1,k2)=rla*drbdc(k1,k2)+rlb*dradc(k1,k2)
+ dtdc(k1,k2)=a(k1)*dbdc(k2)+b(k1)*dadc(k2)
+ dargdc(k1,k2)=(dtdc(k1,k2)-arg*dndc(k1,k2))/poem
+ dhrdc(k1,k2)=-dargdc(k1,k2)/s1ma2
+ end do
+ end do
+
+ 10 continue
+
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine caltor(ja1,ja2,ja3,ja4,ht)
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkenergies.blk"
+#include "cbktregime.blk"
+#include "control.blk"
+#include "cbkinit.blk"
+ DIMENSION A(3),DRDA(3),DADC(4),DRADC(3,4),DRBDC(3,4),
+ $DRCDC(3,4),DHDDC(3,4),DHEDC(3,4),DRVDC(3,4),DTDC(3,4),
+ $DNDC(3,4)
+ dimension j(4),dvdc1(3,3),dargdc1(3,3),dvdc2(3,3),dargdc2(3,3)
+**********************************************************************
+* *
+* Calculate torsion angle (for internal coordinates output) *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In caltor'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ do k1=1,3
+ do k2=1,4
+ dhddc(k1,k2)=0.0
+ dhedc(k1,k2)=0.0
+ dradc(k1,k2)=0.0
+ drbdc(k1,k2)=0.0
+ drcdc(k1,k2)=0.0
+ end do
+ end do
+ et=0.0
+ eco=0.0
+ dadc(1)=1.0
+ dadc(2)=0.0
+ dadc(3)=0.0
+ dadc(4)=-1.0
+ call dista2(ja1,ja2,rla,dx1,dy1,dz1)
+ call dista2(ja2,ja3,rlb,dx2,dy2,dz2)
+ call dista2(ja3,ja4,rlc,dx2,dy2,dz2)
+ call dista2(ja1,ja4,r4,dx2,dy2,dz2)
+ call calvalres(ja1,ja2,ja3,arg1,h1,dvdc1,dargdc1)
+ call calvalres(ja2,ja3,ja4,arg2,h2,dvdc2,dargdc2)
+**********************************************************************
+* *
+* Determine torsion angle *
+* *
+**********************************************************************
+ d142=r4*r4
+ coshd=cos(h1)
+ coshe=cos(h2)
+ sinhd=sin(h1)
+ sinhe=sin(h2)
+ poem=2.0*rla*rlc*sinhd*sinhe
+ poem2=poem*poem
+ tel=rla*rla+rlb*rlb+rlc*rlc-d142-2.0*(rla*rlb*coshd-rla*rlc*
+ $coshd*coshe+rlb*rlc*coshe)
+ arg=tel/poem
+ if (arg.gt.1.0) arg=1.0
+ if (arg.lt.-1.0) arg=-1.0
+ arg2=arg*arg
+ ht=acos(arg)*rdndgr
+ k1=ja1
+ k2=ja2
+ k3=ja3
+ k4=ja4
+ call dista2(k3,k2,dis,x3,y3,z3)
+ y32z32=y3*y3+z3*z3
+ wort1=sqrt(y32z32)+1e-6
+ wort2=sqrt(y32z32+x3*x3)+1e-6
+ sinalf=y3/wort1
+ cosalf=z3/wort1
+ sinbet=x3/wort2
+ cosbet=wort1/wort2
+ call dista2(k1,k2,dis,x1,y1,z1)
+ x1=x1*cosbet-y1*sinalf*sinbet-z1*cosalf*sinbet
+ y1=y1*cosalf-z1*sinalf
+ wort3=sqrt(x1*x1+y1*y1)+1e-6
+ singam=y1/wort3
+ cosgam=x1/wort3
+ call dista2(k4,k2,dis,x4,y4,z4)
+ x4=x4*cosbet-y4*sinalf*sinbet-z4*cosalf*sinbet
+ y4=y4*cosalf-z4*sinalf
+ y4=x4*singam-y4*cosgam
+ if (y4.gt.0.0) ht=-ht
+ if (ht.lt.-179.999999d0) ht=-179.999999d0
+ if (ht.gt.179.999999d0) ht=179.999999d0
+
+ return
+ end
+**********************************************************************
diff -Naur lammps-29Jan09/lib/reax/reax_reac.F lammps-12Feb09/lib/reax/reax_reac.F
--- lammps-29Jan09/lib/reax/reax_reac.F 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/reax_reac.F 2009-02-12 14:03:20.000000000 -0700
@@ -0,0 +1,312 @@
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+**********************************************************************
+* *
+* REAXFF Reactive force field program *
+* *
+* Developed and written by Adri van Duin, duin@wag.caltech.edu *
+* *
+* Copyright (c) 2001-2010 California Institute of Technology *
+* *
+* This is an open-source program. Feel free to modify its *
+* contents. Please keep me informed of any useful modification *
+* or addition that you made. Please do not distribute this *
+* program to others; if people are interested in obtaining *
+* a copy of this program let them contact me first. *
+* *
+**********************************************************************
+**********************************************************************
+
+ subroutine encalc
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkc.blk"
+#include "cbkcha.blk"
+#include "cbkconst.blk"
+#include "cbkd.blk"
+#include "cbkdcell.blk"
+#include "cbkenergies.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "small.blk"
+**********************************************************************
+* *
+* Calculate energy and first derivatives *
+* *
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In encalc'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+ estrc=0.0
+ do i1=1,na
+ do i2=1,3
+ d(i2,i1)=0.0
+ estrain(i1)=0.0
+ end do
+ end do
+ eb=zero
+ ea=zero
+ elp=zero
+ emol=zero
+ ev=zero
+ ehb=zero
+ ecoa=zero
+ epen=zero
+ et=zero
+ eco=zero
+ eres=zero
+ eradbo=zero
+ efi=zero
+
+ if(Lvirial.eq.1) then
+ do k1 = 1,6
+ virial(k1) = zero
+ end do
+ endif
+
+ if (Latomvirial.eq.1) then
+ do i1=1,na
+ do i2=1,6
+ atomvirial(i2,i1)=0.0
+ end do
+ end do
+ endif
+
+ call boncor
+ call lonpar
+ call covbon
+ call ovcor
+
+ call srtang !Determine valency angles
+ call srttor !Determine torsion angles
+* call srtoop !Determine out of plane angles
+ call srthb !Determine hydrogen bonds
+
+ call calval
+ call valang
+
+* call oopang
+
+ call torang
+ call hbond
+ !print *, 'called hbond'
+ !print *, nchaud
+
+ call nonbon
+ call efield
+
+ call restraint
+
+c
+c Use this to print out fort.73-style energies
+c It only works correctly in serial mode
+c
+c write (6,'(i8,1x,14(f21.10,1x))')mdstep+nprevrun,eb,ea,elp,
+c $emol,ev+epen,ecoa,ehb,et,eco,ew,ep,ech,efi
+
+ estrc=eb+ea+elp+ev+ecoa+emol+epen+et+ehb+eco+ew+ep+ncha2*ech+efi
+ if (estrc.gt.zero) return
+ if (estrc.le.zero) then
+ goto 10
+ else
+ write (*,*)mdstep
+ write (92,*)eb,ea,elp,ev,ecoa,emol,epen,eoop,et,eco,ew,
+ $ep,ech,eres,eradbo
+ stop 'Energy not a number'
+ end if
+
+ 10 continue
+ return
+ end
+**********************************************************************
+**********************************************************************
+
+ subroutine init
+
+**********************************************************************
+#include "cbka.blk"
+#include "cbkatomcoord.blk"
+#include "cbkc.blk"
+#include "cbkcha.blk"
+#include "cbkconst.blk"
+#include "cbkdcell.blk"
+#include "cbkdistan.blk"
+#include "cbkenergies.blk"
+#include "cbkia.blk"
+#include "cbkimove.blk"
+#include "cbkinit.blk"
+#include "cbktregime.blk"
+#include "cellcoord.blk"
+#include "control.blk"
+#include "opt.blk"
+#include "small.blk"
+**********************************************************************
+c$$$ if (ndebug.eq.1) then
+c$$$C open (65,file='fort.65',status='unknown',access='append')
+c$$$ write (65,*) 'In init'
+c$$$ call timer(65)
+c$$$ close (65)
+c$$$ end if
+**********************************************************************
+* *
+* Initialize variables *
+* *
+**********************************************************************
+ convmd=4.184*1.0d26
+ pi=3.14159265
+ avognr=6.0221367d23
+ rdndgr=180.0/pi
+ dgrrdn=1.0/rdndgr
+ rgasc=8.314510
+ caljou=4.184
+ xjouca=1.0/caljou
+ ech=zero
+ zero=0.0
+ one=1.0
+ two=2.0
+ three=3.0
+ half=one/two
+ nzero=0
+ none=1
+ ntwo=2
+ nthree=3
+ invt=0
+ ndata2=0
+ iheatf=0
+ nradcount=0
+ itemp=1
+ xinh=zero
+ ifieldx=0
+ ifieldy=0
+ ifieldz=0
+ mdstep=0
+ kx=0
+ ky=0
+ kz=0
+ nit=0
+ nbon=0
+ angle(1)=90.0
+ angle(2)=90.0
+ angle(3)=90.0
+ axiss(1)=zero
+ axiss(2)=zero
+ axiss(3)=zero
+ do i1=1,nat
+ id(i1,1)=0
+ id(i1,2)=0
+ id(i1,3)=0
+ end do
+ icgeo=0
+ sumhe=zero
+ ustime=zero
+ systime=zero
+ vpmax=zero
+ vpmin=zero
+ dseed=0
+ iagain=0
+ do i1=1,nat
+ do i2=1,mbond+3
+ ia(i1,i2)=0
+ iag(i1,i2)=0
+ end do
+ end do
+
+ ioldchg=0
+ na=0
+ nrestra=0
+ nrestrav=0
+ nrestrat=0
+ nrestram=0
+ tset=tsetor
+ tm11=axis(1)
+ tm21=zero
+ tm31=zero
+ tm22=axis(2)
+ tm32=zero
+ tm33=axis(3)
+ qruid='NORMAL RUN'
+c$$$ do i1=1,nat
+c$$$ imove(i1)=1
+c$$$ end do
+
+**********************************************************************
+* *
+* Write file headers *
+* *
+**********************************************************************
+Cc open (71,file='fort.71',status='unknown',access='append')
+c write (71,10)
+c close (71)
+Cc open (73,file='fort.73',status='unknown',access='append')
+c write (73,20)
+c close (73)
+c if (ntrc.gt.0) then
+Cc open (75,file='fort.75',status='unknown',access='append')
+c write (75,30)
+c close (75)
+c end if
+c if (nmethod.eq.4) then
+Cc open (59,file='fort.59',status='unknown',access='append')
+c write (59,40)
+c close (59)
+c end if
+
+ return
+**********************************************************************
+* *
+* Format part *
+* *
+**********************************************************************
+ 10 format (' Iter. Nmol Epot Ekin Etot ',
+ $' T(K) Eaver(block) Eaver(total) Taver Tmax ',
+ $' Pres(MPa) sdev(Epot) sdev(Eaver) Tset Timestep',
+ $' RMSG Totaltime')
+ 20 format (' Iter. Ebond Eatom Elp Emol',
+ $' Eval Ecoa Ehbo Etors Econj',
+ $' Evdw Ecoul Echarge Efield')
+ 30 format (' Iter. Tsys Tzone1 Tset1 Tzone2 Tset2')
+ 40 format (' Iter. a b c px',
+ $'(MPa) py(MPa) pz(MPa) pset(MPa) Volume ')
+ end
+**********************************************************************
+************************************************************************
+
+c subroutine timer(nunit)
+
+************************************************************************
+c#include "cbka.blk"
+c#include "cbkinit.blk"
+c real timear
+c real tarray(2)
+c#ifdef _IBM
+c call dtime_(tarray,timear)
+c#else
+c call dtime(tarray,timear)
+c#endif
+
+c ustime=ustime+tarray(1)
+c systime=systime+tarray(2)
+c write (nunit,100)ustime,systime,ustime+systime
+c return
+c 100 format ('User time:',f20.4,' System time:',f20.4,
+c $' Total time:',f20.4)
+c end
+************************************************************************
+************************************************************************
diff -Naur lammps-29Jan09/lib/reax/small.blk lammps-12Feb09/lib/reax/small.blk
--- lammps-29Jan09/lib/reax/small.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/small.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,5 @@
+ common
+ $/rsmall/ tset,dseed,tempmd,ts2,ts22,nmolo,nmolo5,nbon,na,namov,
+ $ na_local
+
+
diff -Naur lammps-29Jan09/lib/reax/valang.blk lammps-12Feb09/lib/reax/valang.blk
--- lammps-29Jan09/lib/reax/valang.blk 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/lib/reax/valang.blk 2009-02-06 09:39:43.000000000 -0700
@@ -0,0 +1,9 @@
+
+
+
+ common
+ $/cbkvalang/ vval1(nsort),vval2(nvatym),
+ $ vval4(nsort),vkac(nvatym),vkap(nvatym),
+ $ vka3(nvatym),vka8(nvatym),th0(nvatym)
+
+
diff -Naur lammps-29Jan09/potentials/README lammps-12Feb09/potentials/README
--- lammps-29Jan09/potentials/README 2007-06-20 07:40:55.000000000 -0600
+++ lammps-12Feb09/potentials/README 2009-02-06 09:10:15.000000000 -0700
@@ -16,10 +16,11 @@
The suffix of each file indicates the pair style it is used with:
+airebo AI-REBO (Brenner) potential
eam embedded atom method (EAM) single element, DYNAMO funcfl format
eam.alloy EAM multi-element alloy, DYNAMO setfl format
eam.fs Finnis-Sinclair EAM format (single element or alloy)
meam modified EAM (MEAM) library and individual elements/alloys
+reax ReaxFF potential
sw Stillinger-Weber potential
tersoff Tersoff potential
-airebo AI-REBO (Brenner) potential
diff -Naur lammps-29Jan09/potentials/ffield.reax lammps-12Feb09/potentials/ffield.reax
--- lammps-29Jan09/potentials/ffield.reax 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/potentials/ffield.reax 2009-02-06 09:10:15.000000000 -0700
@@ -0,0 +1,210 @@
+Reactive MD-force field
+ 39 ! Number of general parameters
+ 50.0000 !Overcoordination parameter
+ 9.5469 !Overcoordination parameter
+ 127.8302 !Valency angle conjugation parameter
+ 3.0000 !Triple bond stabilisation parameter
+ 6.5000 !Triple bond stabilisation parameter
+ 0.0000 !C2-correction
+ 1.0496 !Undercoordination parameter
+ 9.0000 !Triple bond stabilisation parameter
+ 11.5054 !Undercoordination parameter
+ 13.4059 !Undercoordination parameter
+ 0.0000 !Triple bond stabilization energy
+ 0.0000 !Lower Taper-radius
+ 10.0000 !Upper Taper-radius
+ 2.8793 !Not used
+ 33.8667 !Valency undercoordination
+ 7.0994 !Valency angle/lone pair parameter
+ 1.0563 !Valency angle
+ 2.0384 !Valency angle parameter
+ 6.1431 !Not used
+ 6.9290 !Double bond/angle parameter
+ 0.3989 !Double bond/angle parameter: overcoord
+ 3.9954 !Double bond/angle parameter: overcoord
+ -2.4837 !Not used
+ 5.7796 !Torsion/BO parameter
+ 10.0000 !Torsion overcoordination
+ 1.9487 !Torsion overcoordination
+ -1.2327 !Conjugation 0 (not used)
+ 2.1645 !Conjugation
+ 1.5591 !vdWaals shielding
+ 0.1000 !Cutoff for bond order (*100)
+ 2.0038 !Valency angle conjugation parameter
+ 0.6121 !Overcoordination parameter
+ 1.2172 !Overcoordination parameter
+ 1.8512 !Valency/lone pair parameter
+ 0.5000 !Not used
+ 20.0000 !Not used
+ 5.0000 !Molecular energy (not used)
+ 0.0000 !Molecular energy (not used)
+ 3.6942 !Valency angle conjugation parameter
+ 6 ! Nr of atoms; cov.r; valency;a.m;Rvdw;Evdw;gammaEEM;cov.r2;#
+ alfa;gammavdW;valency;Eunder;Eover;chiEEM;etaEEM;n.u.
+ cov r3;Elp;Heat inc.;n.u.;n.u.;n.u.;n.u.
+ ov/un;val1;n.u.;val3,vval4
+ C 1.3763 4.0000 12.0000 1.8857 0.1818 0.8712 1.2596 4.0000
+ 9.5928 2.0784 4.0000 22.6732 79.5548 5.7254 6.9235 0.0000
+ 1.2065 0.0000 -0.8579 4.9417 28.3475 11.9957 0.8563 0.0000
+ -2.8846 4.1590 1.0564 4.0000 2.9663 0.0000 0.0000 0.0000
+ H 0.6646 1.0000 1.0080 1.6030 0.0600 0.7625 -0.1000 1.0000
+ 9.3951 4.4187 1.0000 0.0000 121.1250 3.8196 9.8832 1.0000
+ -0.1000 0.0000 -0.1339 3.5803 2.8733 1.0000 1.0698 0.0000
+ -13.0615 3.0626 1.0338 1.0000 2.8793 0.0000 0.0000 0.0000
+ O 1.2699 2.0000 15.9990 1.9741 0.0880 1.0804 1.0624 6.0000
+ 10.2186 7.7719 4.0000 27.3264 116.0768 8.5000 7.8386 2.0000
+ 0.9446 8.6170 -1.2371 17.0845 3.7082 0.5350 0.9745 0.0000
+ -3.1456 2.6656 1.0493 4.0000 2.9225 0.0000 0.0000 0.0000
+ N 1.2226 3.0000 14.0000 1.9324 0.1376 0.8596 1.1839 5.0000
+ 10.0667 7.8431 4.0000 32.5000 100.0000 6.8418 6.3404 2.0000
+ 1.0497 14.5853 -1.1222 2.0637 3.2584 3.1136 0.9745 0.0000
+ -4.2059 2.6491 1.0183 4.0000 2.8793 0.0000 0.0000 0.0000
+ S 1.9405 2.0000 32.0600 2.0677 0.2099 1.0336 1.5479 6.0000
+ 9.9575 4.9055 4.0000 52.9998 112.1416 6.5000 8.2545 2.0000
+ 1.4601 9.7177 -2.3700 5.7487 23.2859 12.7147 0.9745 0.0000
+ -11.0000 2.7466 1.0338 4.0000 2.8793 0.0000 0.0000 0.0000
+ Si 2.0276 4.0000 28.0600 2.2042 0.1322 0.8218 1.5758 4.0000
+ 11.9413 2.0618 4.0000 11.8211 136.4845 1.8038 7.3852 0.0000
+ -1.0000 0.0000 -2.3700 6.4918 8.5961 0.2368 0.8563 0.0000
+ -3.8112 3.1873 1.0338 4.0000 2.5791 0.0000 0.0000 0.0000
+ 18 ! Nr of bonds; Edis1;LPpen;n.u.;pbe1;pbo5;13corr;pbo6
+ pbe2;pbo3;pbo4;n.u.;pbo1;pbo2;ovcorr
+ 1 1 145.4070 103.0681 73.7841 0.2176 -0.7816 1.0000 28.4167 0.3217
+ 0.1111 -0.1940 8.6733 1.0000 -0.0994 5.9724 1.0000 0.0000
+ 1 2 167.1752 0.0000 0.0000 -0.4421 0.0000 1.0000 6.0000 0.5969
+ 17.4194 1.0000 0.0000 1.0000 -0.0099 8.5445 0.0000 0.0000
+ 2 2 188.1606 0.0000 0.0000 -0.3140 0.0000 1.0000 6.0000 0.6816
+ 8.6247 1.0000 0.0000 1.0000 -0.0183 5.7082 0.0000 0.0000
+ 1 3 171.0470 67.2480 130.3792 0.3600 -0.1696 1.0000 12.0338 0.3796
+ 0.3647 -0.2660 7.4396 1.0000 -0.1661 5.0637 0.0000 0.0000
+ 3 3 90.2465 160.9645 40.0000 0.9950 -0.2435 1.0000 28.1614 0.9704
+ 0.8145 -0.1850 7.5281 1.0000 -0.1283 6.2396 1.0000 0.0000
+ 1 4 134.9992 139.6314 78.5681 0.0420 -0.1370 1.0000 23.6247 0.2415
+ 0.1522 -0.3161 7.0000 1.0000 -0.1301 5.4980 1.0000 0.0000
+ 3 4 127.7074 177.1058 40.0000 0.4561 -0.1481 1.0000 31.4801 0.2000
+ 0.8968 -0.3555 7.0000 1.0000 -0.1219 7.0000 1.0000 0.0000
+ 4 4 151.9142 87.1928 151.4761 0.4280 -0.1001 1.0000 12.3631 0.6229
+ 0.1721 -0.1614 12.1345 1.0000 -0.0882 5.3056 1.0000 0.0000
+ 2 3 216.6018 0.0000 0.0000 -0.4201 0.0000 1.0000 6.0000 0.9143
+ 4.7737 1.0000 0.0000 1.0000 -0.0591 5.9451 0.0000 0.0000
+ 2 4 223.1853 0.0000 0.0000 -0.4661 0.0000 1.0000 6.0000 0.5178
+ 7.8731 1.0000 0.0000 1.0000 -0.0306 6.1506 0.0000 0.0000
+ 1 5 128.9942 74.5848 55.2528 0.1035 -0.5211 1.0000 18.9617 0.6000
+ 0.2949 -0.2398 8.1175 1.0000 -0.1029 5.6731 1.0000 0.0000
+ 2 5 151.5159 0.0000 0.0000 -0.4721 0.0000 1.0000 6.0000 0.6000
+ 9.4366 1.0000 0.0000 1.0000 -0.0290 7.0050 1.0000 0.0000
+ 3 5 0.0000 0.0000 0.0000 0.5563 -0.4038 1.0000 49.5611 0.6000
+ 0.4259 -0.4577 12.7569 1.0000 -0.1100 7.1145 1.0000 0.0000
+ 4 5 0.0000 0.0000 0.0000 0.4438 -0.2034 1.0000 40.3399 0.6000
+ 0.3296 -0.3153 9.1227 1.0000 -0.1805 5.6864 1.0000 0.0000
+ 5 5 96.1871 93.7006 68.6860 0.0955 -0.4781 1.0000 17.8574 0.6000
+ 0.2723 -0.2373 9.7875 1.0000 -0.0950 6.4757 1.0000 0.0000
+ 6 6 109.1904 70.8314 30.0000 0.2765 -0.3000 1.0000 16.0000 0.1583
+ 0.2804 -0.1994 8.1117 1.0000 -0.0675 8.2993 0.0000 0.0000
+ 2 6 137.1002 0.0000 0.0000 -0.1902 0.0000 1.0000 6.0000 0.4256
+ 17.7186 1.0000 0.0000 1.0000 -0.0377 6.4281 0.0000 0.0000
+ 3 6 191.1743 52.0733 43.3991 -0.2584 -0.3000 1.0000 36.0000 0.8764
+ 1.0248 -0.3658 4.2151 1.0000 -0.5004 4.2605 1.0000 0.0000
+ 8 ! Nr of off-diagonal terms; Ediss;Ro;gamma;rsigma;rpi;rpi2
+ 1 2 0.0455 1.7218 10.4236 1.0379 -1.0000 -1.0000
+ 2 3 0.0469 1.9185 10.3707 0.9406 -1.0000 -1.0000
+ 2 4 0.0999 1.8372 9.6539 0.9692 -1.0000 -1.0000
+ 1 3 0.1186 1.9820 9.5927 1.2936 1.1203 1.0805
+ 1 4 0.1486 1.8922 9.7989 1.3746 1.2091 1.1427
+ 3 4 0.1051 2.0060 10.0691 1.3307 1.1034 1.0060
+ 2 6 0.0470 1.6738 11.6877 1.1931 -1.0000 -1.0000
+ 3 6 0.1263 1.8163 10.6833 1.6266 1.2052 -1.0000
+ 62 ! Nr of angles;at1;at2;at3;Thetao,o;ka;kb;pv1;pv2
+ 1 1 1 70.0265 13.6338 2.1884 0.0000 0.1676 26.3587 1.0400
+ 1 1 2 69.7786 10.3544 8.4326 0.0000 0.1153 0.0000 1.0400
+ 2 1 2 74.6020 11.8629 2.9294 0.0000 0.1367 0.0000 1.0400
+ 1 2 2 0.0000 0.0000 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 2 1 0.0000 3.4110 7.7350 0.0000 0.0000 0.0000 1.0400
+ 2 2 2 0.0000 27.9213 5.8635 0.0000 0.0000 0.0000 1.0400
+ 1 1 3 72.9588 16.7105 3.5244 0.0000 1.1127 0.0000 1.1880
+ 3 1 3 80.0708 45.0000 2.1487 0.0000 1.1127 -35.0000 1.1880
+ 1 1 4 61.5055 45.0000 1.2242 0.0000 1.1127 0.0000 1.1880
+ 3 1 4 71.9345 45.0000 1.5052 0.0000 1.1127 0.0000 1.1880
+ 4 1 4 51.3604 45.0000 0.6846 0.0000 1.1127 0.0000 1.1880
+ 2 1 3 66.6150 13.6403 3.8212 0.0000 0.0755 0.0000 1.0500
+ 2 1 4 68.9632 16.3575 3.1449 0.0000 0.0755 0.0000 1.0500
+ 1 2 4 0.0000 0.0019 6.3000 0.0000 0.0000 0.0000 1.0400
+ 1 3 1 79.1091 45.0000 0.7067 0.0000 0.6142 0.0000 1.0783
+ 1 3 3 83.7151 42.6867 0.9699 0.0000 0.6142 0.0000 1.0783
+ 1 3 4 79.5876 45.0000 1.1761 0.0000 0.6142 0.0000 1.0783
+ 3 3 3 80.0108 38.3716 1.1572 -38.4200 0.6142 0.0000 1.0783
+ 3 3 4 81.5614 19.8012 3.9968 0.0000 0.6142 0.0000 1.0783
+ 4 3 4 85.3564 36.5858 1.7504 0.0000 0.6142 0.0000 1.0783
+ 1 3 2 78.1533 44.7226 1.3136 0.0000 0.1218 0.0000 1.0500
+ 2 3 3 84.1057 9.6413 7.5000 0.0000 0.1218 0.0000 1.0500
+ 2 3 4 79.4629 44.0409 2.2959 0.0000 0.1218 0.0000 1.0500
+ 2 3 2 79.2954 26.3838 2.2044 0.0000 0.1218 0.0000 1.0500
+ 1 4 1 66.1477 22.9891 1.5923 0.0000 1.6777 0.0000 1.0500
+ 1 4 3 91.9273 38.0207 0.5387 0.0000 1.6777 0.0000 1.0500
+ 1 4 4 92.6933 9.9708 1.6094 0.0000 1.6777 0.0000 1.0500
+ 3 4 3 73.4749 42.7640 1.7325 -17.5007 1.6777 0.0000 1.0500
+ 3 4 4 73.9183 44.8857 1.1980 -0.9193 1.6777 0.0000 1.0500
+ 4 4 4 74.0572 15.4709 5.4220 0.0000 1.6777 0.0000 1.0500
+ 1 4 2 72.7016 33.4153 1.0224 0.0000 0.0222 0.0000 1.0500
+ 2 4 3 82.4368 44.1900 1.9273 0.0000 0.0222 0.0000 1.0500
+ 2 4 4 82.6883 39.9831 1.1916 0.0000 0.0222 0.0000 1.0500
+ 2 4 2 71.2183 14.4528 3.6870 0.0000 0.0222 0.0000 1.0500
+ 1 2 3 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 2 5 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 3 2 3 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 3 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 4 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 2 2 3 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 2 2 4 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 1 1 5 74.9397 25.0560 1.8787 0.1463 0.0559 0.0000 1.0400
+ 1 5 1 86.9521 36.9951 2.0903 0.1463 0.0559 0.0000 1.0400
+ 2 1 5 74.9397 25.0560 1.8787 0.0000 0.0000 0.0000 1.0400
+ 1 5 2 86.1791 36.9951 2.0903 0.0000 0.0000 0.0000 1.0400
+ 1 5 5 85.3644 36.9951 2.0903 0.1463 0.0559 0.0000 1.0400
+ 2 5 2 93.1959 36.9951 2.0903 0.0000 0.0000 0.0000 1.0400
+ 2 5 5 84.3331 36.9951 2.0903 0.0000 0.0000 0.0000 1.0400
+ 6 6 6 69.3456 21.7361 1.4283 0.0000 -0.2101 0.0000 1.3241
+ 2 6 6 75.6168 21.5317 1.0435 0.0000 2.5179 0.0000 1.0400
+ 2 6 2 78.3939 20.9772 0.8630 0.0000 2.8421 0.0000 1.0400
+ 3 6 6 70.3016 15.4081 1.3267 0.0000 2.1459 0.0000 1.0400
+ 2 6 3 73.8232 16.6592 3.7425 0.0000 0.8613 0.0000 1.0400
+ 3 6 3 90.0344 7.7656 1.7264 0.0000 0.7689 0.0000 1.0400
+ 6 3 6 22.1715 3.6615 0.3160 0.0000 4.1125 0.0000 1.0400
+ 2 3 6 83.7634 5.6693 2.7780 0.0000 1.6982 0.0000 1.0400
+ 3 3 6 73.4663 25.0761 0.9143 0.0000 2.2466 0.0000 1.0400
+ 2 2 6 0.0000 47.1300 6.0000 0.0000 1.6371 0.0000 1.0400
+ 6 2 6 0.0000 31.5209 6.0000 0.0000 1.6371 0.0000 1.0400
+ 3 2 6 0.0000 31.0427 4.5625 0.0000 1.6371 0.0000 1.0400
+ 2 2 5 0.0000 0.0019 6.0000 0.0000 0.0000 0.0000 1.0400
+ 20 ! Nr of torsions;at1;at2;at3;at4;;V1;V2;V3;V2(BO);vconj;n.u;n
+ 1 1 1 1 0.0000 23.2168 0.1811 -4.6220 -1.9387 0.0000 0.0000
+ 1 1 1 2 0.0000 45.7984 0.3590 -5.7106 -2.9459 0.0000 0.0000
+ 2 1 1 2 0.0000 44.6445 0.3486 -5.1725 -0.8717 0.0000 0.0000
+ 0 1 2 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
+ 0 2 2 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
+ 0 1 3 0 5.0520 16.7344 0.5590 -3.0181 -2.0000 0.0000 0.0000
+ 0 2 3 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000
+ 0 3 3 0 0.0115 68.9706 0.8253 -28.4693 0.0000 0.0000 0.0000
+ 0 1 4 0 -4.0616 66.2036 0.3855 -4.4414 -2.0000 0.0000 0.0000
+ 0 2 4 0 0.0000 0.1000 0.0200 -2.5415 0.0000 0.0000 0.0000
+ 0 3 4 0 1.1130 14.8049 0.0231 -10.7175 -2.0000 0.0000 0.0000
+ 0 4 4 0 -0.0851 37.4200 0.0107 -3.5209 -2.0000 0.0000 0.0000
+ 0 1 1 0 0.0000 0.9305 0.0000 -24.2568 0.0000 0.0000 0.0000
+ 4 1 4 4 -3.6064 43.6430 0.0004 -11.5507 -2.0000 0.0000 0.0000
+ 0 1 5 0 3.3423 30.3435 0.0365 -2.7171 0.0000 0.0000 0.0000
+ 0 5 5 0 -0.0555 -42.7738 0.1515 -2.2056 0.0000 0.0000 0.0000
+ 0 2 5 0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
+ 0 6 6 0 0.0000 0.0000 0.1200 -2.4426 0.0000 0.0000 0.0000
+ 0 2 6 0 0.0000 0.0000 0.1200 -2.4847 0.0000 0.0000 0.0000
+ 0 3 6 0 0.0000 0.0000 0.1200 -2.4703 0.0000 0.0000 0.0000
+ 9 ! Nr of hydrogen bonds;at1;at2;at3;Rhb;Dehb;vhb1
+ 3 2 3 2.0431 -6.6813 3.5000 1.7295
+ 3 2 4 1.6740 -10.9581 3.5000 1.7295
+ 4 2 3 1.4889 -9.6465 3.5000 1.7295
+ 4 2 4 1.8324 -8.0074 3.5000 1.7295
+ 3 2 5 2.6644 -3.9547 3.5000 1.7295
+ 4 2 5 4.0476 -5.7038 3.5000 1.7295
+ 5 2 3 2.1126 -4.5790 3.5000 1.7295
+ 5 2 4 2.2066 -5.7038 3.5000 1.7295
+ 5 2 5 1.9461 -4.0000 3.5000 1.7295
diff -Naur lammps-29Jan09/src/KSPACE/pppm.cpp lammps-12Feb09/src/KSPACE/pppm.cpp
--- lammps-29Jan09/src/KSPACE/pppm.cpp 2009-01-09 14:31:31.000000000 -0700
+++ lammps-12Feb09/src/KSPACE/pppm.cpp 2009-01-29 08:10:38.000000000 -0700
@@ -733,18 +733,20 @@
memory->create_3d_double_array(nzlo_out,nzhi_out,nylo_out,nyhi_out,
nxlo_out,nxhi_out,"pppm:vdz_brick");
- density_fft = new double[nfft_both];
- greensfn = new double[nfft_both];
- work1 = new double[2*nfft_both];
- work2 = new double[2*nfft_both];
+ density_fft =
+ (double *) memory->smalloc(nfft_both*sizeof(double),"pppm:density_fft");
+ greensfn =
+ (double *) memory->smalloc(nfft_both*sizeof(double),"pppm:greensfn");
+ work1 = (double *) memory->smalloc(2*nfft_both*sizeof(double),"pppm:work1");
+ work2 = (double *) memory->smalloc(2*nfft_both*sizeof(double),"pppm:work2");
vg = memory->create_2d_double_array(nfft_both,6,"pppm:vg");
fkx = memory->create_1d_double_array(nxlo_fft,nxhi_fft,"pppm:fkx");
fky = memory->create_1d_double_array(nylo_fft,nyhi_fft,"pppm:fky");
fkz = memory->create_1d_double_array(nzlo_fft,nzhi_fft,"pppm:fkz");
- buf1 = new double[nbuf];
- buf2 = new double[nbuf];
+ buf1 = (double *) memory->smalloc(nbuf*sizeof(double),"pppm:buf1");
+ buf2 = (double *) memory->smalloc(nbuf*sizeof(double),"pppm:buf2");
// summation coeffs
@@ -787,18 +789,18 @@
memory->destroy_3d_double_array(vdy_brick,nzlo_out,nylo_out,nxlo_out);
memory->destroy_3d_double_array(vdz_brick,nzlo_out,nylo_out,nxlo_out);
- delete [] density_fft;
- delete [] greensfn;
- delete [] work1;
- delete [] work2;
+ memory->sfree(density_fft);
+ memory->sfree(greensfn);
+ memory->sfree(work1);
+ memory->sfree(work2);
memory->destroy_2d_double_array(vg);
memory->destroy_1d_double_array(fkx,nxlo_fft);
memory->destroy_1d_double_array(fky,nylo_fft);
memory->destroy_1d_double_array(fkz,nzlo_fft);
- delete [] buf1;
- delete [] buf2;
+ memory->sfree(buf1);
+ memory->sfree(buf2);
delete [] gf_b;
memory->destroy_2d_double_array(rho1d,-order/2);
diff -Naur lammps-29Jan09/src/MAKE/Makefile.g++_reax lammps-12Feb09/src/MAKE/Makefile.g++_reax
--- lammps-29Jan09/src/MAKE/Makefile.g++_reax 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/MAKE/Makefile.g++_reax 2009-02-10 11:20:30.000000000 -0700
@@ -0,0 +1,41 @@
+# g++_reax = RedHat Linux box, g++, MPICH2, FFTW, REAX lib
+
+SHELL = /bin/sh
+
+# System-specific settings
+
+CC = g++
+CCFLAGS = -g -O -I../../lib/reax \
+ -DFFT_FFTW -DLAMMPS_GZIP -DMPICH_IGNORE_CXX_SEEK
+DEPFLAGS = -M
+LINK = g++
+LINKFLAGS = -g -O -L../../lib/reax -L/sw/lib/gcc4.2/lib
+USRLIB = -lfftw -lmpich -lreax
+SYSLIB = -lpthread -lg2c
+ARCHIVE = ar
+ARFLAGS = -rc
+SIZE = size
+
+# Link target
+
+$(EXE): $(OBJ)
+ $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE)
+ $(SIZE) $(EXE)
+
+# Library target
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
+
+# Compilation rules
+
+%.o:%.cpp
+ $(CC) $(CCFLAGS) -c $<
+
+%.d:%.cpp
+ $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@
+
+# Individual dependencies
+
+DEPENDS = $(OBJ:.o=.d)
+include $(DEPENDS)
diff -Naur lammps-29Jan09/src/MAKE/Makefile.linux_reax lammps-12Feb09/src/MAKE/Makefile.linux_reax
--- lammps-29Jan09/src/MAKE/Makefile.linux_reax 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/MAKE/Makefile.linux_reax 2009-02-10 11:20:30.000000000 -0700
@@ -0,0 +1,41 @@
+# linux_reax = RedHat Linux box, Intel icc, MPICH2, FFTW, REAX lib
+
+SHELL = /bin/sh
+
+# System-specific settings
+
+CC = icc
+CCFLAGS = -O -I../../lib/reax \
+ -DFFT_FFTW -DLAMMPS_GZIP -DMPICH_IGNORE_CXX_SEEK
+DEPFLAGS = -M
+LINK = icc
+LINKFLAGS = -O -L../../lib/reax -L/opt/intel/fce/10.0.023/lib
+USRLIB = -lfftw -lmpich -lreax
+SYSLIB = -lpthread -lstdc++ -lifcore -lsvml -lompstub -limf
+ARCHIVE = ar
+ARFLAGS = -rc
+SIZE = size
+
+# Link target
+
+$(EXE): $(OBJ)
+ $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE)
+ $(SIZE) $(EXE)
+
+# Library target
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
+
+# Compilation rules
+
+%.o:%.cpp
+ $(CC) $(CCFLAGS) -c $<
+
+%.d:%.cpp
+ $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@
+
+# Individual dependencies
+
+DEPENDS = $(OBJ:.o=.d)
+include $(DEPENDS)
diff -Naur lammps-29Jan09/src/MAKE/Makefile.mac_reax lammps-12Feb09/src/MAKE/Makefile.mac_reax
--- lammps-29Jan09/src/MAKE/Makefile.mac_reax 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/MAKE/Makefile.mac_reax 2009-02-06 11:30:45.000000000 -0700
@@ -0,0 +1,32 @@
+# mac_reax = Apple PowerBook G4 laptop, Finked LAM/MPI, Finked FFTW 2.1.5, REAX lib
+
+SHELL = /bin/sh
+
+# System-specific settings
+
+FFTW = /sw
+
+CC = mpic++
+CCFLAGS = -O -MMD -MG -DFFT_FFTW -I../../lib/reax -I${FFTW}/include \
+ -DOMPI_SKIP_MPICXX
+LINK = mpic++
+LINKFLAGS = -O -L${FFTW}/lib -L../../lib/reax -L/sw/lib/gcc4.2/lib
+USRLIB = -lfftw -lreax
+SYSLIB = -lgfortran
+SIZE = size
+
+# Link rule
+
+$(EXE): $(OBJ)
+ $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE)
+ $(SIZE) $(EXE)
+
+# Compilation rules
+
+%.o:%.cpp
+ $(CC) $(CCFLAGS) -c $<
+
+# Individual dependencies
+
+DEPENDS = $(OBJ:.o=.d)
+-include $(DEPENDS)
diff -Naur lammps-29Jan09/src/MAKE/Makefile.tacc lammps-12Feb09/src/MAKE/Makefile.tacc
--- lammps-29Jan09/src/MAKE/Makefile.tacc 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/MAKE/Makefile.tacc 2009-02-05 07:43:04.000000000 -0700
@@ -0,0 +1,44 @@
+# g++ = UT Lonestar TACC machine, mpiCC, MPI, FFTW
+
+SHELL = /bin/sh
+
+# System-specific settings
+
+FFTW_INC = ${TACC_FFTW2_INC}
+FFTW_LIB = ${TACC_FFTW2_LIB}
+
+CC = mpiCC
+CCFLAGS = -O -DFFT_FFTW -I${FFTW_INC}
+DEPFLAGS = -M
+LINK = mpiCC
+LINKFLAGS = -O -L${FFTW_LIB}
+USRLIB = ${FFTW_LIB}/libfftw.a
+SYSLIB = -L/opt/apps/intel/10.1/fc/lib -lifcore
+#SYSLIB = -L/opt/apps/intel/10.1/fc/lib -lifcore (use if linking to MEAM)
+ARCHIVE = ar
+ARFLAGS = -rc
+SIZE = size
+
+# Link target
+
+$(EXE): $(OBJ)
+ $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE)
+ $(SIZE) $(EXE)
+
+# Library target
+
+lib: $(OBJ)
+ $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
+
+# Compilation rules
+
+%.o:%.cpp
+ $(CC) $(CCFLAGS) -c $<
+
+%.d:%.cpp
+ $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@
+
+# Individual dependencies
+
+DEPENDS = $(OBJ:.o=.d)
+include $(DEPENDS)
diff -Naur lammps-29Jan09/src/Makefile lammps-12Feb09/src/Makefile
--- lammps-29Jan09/src/Makefile 2008-07-24 14:46:29.000000000 -0600
+++ lammps-12Feb09/src/Makefile 2009-02-06 10:05:59.000000000 -0700
@@ -14,7 +14,7 @@
# Package variables
PACKAGE = asphere class2 colloid dipole dpd granular \
- kspace manybody meam molecule opt peri poems xtc
+ kspace manybody meam molecule opt peri poems reax xtc
PACKUSER = user-ackland user-cg-cmm user-ewaldn user-smd
diff -Naur lammps-29Jan09/src/Makefile.list lammps-12Feb09/src/Makefile.list
--- lammps-29Jan09/src/Makefile.list 2009-01-09 15:28:07.000000000 -0700
+++ lammps-12Feb09/src/Makefile.list 2009-02-12 13:45:05.000000000 -0700
@@ -7,9 +7,9 @@
ROOT = lmp
EXE = $(ROOT)_$@
-SRC = angle.cpp angle_charmm.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp atom.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_molecular.cpp bond.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp change_box.cpp comm.cpp compute.cpp compute_centro_atom.cpp compute_coord_atom.cpp compute_displace_atom.cpp compute_erotate_sphere.cpp compute_group_group.cpp compute_ke.cpp compute_ke_atom.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_reduce.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp displace_box.cpp domain.cpp dump.cpp dump_atom.cpp dump_bond.cpp dump_custom.cpp dump_dcd.cpp dump_xyz.cpp error.cpp ewald.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_add_force.cpp fix_ave_atom.cpp fix_ave_force.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_com.cpp fix_coord_original.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_gravity.cpp fix_gyration.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_line_force.cpp fix_minimize.cpp fix_momentum.cpp fix_msd.cpp fix_nph.cpp fix_npt.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_plane_force.cpp fix_press_berendsen.cpp fix_print.cpp fix_rdf.cpp fix_recenter.cpp fix_respa.cpp fix_rigid.cpp fix_set_force.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_reflect.cpp fix_wiggle.cpp force.cpp group.cpp improper.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp input.cpp integrate.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp main.cpp memory.cpp min.cpp min_cg.cpp min_sd.cpp minimize.cpp modify.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pack.cpp pair.cpp pair_airebo.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_fs.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_morse.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pppm.cpp pppm_tip4p.cpp random_mars.cpp random_park.cpp read_data.cpp read_restart.cpp region.cpp region_block.cpp region_cylinder.cpp region_intersect.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp respa.cpp run.cpp set.cpp shell.cpp special.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp write_restart.cpp
+SRC = angle.cpp angle_cg_cmm.cpp angle_charmm.cpp angle_class2.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp atom.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_dipole.cpp atom_vec_dpd.cpp atom_vec_ellipsoid.cpp atom_vec_full.cpp atom_vec_granular.cpp atom_vec_hybrid.cpp atom_vec_molecular.cpp atom_vec_peri.cpp bond.cpp bond_class2.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp cg_cmm_parms.cpp change_box.cpp comm.cpp compute.cpp compute_ackland_atom.cpp compute_centro_atom.cpp compute_cna_atom.cpp compute_coord_atom.cpp compute_damage_atom.cpp compute_displace_atom.cpp compute_erotate_asphere.cpp compute_erotate_sphere.cpp compute_group_group.cpp compute_ke.cpp compute_ke_atom.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_reduce.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_asphere.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_class2.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp displace_box.cpp domain.cpp dump.cpp dump_atom.cpp dump_bond.cpp dump_custom.cpp dump_dcd.cpp dump_xtc.cpp dump_xyz.cpp error.cpp ewald.cpp ewald_n.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_add_force.cpp fix_ave_atom.cpp fix_ave_force.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_com.cpp fix_coord_original.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_freeze.cpp fix_gravity.cpp fix_gyration.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_line_force.cpp fix_minimize.cpp fix_momentum.cpp fix_msd.cpp fix_nph.cpp fix_npt.cpp fix_npt_asphere.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_asphere.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_asphere.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_peri_neigh.cpp fix_plane_force.cpp fix_pour.cpp fix_press_berendsen.cpp fix_print.cpp fix_rdf.cpp fix_recenter.cpp fix_respa.cpp fix_rigid.cpp fix_rigid2.cpp fix_set_force.cpp fix_shake.cpp fix_shear_history.cpp fix_smd.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall_gran.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_reflect.cpp fix_wiggle.cpp force.cpp group.cpp improper.cpp improper_class2.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp input.cpp integrate.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp main.cpp memory.cpp min.cpp min_cg.cpp min_sd.cpp minimize.cpp modify.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pack.cpp pair.cpp pair_airebo.cpp pair_buck.cpp pair_buck_coul.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_cg_cmm.cpp pair_cg_cmm_coul_cut.cpp pair_cg_cmm_coul_long.cpp pair_cmm_common.cpp pair_colloid.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_dipole_cut.cpp pair_dpd.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_alloy_opt.cpp pair_eam_fs.cpp pair_eam_fs_opt.cpp pair_eam_opt.cpp pair_gayberne.cpp pair_gran_hertz_history.cpp pair_gran_hooke.cpp pair_gran_hooke_history.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_charmm_coul_long_opt.cpp pair_lj_class2.cpp pair_lj_class2_coul_cut.cpp pair_lj_class2_coul_long.cpp pair_lj_coul.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_cut_opt.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_lubricate.cpp pair_morse.cpp pair_morse_opt.cpp pair_peri_pmb.cpp pair_resquared.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pppm.cpp pppm_tip4p.cpp random_mars.cpp random_park.cpp read_data.cpp read_restart.cpp region.cpp region_block.cpp region_cylinder.cpp region_intersect.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp respa.cpp run.cpp set.cpp shell.cpp special.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp write_restart.cpp xdr_compat.cpp
-INC = angle.h angle_charmm.h angle_cosine.h angle_cosine_delta.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h atom.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_full.h atom_vec_hybrid.h atom_vec_molecular.h bond.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h change_box.h comm.h compute.h compute_centro_atom.h compute_coord_atom.h compute_displace_atom.h compute_erotate_sphere.h compute_group_group.h compute_ke.h compute_ke_atom.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_reduce.h compute_stress_atom.h compute_temp.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h displace_box.h domain.h dump.h dump_atom.h dump_bond.h dump_custom.h dump_dcd.h dump_xyz.h error.h ewald.h fft3d.h fft3d_wrap.h finish.h fix.h fix_add_force.h fix_ave_atom.h fix_ave_force.h fix_ave_spatial.h fix_ave_time.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_com.h fix_coord_original.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_gravity.h fix_gyration.h fix_heat.h fix_indent.h fix_langevin.h fix_line_force.h fix_minimize.h fix_momentum.h fix_msd.h fix_nph.h fix_npt.h fix_npt_sphere.h fix_nve.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_plane_force.h fix_press_berendsen.h fix_print.h fix_rdf.h fix_recenter.h fix_respa.h fix_rigid.h fix_set_force.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_viscosity.h fix_viscous.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_reflect.h fix_wiggle.h force.h group.h improper.h improper_cvff.h improper_harmonic.h improper_hybrid.h input.h integrate.h kspace.h lammps.h lattice.h library.h math_extra.h memory.h min.h min_cg.h min_sd.h minimize.h modify.h neigh_list.h neigh_request.h neighbor.h output.h pack.h pair.h pair_airebo.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_eam.h pair_eam_alloy.h pair_eam_fs.h pair_hybrid.h pair_hybrid_overlay.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_tip4p.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_morse.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pointers.h pppm.h pppm_tip4p.h random_mars.h random_park.h read_data.h read_restart.h region.h region_block.h region_cylinder.h region_intersect.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h respa.h run.h set.h shell.h special.h style.h style_asphere.h style_class2.h style_colloid.h style_dipole.h style_dpd.h style_granular.h style_kspace.h style_manybody.h style_meam.h style_molecule.h style_opt.h style_peri.h style_poems.h style_sd.h style_user.h style_user_ackland.h style_user_cg_cmm.h style_user_ewaldn.h style_user_packages.h style_user_smd.h style_xtc.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h write_restart.h
+INC = angle.h angle_cg_cmm.h angle_charmm.h angle_class2.h angle_cosine.h angle_cosine_delta.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h atom.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_dipole.h atom_vec_dpd.h atom_vec_ellipsoid.h atom_vec_full.h atom_vec_granular.h atom_vec_hybrid.h atom_vec_molecular.h atom_vec_peri.h bond.h bond_class2.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h cg_cmm_parms.h change_box.h comm.h compute.h compute_ackland_atom.h compute_centro_atom.h compute_cna_atom.h compute_coord_atom.h compute_damage_atom.h compute_displace_atom.h compute_erotate_asphere.h compute_erotate_sphere.h compute_group_group.h compute_ke.h compute_ke_atom.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_reduce.h compute_stress_atom.h compute_temp.h compute_temp_asphere.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_class2.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h displace_box.h domain.h dump.h dump_atom.h dump_bond.h dump_custom.h dump_dcd.h dump_xtc.h dump_xyz.h error.h ewald.h ewald_n.h fft3d.h fft3d_wrap.h finish.h fix.h fix_add_force.h fix_ave_atom.h fix_ave_force.h fix_ave_spatial.h fix_ave_time.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_com.h fix_coord_original.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_freeze.h fix_gravity.h fix_gyration.h fix_heat.h fix_indent.h fix_langevin.h fix_line_force.h fix_minimize.h fix_momentum.h fix_msd.h fix_nph.h fix_npt.h fix_npt_asphere.h fix_npt_sphere.h fix_nve.h fix_nve_asphere.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_asphere.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_peri_neigh.h fix_plane_force.h fix_pour.h fix_press_berendsen.h fix_print.h fix_rdf.h fix_recenter.h fix_respa.h fix_rigid.h fix_rigid2.h fix_set_force.h fix_shake.h fix_shear_history.h fix_smd.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_viscosity.h fix_viscous.h fix_wall_gran.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_reflect.h fix_wiggle.h force.h group.h improper.h improper_class2.h improper_cvff.h improper_harmonic.h improper_hybrid.h input.h integrate.h kspace.h lammps.h lattice.h library.h math_complex.h math_extra.h math_vector.h memory.h min.h min_cg.h min_sd.h minimize.h modify.h neigh_list.h neigh_request.h neighbor.h output.h pack.h pair.h pair_airebo.h pair_buck.h pair_buck_coul.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_cg_cmm.h pair_cg_cmm_coul_cut.h pair_cg_cmm_coul_long.h pair_cmm_common.h pair_colloid.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_dipole_cut.h pair_dpd.h pair_eam.h pair_eam_alloy.h pair_eam_alloy_opt.h pair_eam_fs.h pair_eam_fs_opt.h pair_eam_opt.h pair_gayberne.h pair_gran_hertz_history.h pair_gran_hooke.h pair_gran_hooke_history.h pair_hybrid.h pair_hybrid_overlay.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_charmm_coul_long_opt.h pair_lj_class2.h pair_lj_class2_coul_cut.h pair_lj_class2_coul_long.h pair_lj_coul.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_tip4p.h pair_lj_cut_opt.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_lubricate.h pair_morse.h pair_morse_opt.h pair_peri_pmb.h pair_resquared.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pointers.h pppm.h pppm_tip4p.h random_mars.h random_park.h read_data.h read_restart.h region.h region_block.h region_cylinder.h region_intersect.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h respa.h run.h set.h shell.h special.h style.h style_asphere.h style_class2.h style_colloid.h style_dipole.h style_dpd.h style_granular.h style_kspace.h style_manybody.h style_meam.h style_molecule.h style_opt.h style_peri.h style_poems.h style_user.h style_user_ackland.h style_user_cg_cmm.h style_user_ewaldn.h style_user_packages.h style_user_smd.h style_xtc.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h write_restart.h xdr_compat.h
OBJ = $(SRC:.cpp=.o)
diff -Naur lammps-29Jan09/src/REAX/Install.csh lammps-12Feb09/src/REAX/Install.csh
--- lammps-29Jan09/src/REAX/Install.csh 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/REAX/Install.csh 2009-02-11 15:26:01.000000000 -0700
@@ -0,0 +1,22 @@
+# Install/unInstall package classes in LAMMPS
+
+if ($1 == 1) then
+
+ cp style_reax.h ..
+
+ cp pair_reax.cpp ..
+
+ cp pair_reax.h ..
+ cp pair_reax_fortran.h ..
+
+else if ($1 == 0) then
+
+ rm ../style_reax.h
+ touch ../style_reax.h
+
+ rm ../pair_reax.cpp
+
+ rm ../pair_reax.h
+ rm ../pair_reax_fortran.h
+
+endif
diff -Naur lammps-29Jan09/src/REAX/pair_reax.cpp lammps-12Feb09/src/REAX/pair_reax.cpp
--- lammps-29Jan09/src/REAX/pair_reax.cpp 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/REAX/pair_reax.cpp 2009-02-12 14:13:22.000000000 -0700
@@ -0,0 +1,1032 @@
+/* ----------------------------------------------------------------------
+ LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
+ http://lammps.sandia.gov, Sandia National Laboratories
+ Steve Plimpton, sjplimp@sandia.gov
+
+ Copyright (2003) Sandia Corporation. Under the terms of Contract
+ DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
+ certain rights in this software. This software is distributed under
+ the GNU General Public License.
+
+ See the README file in the top-level LAMMPS directory.
+------------------------------------------------------------------------- */
+
+/* ----------------------------------------------------------------------
+ Contributing authors: Aidan Thompson (Sandia, athomps@sandia.gov)
+ Hansohl Cho (MIT, hansohl@mit.edu)
+ LAMMPS implementation of the Reactive Force Field (ReaxFF) is based on
+ Aidan Thompson's GRASP code
+ (General Reactive Atomistic Simulation Program)
+ and Ardi Van Duin's original ReaxFF code
+------------------------------------------------------------------------- */
+
+#include "mpi.h"
+#include "math.h"
+#include "stdio.h"
+#include "stdlib.h"
+#include "string.h"
+#include "pair_reax.h"
+#include "pair_reax_fortran.h"
+#include "atom.h"
+#include "update.h"
+#include "force.h"
+#include "comm.h"
+#include "neighbor.h"
+#include "neigh_list.h"
+#include "neigh_request.h"
+#include "memory.h"
+#include "error.h"
+
+using namespace LAMMPS_NS;
+
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#define SMALL 0.0001
+
+/* ---------------------------------------------------------------------- */
+
+PairREAX::PairREAX(LAMMPS *lmp) : Pair(lmp)
+{
+ single_enable = 0;
+ one_coeff = 1;
+ no_virial_compute = 1;
+
+ cutmax = 0.0;
+ hbcut = 6.0;
+ iprune = 4;
+ ihb = 1;
+ chpot = 0;
+
+ nmax = 0;
+ arow_ptr = NULL;
+ ch = NULL;
+ elcvec = NULL;
+ rcg = NULL;
+ wcg = NULL;
+ pcg = NULL;
+ poldcg = NULL;
+ qcg = NULL;
+
+ matmax = 0;
+ aval = NULL;
+ acol_ind = NULL;
+
+ comm_forward = 1;
+ comm_reverse = 1;
+
+ precision = 1.0e-6;
+}
+
+/* ----------------------------------------------------------------------
+ free all arrays
+ check if allocated, since class can be destructed when incomplete
+------------------------------------------------------------------------- */
+
+PairREAX::~PairREAX()
+{
+ if (allocated) {
+ memory->destroy_2d_int_array(setflag);
+ memory->destroy_2d_double_array(cutsq);
+
+ for (int i = 1; i <= atom->ntypes; i++)
+ delete [] param_list[i].params;
+ delete [] param_list;
+
+ delete [] map;
+ }
+
+ memory->sfree(arow_ptr);
+ memory->sfree(ch);
+ memory->sfree(elcvec);
+ memory->sfree(rcg);
+ memory->sfree(wcg);
+ memory->sfree(pcg);
+ memory->sfree(poldcg);
+ memory->sfree(qcg);
+
+ memory->sfree(aval);
+ memory->sfree(acol_ind);
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::compute(int eflag, int vflag)
+{
+ int i,j;
+ double evdwl,ecoul;
+ double energy_charge_equilibration;
+
+ evdwl = ecoul = 0.0;
+ if (eflag || vflag) ev_setup(eflag,vflag);
+ else evflag = vflag_fdotr = 0;
+
+ if (vflag_global) FORTRAN(cbkvirial, CBKVIRIAL).Lvirial = 1;
+ else FORTRAN(cbkvirial, CBKVIRIAL).Lvirial = 0;
+
+ if (vflag_atom) FORTRAN(cbkvirial, CBKVIRIAL).Latomvirial = 1;
+ else FORTRAN(cbkvirial, CBKVIRIAL).Latomvirial = 0;
+
+ // reallocate charge equilibration and CG arrays if necessary
+
+ if (atom->nmax > nmax) {
+ memory->sfree(rcg);
+ memory->sfree(wcg);
+ memory->sfree(pcg);
+ memory->sfree(poldcg);
+ memory->sfree(qcg);
+
+ nmax = atom->nmax;
+ int n = nmax+1;
+
+ arow_ptr = (int *) memory->smalloc(n*sizeof(int),"reax:arow_ptr");
+ ch = (double *) memory->smalloc(n*sizeof(double),"reax:ch");
+ elcvec = (double *) memory->smalloc(n*sizeof(double),"reax:elcvec");
+ rcg = (double *) memory->smalloc(n*sizeof(double),"reax:rcg");
+ wcg = (double *) memory->smalloc(n*sizeof(double),"reax:wcg");
+ pcg = (double *) memory->smalloc(n*sizeof(double),"reax:pcg");
+ poldcg = (double *) memory->smalloc(n*sizeof(double),"reax:poldcg");
+ qcg = (double *) memory->smalloc(n*sizeof(double),"reax:qcg");
+ }
+
+ // calculate the atomic charge distribution
+
+ compute_charge(energy_charge_equilibration);
+
+ // transfer LAMMPS positions and neighbor lists to REAX
+
+ write_reax_positions();
+ write_reax_vlist();
+
+ // determine whether this bond is owned by the processor or not
+
+ FORTRAN(srtbon1, SRTBON1)(&iprune, &ihb, &hbcut);
+
+ // communicate with other processors for the atomic bond order calculations
+
+ FORTRAN(cbkabo, CBKABO).abo;
+
+ // communicate local atomic bond order to ghost atomic bond order
+
+ packflag = 0;
+ comm->comm_pair(this);
+
+ FORTRAN(molec, MOLEC)();
+ FORTRAN(encalc, ENCALC)();
+ FORTRAN(mdsav, MDSAV)(&comm->me);
+
+ // read forces from ReaxFF Fortran
+
+ read_reax_forces();
+
+ // extract global and per-atom energy from ReaxFF Fortran
+ // compute_charge already contributed to eatom
+
+ if (eflag_global) {
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).eb;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).ea;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).elp;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).emol;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).ev;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).epen;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).ecoa;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).ehb;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).et;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).eco;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).ew;
+ evdwl += FORTRAN(cbkenergies, CBKENERGIES).efi;
+
+ ecoul += FORTRAN(cbkenergies, CBKENERGIES).ep;
+ ecoul += energy_charge_equilibration;
+
+ eng_vdwl += evdwl;
+ eng_coul += ecoul;
+ }
+
+ if (eflag_atom) {
+ int ntotal = atom->nlocal + atom->nghost;
+ for (i = 0; i < ntotal; i++)
+ eatom[i] += FORTRAN(cbkd,CBKD).estrain[i];
+ }
+
+ // extract global and per-atom virial from ReaxFF Fortran
+
+ if (vflag_global) {
+ virial[0] = -FORTRAN(cbkvirial, CBKVIRIAL).virial[0];
+ virial[1] = -FORTRAN(cbkvirial, CBKVIRIAL).virial[1];
+ virial[2] = -FORTRAN(cbkvirial, CBKVIRIAL).virial[2];
+ virial[3] = -FORTRAN(cbkvirial, CBKVIRIAL).virial[3];
+ virial[4] = -FORTRAN(cbkvirial, CBKVIRIAL).virial[4];
+ virial[5] = -FORTRAN(cbkvirial, CBKVIRIAL).virial[5];
+ }
+
+ if (vflag_atom) {
+ int ntotal = atom->nlocal + atom->nghost;
+ j = 0;
+ for (i = 0; i < ntotal; i++) {
+ vatom[i][0] = -FORTRAN(cbkvirial, CBKVIRIAL).atomvirial[j+0];
+ vatom[i][1] = -FORTRAN(cbkvirial, CBKVIRIAL).atomvirial[j+1];
+ vatom[i][2] = -FORTRAN(cbkvirial, CBKVIRIAL).atomvirial[j+2];
+ vatom[i][3] = -FORTRAN(cbkvirial, CBKVIRIAL).atomvirial[j+3];
+ vatom[i][4] = -FORTRAN(cbkvirial, CBKVIRIAL).atomvirial[j+4];
+ vatom[i][5] = -FORTRAN(cbkvirial, CBKVIRIAL).atomvirial[j+5];
+ j += 6;
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::write_reax_positions()
+{
+ double xtmp, ytmp, ztmp;
+ int j, jx, jy, jz, jia;
+
+ double **x = atom->x;
+ double *q = atom->q;
+ int *type = atom->type;
+ int *tag = atom->tag;
+ int nlocal = atom->nlocal;
+ int nghost = atom->nghost;
+
+ FORTRAN(rsmall, RSMALL).na = nlocal+nghost;
+ FORTRAN(rsmall, RSMALL).na_local = nlocal;
+
+ jx = 0;
+ jy = ReaxParams::nat;
+ jz = 2*ReaxParams::nat;
+ jia = 0;
+
+ j = 0;
+ for (int i = 0; i < nlocal+nghost; i++, j++) {
+ FORTRAN(cbkc, CBKC).c[j+jx] = x[i][0];
+ FORTRAN(cbkc, CBKC).c[j+jy] = x[i][1];
+ FORTRAN(cbkc, CBKC).c[j+jz] = x[i][2];
+ FORTRAN(cbkch, CBKCH).ch[j] = q[i];
+ FORTRAN(cbkia, CBKIA).ia[j+jia] = map[type[i]];
+ FORTRAN(cbkia, CBKIA).iag[j+jia] = map[type[i]];
+ FORTRAN(cbkc, CBKC).itag[j] = tag[i];
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::write_reax_vlist()
+{
+ int ii, jj, i, j, iii, jjj;
+ double xitmp, yitmp, zitmp;
+ double xjtmp, yjtmp, zjtmp;
+ int itag,jtag;
+ int nvpair, nvlself, nvpairmax;
+ int nbond;
+ int inum,jnum;
+ int *ilist;
+ int *jlist;
+ int *numneigh,**firstneigh;
+ double delr2;
+ double delx, dely, delz;
+ double rtmp[3];
+
+ double **x = atom->x;
+ int *tag = atom->tag;
+ int nlocal = atom->nlocal;
+ int nghost = atom->nghost;
+
+ nvpairmax = ReaxParams::nneighmax * ReaxParams::nat;
+
+ nvpair = 0;
+ nvlself =0;
+ nbond = 0;
+
+ inum = list->inum;
+ ilist = list->ilist;
+ numneigh = list->numneigh;
+ firstneigh = list->firstneigh;
+
+ for (ii = 0; ii < inum; ii++) {
+ i = ilist[ii];
+ xitmp = x[i][0];
+ yitmp = x[i][1];
+ zitmp = x[i][2];
+ itag = tag[i];
+ jlist = firstneigh[i];
+ jnum = numneigh[i];
+
+ for (jj = 0; jj < jnum; jj++) {
+ j = jlist[jj];
+ xjtmp = x[j][0];
+ yjtmp = x[j][1];
+ zjtmp = x[j][2];
+ jtag = tag[j];
+
+ delx = xitmp - xjtmp;
+ dely = yitmp - yjtmp;
+ delz = zitmp - zjtmp;
+
+ delr2 = delx*delx+dely*dely+delz*delz;
+
+ if (delr2 <= rcutvsq) {
+ if (i < j) {
+ iii = i+1;
+ jjj = j+1;
+ } else {
+ iii = j+1;
+ jjj = i+1;
+ }
+ if (nvpair >= nvpairmax) break;
+
+ FORTRAN(cbkpairs, CBKPAIRS).nvl1[nvpair] = iii;
+ FORTRAN(cbkpairs, CBKPAIRS).nvl2[nvpair] = jjj;
+ FORTRAN(cbknvlbo, CBKNVLBO).nvlbo[nvpair] = 0;
+
+ if (delr2 <= rcutbsq) {
+ FORTRAN(cbknvlbo, CBKNVLBO).nvlbo[nvpair] = 1;
+ nbond++;
+ }
+
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 0;
+
+ if (j < nlocal)
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 1;
+ else if (itag < jtag)
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 1;
+ else if (itag == jtag) {
+ if (delz > SMALL)
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 1;
+ else if (fabs(delz) < SMALL) {
+ if (dely > SMALL)
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 1;
+ else if (fabs(dely) < SMALL && delx > SMALL)
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 1;
+ }
+ }
+ nvpair++;
+ }
+ }
+ }
+
+ int ntotal = nlocal + nghost;
+
+ for (int i = nlocal; i < ntotal; i++) {
+ xitmp = x[i][0];
+ yitmp = x[i][1];
+ zitmp = x[i][2];
+ itag = tag[i];
+
+ for (int j = i+1; j < ntotal; j++) {
+ xjtmp = x[j][0];
+ yjtmp = x[j][1];
+ zjtmp = x[j][2];
+ jtag = tag[j];
+
+ delx = xitmp - xjtmp;
+ dely = yitmp - yjtmp;
+ delz = zitmp - zjtmp;
+
+ delr2 = delx*delx+dely*dely+delz*delz;
+
+ // don't need to check the double count since i < j in the ghost region
+
+ if (delr2 <= rcutvsq) {
+ iii = i+1;
+ jjj = j+1;
+
+ if (nvpair >= nvpairmax) break;
+
+ FORTRAN(cbkpairs, CBKPAIRS).nvl1[nvpair] = iii;
+ FORTRAN(cbkpairs, CBKPAIRS).nvl2[nvpair] = jjj;
+ FORTRAN(cbknvlbo, CBKNVLBO).nvlbo[nvpair] = 0;
+
+ if (delr2 <= rcutbsq) {
+ FORTRAN(cbknvlbo, CBKNVLBO).nvlbo[nvpair] = 1;
+ nbond++;
+ }
+
+ FORTRAN(cbknvlown, CBKNVLOWN).nvlown[nvpair] = 0;
+ nvpair++;
+ }
+ }
+ }
+
+ FORTRAN(cbkpairs, CBKPAIRS).nvpair = nvpair;
+ FORTRAN(cbkpairs, CBKPAIRS).nvlself = nvlself;
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::read_reax_forces()
+{
+ double ftmp[3];
+
+ double **f = atom->f;
+ int ntotal = atom->nlocal + atom->nghost;
+
+ int j = 0;
+ for (int i = 0; i < ntotal; i++) {
+ ftmp[0] = -FORTRAN(cbkd, CBKD).d[j];
+ ftmp[1] = -FORTRAN(cbkd, CBKD).d[j+1];
+ ftmp[2] = -FORTRAN(cbkd, CBKD).d[j+2];
+ f[i][0] = ftmp[0];
+ f[i][1] = ftmp[1];
+ f[i][2] = ftmp[2];
+ j += 3;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::allocate()
+{
+ allocated = 1;
+ int n = atom->ntypes;
+
+ setflag = memory->create_2d_int_array(n+1,n+1,"pair:setflag");
+ cutsq = memory->create_2d_double_array(n+1,n+1,"pair:cutsq");
+
+ param_list = new ff_params[n+1];
+ for (int i = 1; i <= n; i++)
+ param_list[i].params = new double[5];
+
+ map = new int[n+1];
+}
+
+/* ----------------------------------------------------------------------
+ global settings
+------------------------------------------------------------------------- */
+
+void PairREAX::settings(int narg, char **arg)
+{
+ if (narg != 0 && narg !=2) error->all("Illegal pair_style command");
+
+ if (narg == 2) {
+ hbcut = atof(arg[0]);
+ precision = atof(arg[1]);
+
+ if (hbcut <= 0.0 || precision <= 0.0)
+ error->all("Illegal pair_style command");
+ }
+}
+
+/* ----------------------------------------------------------------------
+ set coeffs for one or more type pairs
+------------------------------------------------------------------------- */
+
+void PairREAX::coeff(int narg, char **arg)
+{
+ if (!allocated) allocate();
+
+ if (narg != 3 + atom->ntypes)
+ error->all("Incorrect args for pair coefficients");
+
+ // insure I,J args are * *
+
+ if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0)
+ error->all("Incorrect args for pair coefficients");
+
+ // insure filename is ffield.reax
+
+ if (strcmp(arg[2],"ffield.reax") != 0)
+ error->all("Incorrect args for pair coefficients");
+
+ // read args that map atom types to elements in potential file
+ // map[i] = which element the Ith atom type is, -1 if NULL
+
+ for (int i = 3; i < narg; i++) {
+ if (strcmp(arg[i],"NULL") == 0) {
+ map[i-2] = -1;
+ continue;
+ }
+ map[i-2] = atoi(arg[i]);
+ }
+
+ int n = atom->ntypes;
+
+ int count = 0;
+ for (int i = 1; i <= n; i++)
+ for (int j = i; j <= n; j++) {
+ setflag[i][j] = 1;
+ count++;
+ }
+
+ if (count == 0) error->all("Incorrect args for pair coefficients");
+}
+
+/* ----------------------------------------------------------------------
+ init specific to this pair style
+------------------------------------------------------------------------- */
+
+void PairREAX::init_style()
+{
+ if (atom->tag_enable == 0)
+ error->all("Pair style reax requires atom IDs");
+ if (force->newton_pair == 0)
+ error->all("Pair style reax requires newton pair on");
+ if (strcmp(update->unit_style,"real") != 0 && comm->me == 0)
+ error->warning("Not using real units with pair reax");
+
+ int irequest = neighbor->request(this);
+ neighbor->requests[irequest]->newton = 2;
+
+ FORTRAN(readc, READC)();
+ FORTRAN(init, INIT)();
+ FORTRAN(ffinpt, FFINPT)();
+ FORTRAN(tap7th, TAP7TH)();
+
+ // turn off read_in by fort.3 in REAX Fortran
+
+ int ngeofor_tmp = -1;
+ FORTRAN(setngeofor, SETNGEOFOR)(&ngeofor_tmp);
+ if (comm->me == 0) FORTRAN(readgeo, READGEO)();
+
+ // initial setup for cutoff radius of VLIST and BLIST in ReaxFF
+
+ double vlbora;
+
+ FORTRAN(getswb, GETSWB)(&swb);
+ cutmax=MAX(swb, hbcut);
+ rcutvsq=cutmax*cutmax;
+ FORTRAN(getvlbora, GETVLBORA)(&vlbora);
+ rcutbsq=vlbora*vlbora;
+
+ // parameters for charge equilibration from ReaxFF input, fort.4
+ // verify that no LAMMPS type to REAX type mapping was invalid
+
+ int nelements;
+ FORTRAN(getnso, GETNSO)(&nelements);
+
+ FORTRAN(getswa, GETSWA)(&swa);
+ double chi, eta, gamma;
+ for (int itype = 1; itype <= atom->ntypes; itype++) {
+ if (map[itype] < 1 || map[itype] > nelements)
+ error->all("Invalid REAX atom type");
+ chi = FORTRAN(cbkchb, CBKCHB).chi[map[itype]-1];
+ eta = FORTRAN(cbkchb, CBKCHB).eta[map[itype]-1];
+ gamma = FORTRAN(cbkchb, CBKCHB).gam[map[itype]-1];
+ param_list[itype].np = 5;
+ param_list[itype].rcutsq = cutmax;
+ param_list[itype].params[0] = chi;
+ param_list[itype].params[1] = eta;
+ param_list[itype].params[2] = gamma;
+ param_list[itype].params[3] = swa;
+ param_list[itype].params[4] = swb;
+ }
+
+ taper_setup();
+}
+
+/* ----------------------------------------------------------------------
+ init for one type pair i,j and corresponding j,i
+------------------------------------------------------------------------- */
+
+double PairREAX::init_one(int i, int j)
+{
+ return cutmax;
+}
+
+/* ---------------------------------------------------------------------- */
+
+int PairREAX::pack_comm(int n, int *list, double *buf, int pbc_flag, int *pbc)
+{
+ int i,j,m;
+
+ m = 0;
+
+ if (packflag == 0) {
+ for (i = 0; i < n; i++) {
+ j = list[i];
+ buf[m++] = FORTRAN(cbkabo, CBKABO).abo[j];
+ }
+
+ } else {
+ for (i = 0; i < n; i++) {
+ j = list[i];
+ buf[m++] = wcg[j];
+ }
+ }
+
+ return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::unpack_comm(int n, int first, double *buf)
+{
+ int i,m,last;
+
+ m = 0;
+ last = first + n;
+
+ if (packflag == 0) {
+ for (i = first; i < last; i++)
+ FORTRAN(cbkabo, CBKABO).abo[i] = buf[m++];
+
+ } else {
+ for (i = first; i < last; i++)
+ wcg[i] = buf[m++];
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+int PairREAX::pack_reverse_comm(int n, int first, double *buf)
+{
+ int i,k,m,last,size;
+
+ m = 0;
+ last = first + n;
+ for (i = first; i < last; i++)
+ buf[m++] = wcg[i];
+
+ return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::unpack_reverse_comm(int n, int *list, double *buf)
+{
+ int i,j,k,m;
+
+ m = 0;
+ for (i = 0; i < n; i++) {
+ j = list[i];
+ wcg[j] += buf[m++];
+ }
+}
+
+/* ----------------------------------------------------------------------
+ charge equilibration routines
+------------------------------------------------------------------------- */
+
+/* ---------------------------------------------------------------------- */
+
+void PairREAX::taper_setup()
+{
+ double swb2,swa2,swb3,swa3,d1,d7;
+
+ d1=swb-swa;
+ d7=pow(d1,7);
+ swa2=swa*swa;
+ swa3=swa2*swa;
+ swb2=swb*swb;
+ swb3=swb2*swb;
+
+ swc7= 20.0e0/d7;
+ swc6= -70.0e0*(swa+swb)/d7;
+ swc5= 84.0e0*(swa2+3.0e0*swa*swb+swb2)/d7;
+ swc4= -35.0e0*(swa3+9.0e0*swa2*swb+9.0e0*swa*swb2+swb3)/d7;
+ swc3= 140.0e0*(swa3*swb+3.0e0*swa2*swb2+swa*swb3)/d7;
+ swc2=-210.0e0*(swa3*swb2+swa2*swb3)/d7;
+ swc1= 140.0e0*swa3*swb3/d7;
+ swc0=(-35.0e0*swa3*swb2*swb2+21.0e0*swa2*swb3*swb2+
+ 7.0e0*swa*swb3*swb3+swb3*swb3*swb)/d7;
+}
+
+/* ---------------------------------------------------------------------- */
+
+double PairREAX::taper_E(const double &r, const double &r2)
+{
+ double r3=r2*r;
+ return swc7*r3*r3*r+swc6*r3*r3+swc5*r3*r2+swc4*r2*r2+swc3*r3+swc2*r2+
+ swc1*r+swc0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+double PairREAX::taper_F(const double &r, const double &r2)
+{
+ double r3=r2*r;
+ return 7.0e0*swc7*r3*r3+6.0e0*swc6*r3*r2+5.0e0*swc5*r2*r2+
+ 4.0e0*swc4*r3+3.0e0*swc3*r2+2.0e0*swc2*r+swc1;
+}
+
+/* ----------------------------------------------------------------------
+ compute current charge distributions based on the charge equilibration
+------------------------------------------------------------------------- */
+
+void PairREAX::compute_charge(double &energy_charge_equilibration)
+{
+ double xitmp, yitmp, zitmp;
+ double xjtmp, yjtmp, zjtmp;
+ int itype, jtype, itag, jtag;
+ int ii, jj, i, j;
+ double delr2, delr_norm, gamt, hulp1, hulp2;
+ double delx, dely, delz;
+ double qsum,qi;
+ int nmatentries;
+ double sw;
+ double rtmp[3];
+ int inum,jnum;
+ int *ilist;
+ int *jlist;
+ int *numneigh,**firstneigh;
+
+ double **x = atom->x;
+ double *q = atom->q;
+ int *type = atom->type;
+ int *tag = atom->tag;
+
+ int nlocal = atom->nlocal;
+ int nghost = atom->nghost;
+
+ inum = list->inum;
+ ilist = list->ilist;
+ numneigh = list->numneigh;
+ firstneigh = list->firstneigh;
+
+ // realloc neighbor based arrays if necessary
+
+ int numneigh_total = 0;
+ for (ii = 0; ii < inum; ii++)
+ numneigh_total += numneigh[ilist[ii]];
+
+ if (numneigh_total + 2*nlocal > matmax) {
+ memory->sfree(aval);
+ memory->sfree(acol_ind);
+ matmax = numneigh_total + 2*nlocal;
+ aval = (double *) memory->smalloc(matmax*sizeof(double),"reax:aval");
+ acol_ind = (int *) memory->smalloc(matmax*sizeof(int),"reax:acol_ind");
+ }
+
+ // build linear system
+
+ nmatentries = 0;
+
+ for (ii = 0; ii < inum; ii++) {
+ i = ilist[ii];
+ xitmp = x[i][0];
+ yitmp = x[i][1];
+ zitmp = x[i][2];
+ itype = type[i];
+ itag = tag[i];
+ jlist = firstneigh[i];
+ jnum = numneigh[i];
+
+ arow_ptr[i] = nmatentries;
+ aval[nmatentries] = 2.0*param_list[itype].params[1];
+ acol_ind[nmatentries] = i;
+ nmatentries++;
+
+ aval[nmatentries] = 1.0;
+ acol_ind[nmatentries] = nlocal + nghost;
+ nmatentries++;
+
+ for (jj = 0; jj < jnum; jj++) {
+ j = jlist[jj];
+ xjtmp = x[j][0];
+ yjtmp = x[j][1];
+ zjtmp = x[j][2];
+ jtype = type[j];
+ jtag = tag[j];
+
+ delx = xitmp - xjtmp;
+ dely = yitmp - yjtmp;
+ delz = zitmp - zjtmp;
+
+ delr2 = delx*delx+dely*dely+delz*delz;
+
+ // avoid counting local-ghost pair twice since
+ // ReaxFF uses half neigh list with newton off
+
+ if (j >= nlocal) {
+ if (itag > jtag) {
+ if ((itag+jtag) % 2 == 0) continue;
+ } else if (itag < jtag) {
+ if ((itag+jtag) % 2 == 1) continue;
+ } else {
+ if (zjtmp < zitmp) continue;
+ if (zjtmp == zitmp && yjtmp < yitmp) continue;
+ if (zjtmp == zitmp && yjtmp == yitmp && xjtmp < xitmp) continue;
+ }
+ }
+
+ // rcutvsq = cutmax*cutmax, in ReaxFF
+
+ if (delr2 <= rcutvsq) {
+ gamt = sqrt(param_list[itype].params[2]*param_list[jtype].params[2]);
+ delr_norm = sqrt(delr2);
+ sw = taper_E(delr_norm, delr2);
+ hulp1=(delr_norm*delr2+(1.0/(gamt*gamt*gamt)));
+ hulp2=sw*14.40/cbrt(hulp1);
+ aval[nmatentries] = hulp2;
+ acol_ind[nmatentries] = j;
+ nmatentries++;
+ }
+ }
+ }
+
+ // in this case, we don't use Midpoint method
+ // so, we don't need to consider ghost-ghost interactions
+ // but, need to fill the arow_ptr[] arrays for the ghost atoms
+
+ for (i = nlocal; i < nlocal+nghost; i++)
+ arow_ptr[i] = nmatentries;
+ arow_ptr[nlocal+nghost] = nmatentries;
+
+ // add rhs matentries to linear system
+
+ for (ii =0; iireverse_comm_pair(this);
+ comm->comm_pair(this);
+
+ MPI_Allreduce(&w[n-1], &sumtmp, 1, MPI_DOUBLE, MPI_SUM, world);
+ w[n-1] = sumtmp;
+ rho_old = one;
+
+ for (iter = 1; iter < maxiter; iter++) {
+ rho = 0.0;
+ for (int i=0; i 1) {
+ beta = rho/rho_old;
+ for (int i = 0; ireverse_comm_pair(this);
+ comm->comm_pair(this);
+
+ MPI_Allreduce(&w[n-1], &sumtmp, 1, MPI_DOUBLE, MPI_SUM, world);
+ w[n-1] = sumtmp;
+
+ for (int i=0; i Fortran calling syntax
+// CONS(a,b) should return ab, the concatenation of its arguments
+
+#if __STDC__
+#define CONS(a,b) a##b
+#else
+#define CONS(a,b) a/**/b
+#endif
+
+#ifdef _ARDENT
+#define FORTRAN(lcname,ucname) ucname
+#endif
+
+#ifdef _IBM
+#define FORTRAN(lcname,ucname) lcname
+#endif
+
+#ifdef _HP
+#define FORTRAN(lcname,ucname) lcname
+#endif
+
+#ifdef _F2C_LINUX
+#define FORTRAN(lcname,ucname) CONS(lcname,__)
+#endif
+
+#ifndef FORTRAN
+#define FORTRAN(lcname,ucname) CONS(lcname,_)
+#endif
+
+// hard-wired array sizes set in Fortran library
+// accesses include file from Fortran library
+
+#include "reax_defs.h"
+
+class ReaxParams {
+ public:
+ enum {nneighmax=NNEIGHMAXDEF,
+ nat=NATDEF,
+ nattot=NATTOTDEF,
+ nsort=NSORTDEF,
+ mbond=MBONDDEF,
+ nbomax=NBOMAXDEF,
+ };
+};
+
+// data structures corresponding to values in Fortran library
+
+extern struct {
+ double abo[ReaxParams::nat];
+} FORTRAN(cbkabo,CBKABO);
+
+extern struct {
+ double bo[ReaxParams::nbomax];
+} FORTRAN(cbkbo,CBKBO);
+
+extern struct {
+ double c[3*ReaxParams::nat]; double cglobal[3*ReaxParams::nattot];
+ int itag[ReaxParams::nat];
+} FORTRAN(cbkc,CBKC);
+
+extern struct {
+double ch[ReaxParams::nat];
+} FORTRAN(cbkch,CBKCH);
+
+extern struct {
+ double chi[ReaxParams::nsort];
+ double eta[ReaxParams::nsort];
+ double gam[ReaxParams::nsort];
+} FORTRAN(cbkchb,CBKCHB);
+
+extern struct {
+ double d[3*ReaxParams::nat]; double estrain[ReaxParams::nat];
+} FORTRAN(cbkd,CBKD);
+
+extern struct {
+ double atomvirial[6*ReaxParams::nat];
+ double virial[6];
+ int Lvirial;
+ int Latomvirial;
+} FORTRAN(cbkvirial,CBKVIRIAL);
+
+extern struct {
+ int ia[ReaxParams::nat*(ReaxParams::mbond+3)];
+ int iag[ReaxParams::nat*(ReaxParams::mbond+3)];
+} FORTRAN(cbkia,CBKIA);
+
+extern struct {
+ double vlp[ReaxParams::nat];
+ double dvlpdsbo[ReaxParams::nat];
+} FORTRAN(cbklonpar,CBKLONPAR);
+
+extern struct {
+ int nubon1[ReaxParams::nat*(ReaxParams::mbond)];
+ int nubon2[ReaxParams::nat*(ReaxParams::mbond)];
+} FORTRAN(cbknubon2,CBKNUBON2);
+
+extern struct {
+ int nvl1[ReaxParams::nneighmax * ReaxParams::nat];
+ int nvl2[ReaxParams::nneighmax * ReaxParams::nat];
+ int nvpair;
+ int nvlself;
+} FORTRAN(cbkpairs,CBKPAIRS);
+
+extern struct {
+ int nvlbo[ReaxParams::nneighmax * ReaxParams::nat];
+} FORTRAN(cbknvlbo,CBKNVLBO);
+
+extern struct {
+ int nvlown[ReaxParams::nneighmax * ReaxParams::nat];
+} FORTRAN(cbknvlown,CBKNVLOWN);
+
+extern struct {
+ char qa[20*ReaxParams::nattot+10];
+} FORTRAN(cbkqa,CBKQA);
+
+extern struct {
+ double eb;
+ double eoop;
+ double epen;
+ double estrc;
+ double deda[3];
+ double pressu;
+ double efi;
+ double elp;
+ double emol;
+ double ea;
+ double eres;
+ double et;
+ double eradbo;
+ double ev;
+ double eco;
+ double ecoa;
+ double ehb;
+ double sw;
+ double ew;
+ double ep;
+ double ekin;
+} FORTRAN(cbkenergies,CBKENERGIES);
+
+extern struct {
+ double tset;
+ double dseed;
+ double tempmd;
+ double ts2;
+ double ts22;
+ int nmolo;
+ int nmolo5;
+ int nbon;
+ int na;
+ int namov;
+ int na_local;
+} FORTRAN(rsmall,RSMALL);
+
+// external routines provided by Fortran library
+
+extern "C" void FORTRAN(readc,READC)();
+extern "C" void FORTRAN(init,INIT)();
+extern "C" void FORTRAN(ffinpt,FFINPT)();
+extern "C" void FORTRAN(tap7th,TAP7TH)();
+extern "C" void FORTRAN(taper,TAPER)(double*,double*);
+extern "C" void FORTRAN(readgeo,READGEO)();
+extern "C" void FORTRAN(srtatom,SRTATOM)();
+extern "C" void FORTRAN(vlist,VLIST) ();
+extern "C" void FORTRAN(srtbon1,SRTBON1)(int*,int*,double*);
+extern "C" void FORTRAN(molec,MOLEC)();
+extern "C" void FORTRAN(encalc,ENCALC)();
+extern "C" void FORTRAN(getswb,GETSWB)(double*);
+extern "C" void FORTRAN(getswa,GETSWA)(double*);
+extern "C" void FORTRAN(getvrange,GET_VRANGE)(double*);
+extern "C" void FORTRAN(getnvlist,GET_NVLIST)(int*);
+extern "C" void FORTRAN(getvlbora,GETVLBORA)(double*);
+extern "C" void FORTRAN(cgsolve,CGSOLVE)
+ (int*,double*,int*,double*,double*,int*);
+extern "C" void FORTRAN(getnval,GETNVAL)(int*);
+extern "C" void FORTRAN(getntor,GETNTOR)(int*);
+extern "C" void FORTRAN(getnhb,GETNHB)(int*);
+extern "C" void FORTRAN(getnbonall,GETNBONALL)(int*);
+extern "C" void FORTRAN(getnneighmax,GETNNEIGHMAX)(int*);
+extern "C" void FORTRAN(getnat,GETNAT)(int*);
+extern "C" void FORTRAN(getnattot,GETNATTOT)(int*);
+extern "C" void FORTRAN(getnsort,GETNSORT)(int*);
+extern "C" void FORTRAN(getmbond,GETMBOND)(int*);
+extern "C" void FORTRAN(getnso,GETNSO)(int*);
+extern "C" void FORTRAN(setngeofor,SETNGEOFOR)(int*);
+extern "C" void FORTRAN(mdsav,MDSAV)(int*);
+extern "C" void FORTRAN(getnsbmax,GETNSBMAX)(int*);
+extern "C" void FORTRAN(getnsbma2,GETNSBMA2)(int*);
+extern "C" void FORTRAN(getcutof3,GETCUTOF3)(double*);
+
diff -Naur lammps-29Jan09/src/REAX/style_reax.h lammps-12Feb09/src/REAX/style_reax.h
--- lammps-29Jan09/src/REAX/style_reax.h 1969-12-31 17:00:00.000000000 -0700
+++ lammps-12Feb09/src/REAX/style_reax.h 2009-02-06 09:42:00.000000000 -0700
@@ -0,0 +1,20 @@
+/* ----------------------------------------------------------------------
+ LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
+ http://lammps.sandia.gov, Sandia National Laboratories
+ Steve Plimpton, sjplimp@sandia.gov
+
+ Copyright (2003) Sandia Corporation. Under the terms of Contract
+ DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
+ certain rights in this software. This software is distributed under
+ the GNU General Public License.
+
+ See the README file in the top-level LAMMPS directory.
+------------------------------------------------------------------------- */
+
+#ifdef PairInclude
+#include "pair_reax.h"
+#endif
+
+#ifdef PairClass
+PairStyle(reax,PairREAX)
+#endif
diff -Naur lammps-29Jan09/src/neigh_request.cpp lammps-12Feb09/src/neigh_request.cpp
--- lammps-29Jan09/src/neigh_request.cpp 2007-10-03 10:26:20.000000000 -0600
+++ lammps-12Feb09/src/neigh_request.cpp 2009-02-12 13:14:58.000000000 -0700
@@ -38,6 +38,10 @@
respainner = respamiddle = respaouter = 0;
half_from_full = 0;
+ // default is use newton_pair setting in force
+
+ newton = 0;
+
// default is every reneighboring
occasional = 0;
@@ -89,6 +93,7 @@
if (respaouter != other->respaouter) same = 0;
if (half_from_full != other->half_from_full) same = 0;
+ if (newton != other->newton) same = 0;
if (occasional != other->occasional) same = 0;
if (dnum != other->dnum) same = 0;
@@ -116,29 +121,12 @@
if (respamiddle != other->respamiddle) same = 0;
if (respaouter != other->respaouter) same = 0;
if (half_from_full != other->half_from_full) same = 0;
+ if (newton != other->newton) same = 0;
return same;
}
/* ----------------------------------------------------------------------
- set kind value of this request to that of other request
-------------------------------------------------------------------------- */
-
-void NeighRequest::copy_kind(NeighRequest *other)
-{
- half = 0;
-
- if (other->half) half = 1;
- if (other->full) full = 1;
- if (other->gran) gran = 1;
- if (other->granhistory) granhistory = 1;
- if (other->respainner) respainner = 1;
- if (other->respamiddle) respamiddle = 1;
- if (other->respaouter) respaouter = 1;
- if (other->half_from_full) half_from_full = 1;
-}
-
-/* ----------------------------------------------------------------------
compare skip attributes of this request to other request
return 1 if same, 0 if different
------------------------------------------------------------------------- */
@@ -162,3 +150,23 @@
return same;
}
+/* ----------------------------------------------------------------------
+ set kind and other values of this request to that of other request
+------------------------------------------------------------------------- */
+
+void NeighRequest::copy_request(NeighRequest *other)
+{
+ half = 0;
+
+ if (other->half) half = 1;
+ if (other->full) full = 1;
+ if (other->gran) gran = 1;
+ if (other->granhistory) granhistory = 1;
+ if (other->respainner) respainner = 1;
+ if (other->respamiddle) respamiddle = 1;
+ if (other->respaouter) respaouter = 1;
+ if (other->half_from_full) half_from_full = 1;
+
+ newton = other->newton;
+ dnum = other->dnum;
+}
diff -Naur lammps-29Jan09/src/neigh_request.h lammps-12Feb09/src/neigh_request.h
--- lammps-29Jan09/src/neigh_request.h 2007-10-04 17:59:26.000000000 -0600
+++ lammps-12Feb09/src/neigh_request.h 2009-02-12 13:14:58.000000000 -0700
@@ -52,6 +52,12 @@
int occasional;
+ // 0 if use force::newton_pair setting
+ // 1 if override with pair newton on
+ // 2 if override with pair newton off
+
+ int newton;
+
// number of auxiliary floating point values to store, 0 if none
// set by requesting class
@@ -74,8 +80,8 @@
~NeighRequest();
int identical(NeighRequest *);
int same_kind(NeighRequest *);
- void copy_kind(NeighRequest *);
int same_skip(NeighRequest *);
+ void copy_request(NeighRequest *);
};
}
diff -Naur lammps-29Jan09/src/neighbor.cpp lammps-12Feb09/src/neighbor.cpp
--- lammps-29Jan09/src/neighbor.cpp 2008-12-16 12:46:30.000000000 -0700
+++ lammps-12Feb09/src/neighbor.cpp 2009-02-12 13:14:33.000000000 -0700
@@ -750,7 +750,8 @@
skip -> granular function if gran with granhistory
respa function if respaouter
skip_from function for everything else
- half_from_full, half, full, gran, respaouter -> choose by newton and tri
+ half_from_full, half, full, gran, respaouter ->
+ choose by newton and rq->newton and tri settings
style NSQ options = newton off, newton on
style BIN options = newton off, newton on and not tri, newton on and tri
stlye MULTI options = same options as BIN
@@ -776,16 +777,38 @@
} else if (rq->half) {
if (style == NSQ) {
- if (newton_pair == 0) pb = &Neighbor::half_nsq_no_newton;
- else if (newton_pair == 1) pb = &Neighbor::half_nsq_newton;
+ if (rq->newton == 0) {
+ if (newton_pair == 0)
+ pb = &Neighbor::half_nsq_no_newton;
+ else if (newton_pair == 1)
+ pb = &Neighbor::half_nsq_newton;
+ } else if (rq->newton == 1) {
+ pb = &Neighbor::half_nsq_newton;
+ } else if (rq->newton == 2) {
+ pb = &Neighbor::half_nsq_no_newton;
+ }
} else if (style == BIN) {
- if (newton_pair == 0) pb = &Neighbor::half_bin_no_newton;
- else if (triclinic == 0) pb = &Neighbor::half_bin_newton;
- else if (triclinic == 1) pb = &Neighbor::half_bin_newton_tri;
+ if (rq->newton == 0) {
+ if (newton_pair == 0) pb = &Neighbor::half_bin_no_newton;
+ else if (triclinic == 0) pb = &Neighbor::half_bin_newton;
+ else if (triclinic == 1) pb = &Neighbor::half_bin_newton_tri;
+ } else if (rq->newton == 1) {
+ if (triclinic == 0) pb = &Neighbor::half_bin_newton;
+ else if (triclinic == 1) pb = &Neighbor::half_bin_newton_tri;
+ } else if (rq->newton == 2) {
+ pb = &Neighbor::half_bin_no_newton;
+ }
} else if (style == MULTI) {
- if (newton_pair == 0) pb = &Neighbor::half_multi_no_newton;
- else if (triclinic == 0) pb = &Neighbor::half_multi_newton;
- else if (triclinic == 1) pb = &Neighbor::half_multi_newton_tri;
+ if (rq->newton == 0) {
+ if (newton_pair == 0) pb = &Neighbor::half_multi_no_newton;
+ else if (triclinic == 0) pb = &Neighbor::half_multi_newton;
+ else if (triclinic == 1) pb = &Neighbor::half_multi_newton_tri;
+ } else if (rq->newton == 1) {
+ if (triclinic == 0) pb = &Neighbor::half_multi_newton;
+ else if (triclinic == 1) pb = &Neighbor::half_multi_newton_tri;
+ } else if (rq->newton == 2) {
+ pb = &Neighbor::half_multi_no_newton;
+ }
}
} else if (rq->full) {
@@ -836,29 +859,77 @@
else if (rq->half || rq->gran || rq->respaouter) {
if (style == BIN) {
- if (newton_pair == 0) {
- if (dimension == 2) sc = &Neighbor::stencil_half_bin_2d_no_newton;
- else if (dimension == 3) sc = &Neighbor::stencil_half_bin_3d_no_newton;
- } else if (triclinic == 0) {
- if (dimension == 2) sc = &Neighbor::stencil_half_bin_2d_newton;
- else if (dimension == 3) sc = &Neighbor::stencil_half_bin_3d_newton;
- } else if (triclinic == 1) {
- if (dimension == 2) sc = &Neighbor::stencil_half_bin_2d_newton_tri;
- else if (dimension == 3)
- sc = &Neighbor::stencil_half_bin_3d_newton_tri;
+ if (rq->newton == 0) {
+ if (newton_pair == 0) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_bin_2d_no_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_bin_3d_no_newton;
+ } else if (triclinic == 0) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_bin_2d_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_bin_3d_newton;
+ } else if (triclinic == 1) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_bin_2d_newton_tri;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_bin_3d_newton_tri;
+ }
+ } else if (rq->newton == 1) {
+ if (triclinic == 0) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_bin_2d_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_bin_3d_newton;
+ } else if (triclinic == 1) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_bin_2d_newton_tri;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_bin_3d_newton_tri;
+ }
+ } else if (rq->newton == 2) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_bin_2d_no_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_bin_3d_no_newton;
}
+
} else if (style == MULTI) {
- if (newton_pair == 0) {
- if (dimension == 2) sc = &Neighbor::stencil_half_multi_2d_no_newton;
+ if (rq->newton == 0) {
+ if (newton_pair == 0) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_multi_2d_no_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_multi_3d_no_newton;
+ } else if (triclinic == 0) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_multi_2d_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_multi_3d_newton;
+ } else if (triclinic == 1) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_multi_2d_newton_tri;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_multi_3d_newton_tri;
+ }
+ } else if (rq->newton == 1) {
+ if (triclinic == 0) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_multi_2d_newton;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_multi_3d_newton;
+ } else if (triclinic == 1) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_multi_2d_newton_tri;
+ else if (dimension == 3)
+ sc = &Neighbor::stencil_half_multi_3d_newton_tri;
+ }
+ } else if (rq->newton == 2) {
+ if (dimension == 2)
+ sc = &Neighbor::stencil_half_multi_2d_no_newton;
else if (dimension == 3)
sc = &Neighbor::stencil_half_multi_3d_no_newton;
- } else if (triclinic == 0) {
- if (dimension == 2) sc = &Neighbor::stencil_half_multi_2d_newton;
- else if (dimension == 3) sc = &Neighbor::stencil_half_multi_3d_newton;
- } else if (triclinic == 1) {
- if (dimension == 2) sc = &Neighbor::stencil_half_multi_2d_newton_tri;
- else if (dimension == 3)
- sc = &Neighbor::stencil_half_multi_3d_newton_tri;
}
}
diff -Naur lammps-29Jan09/src/pair.cpp lammps-12Feb09/src/pair.cpp
--- lammps-29Jan09/src/pair.cpp 2009-01-08 14:46:20.000000000 -0700
+++ lammps-12Feb09/src/pair.cpp 2009-02-12 13:42:48.000000000 -0700
@@ -285,11 +285,11 @@
}
}
- // if vflag_global = 2
+ // if vflag_global = 2 and pair::compute() calls virial_compute()
// compute global virial via (F dot r) instead of via pairwise summation
// unset other flags as appropriate
- if (vflag_global == 2) {
+ if (vflag_global == 2 && no_virial_compute == 0) {
vflag_fdotr = 1;
vflag_global = 0;
if (vflag_atom == 0) vflag_either = 0;
diff -Naur lammps-29Jan09/src/pair_hybrid.cpp lammps-12Feb09/src/pair_hybrid.cpp
--- lammps-29Jan09/src/pair_hybrid.cpp 2009-01-05 15:26:08.000000000 -0700
+++ lammps-12Feb09/src/pair_hybrid.cpp 2009-02-12 13:42:48.000000000 -0700
@@ -71,14 +71,14 @@
{
int i,j,m,n;
- // if no_virial_compute is set and global component of incoming vflag = 2,
- // reset vflag as if it were 1
+ // if no_virial_compute is set and global component of incoming vflag = 2
+ // reset vflag as if global component were 1
// necessary since one or more sub-styles cannot compute virial as F dot r
if (no_virial_compute && vflag % 4 == 2) vflag = 1 + vflag/4 * 4;
if (eflag || vflag) ev_setup(eflag,vflag);
- else evflag = 0;
+ else evflag = vflag_fdotr = 0;
// check if global component of incoming vflag = 2
// if so, reset vflag passed to substyle as if it were 0
@@ -506,8 +506,7 @@
if (j < neighbor->nrequest) irq->otherlist = j;
else {
int newrequest = neighbor->request(this);
- neighbor->requests[newrequest]->copy_kind(irq);
- neighbor->requests[newrequest]->dnum = irq->dnum;
+ neighbor->requests[newrequest]->copy_request(irq);
irq->otherlist = newrequest;
}
diff -Naur lammps-29Jan09/src/style.h lammps-12Feb09/src/style.h
--- lammps-29Jan09/src/style.h 2009-01-19 10:26:01.000000000 -0700
+++ lammps-12Feb09/src/style.h 2009-02-06 10:05:46.000000000 -0700
@@ -364,6 +364,7 @@
#include "style_opt.h"
#include "style_peri.h"
#include "style_poems.h"
+#include "style_reax.h"
#include "style_xtc.h"
// user add-ons: individual classes and packages