Page MenuHomec4science

No OneTemporary

File Metadata

Created
Mon, Jun 24, 15:26
This file is larger than 256 KB, so syntax highlighting was skipped.
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/doc/Manual.html b/doc/Manual.html
index 30852f349..5e29998da 100644
--- a/doc/Manual.html
+++ b/doc/Manual.html
@@ -1,437 +1,437 @@
<HTML>
<HEAD>
<TITLE>LAMMPS-ICMS Users Manual</TITLE>
-<META NAME="docnumber" CONTENT="30 Apr 2014 version">
+<META NAME="docnumber" CONTENT="4 May 2014 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD>
<BODY>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H1></H1>
<CENTER><H3>LAMMPS-ICMS Documentation
</H3></CENTER>
-<CENTER><H4>30 Apr 2014 version
+<CENTER><H4>4 May 2014 version
</H4></CENTER>
<H4>Version info:
</H4>
<P>The LAMMPS "version" is the date when it was released, such as 1 May
2010. LAMMPS is updated continuously. Whenever we fix a bug or add a
feature, we release it immediately, and post a notice on <A HREF = "http://lammps.sandia.gov/bug.html">this page of
the WWW site</A>. Each dated copy of LAMMPS contains all the
features and bug-fixes up to and including that version date. The
version date is printed to the screen and logfile every time you run
LAMMPS. It is also in the file src/version.h and in the LAMMPS
directory name created when you unpack a tarball, and at the top of
the first page of the manual (this page).
</P>
<P>LAMMPS-ICMS is an experimental variant of LAMMPS with additional
features made available for testing before they will be submitted
for inclusion into the official LAMMPS tree. The source code is
based on the official LAMMPS svn repository mirror at the Institute
for Computational Molecular Science at Temple University and generally
kept up-to-date as much as possible. Sometimes, e.g. when additional
development work is needed to adapt the upstream changes into
LAMMPS-ICMS it can take longer until synchronization; and occasionally,
e.g. in case of the rewrite of the multi-threading support, the
development will be halted except for important bugfixes until
all features of LAMMPS-ICMS fully compatible with the upstream
version or replaced by alternate implementations.
</P>
<UL><LI>If you browse the HTML doc pages on the LAMMPS WWW site, they always
describe the most current version of upstream LAMMPS, but may be
missing some new features in LAMMPS-ICMS.
<LI>If you browse the HTML doc pages included in your tarball, they
describe the version you have, however, not all new features in
LAMMPS-ICMS are documented immediately.
<LI>The <A HREF = "Manual.pdf">PDF file</A> on the WWW site or in the tarball is updated
about once per month. This is because it is large, and we don't want
it to be part of every patch.
<LI>There is also a <A HREF = "Developer.pdf">Developer.pdf</A> file in the doc
directory, which describes the internal structure and algorithms of
LAMMPS.
</UL>
<P>LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel
Simulator.
</P>
<P>LAMMPS is a classical molecular dynamics simulation code designed to
run efficiently on parallel computers. It was developed at Sandia
National Laboratories, a US Department of Energy facility, with
funding from the DOE. It is an open-source code, distributed freely
under the terms of the GNU Public License (GPL).
</P>
<P>The primary developers of LAMMPS are <A HREF = "http://www.sandia.gov/~sjplimp">Steve Plimpton</A>, Aidan
Thompson, and Paul Crozier who can be contacted at
sjplimp,athomps,pscrozi at sandia.gov. The <A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> at
http://lammps.sandia.gov has more information about the code and its
uses.
</P>
<HR>
<P>The LAMMPS documentation is organized into the following sections. If
you find errors or omissions in this manual or have suggestions for
useful information to add, please send an email to the developers so
we can improve the LAMMPS documentation.
</P>
<P>Once you are familiar with LAMMPS, you may want to bookmark <A HREF = "Section_commands.html#comm">this
page</A> at Section_commands.html#comm since
it gives quick access to documentation for all LAMMPS commands.
</P>
<P><A HREF = "Manual.pdf">PDF file</A> of the entire manual, generated by
<A HREF = "http://www.easysw.com/htmldoc">htmldoc</A>
</P>
<OL><LI><A HREF = "Section_intro.html">Introduction</A>
<UL> 1.1 <A HREF = "Section_intro.html#intro_1">What is LAMMPS</A>
<BR>
1.2 <A HREF = "Section_intro.html#intro_2">LAMMPS features</A>
<BR>
1.3 <A HREF = "Section_intro.html#intro_3">LAMMPS non-features</A>
<BR>
1.4 <A HREF = "Section_intro.html#intro_4">Open source distribution</A>
<BR>
1.5 <A HREF = "Section_intro.html#intro_5">Acknowledgments and citations</A>
<BR></UL>
<LI><A HREF = "Section_start.html">Getting started</A>
<UL> 2.1 <A HREF = "Section_start.html#start_1">What's in the LAMMPS distribution</A>
<BR>
2.2 <A HREF = "Section_start.html#start_2">Making LAMMPS</A>
<BR>
2.3 <A HREF = "Section_start.html#start_3">Making LAMMPS with optional packages</A>
<BR>
2.4 <A HREF = "Section_start.html#start_4">Building LAMMPS via the Make.py script</A>
<BR>
2.5 <A HREF = "Section_start.html#start_5">Building LAMMPS as a library</A>
<BR>
2.6 <A HREF = "Section_start.html#start_6">Running LAMMPS</A>
<BR>
2.7 <A HREF = "Section_start.html#start_7">Command-line options</A>
<BR>
2.8 <A HREF = "Section_start.html#start_8">Screen output</A>
<BR>
2.9 <A HREF = "Section_start.html#start_9">Tips for users of previous versions</A>
<BR></UL>
<LI><A HREF = "Section_commands.html">Commands</A>
<UL> 3.1 <A HREF = "Section_commands.html#cmd_1">LAMMPS input script</A>
<BR>
3.2 <A HREF = "Section_commands.html#cmd_2">Parsing rules</A>
<BR>
3.3 <A HREF = "Section_commands.html#cmd_3">Input script structure</A>
<BR>
3.4 <A HREF = "Section_commands.html#cmd_4">Commands listed by category</A>
<BR>
3.5 <A HREF = "Section_commands.html#cmd_5">Commands listed alphabetically</A>
<BR></UL>
<LI><A HREF = "Section_packages.html">Packages</A>
<UL> 4.1 <A HREF = "Section_packages.html#pkg_1">Standard packages</A>
<BR>
4.2 <A HREF = "Section_packages.html#pkg_2">User packages</A>
<BR></UL>
<LI><A HREF = "Section_accelerate.html">Accelerating LAMMPS performance</A>
<UL> 5.1 <A HREF = "Section_accelerate.html#acc_1">Measuring performance</A>
<BR>
5.2 <A HREF = "Section_accelerate.html#acc_2">General strategies</A>
<BR>
5.3 <A HREF = "Section_accelerate.html#acc_3">Packages with optimized styles</A>
<BR>
5.4 <A HREF = "Section_accelerate.html#acc_4">OPT package</A>
<BR>
5.5 <A HREF = "Section_accelerate.html#acc_5">USER-OMP package</A>
<BR>
5.6 <A HREF = "Section_accelerate.html#acc_6">GPU package</A>
<BR>
5.7 <A HREF = "Section_accelerate.html#acc_7">USER-CUDA package</A>
<BR>
5.8 <A HREF = "Section_accelerate.html#acc_8">Comparison of GPU and USER-CUDA packages</A>
<BR></UL>
<LI><A HREF = "Section_howto.html">How-to discussions</A>
<UL> 6.1 <A HREF = "Section_howto.html#howto_1">Restarting a simulation</A>
<BR>
6.2 <A HREF = "Section_howto.html#howto_2">2d simulations</A>
<BR>
6.3 <A HREF = "Section_howto.html#howto_3">CHARMM and AMBER force fields</A>
<BR>
6.4 <A HREF = "Section_howto.html#howto_4">Running multiple simulations from one input script</A>
<BR>
6.5 <A HREF = "Section_howto.html#howto_5">Multi-replica simulations</A>
<BR>
6.6 <A HREF = "Section_howto.html#howto_6">Granular models</A>
<BR>
6.7 <A HREF = "Section_howto.html#howto_7">TIP3P water model</A>
<BR>
6.8 <A HREF = "Section_howto.html#howto_8">TIP4P water model</A>
<BR>
6.9 <A HREF = "Section_howto.html#howto_9">SPC water model</A>
<BR>
6.10 <A HREF = "Section_howto.html#howto_10">Coupling LAMMPS to other codes</A>
<BR>
6.11 <A HREF = "Section_howto.html#howto_11">Visualizing LAMMPS snapshots</A>
<BR>
6.12 <A HREF = "Section_howto.html#howto_12">Triclinic (non-orthogonal) simulation boxes</A>
<BR>
6.13 <A HREF = "Section_howto.html#howto_13">NEMD simulations</A>
<BR>
6.14 <A HREF = "Section_howto.html#howto_14">Finite-size spherical and aspherical particles</A>
<BR>
6.15 <A HREF = "Section_howto.html#howto_15">Output from LAMMPS (thermo, dumps, computes, fixes, variables)</A>
<BR>
6.16 <A HREF = "Section_howto.html#howto_16">Thermostatting, barostatting, and compute temperature</A>
<BR>
6.17 <A HREF = "Section_howto.html#howto_17">Walls</A>
<BR>
6.18 <A HREF = "Section_howto.html#howto_18">Elastic constants</A>
<BR>
6.19 <A HREF = "Section_howto.html#howto_19">Library interface to LAMMPS</A>
<BR>
6.20 <A HREF = "Section_howto.html#howto_20">Calculating thermal conductivity</A>
<BR>
6.21 <A HREF = "Section_howto.html#howto_21">Calculating viscosity</A>
<BR>
6.22 <A HREF = "howto_22">Calculating a diffusion coefficient</A>
<BR></UL>
<LI><A HREF = "Section_example.html">Example problems</A>
<LI><A HREF = "Section_perf.html">Performance & scalability</A>
<LI><A HREF = "Section_tools.html">Additional tools</A>
<LI><A HREF = "Section_modify.html">Modifying & extending LAMMPS</A>
<UL> 10.1 <A HREF = "Section_modify.html#mod_1">Atom styles</A>
<BR>
10.2 <A HREF = "Section_modify.html#mod_2">Bond, angle, dihedral, improper potentials</A>
<BR>
10.3 <A HREF = "Section_modify.html#mod_3">Compute styles</A>
<BR>
10.4 <A HREF = "Section_modify.html#mod_4">Dump styles</A>
<BR>
10.5 <A HREF = "Section_modify.html#mod_5">Dump custom output options</A>
<BR>
10.6 <A HREF = "Section_modify.html#mod_6">Fix styles</A>
<BR>
10.7 <A HREF = "Section_modify.html#mod_7">Input script commands</A>
<BR>
10.8 <A HREF = "Section_modify.html#mod_8">Kspace computations</A>
<BR>
10.9 <A HREF = "Section_modify.html#mod_9">Minimization styles</A>
<BR>
10.10 <A HREF = "Section_modify.html#mod_10">Pairwise potentials</A>
<BR>
10.11 <A HREF = "Section_modify.html#mod_11">Region styles</A>
<BR>
10.12 <A HREF = "Section_modify.html#mod_12">Body styles</A>
<BR>
10.13 <A HREF = "Section_modify.html#mod_13">Thermodynamic output options</A>
<BR>
10.14 <A HREF = "Section_modify.html#mod_14">Variable options</A>
<BR>
10.15 <A HREF = "Section_modify.html#mod_15">Submitting new features for inclusion in LAMMPS</A>
<BR></UL>
<LI><A HREF = "Section_python.html">Python interface</A>
<UL> 11.1 <A HREF = "Section_python.html#py_1">Building LAMMPS as a shared library</A>
<BR>
11.2 <A HREF = "Section_python.html#py_2">Installing the Python wrapper into Python</A>
<BR>
11.3 <A HREF = "Section_python.html#py_3">Extending Python with MPI to run in parallel</A>
<BR>
11.4 <A HREF = "Section_python.html#py_4">Testing the Python-LAMMPS interface</A>
<BR>
11.5 <A HREF = "Section_python.html#py_5">Using LAMMPS from Python</A>
<BR>
11.6 <A HREF = "Section_python.html#py_6">Example Python scripts that use LAMMPS</A>
<BR></UL>
<LI><A HREF = "Section_errors.html">Errors</A>
<UL> 12.1 <A HREF = "Section_errors.html#err_1">Common problems</A>
<BR>
12.2 <A HREF = "Section_errors.html#err_2">Reporting bugs</A>
<BR>
12.3 <A HREF = "Section_errors.html#err_3">Error & warning messages</A>
<BR></UL>
<LI><A HREF = "Section_history.html">Future and history</A>
<UL> 13.1 <A HREF = "Section_history.html#hist_1">Coming attractions</A>
<BR>
13.2 <A HREF = "Section_history.html#hist_2">Past versions</A>
<BR></UL>
</OL>
</BODY>
</HTML>
diff --git a/doc/Manual.txt b/doc/Manual.txt
index e4b8cb46b..4fa03cf32 100644
--- a/doc/Manual.txt
+++ b/doc/Manual.txt
@@ -1,274 +1,274 @@
<HEAD>
<TITLE>LAMMPS-ICMS Users Manual</TITLE>
-<META NAME="docnumber" CONTENT="30 Apr 2014 version">
+<META NAME="docnumber" CONTENT="4 May 2014 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD>
<BODY>
"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
<H1></H1>
LAMMPS-ICMS Documentation :c,h3
-30 Apr 2014 version :c,h4
+4 May 2014 version :c,h4
Version info: :h4
The LAMMPS "version" is the date when it was released, such as 1 May
2010. LAMMPS is updated continuously. Whenever we fix a bug or add a
feature, we release it immediately, and post a notice on "this page of
the WWW site"_bug. Each dated copy of LAMMPS contains all the
features and bug-fixes up to and including that version date. The
version date is printed to the screen and logfile every time you run
LAMMPS. It is also in the file src/version.h and in the LAMMPS
directory name created when you unpack a tarball, and at the top of
the first page of the manual (this page).
LAMMPS-ICMS is an experimental variant of LAMMPS with additional
features made available for testing before they will be submitted
for inclusion into the official LAMMPS tree. The source code is
based on the official LAMMPS svn repository mirror at the Institute
for Computational Molecular Science at Temple University and generally
kept up-to-date as much as possible. Sometimes, e.g. when additional
development work is needed to adapt the upstream changes into
LAMMPS-ICMS it can take longer until synchronization; and occasionally,
e.g. in case of the rewrite of the multi-threading support, the
development will be halted except for important bugfixes until
all features of LAMMPS-ICMS fully compatible with the upstream
version or replaced by alternate implementations.
If you browse the HTML doc pages on the LAMMPS WWW site, they always
describe the most current version of upstream LAMMPS, but may be
missing some new features in LAMMPS-ICMS. :ulb,l
If you browse the HTML doc pages included in your tarball, they
describe the version you have, however, not all new features in
LAMMPS-ICMS are documented immediately. :l
The "PDF file"_Manual.pdf on the WWW site or in the tarball is updated
about once per month. This is because it is large, and we don't want
it to be part of every patch. :l
There is also a "Developer.pdf"_Developer.pdf file in the doc
directory, which describes the internal structure and algorithms of
LAMMPS. :ule,l
LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel
Simulator.
LAMMPS is a classical molecular dynamics simulation code designed to
run efficiently on parallel computers. It was developed at Sandia
National Laboratories, a US Department of Energy facility, with
funding from the DOE. It is an open-source code, distributed freely
under the terms of the GNU Public License (GPL).
The primary developers of LAMMPS are "Steve Plimpton"_sjp, Aidan
Thompson, and Paul Crozier who can be contacted at
sjplimp,athomps,pscrozi at sandia.gov. The "LAMMPS WWW Site"_lws at
http://lammps.sandia.gov has more information about the code and its
uses.
:link(bug,http://lammps.sandia.gov/bug.html)
:link(sjp,http://www.sandia.gov/~sjplimp)
:line
The LAMMPS documentation is organized into the following sections. If
you find errors or omissions in this manual or have suggestions for
useful information to add, please send an email to the developers so
we can improve the LAMMPS documentation.
Once you are familiar with LAMMPS, you may want to bookmark "this
page"_Section_commands.html#comm at Section_commands.html#comm since
it gives quick access to documentation for all LAMMPS commands.
"PDF file"_Manual.pdf of the entire manual, generated by
"htmldoc"_http://www.easysw.com/htmldoc
"Introduction"_Section_intro.html :olb,l
1.1 "What is LAMMPS"_intro_1 :ulb,b
1.2 "LAMMPS features"_intro_2 :b
1.3 "LAMMPS non-features"_intro_3 :b
1.4 "Open source distribution"_intro_4 :b
1.5 "Acknowledgments and citations"_intro_5 :ule,b
"Getting started"_Section_start.html :l
2.1 "What's in the LAMMPS distribution"_start_1 :ulb,b
2.2 "Making LAMMPS"_start_2 :b
2.3 "Making LAMMPS with optional packages"_start_3 :b
2.4 "Building LAMMPS via the Make.py script"_start_4 :b
2.5 "Building LAMMPS as a library"_start_5 :b
2.6 "Running LAMMPS"_start_6 :b
2.7 "Command-line options"_start_7 :b
2.8 "Screen output"_start_8 :b
2.9 "Tips for users of previous versions"_start_9 :ule,b
"Commands"_Section_commands.html :l
3.1 "LAMMPS input script"_cmd_1 :ulb,b
3.2 "Parsing rules"_cmd_2 :b
3.3 "Input script structure"_cmd_3 :b
3.4 "Commands listed by category"_cmd_4 :b
3.5 "Commands listed alphabetically"_cmd_5 :ule,b
"Packages"_Section_packages.html :l
4.1 "Standard packages"_pkg_1 :ulb,b
4.2 "User packages"_pkg_2 :ule,b
"Accelerating LAMMPS performance"_Section_accelerate.html :l
5.1 "Measuring performance"_acc_1 :ulb,b
5.2 "General strategies"_acc_2 :b
5.3 "Packages with optimized styles"_acc_3 :b
5.4 "OPT package"_acc_4 :b
5.5 "USER-OMP package"_acc_5 :b
5.6 "GPU package"_acc_6 :b
5.7 "USER-CUDA package"_acc_7 :b
5.8 "Comparison of GPU and USER-CUDA packages"_acc_8 :ule,b
"How-to discussions"_Section_howto.html :l
6.1 "Restarting a simulation"_howto_1 :ulb,b
6.2 "2d simulations"_howto_2 :b
6.3 "CHARMM and AMBER force fields"_howto_3 :b
6.4 "Running multiple simulations from one input script"_howto_4 :b
6.5 "Multi-replica simulations"_howto_5 :b
6.6 "Granular models"_howto_6 :b
6.7 "TIP3P water model"_howto_7 :b
6.8 "TIP4P water model"_howto_8 :b
6.9 "SPC water model"_howto_9 :b
6.10 "Coupling LAMMPS to other codes"_howto_10 :b
6.11 "Visualizing LAMMPS snapshots"_howto_11 :b
6.12 "Triclinic (non-orthogonal) simulation boxes"_howto_12 :b
6.13 "NEMD simulations"_howto_13 :b
6.14 "Finite-size spherical and aspherical particles"_howto_14 :b
6.15 "Output from LAMMPS (thermo, dumps, computes, fixes, variables)"_howto_15 :b
6.16 "Thermostatting, barostatting, and compute temperature"_howto_16 :b
6.17 "Walls"_howto_17 :b
6.18 "Elastic constants"_howto_18 :b
6.19 "Library interface to LAMMPS"_howto_19 :b
6.20 "Calculating thermal conductivity"_howto_20 :b
6.21 "Calculating viscosity"_howto_21 :b
6.22 "Calculating a diffusion coefficient"_howto_22 :ule,b
"Example problems"_Section_example.html :l
"Performance & scalability"_Section_perf.html :l
"Additional tools"_Section_tools.html :l
"Modifying & extending LAMMPS"_Section_modify.html :l
10.1 "Atom styles"_mod_1 :ulb,b
10.2 "Bond, angle, dihedral, improper potentials"_mod_2 :b
10.3 "Compute styles"_mod_3 :b
10.4 "Dump styles"_mod_4 :b
10.5 "Dump custom output options"_mod_5 :b
10.6 "Fix styles"_mod_6 :b
10.7 "Input script commands"_mod_7 :b
10.8 "Kspace computations"_mod_8 :b
10.9 "Minimization styles"_mod_9 :b
10.10 "Pairwise potentials"_mod_10 :b
10.11 "Region styles"_mod_11 :b
10.12 "Body styles"_mod_12 :b
10.13 "Thermodynamic output options"_mod_13 :b
10.14 "Variable options"_mod_14 :b
10.15 "Submitting new features for inclusion in LAMMPS"_mod_15 :ule,b
"Python interface"_Section_python.html :l
11.1 "Building LAMMPS as a shared library"_py_1 :ulb,b
11.2 "Installing the Python wrapper into Python"_py_2 :b
11.3 "Extending Python with MPI to run in parallel"_py_3 :b
11.4 "Testing the Python-LAMMPS interface"_py_4 :b
11.5 "Using LAMMPS from Python"_py_5 :b
11.6 "Example Python scripts that use LAMMPS"_py_6 :ule,b
"Errors"_Section_errors.html :l
12.1 "Common problems"_err_1 :ulb,b
12.2 "Reporting bugs"_err_2 :b
12.3 "Error & warning messages"_err_3 :ule,b
"Future and history"_Section_history.html :l
13.1 "Coming attractions"_hist_1 :ulb,b
13.2 "Past versions"_hist_2 :ule,b
:ole
:link(intro_1,Section_intro.html#intro_1)
:link(intro_2,Section_intro.html#intro_2)
:link(intro_3,Section_intro.html#intro_3)
:link(intro_4,Section_intro.html#intro_4)
:link(intro_5,Section_intro.html#intro_5)
:link(start_1,Section_start.html#start_1)
:link(start_2,Section_start.html#start_2)
:link(start_3,Section_start.html#start_3)
:link(start_4,Section_start.html#start_4)
:link(start_5,Section_start.html#start_5)
:link(start_6,Section_start.html#start_6)
:link(start_7,Section_start.html#start_7)
:link(start_8,Section_start.html#start_8)
:link(start_9,Section_start.html#start_9)
:link(cmd_1,Section_commands.html#cmd_1)
:link(cmd_2,Section_commands.html#cmd_2)
:link(cmd_3,Section_commands.html#cmd_3)
:link(cmd_4,Section_commands.html#cmd_4)
:link(cmd_5,Section_commands.html#cmd_5)
:link(pkg_1,Section_packages.html#pkg_1)
:link(pkg_2,Section_packages.html#pkg_2)
:link(acc_1,Section_accelerate.html#acc_1)
:link(acc_2,Section_accelerate.html#acc_2)
:link(acc_3,Section_accelerate.html#acc_3)
:link(acc_4,Section_accelerate.html#acc_4)
:link(acc_5,Section_accelerate.html#acc_5)
:link(acc_6,Section_accelerate.html#acc_6)
:link(acc_7,Section_accelerate.html#acc_7)
:link(acc_8,Section_accelerate.html#acc_8)
:link(howto_1,Section_howto.html#howto_1)
:link(howto_2,Section_howto.html#howto_2)
:link(howto_3,Section_howto.html#howto_3)
:link(howto_4,Section_howto.html#howto_4)
:link(howto_5,Section_howto.html#howto_5)
:link(howto_6,Section_howto.html#howto_6)
:link(howto_7,Section_howto.html#howto_7)
:link(howto_8,Section_howto.html#howto_8)
:link(howto_9,Section_howto.html#howto_9)
:link(howto_10,Section_howto.html#howto_10)
:link(howto_11,Section_howto.html#howto_11)
:link(howto_12,Section_howto.html#howto_12)
:link(howto_13,Section_howto.html#howto_13)
:link(howto_14,Section_howto.html#howto_14)
:link(howto_15,Section_howto.html#howto_15)
:link(howto_16,Section_howto.html#howto_16)
:link(howto_17,Section_howto.html#howto_17)
:link(howto_18,Section_howto.html#howto_18)
:link(howto_19,Section_howto.html#howto_19)
:link(howto_20,Section_howto.html#howto_20)
:link(howto_21,Section_howto.html#howto_21)
:link(mod_1,Section_modify.html#mod_1)
:link(mod_2,Section_modify.html#mod_2)
:link(mod_3,Section_modify.html#mod_3)
:link(mod_4,Section_modify.html#mod_4)
:link(mod_5,Section_modify.html#mod_5)
:link(mod_6,Section_modify.html#mod_6)
:link(mod_7,Section_modify.html#mod_7)
:link(mod_8,Section_modify.html#mod_8)
:link(mod_9,Section_modify.html#mod_9)
:link(mod_10,Section_modify.html#mod_10)
:link(mod_11,Section_modify.html#mod_11)
:link(mod_12,Section_modify.html#mod_12)
:link(mod_13,Section_modify.html#mod_13)
:link(mod_14,Section_modify.html#mod_14)
:link(mod_15,Section_modify.html#mod_15)
:link(py_1,Section_python.html#py_1)
:link(py_2,Section_python.html#py_2)
:link(py_3,Section_python.html#py_3)
:link(py_4,Section_python.html#py_4)
:link(py_5,Section_python.html#py_5)
:link(py_6,Section_python.html#py_6)
:link(err_1,Section_errors.html#err_1)
:link(err_2,Section_errors.html#err_2)
:link(err_3,Section_errors.html#err_3)
:link(hist_1,Section_history.html#hist_1)
:link(hist_2,Section_history.html#hist_2)
</BODY>
diff --git a/doc/Section_python.html b/doc/Section_python.html
index 6fcc0f0e8..82addb505 100644
--- a/doc/Section_python.html
+++ b/doc/Section_python.html
@@ -1,659 +1,659 @@
<HTML>
<CENTER><A HREF = "Section_modify.html">Previous Section</A> - <A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A> - <A HREF = "Section_errors.html">Next Section</A>
</CENTER>
<HR>
<H3>11. Python interface to LAMMPS
</H3>
<P>This section describes how to build and use LAMMPS via a Python
interface.
</P>
<UL><LI>11.1 <A HREF = "#py_1">Building LAMMPS as a shared library</A>
<LI>11.2 <A HREF = "#py_2">Installing the Python wrapper into Python</A>
<LI>11.3 <A HREF = "#py_3">Extending Python with MPI to run in parallel</A>
<LI>11.4 <A HREF = "#py_4">Testing the Python-LAMMPS interface</A>
<LI>11.5 <A HREF = "#py_5">Using LAMMPS from Python</A>
<LI>11.6 <A HREF = "#py_6">Example Python scripts that use LAMMPS</A>
</UL>
<P>The LAMMPS distribution includes the file python/lammps.py which wraps
the library interface to LAMMPS. This file makes it is possible to
run LAMMPS, invoke LAMMPS commands or give it an input script, extract
LAMMPS results, an modify internal LAMMPS variables, either from a
Python script or interactively from a Python prompt. You can do the
former in serial or parallel. Running Python interactively in
parallel does not generally work, unless you have a package installed
that extends your Python to enable multiple instances of Python to
read what you type.
</P>
<P><A HREF = "http://www.python.org">Python</A> is a powerful scripting and programming
language which can be used to wrap software like LAMMPS and other
packages. It can be used to glue multiple pieces of software
together, e.g. to run a coupled or multiscale model. See <A HREF = "Section_howto.html#howto_10">Section
section</A> of the manual and the couple
directory of the distribution for more ideas about coupling LAMMPS to
other codes. See <A HREF = "Section_start.html#start_5">Section_start 4</A> about
how to build LAMMPS as a library, and <A HREF = "Section_howto.html#howto_19">Section_howto
19</A> for a description of the library
interface provided in src/library.cpp and src/library.h and how to
extend it for your needs. As described below, that interface is what
is exposed to Python. It is designed to be easy to add functions to.
This can easily extend the Python inteface as well. See details
below.
</P>
<P>By using the Python interface, LAMMPS can also be coupled with a GUI
or other visualization tools that display graphs or animations in real
time as LAMMPS runs. Examples of such scripts are inlcluded in the
python directory.
</P>
<P>Two advantages of using Python are how concise the language is, and
that it can be run interactively, enabling rapid development and
debugging of programs. If you use it to mostly invoke costly
operations within LAMMPS, such as running a simulation for a
reasonable number of timesteps, then the overhead cost of invoking
LAMMPS thru Python will be negligible.
</P>
<P>Before using LAMMPS from a Python script, you need to do two things.
You need to build LAMMPS as a dynamic shared library, so it can be
loaded by Python. And you need to tell Python how to find the library
and the Python wrapper file python/lammps.py. Both these steps are
discussed below. If you wish to run LAMMPS in parallel from Python,
you also need to extend your Python with MPI. This is also discussed
below.
</P>
<P>The Python wrapper for LAMMPS uses the amazing and magical (to me)
"ctypes" package in Python, which auto-generates the interface code
needed between Python and a set of C interface routines for a library.
Ctypes is part of standard Python for versions 2.5 and later. You can
check which version of Python you have installed, by simply typing
"python" at a shell prompt.
</P>
<HR>
<HR>
<A NAME = "py_1"></A><H4>11.1 Building LAMMPS as a shared library
</H4>
<P>Instructions on how to build LAMMPS as a shared library are given in
<A HREF = "Section_start.html#start_5">Section_start 5</A>. A shared library is one
that is dynamically loadable, which is what Python requires. On Linux
this is a library file that ends in ".so", not ".a".
</P>
<P>From the src directory, type
</P>
<PRE>make makeshlib
make -f Makefile.shlib foo
</PRE>
<P>where foo is the machine target name, such as linux or g++ or serial.
This should create the file liblammps_foo.so in the src directory, as
well as a soft link liblammps.so, which is what the Python wrapper will
load by default. Note that if you are building multiple machine
versions of the shared library, the soft link is always set to the
most recently built version.
</P>
<P>If this fails, see <A HREF = "Section_start.html#start_5">Section_start 5</A> for
more details, especially if your LAMMPS build uses auxiliary libraries
like MPI or FFTW which may not be built as shared libraries on your
system.
</P>
<HR>
<A NAME = "py_2"></A><H4>11.2 Installing the Python wrapper into Python
</H4>
<P>For Python to invoke LAMMPS, there are 2 files it needs to know about:
</P>
<UL><LI>python/lammps.py
<LI>src/liblammps.so
</UL>
<P>Lammps.py is the Python wrapper on the LAMMPS library interface.
Liblammps.so is the shared LAMMPS library that Python loads, as
described above.
</P>
<P>You can insure Python can find these files in one of two ways:
</P>
<UL><LI>set two environment variables
<LI>run the python/install.py script
</UL>
<P>If you set the paths to these files as environment variables, you only
have to do it once. For the csh or tcsh shells, add something like
this to your ~/.cshrc file, one line for each of the two files:
</P>
<PRE>setenv PYTHONPATH $<I>PYTHONPATH</I>:/home/sjplimp/lammps/python
setenv LD_LIBRARY_PATH $<I>LD_LIBRARY_PATH</I>:/home/sjplimp/lammps/src
</PRE>
<P>If you use the python/install.py script, you need to invoke it every
time you rebuild LAMMPS (as a shared library) or make changes to the
python/lammps.py file.
</P>
<P>You can invoke install.py from the python directory as
</P>
<PRE>% python install.py [libdir] [pydir]
</PRE>
<P>The optional libdir is where to copy the LAMMPS shared library to; the
default is /usr/local/lib. The optional pydir is where to copy the
lammps.py file to; the default is the site-packages directory of the
version of Python that is running the install script.
</P>
<P>Note that libdir must be a location that is in your default
LD_LIBRARY_PATH, like /usr/local/lib or /usr/lib. And pydir must be a
location that Python looks in by default for imported modules, like
its site-packages dir. If you want to copy these files to
non-standard locations, such as within your own user space, you will
need to set your PYTHONPATH and LD_LIBRARY_PATH environment variables
accordingly, as above.
</P>
<P>If the install.py script does not allow you to copy files into system
directories, prefix the python command with "sudo". If you do this,
make sure that the Python that root runs is the same as the Python you
run. E.g. you may need to do something like
</P>
<PRE>% sudo /usr/local/bin/python install.py [libdir] [pydir]
</PRE>
<P>You can also invoke install.py from the make command in the src
directory as
</P>
<PRE>% make install-python
</PRE>
<P>In this mode you cannot append optional arguments. Again, you may
need to prefix this with "sudo". In this mode you cannot control
which Python is invoked by root.
</P>
<P>Note that if you want Python to be able to load different versions of
the LAMMPS shared library (see <A HREF = "#py_5">this section</A> below), you will
need to manually copy files like liblammps_g++.so into the appropriate
system directory. This is not needed if you set the LD_LIBRARY_PATH
environment variable as described above.
</P>
<HR>
<A NAME = "py_3"></A><H4>11.3 Extending Python with MPI to run in parallel
</H4>
<P>If you wish to run LAMMPS in parallel from Python, you need to extend
your Python with an interface to MPI. This also allows you to
make MPI calls directly from Python in your script, if you desire.
</P>
<P>There are several Python packages available that purport to wrap MPI
as a library and allow MPI functions to be called from Python.
</P>
<P>These include
</P>
<UL><LI><A HREF = "http://pympi.sourceforge.net/">pyMPI</A>
<LI><A HREF = "http://code.google.com/p/maroonmpi/">maroonmpi</A>
<LI><A HREF = "http://code.google.com/p/mpi4py/">mpi4py</A>
<LI><A HREF = "http://nbcr.sdsc.edu/forum/viewtopic.php?t=89&sid=c997fefc3933bd66204875b436940f16">myMPI</A>
<LI><A HREF = "http://code.google.com/p/pypar">Pypar</A>
</UL>
<P>All of these except pyMPI work by wrapping the MPI library and
exposing (some portion of) its interface to your Python script. This
means Python cannot be used interactively in parallel, since they do
not address the issue of interactive input to multiple instances of
Python running on different processors. The one exception is pyMPI,
which alters the Python interpreter to address this issue, and (I
believe) creates a new alternate executable (in place of "python"
itself) as a result.
</P>
<P>In principle any of these Python/MPI packages should work to invoke
LAMMPS in parallel and MPI calls themselves from a Python script which
is itself running in parallel. However, when I downloaded and looked
at a few of them, their documentation was incomplete and I had trouble
with their installation. It's not clear if some of the packages are
still being actively developed and supported.
</P>
<P>The one I recommend, since I have successfully used it with LAMMPS, is
Pypar. Pypar requires the ubiquitous <A HREF = "http://numpy.scipy.org">Numpy
package</A> be installed in your Python. After
launching python, type
</P>
<PRE>import numpy
</PRE>
<P>to see if it is installed. If not, here is how to install it (version
1.3.0b1 as of April 2009). Unpack the numpy tarball and from its
top-level directory, type
</P>
<PRE>python setup.py build
sudo python setup.py install
</PRE>
<P>The "sudo" is only needed if required to copy Numpy files into your
Python distribution's site-packages directory.
</P>
<P>To install Pypar (version pypar-2.1.4_94 as of Aug 2012), unpack it
and from its "source" directory, type
</P>
<PRE>python setup.py build
sudo python setup.py install
</PRE>
<P>Again, the "sudo" is only needed if required to copy Pypar files into
your Python distribution's site-packages directory.
</P>
<P>If you have successully installed Pypar, you should be able to run
Python and type
</P>
<PRE>import pypar
</PRE>
<P>without error. You should also be able to run python in parallel
on a simple test script
</P>
<PRE>% mpirun -np 4 python test.py
</PRE>
<P>where test.py contains the lines
</P>
<PRE>import pypar
print "Proc %d out of %d procs" % (pypar.rank(),pypar.size())
</PRE>
<P>and see one line of output for each processor you run on.
</P>
<P>IMPORTANT NOTE: To use Pypar and LAMMPS in parallel from Python, you
must insure both are using the same version of MPI. If you only have
one MPI installed on your system, this is not an issue, but it can be
if you have multiple MPIs. Your LAMMPS build is explicit about which
MPI it is using, since you specify the details in your lo-level
src/MAKE/Makefile.foo file. Pypar uses the "mpicc" command to find
information about the MPI it uses to build against. And it tries to
load "libmpi.so" from the LD_LIBRARY_PATH. This may or may not find
the MPI library that LAMMPS is using. If you have problems running
both Pypar and LAMMPS together, this is an issue you may need to
address, e.g. by moving other MPI installations so that Pypar finds
the right one.
</P>
<HR>
<A NAME = "py_4"></A><H4>11.4 Testing the Python-LAMMPS interface
</H4>
<P>To test if LAMMPS is callable from Python, launch Python interactively
and type:
</P>
<PRE>>>> from lammps import lammps
>>> lmp = lammps()
</PRE>
<P>If you get no errors, you're ready to use LAMMPS from Python. If the
2nd command fails, the most common error to see is
</P>
<PRE>OSError: Could not load LAMMPS dynamic library
</PRE>
<P>which means Python was unable to load the LAMMPS shared library. This
typically occurs if the system can't find the LAMMPS shared library or
one of the auxiliary shared libraries it depends on, or if something
about the library is incompatible with your Python. The error message
should give you an indication of what went wrong.
</P>
<P>You can also test the load directly in Python as follows, without
first importing from the lammps.py file:
</P>
<PRE>>>> from ctypes import CDLL
>>> CDLL("liblammps.so")
</PRE>
<P>If an error occurs, carefully go thru the steps in <A HREF = "Section_start.html#start_5">Section_start
5</A> and above about building a shared
library and about insuring Python can find the necessary two files
it needs.
</P>
<H5><B>Test LAMMPS and Python in serial:</B>
</H5>
<P>To run a LAMMPS test in serial, type these lines into Python
interactively from the bench directory:
</P>
<PRE>>>> from lammps import lammps
>>> lmp = lammps()
>>> lmp.file("in.lj")
</PRE>
<P>Or put the same lines in the file test.py and run it as
</P>
<PRE>% python test.py
</PRE>
<P>Either way, you should see the results of running the in.lj benchmark
on a single processor appear on the screen, the same as if you had
typed something like:
</P>
<PRE>lmp_g++ < in.lj
</PRE>
<H5><B>Test LAMMPS and Python in parallel:</B>
</H5>
<P>To run LAMMPS in parallel, assuming you have installed the
<A HREF = "http://datamining.anu.edu.au/~ole/pypar">Pypar</A> package as discussed
above, create a test.py file containing these lines:
</P>
<PRE>import pypar
from lammps import lammps
lmp = lammps()
lmp.file("in.lj")
print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp
pypar.finalize()
</PRE>
<P>You can then run it in parallel as:
</P>
<PRE>% mpirun -np 4 python test.py
</PRE>
<P>and you should see the same output as if you had typed
</P>
<PRE>% mpirun -np 4 lmp_g++ < in.lj
</PRE>
<P>Note that if you leave out the 3 lines from test.py that specify Pypar
commands you will instantiate and run LAMMPS independently on each of
the P processors specified in the mpirun command. In this case you
should get 4 sets of output, each showing that a LAMMPS run was made
on a single processor, instead of one set of output showing that
LAMMPS ran on 4 processors. If the 1-processor outputs occur, it
means that Pypar is not working correctly.
</P>
<P>Also note that once you import the PyPar module, Pypar initializes MPI
for you, and you can use MPI calls directly in your Python script, as
described in the Pypar documentation. The last line of your Python
script should be pypar.finalize(), to insure MPI is shut down
correctly.
</P>
<H5><B>Running Python scripts:</B>
</H5>
<P>Note that any Python script (not just for LAMMPS) can be invoked in
one of several ways:
</P>
<PRE>% python foo.script
% python -i foo.script
% foo.script
</PRE>
<P>The last command requires that the first line of the script be
something like this:
</P>
<PRE>#!/usr/local/bin/python
#!/usr/local/bin/python -i
</PRE>
<P>where the path points to where you have Python installed, and that you
have made the script file executable:
</P>
<PRE>% chmod +x foo.script
</PRE>
<P>Without the "-i" flag, Python will exit when the script finishes.
With the "-i" flag, you will be left in the Python interpreter when
the script finishes, so you can type subsequent commands. As
mentioned above, you can only run Python interactively when running
Python on a single processor, not in parallel.
</P>
<HR>
<HR>
<A NAME = "py_5"></A><H4>11.5 Using LAMMPS from Python
</H4>
<P>The Python interface to LAMMPS consists of a Python "lammps" module,
the source code for which is in python/lammps.py, which creates a
"lammps" object, with a set of methods that can be invoked on that
object. The sample Python code below assumes you have first imported
the "lammps" module in your Python script, as follows:
</P>
<PRE>from lammps import lammps
</PRE>
<P>These are the methods defined by the lammps module. If you look
at the file src/library.cpp you will see that they correspond
one-to-one with calls you can make to the LAMMPS library from a C++ or
C or Fortran program.
</P>
<PRE>lmp = lammps() # create a LAMMPS object using the default liblammps.so library
lmp = lammps("g++") # create a LAMMPS object using the liblammps_g++.so library
lmp = lammps("",list) # ditto, with command-line args, e.g. list = ["-echo","screen"]
lmp = lammps("g++",list)
</PRE>
<PRE>lmp.close() # destroy a LAMMPS object
</PRE>
<PRE>lmp.file(file) # run an entire input script, file = "in.lj"
lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100"
</PRE>
<PRE>xlo = lmp.extract_global(name,type) # extract a global quantity
# name = "boxxlo", "nlocal", etc
# type = 0 = int
# 1 = double
</PRE>
<PRE>coords = lmp.extract_atom(name,type) # extract a per-atom quantity
# name = "x", "type", etc
# type = 0 = vector of ints
# 1 = array of ints
# 2 = vector of doubles
# 3 = array of doubles
</PRE>
<PRE>eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute
v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix
# id = ID of compute or fix
# style = 0 = global data
# 1 = per-atom data
# 2 = local data
# type = 0 = scalar
# 1 = vector
# 2 = array
# i,j = indices of value in global vector or array
</PRE>
<PRE>var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable
# name = name of variable
# group = group ID (ignored for equal-style variables)
# flag = 0 = equal-style variable
# 1 = atom-style variable
</PRE>
<PRE>natoms = lmp.get_natoms() # total # of atoms as int
data = lmp.gather_atoms(name,type,count) # return atom attribute of all atoms gathered into data, ordered by atom ID
# name = "x", "charge", "type", etc
# count = # of per-atom values, 1 or 3, etc
lmp.scatter_atoms(name,type,count,data) # scatter atom attribute of all atoms from data, ordered by atom ID
# name = "x", "charge", "type", etc
# count = # of per-atom values, 1 or 3, etc
</PRE>
<HR>
<P>IMPORTANT NOTE: Currently, the creation of a LAMMPS object from within
lammps.py does not take an MPI communicator as an argument. There
should be a way to do this, so that the LAMMPS instance runs on a
subset of processors if desired, but I don't know how to do it from
Pypar. So for now, it runs with MPI_COMM_WORLD, which is all the
processors. If someone figures out how to do this with one or more of
the Python wrappers for MPI, like Pypar, please let us know and we
will amend these doc pages.
</P>
<P>Note that you can create multiple LAMMPS objects in your Python
script, and coordinate and run multiple simulations, e.g.
</P>
<PRE>from lammps import lammps
lmp1 = lammps()
lmp2 = lammps()
lmp1.file("in.file1")
lmp2.file("in.file2")
</PRE>
<P>The file() and command() methods allow an input script or single
commands to be invoked.
</P>
<P>The extract_global(), extract_atom(), extract_compute(),
extract_fix(), and extract_variable() methods return values or
pointers to data structures internal to LAMMPS.
</P>
<P>For extract_global() see the src/library.cpp file for the list of
valid names. New names could easily be added. A double or integer is
returned. You need to specify the appropriate data type via the type
argument.
</P>
<P>For extract_atom(), a pointer to internal LAMMPS atom-based data is
returned, which you can use via normal Python subscripting. See the
extract() method in the src/atom.cpp file for a list of valid names.
Again, new names could easily be added. A pointer to a vector of
doubles or integers, or a pointer to an array of doubles (double **)
or integers (int **) is returned. You need to specify the appropriate
data type via the type argument.
</P>
<P>For extract_compute() and extract_fix(), the global, per-atom, or
local data calulated by the compute or fix can be accessed. What is
returned depends on whether the compute or fix calculates a scalar or
vector or array. For a scalar, a single double value is returned. If
the compute or fix calculates a vector or array, a pointer to the
internal LAMMPS data is returned, which you can use via normal Python
subscripting. The one exception is that for a fix that calculates a
global vector or array, a single double value from the vector or array
is returned, indexed by I (vector) or I and J (array). I,J are
zero-based indices. The I,J arguments can be left out if not needed.
See <A HREF = "Section_howto.html#howto_15">Section_howto 15</A> of the manual for a
discussion of global, per-atom, and local data, and of scalar, vector,
and array data types. See the doc pages for individual
<A HREF = "compute.html">computes</A> and <A HREF = "fix.html">fixes</A> for a description of what
they calculate and store.
</P>
<P>For extract_variable(), an <A HREF = "variable.html">equal-style or atom-style
variable</A> is evaluated and its result returned.
</P>
<P>For equal-style variables a single double value is returned and the
group argument is ignored. For atom-style variables, a vector of
doubles is returned, one value per atom, which you can use via normal
Python subscripting. The values will be zero for atoms not in the
specified group.
</P>
<P>The get_natoms() method returns the total number of atoms in the
simulation, as an int.
</P>
<P>The gather_atoms() method returns a ctypes vector of ints or doubles
as specified by type, of length count*natoms, for the property of all
the atoms in the simulation specified by name, ordered by count and
then by atom ID. The vector can be used via normal Python
subscripting. If atom IDs are not consecutively ordered within
LAMMPS, a None is returned as indication of an error.
</P>
<P>Note that the data structure gather_atoms("x") returns is different
from the data structure returned by extract_atom("x") in four ways.
(1) Gather_atoms() returns a vector which you index as x[i];
extract_atom() returns an array which you index as x[i][j]. (2)
Gather_atoms() orders the atoms by atom ID while extract_atom() does
not. (3) Gathert_atoms() returns a list of all atoms in the
simulation; extract_atoms() returns just the atoms local to each
processor. (4) Finally, the gather_atoms() data structure is a copy
of the atom coords stored internally in LAMMPS, whereas extract_atom()
returns an array that effectively points directly to the internal
data. This means you can change values inside LAMMPS from Python by
assigning a new values to the extract_atom() array. To do this with
the gather_atoms() vector, you need to change values in the vector,
then invoke the scatter_atoms() method.
</P>
<P>The scatter_atoms() method takes a vector of ints or doubles as
specified by type, of length count*natoms, for the property of all the
atoms in the simulation specified by name, ordered by bount and then
by atom ID. It uses the vector of data to overwrite the corresponding
properties for each atom inside LAMMPS. This requires LAMMPS to have
its "map" option enabled; see the <A HREF = "atom_modify.html">atom_modify</A>
command for details. If it is not, or if atom IDs are not
consecutively ordered, no coordinates are reset.
</P>
<P>The array of coordinates passed to scatter_atoms() must be a ctypes
vector of ints or doubles, allocated and initialized something like
this:
</P>
<PRE>from ctypes import *
natoms = lmp.get_natoms()
n3 = 3*natoms
x = (n3*c_double)()
-x<B>0</B> = x coord of atom with ID 1
-x<B>1</B> = y coord of atom with ID 1
-x<B>2</B> = z coord of atom with ID 1
-x<B>3</B> = x coord of atom with ID 2
+x[0] = x coord of atom with ID 1
+x[1] = y coord of atom with ID 1
+x[2] = z coord of atom with ID 1
+x[3] = x coord of atom with ID 2
...
-x<B>n3-1</B> = z coord of atom with ID natoms
+x[n3-1] = z coord of atom with ID natoms
lmp.scatter_coords("x",1,3,x)
</PRE>
<P>Alternatively, you can just change values in the vector returned by
gather_atoms("x",1,3), since it is a ctypes vector of doubles.
</P>
<HR>
<P>As noted above, these Python class methods correspond one-to-one with
the functions in the LAMMPS library interface in src/library.cpp and
library.h. This means you can extend the Python wrapper via the
following steps:
</P>
<UL><LI>Add a new interface function to src/library.cpp and
src/library.h.
<LI>Rebuild LAMMPS as a shared library.
<LI>Add a wrapper method to python/lammps.py for this interface
function.
<LI>You should now be able to invoke the new interface function from a
Python script. Isn't ctypes amazing?
</UL>
<HR>
<HR>
<A NAME = "py_6"></A><H4>11.6 Example Python scripts that use LAMMPS
</H4>
<P>These are the Python scripts included as demos in the python/examples
directory of the LAMMPS distribution, to illustrate the kinds of
things that are possible when Python wraps LAMMPS. If you create your
own scripts, send them to us and we can include them in the LAMMPS
distribution.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR><TD >trivial.py</TD><TD > read/run a LAMMPS input script thru Python</TD></TR>
<TR><TD >demo.py</TD><TD > invoke various LAMMPS library interface routines</TD></TR>
<TR><TD >simple.py</TD><TD > mimic operation of couple/simple/simple.cpp in Python</TD></TR>
<TR><TD >gui.py</TD><TD > GUI go/stop/temperature-slider to control LAMMPS</TD></TR>
<TR><TD >plot.py</TD><TD > real-time temeperature plot with GnuPlot via Pizza.py</TD></TR>
<TR><TD >viz_tool.py</TD><TD > real-time viz via some viz package</TD></TR>
<TR><TD >vizplotgui_tool.py</TD><TD > combination of viz_tool.py and plot.py and gui.py
</TD></TR></TABLE></DIV>
<HR>
<P>For the viz_tool.py and vizplotgui_tool.py commands, replace "tool"
with "gl" or "atomeye" or "pymol" or "vmd", depending on what
visualization package you have installed.
</P>
<P>Note that for GL, you need to be able to run the Pizza.py GL tool,
which is included in the pizza sub-directory. See the <A HREF = "http://www.sandia.gov/~sjplimp/pizza.html">Pizza.py doc
pages</A> for more info:
</P>
<P>Note that for AtomEye, you need version 3, and there is a line in the
scripts that specifies the path and name of the executable. See the
AtomEye WWW pages <A HREF = "http://mt.seas.upenn.edu/Archive/Graphics/A">here</A> or <A HREF = "http://mt.seas.upenn.edu/Archive/Graphics/A3/A3.html">here</A> for more details:
</P>
<PRE>http://mt.seas.upenn.edu/Archive/Graphics/A
http://mt.seas.upenn.edu/Archive/Graphics/A3/A3.html
</PRE>
<P>The latter link is to AtomEye 3 which has the scriping
capability needed by these Python scripts.
</P>
<P>Note that for PyMol, you need to have built and installed the
open-source version of PyMol in your Python, so that you can import it
from a Python script. See the PyMol WWW pages <A HREF = "http://www.pymol.org">here</A> or
<A HREF = "http://sourceforge.net/scm/?type=svn&group_id=4546">here</A> for more details:
</P>
<PRE>http://www.pymol.org
http://sourceforge.net/scm/?type=svn&group_id=4546
</PRE>
<P>The latter link is to the open-source version.
</P>
<P>Note that for VMD, you need a fairly current version (1.8.7 works for
me) and there are some lines in the pizza/vmd.py script for 4 PIZZA
variables that have to match the VMD installation on your system.
</P>
<HR>
<P>See the python/README file for instructions on how to run them and the
source code for individual scripts for comments about what they do.
</P>
<P>Here are screenshots of the vizplotgui_tool.py script in action for
different visualization package options. Click to see larger images:
</P>
<A HREF = "JPG/screenshot_gl.jpg"><IMG SRC = "JPG/screenshot_gl_small.jpg"></A>
<A HREF = "JPG/screenshot_atomeye.jpg"><IMG SRC = "JPG/screenshot_atomeye_small.jpg"></A>
<A HREF = "JPG/screenshot_pymol.jpg"><IMG SRC = "JPG/screenshot_pymol_small.jpg"></A>
<A HREF = "JPG/screenshot_vmd.jpg"><IMG SRC = "JPG/screenshot_vmd_small.jpg"></A>
</HTML>
diff --git a/doc/compute_modify.html b/doc/compute_modify.html
index 7106c3d22..4536ee76b 100644
--- a/doc/compute_modify.html
+++ b/doc/compute_modify.html
@@ -1,80 +1,80 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>compute_modify command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>compute_modify compute-ID keyword value ...
</PRE>
<UL><LI>compute-ID = ID of the compute to modify
<LI>one or more keyword/value pairs may be listed
<LI>keyword = <I>extra</I> or <I>dynamic</I>
<PRE> <I>extra</I> value = N
N = # of extra degrees of freedom to subtract
<I>dynamic</I> value = <I>yes</I> or <I>no</I>
yes/no = do or do not recompute the number of atoms contributing to the temperature
<I>thermo</I> value = <I>yes</I> or <I>no</I>
yes/no = do or do not add contributions from fixes to the potential energy
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>compute_modify myTemp extra 0
compute_modify newtemp dynamic yes extra 600
</PRE>
<P><B>Description:</B>
</P>
<P>Modify one or more parameters of a previously defined compute. Not
all compute styles support all parameters.
</P>
<P>The <I>extra</I> keyword refers to how many degrees-of-freedom are
subtracted (typically from 3N) as a normalizing factor in a
temperature computation. Only computes that compute a temperature use
this option. The default is 2 or 3 for <A HREF = "dimension.html">2d or 3d
systems</A> which is a correction factor for an ensemble
of velocities with zero total linear momentum. You can use a negative
number for the <I>extra</I> parameter if you need to add
degrees-of-freedom. See the <A HREF = "compute_temp_asphere.html">compute
temp/asphere</A> command for an example.
</P>
<P>The <I>dynamic</I> keyword determines whether the number of atoms N in the
compute group is re-computed each time a temperature is computed.
Only compute styles that compute a temperature use this option. By
default, N is assumed to be constant. If you are adding atoms to the
system (see the <A HREF = "fix_pour.html">fix pour</A> or <A HREF = "fix_deposit.html">fix
deposit</A> commands) or expect atoms to be lost
-(e.g. due to evaporation), then this option can be used to insure the
-temperature is correctly normalized.
+(e.g. due to evaporation), then this option should be used to insure
+the temperature is correctly normalized.
</P>
<P>The <I>thermo</I> keyword determines whether the potential energy
contribution calculated by some <A HREF = "fix.html">fixes</A> is added to the
potential energy calculated by the compute. Currently, only the
compute of style <I>pe</I> uses this option. See the doc pages for
<A HREF = "fix.html">individual fixes</A> for details.
</P>
<P><B>Restrictions:</B> none
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "compute.html">compute</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are extra = 2 or 3 for 2d or 3d systems and
dynamic = no. Thermo is <I>yes</I> if the compute of style <I>pe</I> was
defined with no extra keywords; otherwise it is <I>no</I>.
</P>
</HTML>
diff --git a/doc/compute_modify.txt b/doc/compute_modify.txt
index 7606dc782..771a58bb0 100644
--- a/doc/compute_modify.txt
+++ b/doc/compute_modify.txt
@@ -1,71 +1,71 @@
"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
compute_modify command :h3
[Syntax:]
compute_modify compute-ID keyword value ... :pre
compute-ID = ID of the compute to modify :ulb,l
one or more keyword/value pairs may be listed :l
keyword = {extra} or {dynamic} :l
{extra} value = N
N = # of extra degrees of freedom to subtract
{dynamic} value = {yes} or {no}
yes/no = do or do not recompute the number of atoms contributing to the temperature
{thermo} value = {yes} or {no}
yes/no = do or do not add contributions from fixes to the potential energy :pre
:ule
[Examples:]
compute_modify myTemp extra 0
compute_modify newtemp dynamic yes extra 600 :pre
[Description:]
Modify one or more parameters of a previously defined compute. Not
all compute styles support all parameters.
The {extra} keyword refers to how many degrees-of-freedom are
subtracted (typically from 3N) as a normalizing factor in a
temperature computation. Only computes that compute a temperature use
this option. The default is 2 or 3 for "2d or 3d
systems"_dimension.html which is a correction factor for an ensemble
of velocities with zero total linear momentum. You can use a negative
number for the {extra} parameter if you need to add
degrees-of-freedom. See the "compute
temp/asphere"_compute_temp_asphere.html command for an example.
The {dynamic} keyword determines whether the number of atoms N in the
compute group is re-computed each time a temperature is computed.
Only compute styles that compute a temperature use this option. By
default, N is assumed to be constant. If you are adding atoms to the
system (see the "fix pour"_fix_pour.html or "fix
deposit"_fix_deposit.html commands) or expect atoms to be lost
-(e.g. due to evaporation), then this option can be used to insure the
-temperature is correctly normalized.
+(e.g. due to evaporation), then this option should be used to insure
+the temperature is correctly normalized.
The {thermo} keyword determines whether the potential energy
contribution calculated by some "fixes"_fix.html is added to the
potential energy calculated by the compute. Currently, only the
compute of style {pe} uses this option. See the doc pages for
"individual fixes"_fix.html for details.
[Restrictions:] none
[Related commands:]
"compute"_compute.html
[Default:]
The option defaults are extra = 2 or 3 for 2d or 3d systems and
dynamic = no. Thermo is {yes} if the compute of style {pe} was
defined with no extra keywords; otherwise it is {no}.
diff --git a/doc/compute_property_atom.html b/doc/compute_property_atom.html
index 75674c391..bbf71ff36 100644
--- a/doc/compute_property_atom.html
+++ b/doc/compute_property_atom.html
@@ -1,145 +1,150 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>compute property/atom command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>compute ID group-ID property/atom input1 input2 ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "compute.html">compute</A> command
<LI>property/atom = style name of this compute command
<LI>input = one or more atom attributes
<PRE> possible attributes = id, mol, type, mass,
x, y, z, xs, ys, zs, xu, yu, zu, ix, iy, iz,
vx, vy, vz, fx, fy, fz,
q, mux, muy, muz, mu,
radius, diameter, omegax, omegay, omegaz,
angmomx, angmomy, angmomz,
shapex,shapey, shapez,
quatw, quati, quatj, quatk, tqx, tqy, tqz,
spin, eradius, ervel, erforce
end1x, end1y, end1z, end2x, end2y, end2z,
corner1x, corner1y, corner1z,
corner2x, corner2y, corner2z,
corner3x, corner3y, corner3z,
+ nbonds,
i_name, d_name
</PRE>
<PRE> id = atom ID
mol = molecule ID
type = atom type
mass = atom mass
x,y,z = unscaled atom coordinates
xs,ys,zs = scaled atom coordinates
xu,yu,zu = unwrapped atom coordinates
ix,iy,iz = box image that the atom is in
vx,vy,vz = atom velocities
fx,fy,fz = forces on atoms
q = atom charge
mux,muy,muz = orientation of dipole moment of atom
mu = magnitude of dipole moment of atom
radius,diameter = radius,diameter of spherical particle
omegax,omegay,omegaz = angular velocity of spherical particle
angmomx,angmomy,angmomz = angular momentum of aspherical particle
shapex,shapey,shapez = 3 diameters of aspherical particle
quatw,quati,quatj,quatk = quaternion components for aspherical or body particles
tqx,tqy,tqz = torque on finite-size particles
spin = electron spin
eradius = electron radius
ervel = electron radial velocity
erforce = electron radial force
end12x, end12y, end12z = end points of line segment
- coner123x, corner123y, corner123z = corner points of triangle
+ corner123x, corner123y, corner123z = corner points of triangle
+ nbonds = number of bonds
i_name = custom integer vector with name
d_name = custom integer vector with name
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>compute 1 all property/atom xs vx fx mux
compute 2 all property/atom type
compute 1 all property/atom ix iy iz
</PRE>
<P><B>Description:</B>
</P>
<P>Define a computation that simply stores atom attributes for each atom
in the group. This is useful so that the values can be used by other
<A HREF = "Section_howto.html#howto_15">output commands</A> that take computes as
inputs. See for example, the <A HREF = "compute_reduce.html">compute reduce</A>,
<A HREF = "fix_ave_atom.html">fix ave/atom</A>, <A HREF = "fix_ave_histo.html">fix ave/histo</A>,
<A HREF = "fix_ave_spatial.html">fix ave/spatial</A>, and <A HREF = "variable.html">atom-style
variable</A> commands.
</P>
<P>The list of possible attributes is the same as that used by the <A HREF = "dump.html">dump
custom</A> command, which describes their meaning, with some
additional quantities that are only defined for certain <A HREF = "atom_style.html">atom
styles</A>. Basically, this list gives your input script
access to any per-atom quantity stored by LAMMPS.
</P>
<P>The values are stored in a per-atom vector or array as discussed
below. Zeroes are stored for atoms not in the specified group or for
quantities that are not defined for a particular particle in the group
(e.g. <I>shapex</I> if the particle is not an ellipsoid).
</P>
<P>The additional quantities only accessible via this command, and not
directly via the <A HREF = "dump.html">dump custom</A> command, are as follows.
</P>
<P><I>Shapex</I>, <I>shapey</I>, and <I>shapez</I> are defined for ellipsoidal particles
and define the 3d shape of each particle.
</P>
<P><I>Quatw</I>, <I>quati</I>, <I>quatj</I>, and <I>quatk</I> are defined for ellipsoidal
particles and body particles and store the 4-vector quaternion
representing the orientation of each particle. See the <A HREF = "set.html">set</A>
command for an explanation of the quaternion vector.
</P>
<P><I>End1x</I>, <I>end1y</I>, <I>end1z</I>, <I>end2x</I>, <I>end2y</I>, <I>end2z</I>, are defined for
line segment particles and define the end points of each line segment.
</P>
<P><I>Corner1x</I>, <I>corner1y</I>, <I>corner1z</I>, <I>corner2x</I>, <I>corner2y</I>,
<I>corner2z</I>, <I>corner3x</I>, <I>corner3y</I>, <I>corner3z</I>, are defined for
triangular particles and define the corner points of each triangle.
</P>
+<P><I>nbonds</I> is available for all molecular atom styles and refers to
+the number of explicit bonds attached to an atom.
+</P>
<P>The <I>i_name</I> and <I>d_name</I> attributes refer to custom integer and
floating-point properties that have been added to each atom via the
<A HREF = "fix_property_atom.html">fix property/atom</A> command. When that command
is used specific names are given to each attribute which are what is
specified as the "name" portion of <I>i_name</I> or <I>d_name</I>.
</P>
<P><B>Output info:</B>
</P>
<P>This compute calculates a per-atom vector or per-atom array depending
on the number of input values. If a single input is specified, a
per-atom vector is produced. If two or more inputs are specified, a
per-atom array is produced where the number of columns = the number of
inputs. The vector or array can be accessed by any command that uses
per-atom values from a compute as input. See <A HREF = "Section_howto.html#howto_15">this
section</A> for an overview of LAMMPS output
options.
</P>
<P>The vector or array values will be in whatever <A HREF = "units.html">units</A> the
corresponding attribute is in, e.g. velocity units for vx, charge
units for q, etc.
</P>
<P><B>Restrictions:</B> none
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "dump.html">dump custom</A>, <A HREF = "compute_reduce.html">compute reduce</A>, <A HREF = "fix_ave_atom.html">fix
ave/atom</A>, <A HREF = "fix_ave_spatial.html">fix ave/spatial</A>,
<A HREF = "fix_property_atom.html">fix property/atom</A>
</P>
<P><B>Default:</B> none
</P>
</HTML>
diff --git a/doc/compute_vacf.html b/doc/compute_vacf.html
index a46344aa7..be1fac7cf 100644
--- a/doc/compute_vacf.html
+++ b/doc/compute_vacf.html
@@ -1,76 +1,76 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>compute vacf command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>compute ID group-ID vacf
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "compute.html">compute</A> command
<LI>vacf = style name of this compute command
</UL>
<P><B>Examples:</B>
</P>
<PRE>compute 1 all vacf
compute 1 upper vacf
</PRE>
<P><B>Description:</B>
</P>
<P>Define a computation that calculates the velocity auto-correlation
function (VACF), averaged over a group of atoms. Each atom's
contribution to the VACF is its current velocity vector dotted into
its initial velocity vector at the time the compute was specified.
</P>
<P>A vector of four quantites is calculated by this compute. The first 3
elements of the vector are vx * vx0 (and similarly for the y and z
components), summed and averaged over atoms in the group. Vx is the
current x-component of velocity for the atom, vx0 is the initial
x-component of velocity for the atom. The 4th element of the vector
is the total VACF, i.e. (vx*vx0 + vy*vy0 + vz*vz0), summed and
averaged over atoms in the group.
</P>
<P>The integral of the VACF versus time is proportional to the diffusion
coefficient of the diffusing atoms. This can be computed in the
following manner, using the <A HREF = "variable.html">variable trap()</A> function:
</P>
<PRE>compute 2 all vacf
-fix 5 all vector 1 c_2<B>4</B>
+fix 5 all vector 1 c_2[4]
variable diff equal dt*trap(f_5)
thermo_style custom step v_diff
</PRE>
<P>IMPORTANT NOTE: If you want the quantities calculated by this compute
to be continuous when running from a <A HREF = "read_restart.html">restart file</A>,
then you should use the same ID for this compute, as in the original
run. This is so that the created fix will also have the same ID, and
thus be initialized correctly with atom velocities from the restart
file.
</P>
<P><B>Output info:</B>
</P>
<P>This compute calculates a global vector of length 4, which can be
accessed by indices 1-4 by any command that uses global vector values
from a compute as input. See <A HREF = "Section_howto.html#howto_15">this
section</A> for an overview of LAMMPS output
options.
</P>
<P>The vector values are "intensive". The vector values will be in
velocity^2 <A HREF = "units.html">units</A>.
</P>
<P><B>Restrictions:</B> none
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "compute_msd.html">compute msd</A>
</P>
<P><B>Default:</B> none
</P>
</HTML>
diff --git a/doc/dump.html b/doc/dump.html
index 3d0cbb18e..8b63b05e2 100644
--- a/doc/dump.html
+++ b/doc/dump.html
@@ -1,618 +1,621 @@
<HTML>
<CENTER> <A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>dump command
</H3>
<H3><A HREF = "dump_image.html">dump image</A> command
</H3>
<H3><A HREF = "dump_image.html">dump movie</A> command
</H3>
<H3><A HREF = "dump_molfile.html">dump molfile</A> command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>dump ID group-ID style N file args
</PRE>
<UL><LI>ID = user-assigned name for the dump
<LI>group-ID = ID of the group of atoms to be dumped
-<LI>style = <I>atom</I> or <I>atom/mpiio</I> or <I>cfg</I> or <I>dcd</I> or <I>xtc</I> or <I>xyz</I> or <I>xyz/mpiio</I> or <I>image</I> or <I>molfile</I> or <I>local</I> or <I>custom</I> or <I>custom/mpiio</I>
+<LI>style = <I>atom</I> or <I>atom/mpiio</I> or <I>cfg</I> or <I>dcd</I> or <I>xtc</I> or <I>xyz</I> or <I>xyz/mpiio</I> or <I>image</I> or <I>movie</I> or <I>molfile</I> or <I>local</I> or <I>custom</I> or <I>custom/mpiio</I>
<LI>N = dump every this many timesteps
<LI>file = name of file to write dump info to
<LI>args = list of arguments for a particular style
<PRE> <I>atom</I> args = none
<I>atom/mpiio</I> args = none
<I>cfg</I> args = same as <I>custom</I> args, see below
<I>dcd</I> args = none
<I>xtc</I> args = none
<I>xyz</I> args = none
</PRE>
<PRE> <I>xyz/mpiio</I> args = none
</PRE>
<PRE> <I>image</I> args = discussed on <A HREF = "dump_image.html">dump image</A> doc page
</PRE>
+<PRE> <I>movie</I> args = discussed on <A HREF = "dump_image.html">dump image</A> doc page
+</PRE>
<PRE> <I>molfile</I> args = discussed on <A HREF = "dump_molfile.html">dump molfile</A> doc page
</PRE>
<PRE> <I>local</I> args = list of local attributes
possible attributes = index, c_ID, c_ID[N], f_ID, f_ID[N]
index = enumeration of local values
c_ID = local vector calculated by a compute with ID
c_ID[N] = Nth column of local array calculated by a compute with ID
f_ID = local vector calculated by a fix with ID
f_ID[N] = Nth column of local array calculated by a fix with ID
</PRE>
<PRE> <I>custom</I> of <I>custom/mpiio</I> args = list of atom attributes
possible attributes = id, mol, type, element, mass,
x, y, z, xs, ys, zs, xu, yu, zu,
xsu, ysu, zsu, ix, iy, iz,
vx, vy, vz, fx, fy, fz,
q, mux, muy, muz, mu,
radius, diameter, omegax, omegay, omegaz,
angmomx, angmomy, angmomz, tqx, tqy, tqz,
spin, eradius, ervel, erforce,
c_ID, c_ID[N], f_ID, f_ID[N], v_name
</PRE>
<PRE> id = atom ID
mol = molecule ID
type = atom type
element = name of atom element, as defined by <A HREF = "dump_modify.html">dump_modify</A> command
mass = atom mass
x,y,z = unscaled atom coordinates
xs,ys,zs = scaled atom coordinates
xu,yu,zu = unwrapped atom coordinates
xsu,ysu,zsu = scaled unwrapped atom coordinates
ix,iy,iz = box image that the atom is in
vx,vy,vz = atom velocities
fx,fy,fz = forces on atoms
q = atom charge
mux,muy,muz = orientation of dipole moment of atom
mu = magnitude of dipole moment of atom
radius,diameter = radius,diameter of spherical particle
omegax,omegay,omegaz = angular velocity of spherical particle
angmomx,angmomy,angmomz = angular momentum of aspherical particle
tqx,tqy,tqz = torque on finite-size particles
spin = electron spin
eradius = electron radius
ervel = electron radial velocity
erforce = electron radial force
c_ID = per-atom vector calculated by a compute with ID
c_ID[N] = Nth column of per-atom array calculated by a compute with ID
f_ID = per-atom vector calculated by a fix with ID
f_ID[N] = Nth column of per-atom array calculated by a fix with ID
v_name = per-atom vector calculated by an atom-style variable with name
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>dump myDump all atom 100 dump.atom
dump myDump all atom/mpiio 100 dump.atom.mpiio
dump 2 subgroup atom 50 dump.run.bin
dump 2 subgroup atom 50 dump.run.mpiio.bin
dump 4a all custom 100 dump.myforce.* id type x y vx fx
dump 4b flow custom 100 dump.%.myforce id type c_myF[3] v_ke
dump 2 inner cfg 10 dump.snap.*.cfg mass type xs ys zs vx vy vz
-dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress<B>2</B>
+dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress[2]
dump 1 all xtc 1000 file.xtc
dump e_data all custom 100 dump.eff id type x y z spin eradius fx fy fz eforce
</PRE>
<P><B>Description:</B>
</P>
<P>Dump a snapshot of atom quantities to one or more files every N
-timesteps in one of several styles. The <I>image</I> style is the
-exception; it creates a JPG or PPM image file of the atom
-configuration every N timesteps, as discussed on the <A HREF = "dump_image.html">dump
-image</A> doc page. The timesteps on which dump output
-is written can also be controlled by a variable; see the <A HREF = "dump_modify.html">dump_modify
-every</A> command for details.
+timesteps in one of several styles. The <I>image</I> and <I>movie</I> styles are
+the exception: the <I>image</I> style renders a JPG, PNG, or PPM image file
+of the atom configuration every N timesteps while the <I>movie</I> style
+combines and compresses them into a movie file; both are discussed in
+detail on the <A HREF = "dump_image.html">dump image</A> doc page. The timesteps on
+which dump output is written can also be controlled by a variable.
+See the <A HREF = "dump_modify.html">dump_modify every</A> command.
</P>
<P>Only information for atoms in the specified group is dumped. The
<A HREF = "dump_modify.html">dump_modify thresh and region</A> commands can also
alter what atoms are included. Not all styles support all these
options; see details below.
</P>
<P>As described below, the filename determines the kind of output (text
or binary or gzipped, one big file or one per timestep, one big file
or multiple smaller files).
</P>
<P>IMPORTANT NOTE: Because periodic boundary conditions are enforced only
on timesteps when neighbor lists are rebuilt, the coordinates of an
atom written to a dump file may be slightly outside the simulation
box.
</P>
<P>IMPORTANT NOTE: Unless the <A HREF = "dump_modify.html">dump_modify sort</A> option
is invoked, the lines of atom information written to dump files
(typically one line per atom) will be in an indeterminate order for
each snapshot. This is even true when running on a single processor,
if the <A HREF = "atom_modify.html">atom_modify sort</A> option is on, which it is
by default. In this case atoms are re-ordered periodically during a
simulation, due to spatial sorting. It is also true when running in
parallel, because data for a single snapshot is collected from
multiple processors, each of which owns a subset of the atoms.
</P>
<P>For the <I>atom</I>, <I>custom</I>, <I>cfg</I>, and <I>local</I> styles, sorting is off by
default. For the <I>dcd</I>, <I>xtc</I>, <I>xyz</I>, and <I>molfile</I> styles, sorting by
atom ID is on by default. See the <A HREF = "dump_modify.html">dump_modify</A> doc
page for details.
</P>
<P>As explained below, the <I>atom/mpiio</I>, <I>custom/mpiio</I>, and <I>xyz/mpiio</I>
styles are identical in command syntax and in the format of the dump
files they create, to the corresponding styles without "mpiio", except
the single dump file they produce is written in parallel via the
MPI-IO library. For the remainder of this doc page, you should thus
consider the <I>atom</I> and <I>atom/mpiio</I> styles (etc) to be
inter-changeable. The one exception is how the filename is specified
for the MPI-IO styles, as explained below.
</P>
<HR>
<P>The <I>style</I> keyword determines what atom quantities are written to the
file and in what format. Settings made via the
<A HREF = "dump_modify.html">dump_modify</A> command can also alter the format of
individual values and the file itself.
</P>
<P>The <I>atom</I>, <I>local</I>, and <I>custom</I> styles create files in a simple text
format that is self-explanatory when viewing a dump file. Many of the
LAMMPS <A HREF = "Section_tools.html">post-processing tools</A>, including
<A HREF = "http://www.sandia.gov/~sjplimp/pizza.html">Pizza.py</A>, work with this
format, as does the <A HREF = "rerun.html">rerun</A> command.
</P>
<P>For post-processing purposes the <I>atom</I>, <I>local</I>, and <I>custom</I> text
files are self-describing in the following sense.
</P>
<P>The dimensions of the simulation box are included in each snapshot.
For an orthogonal simulation box this information is is formatted as:
</P>
<PRE>ITEM: BOX BOUNDS xx yy zz
xlo xhi
ylo yhi
zlo zhi
</PRE>
<P>where xlo,xhi are the maximum extents of the simulation box in the
x-dimension, and similarly for y and z. The "xx yy zz" represent 6
characters that encode the style of boundary for each of the 6
simulation box boundaries (xlo,xhi and ylo,yhi and zlo,zhi). Each of
the 6 characters is either p = periodic, f = fixed, s = shrink wrap,
or m = shrink wrapped with a minimum value. See the
<A HREF = "boundary.html">boundary</A> command for details.
</P>
<P>For triclinic simulation boxes (non-orthogonal), an orthogonal
bounding box which encloses the triclinic simulation box is output,
along with the 3 tilt factors (xy, xz, yz) of the triclinic box,
formatted as follows:
</P>
<PRE>ITEM: BOX BOUNDS xy xz yz xx yy zz
xlo_bound xhi_bound xy
ylo_bound yhi_bound xz
zlo_bound zhi_bound yz
</PRE>
<P>The presence of the text "xy xz yz" in the ITEM line indicates that
the 3 tilt factors will be included on each of the 3 following lines.
This bounding box is convenient for many visualization programs. The
meaning of the 6 character flags for "xx yy zz" is the same as above.
</P>
<P>Note that the first two numbers on each line are now xlo_bound instead
of xlo, etc, since they repesent a bounding box. See <A HREF = "Section_howto.html#howto_12">this
section</A> of the doc pages for a geometric
description of triclinic boxes, as defined by LAMMPS, simple formulas
for how the 6 bounding box extents (xlo_bound,xhi_bound,etc) are
calculated from the triclinic parameters, and how to transform those
parameters to and from other commonly used triclinic representations.
</P>
<P>The "ITEM: ATOMS" line in each snapshot lists column descriptors for
the per-atom lines that follow. For example, the descriptors would be
"id type xs ys zs" for the default <I>atom</I> style, and would be the atom
attributes you specify in the dump command for the <I>custom</I> style.
</P>
<P>For style <I>atom</I>, atom coordinates are written to the file, along with
the atom ID and atom type. By default, atom coords are written in a
scaled format (from 0 to 1). I.e. an x value of 0.25 means the atom
is at a location 1/4 of the distance from xlo to xhi of the box
boundaries. The format can be changed to unscaled coords via the
<A HREF = "dump_modify.html">dump_modify</A> settings. Image flags can also be
added for each atom via dump_modify.
</P>
<P>Style <I>custom</I> allows you to specify a list of atom attributes to be
written to the dump file for each atom. Possible attributes are
listed above and will appear in the order specified. You cannot
specify a quantity that is not defined for a particular simulation -
such as <I>q</I> for atom style <I>bond</I>, since that atom style doesn't
assign charges. Dumps occur at the very end of a timestep, so atom
attributes will include effects due to fixes that are applied during
the timestep. An explanation of the possible dump custom attributes
is given below.
</P>
<P>For style <I>local</I>, local output generated by <A HREF = "compute.html">computes</A>
and <A HREF = "fix.html">fixes</A> is used to generate lines of output that is
written to the dump file. This local data is typically calculated by
each processor based on the atoms it owns, but there may be zero or
more entities per atom, e.g. a list of bond distances. An explanation
of the possible dump local attributes is given below. Note that by
using input from the <A HREF = "compute_property_local.html">compute
property/local</A> command with dump local,
it is possible to generate information on bonds, angles, etc that can
be cut and pasted directly into a data file read by the
<A HREF = "read_data.html">read_data</A> command.
</P>
<P>Style <I>cfg</I> has the same command syntax as style <I>custom</I> and writes
extended CFG format files, as used by the
<A HREF = "http://mt.seas.upenn.edu/Archive/Graphics/A">AtomEye</A> visualization
package. Since the extended CFG format uses a single snapshot of the
system per file, a wildcard "*" must be included in the filename, as
discussed below. The list of atom attributes for style <I>cfg</I> must
begin with either "mass type xs ys zs" or "mass type xsu ysu zsu"
since these quantities are needed to write the CFG files in the
appropriate format (though the "mass" and "type" fields do not appear
explicitly in the file). Any remaining attributes will be stored as
"auxiliary properties" in the CFG files. Note that you will typically
want to use the <A HREF = "dump_modify.html">dump_modify element</A> command with
CFG-formatted files, to associate element names with atom types, so
that AtomEye can render atoms appropriately. When unwrapped
coordinates <I>xsu</I>, <I>ysu</I>, and <I>zsu</I> are requested, the nominal AtomEye
periodic cell dimensions are expanded by a large factor UNWRAPEXPAND =
10.0, which ensures atoms that are displayed correctly for up to
UNWRAPEXPAND/2 periodic boundary crossings in any direction. Beyond
this, AtomEye will rewrap the unwrapped coordinates. The expansion
causes the atoms to be drawn farther away from the viewer, but it is
easy to zoom the atoms closer, and the interatomic distances are
unaffected.
</P>
<P>The <I>dcd</I> style writes DCD files, a standard atomic trajectory format
used by the CHARMM, NAMD, and XPlor molecular dynamics packages. DCD
files are binary and thus may not be portable to different machines.
The number of atoms per snapshot cannot change with the <I>dcd</I> style.
The <I>unwrap</I> option of the <A HREF = "dump_modify.html">dump_modify</A> command
allows DCD coordinates to be written "unwrapped" by the image flags
for each atom. Unwrapped means that if the atom has passed through
a periodic boundary one or more times, the value is printed for what
the coordinate would be if it had not been wrapped back into the
periodic box. Note that these coordinates may thus be far outside
the box size stored with the snapshot.
</P>
<P>The <I>xtc</I> style writes XTC files, a compressed trajectory format used
by the GROMACS molecular dynamics package, and described
<A HREF = "http://manual.gromacs.org/current/online/xtc.html">here</A>.
The precision used in XTC files can be adjusted via the
<A HREF = "dump_modify.html">dump_modify</A> command. The default value of 1000
means that coordinates are stored to 1/1000 nanometer accuracy. XTC
files are portable binary files written in the NFS XDR data format,
so that any machine which supports XDR should be able to read them.
The number of atoms per snapshot cannot change with the <I>xtc</I> style.
The <I>unwrap</I> option of the <A HREF = "dump_modify.html">dump_modify</A> command allows
XTC coordinates to be written "unwrapped" by the image flags for each
atom. Unwrapped means that if the atom has passed thru a periodic
boundary one or more times, the value is printed for what the
coordinate would be if it had not been wrapped back into the periodic
box. Note that these coordinates may thus be far outside the box size
stored with the snapshot.
</P>
<P>The <I>xyz</I> style writes XYZ files, which is a simple text-based
coordinate format that many codes can read. Specifically it has
a line with the number of atoms, then a comment line that is
usually ignored followed by one line per atom with the atom type
and the x-, y-, and z-coordinate of that atom. You can use the
<A HREF = "dump_modify.html">dump_modify element</A> option to change the output
from using the (numerical) atom type to an element name (or some
other label). This will help many visualization programs to guess
bonds and colors.
</P>
<P>Note that <I>atom</I>, <I>custom</I>, <I>dcd</I>, <I>xtc</I>, and <I>xyz</I> style dump files
can be read directly by <A HREF = "http://www.ks.uiuc.edu/Research/vmd">VMD</A>, a
popular molecular viewing program. See <A HREF = "Section_tools.html#vmd">Section
tools</A> of the manual and the
tools/lmp2vmd/README.txt file for more information about support in
VMD for reading and visualizing LAMMPS dump files.
</P>
<HR>
<P>Dumps are performed on timesteps that are a multiple of N (including
timestep 0) and on the last timestep of a minimization if the
minimization converges. Note that this means a dump will not be
performed on the initial timestep after the dump command is invoked,
if the current timestep is not a multiple of N. This behavior can be
changed via the <A HREF = "dump_modify.html">dump_modify first</A> command, which
can also be useful if the dump command is invoked after a minimization
ended on an arbitrary timestep. N can be changed between runs by
using the <A HREF = "dump_modify.html">dump_modify every</A> command (not allowed
for <I>dcd</I> style). The <A HREF = "dump_modify.html">dump_modify every</A> command
also allows a variable to be used to determine the sequence of
timesteps on which dump files are written. In this mode a dump on the
first timestep of a run will also not be written unless the
<A HREF = "dump_modify.html">dump_modify first</A> command is used.
</P>
<P>The specified filename determines how the dump file(s) is written.
The default is to write one large text file, which is opened when the
dump command is invoked and closed when an <A HREF = "undump.html">undump</A>
command is used or when LAMMPS exits. For the <I>dcd</I> and <I>xtc</I> styles,
this is a single large binary file.
</P>
<P>Dump filenames can contain two wildcard characters. If a "*"
character appears in the filename, then one file per snapshot is
written and the "*" character is replaced with the timestep value.
For example, tmp.dump.* becomes tmp.dump.0, tmp.dump.10000,
tmp.dump.20000, etc. This option is not available for the <I>dcd</I> and
<I>xtc</I> styles. Note that the <A HREF = "dump_modify.html">dump_modify pad</A>
command can be used to insure all timestep numbers are the same length
(e.g. 00010), which can make it easier to read a series of dump files
in order with some post-processing tools.
</P>
<P>If a "%" character appears in the filename, then each of P processors
writes a portion of the dump file, and the "%" character is replaced
with the processor ID from 0 to P-1. For example, tmp.dump.% becomes
tmp.dump.0, tmp.dump.1, ... tmp.dump.P-1, etc. This creates smaller
files and can be a fast mode of output on parallel machines that
support parallel I/O for output. This option is not available for the
<I>dcd</I>, <I>xtc</I>, and <I>xyz</I> styles.
</P>
<P>By default, P = the number of processors meaning one file per
processor, but P can be set to a smaller value via the <I>nfile</I> or
<I>fileper</I> keywords of the <A HREF = "dump_modify.html">dump_modify</A> command.
These options can be the most efficient way of writing out dump files
when running on large numbers of processors.
</P>
<P>Note that using the "*" and "%" characters together can produce a
large number of small dump files!
</P>
<P>For the <I>atom/mpiio</I>, <I>custom/mpiio</I>, and <I>xyz/mpiio</I> styles, a single
dump file is written in parallel via the MPI-IO library, which is part
of the MPI standard for versions 2.0 and above. Using MPI-IO requires
two steps. First, build LAMMPS with its MPIIO package installed, e.g.
</P>
<PRE>make yes-mpiio # installs the MPIIO package
make g++ # build LAMMPS for your platform
</PRE>
<P>Second, use a dump filename which contains ".mpiio". Note that it
does not have to end in ".mpiio", just contain those characters.
Unlike MPI-IO restart files, which must be both written and read using
MPI-IO, the dump files produced by these MPI-IO styles are identical
in format to the files produced by their non-MPI-IO style
counterparts. This means you can write a dump file using MPI-IO and
use the <A HREF = "read_dump.html">read_dump</A> command or perform other
post-processing, just as if the dump file was not written using
MPI-IO.
</P>
<P>Note that MPI-IO dump files are one large file which all processors
write to. You thus cannot use the "%" wildcard character described
above in the filename since that specifies generation of multiple
files. You can use the ".bin" suffix described below in an MPI-IO
dump file; again this file will be written in parallel and have the
same binary format as if it were written without MPI-IO.
</P>
<P>If the filename ends with ".bin", the dump file (or files, if "*" or
"%" is also used) is written in binary format. A binary dump file
will be about the same size as a text version, but will typically
write out much faster. Of course, when post-processing, you will need
to convert it back to text format (see the <A HREF = "Section_tools.html#binary">binary2txt
tool</A>) or write your own code to read the
binary file. The format of the binary file can be understood by
looking at the tools/binary2txt.cpp file. This option is only
available for the <I>atom</I> and <I>custom</I> styles.
</P>
<P>If the filename ends with ".gz", the dump file (or files, if "*" or "%"
is also used) is written in gzipped format. A gzipped dump file will
be about 3x smaller than the text version, but will also take longer
to write. This option is not available for the <I>dcd</I> and <I>xtc</I>
styles.
</P>
<HR>
<P>This section explains the local attributes that can be specified as
part of the <I>local</I> style.
</P>
<P>The <I>index</I> attribute can be used to generate an index number from 1
to N for each line written into the dump file, where N is the total
number of local datums from all processors, or lines of output that
will appear in the snapshot. Note that because data from different
processors depend on what atoms they currently own, and atoms migrate
between processor, there is no guarantee that the same index will be
used for the same info (e.g. a particular bond) in successive
snapshots.
</P>
<P>The <I>c_ID</I> and <I>c_ID[N]</I> attributes allow local vectors or arrays
calculated by a <A HREF = "compute.html">compute</A> to be output. The ID in the
attribute should be replaced by the actual ID of the compute that has
been defined previously in the input script. See the
<A HREF = "compute.html">compute</A> command for details. There are computes for
calculating local information such as indices, types, and energies for
bonds and angles.
</P>
<P>Note that computes which calculate global or per-atom quantities, as
opposed to local quantities, cannot be output in a dump local command.
Instead, global quantities can be output by the <A HREF = "thermo_style.html">thermo_style
custom</A> command, and per-atom quantities can be
output by the dump custom command.
</P>
<P>If <I>c_ID</I> is used as a attribute, then the local vector calculated by
the compute is printed. If <I>c_ID[N]</I> is used, then N must be in the
range from 1-M, which will print the Nth column of the M-length local
array calculated by the compute.
</P>
<P>The <I>f_ID</I> and <I>f_ID[N]</I> attributes allow local vectors or arrays
calculated by a <A HREF = "fix.html">fix</A> to be output. The ID in the attribute
should be replaced by the actual ID of the fix that has been defined
previously in the input script.
</P>
<P>If <I>f_ID</I> is used as a attribute, then the local vector calculated by
the fix is printed. If <I>f_ID[N]</I> is used, then N must be in the
range from 1-M, which will print the Nth column of the M-length local
array calculated by the fix.
</P>
<P>Here is an example of how to dump bond info for a system,
including the distance and energy of each bond:
</P>
<PRE>compute 1 all property/local batom1 batom2 btype
compute 2 all bond/local dist eng
dump 1 all local 1000 tmp.dump index c_1[1] c_1[2] c_1[3] c_2[1] c_2[2]
</PRE>
<HR>
<P>This section explains the atom attributes that can be specified as
part of the <I>custom</I> and <I>cfg</I> styles.
</P>
<P>The <I>id</I>, <I>mol</I>, <I>type</I>, <I>element</I>, <I>mass</I>, <I>vx</I>, <I>vy</I>, <I>vz</I>, <I>fx</I>, <I>fy</I>,
<I>fz</I>, <I>q</I> attributes are self-explanatory.
</P>
<P><I>Id</I> is the atom ID. <I>Mol</I> is the molecule ID, included in the data
file for molecular systems. <I>Type</I> is the atom type. <I>Element</I> is
typically the chemical name of an element, which you must assign to
each type via the <A HREF = "dump_modify.html">dump_modify element</A> command.
More generally, it can be any string you wish to associated with an
atom type. <I>Mass</I> is the atom mass. <I>Vx</I>, <I>vy</I>, <I>vz</I>, <I>fx</I>, <I>fy</I>,
<I>fz</I>, and <I>q</I> are components of atom velocity and force and atomic
charge.
</P>
<P>There are several options for outputting atom coordinates. The <I>x</I>,
<I>y</I>, <I>z</I> attributes write atom coordinates "unscaled", in the
appropriate distance <A HREF = "units.html">units</A> (Angstroms, sigma, etc). Use
<I>xs</I>, <I>ys</I>, <I>zs</I> if you want the coordinates "scaled" to the box size,
so that each value is 0.0 to 1.0. If the simulation box is triclinic
(tilted), then all atom coords will still be between 0.0 and 1.0. Use
<I>xu</I>, <I>yu</I>, <I>zu</I> if you want the coordinates "unwrapped" by the image
flags for each atom. Unwrapped means that if the atom has passed thru
a periodic boundary one or more times, the value is printed for what
the coordinate would be if it had not been wrapped back into the
periodic box. Note that using <I>xu</I>, <I>yu</I>, <I>zu</I> means that the
coordinate values may be far outside the box bounds printed with the
snapshot. Using <I>xsu</I>, <I>ysu</I>, <I>zsu</I> is similar to using <I>xu</I>, <I>yu</I>, <I>zu</I>,
except that the unwrapped coordinates are scaled by the box size. Atoms
that have passed through a periodic boundary will have the corresponding
cooordinate increased or decreased by 1.0.
</P>
<P>The image flags can be printed directly using the <I>ix</I>, <I>iy</I>, <I>iz</I>
attributes. For periodic dimensions, they specify which image of the
simulation box the atom is considered to be in. An image of 0 means
it is inside the box as defined. A value of 2 means add 2 box lengths
to get the true value. A value of -1 means subtract 1 box length to
get the true value. LAMMPS updates these flags as atoms cross
periodic boundaries during the simulation.
</P>
<P>The <I>mux</I>, <I>muy</I>, <I>muz</I> attributes are specific to dipolar systems
defined with an atom style of <I>dipole</I>. They give the orientation of
the atom's point dipole moment. The <I>mu</I> attribute gives the
magnitude of the atom's dipole moment.
</P>
<P>The <I>radius</I> and <I>diameter</I> attributes are specific to spherical
particles that have a finite size, such as those defined with an atom
style of <I>sphere</I>.
</P>
<P>The <I>omegax</I>, <I>omegay</I>, and <I>omegaz</I> attributes are specific to
finite-size spherical particles that have an angular velocity. Only
certain atom styles, such as <I>sphere</I> define this quantity.
</P>
<P>The <I>angmomx</I>, <I>angmomy</I>, and <I>angmomz</I> attributes are specific to
finite-size aspherical particles that have an angular momentum. Only
the <I>ellipsoid</I> atom style defines this quantity.
</P>
<P>The <I>tqx</I>, <I>tqy</I>, <I>tqz</I> attributes are for finite-size particles that
can sustain a rotational torque due to interactions with other
particles.
</P>
<P>The <I>spin</I>, <I>eradius</I>, <I>ervel</I>, and <I>erforce</I> attributes are for
particles that represent nuclei and electrons modeled with the
electronic force field (EFF). See <A HREF = "atom_style.html">atom_style
electron</A> and <A HREF = "pair_eff.html">pair_style eff</A> for more
details.
</P>
<P>The <I>c_ID</I> and <I>c_ID[N]</I> attributes allow per-atom vectors or arrays
calculated by a <A HREF = "compute.html">compute</A> to be output. The ID in the
attribute should be replaced by the actual ID of the compute that has
been defined previously in the input script. See the
<A HREF = "compute.html">compute</A> command for details. There are computes for
calculating the per-atom energy, stress, centro-symmetry parameter,
and coordination number of individual atoms.
</P>
<P>Note that computes which calculate global or local quantities, as
opposed to per-atom quantities, cannot be output in a dump custom
command. Instead, global quantities can be output by the
<A HREF = "thermo_style.html">thermo_style custom</A> command, and local quantities
can be output by the dump local command.
</P>
<P>If <I>c_ID</I> is used as a attribute, then the per-atom vector calculated
by the compute is printed. If <I>c_ID[N]</I> is used, then N must be in
the range from 1-M, which will print the Nth column of the M-length
per-atom array calculated by the compute.
</P>
<P>The <I>f_ID</I> and <I>f_ID[N]</I> attributes allow vector or array per-atom
quantities calculated by a <A HREF = "fix.html">fix</A> to be output. The ID in the
attribute should be replaced by the actual ID of the fix that has been
defined previously in the input script. The <A HREF = "fix_ave_atom.html">fix
ave/atom</A> command is one that calculates per-atom
quantities. Since it can time-average per-atom quantities produced by
any <A HREF = "compute.html">compute</A>, <A HREF = "fix.html">fix</A>, or atom-style
<A HREF = "variable.html">variable</A>, this allows those time-averaged results to
be written to a dump file.
</P>
<P>If <I>f_ID</I> is used as a attribute, then the per-atom vector calculated
by the fix is printed. If <I>f_ID[N]</I> is used, then N must be in the
range from 1-M, which will print the Nth column of the M-length
per-atom array calculated by the fix.
</P>
<P>The <I>v_name</I> attribute allows per-atom vectors calculated by a
<A HREF = "variable.html">variable</A> to be output. The name in the attribute
should be replaced by the actual name of the variable that has been
defined previously in the input script. Only an atom-style variable
can be referenced, since it is the only style that generates per-atom
values. Variables of style <I>atom</I> can reference individual atom
attributes, per-atom atom attributes, thermodynamic keywords, or
invoke other computes, fixes, or variables when they are evaluated, so
this is a very general means of creating quantities to output to a
dump file.
</P>
<P>See <A HREF = "Section_modify.html">Section_modify</A> of the manual for information
on how to add new compute and fix styles to LAMMPS to calculate
per-atom quantities which could then be output into dump files.
</P>
<HR>
<P><B>Restrictions:</B>
</P>
<P>To write gzipped dump files, you must compile LAMMPS with the
-DLAMMPS_GZIP option - see the <A HREF = "Section_start.html#start_2">Making
LAMMPS</A> section of the documentation.
</P>
<P>The <I>atom/mpiio</I>, <I>custom/mpiio</I>, and <I>xyz/mpiio</I> styles are part of
the MPIIO package. They are only enabled if LAMMPS was built with
that package. See the <A HREF = "Section_start.html#start_3">Making LAMMPS</A>
section for more info.
</P>
<P>The <I>xtc</I> style is part of the XTC package. It is only enabled if
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info. This is
because some machines may not support the low-level XDR data format
that XTC files are written with, which will result in a compile-time
error when a low-level include file is not found. Putting this style
in a package makes it easy to exclude from a LAMMPS build for those
machines. However, the XTC package also includes two compatibility
header files and associated functions, which should be a suitable
substitute on machines that do not have the appropriate native header
files. This option can be invoked at build time by adding
-DLAMMPS_XDR to the CCFLAGS variable in the appropriate low-level
Makefile, e.g. src/MAKE/Makefile.foo. This compatibility mode has
been tested successfully on Cray XT3/XT4/XT5 and IBM BlueGene/L
machines and should also work on IBM BG/P, and Windows XP/Vista/7
machines.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "dump_image.html">dump image</A>, <A HREF = "dump_modify.html">dump_modify</A>,
<A HREF = "undump.html">undump</A>
</P>
<P><B>Default:</B>
</P>
<P>The defaults for the image style are listed on the <A HREF = "dump_image.html">dump
image</A> doc page.
</P>
</HTML>
diff --git a/doc/dump_modify.html b/doc/dump_modify.html
index 19c7f2127..0a20b7a45 100644
--- a/doc/dump_modify.html
+++ b/doc/dump_modify.html
@@ -1,798 +1,798 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>dump_modify command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>dump_modify dump-ID keyword values ...
</PRE>
<UL><LI>dump-ID = ID of dump to modify
<LI>one or more keyword/value pairs may be appended
<LI>these keywords apply to various dump styles
<LI>keyword = <I>append</I> or <I>buffer</I> or <I>element</I> or <I>every</I> or <I>fileper</I> or <I>first</I> or <I>flush</I> or <I>format</I> or <I>image</I> or <I>label</I> or <I>nfile</I> or <I>pad</I> or <I>precision</I> or <I>region</I> or <I>scale</I> or <I>sort</I> or <I>thresh</I> or <I>unwrap</I>
<PRE> <I>append</I> arg = <I>yes</I> or <I>no</I>
<I>buffer</I> arg = <I>yes</I> or <I>no</I>
<I>element</I> args = E1 E2 ... EN, where N = # of atom types
E1,...,EN = element name, e.g. C or Fe or Ga
<I>every</I> arg = N
N = dump every this many timesteps
N can be a variable (see below)
<I>fileper</I> arg = Np
Np = write one file for every this many processors
<I>first</I> arg = <I>yes</I> or <I>no</I>
<I>format</I> arg = C-style format string for one line of output
<I>flush</I> arg = <I>yes</I> or <I>no</I>
<I>image</I> arg = <I>yes</I> or <I>no</I>
<I>label</I> arg = string
string = character string (e.g. BONDS) to use in header of dump local file
<I>nfile</I> arg = Nf
Nf = write this many files, one from each of Nf processors
<I>pad</I> arg = Nchar = # of characters to convert timestep to
<I>precision</I> arg = power-of-10 value from 10 to 1000000
<I>region</I> arg = region-ID or "none"
<I>scale</I> arg = <I>yes</I> or <I>no</I>
<I>sort</I> arg = <I>off</I> or <I>id</I> or N or -N
off = no sorting of per-atom lines within a snapshot
id = sort per-atom lines by atom ID
N = sort per-atom lines in ascending order by the Nth column
-N = sort per-atom lines in descending order by the Nth column
<I>thresh</I> args = attribute operation value
attribute = same attributes (x,fy,etotal,sxx,etc) used by dump custom style
operation = "<" or "<=" or ">" or ">=" or "==" or "!="
value = numeric value to compare to
these 3 args can be replaced by the word "none" to turn off thresholding
<I>unwrap</I> arg = <I>yes</I> or <I>no</I>
</PRE>
<LI>these keywords apply only to the <I>image</I> and <I>movie</I> <A HREF = "dump_image.html">styles</A>
<LI>keyword = <I>acolor</I> or <I>adiam</I> or <I>amap</I> or <I>bcolor</I> or <I>bdiam</I> or <I>backcolor</I> or <I>boxcolor</I> or <I>color</I> or <I>bitrate</I> or <I>framerate</I>
<PRE> <I>acolor</I> args = type color
type = atom type or range of types (see below)
color = name of color or color1/color2/...
<I>adiam</I> args = type diam
type = atom type or range of types (see below)
diam = diameter of atoms of that type (distance units)
<I>amap</I> args = lo hi style delta N entry1 entry2 ... entryN
lo = number or <I>min</I> = lower bound of range of color map
hi = number or <I>max</I> = upper bound of range of color map
style = 2 letters = "c" or "d" or "s" plus "a" or "f"
"c" for continuous
"d" for discrete
"s" for sequential
"a" for absolute
"f" for fractional
delta = binsize (only used for style "s", otherwise ignored)
binsize = range is divided into bins of this width
N = # of subsequent entries
entry = value color (for continuous style)
value = number or <I>min</I> or <I>max</I> = single value within range
color = name of color used for that value
entry = lo hi color (for discrete style)
lo/hi = number or <I>min</I> or <I>max</I> = lower/upper bound of subset of range
color = name of color used for that subset of values
entry = color (for sequential style)
color = name of color used for a bin of values
<I>backcolor</I> arg = color
color = name of color for background
<I>bcolor</I> args = type color
type = bond type or range of types (see below)
color = name of color or color1/color2/...
<I>bdiam</I> args = type diam
type = bond type or range of types (see below)
diam = diameter of bonds of that type (distance units)
<I>bitrate</I> arg = rate
rate = target bitrate for movie in kbps
<I>boxcolor</I> arg = color
color = name of color for box lines
<I>color</I> args = name R G B
name = name of color
R,G,B = red/green/blue numeric values from 0.0 to 1.0
<I>framerate</I> arg = fps
fps = frames per second for movie
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>dump_modify 1 format "%d %d %20.15g %g %g" scale yes
dump_modify myDump image yes scale no flush yes
dump_modify 1 region mySphere thresh x < 0.0 thresh epair >= 3.2
dump_modify xtcdump precision 10000
dump_modify 1 every 1000 nfile 20
dump_modify 1 every v_myVar
dump_modify 1 amap min max cf 0.0 3 min green 0.5 yellow max blue boxcolor red
</PRE>
<P><B>Description:</B>
</P>
<P>Modify the parameters of a previously defined dump command. Not all
parameters are relevant to all dump styles.
</P>
<P>As explained on the <A HREF = "dump.html">dump</A> doc page, the <I>atom/mpiio</I>,
<I>custom/mpiio</I>, and <I>xyz/mpiio</I> dump styles are identical in command
syntax and in the format of the dump files they create, to the
corresponding styles without "mpiio", except the single dump file they
produce is written in parallel via the MPI-IO library. Thus if a
dump_modify option below is valid for the <I>atom</I> style, it is also
valid for the <I>atom/mpiio</I> style, and similarly for the other styles
which allow for use of MPI-IO.
</P>
<HR>
<HR>
<P>These keywords apply to various dump styles, including the <A HREF = "dump_image.html">dump
image</A> and <A HREF = "dump_image.html">dump movie</A> styles. The
description gives details.
</P>
<HR>
<P>The <I>append</I> keyword applies to all dump styles except <I>cfg</I> and <I>xtc</I>
and <I>dcd</I>. It also applies only to text output files, not to binary
or gzipped or image/movie files. If specified as <I>yes</I>, then dump
snapshots are appended to the end of an existing dump file. If
specified as <I>no</I>, then a new dump file will be created which will
overwrite an existing file with the same name. This keyword can only
take effect if the dump_modify command is used after the
<A HREF = "dump.html">dump</A> command, but before the first command that causes
dump snapshots to be output, e.g. a <A HREF = "run.html">run</A> or
<A HREF = "minimize.html">minimize</A> command. Once the dump file has been opened,
this keyword has no further effect.
</P>
<HR>
<P>The <I>buffer</I> keyword applies only to dump styles <I>atom</I>, <I>cfg</I>,
<I>custom</I>, <I>local</I>, and <I>xyz</I>. It also applies only to text output
files, not to binary or gzipped files. If specified as <I>yes</I>, which
is the default, then each processor writes its output into an internal
text buffer, which is then sent to the processor(s) which perform file
writes, and written by those processors(s) as one large chunk of text.
If specified as <I>no</I>, each processor sends its per-atom data in binary
format to the processor(s) which perform file wirtes, and those
processor(s) format and write it line by line into the output file.
</P>
<P>The buffering mode is typically faster since each processor does the
relatively expensive task of formatting the output for its own atoms.
However it requires about twice the memory (per processor) for the
extra buffering.
</P>
<HR>
<P>The <I>element</I> keyword applies only to the the dump <I>cfg</I>, <I>xyz</I>, and
<I>image</I> styles. It associates element names (e.g. H, C, Fe) with
LAMMPS atom types. See the list of element names at the bottom of
this page.
</P>
<P>In the case of dump <I>cfg</I>, this allows the <A HREF = "http://mt.seas.upenn.edu/Archive/Graphics/A">AtomEye</A>
visualization package to read the dump file and render atoms with the
appropriate size and color.
</P>
<P>In the case of dump <I>image</I>, the output images will follow the same
<A HREF = "http://mt.seas.upenn.edu/Archive/Graphics/A">AtomEye</A> convention. An element name is specified for each
atom type (1 to Ntype) in the simulation. The same element name can
be given to multiple atom types.
</P>
<P>In the case of <I>xyz</I> format dumps, there are no restrictions to what
label can be used as an element name. Any whitespace separated text
will be accepted.
</P>
<HR>
<P>The <I>every</I> keyword changes the dump frequency originally specified by
the <A HREF = "dump.html">dump</A> command to a new value. The every keyword can be
specified in one of two ways. It can be a numeric value in which case
it must be > 0. Or it can be an <A HREF = "variable.html">equal-style variable</A>,
which should be specified as v_name, where name is the variable name.
</P>
<P>In this case, the variable is evaluated at the beginning of a run to
determine the next timestep at which a dump snapshot will be written
out. On that timestep the variable will be evaluated again to
determine the next timestep, etc. Thus the variable should return
timestep values. See the stagger() and logfreq() and stride() math
functions for <A HREF = "variable.html">equal-style variables</A>, as examples of
useful functions to use in this context. Other similar math functions
could easily be added as options for <A HREF = "variable.html">equal-style
variables</A>. Also see the next() function, which allows
use of a file-style variable which reads successive values from a
file, each time the variable is evaluated. Used with the <I>every</I>
keyword, if the file contains a list of ascending timesteps, you can
output snapshots whenever you wish.
</P>
<P>Note that when using the variable option with the <I>every</I> keyword, you
need to use the <I>first</I> option if you want an initial snapshot written
to the dump file. The <I>every</I> keyword cannot be used with the dump
<I>dcd</I> style.
</P>
<P>For example, the following commands will
write snapshots at timesteps 0,10,20,30,100,200,300,1000,2000,etc:
</P>
<PRE>variable s equal logfreq(10,3,10)
dump 1 all atom 100 tmp.dump
dump_modify 1 every v_s first yes
</PRE>
<P>The following commands would write snapshots at the timesteps listed
in file tmp.times:
</P>
<PRE>variable f file tmp.times
variable s equal next(f)
dump 1 all atom 100 tmp.dump
dump_modify 1 every v_s
</PRE>
<P>IMPORTANT NOTE: When using a file-style variable with the <I>every</I>
keyword, the file of timesteps must list a first timestep that is
beyond the current timestep (e.g. it cannot be 0). And it must list
one or more timesteps beyond the length of the run you perform. This
is because the dump command will generate an error if the next
timestep it reads from the file is not a value greater than the
current timestep. Thus if you wanted output on steps 0,15,100 of a
100-timestep run, the file should contain the values 15,100,101 and
you should also use the dump_modify first command. Any final value >
100 could be used in place of 101.
</P>
<HR>
<P>The <I>first</I> keyword determines whether a dump snapshot is written on
the very first timestep after the dump command is invoked. This will
always occur if the current timestep is a multiple of N, the frequency
specified in the <A HREF = "dump.html">dump</A> command, including timestep 0. But
if this is not the case, a dump snapshot will only be written if the
setting of this keyword is <I>yes</I>. If it is <I>no</I>, which is the
default, then it will not be written.
</P>
<HR>
<P>The <I>flush</I> keyword determines whether a flush operation is invoked
after a dump snapshot is written to the dump file. A flush insures
the output in that file is current (no buffering by the OS), even if
LAMMPS halts before the simulation completes. Flushes cannot be
performed with dump style <I>xtc</I>.
</P>
<HR>
<P>The text-based dump styles have a default C-style format string which
simply specifies %d for integers and %g for floating-point values.
The <I>format</I> keyword can be used to override the default with a new
C-style format string. Do not include a trailing "\n" newline
character in the format string. This option has no effect on the
<I>dcd</I> and <I>xtc</I> dump styles since they write binary files. Note that
for the <I>cfg</I> style, the first two fields (atom id and type) are not
actually written into the CFG file, though you must include formats
for them in the format string.
</P>
<P>IMPORTANT NOTE: Any value written to a text-based dump file that is a
per-atom quantity calculated by a <A HREF = "compute.html">compute</A> or
<A HREF = "fix.html">fix</A> is stored internally as a floating-point value. If the
value is actually an integer and you wish it to appear in the text
dump file as a (large) integer, then you need to use an appropriate
format. For example, these commands:
</P>
<PRE>compute 1 all property/local batom1 batom2
-dump 1 all local 100 tmp.bonds index c_1<B>1</B> c_1<B>2</B>
+dump 1 all local 100 tmp.bonds index c_1[1] c_1[2]
dump_modify 1 format "%d %0.0f %0.0f"
</PRE>
<P>will output the two atom IDs for atoms in each bond as integers. If
the dump_modify command were omitted, they would appear as
floating-point values, assuming they were large integers (more than 6
digits). The "index" keyword should use the "%d" format since it is
not generated by a compute or fix, and is stored internally as an
integer.
</P>
<HR>
<P>The <I>fileper</I> keyword is documented below with the <I>nfile</I> keyword.
</P>
<HR>
<P>The <I>image</I> keyword applies only to the dump <I>atom</I> style. If the
image value is <I>yes</I>, 3 flags are appended to each atom's coords which
are the absolute box image of the atom in each dimension. For
example, an x image flag of -2 with a normalized coord of 0.5 means
the atom is in the center of the box, but has passed thru the box
boundary 2 times and is really 2 box lengths to the left of its
current coordinate. Note that for dump style <I>custom</I> these various
values can be printed in the dump file by using the appropriate atom
attributes in the dump command itself.
</P>
<HR>
<P>The <I>label</I> keyword applies only to the dump <I>local</I> style. When
it writes local information, such as bond or angle topology
to a dump file, it will use the specified <I>label</I> to format
the header. By default this includes 2 lines:
</P>
<PRE>ITEM: NUMBER OF ENTRIES
ITEM: ENTRIES ...
</PRE>
<P>The word "ENTRIES" will be replaced with the string specified,
e.g. BONDS or ANGLES.
</P>
<HR>
<P>The <I>nfile</I> or <I>fileper</I> keywords can be used in conjunction with the
"%" wildcard character in the specified dump file name, for all dump
styles except the <I>dcd</I>, <I>image</I>, <I>movie</I>, <I>xtc</I>, and <I>xyz</I> styles
(for which "%" is not allowed). As explained on the <A HREF = "dump.html">dump</A>
command doc page, the "%" character causes the dump file to be written
in pieces, one piece for each of P processors. By default P = the
number of processors the simulation is running on. The <I>nfile</I> or
<I>fileper</I> keyword can be used to set P to a smaller value, which can
be more efficient when running on a large number of processors.
</P>
<P>The <I>nfile</I> keyword sets P to the specified Nf value. For example, if
Nf = 4, and the simulation is running on 100 processors, 4 files will
be written, by processors 0,25,50,75. Each will collect information
from itself and the next 24 processors and write it to a dump file.
</P>
<P>For the <I>fileper</I> keyword, the specified value of Np means write one
file for every Np processors. For example, if Np = 4, every 4th
processor (0,4,8,12,etc) will collect information from itself and the
next 3 processors and write it to a dump file.
</P>
<HR>
<P>The <I>pad</I> keyword only applies when the dump filename is specified
with a wildcard "*" character which becomes the timestep. If <I>pad</I> is
0, which is the default, the timestep is converted into a string of
unpadded length, e.g. 100 or 12000 or 2000000. When <I>pad</I> is
specified with <I>Nchar</I> > 0, the string is padded with leading zeroes
so they are all the same length = <I>Nchar</I>. For example, pad 7 would
yield 0000100, 0012000, 2000000. This can be useful so that
post-processing programs can easily read the files in ascending
timestep order.
</P>
<HR>
<P>The <I>precision</I> keyword only applies to the dump <I>xtc</I> style. A
specified value of N means that coordinates are stored to 1/N
nanometer accuracy, e.g. for N = 1000, the coordinates are written to
1/1000 nanometer accuracy.
</P>
<HR>
<P>The <I>region</I> keyword only applies to the dump <I>custom</I>, <I>cfg</I>,
<I>image</I>, and <I>movie</I> styles. If specified, only atoms in the region
will be written to the dump file or included in the image/movie. Only
one region can be applied as a filter (the last one specified). See
the <A HREF = "region.html">region</A> command for more details. Note that a region
can be defined as the "inside" or "outside" of a geometric shape, and
it can be the "union" or "intersection" of a series of simpler
regions.
</P>
<HR>
<P>The <I>scale</I> keyword applies only to the dump <I>atom</I> style. A scale
value of <I>yes</I> means atom coords are written in normalized units from
0.0 to 1.0 in each box dimension. If the simluation box is triclinic
(tilted), then all atom coords will still be between 0.0 and 1.0. A
value of <I>no</I> means they are written in absolute distance units
(e.g. Angstroms or sigma).
</P>
<HR>
<P>The <I>sort</I> keyword determines whether lines of per-atom output in a
snapshot are sorted or not. A sort value of <I>off</I> means they will
typically be written in indeterminate order, either in serial or
parallel. This is the case even in serial if the <A HREF = "atom_modify.html">atom_modify
sort</A> option is turned on, which it is by default, to
improve performance. A sort value of <I>id</I> means sort the output by
atom ID. A sort value of N or -N means sort the output by the value
in the Nth column of per-atom info in either ascending or descending
order.
</P>
<P>The dump <I>local</I> style cannot be sorted by atom ID, since there are
typically multiple lines of output per atom. Some dump styles, such
as <I>dcd</I> and <I>xtc</I>, require sorting by atom ID to format the output
file correctly. If multiple processors are writing the dump file, via
the "%" wildcard in the dump filename, then sorting cannot be
performed.
</P>
<P>IMPORTANT NOTE: Unless it is required by the dump style, sorting dump
file output requires extra overhead in terms of CPU and communication
cost, as well as memory, versus unsorted output.
</P>
<HR>
<P>The <I>thresh</I> keyword only applies to the dump <I>custom</I>, <I>cfg</I>,
<I>image</I>, and <I>movie</I> styles. Multiple thresholds can be specified.
Specifying "none" turns off all threshold criteria. If thresholds are
specified, only atoms whose attributes meet all the threshold criteria
are written to the dump file or included in the image. The possible
attributes that can be tested for are the same as those that can be
specified in the <A HREF = "dump.html">dump custom</A> command, with the exception
of the <I>element</I> attribute, since it is not a numeric value. Note
that different attributes can be output by the dump custom command
than are used as threshold criteria by the dump_modify command.
E.g. you can output the coordinates and stress of atoms whose energy
is above some threshold.
</P>
<HR>
<P>The <I>unwrap</I> keyword only applies to the dump <I>dcd</I> and <I>xtc</I> styles.
If set to <I>yes</I>, coordinates will be written "unwrapped" by the image
flags for each atom. Unwrapped means that if the atom has passed thru
a periodic boundary one or more times, the value is printed for what
the coordinate would be if it had not been wrapped back into the
periodic box. Note that these coordinates may thus be far outside the
box size stored with the snapshot.
</P>
<HR>
<HR>
<P>These keywords apply only to the <A HREF = "dump_image.html">dump image</A> and
<A HREF = "dump_image.html">dump movie</A> styles. Any keyword that affects an
image, also affects a movie, since the movie is simply a collection of
images. Some of the keywords only affect the <A HREF = "dump_image.html">dump
movie</A> style. The description gives details.
</P>
<HR>
<P>The <I>acolor</I> keyword can be used with the <A HREF = "dump_image.html">dump image</A>
command, when its atom color setting is <I>type</I>, to set the color that
atoms of each type will be drawn in the image.
</P>
<P>The specified <I>type</I> should be an integer from 1 to Ntypes = the
number of atom types. A wildcard asterisk can be used in place of or
in conjunction with the <I>type</I> argument to specify a range of atom
types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
number of atom types, then an asterisk with no numeric values means
all types from 1 to N. A leading asterisk means all types from 1 to n
(inclusive). A trailing asterisk means all types from n to N
(inclusive). A middle asterisk means all types from m to n
(inclusive).
</P>
<P>The specified <I>color</I> can be a single color which is any of the 140
pre-defined colors (see below) or a color name defined by the
dump_modify color option. Or it can be two or more colors separated
by a "/" character, e.g. red/green/blue. In the former case, that
color is assigned to all the specified atom types. In the latter
case, the list of colors are assigned in a round-robin fashion to each
of the specified atom types.
</P>
<HR>
<P>The <I>adiam</I> keyword can be used with the <A HREF = "dump_image.html">dump image</A>
command, when its atom diameter setting is <I>type</I>, to set the size
that atoms of each type will be drawn in the image. The specified
<I>type</I> should be an integer from 1 to Ntypes. As with the <I>acolor</I>
keyword, a wildcard asterisk can be used as part of the <I>type</I>
argument to specify a range of atomt types. The specified <I>diam</I> is
the size in whatever distance <A HREF = "units.html">units</A> the input script is
using, e.g. Angstroms.
</P>
<HR>
<P>The <I>amap</I> keyword can be used with the <A HREF = "dump_image.html">dump image</A>
command, with its <I>atom</I> keyword, when its atom setting is an
atom-attribute, to setup a color map. The color map is used to assign
a specific RGB (red/green/blue) color value to an individual atom when
it is drawn, based on the atom's attribute, which is a numeric value,
e.g. its x-component of velocity if the atom-attribute "vx" was
specified.
</P>
<P>The basic idea of a color map is that the atom-attribute will be
within a range of values, and that range is associated with a a series
of colors (e.g. red, blue, green). An atom's specific value (vx =
-3.2) can then mapped to the series of colors (e.g. halfway between
red and blue), and a specific color is determined via an interpolation
procedure.
</P>
<P>There are many possible options for the color map, enabled by the
<I>amap</I> keyword. Here are the details.
</P>
<P>The <I>lo</I> and <I>hi</I> settings determine the range of values allowed for
the atom attribute. If numeric values are used for <I>lo</I> and/or <I>hi</I>,
then values that are lower/higher than that value are set to the
value. I.e. the range is static. If <I>lo</I> is specified as <I>min</I> or
<I>hi</I> as <I>max</I> then the range is dynamic, and the lower and/or
upper bound will be calculated each time an image is drawn, based
on the set of atoms being visualized.
</P>
<P>The <I>style</I> setting is two letters, such as "ca". The first letter is
either "c" for continuous, "d" for discrete, or "s" for sequential.
The second letter is either "a" for absolute, or "f" for fractional.
</P>
<P>A continuous color map is one in which the color changes continuously
from value to value within the range. A discrete color map is one in
which discrete colors are assigned to sub-ranges of values within the
range. A sequential color map is one in which discrete colors are
assigned to a sequence of sub-ranges of values covering the entire
range.
</P>
<P>An absolute color map is one in which the values to which colors are
assigned are specified explicitly as values within the range. A
fractional color map is one in which the values to which colors are
assigned are specified as a fractional portion of the range. For
example if the range is from -10.0 to 10.0, and the color red is to be
assigned to atoms with a value of 5.0, then for an absolute color map
the number 5.0 would be used. But for a fractional map, the number
0.75 would be used since 5.0 is 3/4 of the way from -10.0 to 10.0.
</P>
<P>The <I>delta</I> setting must be specified for all styles, but is only used
for the sequential style; otherwise the value is ignored. It
specifies the bin size to use within the range for assigning
consecutive colors to. For example, if the range is from -10.0 to
10.0 and a <I>delta</I> of 1.0 is used, then 20 colors will be assigned to
the range. The first will be from -10.0 <= color1 < -9.0, then 2nd
from -9.0 <= color2 < -8.0, etc.
</P>
<P>The <I>N</I> setting is how many entries follow. The format of the entries
depends on whether the color map style is continuous, discrete or
sequential. In all cases the <I>color</I> setting can be any of the 140
pre-defined colors (see below) or a color name defined by the
dump_modify color option.
</P>
<P>For continuous color maps, each entry has a <I>value</I> and a <I>color</I>.
The <I>value</I> is either a number within the range of values or <I>min</I> or
<I>max</I>. The <I>value</I> of the first entry must be <I>min</I> and the <I>value</I>
of the last entry must be <I>max</I>. Any entries in between must have
increasing values. Note that numeric values can be specified either
as absolute numbers or as fractions (0.0 to 1.0) of the range,
depending on the "a" or "f" in the style setting for the color map.
</P>
<P>Here is how the entries are used to determine the color of an
individual atom, given the value X of its atom attribute. X will fall
between 2 of the entry values. The color of the atom is linearly
interpolated (in each of the RGB values) between the 2 colors
associated with those entries. For example, if X = -5.0 and the 2
surrounding entries are "red" at -10.0 and "blue" at 0.0, then the
atom's color will be halfway between "red" and "blue", which happens
to be "purple".
</P>
<P>For discrete color maps, each entry has a <I>lo</I> and <I>hi</I> value and a
<I>color</I>. The <I>lo</I> and <I>hi</I> settings are either numbers within the
range of values or <I>lo</I> can be <I>min</I> or <I>hi</I> can be <I>max</I>. The <I>lo</I>
and <I>hi</I> settings of the last entry must be <I>min</I> and <I>max</I>. Other
entries can have any <I>lo</I> and <I>hi</I> values and the sub-ranges of
different values can overlap. Note that numeric <I>lo</I> and <I>hi</I> values
can be specified either as absolute numbers or as fractions (0.0 to
1.0) of the range, depending on the "a" or "f" in the style setting
for the color map.
</P>
<P>Here is how the entries are used to determine the color of an
individual atom, given the value X of its atom attribute. The entries
are scanned from first to last. The first time that <I>lo</I> <= X <=
<I>hi</I>, X is assigned the color associated with that entry. You can
think of the last entry as assigning a default color (since it will
always be matched by X), and the earlier entries as colors that
override the default. Also note that no interpolation of a color RGB
is done. All atoms will be drawn with one of the colors in the list
of entries.
</P>
<P>For sequential color maps, each entry has only a <I>color</I>. Here is how
the entries are used to determine the color of an individual atom,
given the value X of its atom attribute. The range is partitioned
into N bins of width <I>binsize</I>. Thus X will fall in a specific bin
from 1 to N, say the Mth bin. If it falls on a boundary between 2
bins, it is considered to be in the higher of the 2 bins. Each bin is
assigned a color from the E entries. If E < N, then the colors are
repeated. For example if 2 entries with colors red and green are
specified, then the odd numbered bins will be red and the even bins
green. The color of the atom is the color of its bin. Note that the
sequential color map is really a shorthand way of defining a discrete
color map without having to specify where all the bin boundaries are.
</P>
<P>Here is an example of using a sequential color map to color all the
atoms in individual molecules with a different color. See the
examples/pour/in.pour.2d.molecule input script for an example of how
this is used.
</P>
<PRE>variable colors string &
"red green blue yellow white &
purple pink orange lime gray"
variable mol atom mol%10
dump 1 all image 250 image.*.jpg v_mol type &
zoom 1.6 adiam 1.5
dump_modify 1 pad 5 amap 0 10 sa 1 10 ${colors}
</PRE>
<P>In this case, 10 colors are defined, and molecule IDs are
mapped to one of the colors, even if there are 1000s of molecules.
</P>
<HR>
<P>The <I>backcolor</I> sets the background color of the images. The color
name can be any of the 140 pre-defined colors (see below) or a color
name defined by the dump_modify color option.
</P>
<HR>
<P>The <I>bcolor</I> keyword can be used with the <A HREF = "dump_image.html">dump image</A>
command, with its <I>bond</I> keyword, when its color setting is <I>type</I>, to
set the color that bonds of each type will be drawn in the image.
</P>
<P>The specified <I>type</I> should be an integer from 1 to Nbondtypes = the
number of bond types. A wildcard asterisk can be used in place of or
in conjunction with the <I>type</I> argument to specify a range of bond
types. This takes the form "*" or "*n" or "n*" or "m*n". If N = the
number of bond types, then an asterisk with no numeric values means
all types from 1 to N. A leading asterisk means all types from 1 to n
(inclusive). A trailing asterisk means all types from n to N
(inclusive). A middle asterisk means all types from m to n
(inclusive).
</P>
<P>The specified <I>color</I> can be a single color which is any of the 140
pre-defined colors (see below) or a color name defined by the
dump_modify color option. Or it can be two or more colors separated
by a "/" character, e.g. red/green/blue. In the former case, that
color is assigned to all the specified bond types. In the latter
case, the list of colors are assigned in a round-robin fashion to each
of the specified bond types.
</P>
<HR>
<P>The <I>bdiam</I> keyword can be used with the <A HREF = "dump_image.html">dump image</A>
command, with its <I>bond</I> keyword, when its diam setting is <I>type</I>, to
set the diameter that bonds of each type will be drawn in the image.
The specified <I>type</I> should be an integer from 1 to Nbondtypes. As
with the <I>bcolor</I> keyword, a wildcard asterisk can be used as part of
the <I>type</I> argument to specify a range of bond types. The specified
<I>diam</I> is the size in whatever distance <A HREF = "units.html">units</A> you are
using, e.g. Angstroms.
</P>
<HR>
<P>The <I>bitrate</I> keyword can be used with the <A HREF = "dump_movie.html">dump
movie</A> command to define the size of the resulting
movie file and its quality via setting how many kbits per second are
to be used for the movie file. Higher bitrates require less
compression and will result in higher quality movies. The quality is
also determined by the compression format and encoder. The default
setting is 2000 kbit/s, which will result in average quality with
older compression formats.
</P>
<P>IMPORTANT NOTE: Not all movie file formats supported by dump movie
allow the bitrate to be set. If not, the setting is silently ignored.
</P>
<HR>
<P>The <I>boxcolor</I> keyword sets the color of the simulation box drawn
around the atoms in each image. See the "dump image box" command for
how to specify that a box be drawn. The color name can be any of the
140 pre-defined colors (see below) or a color name defined by the
dump_modify color option.
</P>
<HR>
<P>The <I>color</I> keyword allows definition of a new color name, in addition
to the 140-predefined colors (see below), and associates 3
red/green/blue RGB values with that color name. The color name can
then be used with any other dump_modify keyword that takes a color
name as a value. The RGB values should each be floating point values
between 0.0 and 1.0 inclusive.
</P>
<P>When a color name is converted to RGB values, the user-defined color
names are searched first, then the 140 pre-defined color names. This
means you can also use the <I>color</I> keyword to overwrite one of the
pre-defined color names with new RBG values.
</P>
<HR>
<P>The <I>framerate</I> keyword can be used with the <A HREF = "dump_movie.html">dump
movie</A> command to define the duration of the resulting
movie file. Movie files written by the dump <I>movie</I> command have a
default frame rate of 24 frames per second and the images generated
will be converted at that rate. Thus a sequence of 1000 dump images
will result in a movie of about 42 seconds. To make a movie run
longer you can either generate images more frequently or lower the
frame rate. To speed a movie up, you can do the inverse. Using a
frame rate higher than 24 is not recommended, as it will result in
simply dropping the rendered images. It is more efficient to dump
images less frequently.
</P>
<HR>
<HR>
<P><B>Restrictions:</B> none
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "dump.html">dump</A>, <A HREF = "dump_image.html">dump image</A>, <A HREF = "undump.html">undump</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are
</P>
<UL><LI>append = no
<LI>buffer = yes for dump styles <I>atom</I>, <I>custom</I>, <I>loca</I>, and <I>xyz</I>
<LI>element = "C" for every atom type
<LI>every = whatever it was set to via the <A HREF = "dump.html">dump</A> command
<LI>fileper = # of processors
<LI>first = no
<LI>flush = yes
<LI>format = %d and %g for each integer or floating point value
<LI>image = no
<LI>label = ENTRIES
<LI>nfile = 1
<LI>pad = 0
<LI>precision = 1000
<LI>region = none
<LI>scale = yes
<LI>sort = off for dump styles <I>atom</I>, <I>custom</I>, <I>cfg</I>, and <I>local</I>
<LI>sort = id for dump styles <I>dcd</I>, <I>xtc</I>, and <I>xyz</I>
<LI>thresh = none
<LI>unwrap = no
</UL>
<UL><LI>acolor = * red/green/blue/yellow/aqua/cyan
<LI>adiam = * 1.0
<LI>amap = min max cf 0.0 2 min blue max red
<LI>backcolor = black
<LI>bcolor = * red/green/blue/yellow/aqua/cyan
<LI>bdiam = * 0.5
<LI>bitrate = 2000
<LI>boxcolor = yellow
<LI>color = 140 color names are pre-defined as listed below
<LI>framerate = 24
</UL>
<HR>
<P>These are the standard 109 element names that LAMMPS pre-defines for
use with the <A HREF = "dump_image.html">dump image</A> and dump_modify commands.
</P>
<UL><LI>1-10 = "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne"
<LI>11-20 = "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca"
<LI>21-30 = "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn"
<LI>31-40 = "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr"
<LI>41-50 = "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn"
<LI>51-60 = "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd"
<LI>61-70 = "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb"
<LI>71-80 = "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg"
<LI>81-90 = "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th"
<LI>91-100 = "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm"
<LI>101-109 = "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt"
</UL>
<HR>
<P>These are the 140 colors that LAMMPS pre-defines for use with the
<A HREF = "dump_image.html">dump image</A> and dump_modify commands. Additional
colors can be defined with the dump_modify color command. The 3
numbers listed for each name are the RGB (red/green/blue) values.
Divide each value by 255 to get the equivalent 0.0 to 1.0 value.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR><TD >aliceblue = 240, 248, 255 </TD><TD >antiquewhite = 250, 235, 215 </TD><TD >aqua = 0, 255, 255 </TD><TD >aquamarine = 127, 255, 212 </TD><TD >azure = 240, 255, 255 </TD></TR>
<TR><TD >beige = 245, 245, 220 </TD><TD >bisque = 255, 228, 196 </TD><TD >black = 0, 0, 0 </TD><TD >blanchedalmond = 255, 255, 205 </TD><TD >blue = 0, 0, 255 </TD></TR>
<TR><TD >blueviolet = 138, 43, 226 </TD><TD >brown = 165, 42, 42 </TD><TD >burlywood = 222, 184, 135 </TD><TD >cadetblue = 95, 158, 160 </TD><TD >chartreuse = 127, 255, 0 </TD></TR>
<TR><TD >chocolate = 210, 105, 30 </TD><TD >coral = 255, 127, 80 </TD><TD >cornflowerblue = 100, 149, 237 </TD><TD >cornsilk = 255, 248, 220 </TD><TD >crimson = 220, 20, 60 </TD></TR>
<TR><TD >cyan = 0, 255, 255 </TD><TD >darkblue = 0, 0, 139 </TD><TD >darkcyan = 0, 139, 139 </TD><TD >darkgoldenrod = 184, 134, 11 </TD><TD >darkgray = 169, 169, 169 </TD></TR>
<TR><TD >darkgreen = 0, 100, 0 </TD><TD >darkkhaki = 189, 183, 107 </TD><TD >darkmagenta = 139, 0, 139 </TD><TD >darkolivegreen = 85, 107, 47 </TD><TD >darkorange = 255, 140, 0 </TD></TR>
<TR><TD >darkorchid = 153, 50, 204 </TD><TD >darkred = 139, 0, 0 </TD><TD >darksalmon = 233, 150, 122 </TD><TD >darkseagreen = 143, 188, 143 </TD><TD >darkslateblue = 72, 61, 139 </TD></TR>
<TR><TD >darkslategray = 47, 79, 79 </TD><TD >darkturquoise = 0, 206, 209 </TD><TD >darkviolet = 148, 0, 211 </TD><TD >deeppink = 255, 20, 147 </TD><TD >deepskyblue = 0, 191, 255 </TD></TR>
<TR><TD >dimgray = 105, 105, 105 </TD><TD >dodgerblue = 30, 144, 255 </TD><TD >firebrick = 178, 34, 34 </TD><TD >floralwhite = 255, 250, 240 </TD><TD >forestgreen = 34, 139, 34 </TD></TR>
<TR><TD >fuchsia = 255, 0, 255 </TD><TD >gainsboro = 220, 220, 220 </TD><TD >ghostwhite = 248, 248, 255 </TD><TD >gold = 255, 215, 0 </TD><TD >goldenrod = 218, 165, 32 </TD></TR>
<TR><TD >gray = 128, 128, 128 </TD><TD >green = 0, 128, 0 </TD><TD >greenyellow = 173, 255, 47 </TD><TD >honeydew = 240, 255, 240 </TD><TD >hotpink = 255, 105, 180 </TD></TR>
<TR><TD >indianred = 205, 92, 92 </TD><TD >indigo = 75, 0, 130 </TD><TD >ivory = 255, 240, 240 </TD><TD >khaki = 240, 230, 140 </TD><TD >lavender = 230, 230, 250 </TD></TR>
<TR><TD >lavenderblush = 255, 240, 245 </TD><TD >lawngreen = 124, 252, 0 </TD><TD >lemonchiffon = 255, 250, 205 </TD><TD >lightblue = 173, 216, 230 </TD><TD >lightcoral = 240, 128, 128 </TD></TR>
<TR><TD >lightcyan = 224, 255, 255 </TD><TD >lightgoldenrodyellow = 250, 250, 210 </TD><TD >lightgreen = 144, 238, 144 </TD><TD >lightgrey = 211, 211, 211 </TD><TD >lightpink = 255, 182, 193 </TD></TR>
<TR><TD >lightsalmon = 255, 160, 122 </TD><TD >lightseagreen = 32, 178, 170 </TD><TD >lightskyblue = 135, 206, 250 </TD><TD >lightslategray = 119, 136, 153 </TD><TD >lightsteelblue = 176, 196, 222 </TD></TR>
<TR><TD >lightyellow = 255, 255, 224 </TD><TD >lime = 0, 255, 0 </TD><TD >limegreen = 50, 205, 50 </TD><TD >linen = 250, 240, 230 </TD><TD >magenta = 255, 0, 255 </TD></TR>
<TR><TD >maroon = 128, 0, 0 </TD><TD >mediumaquamarine = 102, 205, 170 </TD><TD >mediumblue = 0, 0, 205 </TD><TD >mediumorchid = 186, 85, 211 </TD><TD >mediumpurple = 147, 112, 219 </TD></TR>
<TR><TD >mediumseagreen = 60, 179, 113 </TD><TD >mediumslateblue = 123, 104, 238 </TD><TD >mediumspringgreen = 0, 250, 154 </TD><TD >mediumturquoise = 72, 209, 204 </TD><TD >mediumvioletred = 199, 21, 133 </TD></TR>
<TR><TD >midnightblue = 25, 25, 112 </TD><TD >mintcream = 245, 255, 250 </TD><TD >mistyrose = 255, 228, 225 </TD><TD >moccasin = 255, 228, 181 </TD><TD >navajowhite = 255, 222, 173 </TD></TR>
<TR><TD >navy = 0, 0, 128 </TD><TD >oldlace = 253, 245, 230 </TD><TD >olive = 128, 128, 0 </TD><TD >olivedrab = 107, 142, 35 </TD><TD >orange = 255, 165, 0 </TD></TR>
<TR><TD >orangered = 255, 69, 0 </TD><TD >orchid = 218, 112, 214 </TD><TD >palegoldenrod = 238, 232, 170 </TD><TD >palegreen = 152, 251, 152 </TD><TD >paleturquoise = 175, 238, 238 </TD></TR>
<TR><TD >palevioletred = 219, 112, 147 </TD><TD >papayawhip = 255, 239, 213 </TD><TD >peachpuff = 255, 239, 213 </TD><TD >peru = 205, 133, 63 </TD><TD >pink = 255, 192, 203 </TD></TR>
<TR><TD >plum = 221, 160, 221 </TD><TD >powderblue = 176, 224, 230 </TD><TD >purple = 128, 0, 128 </TD><TD >red = 255, 0, 0 </TD><TD >rosybrown = 188, 143, 143 </TD></TR>
<TR><TD >royalblue = 65, 105, 225 </TD><TD >saddlebrown = 139, 69, 19 </TD><TD >salmon = 250, 128, 114 </TD><TD >sandybrown = 244, 164, 96 </TD><TD >seagreen = 46, 139, 87 </TD></TR>
<TR><TD >seashell = 255, 245, 238 </TD><TD >sienna = 160, 82, 45 </TD><TD >silver = 192, 192, 192 </TD><TD >skyblue = 135, 206, 235 </TD><TD >slateblue = 106, 90, 205 </TD></TR>
<TR><TD >slategray = 112, 128, 144 </TD><TD >snow = 255, 250, 250 </TD><TD >springgreen = 0, 255, 127 </TD><TD >steelblue = 70, 130, 180 </TD><TD >tan = 210, 180, 140 </TD></TR>
<TR><TD >teal = 0, 128, 128 </TD><TD >thistle = 216, 191, 216 </TD><TD >tomato = 253, 99, 71 </TD><TD >turquoise = 64, 224, 208 </TD><TD >violet = 238, 130, 238 </TD></TR>
<TR><TD >wheat = 245, 222, 179 </TD><TD >white = 255, 255, 255 </TD><TD >whitesmoke = 245, 245, 245 </TD><TD >yellow = 255, 255, 0 </TD><TD >yellowgreen = 154, 205, 50
</TD></TR></TABLE></DIV>
</HTML>
diff --git a/doc/fix_bond_break.html b/doc/fix_bond_break.html
index 1aa105e98..2bb8d5e66 100644
--- a/doc/fix_bond_break.html
+++ b/doc/fix_bond_break.html
@@ -1,153 +1,158 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix bond/break command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID bond/break Nevery bondtype Rmax keyword values ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>bond/break = style name of this fix command
<LI>Nevery = attempt bond breaking every this many steps
<LI>bondtype = type of bonds to break
<LI>Rmax = bond longer than Rmax can break (distance units)
<LI>zero or more keyword/value pairs may be appended to args
<LI>keyword = <I>prob</I>
<PRE> <I>prob</I> values = fraction seed
fraction = break a bond with this probability if otherwise eligible
seed = random number seed (positive integer)
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 5 all bond/break 10 2 1.2
fix 5 polymer bond/break 1 1 2.0 prob 0.5 49829
</PRE>
<P><B>Description:</B>
</P>
<P>Break bonds between pairs of atoms as a simulation runs according to
specified criteria. This can be used to model the dissolution of a
polymer network due to stretching of the simulation box or other
deformations. In this context, a bond means an interaction between a
pair of atoms computed by the <A HREF = "bond_style.html">bond_style</A> command.
Once the bond is broken it will be permanently deleted, as will all
angle, dihedral, and improper interactions that bond is part of.
</P>
<P>This is different than a <A HREF = "pair_style.html">pairwise</A> bond-order
potential such as Tersoff or AIREBO which infers bonds and many-body
interactions based on the current geometry of a small cluster of atoms
and effectively creates and destroys bonds and higher-order many-body
interactions from timestep to timestep as atoms move.
</P>
<P>A check for possible bond breakage is performed every <I>Nevery</I>
timesteps. If two bonded atoms I,J are further than a distance <I>Rmax</I>
of each other, if the bond is of type <I>bondtype</I>, and if both I and J
are in the specified fix group, then I,J is labeled as a "possible"
bond to break.
</P>
<P>If several bonds involving an atom are stretched, it may have multiple
possible bonds to break. Every atom checks its list of possible bonds
to break and labels the longest such bond as its "sole" bond to break.
After this is done, if atom I is bonded to atom J in its sole bond,
and atom J is bonded to atom I in its sole bond, then the I,J bond is
"eligible" to be broken.
</P>
<P>Note that these rules mean an atom will only be part of at most one
broken bond on a given timestep. It also means that if atom I chooses
atom J as its sole partner, but atom J chooses atom K is its sole
partner (due to Rjk > Rij), then this means atom I will not be part of
a broken bond on this timestep, even if it has other possible bond
partners.
</P>
<P>The <I>prob</I> keyword can effect whether an eligible bond is actually
broken. The <I>fraction</I> setting must be a value between 0.0 and 1.0.
A uniform random number between 0.0 and 1.0 is generated and the
eligible bond is only broken if the random number < fraction.
</P>
<P>When a bond is broken, data structures within LAMMPS that store bond
topology are updated to reflect the breakage. Likewise, if the bond
is part of a 3-body (angle) or 4-body (dihedral, improper)
interaction, that interaction is removed as well. These changes
typically affect pairwise interactions between atoms that used to be
part of bonds, angles, etc.
</P>
+<P>IMPORTANT NOTE: One data structure that is not updated when a bond
+breaks are the molecule IDs stored by each atom. Even though
+one molecule becomes two moleclues due to the broken bond, all atoms
+in both new moleclues retain their original molecule IDs.
+</P>
<P>Computationally, each timestep this fix operates, it loops over all
the bonds in the system and computes distances between pairs of bonded
atoms. It also communicates between neighboring processors to
coordinate which bonds are broken. Moreover, if any bonds are broken,
neighbor lists must be immediately updated on the same timestep. This
is to insure that any pairwise interactions that should be turned "on"
due to a bond breaking, because they are no longer excluded by the
presence of the bond and the settings of the
<A HREF = "special_bonds.html">special_bonds</A> command, will be immediately
recognized. All of these operations increase the cost of a timestep.
Thus you should be cautious about invoking this fix too frequently.
</P>
<P>You can dump out snapshots of the current bond topology via the <A HREF = "dump.html">dump
local</A> command.
</P>
<P>IMPORTANT NOTE: Breaking a bond typically alters the energy of a
system. You should be careful not to choose bond breaking criteria
that induce a dramatic change in energy. For example, if you define a
very stiff harmonic bond and break it when 2 atoms are separated by a
distance far from the equilibribum bond length, then the 2 atoms will
be dramatically released when the bond is broken. More generally, you
may need to thermostat your system to compensate for energy changes
resulting from broken bonds (and angles, dihedrals, impropers).
</P>
<HR>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>. None of the <A HREF = "fix_modify.html">fix_modify</A> options
are relevant to this fix.
</P>
<P>This fix computes two statistics which it stores in a global vector of
length 2, which can be accessed by various <A HREF = "Section_howto.html#howto_15">output
commands</A>. The vector values calculated
by this fix are "intensive".
</P>
<P>These are the 2 quantities:
</P>
<UL><LI>(1) # of bonds broken on the most recent breakage timestep
<LI>(2) cummulative # of bonds broken
</UL>
<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_bond_create.html">fix bond/create</A>, <A HREF = "fix_bond_swap.html">fix
bond/swap</A>, <A HREF = "dump.html">dump local</A>,
<A HREF = "special_bonds.html">special_bonds</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are prob = 1.0.
</P>
</HTML>
diff --git a/doc/fix_bond_break.txt b/doc/fix_bond_break.txt
index 81b19b867..f55a87049 100644
--- a/doc/fix_bond_break.txt
+++ b/doc/fix_bond_break.txt
@@ -1,140 +1,145 @@
"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
fix bond/break command :h3
[Syntax:]
fix ID group-ID bond/break Nevery bondtype Rmax keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
bond/break = style name of this fix command :l
Nevery = attempt bond breaking every this many steps :l
bondtype = type of bonds to break :l
Rmax = bond longer than Rmax can break (distance units) :l
zero or more keyword/value pairs may be appended to args :l
keyword = {prob} :l
{prob} values = fraction seed
fraction = break a bond with this probability if otherwise eligible
seed = random number seed (positive integer) :pre
:ule
[Examples:]
fix 5 all bond/break 10 2 1.2
fix 5 polymer bond/break 1 1 2.0 prob 0.5 49829 :pre
[Description:]
Break bonds between pairs of atoms as a simulation runs according to
specified criteria. This can be used to model the dissolution of a
polymer network due to stretching of the simulation box or other
deformations. In this context, a bond means an interaction between a
pair of atoms computed by the "bond_style"_bond_style.html command.
Once the bond is broken it will be permanently deleted, as will all
angle, dihedral, and improper interactions that bond is part of.
This is different than a "pairwise"_pair_style.html bond-order
potential such as Tersoff or AIREBO which infers bonds and many-body
interactions based on the current geometry of a small cluster of atoms
and effectively creates and destroys bonds and higher-order many-body
interactions from timestep to timestep as atoms move.
A check for possible bond breakage is performed every {Nevery}
timesteps. If two bonded atoms I,J are further than a distance {Rmax}
of each other, if the bond is of type {bondtype}, and if both I and J
are in the specified fix group, then I,J is labeled as a "possible"
bond to break.
If several bonds involving an atom are stretched, it may have multiple
possible bonds to break. Every atom checks its list of possible bonds
to break and labels the longest such bond as its "sole" bond to break.
After this is done, if atom I is bonded to atom J in its sole bond,
and atom J is bonded to atom I in its sole bond, then the I,J bond is
"eligible" to be broken.
Note that these rules mean an atom will only be part of at most one
broken bond on a given timestep. It also means that if atom I chooses
atom J as its sole partner, but atom J chooses atom K is its sole
partner (due to Rjk > Rij), then this means atom I will not be part of
a broken bond on this timestep, even if it has other possible bond
partners.
The {prob} keyword can effect whether an eligible bond is actually
broken. The {fraction} setting must be a value between 0.0 and 1.0.
A uniform random number between 0.0 and 1.0 is generated and the
eligible bond is only broken if the random number < fraction.
When a bond is broken, data structures within LAMMPS that store bond
topology are updated to reflect the breakage. Likewise, if the bond
is part of a 3-body (angle) or 4-body (dihedral, improper)
interaction, that interaction is removed as well. These changes
typically affect pairwise interactions between atoms that used to be
part of bonds, angles, etc.
+IMPORTANT NOTE: One data structure that is not updated when a bond
+breaks are the molecule IDs stored by each atom. Even though
+one molecule becomes two moleclues due to the broken bond, all atoms
+in both new moleclues retain their original molecule IDs.
+
Computationally, each timestep this fix operates, it loops over all
the bonds in the system and computes distances between pairs of bonded
atoms. It also communicates between neighboring processors to
coordinate which bonds are broken. Moreover, if any bonds are broken,
neighbor lists must be immediately updated on the same timestep. This
is to insure that any pairwise interactions that should be turned "on"
due to a bond breaking, because they are no longer excluded by the
presence of the bond and the settings of the
"special_bonds"_special_bonds.html command, will be immediately
recognized. All of these operations increase the cost of a timestep.
Thus you should be cautious about invoking this fix too frequently.
You can dump out snapshots of the current bond topology via the "dump
local"_dump.html command.
IMPORTANT NOTE: Breaking a bond typically alters the energy of a
system. You should be careful not to choose bond breaking criteria
that induce a dramatic change in energy. For example, if you define a
very stiff harmonic bond and break it when 2 atoms are separated by a
distance far from the equilibribum bond length, then the 2 atoms will
be dramatically released when the bond is broken. More generally, you
may need to thermostat your system to compensate for energy changes
resulting from broken bonds (and angles, dihedrals, impropers).
:line
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options
are relevant to this fix.
This fix computes two statistics which it stores in a global vector of
length 2, which can be accessed by various "output
commands"_Section_howto.html#howto_15. The vector values calculated
by this fix are "intensive".
These are the 2 quantities:
(1) # of bonds broken on the most recent breakage timestep
(2) cummulative # of bonds broken :ul
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"fix bond/create"_fix_bond_create.html, "fix
bond/swap"_fix_bond_swap.html, "dump local"_dump.html,
"special_bonds"_special_bonds.html
[Default:]
The option defaults are prob = 1.0.
diff --git a/doc/fix_bond_create.html b/doc/fix_bond_create.html
index 4f32000d4..0a4bb350c 100644
--- a/doc/fix_bond_create.html
+++ b/doc/fix_bond_create.html
@@ -1,248 +1,253 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix bond/create command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID bond/create Nevery itype jtype Rmin bondtype keyword values ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>bond/create = style name of this fix command
<LI>Nevery = attempt bond creation every this many steps
<LI>itype,jtype = atoms of itype can bond to atoms of jtype
<LI>Rmin = 2 atoms separated by less than Rmin can bond (distance units)
<LI>bondtype = type of created bonds
<LI>zero or more keyword/value pairs may be appended to args
<LI>keyword = <I>iparam</I> or <I>jparam</I> or <I>prob</I> or <I>atype</I> or <I>dtype</I> or <I>itype</I>
<PRE> <I>iparam</I> values = maxbond, newtype
maxbond = max # of bonds of bondtype the itype atom can have
newtype = change the itype atom to this type when maxbonds exist
<I>jparam</I> values = maxbond, newtype
maxbond = max # of bonds of bondtype the jtype atom can have
newtype = change the jtype atom to this type when maxbonds exist
<I>prob</I> values = fraction seed
fraction = create a bond with this probability if otherwise eligible
seed = random number seed (positive integer)
<I>atype</I> value = angletype
angletype = type of created angles
<I>dtype</I> value = dihedraltype
dihedraltype = type of created dihedrals
<I>itype</I> value = impropertype
impropertype = type of created impropers
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 5 all bond/create 10 1 2 0.8 1
fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3
fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3 atype 1 dtype 2
</PRE>
<P><B>Description:</B>
</P>
<P>Create bonds between pairs of atoms as a simulation runs according to
specified criteria. This can be used to model cross-linking of
polymers, the formation of a percolation network, etc. In this
context, a bond means an interaction between a pair of atoms computed
by the <A HREF = "bond_style.html">bond_style</A> command. Once the bond is created
it will be permanently in place. Optionally, the creation of a bond
can also create angle, dihedral, and improper interactions that bond
is part of. See the discussion of the <I>atype</I>, <I>dtype</I>, and <I>itype</I>
keywords below.
</P>
<P>This is different than a <A HREF = "pair_style.html">pairwise</A> bond-order
potential such as Tersoff or AIREBO which infers bonds and many-body
interactions based on the current geometry of a small cluster of atoms
and effectively creates and destroys bonds and higher-order many-body
interactions from timestep to timestep as atoms move.
</P>
<P>A check for possible new bonds is performed every <I>Nevery</I> timesteps.
If two atoms I,J are within a distance <I>Rmin</I> of each other, if I is
of atom type <I>itype</I>, if J is of atom type <I>jtype</I>, if both I and J
are in the specified fix group, if a bond does not already exist
between I and J, and if both I and J meet their respective <I>maxbond</I>
requirement (explained below), then I,J is labeled as a "possible"
bond pair.
</P>
<P>If several atoms are close to an atom, it may have multiple possible
bond partners. Every atom checks its list of possible bond partners
and labels the closest such partner as its "sole" bond partner. After
this is done, if atom I has atom J as its sole partner, and atom J has
atom I as its sole partner, then the I,J bond is "eligible" to be
formed.
</P>
<P>Note that these rules mean an atom will only be part of at most one
created bond on a given timestep. It also means that if atom I
chooses atom J as its sole partner, but atom J chooses atom K is its
sole partner (due to Rjk < Rij), then this means atom I will not form
a bond on this timestep, even if it has other possible bond partners.
</P>
<P>It is permissible to have <I>itype</I> = <I>jtype</I>. <I>Rmin</I> must be <= the
pairwise cutoff distance between <I>itype</I> and <I>jtype</I> atoms, as defined
by the <A HREF = "pair_style.html">pair_style</A> command.
</P>
<P>The <I>iparam</I> and <I>jparam</I> keywords can be used to limit the bonding
functionality of the participating atoms. Each atom keeps track of
how many bonds of <I>bondtype</I> it already has. If atom I of
itype already has <I>maxbond</I> bonds (as set by the <I>iparam</I>
keyword), then it will not form any more. Likewise for atom J. If
<I>maxbond</I> is set to 0, then there is no limit on the number of bonds
that can be formed with that atom.
</P>
<P>The <I>newtype</I> value for <I>iparam</I> and <I>jparam</I> can be used to change
the atom type of atom I or J when it reaches <I>maxbond</I> number of bonds
of type <I>bondtype</I>. This means it can now interact in a pairwise
fashion with other atoms in a different way by specifying different
<A HREF = "pair_coeff.html">pair_coeff</A> coefficients. If you do not wish the
atom type to change, simply specify <I>newtype</I> as <I>itype</I> or <I>jtype</I>.
</P>
<P>The <I>prob</I> keyword can also effect whether an eligible bond is
actually created. The <I>fraction</I> setting must be a value between 0.0
and 1.0. A uniform random number between 0.0 and 1.0 is generated and
the eligible bond is only created if the random number < fraction.
</P>
<P>Any bond that is created is assigned a bond type of <I>bondtype</I>
</P>
<P>When a bond is created, data structures within LAMMPS that store bond
topology are updated to reflect the creation. If the bond is part of
new 3-body (angle) or 4-body (dihedral, improper) interactions, you
can choose to create new angles, dihedrals, impropers as well, using
the <I>atype</I>, <I>dtype</I>, and <I>itype</I> keywords. All of these changes
typically affect pairwise interactions between atoms that are now part
of new bonds, angles, etc.
</P>
+<P>IMPORTANT NOTE: One data structure that is not updated when a bond
+breaks are the molecule IDs stored by each atom. Even though two
+molecules become one moleclue due to the created bond, all atoms in
+the new moleclue retain their original molecule IDs.
+</P>
<P>If the <I>atype</I> keyword is used and if an angle potential is defined
via the <A HREF = "angle.html">angle_style</A> command, then any new 3-body
interactions inferred by the creation of a bond will create new angles
of type <I>angletype</I>, with parameters assigned by the corresponding
<A HREF = "angle_coeff.html">angle_coeff</A> command. Likewise, the <I>dtype</I> and
<I>itype</I> keywords will create new dihedrals and impropers of type
<I>dihedraltype</I> and <I>impropertype</I>.
</P>
<P>IMPORTANT NOTE: To create a new bond, the internal LAMMPS data
structures that store this information must have space for it. When
LAMMPS is initialized from a data file, the list of bonds is scanned
and the maximum number of bonds per atom is tallied. If some atom
will acquire more bonds than this limit as this fix operates, then the
"extra bond per atom" parameter must be set to allow for it. Ditto
for "extra angle per atom", "extra dihedral per atom", and "extra
improper per atom" if angles, dihedrals, or impropers are being added
when bonds are created. See the <A HREF = "read_data.html">read_data</A> or
<A HREF = "create_box.html">create_box</A> command for more details. Note that a
data file with no atoms can be used if you wish to add unbonded atoms
via the <A HREF = "create_atoms.html">create atoms</A> command, e.g. for a
percolation simulation.
</P>
<P>IMPORTANT NOTE: LAMMPS also maintains a data structure that stores a
list of 1st, 2nd, and 3rd neighbors of each atom (within the bond
topology of the system) for use in weighting pairwise interactions for
bonded atoms. Adding a bond adds a single entry to this list. The
"extra special per atom" parameter must typically be set to allow for
it. There are 3 ways to do this. See the <A HREF = "read_data.html">read_data</A>
or <A HREF = "create_box.html">create_box</A> or "special_bonds extra" commands for
details.
</P>
<P>IMPORTANT NOTE: Even if you do not use the <I>atype</I>, <I>dtype</I>, or
<I>itype</I> keywords, the list of topological neighbors is updated for
atoms affected by the new bond. This in turn affects which neighbors
are considered for pairwise interactions, using the weighting rules
set by the <A HREF = "special_bonds.html">special_bonds</A> command. Consider a new
bond created between atoms I,J. If J has a bonded neighbor K, then K
becomes a 2nd neighbor of I. Even if the <I>atype</I> keyword is not used
to create angle I-J-K, the pairwise interaction between I and K will
be potentially turned off or weighted by the 1-3 weighting specified
by the <A HREF = "special_bonds.html">special_bonds</A> command. This is the case
even if the "angle yes" option was used with that command. The same
is true for 3rd neighbors (1-4 interactions), the <I>dtype</I> keyword, and
the "dihedral yes" option used with the
<A HREF = "special_bonds.html">special_bonds</A> command.
</P>
<P>Note that even if your simulation starts with no bonds, you must
define a <A HREF = "bond_style.html">bond_style</A> and use the
<A HREF = "bond_coeff.html">bond_coeff</A> command to specify coefficients for the
<I>bondtype</I>. Similarly, if new atom types are specified by the
<I>iparam</I> or <I>jparam</I> keywords, they must be within the range of atom
types allowed by the simulation and pairwise coefficients must be
specified for the new types.
</P>
<P>Computationally, each timestep this fix operates, it loops over
neighbor lists and computes distances between pairs of atoms in the
list. It also communicates between neighboring processors to
coordinate which bonds are created. Moreover, if any bonds are
created, neighbor lists must be immediately updated on the same
timestep. This is to insure that any pairwise interactions that
should be turned "off" due to a bond creation, because they are now
excluded by the presence of the bond and the settings of the
<A HREF = "special_bonds.html">special_bonds</A> command, will be immediately
recognized. All of these operations increase the cost of a timestep.
Thus you should be cautious about invoking this fix too frequently.
</P>
<P>You can dump out snapshots of the current bond topology via the <A HREF = "dump.html">dump
local</A> command.
</P>
<P>IMPORTANT NOTE: Creating a bond typically alters the energy of a
system. You should be careful not to choose bond creation criteria
that induce a dramatic change in energy. For example, if you define a
very stiff harmonic bond and create it when 2 atoms are separated by a
distance far from the equilibribum bond length, then the 2 atoms will
oscillate dramatically when the bond is formed. More generally, you
may need to thermostat your system to compensate for energy changes
resulting from created bonds (and angles, dihedrals, impropers).
</P>
<HR>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>. None of the <A HREF = "fix_modify.html">fix_modify</A> options
are relevant to this fix.
</P>
<P>This fix computes two statistics which it stores in a global vector of
length 2, which can be accessed by various <A HREF = "Section_howto.html#howto_15">output
commands</A>. The vector values calculated
by this fix are "intensive".
</P>
<P>These are the 2 quantities:
</P>
<UL><LI>(1) # of bonds created on the most recent creation timestep
<LI>(2) cummulative # of bonds created
</UL>
<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_bond_break.html">fix bond/break</A>, <A HREF = "fix_bond_swap.html">fix
bond/swap</A>, <A HREF = "dump.html">dump local</A>,
<A HREF = "special_bonds.html">special_bonds</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are iparam = (0,itype), jparam = (0,jtype), and
prob = 1.0.
</P>
</HTML>
diff --git a/doc/fix_bond_create.txt b/doc/fix_bond_create.txt
index 284028eea..637d5ac17 100644
--- a/doc/fix_bond_create.txt
+++ b/doc/fix_bond_create.txt
@@ -1,234 +1,239 @@
"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
fix bond/create command :h3
[Syntax:]
fix ID group-ID bond/create Nevery itype jtype Rmin bondtype keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
bond/create = style name of this fix command :l
Nevery = attempt bond creation every this many steps :l
itype,jtype = atoms of itype can bond to atoms of jtype :l
Rmin = 2 atoms separated by less than Rmin can bond (distance units) :l
bondtype = type of created bonds :l
zero or more keyword/value pairs may be appended to args :l
keyword = {iparam} or {jparam} or {prob} or {atype} or {dtype} or {itype} :l
{iparam} values = maxbond, newtype
maxbond = max # of bonds of bondtype the itype atom can have
newtype = change the itype atom to this type when maxbonds exist
{jparam} values = maxbond, newtype
maxbond = max # of bonds of bondtype the jtype atom can have
newtype = change the jtype atom to this type when maxbonds exist
{prob} values = fraction seed
fraction = create a bond with this probability if otherwise eligible
seed = random number seed (positive integer)
{atype} value = angletype
angletype = type of created angles
{dtype} value = dihedraltype
dihedraltype = type of created dihedrals
{itype} value = impropertype
impropertype = type of created impropers :pre
:ule
[Examples:]
fix 5 all bond/create 10 1 2 0.8 1
fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3
fix 5 all bond/create 1 3 3 0.8 1 prob 0.5 85784 iparam 2 3 atype 1 dtype 2 :pre
[Description:]
Create bonds between pairs of atoms as a simulation runs according to
specified criteria. This can be used to model cross-linking of
polymers, the formation of a percolation network, etc. In this
context, a bond means an interaction between a pair of atoms computed
by the "bond_style"_bond_style.html command. Once the bond is created
it will be permanently in place. Optionally, the creation of a bond
can also create angle, dihedral, and improper interactions that bond
is part of. See the discussion of the {atype}, {dtype}, and {itype}
keywords below.
This is different than a "pairwise"_pair_style.html bond-order
potential such as Tersoff or AIREBO which infers bonds and many-body
interactions based on the current geometry of a small cluster of atoms
and effectively creates and destroys bonds and higher-order many-body
interactions from timestep to timestep as atoms move.
A check for possible new bonds is performed every {Nevery} timesteps.
If two atoms I,J are within a distance {Rmin} of each other, if I is
of atom type {itype}, if J is of atom type {jtype}, if both I and J
are in the specified fix group, if a bond does not already exist
between I and J, and if both I and J meet their respective {maxbond}
requirement (explained below), then I,J is labeled as a "possible"
bond pair.
If several atoms are close to an atom, it may have multiple possible
bond partners. Every atom checks its list of possible bond partners
and labels the closest such partner as its "sole" bond partner. After
this is done, if atom I has atom J as its sole partner, and atom J has
atom I as its sole partner, then the I,J bond is "eligible" to be
formed.
Note that these rules mean an atom will only be part of at most one
created bond on a given timestep. It also means that if atom I
chooses atom J as its sole partner, but atom J chooses atom K is its
sole partner (due to Rjk < Rij), then this means atom I will not form
a bond on this timestep, even if it has other possible bond partners.
It is permissible to have {itype} = {jtype}. {Rmin} must be <= the
pairwise cutoff distance between {itype} and {jtype} atoms, as defined
by the "pair_style"_pair_style.html command.
The {iparam} and {jparam} keywords can be used to limit the bonding
functionality of the participating atoms. Each atom keeps track of
how many bonds of {bondtype} it already has. If atom I of
itype already has {maxbond} bonds (as set by the {iparam}
keyword), then it will not form any more. Likewise for atom J. If
{maxbond} is set to 0, then there is no limit on the number of bonds
that can be formed with that atom.
The {newtype} value for {iparam} and {jparam} can be used to change
the atom type of atom I or J when it reaches {maxbond} number of bonds
of type {bondtype}. This means it can now interact in a pairwise
fashion with other atoms in a different way by specifying different
"pair_coeff"_pair_coeff.html coefficients. If you do not wish the
atom type to change, simply specify {newtype} as {itype} or {jtype}.
The {prob} keyword can also effect whether an eligible bond is
actually created. The {fraction} setting must be a value between 0.0
and 1.0. A uniform random number between 0.0 and 1.0 is generated and
the eligible bond is only created if the random number < fraction.
Any bond that is created is assigned a bond type of {bondtype}
When a bond is created, data structures within LAMMPS that store bond
topology are updated to reflect the creation. If the bond is part of
new 3-body (angle) or 4-body (dihedral, improper) interactions, you
can choose to create new angles, dihedrals, impropers as well, using
the {atype}, {dtype}, and {itype} keywords. All of these changes
typically affect pairwise interactions between atoms that are now part
of new bonds, angles, etc.
+IMPORTANT NOTE: One data structure that is not updated when a bond
+breaks are the molecule IDs stored by each atom. Even though two
+molecules become one moleclue due to the created bond, all atoms in
+the new moleclue retain their original molecule IDs.
+
If the {atype} keyword is used and if an angle potential is defined
via the "angle_style"_angle.html command, then any new 3-body
interactions inferred by the creation of a bond will create new angles
of type {angletype}, with parameters assigned by the corresponding
"angle_coeff"_angle_coeff.html command. Likewise, the {dtype} and
{itype} keywords will create new dihedrals and impropers of type
{dihedraltype} and {impropertype}.
IMPORTANT NOTE: To create a new bond, the internal LAMMPS data
structures that store this information must have space for it. When
LAMMPS is initialized from a data file, the list of bonds is scanned
and the maximum number of bonds per atom is tallied. If some atom
will acquire more bonds than this limit as this fix operates, then the
"extra bond per atom" parameter must be set to allow for it. Ditto
for "extra angle per atom", "extra dihedral per atom", and "extra
improper per atom" if angles, dihedrals, or impropers are being added
when bonds are created. See the "read_data"_read_data.html or
"create_box"_create_box.html command for more details. Note that a
data file with no atoms can be used if you wish to add unbonded atoms
via the "create atoms"_create_atoms.html command, e.g. for a
percolation simulation.
IMPORTANT NOTE: LAMMPS also maintains a data structure that stores a
list of 1st, 2nd, and 3rd neighbors of each atom (within the bond
topology of the system) for use in weighting pairwise interactions for
bonded atoms. Adding a bond adds a single entry to this list. The
"extra special per atom" parameter must typically be set to allow for
it. There are 3 ways to do this. See the "read_data"_read_data.html
or "create_box"_create_box.html or "special_bonds extra" commands for
details.
IMPORTANT NOTE: Even if you do not use the {atype}, {dtype}, or
{itype} keywords, the list of topological neighbors is updated for
atoms affected by the new bond. This in turn affects which neighbors
are considered for pairwise interactions, using the weighting rules
set by the "special_bonds"_special_bonds.html command. Consider a new
bond created between atoms I,J. If J has a bonded neighbor K, then K
becomes a 2nd neighbor of I. Even if the {atype} keyword is not used
to create angle I-J-K, the pairwise interaction between I and K will
be potentially turned off or weighted by the 1-3 weighting specified
by the "special_bonds"_special_bonds.html command. This is the case
even if the "angle yes" option was used with that command. The same
is true for 3rd neighbors (1-4 interactions), the {dtype} keyword, and
the "dihedral yes" option used with the
"special_bonds"_special_bonds.html command.
Note that even if your simulation starts with no bonds, you must
define a "bond_style"_bond_style.html and use the
"bond_coeff"_bond_coeff.html command to specify coefficients for the
{bondtype}. Similarly, if new atom types are specified by the
{iparam} or {jparam} keywords, they must be within the range of atom
types allowed by the simulation and pairwise coefficients must be
specified for the new types.
Computationally, each timestep this fix operates, it loops over
neighbor lists and computes distances between pairs of atoms in the
list. It also communicates between neighboring processors to
coordinate which bonds are created. Moreover, if any bonds are
created, neighbor lists must be immediately updated on the same
timestep. This is to insure that any pairwise interactions that
should be turned "off" due to a bond creation, because they are now
excluded by the presence of the bond and the settings of the
"special_bonds"_special_bonds.html command, will be immediately
recognized. All of these operations increase the cost of a timestep.
Thus you should be cautious about invoking this fix too frequently.
You can dump out snapshots of the current bond topology via the "dump
local"_dump.html command.
IMPORTANT NOTE: Creating a bond typically alters the energy of a
system. You should be careful not to choose bond creation criteria
that induce a dramatic change in energy. For example, if you define a
very stiff harmonic bond and create it when 2 atoms are separated by a
distance far from the equilibribum bond length, then the 2 atoms will
oscillate dramatically when the bond is formed. More generally, you
may need to thermostat your system to compensate for energy changes
resulting from created bonds (and angles, dihedrals, impropers).
:line
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options
are relevant to this fix.
This fix computes two statistics which it stores in a global vector of
length 2, which can be accessed by various "output
commands"_Section_howto.html#howto_15. The vector values calculated
by this fix are "intensive".
These are the 2 quantities:
(1) # of bonds created on the most recent creation timestep
(2) cummulative # of bonds created :ul
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"fix bond/break"_fix_bond_break.html, "fix
bond/swap"_fix_bond_swap.html, "dump local"_dump.html,
"special_bonds"_special_bonds.html
[Default:]
The option defaults are iparam = (0,itype), jparam = (0,jtype), and
prob = 1.0.
diff --git a/doc/fix_deposit.html b/doc/fix_deposit.html
index 4ff710320..bf565b8c1 100644
--- a/doc/fix_deposit.html
+++ b/doc/fix_deposit.html
@@ -1,256 +1,261 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix deposit command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID deposit N type M seed keyword values ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>deposit = style name of this fix command
<LI>N = # of atoms or molecules to insert
<LI>type = atom type to assign to inserted atoms (offset for moleclue insertion)
<LI>M = insert a single atom or molecule every M steps
<LI>seed = random # seed (positive integer)
<LI>one or more keyword/value pairs may be appended to args
<LI>keyword = <I>region</I> or <I>id</I> or <I>global</I> or <I>local</I> or <I>near</I> or <I>attempt</I> or <I>rate</I> or <I>vx</I> or <I>vy</I> or <I>vz</I> or <I>mol</I> or <I>rigid</I> or <I>shake</I> or <I>units</I>
<PRE> <I>region</I> value = region-ID
region-ID = ID of region to use as insertion volume
<I>id</I> value = <I>max</I> or <I>next</I>
max = atom ID for new atom(s) is max ID of all current atoms plus one
next = atom ID for new atom(s) increments by one for every deposition
<I>global</I> values = lo hi
lo,hi = put new atom/molecule a distance lo-hi above all other atoms (distance units)
<I>local</I> values = lo hi delta
lo,hi = put new atom/molecule a distance lo-hi above any nearby atom beneath it (distance units)
delta = lateral distance within which a neighbor is considered "nearby" (distance units)
<I>near</I> value = R
R = only insert atom/molecule if further than R from existing particles (distance units)
<I>attempt</I> value = Q
Q = attempt a single insertion up to Q times
<I>rate</I> value = V
V = z velocity (y in 2d) at which insertion volume moves (velocity units)
<I>vx</I> values = vxlo vxhi
vxlo,vxhi = range of x velocities for inserted atom/molecule (velocity units)
<I>vy</I> values = vylo vyhi
vylo,vyhi = range of y velocities for inserted atom/molecule (velocity units)
<I>vz</I> values = vzlo vzhi
vzlo,vzhi = range of z velocities for inserted atom/molecule (velocity units)
<I>target</I> values = tx ty tz
tx,ty,tz = location of target point (distance units)
<I>mol</I> value = template-ID
template-ID = ID of molecule template specified in a separate <A HREF = "molecule.html">molecule</A> command
<I>rigid</I> value = fix-ID
fix-ID = ID of <A HREF = "fix_rigid.html">fix rigid/small</A> command
<I>shake</I> value = fix-ID
fix-ID = ID of <A HREF = "fix_shake.html">fix shake</A> command
<I>units</I> value = <I>lattice</I> or <I>box</I>
lattice = the geometry is defined in lattice units
box = the geometry is defined in simulation box units
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 3 all deposit 1000 2 100 29494 region myblock local 1.0 1.0 1.0 units box
fix 2 newatoms deposit 10000 1 500 12345 region disk near 2.0 vz -1.0 -0.8
fix 4 sputter deposit 1000 2 500 12235 region sphere vz -1.0 -1.0 target 5.0 5.0 0.0 units lattice
</PRE>
<P><B>Description:</B>
</P>
<P>Insert a single atom or molecule into the simulation domain every M
timesteps until N atoms or molecules have been inserted. This is
useful for simulating deposition onto a surface. For the remainder of
this doc page, a single inserted atom or molecule is referred to as a
"particle".
</P>
<P>If inserted particles are individual atoms, they are assigned the
specified atom type. If they are molecules, the type of each atom in
the inserted molecule is specified in the file read by the
<A HREF = "molecule.html">molecule</A> command, and those values are added to the
specified atom type. E.g. if the file specifies atom types 1,2,3, and
those are the atom types you want for inserted molecules, then specify
<I>type</I> = 0. If you specify <I>type</I> = 2, the in the inserted molecule
will have atom types 3,4,5.
</P>
<P>All atoms in the inserted particle are assigned to two groups: the
default group "all" and the group specified in the fix deposit command
(which can also be "all").
</P>
<P>If you are computing temperature values which include inserted
particles, you will want to use the
<A HREF = "compute_modify.html">compute_modify</A> dynamic option, which insures the
current number of atoms is used as a normalizing factor each time the
temperature is computed.
</P>
<P>Care must be taken that inserted particles are not too near existing
atoms, using the options described below. When inserting particles
above a surface in a non-periodic box (see the
<A HREF = "boundary.html">boundary</A> command), the possibility of a particle
escaping the surface and flying upward should be considered, since the
particle may be lost or the box size may grow infinitely large. A
<A HREF = "fix_wall_reflect.html">fix wall/reflect</A> command can be used to
prevent this behavior. Note that if a shrink-wrap boundary is used,
it is OK to insert the new particle outside the box, however the box
will immediately be expanded to include the new particle. When
simulating a sputtering experiment it is probably more realistic to
ignore those atoms using the <A HREF = "thermo_modify.html">thermo_modify</A>
command with the <I>lost ignore</I> option and a fixed
<A HREF = "boundary.html">boundary</A>.
</P>
<P>The fix deposit command must use the <I>region</I> keyword to define an
insertion volume. The specified region must have been previously
defined with a <A HREF = "region.html">region</A> command. It must be defined with
side = <I>in</I>.
</P>
<P>Individual atoms are inserted, unless the <I>mol</I> keyword is used. It
specifies a <I>template-ID</I> previously defined using the
<A HREF = "molecule.html">molecule</A> command, which reads a file that defines the
molecule. The coordinates, atom types, charges, etc, as well as any
bond/angle/etc and special neighbor information for the molecule can
be specified in the molecule file. See the <A HREF = "molecule.html">molecule</A>
command for details. The only settings required to be in this file
are the coordinates and types of atoms in the molecule.
</P>
<P>If you wish to insert molecules via the <I>mol</I> keyword, that will be
treated as rigid bodies, use the <I>rigid</I> keyword, specifying as its
value the ID of a separate <A HREF = "fix_rigid_small.html">fix rigid/small</A>
command which also appears in your input script.
</P>
<P>If you wish to insert molecules via the <I>mol</I> keyword, that will have
their bonds or angles constrained via SHAKE, use the <I>shake</I> keyword,
specifying as its value the ID of a separate <A HREF = "fix_shake.html">fix
shake</A> command which also appears in your input script.
</P>
<P>Each timestep a particle is inserted, the coordinates for its atoms
are chosen as follows. For insertion of individual atoms, the
"position" referred to in the following description is the coordinate
of the atom. For insertion of molecule, the "position<A HREF = "molecule.html"> is the
geometric center of the molecule; see the (molecule</A> doc
page for details. A random rotation of the molecule around its center
point is performed, which determines the coordinates all the
individual atoms.
</P>
<P>A random position within the region insertion volume is generated. If
neither the <I>global</I> or <I>local</I> keyword is used, the random position
is the trial position. If the <I>global</I> keyword is used, the random
x,y values are used, but the z position of the new particle is set
above the highest current atom in the simulation by a distance
randomly chosen between lo/hi. (For a 2d simulation, this is done for
the y position.) If the <I>local</I> keyword is used, the z position is
set a distance between lo/hi above the highest current atom in the
simulation that is "nearby" the chosen x,y position. In this context,
"nearby" means the lateral distance (in x,y) between the new and old
particles is less than the <I>delta</I> setting.
</P>
<P>Once a trial x,y,z position has been selected, the insertion is only
performed if no current atom in the simulation is within a distance R
of any atom in the new particle, including the effect of periodic
boundary conditions if applicable. Note that the default value for R
is 0.0, which will allow atoms to strongly overlap if you are
inserting where other atoms are present. This distance test is
performed independently for each atom in an inserted molecule, based
on the randomly rotated configuration of the molecule. If this test
fails, a new random position within the insertion volume is chosen and
another trial is made. Up to Q attempts are made. If the particle is
not successfully inserted, LAMMPS prints a warning message.
</P>
<P>The <I>rate</I> option moves the insertion volume in the z direction (3d)
or y direction (2d). This enables particles to be inserted from a
successively higher height over time. Note that this parameter is
ignored if the <I>global</I> or <I>local</I> keywords are used, since those
options choose a z-coordinate for insertion independently.
</P>
<P>The vx, vy, and vz components of velocity for the inserted particle
are set using the values specified for the <I>vx</I>, <I>vy</I>, and <I>vz</I>
keywords. Note that normally, new particles should be a assigned a
negative vertical velocity so that they move towards the surface. For
molecules, the same velocity is given to every particle (no rotation
or bond vibration).
</P>
<P>If the <I>target</I> option is used, the velocity vector of the inserted
particle is changed so that it points from the insertion position
towards the specified target point. The magnitude of the velocity is
unchanged. This can be useful, for example, for simulating a
sputtering process. E.g. the target point can be far away, so that
all incident particles strike the surface as if they are in an
incident beam of particles at a prescribed angle.
</P>
<P>The <I>id</I> keyword determines how atom IDs and molecule IDs are assigned
to newly deposited particles. Molecule IDs are only assigned if
molecules are being inserted. For the <I>max</I> setting, the atom and
molecule IDs of all current atoms are checked. Atoms in the new
particle are assigned IDs starting with the current maximum plus one.
If a molecule is inserted it is assigned an ID = current maximum plus
one. This means that if particles leave the system, the new IDs may
replace the lost ones. For the <I>next</I> setting, the maximum ID of any
atom and molecule is stored at the time the fix is defined. Each time
a new particle is added, this value is incremented to assign IDs to
the new atom(s) or molecule. Thus atom and molecule IDs for deposited
particles will be consecutive even if particles leave the system over
time.
</P>
<P>The <I>units</I> keyword determines the meaning of the distance units used
for the other deposition parameters. A <I>box</I> value selects standard
distance units as defined by the <A HREF = "units.html">units</A> command,
e.g. Angstroms for units = real or metal. A <I>lattice</I> value means the
distance units are in lattice spacings. The <A HREF = "lattice.html">lattice</A>
command must have been previously used to define the lattice spacing.
Note that the units choice affects all the keyword values that have
units of distance or velocity.
</P>
+<P>IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the atom count is changing due to adding atoms, you typically
+should use the <A HREF = "compute_modify.html">compute_modify dynamic yes</A>
+command for the temperature compute you are using.
+</P>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>This fix writes the state of the deposition to <A HREF = "restart.html">binary restart
files</A>. This includes information about how many
particles have been depositied, the random number generator seed, the
next timestep for deposition, etc. See the
<A HREF = "read_restart.html">read_restart</A> command for info on how to re-specify
a fix in an input script that reads a restart file, so that the
operation of the fix continues in an uninterrupted fashion.
</P>
<P>None of the <A HREF = "fix_modify.html">fix_modify</A> options are relevant to this
fix. No global or per-atom quantities are stored by this fix for
access by various <A HREF = "Section_howto.html#howto_15">output commands</A>. No
parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the MISC package. It is only enabled if LAMMPS
was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P>The specified insertion region cannot be a "dynamic" region, as
defined by the <A HREF = "region.html">region</A> command.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_pour.html">fix_pour</A>, <A HREF = "region.html">region</A>
</P>
<P><B>Default:</B>
</P>
<P>Insertions are performed for individual atoms, i.e. no <I>mol</I> setting
is defined. Additional option defaults are id = max, delta = 0.0,
near = 0.0, attempt = 10, rate = 0.0, vx = 0.0 0.0, vy = 0.0 0.0, vz =
0.0 0.0, and units = lattice.
</P>
</HTML>
diff --git a/doc/fix_deposit.txt b/doc/fix_deposit.txt
index 79b3a75c9..ec34106fc 100644
--- a/doc/fix_deposit.txt
+++ b/doc/fix_deposit.txt
@@ -1,242 +1,247 @@
"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
fix deposit command :h3
[Syntax:]
fix ID group-ID deposit N type M seed keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
deposit = style name of this fix command :l
N = # of atoms or molecules to insert :l
type = atom type to assign to inserted atoms (offset for moleclue insertion) :l
M = insert a single atom or molecule every M steps :l
seed = random # seed (positive integer) :l
one or more keyword/value pairs may be appended to args :l
keyword = {region} or {id} or {global} or {local} or {near} or {attempt} or {rate} or {vx} or {vy} or {vz} or {mol} or {rigid} or {shake} or {units} :l
{region} value = region-ID
region-ID = ID of region to use as insertion volume
{id} value = {max} or {next}
max = atom ID for new atom(s) is max ID of all current atoms plus one
next = atom ID for new atom(s) increments by one for every deposition
{global} values = lo hi
lo,hi = put new atom/molecule a distance lo-hi above all other atoms (distance units)
{local} values = lo hi delta
lo,hi = put new atom/molecule a distance lo-hi above any nearby atom beneath it (distance units)
delta = lateral distance within which a neighbor is considered "nearby" (distance units)
{near} value = R
R = only insert atom/molecule if further than R from existing particles (distance units)
{attempt} value = Q
Q = attempt a single insertion up to Q times
{rate} value = V
V = z velocity (y in 2d) at which insertion volume moves (velocity units)
{vx} values = vxlo vxhi
vxlo,vxhi = range of x velocities for inserted atom/molecule (velocity units)
{vy} values = vylo vyhi
vylo,vyhi = range of y velocities for inserted atom/molecule (velocity units)
{vz} values = vzlo vzhi
vzlo,vzhi = range of z velocities for inserted atom/molecule (velocity units)
{target} values = tx ty tz
tx,ty,tz = location of target point (distance units)
{mol} value = template-ID
template-ID = ID of molecule template specified in a separate "molecule"_molecule.html command
{rigid} value = fix-ID
fix-ID = ID of "fix rigid/small"_fix_rigid.html command
{shake} value = fix-ID
fix-ID = ID of "fix shake"_fix_shake.html command
{units} value = {lattice} or {box}
lattice = the geometry is defined in lattice units
box = the geometry is defined in simulation box units :pre
:ule
[Examples:]
fix 3 all deposit 1000 2 100 29494 region myblock local 1.0 1.0 1.0 units box
fix 2 newatoms deposit 10000 1 500 12345 region disk near 2.0 vz -1.0 -0.8
fix 4 sputter deposit 1000 2 500 12235 region sphere vz -1.0 -1.0 target 5.0 5.0 0.0 units lattice :pre
[Description:]
Insert a single atom or molecule into the simulation domain every M
timesteps until N atoms or molecules have been inserted. This is
useful for simulating deposition onto a surface. For the remainder of
this doc page, a single inserted atom or molecule is referred to as a
"particle".
If inserted particles are individual atoms, they are assigned the
specified atom type. If they are molecules, the type of each atom in
the inserted molecule is specified in the file read by the
"molecule"_molecule.html command, and those values are added to the
specified atom type. E.g. if the file specifies atom types 1,2,3, and
those are the atom types you want for inserted molecules, then specify
{type} = 0. If you specify {type} = 2, the in the inserted molecule
will have atom types 3,4,5.
All atoms in the inserted particle are assigned to two groups: the
default group "all" and the group specified in the fix deposit command
(which can also be "all").
If you are computing temperature values which include inserted
particles, you will want to use the
"compute_modify"_compute_modify.html dynamic option, which insures the
current number of atoms is used as a normalizing factor each time the
temperature is computed.
Care must be taken that inserted particles are not too near existing
atoms, using the options described below. When inserting particles
above a surface in a non-periodic box (see the
"boundary"_boundary.html command), the possibility of a particle
escaping the surface and flying upward should be considered, since the
particle may be lost or the box size may grow infinitely large. A
"fix wall/reflect"_fix_wall_reflect.html command can be used to
prevent this behavior. Note that if a shrink-wrap boundary is used,
it is OK to insert the new particle outside the box, however the box
will immediately be expanded to include the new particle. When
simulating a sputtering experiment it is probably more realistic to
ignore those atoms using the "thermo_modify"_thermo_modify.html
command with the {lost ignore} option and a fixed
"boundary"_boundary.html.
The fix deposit command must use the {region} keyword to define an
insertion volume. The specified region must have been previously
defined with a "region"_region.html command. It must be defined with
side = {in}.
Individual atoms are inserted, unless the {mol} keyword is used. It
specifies a {template-ID} previously defined using the
"molecule"_molecule.html command, which reads a file that defines the
molecule. The coordinates, atom types, charges, etc, as well as any
bond/angle/etc and special neighbor information for the molecule can
be specified in the molecule file. See the "molecule"_molecule.html
command for details. The only settings required to be in this file
are the coordinates and types of atoms in the molecule.
If you wish to insert molecules via the {mol} keyword, that will be
treated as rigid bodies, use the {rigid} keyword, specifying as its
value the ID of a separate "fix rigid/small"_fix_rigid_small.html
command which also appears in your input script.
If you wish to insert molecules via the {mol} keyword, that will have
their bonds or angles constrained via SHAKE, use the {shake} keyword,
specifying as its value the ID of a separate "fix
shake"_fix_shake.html command which also appears in your input script.
Each timestep a particle is inserted, the coordinates for its atoms
are chosen as follows. For insertion of individual atoms, the
"position" referred to in the following description is the coordinate
of the atom. For insertion of molecule, the "position" is the
geometric center of the molecule; see the (molecule"_molecule.html doc
page for details. A random rotation of the molecule around its center
point is performed, which determines the coordinates all the
individual atoms.
A random position within the region insertion volume is generated. If
neither the {global} or {local} keyword is used, the random position
is the trial position. If the {global} keyword is used, the random
x,y values are used, but the z position of the new particle is set
above the highest current atom in the simulation by a distance
randomly chosen between lo/hi. (For a 2d simulation, this is done for
the y position.) If the {local} keyword is used, the z position is
set a distance between lo/hi above the highest current atom in the
simulation that is "nearby" the chosen x,y position. In this context,
"nearby" means the lateral distance (in x,y) between the new and old
particles is less than the {delta} setting.
Once a trial x,y,z position has been selected, the insertion is only
performed if no current atom in the simulation is within a distance R
of any atom in the new particle, including the effect of periodic
boundary conditions if applicable. Note that the default value for R
is 0.0, which will allow atoms to strongly overlap if you are
inserting where other atoms are present. This distance test is
performed independently for each atom in an inserted molecule, based
on the randomly rotated configuration of the molecule. If this test
fails, a new random position within the insertion volume is chosen and
another trial is made. Up to Q attempts are made. If the particle is
not successfully inserted, LAMMPS prints a warning message.
The {rate} option moves the insertion volume in the z direction (3d)
or y direction (2d). This enables particles to be inserted from a
successively higher height over time. Note that this parameter is
ignored if the {global} or {local} keywords are used, since those
options choose a z-coordinate for insertion independently.
The vx, vy, and vz components of velocity for the inserted particle
are set using the values specified for the {vx}, {vy}, and {vz}
keywords. Note that normally, new particles should be a assigned a
negative vertical velocity so that they move towards the surface. For
molecules, the same velocity is given to every particle (no rotation
or bond vibration).
If the {target} option is used, the velocity vector of the inserted
particle is changed so that it points from the insertion position
towards the specified target point. The magnitude of the velocity is
unchanged. This can be useful, for example, for simulating a
sputtering process. E.g. the target point can be far away, so that
all incident particles strike the surface as if they are in an
incident beam of particles at a prescribed angle.
The {id} keyword determines how atom IDs and molecule IDs are assigned
to newly deposited particles. Molecule IDs are only assigned if
molecules are being inserted. For the {max} setting, the atom and
molecule IDs of all current atoms are checked. Atoms in the new
particle are assigned IDs starting with the current maximum plus one.
If a molecule is inserted it is assigned an ID = current maximum plus
one. This means that if particles leave the system, the new IDs may
replace the lost ones. For the {next} setting, the maximum ID of any
atom and molecule is stored at the time the fix is defined. Each time
a new particle is added, this value is incremented to assign IDs to
the new atom(s) or molecule. Thus atom and molecule IDs for deposited
particles will be consecutive even if particles leave the system over
time.
The {units} keyword determines the meaning of the distance units used
for the other deposition parameters. A {box} value selects standard
distance units as defined by the "units"_units.html command,
e.g. Angstroms for units = real or metal. A {lattice} value means the
distance units are in lattice spacings. The "lattice"_lattice.html
command must have been previously used to define the lattice spacing.
Note that the units choice affects all the keyword values that have
units of distance or velocity.
+IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the atom count is changing due to adding atoms, you typically
+should use the "compute_modify dynamic yes"_compute_modify.html
+command for the temperature compute you are using.
+
[Restart, fix_modify, output, run start/stop, minimize info:]
This fix writes the state of the deposition to "binary restart
files"_restart.html. This includes information about how many
particles have been depositied, the random number generator seed, the
next timestep for deposition, etc. See the
"read_restart"_read_restart.html command for info on how to re-specify
a fix in an input script that reads a restart file, so that the
operation of the fix continues in an uninterrupted fashion.
None of the "fix_modify"_fix_modify.html options are relevant to this
fix. No global or per-atom quantities are stored by this fix for
access by various "output commands"_Section_howto.html#howto_15. No
parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the MISC package. It is only enabled if LAMMPS
was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
The specified insertion region cannot be a "dynamic" region, as
defined by the "region"_region.html command.
[Related commands:]
"fix_pour"_fix_pour.html, "region"_region.html
[Default:]
Insertions are performed for individual atoms, i.e. no {mol} setting
is defined. Additional option defaults are id = max, delta = 0.0,
near = 0.0, attempt = 10, rate = 0.0, vx = 0.0 0.0, vy = 0.0 0.0, vz =
0.0 0.0, and units = lattice.
diff --git a/doc/fix_evaporate.html b/doc/fix_evaporate.html
index d2e7de07a..5918faffc 100644
--- a/doc/fix_evaporate.html
+++ b/doc/fix_evaporate.html
@@ -1,104 +1,109 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix evaporate command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID evaporate N M region-ID seed
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>evaporate = style name of this fix command
<LI>N = delete atoms every this many timesteps
<LI>M = number of atoms to delete each time
<LI>region-ID = ID of region within which to perform deletions
<LI>seed = random number seed to use for choosing atoms to delete
<LI>zero or more keyword/value pairs may be appended
<PRE>keyword = <I>molecule</I>
<I>molecule</I> value = <I>no</I> or <I>yes</I>
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 1 solvent evaporate 1000 10 surface 49892
fix 1 solvent evaporate 1000 10 surface 38277 molecule yes
</PRE>
<P><B>Description:</B>
</P>
<P>Remove M atoms from the simulation every N steps. This can be used,
for example, to model evaporation of solvent particles or moleclues
(i.e. drying) of a system. Every N steps, the number of atoms in the
fix group and within the specifed region are counted. M of these are
chosen at random and deleted. If there are less than M eligible
particles, then all of them are deleted.
</P>
<P>If the setting for the <I>molecule</I> keyword is <I>no</I>, then only single
atoms are deleted. In this case, you should insure you do not delete
only a portion of a molecule (only some of its atoms), or LAMMPS will
soon generate an error when it tries to find those atoms. LAMMPS will
warn you if any of the atoms eligible for deletion have a non-zero
molecule ID, but does not check for this at the time of deletion.
</P>
<P>If the setting for the <I>molecule</I> keyword is <I>yes</I>, then when an atom
is chosen for deletion, the entire molecule it is part of is deleted.
The count of deleted atoms is incremented by the number of atoms in
the molecule, which may make it exceed <I>M</I>. If the molecule ID of the
chosen atom is 0, then it is assumed to not be part of a molecule, and
just the single atom is deleted.
</P>
<P>As an example, if you wish to delete 10 water molecules every <I>N</I>
steps, you should set <I>M</I> to 30. If only the water's oxygen atoms
were in the fix group, then two hydrogen atoms would be deleted when
an oxygen atom is selected for deletion, whether the hydrogens are
inside the evaporation region or not.
</P>
<P>Note that neighbor lists are re-built on timesteps that atoms are
removed. Thus you should not remove atoms too frequently or you will
incur overhead due to the cost of building neighbor lists.
</P>
+<P>IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the atom count is changing due to evaporation, you typically
+should use the <A HREF = "compute_modify.html">compute_modify dynamic yes</A>
+command for the temperature compute you are using.
+</P>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>. None of the <A HREF = "fix_modify.html">fix_modify</A> options
are relevant to this fix.
</P>
<P>This fix computes a global scalar, which can be accessed by various
<A HREF = "Section_howto.html#howto_15">output commands</A>. The scalar is the
cummulative number of deleted atoms. The scalar value calculated by
this fix is "intensive".
</P>
<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the MISC package. It is only enabled if LAMMPS
was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_deposit.html">fix deposit</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are molecule = no.
</P>
</HTML>
diff --git a/doc/fix_evaporate.txt b/doc/fix_evaporate.txt
index cb503c605..d50323b0a 100644
--- a/doc/fix_evaporate.txt
+++ b/doc/fix_evaporate.txt
@@ -1,91 +1,96 @@
"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
fix evaporate command :h3
[Syntax:]
fix ID group-ID evaporate N M region-ID seed :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
evaporate = style name of this fix command :l
N = delete atoms every this many timesteps :l
M = number of atoms to delete each time :l
region-ID = ID of region within which to perform deletions :l
seed = random number seed to use for choosing atoms to delete :l
zero or more keyword/value pairs may be appended :l
keyword = {molecule}
{molecule} value = {no} or {yes} :pre
:ule
[Examples:]
fix 1 solvent evaporate 1000 10 surface 49892
fix 1 solvent evaporate 1000 10 surface 38277 molecule yes :pre
[Description:]
Remove M atoms from the simulation every N steps. This can be used,
for example, to model evaporation of solvent particles or moleclues
(i.e. drying) of a system. Every N steps, the number of atoms in the
fix group and within the specifed region are counted. M of these are
chosen at random and deleted. If there are less than M eligible
particles, then all of them are deleted.
If the setting for the {molecule} keyword is {no}, then only single
atoms are deleted. In this case, you should insure you do not delete
only a portion of a molecule (only some of its atoms), or LAMMPS will
soon generate an error when it tries to find those atoms. LAMMPS will
warn you if any of the atoms eligible for deletion have a non-zero
molecule ID, but does not check for this at the time of deletion.
If the setting for the {molecule} keyword is {yes}, then when an atom
is chosen for deletion, the entire molecule it is part of is deleted.
The count of deleted atoms is incremented by the number of atoms in
the molecule, which may make it exceed {M}. If the molecule ID of the
chosen atom is 0, then it is assumed to not be part of a molecule, and
just the single atom is deleted.
As an example, if you wish to delete 10 water molecules every {N}
steps, you should set {M} to 30. If only the water's oxygen atoms
were in the fix group, then two hydrogen atoms would be deleted when
an oxygen atom is selected for deletion, whether the hydrogens are
inside the evaporation region or not.
Note that neighbor lists are re-built on timesteps that atoms are
removed. Thus you should not remove atoms too frequently or you will
incur overhead due to the cost of building neighbor lists.
+IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the atom count is changing due to evaporation, you typically
+should use the "compute_modify dynamic yes"_compute_modify.html
+command for the temperature compute you are using.
+
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options
are relevant to this fix.
This fix computes a global scalar, which can be accessed by various
"output commands"_Section_howto.html#howto_15. The scalar is the
cummulative number of deleted atoms. The scalar value calculated by
this fix is "intensive".
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the MISC package. It is only enabled if LAMMPS
was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"fix deposit"_fix_deposit.html
[Default:]
The option defaults are molecule = no.
diff --git a/doc/fix_gcmc.html b/doc/fix_gcmc.html
index 3fbc5daae..4251ba7d7 100644
--- a/doc/fix_gcmc.html
+++ b/doc/fix_gcmc.html
@@ -1,258 +1,256 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix gcmc command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID gcmc N X M type seed T mu displace keyword values ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>gcmc = style name of this fix command
<LI>N = invoke this fix every N steps
<LI>X = number of exchanges to attempt every N steps
<LI>M = number of MC displacements to attempt every N steps
<LI>type = atom type or molecule ID of exchanged gas
<LI>seed = random # seed (positive integer)
<LI>T = temperature of the ideal gas reservoir (temperature units)
<LI>mu = chemical potential of the ideal gas reservoir (energy units)
<LI>displace = maximum Monte Carlo displacement distance (length units)
<LI>zero or more keyword/value pairs may be appended to args
<LI>keyword = <I>molecule</I>, <I>region</I>, <I>maxangle</I>, <I>pressure</I>, or <I>fugacity_coeff</I>
<PRE> <I>molecule</I> value = <I>no</I> or <I>yes</I>
<I>region</I> value = region-ID
region-ID = ID of region to use as an exchange/move volume
<I>maxangle</I> value = maximum molecular rotation angle (degrees)
<I>pressure</I> value = pressue of the gas reservoir (pressure units)
<I>fugacity_coeff</I> value = fugacity coefficient of the gas reservoir (unitless)
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 2 gas gcmc 10 1000 1000 2 29494 298.0 -0.5 0.01
fix 3 Kr gcmc 10 100 100 1 3456543 3.0 -2.5 0.1 molecule yes maxangle 180
fix 4 my_gas gcmc 1 10 10 1 123456543 300.0 -12.5 1.0 region disk
</PRE>
<P><B>Description:</B>
</P>
<P>This fix performs grand canonical Monte Carlo (GCMC) exchanges of
atoms or molecules of the given type with an imaginary ideal gas reservoir at
the specified T and chemical potential (mu) as discussed in
<A HREF = "#Frenkel">(Frenkel)</A>. If used with the <A HREF = "fix_nh.html">fix nvt</A> command,
simulations in the grand canonical enemble (muVT, constant chemical
potential, constant volume, and constant temperature) can be
performed. Specific uses include computing isotherms in microporous
materials, or computing vapor-liquid coexistence curves.
</P>
<P>Perform up to X exchanges of gas atoms or molecules of the given type
between the simulation domain and the imaginary reservoir every N
timesteps. Also perform M Monte Carlo displacements or rotations
(for molecules) of gas of the given type within the simulation domain.
M should typically be chosen to be approximately equal to the expected
number of gas atoms or molecules of the given type within the domain,
which will result in roughly one MC translation per atom or molecule
per MC cycle.
</P>
<P>For MC moves of molecular gasses, rotations and translations are each
attempted with 50% probability. For MC moves of atomic gasses,
translations are attempted 100% of the time. For MC exchanges of either
molecular or atomic gasses, deletions and insertions are each attempted
with 50% probability.
</P>
<P>This fix cannot be used to perform MC insertions of gas atoms or
molecules other than the exchanged type, but MC deletions, translations,
and rotations can be performed on any atom/molecule in the fix group.
All atoms in the simulation domain can be moved using regular time
integration displacements, e.g. via <A HREF = "fix_nvt.html">fix_nvt</A>, resulting
in a hybrid GCMC+MD simulation. A smaller-than-usual timestep size
may be needed when running such a hybrid simulation, especially if
the inserted molecules are not well equilibrated.
</P>
<P>This command may optionally use the <I>region</I> keyword to define an
exchange and move volume. The specified region must have been
previously defined with a <A HREF = "region.html">region</A> command. It must be
defined with side = <I>in</I>. Insertion attempts occur only within the
specified region. Move and deletion attempt candidates are selected
from gas atoms or molecules within the region. If no candidate can be
found within the specified region after randomly selecting candidates
1000 times, the move or deletion attempt is considered a failure. Moves
must start within the specified region, but may move the atom or molecule
slightly outside of the region.
</P>
<P>If used with <A HREF = "fix_nvt.html">fix_nvt</A>, the temperature of the imaginary
reservoir, T, should be set to be equivalent to the target temperature
used in <A HREF = "fix_nvt.html">fix_nvt</A>. Otherwise, the imaginary reservoir
will not be in thermal equilibrium with the simulation domain.
</P>
<P>Note that neighbor lists are re-built every timestep that this fix is
invoked, so you should not set N to be too small. However, periodic
rebuilds are necessary in order to avoid dangerous rebuilds and missed
interactions. Specifically, avoid performing so many MC displacements
per timestep that atoms can move beyond the neighbor list skin
distance. See the <A HREF = "neighbor.html">neighbor</A> command for details.
</P>
<P>When an atom or molecule is to be inserted, its center-of-mass
coordinates are chosen as a random position within the current
simulation domain, and new atom velocities are randomly chosen
from the specified temperature distribution given by T. Relative
coordinates for atoms in a molecule are taken from the template
molecule provided by the user. A random initial rotation is used in the
case of molecule insertions.
</P>
<P>If the setting for the <I>molecule</I> keyword is <I>no</I>, then only single
atoms are exchanged. In this case, you should ensure you do not
delete only a portion of a molecule (only some of its atoms), or
LAMMPS will soon generate an error when it tries to find those atoms.
LAMMPS will warn you if any of the atoms eligible for deletion have a
non-zero molecule ID, but does not check for this at the time of
deletion.
</P>
<P>If the setting for the <I>molecule</I> keyword is <I>yes</I>, entire molecules
are exchanged. The user must supply a model molecule in the data
file to use as a template for exchanges, and that molecule's number
must be given in the fix GCMC command as the "type" of the exchanged
gas. Note that the model molecule must be present whenever the fix
is initialized. This is a limitation that will likely be remedied
in the not-to-distant future.
</P>
<P>Optionally, users may specify the maximum rotation angle for
molecular rotations using the <I>maxangle</I> keyword and specifying
the angle in degrees. The specified angle will apply to all three
Euler angles used internally to define the rotation matrix for
molecular rotations. The max angle can be set to zero, but rotations
will be pointless. Note that the default is ten degrees for each
Euler angle.
</P>
<P>For atomic gasses, inserted atoms have the specified atom type, but
deleted atoms are any atoms that have been inserted or that belong
to the user-specified fix group. For molecular gasses, exchanged
molecules use the same atom types as in the template molecule
supplied by the user. In both cases, exchanged
atoms/molecules are assigned to two groups: the default group "all"
and the group specified in the fix gcmc command (which can also be
"all").
</P>
<P>The gas reservoir pressure can be specified using the <I>pressure</I>
keyword, in which case the user-specified chemical potential is
ignored. For non-ideal gas reservoirs, the user may also specify the
fugacity coefficient using the <I>fugacity_coeff</I> keyword.
</P>
-<P>Use of this fix typically will cause the number of atoms to fluctuate,
-therefore, you will want to use the
-<A HREF = "compute_modify.html">compute_modify</A> command to insure that the
-current number of atoms is used as a normalizing factor each time
-temperature is computed. Here is the necessary command:
-</P>
-<PRE>compute_modify thermo_temp dynamic yes
-</PRE>
<P>If LJ units are used, note that a value of 0.18292026 is used by this
fix as the reduced value for Planck's constant. This value was
derived from LJ paramters for argon, where h* = h/sqrt(sigma^2 *
epsilon * mass), sigma = 3.429 angstroms, epsilon/k = 121.85 K, and
mass = 39.948 amu.
</P>
+<P>IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the particle count is changing due to adding/deleting particles,
+you typically should use the <A HREF = "compute_modify.html">compute_modify dynamic
+yes</A> command for the temperature compute you are
+using.
+</P>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>This fix writes the state of the deposition to <A HREF = "restart.html">binary restart
files</A>. This includes information about the random
number generator seed, the next timestep for MC exchanges, etc. See
the <A HREF = "read_restart.html">read_restart</A> command for info on how to
re-specify a fix in an input script that reads a restart file, so that
the operation of the fix continues in an uninterrupted fashion.
</P>
<P>None of the <A HREF = "fix_modify.html">fix_modify</A> options are relevant to this
fix.
</P>
<P>This fix computes a global vector of length 6, which can be accessed
by various <A HREF = "Section_howto.html#howto_15">output commands</A>. The vector
values are the following global cummulative quantities:
</P>
<UL><LI>1 = displacement attempts
<LI>2 = displacement successes
<LI>3 = insertion attempts
<LI>4 = insertion successes
<LI>5 = deletion attempts
<LI>6 = deletion successes
<LI>7 = rotation attempts
<LI>8 = rotation successes
</UL>
<P>The vector values calculated by this fix are "extensive".
</P>
<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P>Do not set "neigh_modify once yes" or else this fix will never be
called. Reneighboring is required.
</P>
<P>Only pairwise interactions, as defined by the
<A HREF = "pair_style.html">pair_style</A> command, are included in this
calculation. Long-range interactions due to a
<A HREF = "kspace_style.html">kspace_style</A> command are not included. Not all
pair potentials can be evaluated in a pairwise mode as required by
this fix. For example, 3-body potentials, such as
<A HREF = "pair_tersoff.html">Tersoff</A> and <A HREF = "pair_sw.html">Stillinger-Weber</A> cannot
be used. <A HREF = "pair_eam.html">EAM</A> potentials for metals only include the
pair potential portion of the EAM interaction, not the embedding term.
</P>
<P>Can be run in parallel, but aspects of the GCMC part will not scale
well in parallel. Only usable for 3D simulations with orthogonal
simulation cells.
</P>
<P>Note that very lengthy simulations involving insertions/deletions of
billions of gas molecules may run out of atom or molecule IDs and
trigger an error, so it is better to run multiple shorter-duration
simulations. Likewise, very large molecules have not been tested
and may turn out to be problematic.
</P>
<P>Use of multiple fix gcmc commands in the same input using a template
molecule are not supported. There are multiple issues where the
current implmentation makes assumptions that are no longer valid
in this case. Resolving all of them require significant changes to
the implementation.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_nvt.html">fix_nvt</A>, <A HREF = "neighbor.html">neighbor</A>,
<A HREF = "fix_deposit.html">fix_deposit</A>, <A HREF = "fix_evaporate.html">fix_evaporate</A>,
<A HREF = "delete_atoms.html">delete_atoms</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are molecule = no, maxangle = 10.
</P>
<HR>
<A NAME = "Frenkel"></A>
<P><B>(Frenkel)</B> Frenkel and Smit, Understanding Molecular Simulation,
Academic Press, London, 2002.
</P>
</HTML>
diff --git a/doc/fix_gcmc.txt b/doc/fix_gcmc.txt
index d45748132..45922b430 100644
--- a/doc/fix_gcmc.txt
+++ b/doc/fix_gcmc.txt
@@ -1,239 +1,237 @@
"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
fix gcmc command :h3
[Syntax:]
fix ID group-ID gcmc N X M type seed T mu displace keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
gcmc = style name of this fix command :l
N = invoke this fix every N steps :l
X = number of exchanges to attempt every N steps :l
M = number of MC displacements to attempt every N steps :l
type = atom type or molecule ID of exchanged gas :l
seed = random # seed (positive integer) :l
T = temperature of the ideal gas reservoir (temperature units) :l
mu = chemical potential of the ideal gas reservoir (energy units) :l
displace = maximum Monte Carlo displacement distance (length units) :l
zero or more keyword/value pairs may be appended to args :l
keyword = {molecule}, {region}, {maxangle}, {pressure}, or {fugacity_coeff} :l
{molecule} value = {no} or {yes}
{region} value = region-ID
region-ID = ID of region to use as an exchange/move volume
{maxangle} value = maximum molecular rotation angle (degrees)
{pressure} value = pressue of the gas reservoir (pressure units)
{fugacity_coeff} value = fugacity coefficient of the gas reservoir (unitless) :pre
:ule
[Examples:]
fix 2 gas gcmc 10 1000 1000 2 29494 298.0 -0.5 0.01
fix 3 Kr gcmc 10 100 100 1 3456543 3.0 -2.5 0.1 molecule yes maxangle 180
fix 4 my_gas gcmc 1 10 10 1 123456543 300.0 -12.5 1.0 region disk :pre
[Description:]
This fix performs grand canonical Monte Carlo (GCMC) exchanges of
atoms or molecules of the given type with an imaginary ideal gas reservoir at
the specified T and chemical potential (mu) as discussed in
"(Frenkel)"_#Frenkel. If used with the "fix nvt"_fix_nh.html command,
simulations in the grand canonical enemble (muVT, constant chemical
potential, constant volume, and constant temperature) can be
performed. Specific uses include computing isotherms in microporous
materials, or computing vapor-liquid coexistence curves.
Perform up to X exchanges of gas atoms or molecules of the given type
between the simulation domain and the imaginary reservoir every N
timesteps. Also perform M Monte Carlo displacements or rotations
(for molecules) of gas of the given type within the simulation domain.
M should typically be chosen to be approximately equal to the expected
number of gas atoms or molecules of the given type within the domain,
which will result in roughly one MC translation per atom or molecule
per MC cycle.
For MC moves of molecular gasses, rotations and translations are each
attempted with 50% probability. For MC moves of atomic gasses,
translations are attempted 100% of the time. For MC exchanges of either
molecular or atomic gasses, deletions and insertions are each attempted
with 50% probability.
This fix cannot be used to perform MC insertions of gas atoms or
molecules other than the exchanged type, but MC deletions, translations,
and rotations can be performed on any atom/molecule in the fix group.
All atoms in the simulation domain can be moved using regular time
integration displacements, e.g. via "fix_nvt"_fix_nvt.html, resulting
in a hybrid GCMC+MD simulation. A smaller-than-usual timestep size
may be needed when running such a hybrid simulation, especially if
the inserted molecules are not well equilibrated.
This command may optionally use the {region} keyword to define an
exchange and move volume. The specified region must have been
previously defined with a "region"_region.html command. It must be
defined with side = {in}. Insertion attempts occur only within the
specified region. Move and deletion attempt candidates are selected
from gas atoms or molecules within the region. If no candidate can be
found within the specified region after randomly selecting candidates
1000 times, the move or deletion attempt is considered a failure. Moves
must start within the specified region, but may move the atom or molecule
slightly outside of the region.
If used with "fix_nvt"_fix_nvt.html, the temperature of the imaginary
reservoir, T, should be set to be equivalent to the target temperature
used in "fix_nvt"_fix_nvt.html. Otherwise, the imaginary reservoir
will not be in thermal equilibrium with the simulation domain.
Note that neighbor lists are re-built every timestep that this fix is
invoked, so you should not set N to be too small. However, periodic
rebuilds are necessary in order to avoid dangerous rebuilds and missed
interactions. Specifically, avoid performing so many MC displacements
per timestep that atoms can move beyond the neighbor list skin
distance. See the "neighbor"_neighbor.html command for details.
When an atom or molecule is to be inserted, its center-of-mass
coordinates are chosen as a random position within the current
simulation domain, and new atom velocities are randomly chosen
from the specified temperature distribution given by T. Relative
coordinates for atoms in a molecule are taken from the template
molecule provided by the user. A random initial rotation is used in the
case of molecule insertions.
If the setting for the {molecule} keyword is {no}, then only single
atoms are exchanged. In this case, you should ensure you do not
delete only a portion of a molecule (only some of its atoms), or
LAMMPS will soon generate an error when it tries to find those atoms.
LAMMPS will warn you if any of the atoms eligible for deletion have a
non-zero molecule ID, but does not check for this at the time of
deletion.
If the setting for the {molecule} keyword is {yes}, entire molecules
are exchanged. The user must supply a model molecule in the data
file to use as a template for exchanges, and that molecule's number
must be given in the fix GCMC command as the "type" of the exchanged
gas. Note that the model molecule must be present whenever the fix
is initialized. This is a limitation that will likely be remedied
in the not-to-distant future.
Optionally, users may specify the maximum rotation angle for
molecular rotations using the {maxangle} keyword and specifying
the angle in degrees. The specified angle will apply to all three
Euler angles used internally to define the rotation matrix for
molecular rotations. The max angle can be set to zero, but rotations
will be pointless. Note that the default is ten degrees for each
Euler angle.
For atomic gasses, inserted atoms have the specified atom type, but
deleted atoms are any atoms that have been inserted or that belong
to the user-specified fix group. For molecular gasses, exchanged
molecules use the same atom types as in the template molecule
supplied by the user. In both cases, exchanged
atoms/molecules are assigned to two groups: the default group "all"
and the group specified in the fix gcmc command (which can also be
"all").
The gas reservoir pressure can be specified using the {pressure}
keyword, in which case the user-specified chemical potential is
ignored. For non-ideal gas reservoirs, the user may also specify the
fugacity coefficient using the {fugacity_coeff} keyword.
-Use of this fix typically will cause the number of atoms to fluctuate,
-therefore, you will want to use the
-"compute_modify"_compute_modify.html command to insure that the
-current number of atoms is used as a normalizing factor each time
-temperature is computed. Here is the necessary command:
-
-compute_modify thermo_temp dynamic yes :pre
-
If LJ units are used, note that a value of 0.18292026 is used by this
fix as the reduced value for Planck's constant. This value was
derived from LJ paramters for argon, where h* = h/sqrt(sigma^2 *
epsilon * mass), sigma = 3.429 angstroms, epsilon/k = 121.85 K, and
mass = 39.948 amu.
+IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the particle count is changing due to adding/deleting particles,
+you typically should use the "compute_modify dynamic
+yes"_compute_modify.html command for the temperature compute you are
+using.
+
[Restart, fix_modify, output, run start/stop, minimize info:]
This fix writes the state of the deposition to "binary restart
files"_restart.html. This includes information about the random
number generator seed, the next timestep for MC exchanges, etc. See
the "read_restart"_read_restart.html command for info on how to
re-specify a fix in an input script that reads a restart file, so that
the operation of the fix continues in an uninterrupted fashion.
None of the "fix_modify"_fix_modify.html options are relevant to this
fix.
This fix computes a global vector of length 6, which can be accessed
by various "output commands"_Section_howto.html#howto_15. The vector
values are the following global cummulative quantities:
1 = displacement attempts
2 = displacement successes
3 = insertion attempts
4 = insertion successes
5 = deletion attempts
6 = deletion successes
7 = rotation attempts
8 = rotation successes :ul
The vector values calculated by this fix are "extensive".
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the MC package. It is only enabled if LAMMPS was
built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
Do not set "neigh_modify once yes" or else this fix will never be
called. Reneighboring is required.
Only pairwise interactions, as defined by the
"pair_style"_pair_style.html command, are included in this
calculation. Long-range interactions due to a
"kspace_style"_kspace_style.html command are not included. Not all
pair potentials can be evaluated in a pairwise mode as required by
this fix. For example, 3-body potentials, such as
"Tersoff"_pair_tersoff.html and "Stillinger-Weber"_pair_sw.html cannot
be used. "EAM"_pair_eam.html potentials for metals only include the
pair potential portion of the EAM interaction, not the embedding term.
Can be run in parallel, but aspects of the GCMC part will not scale
well in parallel. Only usable for 3D simulations with orthogonal
simulation cells.
Note that very lengthy simulations involving insertions/deletions of
billions of gas molecules may run out of atom or molecule IDs and
trigger an error, so it is better to run multiple shorter-duration
simulations. Likewise, very large molecules have not been tested
and may turn out to be problematic.
Use of multiple fix gcmc commands in the same input using a template
molecule are not supported. There are multiple issues where the
current implmentation makes assumptions that are no longer valid
in this case. Resolving all of them require significant changes to
the implementation.
[Related commands:]
"fix_nvt"_fix_nvt.html, "neighbor"_neighbor.html,
"fix_deposit"_fix_deposit.html, "fix_evaporate"_fix_evaporate.html,
"delete_atoms"_delete_atoms.html
[Default:]
The option defaults are molecule = no, maxangle = 10.
:line
:link(Frenkel)
[(Frenkel)] Frenkel and Smit, Understanding Molecular Simulation,
Academic Press, London, 2002.
diff --git a/doc/fix_pour.html b/doc/fix_pour.html
index 3a3dd29e2..bda80ccab 100644
--- a/doc/fix_pour.html
+++ b/doc/fix_pour.html
@@ -1,224 +1,230 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix pour command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID pour N type seed keyword values ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>pour = style name of this fix command
<LI>N = # of atoms to insert
<LI>type = atom type to assign to inserted atoms (offset for molecule insertion)
<LI>seed = random # seed (positive integer)
<LI>one or more keyword/value pairs may be appended to args
<LI>keyword = <I>region</I> or <I>diam</I> or <I>dens</I> or <I>vol</I> or <I>rate</I> or <I>vel</I> or <I>mol</I> or <I>rigid</I> or <I>shake</I>
<PRE> <I>region</I> value = region-ID
region-ID = ID of region to use as insertion volume
<I>diam</I> values = dstyle args
dstyle = <I>one</I> or <I>range</I> or <I>poly</I>
<I>one</I> args = D
D = single diameter for inserted particles (distance units)
<I>range</I> args = Dlo Dhi
Dlo,Dhi = range of diameters for inserted particles (distance units)
<I>poly</I> args = Npoly D1 P1 D2 P2 ...
Npoly = # of (D,P) pairs
D1,D2,... = diameter for subset of inserted particles (distance units)
P1,P2,... = percentage of inserted particles with this diameter (0-1)
<I>vol</I> values = fraction Nattempt
fraction = desired volume fraction for filling insertion volume
Nattempt = max # of insertion attempts per atom
<I>rate</I> value = V
V = z velocity (3d) or y velocity (2d) at which
insertion volume moves (velocity units)
<I>vel</I> values (3d) = vxlo vxhi vylo vyhi vz
<I>vel</I> values (2d) = vxlo vxhi vy
vxlo,vxhi = range of x velocities for inserted particles (velocity units)
vylo,vyhi = range of y velocities for inserted particles (velocity units)
vz = z velocity (3d) assigned to inserted particles (velocity units)
vy = y velocity (2d) assigned to inserted particles (velocity units)
<I>mol</I> value = template-ID
template-ID = ID of molecule template specified in a separate <A HREF = "molecule.html">molecule</A> command
<I>rigid</I> value = fix-ID
fix-ID = ID of <A HREF = "fix_rigid.html">fix rigid/small</A> command
<I>shake</I> value = fix-ID
fix-ID = ID of <A HREF = "fix_shake.html">fix shake</A> command
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 3 all pour 1000 2 29494 region myblock
fix 2 all pour 10000 1 19985583 region disk vol 0.33 100 rate 1.0 diam range 0.9 1.1
fix 2 all pour 10000 1 19985583 region disk diam poly 2 0.7 0.4 1.5 0.6
fix ins all pour 500 1 4767548 vol 0.8 10 region slab mol object rigid myRigid
</PRE>
<P><B>Description:</B>
</P>
<P>Insert finite-size particles or molecules into the simulation box
every few timesteps within a specified region until N particles or
molecules have been inserted. This is typically used to model the
pouring of granular particles into a container under the influence of
gravity. For the remainder of this doc page, a single inserted atom
or molecule is referred to as a "particle".
</P>
<P>If inserted particles are individual atoms, they are assigned the
specified atom type. If they are molecules, the type of each atom in
the inserted molecule is specified in the file read by the
<A HREF = "molecule.html">molecule</A> command, and those values are added to the
specified atom type. E.g. if the file specifies atom types 1,2,3, and
those are the atom types you want for inserted molecules, then specify
<I>type</I> = 0. If you specify <I>type</I> = 2, the in the inserted molecule
will have atom types 3,4,5.
</P>
<P>All atoms in the inserted particle are assigned to two groups: the
default group "all" and the group specified in the fix pour command
(which can also be "all").
</P>
<P>This command must use the <I>region</I> keyword to define an insertion
volume. The specified region must have been previously defined with a
<A HREF = "region.html">region</A> command. It must be of type <I>block</I> or a z-axis
<I>cylinder</I> and must be defined with side = <I>in</I>. The cylinder style
of region can only be used with 3d simulations.
</P>
<P>Individual atoms are inserted, unless the <I>mol</I> keyword is used. It
specifies a <I>template-ID</I> previously defined using the
<A HREF = "molecule.html">molecule</A> command, which reads a file that defines the
molecule. The coordinates, atom types, center-of-mass, moments of
inertia, etc, as well as any bond/angle/etc and special neighbor
information for the molecule can be specified in the molecule file.
See the <A HREF = "molecule.html">molecule</A> command for details. The only
settings required to be in this file are the coordinates and types of
atoms in the molecule.
</P>
<P>If you wish to insert molecules via the <I>mol</I> keyword, that will be
treated as rigid bodies, use the <I>rigid</I> keyword, specifying as its
value the ID of a separate <A HREF = "fix_rigid_small.html">fix rigid/small</A>
command which also appears in your input script.
</P>
<P>If you wish to insert molecules via the <I>mol</I> keyword, that will have
their bonds or angles constrained via SHAKE, use the <I>shake</I> keyword,
specifying as its value the ID of a separate <A HREF = "fix_shake.html">fix
shake</A> command which also appears in your input script.
</P>
<P>Each timestep particles are inserted, they are placed randomly inside
the insertion volume so as to mimic a stream of poured particles. If
they are molecules they are also oriented randomly. Each atom in the
particle is tested for overlaps with existing particles, including
effects due to periodic boundary conditions if applicable. If an
overlap is detected, another random insertion attempt is made; see the
<I>vol</I> keyword discussion below. The larger the volume of the
insertion region, the more particles that can be inserted at any one
timestep. Particles are inserted again after enough time has elapsed
that the previously inserted particles fall out of the insertion
volume under the influence of gravity. Insertions continue every so
many timesteps until the desired # of particles has been inserted.
</P>
<P>All other keywords are optional with defaults as shown below.
</P>
<P>The <I>diam</I> option is only used when inserting atoms and specifes the
diameters of inserted particles. There are 3 styles: <I>one</I>, <I>range</I>,
or <I>poly</I>. For <I>one</I>, all particles will have diameter <I>D</I>. For
<I>range</I>, the diameter of each particle will be chosen randomly and
uniformly between the specified <I>Dlo</I> and <I>Dhi</I> bounds. For <I>poly</I>, a
series of <I>Npoly</I> diameters is specified. For each diameter a
percentage value from 0.0 to 1.0 is also specified. The <I>Npoly</I>
percentages must sum to 1.0. For the example shown above with "diam 2
0.7 0.4 1.5 0.6", all inserted particles will have a diameter of 0.7
or 1.5. 40% of the particles will be small; 60% will be large.
</P>
<P>Note that for molecule insertion, the diameters of individual atoms in
the molecule can be specified in the file read by the
<A HREF = "molecule.html">molecule</A> command. If not specified, the diameter of
each atom in the molecule has a default diameter of 1.0.
</P>
<P>The <I>dens</I> and <I>vel</I> options enable inserted particles to have a range
of densities or xy velocities. The specific values for a particular
inserted particle will be chosen randomly and uniformly between the
specified bounds. The <I>vz</I> or <I>vy</I> value for option <I>vel</I> assigns a
z-velocity (3d) or y-velocity (2d) to each inserted particle.
</P>
<P>The <I>vol</I> option specifies what volume fraction of the insertion
volume will be filled with particles. For particles with a size
specified by the <I>diam range</I> keyword, they are assumed to all be of
maximum diamter <I>Dhi</I> for purposes of computing their contribution to
the volume fraction.
</P>
<P>The higher the volume fraction value, the more particles are inserted
each timestep. Since inserted particles cannot overlap, the maximum
volume fraction should be no higher than about 0.6. Each timestep
particles are inserted, LAMMPS will make up to a total of M tries to
insert the new particles without overlaps, where M = # of inserted
particles * Nattempt. If LAMMPS is unsuccessful at completing all
insertions, it prints a warning.
</P>
<P>The <I>rate</I> option moves the insertion volume in the z direction (3d)
or y direction (2d). This enables pouring particles from a
successively higher height over time.
</P>
+<P>IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the particle count is changing due to adding particles, you
+typically should use the <A HREF = "compute_modify.html">compute_modify dynamic
+yes</A> command for the temperature compute you are
+using.
+</P>
<HR>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>. This means you must be careful when restarting a
pouring simulation, when the restart file was written in the middle of
the pouring operation. Specifically, you should use a new fix pour
command in the input script for the restarted simulation that
continues the operation. You will need to adjust the arguments of the
original fix pour command to do this.
</P>
<P>Also note that because the state of the random number generator is not
saved in restart files, you cannot do "exact" restarts with this fix,
where the simulation continues on the same as if no restart had taken
place. However, in a statistical sense, a restarted simulation should
produce the same behavior if you adjust the fix pour parameters
appropriately.
</P>
<P>None of the <A HREF = "fix_modify.html">fix_modify</A> options are relevant to this
fix. No global or per-atom quantities are stored by this fix for
access by various <A HREF = "Section_howto.html#howto_15">output commands</A>. No
parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the GRANULAR package. It is only enabled if
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P>For 3d simulations, a gravity fix in the -z direction must be defined
for use in conjunction with this fix. For 2d simulations, gravity
must be defined in the -y direction.
</P>
<P>The specified insertion region cannot be a "dynamic" region, as
defined by the <A HREF = "region.html">region</A> command.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_deposit.html">fix_deposit</A>, <A HREF = "fix_gravity.html">fix_gravity</A>,
<A HREF = "region.html">region</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are diam = one 1.0, dens = 1.0 1.0, vol = 0.25 50,
rate = 0.0, vel = 0.0 0.0 0.0 0.0 0.0.
</P>
</HTML>
diff --git a/doc/fix_pour.txt b/doc/fix_pour.txt
index e21e0792e..2f38221e1 100644
--- a/doc/fix_pour.txt
+++ b/doc/fix_pour.txt
@@ -1,211 +1,217 @@
"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
fix pour command :h3
[Syntax:]
fix ID group-ID pour N type seed keyword values ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
pour = style name of this fix command :l
N = # of atoms to insert :l
type = atom type to assign to inserted atoms (offset for molecule insertion) :l
seed = random # seed (positive integer) :l
one or more keyword/value pairs may be appended to args :l
keyword = {region} or {diam} or {dens} or {vol} or {rate} or {vel} or {mol} or {rigid} or {shake} :l
{region} value = region-ID
region-ID = ID of region to use as insertion volume
{diam} values = dstyle args
dstyle = {one} or {range} or {poly}
{one} args = D
D = single diameter for inserted particles (distance units)
{range} args = Dlo Dhi
Dlo,Dhi = range of diameters for inserted particles (distance units)
{poly} args = Npoly D1 P1 D2 P2 ...
Npoly = # of (D,P) pairs
D1,D2,... = diameter for subset of inserted particles (distance units)
P1,P2,... = percentage of inserted particles with this diameter (0-1)
{vol} values = fraction Nattempt
fraction = desired volume fraction for filling insertion volume
Nattempt = max # of insertion attempts per atom
{rate} value = V
V = z velocity (3d) or y velocity (2d) at which
insertion volume moves (velocity units)
{vel} values (3d) = vxlo vxhi vylo vyhi vz
{vel} values (2d) = vxlo vxhi vy
vxlo,vxhi = range of x velocities for inserted particles (velocity units)
vylo,vyhi = range of y velocities for inserted particles (velocity units)
vz = z velocity (3d) assigned to inserted particles (velocity units)
vy = y velocity (2d) assigned to inserted particles (velocity units)
{mol} value = template-ID
template-ID = ID of molecule template specified in a separate "molecule"_molecule.html command
{rigid} value = fix-ID
fix-ID = ID of "fix rigid/small"_fix_rigid.html command
{shake} value = fix-ID
fix-ID = ID of "fix shake"_fix_shake.html command :pre
:ule
[Examples:]
fix 3 all pour 1000 2 29494 region myblock
fix 2 all pour 10000 1 19985583 region disk vol 0.33 100 rate 1.0 diam range 0.9 1.1
fix 2 all pour 10000 1 19985583 region disk diam poly 2 0.7 0.4 1.5 0.6
fix ins all pour 500 1 4767548 vol 0.8 10 region slab mol object rigid myRigid :pre
[Description:]
Insert finite-size particles or molecules into the simulation box
every few timesteps within a specified region until N particles or
molecules have been inserted. This is typically used to model the
pouring of granular particles into a container under the influence of
gravity. For the remainder of this doc page, a single inserted atom
or molecule is referred to as a "particle".
If inserted particles are individual atoms, they are assigned the
specified atom type. If they are molecules, the type of each atom in
the inserted molecule is specified in the file read by the
"molecule"_molecule.html command, and those values are added to the
specified atom type. E.g. if the file specifies atom types 1,2,3, and
those are the atom types you want for inserted molecules, then specify
{type} = 0. If you specify {type} = 2, the in the inserted molecule
will have atom types 3,4,5.
All atoms in the inserted particle are assigned to two groups: the
default group "all" and the group specified in the fix pour command
(which can also be "all").
This command must use the {region} keyword to define an insertion
volume. The specified region must have been previously defined with a
"region"_region.html command. It must be of type {block} or a z-axis
{cylinder} and must be defined with side = {in}. The cylinder style
of region can only be used with 3d simulations.
Individual atoms are inserted, unless the {mol} keyword is used. It
specifies a {template-ID} previously defined using the
"molecule"_molecule.html command, which reads a file that defines the
molecule. The coordinates, atom types, center-of-mass, moments of
inertia, etc, as well as any bond/angle/etc and special neighbor
information for the molecule can be specified in the molecule file.
See the "molecule"_molecule.html command for details. The only
settings required to be in this file are the coordinates and types of
atoms in the molecule.
If you wish to insert molecules via the {mol} keyword, that will be
treated as rigid bodies, use the {rigid} keyword, specifying as its
value the ID of a separate "fix rigid/small"_fix_rigid_small.html
command which also appears in your input script.
If you wish to insert molecules via the {mol} keyword, that will have
their bonds or angles constrained via SHAKE, use the {shake} keyword,
specifying as its value the ID of a separate "fix
shake"_fix_shake.html command which also appears in your input script.
Each timestep particles are inserted, they are placed randomly inside
the insertion volume so as to mimic a stream of poured particles. If
they are molecules they are also oriented randomly. Each atom in the
particle is tested for overlaps with existing particles, including
effects due to periodic boundary conditions if applicable. If an
overlap is detected, another random insertion attempt is made; see the
{vol} keyword discussion below. The larger the volume of the
insertion region, the more particles that can be inserted at any one
timestep. Particles are inserted again after enough time has elapsed
that the previously inserted particles fall out of the insertion
volume under the influence of gravity. Insertions continue every so
many timesteps until the desired # of particles has been inserted.
All other keywords are optional with defaults as shown below.
The {diam} option is only used when inserting atoms and specifes the
diameters of inserted particles. There are 3 styles: {one}, {range},
or {poly}. For {one}, all particles will have diameter {D}. For
{range}, the diameter of each particle will be chosen randomly and
uniformly between the specified {Dlo} and {Dhi} bounds. For {poly}, a
series of {Npoly} diameters is specified. For each diameter a
percentage value from 0.0 to 1.0 is also specified. The {Npoly}
percentages must sum to 1.0. For the example shown above with "diam 2
0.7 0.4 1.5 0.6", all inserted particles will have a diameter of 0.7
or 1.5. 40% of the particles will be small; 60% will be large.
Note that for molecule insertion, the diameters of individual atoms in
the molecule can be specified in the file read by the
"molecule"_molecule.html command. If not specified, the diameter of
each atom in the molecule has a default diameter of 1.0.
The {dens} and {vel} options enable inserted particles to have a range
of densities or xy velocities. The specific values for a particular
inserted particle will be chosen randomly and uniformly between the
specified bounds. The {vz} or {vy} value for option {vel} assigns a
z-velocity (3d) or y-velocity (2d) to each inserted particle.
The {vol} option specifies what volume fraction of the insertion
volume will be filled with particles. For particles with a size
specified by the {diam range} keyword, they are assumed to all be of
maximum diamter {Dhi} for purposes of computing their contribution to
the volume fraction.
The higher the volume fraction value, the more particles are inserted
each timestep. Since inserted particles cannot overlap, the maximum
volume fraction should be no higher than about 0.6. Each timestep
particles are inserted, LAMMPS will make up to a total of M tries to
insert the new particles without overlaps, where M = # of inserted
particles * Nattempt. If LAMMPS is unsuccessful at completing all
insertions, it prints a warning.
The {rate} option moves the insertion volume in the z direction (3d)
or y direction (2d). This enables pouring particles from a
successively higher height over time.
+IMPORTANT NOTE: If you are monitoring the temperature of a system
+where the particle count is changing due to adding particles, you
+typically should use the "compute_modify dynamic
+yes"_compute_modify.html command for the temperature compute you are
+using.
+
:line
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. This means you must be careful when restarting a
pouring simulation, when the restart file was written in the middle of
the pouring operation. Specifically, you should use a new fix pour
command in the input script for the restarted simulation that
continues the operation. You will need to adjust the arguments of the
original fix pour command to do this.
Also note that because the state of the random number generator is not
saved in restart files, you cannot do "exact" restarts with this fix,
where the simulation continues on the same as if no restart had taken
place. However, in a statistical sense, a restarted simulation should
produce the same behavior if you adjust the fix pour parameters
appropriately.
None of the "fix_modify"_fix_modify.html options are relevant to this
fix. No global or per-atom quantities are stored by this fix for
access by various "output commands"_Section_howto.html#howto_15. No
parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the GRANULAR package. It is only enabled if
LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
For 3d simulations, a gravity fix in the -z direction must be defined
for use in conjunction with this fix. For 2d simulations, gravity
must be defined in the -y direction.
The specified insertion region cannot be a "dynamic" region, as
defined by the "region"_region.html command.
[Related commands:]
"fix_deposit"_fix_deposit.html, "fix_gravity"_fix_gravity.html,
"region"_region.html
[Default:]
The option defaults are diam = one 1.0, dens = 1.0 1.0, vol = 0.25 50,
rate = 0.0, vel = 0.0 0.0 0.0 0.0 0.0.
diff --git a/doc/fix_reaxc_species.html b/doc/fix_reaxc_species.html
index 5289f6ed4..a507564a2 100644
--- a/doc/fix_reaxc_species.html
+++ b/doc/fix_reaxc_species.html
@@ -1,143 +1,165 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix reax/c/species command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID reax/c/species Nevery Nrepeat Nfreq filename keyword value ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>reax/c/species = style name of this command
<LI>Nevery = sample bond-order every this many timesteps
<LI>Nrepeat = # of bond-order samples used for calculating averages
<LI>Nfreq = calculate average bond-order every this many timesteps
<LI>filename = name of output file
<LI>zero or more keyword/value pairs may be appended
<LI>keyword = <I>cutoff</I> or <I>element</I> or <I>position</I>
<PRE> <I>cutoff</I> value = I J Cutoff
I, J = atom types
Cutoff = Bond-order cutoff value for this pair of atom types
<I>element</I> value = Element1, Element2, ...
<I>position</I> value = posfreq filepos
posfreq = write position files every this many timestep
filepos = name of position output file
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 1 all reax/c/species 10 10 100 species.out
fix 1 all reax/c/species 1 2 20 species.out cutoff 1 1 0.40 cutoff 1 2 0.55
fix 1 all reax/c/species 1 100 100 species.out element Au O H position 1000 AuOH.pos
</PRE>
<P><B>Description:</B>
</P>
-<P>Write out the chemical species information computed by the ReaxFF potential
-specified by <A HREF = "pair_reax_c.html">pair_style reax/c</A>. Bond-order values
-(either averaged or instantaneous, depending on value of <I>Nrepeat</I>)
-are used to determine chemical bonds. Every <I>Nfreq</I> timesteps,
-chemical species information is written to <I>filename</I> as a two line output.
-The first line is a header containing labels. The second line consists
-of the following: timestep, total number of molecules,
-total number of distinct species, number of molecules of each species.
-The chemical formula of each species is given in the first line.
-</P>
-<P>Optional keyword <I>cutoff</I> can be assigned to change the minimum bond-order values
-used in identifying chemical bonds between pairs of atoms. Bond-order cutoffs
-should be carefully chosen, as bond-order cutoffs that are too small may include
-too many bonds (which will result in an error), while too-large cutoffs will
-result in fragmented molecules. The default cutoff of 0.3 usually gives good
-estimate.
-</P>
-<P>Optional keyword <I>element</I> can be used to specify the chemical symbol printed for
-each LAMMPS atom type. The number of symbols must match the number of LAMMPS atom types
-and each symbol must consist of 1 or 2 alphanumeric characters. Normally, these
-symbols should be chosen to match the chemical identity of each LAMMPS atom type,
-as specified using the <A HREF = "pair_reax_c.html">reax/c pair_coeff</A> command and
-the ReaxFF force field file.
-</P>
-<P>Optional keyword <I>position</I> writes center-of-mass positions of each identified
-molecules to file <I>filepos</I> every <I>posfreq</I> timesteps. The first line contains
-information on timestep, total number of molecules, total number of distinct
-species, and box dimensions. The second line is a header containing labels.
-From the third line downward, each molecule writes a line of output containing
-the following information: molecule ID, number of atoms in this molecule, chemical
-formula, total charge, and center-of-mass xyz positions of this molecule. The xyz
-positions are in fractional coordinates relative to the box dimensions.
-</P>
-<P>Keyword <I>position</I> output file <I>filepos</I> can contain the wildcard character "*".
-If the "*" character appears in <I>filepos</I>, then one file per snapshot is written
-at <I>posfreq</I> and the "*" character is replaced with the timestep value.
-For example, AuO.pos.* becomes AuO.pos.0, AuO.pos.1000, etc.
+<P>Write out the chemical species information computed by the ReaxFF
+potential specified by <A HREF = "pair_reax_c.html">pair_style reax/c</A>.
+Bond-order values (either averaged or instantaneous, depending on
+value of <I>Nrepeat</I>) are used to determine chemical bonds. Every
+<I>Nfreq</I> timesteps, chemical species information is written to
+<I>filename</I> as a two line output. The first line is a header
+containing labels. The second line consists of the following:
+timestep, total number of molecules, total number of distinct species,
+number of molecules of each species. In this context, "species" means
+a unique molecule. The chemical formula of each species is given in
+the first line.
+</P>
+<P>Optional keyword <I>cutoff</I> can be assigned to change the minimum
+bond-order values used in identifying chemical bonds between pairs of
+atoms. Bond-order cutoffs should be carefully chosen, as bond-order
+cutoffs that are too small may include too many bonds (which will
+result in an error), while cutoffs that are too large will result in
+fragmented molecules. The default cutoff of 0.3 usually gives good
+results.
+</P>
+<P>The optional keyword <I>element</I> can be used to specify the chemical
+symbol printed for each LAMMPS atom type. The number of symbols must
+match the number of LAMMPS atom types and each symbol must consist of
+1 or 2 alphanumeric characters. Normally, these symbols should be
+chosen to match the chemical identity of each LAMMPS atom type, as
+specified using the <A HREF = "pair_reax_c.html">reax/c pair_coeff</A> command and
+the ReaxFF force field file.
+</P>
+<P>The optional keyword <I>position</I> writes center-of-mass positions of
+each identified molecules to file <I>filepos</I> every <I>posfreq</I> timesteps.
+The first line contains information on timestep, total number of
+molecules, total number of distinct species, and box dimensions. The
+second line is a header containing labels. From the third line
+downward, each molecule writes a line of output containing the
+following information: molecule ID, number of atoms in this molecule,
+chemical formula, total charge, and center-of-mass xyz positions of
+this molecule. The xyz positions are in fractional coordinates
+relative to the box dimensions.
+</P>
+<P>For the keyword <I>position</I>, the <I>filepos</I> is the name of the output
+file. It can contain the wildcard character "*". If the "*"
+character appears in <I>filepos</I>, then one file per snapshot is written
+at <I>posfreq</I> and the "*" character is replaced with the timestep
+value. For example, AuO.pos.* becomes AuO.pos.0, AuO.pos.1000, etc.
</P>
<HR>
<P>The <I>Nevery</I>, <I>Nrepeat</I>, and <I>Nfreq</I> arguments specify on what
timesteps the bond-order values are sampled to get the average bond
order. The species analysis is performed using the average bond-order
-on timesteps
-that are a multiple of <I>Nfreq</I>. The average is over <I>Nrepeat</I>
-bond-order samples, computed in the preceding portion of the simulation every
-<I>Nevery</I> timesteps. <I>Nfreq</I> must be a multiple of <I>Nevery</I> and
-<I>Nevery</I> must be non-zero even if <I>Nrepeat</I> is 1. Also, the timesteps
-contributing to the average bond-order cannot overlap, i.e. Nfreq >
-(Nrepeat-1)*Nevery is required.
-</P>
-<P>For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then bond-order values on
-timesteps 90,92,94,96,98,100 will be used to compute the average bond-order
- for the species analysis output on timestep 100.
+on timesteps that are a multiple of <I>Nfreq</I>. The average is over
+<I>Nrepeat</I> bond-order samples, computed in the preceding portion of the
+simulation every <I>Nevery</I> timesteps. <I>Nfreq</I> must be a multiple of
+<I>Nevery</I> and <I>Nevery</I> must be non-zero even if <I>Nrepeat</I> is 1. Also,
+the timesteps contributing to the average bond-order cannot overlap,
+i.e. Nfreq > (Nrepeat-1)*Nevery is required.
+</P>
+<P>For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then bond-order
+values on timesteps 90,92,94,96,98,100 will be used to compute the
+average bond-order for the species analysis output on timestep 100.
</P>
<HR>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>. None of the <A HREF = "fix_modify.html">fix_modify</A> options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various <A HREF = "Section_howto.html#howto_15">output
-commands</A>. No parameter of this fix can
-be used with the <I>start/stop</I> keywords of the <A HREF = "run.html">run</A> command.
-This fix is not invoked during <A HREF = "minimize.html">energy minimization</A>.
+are relevant to this fix.
+</P>
+<P>This fix computes both a global vector of length 2 and a per-atom
+vector, either of which can be accessed by various <A HREF = "Section_howto.html#howto_15">output
+commands</A>. The values in the global
+vector are "intensive".
+</P>
+<P>The 2 values in the global vector are as follows:
+</P>
+<UL><LI>1 = total number of molecules
+<LI>2 = total number of distinct species
+</UL>
+<P>The per-atom vector stores the molecule ID for each atom as identified
+by the fix. If an atom is not in a molecule, its ID will be 0.
+For atoms in the same molecule, the molecule ID for all of them
+will be the same and will be equal to the smallest atom ID of
+any atom in the molecule.
+</P>
+<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
+the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
+minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>The fix species currently only works with
<A HREF = "pair_reax_c.html">pair_style reax/c</A> and it requires that the <A HREF = "pair_reax_c.html">pair_style
reax/c</A> be invoked. This fix is part of the
USER-REAXC package. It is only enabled if LAMMPS was built with that
package. See the <A HREF = "Section_start.html#start_3">Making LAMMPS</A> section
for more info.
</P>
<P>It should be possible to extend it to other reactive pair_styles (such as
<A HREF = "pair_airebo.html">rebo</A>, <A HREF = "pair_airebo.html">airebo</A>,
<A HREF = "pair_comb.html">comb</A>, and <A HREF = "pair_bop.html">bop</A>), but this has not yet been done.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "pair_reax_c.html">pair_style reax/c</A>, <A HREF = "fix_reax_bonds.html">fix
reax/bonds</A>
</P>
<P><B>Default:</B>
</P>
<P>The default values for bond-order cutoffs are 0.3 for all I-J pairs. The
default element symbols are C, H, O, N. Position files are not written
by default.
</P>
</HTML>
diff --git a/doc/fix_reaxc_species.txt b/doc/fix_reaxc_species.txt
index 87ab88302..ef8aa5a70 100644
--- a/doc/fix_reaxc_species.txt
+++ b/doc/fix_reaxc_species.txt
@@ -1,132 +1,153 @@
"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
fix reax/c/species command :h3
[Syntax:]
fix ID group-ID reax/c/species Nevery Nrepeat Nfreq filename keyword value ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
reax/c/species = style name of this command :l
Nevery = sample bond-order every this many timesteps :l
Nrepeat = # of bond-order samples used for calculating averages :l
Nfreq = calculate average bond-order every this many timesteps :l
filename = name of output file :l
zero or more keyword/value pairs may be appended :l
keyword = {cutoff} or {element} or {position} :l
{cutoff} value = I J Cutoff
I, J = atom types
Cutoff = Bond-order cutoff value for this pair of atom types
{element} value = Element1, Element2, ...
{position} value = posfreq filepos
posfreq = write position files every this many timestep
filepos = name of position output file :pre
:ule
[Examples:]
fix 1 all reax/c/species 10 10 100 species.out
fix 1 all reax/c/species 1 2 20 species.out cutoff 1 1 0.40 cutoff 1 2 0.55
fix 1 all reax/c/species 1 100 100 species.out element Au O H position 1000 AuOH.pos :pre
[Description:]
-Write out the chemical species information computed by the ReaxFF potential
-specified by "pair_style reax/c"_pair_reax_c.html. Bond-order values
-(either averaged or instantaneous, depending on value of {Nrepeat})
-are used to determine chemical bonds. Every {Nfreq} timesteps,
-chemical species information is written to {filename} as a two line output.
-The first line is a header containing labels. The second line consists
-of the following: timestep, total number of molecules,
-total number of distinct species, number of molecules of each species.
-The chemical formula of each species is given in the first line.
-
-Optional keyword {cutoff} can be assigned to change the minimum bond-order values
-used in identifying chemical bonds between pairs of atoms. Bond-order cutoffs
-should be carefully chosen, as bond-order cutoffs that are too small may include
-too many bonds (which will result in an error), while too-large cutoffs will
-result in fragmented molecules. The default cutoff of 0.3 usually gives good
-estimate.
-
-Optional keyword {element} can be used to specify the chemical symbol printed for
-each LAMMPS atom type. The number of symbols must match the number of LAMMPS atom types
-and each symbol must consist of 1 or 2 alphanumeric characters. Normally, these
-symbols should be chosen to match the chemical identity of each LAMMPS atom type,
-as specified using the "reax/c pair_coeff"_pair_reax_c.html command and
-the ReaxFF force field file.
-
-Optional keyword {position} writes center-of-mass positions of each identified
-molecules to file {filepos} every {posfreq} timesteps. The first line contains
-information on timestep, total number of molecules, total number of distinct
-species, and box dimensions. The second line is a header containing labels.
-From the third line downward, each molecule writes a line of output containing
-the following information: molecule ID, number of atoms in this molecule, chemical
-formula, total charge, and center-of-mass xyz positions of this molecule. The xyz
-positions are in fractional coordinates relative to the box dimensions.
-
-Keyword {position} output file {filepos} can contain the wildcard character "*".
-If the "*" character appears in {filepos}, then one file per snapshot is written
-at {posfreq} and the "*" character is replaced with the timestep value.
-For example, AuO.pos.* becomes AuO.pos.0, AuO.pos.1000, etc.
+Write out the chemical species information computed by the ReaxFF
+potential specified by "pair_style reax/c"_pair_reax_c.html.
+Bond-order values (either averaged or instantaneous, depending on
+value of {Nrepeat}) are used to determine chemical bonds. Every
+{Nfreq} timesteps, chemical species information is written to
+{filename} as a two line output. The first line is a header
+containing labels. The second line consists of the following:
+timestep, total number of molecules, total number of distinct species,
+number of molecules of each species. In this context, "species" means
+a unique molecule. The chemical formula of each species is given in
+the first line.
+
+Optional keyword {cutoff} can be assigned to change the minimum
+bond-order values used in identifying chemical bonds between pairs of
+atoms. Bond-order cutoffs should be carefully chosen, as bond-order
+cutoffs that are too small may include too many bonds (which will
+result in an error), while cutoffs that are too large will result in
+fragmented molecules. The default cutoff of 0.3 usually gives good
+results.
+
+The optional keyword {element} can be used to specify the chemical
+symbol printed for each LAMMPS atom type. The number of symbols must
+match the number of LAMMPS atom types and each symbol must consist of
+1 or 2 alphanumeric characters. Normally, these symbols should be
+chosen to match the chemical identity of each LAMMPS atom type, as
+specified using the "reax/c pair_coeff"_pair_reax_c.html command and
+the ReaxFF force field file.
+
+The optional keyword {position} writes center-of-mass positions of
+each identified molecules to file {filepos} every {posfreq} timesteps.
+The first line contains information on timestep, total number of
+molecules, total number of distinct species, and box dimensions. The
+second line is a header containing labels. From the third line
+downward, each molecule writes a line of output containing the
+following information: molecule ID, number of atoms in this molecule,
+chemical formula, total charge, and center-of-mass xyz positions of
+this molecule. The xyz positions are in fractional coordinates
+relative to the box dimensions.
+
+For the keyword {position}, the {filepos} is the name of the output
+file. It can contain the wildcard character "*". If the "*"
+character appears in {filepos}, then one file per snapshot is written
+at {posfreq} and the "*" character is replaced with the timestep
+value. For example, AuO.pos.* becomes AuO.pos.0, AuO.pos.1000, etc.
:line
The {Nevery}, {Nrepeat}, and {Nfreq} arguments specify on what
timesteps the bond-order values are sampled to get the average bond
order. The species analysis is performed using the average bond-order
-on timesteps
-that are a multiple of {Nfreq}. The average is over {Nrepeat}
-bond-order samples, computed in the preceding portion of the simulation every
-{Nevery} timesteps. {Nfreq} must be a multiple of {Nevery} and
-{Nevery} must be non-zero even if {Nrepeat} is 1. Also, the timesteps
-contributing to the average bond-order cannot overlap, i.e. Nfreq >
-(Nrepeat-1)*Nevery is required.
-
-For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then bond-order values on
-timesteps 90,92,94,96,98,100 will be used to compute the average bond-order
- for the species analysis output on timestep 100.
+on timesteps that are a multiple of {Nfreq}. The average is over
+{Nrepeat} bond-order samples, computed in the preceding portion of the
+simulation every {Nevery} timesteps. {Nfreq} must be a multiple of
+{Nevery} and {Nevery} must be non-zero even if {Nrepeat} is 1. Also,
+the timesteps contributing to the average bond-order cannot overlap,
+i.e. Nfreq > (Nrepeat-1)*Nevery is required.
+
+For example, if Nevery=2, Nrepeat=6, and Nfreq=100, then bond-order
+values on timesteps 90,92,94,96,98,100 will be used to compute the
+average bond-order for the species analysis output on timestep 100.
:line
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options
-are relevant to this fix. No global or per-atom quantities are stored
-by this fix for access by various "output
-commands"_Section_howto.html#howto_15. No parameter of this fix can
-be used with the {start/stop} keywords of the "run"_run.html command.
-This fix is not invoked during "energy minimization"_minimize.html.
+are relevant to this fix.
+
+This fix computes both a global vector of length 2 and a per-atom
+vector, either of which can be accessed by various "output
+commands"_Section_howto.html#howto_15. The values in the global
+vector are "intensive".
+
+The 2 values in the global vector are as follows:
+
+1 = total number of molecules
+2 = total number of distinct species :ul
+
+The per-atom vector stores the molecule ID for each atom as identified
+by the fix. If an atom is not in a molecule, its ID will be 0.
+For atoms in the same molecule, the molecule ID for all of them
+will be the same and will be equal to the smallest atom ID of
+any atom in the molecule.
+
+No parameter of this fix can be used with the {start/stop} keywords of
+the "run"_run.html command. This fix is not invoked during "energy
+minimization"_minimize.html.
[Restrictions:]
The fix species currently only works with
"pair_style reax/c"_pair_reax_c.html and it requires that the "pair_style
reax/c"_pair_reax_c.html be invoked. This fix is part of the
USER-REAXC package. It is only enabled if LAMMPS was built with that
package. See the "Making LAMMPS"_Section_start.html#start_3 section
for more info.
It should be possible to extend it to other reactive pair_styles (such as
"rebo"_pair_airebo.html, "airebo"_pair_airebo.html,
"comb"_pair_comb.html, and "bop"_pair_bop.html), but this has not yet been done.
[Related commands:]
"pair_style reax/c"_pair_reax_c.html, "fix
reax/bonds"_fix_reax_bonds.html
[Default:]
The default values for bond-order cutoffs are 0.3 for all I-J pairs. The
default element symbols are C, H, O, N. Position files are not written
by default.
-
diff --git a/doc/fix_restrain.html b/doc/fix_restrain.html
index 8cdb789a5..6c0f498fa 100644
--- a/doc/fix_restrain.html
+++ b/doc/fix_restrain.html
@@ -1,193 +1,193 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix restrain command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID restrain keyword args ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>restrain = style name of this fix command
<LI>one or more keyword/arg pairs may be appended
<LI>keyword = <I>bond</I> or <I>angle</I> or <I>dihedral</I>
<PRE> <I>bond</I> args = atom1 atom2 Kstart Kstop r0
atom1,atom2 = IDs of 2 atoms in bond
Kstart,Kstop = restraint coefficients at start/end of run (energy units)
r0 = equilibrium bond distance (distance units)
<I>angle</I> args = atom1 atom2 atom3 Kstart Kstop theta0
atom1,atom2,atom3 = IDs of 3 atoms in angle, atom2 = middle atom
Kstart,Kstop = restraint coefficients at start/end of run (energy units)
theta0 = equilibrium angle theta (degrees)
- <I>bond</I> args = atom1 atom2 atom3 atom4 Kstart Kstop phi0
+ <I>dihedral</I> args = atom1 atom2 atom3 atom4 Kstart Kstop phi0
atom1,atom2,atom3,atom4 = IDs of 4 atoms in dihedral in linear order
Kstart,Kstop = restraint coefficients at start/end of run (energy units)
phi0 = equilibrium dihedral angle phi (degrees)
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix holdem all restrain bond 45 48 2000.0 2000.0 2.75
fix holdem all restrain dihedral 1 2 3 4 2000.0 2000.0 120.0
fix holdem all restrain bond 45 48 2000.0 2000.0 2.75 dihedral 1 2 3 4 2000.0 2000.0 120.0
fix texas_holdem all restrain dihedral 1 2 3 4 0.0 2000.0 120.0 dihedral 1 2 3 5 0.0 2000.0 -120.0 dihedral 1 2 3 6 0.0 2000.0 0.0
</PRE>
<P><B>Description:</B>
</P>
<P>Restrain the motion of the specified sets of atoms by making them part
of a bond or angle or dihedral interaction whose strength can vary
over time during a simulation. This is functionally equivalent to
creating a bond or angle or dihedral for the same atoms in a data
file, as specified by the <A HREF = "read_data.html">read_data</A> command, albeit
with a time-varying pre-factor coefficient. For the purpose of
forcefield parameter-fitting or mapping a molecular potential energy
surface, this fix reduces the hassle and risk associated with
modifying data files. In other words, use this fix to temporarily
force a molecule to adopt a particular conformation. To create a
permanent bond or angle or dihedral, you should modify the data file.
</P>
<P>The group-ID specified by this fix is ignored.
</P>
<P>The second example above applies a restraint to hold the dihedral
angle formed by atoms 1, 2, 3, and 4 near 120 degrees using a constant
restraint coefficient. The fourth example applies similar restraints
to multiple dihedral angles using a restraint coefficient that
increases from 0.0 to 2000.0 over the course of the run.
</P>
<P>IMPORTANT NOTE: Adding a force to atoms implies a change in their
potential energy as they move due to the applied force field. For
dynamics via the <A HREF = "run.html">run</A> command, this energy can be added to
the system's potential energy for thermodynamic output (see below).
For energy minimization via the <A HREF = "minimize.html">minimize</A> command, this
energy must be added to the system's potential energy to formulate a
self-consistent minimization problem (see below).
</P>
<P>In order for a restraint to be effective, the restraint force must
typically be significantly larger than the forces associated with
conventional forcefield terms. If the restraint is applied during a
dynamics run (as opposed to during an energy minimization), a large
restraint coefficient can significantly reduce the stable timestep
size, especially if the atoms are initially far from the preferred
conformation. You may need to experiment to determine what value of K
works best for a given application.
</P>
<P>For the case of finding a minimum energy structure for a single
molecule with particular restratins (e.g. for fitting forcefield
parameters or constructing a potential energy surface), commands such
as the following may be useful:
</P>
<PRE># minimize molecule energy with restraints
velocity all create 600.0 8675309 mom yes rot yes dist gaussian
fix NVE all nve
fix TFIX all langevin 600.0 0.0 100 24601
fix REST all restrain dihedral 2 1 3 8 0.0 5000.0 $<I>angle1</I> dihedral 3 1 2 9 0.0 5000.0 $<I>angle2</I>
fix_modify REST energy yes
run 10000
fix TFIX all langevin 0.0 0.0 100 24601
fix REST all restrain dihedral 2 1 3 8 5000.0 5000.0 $<I>angle1</I> dihedral 3 1 2 9 5000.0 5000.0 $<I>angle2</I>
fix_modify REST energy yes
run 10000
# sanity check for convergence
minimize 1e-6 1e-9 1000 100000
# report unrestrained energies
unfix REST
run 0
</PRE>
<HR>
<P>The <I>bond</I> keyword applies a bond restraint to the specified atoms
using the same functional form used by the <A HREF = "bond_harmonic.html">bond_style
harmonic</A> command. The potential associated with
the restraint is
</P>
<CENTER><IMG SRC = "Eqs/bond_harmonic.jpg">
</CENTER>
<P>with the following coefficients:
</P>
<UL><LI>K (energy/distance^2)
<LI>r0 (distance)
</UL>
<P>K and r0 are specified with the fix. Note that the usual 1/2 factor
is included in K.
</P>
<HR>
<P>The <I>angle</I> keyword applies an angle restraint to the specified atoms
using the same functional form used by the <A HREF = "angle_harmonic.html">angle_style
harmonic</A> command. The potential associated with
the restraint is
</P>
<CENTER><IMG SRC = "Eqs/angle_harmonic.jpg">
</CENTER>
<P>with the following coefficients:
</P>
<UL><LI>K (energy/radian^2)
<LI>theta0 (degrees)
</UL>
<P>K and theta0 are specified with the fix. Note that the usual 1/2
factor is included in K.
</P>
<HR>
<P>The <I>dihedral</I> keyword applies a dihedral restraint to the specified
atoms using a simplified form of the function used by the
<A HREF = "dihedral_charmm.html">dihedral_style charmm</A> command. The potential
associated with the restraint is
</P>
<CENTER><IMG SRC = "Eqs/dihedral_charmm.jpg">
</CENTER>
<P>with the following coefficients:
</P>
<UL><LI>K (energy)
<LI>n = 1
<LI>d (degrees) = phi0 + 180
</UL>
<P>K and phi0 are specified with the fix. Note that the value of n is
hard-wired to 1. Also note that the energy will be a minimum when the
current dihedral angle phi is equal to phi0.
</P>
<HR>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>.
</P>
<P>The <A HREF = "fix_modify.html">fix_modify</A> <I>energy</I> option is supported by this
fix to add the potential energy associated with this fix to the
system's potential energy as part of <A HREF = "thermo_style.html">thermodynamic
output</A>.
</P>
<P>IMPORTANT NOTE: If you want the fictitious potential energy associated
with the added forces to be included in the total potential energy of
the system (the quantity being minimized), you MUST enable the
<A HREF = "fix_modify.html">fix_modify</A> <I>energy</I> option for this fix.
</P>
<P>This fix computes a global scalar, which can be accessed by various
<A HREF = "Section_howto.html#howto_15">output commands</A>. The scalar is the
potential energy for all the restraints as discussed above. The scalar
value calculated by this fix is "extensive".
</P>
<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command.
</P>
<P><B>Restrictions:</B> none
</P>
<P><B>Related commands:</B> none
</P>
<P><B>Default:</B> none
</P>
</HTML>
diff --git a/doc/fix_thermal_conductivity.html b/doc/fix_thermal_conductivity.html
index b7ba5f0c1..3c4314212 100644
--- a/doc/fix_thermal_conductivity.html
+++ b/doc/fix_thermal_conductivity.html
@@ -1,175 +1,175 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix thermal/conductivity command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID thermal/conductivity N edim Nbin keyword value ...
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>thermal/conductivity = style name of this fix command
<LI>N = perform kinetic energy exchange every N steps
<LI>edim = <I>x</I> or <I>y</I> or <I>z</I> = direction of kinetic energy transfer
<LI>Nbin = # of layers in edim direction (must be even number)
<LI>zero or more keyword/value pairs may be appended
<LI>keyword = <I>swap</I>
<PRE> <I>swap</I> value = Nswap = number of swaps to perform every N steps
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 1 all thermal/conductivity 100 z 20
fix 1 all thermal/conductivity 50 z 20 swap 2
</PRE>
<P><B>Description:</B>
</P>
<P>Use the Muller-Plathe algorithm described in <A HREF = "#Muller-Plathe">this
paper</A> to exchange kinetic energy between two particles
in different regions of the simulation box every N steps. This
induces a temperature gradient in the system. As described below this
-enables a thermal conductivity of the fluid to be calculated. This
+enables the thermal conductivity of a material to be calculated. This
algorithm is sometimes called a reverse non-equilibrium MD (reverse
NEMD) approach to computing thermal conductivity. This is because the
usual NEMD approach is to impose a temperature gradient on the system
and measure the response as the resulting heat flux. In the
Muller-Plathe method, the heat flux is imposed, and the temperature
gradient is the system's response.
</P>
<P>See the <A HREF = "compute_heat_flux.html">compute heat/flux</A> command for details
on how to compute thermal conductivity in an alternate way, via the
Green-Kubo formalism.
</P>
<P>The simulation box is divided into <I>Nbin</I> layers in the <I>edim</I>
direction, where the layer 1 is at the low end of that dimension and
the layer <I>Nbin</I> is at the high end. Every N steps, Nswap pairs of
atoms are chosen in the following manner. Only atoms in the fix group
are considered. The hottest Nswap atoms in layer 1 are selected.
Similarly, the coldest Nswap atoms in the "middle" layer (see below)
are selected. The two sets of Nswap atoms are paired up and their
velocities are exchanged. This effectively swaps their kinetic
energies, assuming their masses are the same. Over time, this induces
a temperature gradient in the system which can be measured using
commands such as the following, which writes the temperature profile
(assuming z = edim) to the file tmp.profile:
</P>
<PRE>compute ke all ke/atom
variable temp atom c_ke/1.5
fix 3 all ave/spatial 10 100 1000 z lower 0.05 v_temp &
file tmp.profile units reduced
</PRE>
<P>Note that by default, Nswap = 1, though this can be changed by the
optional <I>swap</I> keyword. Setting this parameter appropriately, in
conjunction with the swap rate N, allows the heat flux to be adjusted
across a wide range of values, and the kinetic energy to be exchanged
in large chunks or more smoothly.
</P>
<P>The "middle" layer for velocity swapping is defined as the <I>Nbin</I>/2 +
1 layer. Thus if <I>Nbin</I> = 20, the two swapping layers are 1 and 11.
This should lead to a symmetric temperature profile since the two
layers are separated by the same distance in both directions in a
periodic sense. This is why <I>Nbin</I> is restricted to being an even
number.
</P>
<P>As described below, the total kinetic energy transferred by these
swaps is computed by the fix and can be output. Dividing this
quantity by time and the cross-sectional area of the simulation box
yields a heat flux. The ratio of heat flux to the slope of the
temperature profile is proportional to the thermal conductivity of the
fluid, in appropriate units. See the <A HREF = "#Muller-Plathe">Muller-Plathe
paper</A> for details.
</P>
<P>IMPORTANT NOTE: If your system is periodic in the direction of the
heat flux, then the flux is going in 2 directions. This means the
effective heat flux in one direction is reduced by a factor of 2. You
will see this in the equations for thermal conductivity (kappa) in the
Muller-Plathe paper. LAMMPS is simply tallying kinetic energy which
does not account for whether or not your system is periodic; you must
use the value appropriately to yield a kappa for your system.
</P>
<P>IMPORTANT NOTE: After equilibration, if the temperature gradient you
observe is not linear, then you are likely swapping energy too
frequently and are not in a regime of linear response. In this case
you cannot accurately infer a thermal conductivity and should try
increasing the Nevery parameter.
</P>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
files</A>. None of the <A HREF = "fix_modify.html">fix_modify</A> options
are relevant to this fix.
</P>
<P>This fix computes a global scalar which can be accessed by various
<A HREF = "Section_howto.html#howto_15">output commands</A>. The scalar is the
cummulative kinetic energy transferred between the bottom and middle
of the simulation box (in the <I>edim</I> direction) is stored as a scalar
quantity by this fix. This quantity is zeroed when the fix is defined
and accumlates thereafter, once every N steps. The units of the
quantity are energy; see the <A HREF = "units.html">units</A> command for details.
The scalar value calculated by this fix is "intensive".
</P>
<P>No parameter of this fix can be used with the <I>start/stop</I> keywords of
the <A HREF = "run.html">run</A> command. This fix is not invoked during <A HREF = "minimize.html">energy
minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>This fix is part of the MISC package. It is only enabled if LAMMPS
was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P>Swaps conserve both momentum and kinetic energy, even if the masses of
the swapped atoms are not equal. Thus you should not need to
thermostat the system. If you do use a thermostat, you may want to
apply it only to the non-swapped dimensions (other than <I>vdim</I>).
</P>
<P>LAMMPS does not check, but you should not use this fix to swap the
kinetic energy of atoms that are in constrained molecules, e.g. via
<A HREF = "fix_shake.html">fix shake</A> or <A HREF = "fix_rigid.html">fix rigid</A>. This is
because application of the constraints will alter the amount of
transferred momentum. You should, however, be able to use flexible
molecules. See the <A HREF = "#Zhang">Zhang paper</A> for a discussion and results
of this idea.
</P>
<P>When running a simulation with large, massive particles or molecules
in a background solvent, you may want to only exchange kinetic energy
bewteen solvent particles.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_ave_spatial.html">fix ave/spatial</A>, <A HREF = "fix_viscosity.html">fix
viscosity</A>, <A HREF = "compute_heat_flux.html">compute
heat/flux</A>
</P>
<P><B>Default:</B>
</P>
<P>The option defaults are swap = 1.
</P>
<HR>
<A NAME = "Muller-Plathe"></A>
<P><B>(Muller-Plathe)</B> Muller-Plathe, J Chem Phys, 106, 6082 (1997).
</P>
<A NAME = "Zhang"></A>
<P><B>(Zhang)</B> Zhang, Lussetti, de Souza, Muller-Plathe, J Phys Chem B,
109, 15060-15067 (2005).
</P>
</HTML>
diff --git a/doc/fix_thermal_conductivity.txt b/doc/fix_thermal_conductivity.txt
index 77b937225..e5d9494ae 100644
--- a/doc/fix_thermal_conductivity.txt
+++ b/doc/fix_thermal_conductivity.txt
@@ -1,161 +1,161 @@
"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
fix thermal/conductivity command :h3
[Syntax:]
fix ID group-ID thermal/conductivity N edim Nbin keyword value ... :pre
ID, group-ID are documented in "fix"_fix.html command :ulb,l
thermal/conductivity = style name of this fix command :l
N = perform kinetic energy exchange every N steps :l
edim = {x} or {y} or {z} = direction of kinetic energy transfer :l
Nbin = # of layers in edim direction (must be even number) :l
zero or more keyword/value pairs may be appended :l
keyword = {swap} :l
{swap} value = Nswap = number of swaps to perform every N steps :pre
:ule
[Examples:]
fix 1 all thermal/conductivity 100 z 20
fix 1 all thermal/conductivity 50 z 20 swap 2 :pre
[Description:]
Use the Muller-Plathe algorithm described in "this
paper"_#Muller-Plathe to exchange kinetic energy between two particles
in different regions of the simulation box every N steps. This
induces a temperature gradient in the system. As described below this
-enables a thermal conductivity of the fluid to be calculated. This
+enables the thermal conductivity of a material to be calculated. This
algorithm is sometimes called a reverse non-equilibrium MD (reverse
NEMD) approach to computing thermal conductivity. This is because the
usual NEMD approach is to impose a temperature gradient on the system
and measure the response as the resulting heat flux. In the
Muller-Plathe method, the heat flux is imposed, and the temperature
gradient is the system's response.
See the "compute heat/flux"_compute_heat_flux.html command for details
on how to compute thermal conductivity in an alternate way, via the
Green-Kubo formalism.
The simulation box is divided into {Nbin} layers in the {edim}
direction, where the layer 1 is at the low end of that dimension and
the layer {Nbin} is at the high end. Every N steps, Nswap pairs of
atoms are chosen in the following manner. Only atoms in the fix group
are considered. The hottest Nswap atoms in layer 1 are selected.
Similarly, the coldest Nswap atoms in the "middle" layer (see below)
are selected. The two sets of Nswap atoms are paired up and their
velocities are exchanged. This effectively swaps their kinetic
energies, assuming their masses are the same. Over time, this induces
a temperature gradient in the system which can be measured using
commands such as the following, which writes the temperature profile
(assuming z = edim) to the file tmp.profile:
compute ke all ke/atom
variable temp atom c_ke/1.5
fix 3 all ave/spatial 10 100 1000 z lower 0.05 v_temp &
file tmp.profile units reduced :pre
Note that by default, Nswap = 1, though this can be changed by the
optional {swap} keyword. Setting this parameter appropriately, in
conjunction with the swap rate N, allows the heat flux to be adjusted
across a wide range of values, and the kinetic energy to be exchanged
in large chunks or more smoothly.
The "middle" layer for velocity swapping is defined as the {Nbin}/2 +
1 layer. Thus if {Nbin} = 20, the two swapping layers are 1 and 11.
This should lead to a symmetric temperature profile since the two
layers are separated by the same distance in both directions in a
periodic sense. This is why {Nbin} is restricted to being an even
number.
As described below, the total kinetic energy transferred by these
swaps is computed by the fix and can be output. Dividing this
quantity by time and the cross-sectional area of the simulation box
yields a heat flux. The ratio of heat flux to the slope of the
temperature profile is proportional to the thermal conductivity of the
fluid, in appropriate units. See the "Muller-Plathe
paper"_#Muller-Plathe for details.
IMPORTANT NOTE: If your system is periodic in the direction of the
heat flux, then the flux is going in 2 directions. This means the
effective heat flux in one direction is reduced by a factor of 2. You
will see this in the equations for thermal conductivity (kappa) in the
Muller-Plathe paper. LAMMPS is simply tallying kinetic energy which
does not account for whether or not your system is periodic; you must
use the value appropriately to yield a kappa for your system.
IMPORTANT NOTE: After equilibration, if the temperature gradient you
observe is not linear, then you are likely swapping energy too
frequently and are not in a regime of linear response. In this case
you cannot accurately infer a thermal conductivity and should try
increasing the Nevery parameter.
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options
are relevant to this fix.
This fix computes a global scalar which can be accessed by various
"output commands"_Section_howto.html#howto_15. The scalar is the
cummulative kinetic energy transferred between the bottom and middle
of the simulation box (in the {edim} direction) is stored as a scalar
quantity by this fix. This quantity is zeroed when the fix is defined
and accumlates thereafter, once every N steps. The units of the
quantity are energy; see the "units"_units.html command for details.
The scalar value calculated by this fix is "intensive".
No parameter of this fix can be used with the {start/stop} keywords of
the "run"_run.html command. This fix is not invoked during "energy
minimization"_minimize.html.
[Restrictions:]
This fix is part of the MISC package. It is only enabled if LAMMPS
was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
Swaps conserve both momentum and kinetic energy, even if the masses of
the swapped atoms are not equal. Thus you should not need to
thermostat the system. If you do use a thermostat, you may want to
apply it only to the non-swapped dimensions (other than {vdim}).
LAMMPS does not check, but you should not use this fix to swap the
kinetic energy of atoms that are in constrained molecules, e.g. via
"fix shake"_fix_shake.html or "fix rigid"_fix_rigid.html. This is
because application of the constraints will alter the amount of
transferred momentum. You should, however, be able to use flexible
molecules. See the "Zhang paper"_#Zhang for a discussion and results
of this idea.
When running a simulation with large, massive particles or molecules
in a background solvent, you may want to only exchange kinetic energy
bewteen solvent particles.
[Related commands:]
"fix ave/spatial"_fix_ave_spatial.html, "fix
viscosity"_fix_viscosity.html, "compute
heat/flux"_compute_heat_flux.html
[Default:]
The option defaults are swap = 1.
:line
:link(Muller-Plathe)
[(Muller-Plathe)] Muller-Plathe, J Chem Phys, 106, 6082 (1997).
:link(Zhang)
[(Zhang)] Zhang, Lussetti, de Souza, Muller-Plathe, J Phys Chem B,
109, 15060-15067 (2005).
diff --git a/doc/group.html b/doc/group.html
index ad8855f83..981539c2f 100644
--- a/doc/group.html
+++ b/doc/group.html
@@ -1,245 +1,251 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>group command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>group ID style args
</PRE>
<UL><LI>ID = user-defined name of the group
<LI>style = <I>delete</I> or <I>region</I> or <I>type</I> or <I>id</I> or <I>molecule</I> or <I>variable</I> or <I>subtract</I> or <I>union</I> or <I>intersect</I> or <I>dynamic</I> or <I>static</I>
<PRE> <I>delete</I> = no args
<I>region</I> args = region-ID
<I>type</I> or <I>id</I> or <I>molecule</I>
args = list of one or more atom types, atom IDs, or molecule IDs
any entry in list can be a sequence formatted as A:B or A:B:C where
A = starting index, B = ending index,
C = increment between indices, 1 if not specified
args = logical value
logical = "<" or "<=" or ">" or ">=" or "==" or "!="
value = an atom type or atom ID or molecule ID (depending on <I>style</I>)
args = logical value1 value2
logical = "<>"
value1,value2 = atom types or atom IDs or molecule IDs (depending on <I>style</I>)
<I>variable</I> args = variable-name
<I>subtract</I> args = two or more group IDs
<I>union</I> args = one or more group IDs
<I>intersect</I> args = two or more group IDs
<I>dynamic</I> args = parent-ID keyword value ...
one or more keyword/value pairs may be appended
keyword = <I>region</I> or <I>var</I> or <I>every</I>
<I>region</I> value = region-ID
<I>var</I> value = name of variable
<I>every</I> value = N = update group every this many timesteps
<I>static</I> = no args
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>group edge region regstrip
group water type 3 4
group sub id 10 25 50
group sub id 10 25 50 500:1000
group sub id 100:10000:10
group sub id <= 150
group polyA molecule <> 50 250
group hienergy variable eng
group boundary subtract all a2 a3
group boundary union lower upper
group boundary intersect upper flow
group boundary delete
group mine dynamic all region myRegion every 100
</PRE>
<P><B>Description:</B>
</P>
<P>Identify a collection of atoms as belonging to a group. The group ID
can then be used in other commands such as <A HREF = "fix.html">fix</A>,
<A HREF = "compute.html">compute</A>, <A HREF = "dump.html">dump</A>, or <A HREF = "velocity.html">velocity</A>
to act on those atoms together.
</P>
<P>If the group ID already exists, the group command adds the specified
atoms to the group.
</P>
<P>IMPORTANT NOTE: By default groups are static, meaning the atoms are
permanently assigned to the group. For example, if the <I>region</I> style
is used to assign atoms to a group, the atoms will remain in the group
even if they later move out of the region. As explained below, the
<I>dynamic</I> style can be used to make a group dynamic so that a periodic
determination is made as to which atoms are in the group. Since many
LAMMPS commands operate on groups of atoms, you should think carefully
about whether making a group dynamic makes sense for your model.
</P>
<P>A group with the ID <I>all</I> is predefined. All atoms belong to this
group. This group cannot be deleted, or made dynamic.
</P>
<P>The <I>delete</I> style removes the named group and un-assigns all atoms
that were assigned to that group. Since there is a restriction (see
below) that no more than 32 groups can be defined at any time, the
<I>delete</I> style allows you to remove groups that are no longer needed,
so that more can be specified. You cannot delete a group if it has
been used to define a current <A HREF = "fix.html">fix</A> or <A HREF = "compute.html">compute</A>
or <A HREF = "dump.html">dump</A>.
</P>
<P>The <I>region</I> style puts all atoms in the region volume into the group.
Note that this is a static one-time assignment. The atoms remain
assigned (or not assigned) to the group even in they later move out of
the region volume.
</P>
<P>The <I>type</I>, <I>id</I>, and <I>molecule</I> styles put all atoms with the
specified atom types, atom IDs, or molecule IDs into the group. These
3 styles can use arguments specified in one of two formats.
</P>
<P>The first format is a list of values (types or IDs). For example, the
2nd command in the examples above puts all atoms of type 3 or 4 into
the group named <I>water</I>. Each entry in the list can be a
colon-separated sequence A:B or A:B:C, as in two of the examples
above. A "sequence" generates a sequence of values (types or IDs),
with an optional increment. The first example with 500:1000 has the
default increment of 1 and would add all atom IDs from 500 to 1000
(inclusive) to the group sub, along with 10,25,50 since they also
appear in the list of values. The second example with 100:10000:10
uses an increment of 10 and would thus would add atoms IDs
100,110,120, ... 9990,10000 to the group sub.
</P>
<P>The second format is a <I>logical</I> followed by one or two values (type
or ID). The 7 valid logicals are listed above. All the logicals
except <> take a single argument. The 3rd example above adds all
atoms with IDs from 1 to 150 to the group named <I>sub</I>. The logical <>
means "between" and takes 2 arguments. The 4th example above adds all
atoms belonging to molecules with IDs from 50 to 250 (inclusive) to
the group named polyA.
</P>
<P>The <I>variable</I> style evaluates a variable to determine which atoms to
add to the group. It must be an <A HREF = "variable.html">atom-style variable</A>
previously defined in the input script. If the variable evaluates
to a non-zero value for a particular atom, then that atom is added
to the specified group.
</P>
<P>Atom-style variables can specify formulas that include thermodynamic
quantities, per-atom values such as atom coordinates, or per-atom
quantities calculated by computes, fixes, or other variables. They
can also include Boolean logic where 2 numeric values are compared to
yield a 1 or 0 (effectively a true or false). Thus using the
<I>variable</I> style, is a general way to flag specific atoms to include
or exclude from a group.
</P>
<P>For example, these lines define a variable "eatom" that calculates the
potential energy of each atom and includes it in the group if its
potential energy is above the threshhold value -3.0.
</P>
<PRE>compute 1 all pe/atom
compute 2 all reduce sum c_1
thermo_style custom step temp pe c_2
run 0
</PRE>
<PRE>variable eatom atom "c_1 > -3.0"
group hienergy variable eatom
</PRE>
<P>Note that these lines
</P>
<PRE>compute 2 all reduce sum c_1
thermo_style custom step temp pe c_2
run 0
</PRE>
<P>are necessary to insure that the "eatom" variable is current when the
group command invokes it. Because the eatom variable computes the
per-atom energy via the pe/atom compute, it will only be current if a
run has been performed which evaluated pairwise energies, and the
pe/atom compute was actually invoked during the run. Printing the
thermodyanmic info for compute 2 insures that this is the case, since
it sums the pe/atom compute values (in the reduce compute) to output
them to the screen. See the "Variable Accuracy" section of the
<A HREF = "variable.html">variable</A> doc page for more details on insuring that
variables are current when they are evaluated between runs.
</P>
<P>The <I>subtract</I> style takes a list of two or more existing group names
as arguments. All atoms that belong to the 1st group, but not to any
of the other groups are added to the specified group.
</P>
<P>The <I>union</I> style takes a list of one or more existing group names as
arguments. All atoms that belong to any of the listed groups are
added to the specified group.
</P>
<P>The <I>intersect</I> style takes a list of two or more existing group names
as arguments. Atoms that belong to every one of the listed groups are
added to the specified group.
</P>
<HR>
<P>The <I>dynamic</I> style flags an existing or new group as dynamic. This
means atoms will be (re)assigned to the group periodically as a
simulation runs. This is in contrast to static groups where atoms are
permanently assigned to the group. The way the assignment occurs is
as follows. Only atoms in the group specified as the parent group via
the parent-ID are initially assigned to the dynamic group. If the
<I>region</I> keyword is used, atoms not in the specified region are
removed from the dynamic group. If the <I>var</I> keyword is used, the
variable name must be an atom-style or atomfile-style variable. The
variable is evaluated and atoms whose per-atom values are 0.0, are
removed from the dynamic group.
</P>
<P>The assignment of atoms to a dynamic group is done at the beginning of
each run and on every timestep that is a multiple of <I>N</I>, which is the
argument for the <I>every</I> keyword (N = 1 is the default). For an
energy minimization, via the <A HREF = "minimize.html">minimize</A> command, an
assignement is made at the beginning of the minimization, but not
during the iterations of the minimizer.
</P>
<P>The point in the timestep at which atoms are assigned to a dynamic
group is after the initial stage of velocity Verlet time integration
has been performed, and before neighbor lists or forces are computed.
This is the point in the timestep where atom positions have just
changed due to the time integration, so the region criterion should be
accurate, if applied.
</P>
<P>Here is an example of using a dynamic group to shrink the set of atoms
being integrated by using a spherical region with a variable radius
(shrinking from 18 to 5 over the course of the run). This could be
used to model a quench of the system, freezing atoms outside the
shrinking sphere, then converting the remaining atoms to a static
group and running further.
</P>
<PRE>variable nsteps equal 5000
variable rad equal 18-(step/v_nsteps)*(18-5)
region ss sphere 20 20 0 v_rad
group mobile dynamic all region ss
fix 1 mobile nve
run $<I>nsteps</I>
group mobile static
run $<I>nsteps</I>
</PRE>
+<P>IMPORTANT NOTE: All fixes and computes take a group ID as an argument,
+but they do not all allow for use of a dynamic group. If you get an
+error message that this is not allowed, but feel that it should be for
+the fix or compute in question, then please post your reasoning to the
+LAMMPS mail list and we can change it.
+</P>
<P>The <I>static</I> style removes the setting for a dynamic group, converting
it to a static group (the default). The atoms in the static group are
those currently in the dynamic group.
</P>
<HR>
<P><B>Restrictions:</B>
</P>
<P>There can be no more than 32 groups defined at one time, including
"all".
</P>
<P>The parent group of a dynamic group cannot itself be a dynamic group.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "dump.html">dump</A>, <A HREF = "fix.html">fix</A>, <A HREF = "region.html">region</A>,
<A HREF = "velocity.html">velocity</A>
</P>
<P><B>Default:</B>
</P>
<P>All atoms belong to the "all" group.
</P>
</HTML>
diff --git a/doc/group.txt b/doc/group.txt
index c7551cf43..5e0183637 100644
--- a/doc/group.txt
+++ b/doc/group.txt
@@ -1,239 +1,245 @@
"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
group command :h3
[Syntax:]
group ID style args :pre
ID = user-defined name of the group :ulb,l
style = {delete} or {region} or {type} or {id} or {molecule} or {variable} or \
{subtract} or {union} or {intersect} or {dynamic} or {static} :l
{delete} = no args
{region} args = region-ID
{type} or {id} or {molecule}
args = list of one or more atom types, atom IDs, or molecule IDs
any entry in list can be a sequence formatted as A:B or A:B:C where
A = starting index, B = ending index,
C = increment between indices, 1 if not specified
args = logical value
logical = "<" or "<=" or ">" or ">=" or "==" or "!="
value = an atom type or atom ID or molecule ID (depending on {style})
args = logical value1 value2
logical = "<>"
value1,value2 = atom types or atom IDs or molecule IDs (depending on {style})
{variable} args = variable-name
{subtract} args = two or more group IDs
{union} args = one or more group IDs
{intersect} args = two or more group IDs
{dynamic} args = parent-ID keyword value ...
one or more keyword/value pairs may be appended
keyword = {region} or {var} or {every}
{region} value = region-ID
{var} value = name of variable
{every} value = N = update group every this many timesteps
{static} = no args :pre
:ule
[Examples:]
group edge region regstrip
group water type 3 4
group sub id 10 25 50
group sub id 10 25 50 500:1000
group sub id 100:10000:10
group sub id <= 150
group polyA molecule <> 50 250
group hienergy variable eng
group boundary subtract all a2 a3
group boundary union lower upper
group boundary intersect upper flow
group boundary delete
group mine dynamic all region myRegion every 100 :pre
[Description:]
Identify a collection of atoms as belonging to a group. The group ID
can then be used in other commands such as "fix"_fix.html,
"compute"_compute.html, "dump"_dump.html, or "velocity"_velocity.html
to act on those atoms together.
If the group ID already exists, the group command adds the specified
atoms to the group.
IMPORTANT NOTE: By default groups are static, meaning the atoms are
permanently assigned to the group. For example, if the {region} style
is used to assign atoms to a group, the atoms will remain in the group
even if they later move out of the region. As explained below, the
{dynamic} style can be used to make a group dynamic so that a periodic
determination is made as to which atoms are in the group. Since many
LAMMPS commands operate on groups of atoms, you should think carefully
about whether making a group dynamic makes sense for your model.
A group with the ID {all} is predefined. All atoms belong to this
group. This group cannot be deleted, or made dynamic.
The {delete} style removes the named group and un-assigns all atoms
that were assigned to that group. Since there is a restriction (see
below) that no more than 32 groups can be defined at any time, the
{delete} style allows you to remove groups that are no longer needed,
so that more can be specified. You cannot delete a group if it has
been used to define a current "fix"_fix.html or "compute"_compute.html
or "dump"_dump.html.
The {region} style puts all atoms in the region volume into the group.
Note that this is a static one-time assignment. The atoms remain
assigned (or not assigned) to the group even in they later move out of
the region volume.
The {type}, {id}, and {molecule} styles put all atoms with the
specified atom types, atom IDs, or molecule IDs into the group. These
3 styles can use arguments specified in one of two formats.
The first format is a list of values (types or IDs). For example, the
2nd command in the examples above puts all atoms of type 3 or 4 into
the group named {water}. Each entry in the list can be a
colon-separated sequence A:B or A:B:C, as in two of the examples
above. A "sequence" generates a sequence of values (types or IDs),
with an optional increment. The first example with 500:1000 has the
default increment of 1 and would add all atom IDs from 500 to 1000
(inclusive) to the group sub, along with 10,25,50 since they also
appear in the list of values. The second example with 100:10000:10
uses an increment of 10 and would thus would add atoms IDs
100,110,120, ... 9990,10000 to the group sub.
The second format is a {logical} followed by one or two values (type
or ID). The 7 valid logicals are listed above. All the logicals
except <> take a single argument. The 3rd example above adds all
atoms with IDs from 1 to 150 to the group named {sub}. The logical <>
means "between" and takes 2 arguments. The 4th example above adds all
atoms belonging to molecules with IDs from 50 to 250 (inclusive) to
the group named polyA.
The {variable} style evaluates a variable to determine which atoms to
add to the group. It must be an "atom-style variable"_variable.html
previously defined in the input script. If the variable evaluates
to a non-zero value for a particular atom, then that atom is added
to the specified group.
Atom-style variables can specify formulas that include thermodynamic
quantities, per-atom values such as atom coordinates, or per-atom
quantities calculated by computes, fixes, or other variables. They
can also include Boolean logic where 2 numeric values are compared to
yield a 1 or 0 (effectively a true or false). Thus using the
{variable} style, is a general way to flag specific atoms to include
or exclude from a group.
For example, these lines define a variable "eatom" that calculates the
potential energy of each atom and includes it in the group if its
potential energy is above the threshhold value -3.0.
compute 1 all pe/atom
compute 2 all reduce sum c_1
thermo_style custom step temp pe c_2
run 0 :pre
variable eatom atom "c_1 > -3.0"
group hienergy variable eatom :pre
Note that these lines
compute 2 all reduce sum c_1
thermo_style custom step temp pe c_2
run 0 :pre
are necessary to insure that the "eatom" variable is current when the
group command invokes it. Because the eatom variable computes the
per-atom energy via the pe/atom compute, it will only be current if a
run has been performed which evaluated pairwise energies, and the
pe/atom compute was actually invoked during the run. Printing the
thermodyanmic info for compute 2 insures that this is the case, since
it sums the pe/atom compute values (in the reduce compute) to output
them to the screen. See the "Variable Accuracy" section of the
"variable"_variable.html doc page for more details on insuring that
variables are current when they are evaluated between runs.
The {subtract} style takes a list of two or more existing group names
as arguments. All atoms that belong to the 1st group, but not to any
of the other groups are added to the specified group.
The {union} style takes a list of one or more existing group names as
arguments. All atoms that belong to any of the listed groups are
added to the specified group.
The {intersect} style takes a list of two or more existing group names
as arguments. Atoms that belong to every one of the listed groups are
added to the specified group.
:line
The {dynamic} style flags an existing or new group as dynamic. This
means atoms will be (re)assigned to the group periodically as a
simulation runs. This is in contrast to static groups where atoms are
permanently assigned to the group. The way the assignment occurs is
as follows. Only atoms in the group specified as the parent group via
the parent-ID are initially assigned to the dynamic group. If the
{region} keyword is used, atoms not in the specified region are
removed from the dynamic group. If the {var} keyword is used, the
variable name must be an atom-style or atomfile-style variable. The
variable is evaluated and atoms whose per-atom values are 0.0, are
removed from the dynamic group.
The assignment of atoms to a dynamic group is done at the beginning of
each run and on every timestep that is a multiple of {N}, which is the
argument for the {every} keyword (N = 1 is the default). For an
energy minimization, via the "minimize"_minimize.html command, an
assignement is made at the beginning of the minimization, but not
during the iterations of the minimizer.
The point in the timestep at which atoms are assigned to a dynamic
group is after the initial stage of velocity Verlet time integration
has been performed, and before neighbor lists or forces are computed.
This is the point in the timestep where atom positions have just
changed due to the time integration, so the region criterion should be
accurate, if applied.
Here is an example of using a dynamic group to shrink the set of atoms
being integrated by using a spherical region with a variable radius
(shrinking from 18 to 5 over the course of the run). This could be
used to model a quench of the system, freezing atoms outside the
shrinking sphere, then converting the remaining atoms to a static
group and running further.
variable nsteps equal 5000
variable rad equal 18-(step/v_nsteps)*(18-5)
region ss sphere 20 20 0 v_rad
group mobile dynamic all region ss
fix 1 mobile nve
run ${nsteps}
group mobile static
run ${nsteps} :pre
+IMPORTANT NOTE: All fixes and computes take a group ID as an argument,
+but they do not all allow for use of a dynamic group. If you get an
+error message that this is not allowed, but feel that it should be for
+the fix or compute in question, then please post your reasoning to the
+LAMMPS mail list and we can change it.
+
The {static} style removes the setting for a dynamic group, converting
it to a static group (the default). The atoms in the static group are
those currently in the dynamic group.
:line
[Restrictions:]
There can be no more than 32 groups defined at one time, including
"all".
The parent group of a dynamic group cannot itself be a dynamic group.
[Related commands:]
"dump"_dump.html, "fix"_fix.html, "region"_region.html,
"velocity"_velocity.html
[Default:]
All atoms belong to the "all" group.
diff --git a/doc/pair_coul_diel.html b/doc/pair_coul_diel.html
index c7ce1de68..a5f97bce4 100644
--- a/doc/pair_coul_diel.html
+++ b/doc/pair_coul_diel.html
@@ -1,118 +1,120 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>pair_style coul/diel command
</H3>
+<H3>pair_style coul/diel/omp command
+</H3>
<P><B>Syntax:</B>
</P>
<PRE>pair_style coul/diel cutoff
</PRE>
<P>cutoff = global cutoff (distance units)
</P>
<P><B>Examples:</B>
</P>
<PRE>pair_style coul/diel 3.5
pair_coeff 1 4 78. 1.375 0.112
</PRE>
<P><B>Description:</B>
</P>
<P>Style <I>coul/diel</I> computes a Coulomb correction for implict solvent
ion interactions in which the dielectric perimittivity is distance dependent.
The dielectric permittivity epsilon_D(r) connects to limiting regimes:
One limit is defined by a small dielectric permittivity (close to vacuum)
at or close to contact seperation between the ions. At larger separations
the dielectric permittivity reaches a bulk value used in the regular Coulomb
interaction coul/long or coul/cut.
The transition is modeled by a hyperbolic function which is incorporated
in the Coulomb correction term for small ion separations as follows
</P>
<CENTER><IMG SRC = "Eqs/pair_coul_diel.jpg">
</CENTER>
<P>where r_me is the inflection point of epsilon_D(r) and sigma_e is a slope
defining length scale. C is the same Coulomb conversion factor as in the
pair_styles coul/cut, coul/long, and coul/debye. In this way the Coulomb
interaction between ions is corrected at small distances r. The lower
limit of epsilon_D(r->0)=5.2 due to dielectric saturation <A HREF = "#Stiles">(Stiles)</A>
while the Coulomb interaction reaches its bulk limit by setting
epsilon_D(r->\infty)=epsilon, the bulk value of the solvent which is 78
for water at 298K.
</P>
<P>Examples of the use of this type of Coulomb interaction include implicit
solvent simulations of salt ions
<A HREF = "#Lenart">(Lenart)</A> and of ionic surfactants <A HREF = "#Jusufi">(Jusufi)</A>.
Note that this potential is only reasonable for implicit solvent simulations
and in combiantion with coul/cut or coul/long. It is also usually combined
with gauss/cut, see <A HREF = "#Lenart">(Lenart)</A> or <A HREF = "#Jusufi">(Jusufi)</A>.
</P>
<P>The following coefficients must be defined for each pair of atom
types via the <A HREF = "pair_coeff.html">pair_coeff</A> command as in the example
above, or in the data file or restart files read by the
<A HREF = "read_data.html">read_data</A> or <A HREF = "read_restart.html">read_restart</A>
commands:
</P>
<UL><LI>epsilon (no units)
<LI>r_me (distance units)
<LI>sigma_e (distance units)
</UL>
<P>The global cutoff (r_c) specified in the pair_style command is used.
</P>
<HR>
<P><B>Mixing, shift, table, tail correction, restart, rRESPA info</B>:
</P>
<P>This pair style does not support parameter mixing. Coefficients must be given explicitly for each type of particle pairs.
</P>
<P>This pair style supports the <A HREF = "pair_modify.html">pair_modify</A> shift
option for the energy of the Gauss-potential portion of the pair
interaction.
</P>
<P>The <A HREF = "pair_modify.html">pair_modify</A> table option is not relevant
for this pair style.
</P>
<P>This pair style does not support the <A HREF = "pair_modify.html">pair_modify</A>
tail option for adding long-range tail corrections to energy and
pressure.
</P>
<P>This pair style can only be used via the <I>pair</I> keyword of the
<A HREF = "run_style.html">run_style respa</A> command. It does not support the
<I>inner</I>, <I>middle</I>, <I>outer</I> keywords.
</P>
<P><B>Restrictions:</B>
</P>
<P>This style is part of the "user-misc" package. It is only enabled
if LAMMPS was built with that package. See the <A HREF = "Section_start.html#2_3">Making
LAMMPS</A> section for more info.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "pair_coeff.html">pair_coeff</A>
<A HREF = "pair_gauss.html">pair_style gauss/cut</A>
</P>
<P><B>Default:</B> none
</P>
<HR>
<A NAME = "Stiles"></A>
<P><B>(Stiles)</B> Stiles , Hubbard, and Kayser, J Chem Phys, 77,
6189 (1982).
</P>
<A NAME = "Lenart"></A>
<P><B>(Lenart)</B> Lenart , Jusufi, and Panagiotopoulos, J Chem Phys, 126,
044509 (2007).
</P>
<A NAME = "Jusufi"></A>
<P><B>(Jusufi)</B> Jusufi, Hynninen, and Panagiotopoulos, J Phys Chem B, 112,
13783 (2008).
</P>
</HTML>
diff --git a/doc/pair_lj_long.html b/doc/pair_lj_long.html
index c4c62c459..350c2a221 100644
--- a/doc/pair_lj_long.html
+++ b/doc/pair_lj_long.html
@@ -1,234 +1,234 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>pair_style lj/long/coul/long command
</H3>
<H3>pair_style lj/long/coul/long/omp command
</H3>
<H3>pair_style lj/long/coul/long/opt command
</H3>
<H3>pair_style lj/long/tip4p/long command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>pair_style style args
</PRE>
<UL><LI>style = <I>lj/long/coul/long</I> or <I>lj/long/tip4p/long</I>
<LI>args = list of arguments for a particular style
</UL>
<PRE> <I>lj/long/coul/long</I> args = flag_lj flag_coul cutoff (cutoff2)
flag_lj = <I>long</I> or <I>cut</I> or <I>off</I>
<I>long</I> = use Kspace long-range summation for dispersion 1/r^6 term
<I>cut</I> = use a cutoff on dispersion 1/r^6 term
<I>off</I> = omit disperion 1/r^6 term entirely
flag_coul = <I>long</I> or <I>off</I>
<I>long</I> = use Kspace long-range summation for Coulombic 1/r term
<I>off</I> = omit Coulombic term
cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
cutoff2 = global cutoff for Coulombic (optional) (distance units)
- <I>lj/cut/tip4p/long</I> args = flag_lj flag_coul otype htype btype atype qdist cutoff (cutoff2)
+ <I>lj/long/tip4p/long</I> args = flag_lj flag_coul otype htype btype atype qdist cutoff (cutoff2)
flag_lj = <I>long</I> or <I>cut</I>
<I>long</I> = use Kspace long-range summation for dispersion 1/r^6 term
<I>cut</I> = use a cutoff
flag_coul = <I>long</I> or <I>off</I>
<I>long</I> = use Kspace long-range summation for Coulombic 1/r term
<I>off</I> = omit Coulombic term
otype,htype = atom types for TIP4P O and H
btype,atype = bond and angle types for TIP4P waters
qdist = distance from O atom to massless charge (distance units)
cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
cutoff2 = global cutoff for Coulombic (optional) (distance units)
</PRE>
<P><B>Examples:</B>
</P>
<PRE>pair_style lj/long/coul/long cut off 2.5
pair_style lj/long/coul/long cut long 2.5 4.0
pair_style lj/long/coul/long long long 2.5 4.0
pair_coeff * * 1 1
pair_coeff 1 1 1 3 4
</PRE>
<PRE>pair_style lj/long/tip4p/long long long 1 2 7 8 0.15 12.0
pair_style lj/long/tip4p/long long long 1 2 7 8 0.15 12.0 10.0
pair_coeff * * 100.0 3.0
pair_coeff 1 1 100.0 3.5 9.0
</PRE>
<P><B>Description:</B>
</P>
<P>Style <I>lj/long/coul/long</I> computes the standard 12/6 Lennard-Jones and
Coulombic potentials, given by
</P>
<CENTER><IMG SRC = "Eqs/pair_lj.jpg">
</CENTER>
<CENTER><IMG SRC = "Eqs/pair_coulomb.jpg">
</CENTER>
<P>where C is an energy-conversion constant, Qi and Qj are the charges on
the 2 atoms, epsilon is the dielectric constant which can be set by
the <A HREF = "dielectric.html">dielectric</A> command, and Rc is the cutoff. If
one cutoff is specified in the pair_style command, it is used for both
the LJ and Coulombic terms. If two cutoffs are specified, they are
used as cutoffs for the LJ and Coulombic terms respectively.
</P>
<P>The purpose of this pair style is to capture long-range interactions
resulting from both attractive 1/r^6 Lennard-Jones and Coulombic 1/r
interactions. This is done by use of the <I>flag_lj</I> and <I>flag_coul</I>
settings. The <A HREF = "#Veld">In 't Veld</A> paper has more details on when it is
appropriate to include long-range 1/r^6 interactions, using this
potential.
</P>
-<P>Style <I>lj/cut/tip4p/long</I> implements the TIP4P water model of
+<P>Style <I>lj/long/tip4p/long</I> implements the TIP4P water model of
<A HREF = "#Jorgensen">(Jorgensen)</A>, which introduces a massless site located a
short distance away from the oxygen atom along the bisector of the HOH
angle. The atomic types of the oxygen and hydrogen atoms, the bond
and angle types for OH and HOH interactions, and the distance to the
massless charge site are specified as pair_style arguments.
</P>
<P>IMPORTANT NOTE: For each TIP4P water molecule in your system, the atom
IDs for the O and 2 H atoms must be consecutive, with the O atom
first. This is to enable LAMMPS to "find" the 2 H atoms associated
with each O atom. For example, if the atom ID of an O atom in a TIP4P
water molecule is 500, then its 2 H atoms must have IDs 501 and 502.
</P>
<P>See the <A HREF = "Section_howto.html#howto_8">howto section</A> for more
information on how to use the TIP4P pair style. Note that the
neighobr list cutoff for Coulomb interactions is effectively extended
by a distance 2*qdist when using the TIP4P pair style, to account for
the offset distance of the fictitious charges on O atoms in water
molecules. Thus it is typically best in an efficiency sense to use a
LJ cutoff >= Coulomb cutoff + 2*qdist, to shrink the size of the
neighbor list. This leads to slightly larger cost for the long-range
calculation, so you can test the trade-off for your model.
</P>
<P>If <I>flag_lj</I> is set to <I>long</I>, no cutoff is used on the LJ 1/r^6
dispersion term. The long-range portion is calculated by using the
<A HREF = "kspace_style.html">kspace_style ewald/n</A> command. The specified LJ
cutoff then determines which portion of the LJ interactions are
computed directly by the pair potential versus which part is computed
in reciprocal space via the Kspace style. If <I>flag_lj</I> is set to
<I>cut</I>, the LJ interactions are simply cutoff, as with <A HREF = "pair_lj.html">pair_style
lj/cut</A>. If <I>flag_lj</I> is set to
<I>off</I>, LJ interactions are not computed at all.
</P>
<P>If <I>flag_coul</I> is set to <I>long</I>, no cutoff is used on the Coulombic
interactions. The long-range portion is calculated by using any
style, including <I>ewald/n</I> of the <A HREF = "kspace_style.html">kspace_style</A>
command. Note that if <I>flag_lj</I> is also set to long, then only the
<I>ewald/n</I> KSpace style can perform the long-range calculations for
both the LJ and Coulombic interactions. If <I>flag_coul</I> is set to
<I>off</I>, Coulombic interactions are not computed at all.
</P>
<P>The following coefficients must be defined for each pair of atoms
types via the <A HREF = "pair_coeff.html">pair_coeff</A> command as in the examples
above, or in the data file or restart files read by the
<A HREF = "read_data.html">read_data</A> or <A HREF = "read_restart.html">read_restart</A>
commands, or by mixing as described below:
</P>
<UL><LI>epsilon (energy units)
<LI>sigma (distance units)
<LI>cutoff1 (distance units)
<LI>cutoff2 (distance units)
</UL>
<P>Note that sigma is defined in the LJ formula as the zero-crossing
distance for the potential, not as the energy minimum at 2^(1/6)
sigma.
</P>
<P>The latter 2 coefficients are optional. If not specified, the global
LJ and Coulombic cutoffs specified in the pair_style command are used.
If only one cutoff is specified, it is used as the cutoff for both LJ
and Coulombic interactions for this type pair. If both coefficients
are specified, they are used as the LJ and Coulombic cutoffs for this
type pair.
</P>
<P>Note that if you are using <I>flag_lj</I> set to <I>long</I>, you
cannot specify a LJ cutoff for an atom type pair, since only one
global LJ cutoff is allowed. Similarly, if you are using <I>flag_coul</I>
set to <I>long</I>, you cannot specify a Coulombic cutoff for an atom type
pair, since only one global Coulombic cutoff is allowed.
</P>
<P>For <I>lj/long/tip4p/long</I> only the LJ cutoff can be specified
since a Coulombic cutoff cannot be specified for an individual I,J
type pair. All type pairs use the same global Coulombic cutoff
specified in the pair_style command.
</P>
<HR>
<P>Styles with a <I>cuda</I>, <I>gpu</I>, <I>omp</I>, or <I>opt</I> suffix are functionally
the same as the corresponding style without the suffix. They have
been optimized to run faster, depending on your available hardware, as
discussed in <A HREF = "Section_accelerate.html">Section_accelerate</A> of the
manual. The accelerated styles take the same arguments and should
produce the same results, except for round-off and precision issues.
</P>
<P>These accelerated styles are part of the USER-CUDA, GPU, USER-OMP and OPT
packages, respectively. They are only enabled if LAMMPS was built with
those packages. See the <A HREF = "Section_start.html#start_3">Making LAMMPS</A>
section for more info.
</P>
<P>You can specify the accelerated styles explicitly in your input script
by including their suffix, or you can use the <A HREF = "Section_start.html#start_7">-suffix command-line
switch</A> when you invoke LAMMPS, or you can
use the <A HREF = "suffix.html">suffix</A> command in your input script.
</P>
<P>See <A HREF = "Section_accelerate.html">Section_accelerate</A> of the manual for
more instructions on how to use the accelerated styles effectively.
</P>
<HR>
<P><B>Mixing, shift, table, tail correction, restart, rRESPA info</B>:
</P>
<P>For atom type pairs I,J and I != J, the epsilon and sigma coefficients
and cutoff distance for all of the lj/long pair styles can be mixed.
The default mix value is <I>geometric</I>. See the "pair_modify" command
for details.
</P>
<P>These pair styles support the <A HREF = "pair_modify.html">pair_modify</A> shift
option for the energy of the Lennard-Jones portion of the pair
interaction, assuming <I>flag_lj</I> is <I>cut</I>.
</P>
<P>These pair styles support the <A HREF = "pair_modify.html">pair_modify</A> table and
table/disp options since they can tabulate the short-range portion of
the long-range Coulombic and dispersion interactions.
</P>
<P>Thes pair styles do not support the <A HREF = "pair_modify.html">pair_modify</A>
tail option for adding a long-range tail correction to the
Lennard-Jones portion of the energy and pressure.
</P>
<P>These pair styles write their information to <A HREF = "restart.html">binary restart
files</A>, so pair_style and pair_coeff commands do not need
to be specified in an input script that reads a restart file.
</P>
<P>The pair lj/long/coul/long styles support the use of the <I>inner</I>,
<I>middle</I>, and <I>outer</I> keywords of the <A HREF = "run_style.html">run_style respa</A>
command, meaning the pairwise forces can be partitioned by distance at
different levels of the rRESPA hierarchy. See the
<A HREF = "run_style.html">run_style</A> command for details.
</P>
<HR>
<P><B>Restrictions:</B>
</P>
<P>These styles are part of the KSPACE package. They are only enabled if
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info. Note that
the KSPACE package is installed by default.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "pair_coeff.html">pair_coeff</A>
</P>
<P><B>Default:</B> none
</P>
<HR>
<A NAME = "Veld"></A>
<P><B>(In 't Veld)</B> In 't Veld, Ismail, Grest, J Chem Phys (accepted) (2007).
</P>
</HTML>
diff --git a/doc/pair_reax_c.html b/doc/pair_reax_c.html
index a9d78ac2a..49e0e59e1 100644
--- a/doc/pair_reax_c.html
+++ b/doc/pair_reax_c.html
@@ -1,327 +1,323 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>pair_style reax/c command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>pair_style reax/c cfile keyword value
</PRE>
<UL><LI>cfile = NULL or name of a control file
<LI>zero or more keyword/value pairs may be appended
<PRE>keyword = <I>checkqeq</I> or <I>lgvdw</I> or <I>safezone</I> or <I>mincap</I>
<I>checkqeq</I> value = <I>yes</I> or <I>no</I> = whether or not to require qeq/reax fix
<I>lgvdw</I> value = <I>yes</I> or <I>no</I> = whether or not to use a low gradient vdW correction
<I>safezone</I> = factor used for array allocation
<I>mincap</I> = minimum size for array allocation
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>pair_style reax/c NULL
pair_style reax/c controlfile checkqeq no
pair_style reax/c NULL lgvdw yes
pair_style reax/c NULL safezone 1.6 mincap 100
pair_coeff * * ffield.reax C H O N
</PRE>
<P><B>Description:</B>
</P>
<P>Style <I>reax/c</I> 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. There is more than one version of ReaxFF. The version
implemented in LAMMPS uses the functional forms documented in the
supplemental information of the following paper: <A HREF = "#Chenoweth_2008">(Chenoweth et al.,
2008)</A>. The version integrated into LAMMPS matches
the most up-to-date version of ReaxFF as of summer 2010. For more
technical details about the pair reax/c implementation of ReaxFF, see
the <A HREF = "#Aktulga">(Aktulga)</A> paper.
</P>
<P>The <I>reax/c</I> style differs from the <A HREF = "pair_reax.html">pair_style reax</A>
command in the lo-level implementation details. The <I>reax</I> style is a
Fortran library, linked to LAMMPS. The <I>reax/c</I> style was initially
implemented as stand-alone C code and is now integrated into LAMMPS as
a package.
</P>
<P>LAMMPS provides several different versions of ffield.reax in its
potentials dir, each called potentials/ffield.reax.label. These are
documented in potentials/README.reax. The default ffield.reax
contains parameterizations for the following elements: C, H, O, N, S.
</P>
<P>The format of these files is identical to that used originally by van
Duin. We have tested the accuracy of <I>pair_style reax/c</I> potential
against the original ReaxFF code for the systems mentioned above. You
can use other ffield files for specific chemical systems that may be
available elsewhere (but note that their accuracy may not have been
tested).
</P>
<P>IMPORTANT NOTE: We do not distribute a wide variety of ReaxFF force
field files with LAMMPS. Adri van Duin's group at PSU is the central
repository for this kind of data as they are continuously deriving and
updating parameterizations for different classes of materials. You
can visit their WWW site at
<A HREF = "http://www.engr.psu.edu/adri">http://www.engr.psu.edu/adri</A>, register
as a "new user", and then submit a request to their group describing
material(s) you are interested in modeling with ReaxFF. They can tell
you what is currently available or what it would take to create a
suitable ReaxFF parameterization.
</P>
<P>The <I>cfile</I> setting can be specified as NULL, in which case default
settings are used. A control file can be specified which defines
values of control variables. Some control variables are
global parameters for the ReaxFF potential. Others define certain
performance and output settings.
Each line in the control file specifies the value for
a control variable. The format of the control file is described
below.
</P>
<P>IMPORTANT NOTE: The LAMMPS default values for the ReaxFF global parameters
correspond to those used by
Adri van Duin's stand-alone serial code. If these are changed by
setting control variables in the control file, the results from
LAMMPS and the serial code will not agree.
</P>
<P>Two examples using <I>pair_style reax/c</I> are provided in the examples/reax
sub-directory, along with corresponding examples for
<A HREF = "pair_reax.html">pair_style reax</A>.
</P>
<P>Use of this pair style requires that a charge be defined for every
atom. See the <A HREF = "atom_style.html">atom_style</A> and
<A HREF = "read_data.html">read_data</A> commands for details on how to specify
charges.
</P>
<P>The ReaxFF parameter files provided were created using a charge
equilibration (QEq) model for handling the electrostatic interactions.
Therefore, by default, LAMMPS requires that the <A HREF = "fix_qeq_reax.html">fix
qeq/reax</A> command be used with <I>pair_style reax/c</I>
when simulating a ReaxFF model, to equilibrate charge each timestep.
Using the keyword <I>checkqeq</I> with the value <I>no</I>
turns off the check for <I>fix qeq/reax</I>,
allowing a simulation to be run without charge equilibration.
In this case, the static charges you
assign to each atom will be used for computing the electrostatic
interactions in the system.
See the <A HREF = "fix_qeq_reax.html">fix qeq/reax</A> command for details.
</P>
<P>Using the optional keyword <I>lgvdw</I> with the value <I>yes</I> turns on
the low-gradient correction of the ReaxFF/C for long-range
London Dispersion, as described in the <A HREF = "#Liu_2011">(Liu)</A> paper. Force field
file <I>ffield.reax.lg</I> is designed for this correction, and is trained
for several energetic materials (see "Liu"). When using lg-correction,
recommended value for parameter <I>thb</I> is 0.01, which can be set in the
control file. Note: Force field files are different for the original
or lg corrected pair styles, using wrong ffield file generates an error message.
</P>
<P>Optional keywords <I>safezone</I> and <I>mincap</I> are used for allocating
reax/c arrays. Increase these values can avoid memory problems, such
as segmentation faults and bondchk failed errors, that could occur under
certain conditions.
</P>
<P>The thermo variable <I>evdwl</I> 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
<I>ecoul</I>. The output of these quantities is controlled by the
<A HREF = "thermo.html">thermo</A> command.
</P>
<P>This pair style tallies a breakdown of the total ReaxFF potential
energy into sub-categories, which can be accessed via the <A HREF = "compute_pair.html">compute
pair</A> command as a vector of values of length 14.
The 14 values correspond to the following sub-categories (the variable
names in italics match those used in the original FORTRAN ReaxFF code):
</P>
<OL><LI><I>eb</I> = bond energy
<LI><I>ea</I> = atom energy
<LI><I>elp</I> = lone-pair energy
<LI><I>emol</I> = molecule energy (always 0.0)
<LI><I>ev</I> = valence angle energy
<LI><I>epen</I> = double-bond valence angle penalty
<LI><I>ecoa</I> = valence angle conjugation energy
<LI><I>ehb</I> = hydrogen bond energy
<LI><I>et</I> = torsion energy
<LI><I>eco</I> = conjugation energy
<LI><I>ew</I> = van der Waals energy
<LI><I>ep</I> = Coulomb energy
<LI><I>efi</I> = electric field energy (always 0.0)
<LI><I>eqeq</I> = charge equilibration energy
</OL>
<P>To print these quantities to the log file (with descriptive column
headings) the following commands could be included in an input script:
</P>
<PRE>compute reax all pair reax/c
variable eb equal c_reax[1]
variable ea equal c_reax[2]
...
variable eqeq equal c_reax[14]
thermo_style custom step temp epair v_eb v_ea ... v_eqeq
</PRE>
<P>Only a single pair_coeff command is used with the <I>reax/c</I> 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:
</P>
<UL><LI>filename
<LI>N indices = ReaxFF elements
</UL>
<P>The filename is the ReaxFF potential file. Unlike for the <I>reax</I>
pair style, any filename can be used.
</P>
<P>In the ReaxFF potential file, near the top, after the general
parameters, is the atomic parameters section that contains element
names, each with a couple dozen numeric parameters. If there are M
elements specified in the <I>ffield</I> file, think of these as numbered 1
to M. Each of the N indices you specify for the N atom types of LAMMPS
atoms must be an integer from 1 to M. Atoms with LAMMPS type 1 will
be mapped to whatever element you specify as the first index value,
etc. If a mapping value is specified as NULL, the mapping is not
performed. This can be used when the <I>reax/c</I> style is used as part
of the <I>hybrid</I> pair style. The NULL values are placeholders for atom
types that will be used with other potentials.
</P>
-<P>IMPORTANT NOTE: Currently the reax/c pair style cannot be used as part
-of the <I>hybrid</I> pair style. Some additional work still need to be
-done to enable this.
-</P>
<P>As an example, say your LAMMPS simulation has 4 atom types and the
elements are ordered as C, H, O, N in the <I>ffield</I> file. If you want
the LAMMPS atom type 1 and 2 to be C, type 3 to be N, and type 4 to be
H, you would use the following pair_coeff command:
</P>
<PRE>pair_coeff * * ffield.reax C C N H
</PRE>
<HR>
<P>The format of a line in the control file is as follows:
</P>
<PRE>variable_name value
</PRE>
<P>and it may be followed by an "!" character and a trailing comment.
</P>
<P>If the value of a control variable is not specified, then default
values are used. What follows is the list of variables along with a
brief description of their use and default values.
</P>
<P>simulation_name: Output files produced by <I>pair_style reax/c</I> carry
this name + extensions specific to their contents. Partial energies
are reported with a ".pot" extension, while the trajectory file has
".trj" extension.
</P>
<P>tabulate_long_range: To improve performance, long range interactions
can optionally be tabulated (0 means no tabulation). Value of this
variable denotes the size of the long range interaction table. The
range from 0 to long range cutoff (defined in the <I>ffield</I> file) is
divided into <I>tabulate_long_range</I> points. Then at the start of
simulation, we fill in the entries of the long range interaction table
by computing the energies and forces resulting from van der Waals and
Coulomb interactions between every possible atom type pairs present in
the input system. During the simulation we consult to the long range
interaction table to estimate the energy and forces between a pair of
atoms. Linear interpolation is used for estimation. (default value =
0)
</P>
<P>energy_update_freq: Denotes the frequency (in number of steps) of
writes into the partial energies file. (default value = 0)
</P>
<P>nbrhood_cutoff: Denotes the near neighbors cutoff (in Angstroms)
regarding the bonded interactions. (default value = 5.0)
</P>
<P>hbond_cutoff: Denotes the cutoff distance (in Angstroms) for hydrogen
bond interactions.(default value = 7.5. Value of 0.0 turns off hydrogen
bonds)
</P>
<P>bond_graph_cutoff: is the threshold used in determining what is a
physical bond, what is not. Bonds and angles reported in the
trajectory file rely on this cutoff. (default value = 0.3)
</P>
<P>thb_cutoff: cutoff value for the strength of bonds to be considered in
three body interactions. (default value = 0.001)
</P>
<P>thb_cutoff_sq: cutoff value for the strength of bond order products
to be considered in three body interactions. (default value = 0.00001)
</P>
<P>write_freq: Frequency of writes into the trajectory file. (default
value = 0)
</P>
<P>traj_title: Title of the trajectory - not the name of the trajectory
file.
</P>
<P>atom_info: 1 means print only atomic positions + charge (default = 0)
</P>
<P>atom_forces: 1 adds net forces to atom lines in the trajectory file
(default = 0)
</P>
<P>atom_velocities: 1 adds atomic velocities to atoms line (default = 0)
</P>
<P>bond_info: 1 prints bonds in the trajectory file (default = 0)
</P>
<P>angle_info: 1 prints angles in the trajectory file (default = 0)
</P>
<HR>
<P><B>Mixing, shift, table, tail correction, restart, rRESPA info</B>:
</P>
<P>This pair style does not support the <A HREF = "pair_modify.html">pair_modify</A>
mix, shift, table, and tail options.
</P>
<P>This pair style does not write its information to <A HREF = "restart.html">binary restart
files</A>, 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.
</P>
<P>This pair style can only be used via the <I>pair</I> keyword of the
<A HREF = "run_style.html">run_style respa</A> command. It does not support the
<I>inner</I>, <I>middle</I>, <I>outer</I> keywords.
</P>
<P><B>Restrictions:</B>
</P>
<P>This pair style is part of the USER-REAXC package. It is only enabled
if LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P>The ReaxFF potential files provided with LAMMPS in the potentials
directory are parameterized for real <A HREF = "units.html">units</A>. 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.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "pair_coeff.html">pair_coeff</A>, <A HREF = "fix_qeq_reax.html">fix qeq/reax</A>, <A HREF = "fix_reax_bonds.html">fix
reax/c/bonds</A>, <A HREF = "fix_reaxc_species.html">fix
reax/c/species</A>, <A HREF = "pair_reax.html">pair_style
reax</A>
</P>
<P><B>Default:</B>
</P>
<P>The keyword defaults are checkqeq = yes, lgvdw = no, safezone = 1.2,
mincap = 50.
</P>
<HR>
<A NAME = "Chenoweth_2008"></A>
<P><B>(Chenoweth_2008)</B> Chenoweth, van Duin and Goddard,
Journal of Physical Chemistry A, 112, 1040-1053 (2008).
</P>
<A NAME = "Aktulga"></A>
<P>(Aktulga) Aktulga, Fogarty, Pandit, Grama, Parallel Computing, 38,
245-259 (2012).
</P>
<A NAME = "Liu_2011"></A>
<P><B>(Liu)</B> L. Liu, Y. Liu, S. V. Zybin, H. Sun and W. A. Goddard, Journal
of Physical Chemistry A, 115, 11016-11022 (2011).
</P>
</HTML>
diff --git a/doc/pair_reax_c.txt b/doc/pair_reax_c.txt
index 5a3d8ed3a..4aba65dc5 100644
--- a/doc/pair_reax_c.txt
+++ b/doc/pair_reax_c.txt
@@ -1,316 +1,312 @@
"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/c command :h3
[Syntax:]
pair_style reax/c cfile keyword value :pre
cfile = NULL or name of a control file :ulb,l
zero or more keyword/value pairs may be appended :l
keyword = {checkqeq} or {lgvdw} or {safezone} or {mincap}
{checkqeq} value = {yes} or {no} = whether or not to require qeq/reax fix
{lgvdw} value = {yes} or {no} = whether or not to use a low gradient vdW correction
{safezone} = factor used for array allocation
{mincap} = minimum size for array allocation :pre
:ule
[Examples:]
pair_style reax/c NULL
pair_style reax/c controlfile checkqeq no
pair_style reax/c NULL lgvdw yes
pair_style reax/c NULL safezone 1.6 mincap 100
pair_coeff * * ffield.reax C H O N :pre
[Description:]
Style {reax/c} 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. There is more than one version of ReaxFF. The version
implemented in LAMMPS uses the functional forms documented in the
supplemental information of the following paper: "(Chenoweth et al.,
2008)"_#Chenoweth_2008. The version integrated into LAMMPS matches
the most up-to-date version of ReaxFF as of summer 2010. For more
technical details about the pair reax/c implementation of ReaxFF, see
the "(Aktulga)"_#Aktulga paper.
The {reax/c} style differs from the "pair_style reax"_pair_reax.html
command in the lo-level implementation details. The {reax} style is a
Fortran library, linked to LAMMPS. The {reax/c} style was initially
implemented as stand-alone C code and is now integrated into LAMMPS as
a package.
LAMMPS provides several different versions of ffield.reax in its
potentials dir, each called potentials/ffield.reax.label. These are
documented in potentials/README.reax. The default ffield.reax
contains parameterizations for the following elements: C, H, O, N, S.
The format of these files is identical to that used originally by van
Duin. We have tested the accuracy of {pair_style reax/c} potential
against the original ReaxFF code for the systems mentioned above. You
can use other ffield files for specific chemical systems that may be
available elsewhere (but note that their accuracy may not have been
tested).
IMPORTANT NOTE: We do not distribute a wide variety of ReaxFF force
field files with LAMMPS. Adri van Duin's group at PSU is the central
repository for this kind of data as they are continuously deriving and
updating parameterizations for different classes of materials. You
can visit their WWW site at
"http://www.engr.psu.edu/adri"_http://www.engr.psu.edu/adri, register
as a "new user", and then submit a request to their group describing
material(s) you are interested in modeling with ReaxFF. They can tell
you what is currently available or what it would take to create a
suitable ReaxFF parameterization.
The {cfile} setting can be specified as NULL, in which case default
settings are used. A control file can be specified which defines
values of control variables. Some control variables are
global parameters for the ReaxFF potential. Others define certain
performance and output settings.
Each line in the control file specifies the value for
a control variable. The format of the control file is described
below.
IMPORTANT NOTE: The LAMMPS default values for the ReaxFF global parameters
correspond to those used by
Adri van Duin's stand-alone serial code. If these are changed by
setting control variables in the control file, the results from
LAMMPS and the serial code will not agree.
Two examples using {pair_style reax/c} are provided in the examples/reax
sub-directory, along with corresponding examples for
"pair_style reax"_pair_reax.html.
Use of this pair style requires that a charge be defined for every
atom. See the "atom_style"_atom_style.html and
"read_data"_read_data.html commands for details on how to specify
charges.
The ReaxFF parameter files provided were created using a charge
equilibration (QEq) model for handling the electrostatic interactions.
Therefore, by default, LAMMPS requires that the "fix
qeq/reax"_fix_qeq_reax.html command be used with {pair_style reax/c}
when simulating a ReaxFF model, to equilibrate charge each timestep.
Using the keyword {checkqeq} with the value {no}
turns off the check for {fix qeq/reax},
allowing a simulation to be run without charge equilibration.
In this case, the static charges you
assign to each atom will be used for computing the electrostatic
interactions in the system.
See the "fix qeq/reax"_fix_qeq_reax.html command for details.
Using the optional keyword {lgvdw} with the value {yes} turns on
the low-gradient correction of the ReaxFF/C for long-range
London Dispersion, as described in the "(Liu)"_#Liu_2011 paper. Force field
file {ffield.reax.lg} is designed for this correction, and is trained
for several energetic materials (see "Liu"). When using lg-correction,
recommended value for parameter {thb} is 0.01, which can be set in the
control file. Note: Force field files are different for the original
or lg corrected pair styles, using wrong ffield file generates an error message.
Optional keywords {safezone} and {mincap} are used for allocating
reax/c arrays. Increase these values can avoid memory problems, such
as segmentation faults and bondchk failed errors, that could occur under
certain conditions.
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.
This pair style tallies a breakdown of the total ReaxFF potential
energy into sub-categories, which can be accessed via the "compute
pair"_compute_pair.html command as a vector of values of length 14.
The 14 values correspond to the following sub-categories (the variable
names in italics match those used in the original FORTRAN ReaxFF code):
{eb} = bond energy
{ea} = atom energy
{elp} = lone-pair energy
{emol} = molecule energy (always 0.0)
{ev} = valence angle energy
{epen} = double-bond valence angle penalty
{ecoa} = valence angle conjugation energy
{ehb} = hydrogen bond energy
{et} = torsion energy
{eco} = conjugation energy
{ew} = van der Waals energy
{ep} = Coulomb energy
{efi} = electric field energy (always 0.0)
{eqeq} = charge equilibration energy :ol
To print these quantities to the log file (with descriptive column
headings) the following commands could be included in an input script:
compute reax all pair reax/c
variable eb equal c_reax\[1\]
variable ea equal c_reax\[2\]
...
variable eqeq equal c_reax\[14\]
thermo_style custom step temp epair v_eb v_ea ... v_eqeq :pre
Only a single pair_coeff command is used with the {reax/c} 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 = ReaxFF elements :ul
The filename is the ReaxFF potential file. Unlike for the {reax}
pair style, any filename can be used.
In the ReaxFF potential file, near the top, after the general
parameters, is the atomic parameters section that contains element
names, each with a couple dozen numeric parameters. If there are M
elements specified in the {ffield} file, think of these as numbered 1
to M. Each of the N indices you specify for the N atom types of LAMMPS
atoms must be an integer from 1 to M. Atoms with LAMMPS type 1 will
be mapped to whatever element you specify as the first index value,
etc. If a mapping value is specified as NULL, the mapping is not
performed. This can be used when the {reax/c} style is used as part
of the {hybrid} pair style. The NULL values are placeholders for atom
types that will be used with other potentials.
-IMPORTANT NOTE: Currently the reax/c pair style cannot be used as part
-of the {hybrid} pair style. Some additional work still need to be
-done to enable this.
-
As an example, say your LAMMPS simulation has 4 atom types and the
elements are ordered as C, H, O, N in the {ffield} file. If you want
the LAMMPS atom type 1 and 2 to be C, type 3 to be N, and type 4 to be
H, you would use the following pair_coeff command:
pair_coeff * * ffield.reax C C N H :pre
:line
The format of a line in the control file is as follows:
variable_name value :pre
and it may be followed by an "!" character and a trailing comment.
If the value of a control variable is not specified, then default
values are used. What follows is the list of variables along with a
brief description of their use and default values.
simulation_name: Output files produced by {pair_style reax/c} carry
this name + extensions specific to their contents. Partial energies
are reported with a ".pot" extension, while the trajectory file has
".trj" extension.
tabulate_long_range: To improve performance, long range interactions
can optionally be tabulated (0 means no tabulation). Value of this
variable denotes the size of the long range interaction table. The
range from 0 to long range cutoff (defined in the {ffield} file) is
divided into {tabulate_long_range} points. Then at the start of
simulation, we fill in the entries of the long range interaction table
by computing the energies and forces resulting from van der Waals and
Coulomb interactions between every possible atom type pairs present in
the input system. During the simulation we consult to the long range
interaction table to estimate the energy and forces between a pair of
atoms. Linear interpolation is used for estimation. (default value =
0)
energy_update_freq: Denotes the frequency (in number of steps) of
writes into the partial energies file. (default value = 0)
nbrhood_cutoff: Denotes the near neighbors cutoff (in Angstroms)
regarding the bonded interactions. (default value = 5.0)
hbond_cutoff: Denotes the cutoff distance (in Angstroms) for hydrogen
bond interactions.(default value = 7.5. Value of 0.0 turns off hydrogen
bonds)
bond_graph_cutoff: is the threshold used in determining what is a
physical bond, what is not. Bonds and angles reported in the
trajectory file rely on this cutoff. (default value = 0.3)
thb_cutoff: cutoff value for the strength of bonds to be considered in
three body interactions. (default value = 0.001)
thb_cutoff_sq: cutoff value for the strength of bond order products
to be considered in three body interactions. (default value = 0.00001)
write_freq: Frequency of writes into the trajectory file. (default
value = 0)
traj_title: Title of the trajectory - not the name of the trajectory
file.
atom_info: 1 means print only atomic positions + charge (default = 0)
atom_forces: 1 adds net forces to atom lines in the trajectory file
(default = 0)
atom_velocities: 1 adds atomic velocities to atoms line (default = 0)
bond_info: 1 prints bonds in the trajectory file (default = 0)
angle_info: 1 prints angles in the trajectory file (default = 0)
: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 USER-REAXC package. It is only enabled
if LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
The ReaxFF potential files provided with LAMMPS in the potentials
directory are 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.
[Related commands:]
"pair_coeff"_pair_coeff.html, "fix qeq/reax"_fix_qeq_reax.html, "fix
reax/c/bonds"_fix_reax_bonds.html, "fix
reax/c/species"_fix_reaxc_species.html, "pair_style
reax"_pair_reax.html
[Default:]
The keyword defaults are checkqeq = yes, lgvdw = no, safezone = 1.2,
mincap = 50.
:line
:link(Chenoweth_2008)
[(Chenoweth_2008)] Chenoweth, van Duin and Goddard,
Journal of Physical Chemistry A, 112, 1040-1053 (2008).
:link(Aktulga)
(Aktulga) Aktulga, Fogarty, Pandit, Grama, Parallel Computing, 38,
245-259 (2012).
:link(Liu_2011)
[(Liu)] L. Liu, Y. Liu, S. V. Zybin, H. Sun and W. A. Goddard, Journal
of Physical Chemistry A, 115, 11016-11022 (2011).
diff --git a/doc/variable.html b/doc/variable.html
index 938ba477f..395c46767 100644
--- a/doc/variable.html
+++ b/doc/variable.html
@@ -1,1024 +1,1046 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>variable command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>variable name style args ...
</PRE>
<UL><LI>name = name of variable to define
<LI>style = <I>delete</I> or <I>index</I> or <I>loop</I> or <I>world</I> or <I>universe</I> or <I>uloop</I> or <I>string</I> or <I>format</I> or <I>getenv</I> or <I>file</I> or <I>atomfile</I> or <I>equal</I> or <I>atom</I>
<PRE> <I>delete</I> = no args
<I>index</I> args = one or more strings
<I>loop</I> args = N
N = integer size of loop, loop from 1 to N inclusive
<I>loop</I> args = N pad
N = integer size of loop, loop from 1 to N inclusive
pad = all values will be same length, e.g. 001, 002, ..., 100
<I>loop</I> args = N1 N2
N1,N2 = loop from N1 to N2 inclusive
<I>loop</I> args = N1 N2 pad
N1,N2 = loop from N1 to N2 inclusive
pad = all values will be same length, e.g. 050, 051, ..., 100
<I>world</I> args = one string for each partition of processors
<I>universe</I> args = one or more strings
<I>uloop</I> args = N
N = integer size of loop
<I>uloop</I> args = N pad
N = integer size of loop
pad = all values will be same length, e.g. 001, 002, ..., 100
<I>string</I> arg = one string
<I>format</I> args = vname fstr
vname = name of equal-style variable to evaluate
fstr = C-style format string
<I>getenv</I> arg = one string
<I>file</I> arg = filename
<I>atomfile</I> arg = filename
<I>equal</I> or <I>atom</I> args = one formula containing numbers, thermo keywords, math operations, group functions, atom values and vectors, compute/fix/variable references
numbers = 0.0, 100, -5.4, 2.8e-4, etc
constants = PI
thermo keywords = vol, ke, press, etc from <A HREF = "thermo_style.html">thermo_style</A>
math operators = (), -x, x+y, x-y, x*y, x/y, x^y,
x==y, x!=y, x<y, x<=y, x>y, x>=y, x&&y, x||y, !x
math functions = sqrt(x), exp(x), ln(x), log(x), abs(x),
sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x),
random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x)
ramp(x,y), stagger(x,y), logfreq(x,y,z), stride(x,y,z), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)
group functions = count(group), mass(group), charge(group),
xcm(group,dim), vcm(group,dim), fcm(group,dim),
bound(group,xmin), gyration(group), ke(group),
angmom(group,dim), torque(group,dim),
inertia(group,dimdim), omega(group,dim)
region functions = count(group,region), mass(group,region), charge(group,region),
xcm(group,dim,region), vcm(group,dim,region), fcm(group,dim,region),
bound(group,xmin,region), gyration(group,region), ke(group,reigon),
angmom(group,dim,region), torque(group,dim,region),
inertia(group,dimdim,region), omega(group,dim,region)
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x)
atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i]
atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz
compute references = c_ID, c_ID[i], c_ID[i][j]
fix references = f_ID, f_ID[i], f_ID[i][j]
variable references = v_name, v_name[i]
</PRE>
</UL>
<P><B>Examples:</B>
</P>
<PRE>variable x index run1 run2 run3 run4 run5 run6 run7 run8
variable LoopVar loop $n
variable beta equal temp/3.0
variable b1 equal x[234]+0.5*vol
variable b1 equal "x[234] + 0.5*vol"
variable b equal xcm(mol1,x)/2.0
variable b equal c_myTemp
variable b atom x*y/vol
variable foo string myfile
variable f file values.txt
variable temp world 300.0 310.0 320.0 ${Tfinal}
variable x universe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
variable x uloop 15 pad
variable str format x %.6g
variable x delete
</PRE>
<P><B>Description:</B>
</P>
<P>This command assigns one or more strings to a variable name for
evaluation later in the input script or during a simulation.
</P>
<P>Variables can thus be useful in several contexts. A variable can be
defined and then referenced elsewhere in an input script to become
part of a new input command. For variable styles that store multiple
strings, the <A HREF = "next.html">next</A> command can be used to increment which
string is assigned to the variable. Variables of style <I>equal</I> store
a formula which when evaluated produces a single numeric value which
can be output either directly (see the <A HREF = "print.html">print</A>, <A HREF = "fix_print.html">fix
print</A>, and <A HREF = "run.html">run every</A> commands) or as part
of thermodynamic output (see the <A HREF = "thermo_style.html">thermo_style</A>
command), or used as input to an averaging fix (see the <A HREF = "fix_ave_time.html">fix
ave/time</A> command). Variables of style <I>atom</I> store
a formula which when evaluated produces one numeric value per atom
which can be output to a dump file (see the <A HREF = "dump.html">dump custom</A>
command) or used as input to an averaging fix (see the <A HREF = "fix_ave_spatial.html">fix
ave/spatial</A> and <A HREF = "fix_ave_atom.html">fix ave/atom</A>
commands). Variables of style <I>atomfile</I> can be used anywhere in an
input script that atom-style variables are used; they get their
per-atom values from a file rather than from a formula.
</P>
<P>In the discussion that follows, the "name" of the variable is the
arbitrary string that is the 1st argument in the variable command.
This name can only contain alphanumeric characters and underscores.
The "string" is one or more of the subsequent arguments. The "string"
can be simple text as in the 1st example above, it can contain other
variables as in the 2nd example, or it can be a formula as in the 3rd
example. The "value" is the numeric quantity resulting from
evaluation of the string. Note that the same string can generate
different values when it is evaluated at different times during a
simulation.
</P>
<P>IMPORTANT NOTE: When the input script line is encountered that defines
a variable of style <I>equal</I> or <I>atom</I> that contains a formula, the
formula is NOT immediately evaluated and the result stored. See the
discussion below about "Immediate Evaluation of Variables" if you want
to do this. This is also true of the <I>format</I> style variable
since it evaluates another variable when it is invoked.
</P>
<P>IMPORTANT NOTE: When a variable command is encountered in the input
script and the variable name has already been specified, the command
is ignored. This means variables can NOT be re-defined in an input
script (with 2 exceptions, read further). This is to allow an input
script to be processed multiple times without resetting the variables;
see the <A HREF = "jump.html">jump</A> or <A HREF = "include.html">include</A> commands. It also
means that using the <A HREF = "Section_start.html#start_7">command-line switch</A>
-var will override a corresponding index variable setting in the input
script.
</P>
<P>There are two exceptions to this rule. First, variables of style
<I>string</I>, <I>getenv</I>, <I>equal</I> and <I>atom</I> ARE redefined each time the
command is encountered. This allows these style of variables to be
redefined multiple times in an input script. In a loop, this means
the formula associated with an <I>equal</I> or <I>atom</I> style variable can
change if it contains a substitution for another variable, e.g. $x or
v_x.
</P>
<P>Second, as described below, if a variable is iterated on to the end of
its list of strings via the <A HREF = "next.html">next</A> command, it is removed
from the list of active variables, and is thus available to be
re-defined in a subsequent variable command. The <I>delete</I> style does
the same thing.
</P>
<HR>
<P><A HREF = "Section_commands.html#cmd_2">This section</A> of the manual explains how
occurrences of a variable name in an input script line are replaced by
the variable's string. The variable name can be referenced as $x if
the name "x" is a single character, or as ${LoopVar} if the name
"LoopVar" is one or more characters.
</P>
<P>As described below, for variable styles <I>index</I>, <I>loop</I>, <I>file</I>,
<I>universe</I>, and <I>uloop</I>, which string is assigned to a variable can be
incremented via the <A HREF = "next.html">next</A> command. When there are no more
strings to assign, the variable is exhausted and a flag is set that
causes the next <A HREF = "jump.html">jump</A> command encountered in the input
script to be skipped. This enables the construction of simple loops
in the input script that are iterated over and then exited from.
</P>
<P>As explained above, an exhausted variable can be re-used in an input
script. The <I>delete</I> style also removes the variable, the same as if
it were exhausted, allowing it to be redefined later in the input
script or when the input script is looped over. This can be useful
when breaking out of a loop via the <A HREF = "if.html">if</A> and <A HREF = "jump.html">jump</A>
commands before the variable would become exhausted. For example,
</P>
<PRE>label loop
variable a loop 5
print "A = $a"
if "$a > 2" then "jump in.script break"
next a
jump in.script loop
label break
variable a delete
</PRE>
<HR>
<P>This section describes how various variable styles are defined and
what they store. Many of the styles store one or more strings. Note
that a single string can contain spaces (multiple words), if it is
enclosed in quotes in the variable command. When the variable is
substituted for in another input script command, its returned string
will then be interpreted as multiple arguments in the expanded
command.
</P>
<P>For the <I>index</I> style, one or more strings are specified. Initially,
the 1st string is assigned to the variable. Each time a
<A HREF = "next.html">next</A> command is used with the variable name, the next
string is assigned. All processors assign the same string to the
variable.
</P>
<P><I>Index</I> style variables with a single string value can also be set by
using the command-line switch -var; see <A HREF = "Section_start.html#start_7">this
section</A> for details.
</P>
<P>The <I>loop</I> style is identical to the <I>index</I> style except that the
strings are the integers from 1 to N inclusive, if only one argument N
is specified. This allows generation of a long list of runs
(e.g. 1000) without having to list N strings in the input script.
Initially, the string "1" is assigned to the variable. Each time a
<A HREF = "next.html">next</A> command is used with the variable name, the next
string ("2", "3", etc) is assigned. All processors assign the same
string to the variable. The <I>loop</I> style can also be specified with
two arguments N1 and N2. In this case the loop runs from N1 to N2
inclusive, and the string N1 is initially assigned to the variable.
N1 <= N2 and N2 >= 0 is required.
</P>
<P>For the <I>world</I> style, one or more strings are specified. There must
be one string for each processor partition or "world". See <A HREF = "Section_start.html#start_7">this
section</A> of the manual for information on
running LAMMPS with multiple partitions via the "-partition"
command-line switch. This variable command assigns one string to each
world. All processors in the world are assigned the same string. The
next command cannot be used with <I>equal</I> style variables, since there
is only one value per world. This style of variable is useful when
you wish to run different simulations on different partitions, or when
performing a parallel tempering simulation (see the
<A HREF = "temper.html">temper</A> command), to assign different temperatures to
different partitions.
</P>
<P>For the <I>universe</I> style, one or more strings are specified. There
must be at least as many strings as there are processor partitions or
"worlds". See <A HREF = "Section_start.html#start_7">this page</A> for information
on running LAMMPS with multiple partitions via the "-partition"
command-line switch. This variable command initially assigns one
string to each world. When a <A HREF = "next.html">next</A> command is encountered
using this variable, the first processor partition to encounter it, is
assigned the next available string. This continues until all the
variable strings are consumed. Thus, this command can be used to run
50 simulations on 8 processor partitions. The simulations will be run
one after the other on whatever partition becomes available, until
they are all finished. <I>Universe</I> style variables are incremented
using the files "tmp.lammps.variable" and "tmp.lammps.variable.lock"
which you will see in your directory during such a LAMMPS run.
</P>
<P>The <I>uloop</I> style is identical to the <I>universe</I> style except that the
strings are the integers from 1 to N. This allows generation of long
list of runs (e.g. 1000) without having to list N strings in the input
script.
</P>
<P>For the <I>string</I> style, a single string is assigned to the variable.
The only difference between this and using the <I>index</I> style with a
single string is that a variable with <I>string</I> style can be redefined.
E.g. by another command later in the input script, or if the script is
read again in a loop.
</P>
<P>For the <I>format</I> style, an equal-style variable is specified along
with a C-style format string, e.g. "%f" or "%.10g", which must be
appropriate for formatting a double-precision floating-point value.
This allows an equal-style variable to be formatted specifically for
output as a string, e.g. by the <A HREF = "print.html">print</A> command, if the
default format "%.15g" has too much precision.
</P>
<P>For the <I>getenv</I> style, a single string is assigned to the variable
which should be the name of an environment variable. When the
variable is evaluated, it returns the value of the environment
variable, or an empty string if it not defined. This style of
variable can be used to adapt the behavior of LAMMPS input scripts via
environment variable settings, or to retrieve information that has
been previously stored with the <A HREF = "shell.html">shell putenv</A> command.
Note that because environment variable settings are stored by the
operating systems, they persist beyond a <A HREF = "clear.html">clear</A> command.
</P>
<P>For the <I>file</I> style, a filename is provided which contains a list of
strings to assign to the variable, one per line. The strings can be
numeric values if desired. See the discussion of the next() function
below for equal-style variables, which will convert the string of a
file-style variable into a numeric value in a formula.
</P>
<P>When a file-style variable is defined, the file is opened and the
string on the first line is read and stored with the variable. This
means the variable can then be evaluated as many times as desired and
will return that string. There are two ways to cause the next string
from the file to be read: use the <A HREF = "next.html">next</A> command or the
next() function in an equal- or atom-style variable, as discussed
below.
</P>
<P>The rules for formatting the file are as follows. A comment character
"#" can be used anywhere on a line; text starting with the comment
character is stripped. Blank lines are skipped. The first "word" of
a non-blank line, delimited by white space, is the "string" assigned
to the variable.
</P>
<P>For the <I>atomfile</I> style, a filename is provided which contains one or
more sets of values, to assign on a per-atom basis to the variable.
The format of the file is described below.
</P>
<P>When an atomfile-style variable is defined, the file is opened and the
first set of per-atom values are read and stored with the variable.
This means the variable can then be evaluated as many times as desired
and will return those values. There are two ways to cause the next
set of per-atom values from the file to be read: use the
<A HREF = "next.html">next</A> command or the next() function in an atom-style
variable, as discussed below.
</P>
<P>The rules for formatting the file are as follows. Each time a set of
per-atom values is read, a non-blank line is searched for in the file.
A comment character "#" can be used anywhere on a line; text starting
with the comment character is stripped. Blank lines are skipped. The
first "word" of a non-blank line, delimited by white space, is read as
the count N of per-atom lines to immediately follow. N can be be the
total number of atoms in the system, or only a subset. The next N
lines have the following format
</P>
<PRE>ID value
</PRE>
<P>where ID is an atom ID and value is the per-atom numeric value that
will be assigned to that atom. IDs can be listed in any order.
</P>
<P>IMPORTANT NOTE: Every time a set of per-atom lines is read, the value
for all atoms is first set to 0.0. Thus values for atoms whose ID
does not appear in the set, will remain 0.0.
</P>
<HR>
<P>For the <I>equal</I> and <I>atom</I> styles, a single string is specified which
represents a formula that will be evaluated afresh each time the
variable is used. If you want spaces in the string, enclose it in
double quotes so the parser will treat it as a single argument. For
<I>equal</I> style variables the formula computes a scalar quantity, which
becomes the value of the variable whenever it is evaluated. For
<I>atom</I> style variables the formula computes one quantity for each
atom whenever it is evaluated.
</P>
<P>Note that <I>equal</I> and <I>atom</I> variables can produce different values at
different stages of the input script or at different times during a
run. For example, if an <I>equal</I> variable is used in a <A HREF = "fix_print.html">fix
print</A> command, different values could be printed each
timestep it was invoked. If you want a variable to be evaluated
immediately, so that the result is stored by the variable instead of
the string, see the section below on "Immediate Evaluation of
Variables".
</P>
<P>The next command cannot be used with <I>equal</I> or <I>atom</I> style
variables, since there is only one string.
</P>
<P>The formula for an <I>equal</I> or <I>atom</I> variable can contain a variety
of quantities. The syntax for each kind of quantity is simple, but
multiple quantities can be nested and combined in various ways to
build up formulas of arbitrary complexity. For example, this is a
valid (though strange) variable formula:
</P>
<PRE>variable x equal "pe + c_MyTemp / vol^(1/3)"
</PRE>
<P>Specifically, an formula can contain numbers, thermo keywords, math
operators, math functions, group functions, region functions, atom
values, atom vectors, compute references, fix references, and
references to other variables.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR><TD >Number</TD><TD > 0.2, 100, 1.0e20, -15.4, etc</TD></TR>
<TR><TD >Constant</TD><TD > PI</TD></TR>
<TR><TD >Thermo keywords</TD><TD > vol, pe, ebond, etc</TD></TR>
<TR><TD >Math operators</TD><TD > (), -x, x+y, x-y, x*y, x/y, x^y, x==y, x!=y, x<y, x<=y, x>y, x>=y, x&&y, x||y, !x</TD></TR>
<TR><TD >Math functions</TD><TD > sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), ramp(x,y), stagger(x,y), logfreq(x,y,z), stride(x,y,z), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)</TD></TR>
<TR><TD >Group functions</TD><TD > count(ID), mass(ID), charge(ID), xcm(ID,dim), vcm(ID,dim), fcm(ID,dim), bound(ID,dir), gyration(ID), ke(ID), angmom(ID,dim), torque(ID,dim), inertia(ID,dimdim), omega(ID,dim)</TD></TR>
<TR><TD >Region functions</TD><TD > count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR)</TD></TR>
<TR><TD >Special functions</TD><TD > sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x)</TD></TR>
<TR><TD >Atom values</TD><TD > id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i]</TD></TR>
<TR><TD >Atom vectors</TD><TD > id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz</TD></TR>
<TR><TD >Compute references</TD><TD > c_ID, c_ID[i], c_ID[i][j]</TD></TR>
<TR><TD >Fix references</TD><TD > f_ID, f_ID[i], f_ID[i][j]</TD></TR>
<TR><TD >Other variables</TD><TD > v_name, v_name[i]
</TD></TR></TABLE></DIV>
<HR>
<P>Most of the formula elements produce a scalar value. A few produce a
per-atom vector of values. These are the atom vectors, compute
references that represent a per-atom vector, fix references that
represent a per-atom vector, and variables that are atom-style
variables. Math functions that operate on scalar values produce a
scalar value; math function that operate on per-atom vectors do so
element-by-element and produce a per-atom vector.
</P>
<P>A formula for equal-style variables cannot use any formula element
that produces a per-atom vector. A formula for an atom-style variable
can use formula elements that produce either a scalar value or a
per-atom vector. Atom-style variables are evaluated by other commands
that define a <A HREF = "group.html">group</A> on which they operate, e.g. a
<A HREF = "dump.html">dump</A> or <A HREF = "compute.html">compute</A> or <A HREF = "fix.html">fix</A> command.
When they invoke the atom-style variable, only atoms in the group are
inlcuded in the formula evaluation. The variable evaluates to 0.0 for
atoms not in the group.
</P>
<P>The thermo keywords allowed in a formula are those defined by the
<A HREF = "thermo_style.html">thermo_style custom</A> command. Thermo keywords that
require a <A HREF = "compute.html">compute</A> to calculate their values such as
"temp" or "press", use computes stored and invoked by the
<A HREF = "thermo_style.html">thermo_style</A> command. This means that you can
only use those keywords in a variable if the style you are using with
the thermo_style command (and the thermo keywords associated with that
style) also define and use the needed compute. Note that some thermo
keywords use a compute indirectly to calculate their value (e.g. the
enthalpy keyword uses temp, pe, and pressure). If a variable is
evaluated directly in an input script (not during a run), then the
values accessed by the thermo keyword must be current. See the
discussion below about "Variable Accuracy".
</P>
<HR>
<H4>Math Operators
</H4>
<P>Math operators are written in the usual way, where the "x" and "y" in
the examples can themselves be arbitrarily complex formulas, as in the
examples above. In this syntax, "x" and "y" can be scalar values or
per-atom vectors. For example, "ke/natoms" is the division of two
scalars, where "vy+vz" is the element-by-element sum of two per-atom
vectors of y and z velocities.
</P>
<P>Operators are evaluated left to right and have the usual C-style
precedence: unary minus and unary logical NOT operator "!" have the
highest precedence, exponentiation "^" is next; multiplication and
division are next; addition and subtraction are next; the 4 relational
operators "<", "<=", ">", and ">=" are next; the two remaining
relational operators "==" and "!=" are next; then the logical AND
operator "&&"; and finally the logical OR operator "||" has the lowest
precedence. Parenthesis can be used to group one or more portions of
a formula and/or enforce a different order of evaluation than what
would occur with the default precedence.
</P>
<P>IMPORTANT NOTE: Because a unary minus is higher precedence than
exponentiation, the formula "-2^2" will evaluate to 4, not -4. This
convention is compatible with some programming languages, but not
others. As mentioned, this behavior can be easily overridden with
parenthesis; the formula "-(2^2)" will evaluate to -4.
</P>
<P>The 6 relational operators return either a 1.0 or 0.0 depending on
whether the relationship between x and y is TRUE or FALSE. For
example the expression x<10.0 in an atom-style variable formula will
return 1.0 for all atoms whose x-coordinate is less than 10.0, and 0.0
for the others. The logical AND operator will return 1.0 if both its
arguments are non-zero, else it returns 0.0. The logical OR operator
will return 1.0 if either of its arguments is non-zero, else it
returns 0.0. The logical NOT operator returns 1.0 if its argument is
0.0, else it returns 0.0.
</P>
<P>These relational and logical operators can be used as a masking or
selection operation in a formula. For example, the number of atoms
whose properties satifsy one or more criteria could be calculated by
taking the returned per-atom vector of ones and zeroes and passing it
to the <A HREF = "compute_reduce.html">compute reduce</A> command.
</P>
<HR>
<H4>Math Functions
</H4>
<P>Math functions are specified as keywords followed by one or more
parenthesized arguments "x", "y", "z", each of which can themselves be
arbitrarily complex formulas. In this syntax, the arguments can
represent scalar values or per-atom vectors. In the latter case, the
math operation is performed on each element of the vector. For
example, "sqrt(natoms)" is the sqrt() of a scalar, where "sqrt(y*z)"
yields a per-atom vector with each element being the sqrt() of the
product of one atom's y and z coordinates.
</P>
<P>Most of the math functions perform obvious operations. The ln() is
the natural log; log() is the base 10 log.
</P>
<P>The random(x,y,z) function takes 3 arguments: x = lo, y = hi, and z =
seed. It generates a uniform random number between lo and hi. The
normal(x,y,z) function also takes 3 arguments: x = mu, y = sigma, and
z = seed. It generates a Gaussian variate centered on mu with
variance sigma^2. In both cases the seed is used the first time the
internal random number generator is invoked, to initialize it. For
equal-style variables, every processor uses the same seed so that they
each generate the same sequence of random numbers. For atom-style
variables, a unique seed is created for each processor, based on the
specified seed. This effectively generates a different random number
for each atom being looped over in the atom-style variable.
</P>
<P>IMPORTANT NOTE: Internally, there is just one random number generator
for all equal-style variables and one for all atom-style variables.
If you define multiple variables (of each style) which use the
random() or normal() math functions, then the internal random number
generators will only be initialized once, which means only one of the
specified seeds will determine the sequence of generated random
numbers.
</P>
<P>The ceil(), floor(), and round() functions are those in the C math
library. Ceil() is the smallest integer not less than its argument.
Floor() if the largest integer not greater than its argument. Round()
is the nearest integer to its argument.
</P>
<P>The ramp(x,y) function uses the current timestep to generate a value
linearly intepolated between the specified x,y values over the course
of a run, according to this formula:
</P>
<PRE>value = x + (y-x) * (timestep-startstep) / (stopstep-startstep)
</PRE>
<P>The run begins on startstep and ends on stopstep. Startstep and
stopstep can span multiple runs, using the <I>start</I> and <I>stop</I> keywords
of the <A HREF = "run.html">run</A> command. See the <A HREF = "run.html">run</A> command for
details of how to do this.
</P>
<P>The stagger(x,y) function uses the current timestep to generate a new
timestep. X,y > 0 and x > y are required. The generated timesteps
increase in a staggered fashion, as the sequence
x,x+y,2x,2x+y,3x,3x+y,etc. For any current timestep, the next
timestep in the sequence is returned. Thus if stagger(1000,100) is
used in a variable by the <A HREF = "dump_modify.html">dump_modify every</A>
command, it will generate the sequence of output timesteps:
</P>
<PRE>100,1000,1100,2000,2100,3000,etc
</PRE>
<P>The logfreq(x,y,z) function uses the current timestep to generate a
new timestep. X,y,z > 0 and y < z are required. The generated
timesteps increase in a logarithmic fashion, as the sequence
x,2x,3x,...y*x,z*x,2*z*x,3*z*x,...y*z*x,z*z*x,2*z*x*x,etc. For any
current timestep, the next timestep in the sequence is returned. Thus
if logfreq(100,4,10) is used in a variable by the <A HREF = "dump_modify.html">dump_modify
every</A> command, it will generate the sequence of
output timesteps:
</P>
<PRE>100,200,300,400,1000,2000,3000,4000,10000,20000,etc
</PRE>
<P>The stride(x,y,z) function uses the current timestep to generate a new
timestep. X,y >= 0 and z > 0 and x <= y are required. The generated
timesteps increase in increments of z, from x to y, I.e. it generates
the sequece x,x+z,x+2z,...,y. If y-x is not a multiple of z, then
similar to the way a for loop operates, the last value will be one
that does not exceed y. For any current timestep, the next timestep
in the sequence is returned. Thus if stagger(1000,2000,100) is used
in a variable by the <A HREF = "dump_modify.html">dump_modify every</A> command, it
will generate the sequence of output timesteps:
</P>
<PRE>1000,1100,1200, ... ,1900,2000
</PRE>
<P>The vdisplace(x,y) function takes 2 arguments: x = value0 and y =
velocity, and uses the elapsed time to change the value by a linear
displacement due to the applied velocity over the course of a run,
according to this formula:
</P>
<PRE>value = value0 + velocity*(timestep-startstep)*dt
</PRE>
<P>where dt = the timestep size.
</P>
<P>The run begins on startstep. Startstep can span multiple runs, using
the <I>start</I> keyword of the <A HREF = "run.html">run</A> command. See the
<A HREF = "run.html">run</A> command for details of how to do this. Note that the
<A HREF = "thermo_style.html">thermo_style</A> keyword elaplong =
timestep-startstep.
</P>
<P>The swiggle(x,y,z) and cwiggle(x,y,z) functions each take 3 arguments:
x = value0, y = amplitude, z = period. They use the elapsed time to
oscillate the value by a sin() or cos() function over the course of a
run, according to one of these formulas, where omega = 2 PI / period:
</P>
<PRE>value = value0 + Amplitude * sin(omega*(timestep-startstep)*dt)
value = value0 + Amplitude * (1 - cos(omega*(timestep-startstep)*dt))
</PRE>
<P>where dt = the timestep size.
</P>
<P>The run begins on startstep. Startstep can span multiple runs, using
the <I>start</I> keyword of the <A HREF = "run.html">run</A> command. See the
<A HREF = "run.html">run</A> command for details of how to do this. Note that the
<A HREF = "thermo_style.html">thermo_style</A> keyword elaplong =
timestep-startstep.
</P>
<HR>
<H4>Group and Region Functions
</H4>
<P>Group functions are specified as keywords followed by one or two
parenthesized arguments. The first argument is the group-ID. The
<I>dim</I> argument, if it exists, is <I>x</I> or <I>y</I> or <I>z</I>. The <I>dir</I>
argument, if it exists, is <I>xmin</I>, <I>xmax</I>, <I>ymin</I>, <I>ymax</I>, <I>zmin</I>, or
<I>zmax</I>. The <I>dimdim</I> argument, if it exists, is <I>xx</I> or <I>yy</I> or <I>zz</I>
or <I>xy</I> or <I>yz</I> or <I>xz</I>.
</P>
<P>The group function count() is the number of atoms in the group. The
group functions mass() and charge() are the total mass and charge of
the group. Xcm() and vcm() return components of the position and
velocity of the center of mass of the group. Fcm() returns a
component of the total force on the group of atoms. Bound() returns
the min/max of a particular coordinate for all atoms in the group.
Gyration() computes the radius-of-gyration of the group of atoms. See
the <A HREF = "compute_gyration.html">compute gyration</A> command for a definition
of the formula. Angmom() returns components of the angular momentum
of the group of atoms around its center of mass. Torque() returns
components of the torque on the group of atoms around its center of
mass, based on current forces on the atoms. Inertia() returns one of
6 components of the symmetric inertia tensor of the group of atoms
around its center of mass, ordered as Ixx,Iyy,Izz,Ixy,Iyz,Ixz.
Omega() returns components of the angular velocity of the group of
atoms around its center of mass.
</P>
<P>Region functions are specified exactly the same way as group functions
except they take an extra argument which is the region ID. The
function is computed for all atoms that are in both the group and the
region. If the group is "all", then the only criteria for atom
inclusion is that it be in the region.
</P>
<HR>
<H4>Special Functions
</H4>
<P>Special functions take specific kinds of arguments, meaning their
arguments cannot be formulas themselves.
</P>
<P>The sum(x), min(x), max(x), ave(x), trap(x), and slope(x) functions
each take 1 argument which is of the form "c_ID" or "c_ID[N]" or
"f_ID" or "f_ID[N]". The first two are computes and the second two
are fixes; the ID in the reference should be replaced by the ID of a
compute or fix defined elsewhere in the input script. The compute or
fix must produce either a global vector or array. If it produces a
global vector, then the notation without "[N]" should be used. If
it produces a global array, then the notation with "[N]" should be
used, when N is an integer, to specify which column of the global
array is being referenced.
</P>
<P>These functions operate on the global vector of inputs and reduce it
to a single scalar value. This is analagous to the operation of the
<A HREF = "compute_reduce.html">compute reduce</A> command, which invokes the same
functions on per-atom and local vectors.
</P>
<P>The sum() function calculates the sum of all the vector elements. The
min() and max() functions find the minimum and maximum element
respectively. The ave() function is the same as sum() except that it
divides the result by the length of the vector.
</P>
<P>The trap() function is the same as sum() except the first and last
elements are multiplied by a weighting factor of 1/2 when performing
the sum. This effectively implements an integration via the
trapezoidal rule on the global vector of data. I.e. consider a set of
points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2),
..., (N,VN), where the Vi are the values in the global vector of
length N. The integral from 1 to N of these points is trap(). When
appropriately normalized by the timestep size, this function is useful
for calculating integrals of time-series data, like that generated by
the <A HREF = "fix_ave_correlate.html">fix ave/correlate</A> command.
</P>
<P>The slope() function uses linear regression to fit a line to the set
of points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2),
..., (N,VN), where the Vi are the values in the global vector of
length N. The returned value is the slope of the line. If the line
has a single point or is vertical, it returns 1.0e20.
</P>
<P>The gmask(x) function takes 1 argument which is a group ID. It
can only be used in atom-style variables. It returns a 1 for
atoms that are in the group, and a 0 for atoms that are not.
</P>
<P>The rmask(x) function takes 1 argument which is a region ID. It can
only be used in atom-style variables. It returns a 1 for atoms that
are in the geometric region, and a 0 for atoms that are not.
</P>
<P>The grmask(x,y) function takes 2 arguments. The first is a group ID,
and the second is a region ID. It can only be used in atom-style
variables. It returns a 1 for atoms that are in both the group and
region, and a 0 for atoms that are not in both.
</P>
<P>The next(x) function takes 1 argument which is a variable ID (not
"v_foo", just "foo"). It must be for a file-style or atomfile-style
variable. Each time the next() function is invoked (i.e. each time
the equal-style or atom-style variable is evaluated), the following
steps occur.
</P>
<P>For file-style variables, the current string value stored by the
file-style variable is converted to a numeric value and returned by
the function. And the next string value in the file is read and
stored. Note that if the line previously read from the file was not a
numeric string, then it will typically evaluate to 0.0, which is
likely not what you want.
</P>
<P>For atomfile-style variables, the current per-atom values stored by
the atomfile-style variable are returned by the function. And the
next set of per-atom values in the file is read and stored.
</P>
<P>Since file-style and atomfile-style variables read and store the first
line of the file or first set of per-atoms values when they are
defined in the input script, these are the value(s) that will be
returned the first time the next() function is invoked. If next() is
invoked more times than there are lines or sets of lines in the file,
the variable is deleted, similar to how the <A HREF = "next.html">next</A> command
operates.
</P>
<HR>
<H4>Atom Values and Vectors
</H4>
-<P>Atom values take a single integer argument I from 1 to N, where I is
-the an atom-ID, e.g. x[243], which means use the x coordinate of the
-atom with ID = 243.
+<P>Atom values take an integer argument I from 1 to N, where I is the an
+atom-ID, e.g. x[243], which means use the x coordinate of the atom
+with ID = 243. Or they can take a variable name, specified as v_name,
+where name is the name of the variable, like x[v_myIndex]. The
+variable can be of any style except atom or atom-file variables. The
+variable is evaluated and the result is expected to be numeric and is
+cast to an integer (i.e. 3.4 becomes 3), to use an an index, which
+must be a value from 1 to N. Note that a "formula" cannot be used as
+the argument between the brackets, e.g. x[243+10] or
+x[v_myIndex+1] are not allowed. To do this a single variable can be
+defined that contains the needed formula.
</P>
<P>Atom vectors generate one value per atom, so that a reference like
"vx" means the x-component of each atom's velocity will be used when
evaluating the variable.
</P>
<P>The meaning of the different atom values and vectors is mostly
-self-explanatory. Mol refernces the molecule ID of an atom, and is
-only defined if an <A HREF = "atom_style.html">atom_style</A> is being used
-that defines molecule IDs.
+self-explanatory. Mol refers to the molecule ID of an atom, and is
+only defined if an <A HREF = "atom_style.html">atom_style</A> is being used that
+defines molecule IDs.
</P>
<P>Note that many other atom attributes can be used as inputs to a
variable by using the <A HREF = "compute_property_atom.html">compute
property/atom</A> command and then specifying
a quantity from that compute.
</P>
<HR>
<H4>Compute References
</H4>
<P>Compute references access quantities calculated by a
<A HREF = "compute.html">compute</A>. The ID in the reference should be replaced by
the ID of a compute defined elsewhere in the input script. As
discussed in the doc page for the <A HREF = "compute.html">compute</A> command,
computes can produce global, per-atom, or local values. Only global
and per-atom values can be used in a variable. Computes can also
produce a scalar, vector, or array. An equal-style variable can only
use scalar values, which means a global scalar, or an element of a
global or per-atom vector or array. Atom-style variables can use the
same scalar values. They can also use per-atom vector values. A
vector value can be a per-atom vector itself, or a column of an
per-atom array. See the doc pages for individual computes to see what
kind of values they produce.
</P>
<P>Examples of different kinds of compute references are as follows.
There is no ambiguity as to what a reference means, since computes
only produce global or per-atom quantities, never both.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR><TD >c_ID</TD><TD > global scalar, or per-atom vector</TD></TR>
<TR><TD >c_ID[I]</TD><TD > Ith element of global vector, or atom I's value in per-atom vector, or Ith column from per-atom array</TD></TR>
<TR><TD >c_ID[I][J]</TD><TD > I,J element of global array, or atom I's Jth value in per-atom array
</TD></TR></TABLE></DIV>
-<P>If a variable containing a compute is evaluated
-directly in an input script (not during a run), then the values
-accessed by the compute must be current. See the discussion below
-about "Variable Accuracy".
+<P>For I and J, integers can be specified or a variable name, specified
+as v_name, where name is the name of the variable. The rules for this
+syntax are the same as for the "Atom Values and Vectors" discussion
+above.
+</P>
+<P>If a variable containing a compute is evaluated directly in an input
+script (not during a run), then the values accessed by the compute
+must be current. See the discussion below about "Variable Accuracy".
</P>
<HR>
<H4>Fix References
</H4>
<P>Fix references access quantities calculated by a <A HREF = "compute.html">fix</A>.
The ID in the reference should be replaced by the ID of a fix defined
elsewhere in the input script. As discussed in the doc page for the
<A HREF = "fix.html">fix</A> command, fixes can produce global, per-atom, or local
values. Only global and per-atom values can be used in a variable.
Fixes can also produce a scalar, vector, or array. An equal-style
variable can only use scalar values, which means a global scalar, or
an element of a global or per-atom vector or array. Atom-style
variables can use the same scalar values. They can also use per-atom
vector values. A vector value can be a per-atom vector itself, or a
column of an per-atom array. See the doc pages for individual fixes
to see what kind of values they produce.
</P>
<P>The different kinds of fix references are exactly the same as the
compute references listed in the above table, where "c_" is replaced
by "f_". Again, there is no ambiguity as to what a reference means,
since fixes only produce global or per-atom quantities, never both.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR><TD >f_ID</TD><TD > global scalar, or per-atom vector</TD></TR>
<TR><TD >f_ID[I]</TD><TD > Ith element of global vector, or atom I's value in per-atom vector, or Ith column from per-atom array</TD></TR>
<TR><TD >f_ID[I][J]</TD><TD > I,J element of global array, or atom I's Jth value in per-atom array
</TD></TR></TABLE></DIV>
+<P>For I and J, integers can be specified or a variable name, specified
+as v_name, where name is the name of the variable. The rules for this
+syntax are the same as for the "Atom Values and Vectors" discussion
+above.
+</P>
<P>If a variable containing a fix is evaluated directly in an input
script (not during a run), then the values accessed by the fix should
be current. See the discussion below about "Variable Accuracy".
</P>
<P>Note that some fixes only generate quantities on certain timesteps.
If a variable attempts to access the fix on non-allowed timesteps, an
error is generated. For example, the <A HREF = "fix_ave_time.html">fix ave/time</A>
command may only generate averaged quantities every 100 steps. See
the doc pages for individual fix commands for details.
</P>
<HR>
<H4>Variable References
</H4>
<P>Variable references access quantities stored or calculated by other
variables, which will cause those variables to be evaluated. The name
in the reference should be replaced by the name of a variable defined
elsewhere in the input script.
</P>
<P>As discussed on this doc page, equal-style variables generate a global
scalar numeric value; atom-style and atomfile-style variables generate
a per-atom vector of numeric values; all other variables store a
string. The formula for an equal-style variable can use any style of
variable except an atom-style or atomfile-style (unless only a single
value from the variable is accessed via a subscript). If a
string-storing variable is used, the string is converted to a numeric
value. Note that this will typically produce a 0.0 if the string is
not a numeric string, which is likely not what you want. The formula
for an atom-style variable can use any style of variable, including
other atom-style or atomfile-style variables.
</P>
<P>Examples of different kinds of variable references are as follows.
There is no ambiguity as to what a reference means, since variables
produce only a global scalar or a per-atom vector, never both.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR><TD >v_name</TD><TD > scalar, or per-atom vector</TD></TR>
<TR><TD >v_name[I]</TD><TD > atom I's value in per-atom vector
</TD></TR></TABLE></DIV>
+<P>For I, an integer can be specified or a variable name, specified as
+v_name, where name is the name of the variable. The rules for this
+syntax are the same as for the "Atom Values and Vectors" discussion
+above.
+</P>
<HR>
<P><B>Immediate Evaluation of Variables:</B>
</P>
<P>There is a difference between referencing a variable with a leading $
sign (e.g. $x or ${abc}) versus with a leading "v_" (e.g. v_x or
v_abc). The former can be used in any input script command, including
a variable command. The input script parser evaluates the reference
variable immediately and substitutes its value into the command. As
explained in <A HREF = "Section_commands.html#3_2">Section commands 3.2</A> for
"Parsing rules", you can also use un-named "immediate" variables for
this purpose. An variable reference such as
$((xlo+xhi)/2+sqrt(v_area)) evaluates the string between the
parenthesis as an equal-style variable.
</P>
<P>Referencing a variable with a leading "v_" is an optional or required
kind of argument for some commands (e.g. the <A HREF = "fix_ave_spatial.html">fix
ave/spatial</A> or <A HREF = "dump.html">dump custom</A> or
<A HREF = "thermo_style.html">thermo_style</A> commands) if you wish it to evaluate
a variable periodically during a run. It can also be used in a
variable formula if you wish to reference a second variable. The
second variable will be evaluated whenever the first variable is
evaluated.
</P>
<P>As an example, suppose you use this command in your input script to
define the variable "v" as
</P>
<PRE>variable v equal vol
</PRE>
<P>before a run where the simulation box size changes. You might think
this will assign the initial volume to the variable "v". That is not
the case. Rather it assigns a formula which evaluates the volume
(using the thermo_style keyword "vol") to the variable "v". If you
use the variable "v" in some other command like <A HREF = "fix_ave_time.html">fix
ave/time</A> then the current volume of the box will be
evaluated continuously during the run.
</P>
<P>If you want to store the initial volume of the system, you can do it
this way:
</P>
<PRE>variable v equal vol
variable v0 equal $v
</PRE>
<P>The second command will force "v" to be evaluated (yielding the
initial volume) and assign that value to the variable "v0". Thus the
command
</P>
<PRE>thermo_style custom step v_v v_v0
</PRE>
<P>would print out both the current and initial volume periodically
during the run.
</P>
<P>Note that it is a mistake to enclose a variable formula in double
quotes if it contains variables preceeded by $ signs. For example,
</P>
<PRE>variable vratio equal "${vfinal}/${v0}"
</PRE>
<P>This is because the quotes prevent variable substitution (see <A HREF = "Section_commands.html#cmd_2">this
section</A> on parsing input script
commands), and thus an error will occur when the formula for "vratio"
is evaluated later.
</P>
<HR>
<P><B>Variable Accuracy:</B>
</P>
<P>Obviously, LAMMPS attempts to evaluate variables containing formulas
(<I>equal</I> and <I>atom</I> style variables) accurately whenever the
evaluation is performed. Depending on what is included in the
formula, this may require invoking a <A HREF = "compute.html">compute</A>, either
directly or indirectly via a thermo keyword, or accessing a value
previously calculated by a compute, or accessing a value calculated
and stored by a <A HREF = "fix.html">fix</A>. If the compute is one that calculates
the pressure or energy of the system, then these quantities need to be
tallied during the evaluation of the interatomic potentials (pair,
bond, etc) on timesteps that the variable will need the values.
</P>
<P>LAMMPS keeps track of all of this during a <A HREF = "run.html">run</A> or <A HREF = "minimize.html">energy
minimization</A>. An error will be generated if you
attempt to evaluate a variable on timesteps when it cannot produce
accurate values. For example, if a <A HREF = "thermo_style.html">thermo_style
custom</A> command prints a variable which accesses
values stored by a <A HREF = "fix_ave_time.html">fix ave/time</A> command and the
timesteps on which thermo output is generated are not multiples of the
averaging frequency used in the fix command, then an error will occur.
</P>
<P>An input script can also request variables be evaluated before or
after or in between runs, e.g. by including them in a
<A HREF = "print.html">print</A> command. In this case, if a compute is needed to
evaluate a variable (either directly or indirectly), LAMMPS will not
invoke the compute, but it will use a value previously calculated by
the compute, and can do this only if it was invoked on the current
timestep. Fixes will always provide a quantity needed by a variable,
but the quantity may or may not be current. This leads to one of
three kinds of behavior:
</P>
<P>(1) The variable may be evaluated accurately. If it contains
references to a compute or fix, and these values were calculated on
the last timestep of a preceeding run, then they will be accessed and
used by the variable and the result will be accurate.
</P>
<P>(2) LAMMPS may not be able to evaluate the variable and will generate
an error message stating so. For example, if the variable requires a
quantity from a <A HREF = "compute.html">compute</A> that has not been invoked on
the current timestep, LAMMPS will generate an error. This means, for
example, that such a variable cannot be evaluated before the first run
has occurred. Likewise, in between runs, a variable containing a
compute cannot be evaluated unless the compute was invoked on the last
timestep of the preceding run, e.g. by thermodynamic output.
</P>
<P>One way to get around this problem is to perform a 0-timestep run
before using the variable. For example, these commands
</P>
<PRE>variable t equal temp
print "Initial temperature = $t"
run 1000
</PRE>
<P>will generate an error if the run is the first run specified in the
input script, because generating a value for the "t" variable requires
a compute for calculating the temperature to be invoked.
</P>
<P>However, this sequence of commands would be fine:
</P>
<PRE>run 0
variable t equal temp
print "Initial temperature = $t"
run 1000
</PRE>
<P>The 0-timestep run initializes and invokes various computes, including
the one for temperature, so that the value it stores is current and
can be accessed by the variable "t" after the run has completed. Note
that a 0-timestep run does not alter the state of the system, so it
does not change the input state for the 1000-timestep run that
follows. Also note that the 0-timestep run must actually use and
invoke the compute in question (e.g. via <A HREF = "thermo_style.html">thermo</A> or
<A HREF = "dump.html">dump</A> output) in order for it to enable the compute to be
used in a variable after the run. Thus if you are trying to print a
variable that uses a compute you have defined, you can insure it is
invoked on the last timestep of the preceding run by including it in
thermodynamic output.
</P>
<P>Unlike computes, <A HREF = "fix.html">fixes</A> will never generate an error if
their values are accessed by a variable in between runs. They always
return some value to the variable. However, the value may not be what
you expect if the fix has not yet calculated the quantity of interest
or it is not current. For example, the <A HREF = "fix_indent.html">fix indent</A>
command stores the force on the indenter. But this is not computed
until a run is performed. Thus if a variable attempts to print this
value before the first run, zeroes will be output. Again, performing
a 0-timestep run before printing the variable has the desired effect.
</P>
<P>(3) The variable may be evaluated incorrectly and LAMMPS may have no
way to detect this has occurred. Consider the following sequence of
commands:
</P>
<PRE>pair_coeff 1 1 1.0 1.0
run 1000
pair_coeff 1 1 1.5 1.0
variable e equal pe
print "Final potential energy = $e"
</PRE>
<P>The first run is performed using one setting for the pairwise
potential defined by the <A HREF = "pair_style.html">pair_style</A> and
<A HREF = "pair_coeff.html">pair_coeff</A> commands. The potential energy is
evaluated on the final timestep and stored by the <A HREF = "compute_pe.html">compute
pe</A> compute (this is done by the
<A HREF = "thermo_style.html">thermo_style</A> command). Then a pair coefficient is
changed, altering the potential energy of the system. When the
potential energy is printed via the "e" variable, LAMMPS will use the
potential energy value stored by the <A HREF = "compute_pe.html">compute pe</A>
compute, thinking it is current. There are many other commands which
could alter the state of the system between runs, causing a variable
to evaluate incorrectly.
</P>
<P>The solution to this issue is the same as for case (2) above, namely
perform a 0-timestep run before the variable is evaluated to insure
the system is up-to-date. For example, this sequence of commands
would print a potential energy that reflected the changed pairwise
coefficient:
</P>
<PRE>pair_coeff 1 1 1.0 1.0
run 1000
pair_coeff 1 1 1.5 1.0
run 0
variable e equal pe
print "Final potential energy = $e"
</PRE>
<HR>
<P><B>Restrictions:</B>
</P>
<P>Indexing any formula element by global atom ID, such as an atom value,
requires the atom style to use a global mapping in order to look up
the vector indices. By default, only atom styles with molecular
information create global maps. The <A HREF = "atom_modify.html">atom_modify
map</A> command can override the default.
</P>
<P>All <I>universe</I>- and <I>uloop</I>-style variables defined in an input script
must have the same number of values.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "next.html">next</A>, <A HREF = "jump.html">jump</A>, <A HREF = "include.html">include</A>,
<A HREF = "temper.html">temper</A>, <A HREF = "fix_print.html">fix print</A>, <A HREF = "print.html">print</A>
</P>
<P><B>Default:</B> none
</P>
</HTML>
diff --git a/doc/variable.txt b/doc/variable.txt
index 45b2b04f1..849ed72ec 100644
--- a/doc/variable.txt
+++ b/doc/variable.txt
@@ -1,1016 +1,1038 @@
"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
variable command :h3
[Syntax:]
variable name style args ... :pre
name = name of variable to define :ulb,l
style = {delete} or {index} or {loop} or {world} or {universe} or {uloop} or {string} or {format} or {getenv} or {file} or {atomfile} or {equal} or {atom} :l
{delete} = no args
{index} args = one or more strings
{loop} args = N
N = integer size of loop, loop from 1 to N inclusive
{loop} args = N pad
N = integer size of loop, loop from 1 to N inclusive
pad = all values will be same length, e.g. 001, 002, ..., 100
{loop} args = N1 N2
N1,N2 = loop from N1 to N2 inclusive
{loop} args = N1 N2 pad
N1,N2 = loop from N1 to N2 inclusive
pad = all values will be same length, e.g. 050, 051, ..., 100
{world} args = one string for each partition of processors
{universe} args = one or more strings
{uloop} args = N
N = integer size of loop
{uloop} args = N pad
N = integer size of loop
pad = all values will be same length, e.g. 001, 002, ..., 100
{string} arg = one string
{format} args = vname fstr
vname = name of equal-style variable to evaluate
fstr = C-style format string
{getenv} arg = one string
{file} arg = filename
{atomfile} arg = filename
{equal} or {atom} args = one formula containing numbers, thermo keywords, math operations, group functions, atom values and vectors, compute/fix/variable references
numbers = 0.0, 100, -5.4, 2.8e-4, etc
constants = PI
thermo keywords = vol, ke, press, etc from "thermo_style"_thermo_style.html
math operators = (), -x, x+y, x-y, x*y, x/y, x^y,
x==y, x!=y, x<y, x<=y, x>y, x>=y, x&&y, x||y, !x
math functions = sqrt(x), exp(x), ln(x), log(x), abs(x),
sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x),
random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x)
ramp(x,y), stagger(x,y), logfreq(x,y,z), stride(x,y,z), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)
group functions = count(group), mass(group), charge(group),
xcm(group,dim), vcm(group,dim), fcm(group,dim),
bound(group,xmin), gyration(group), ke(group),
angmom(group,dim), torque(group,dim),
inertia(group,dimdim), omega(group,dim)
region functions = count(group,region), mass(group,region), charge(group,region),
xcm(group,dim,region), vcm(group,dim,region), fcm(group,dim,region),
bound(group,xmin,region), gyration(group,region), ke(group,reigon),
angmom(group,dim,region), torque(group,dim,region),
inertia(group,dimdim,region), omega(group,dim,region)
special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x)
atom value = id\[i\], mass\[i\], type\[i\], mol\[i\], x\[i\], y\[i\], z\[i\], vx\[i\], vy\[i\], vz\[i\], fx\[i\], fy\[i\], fz\[i\]
atom vector = id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz
compute references = c_ID, c_ID\[i\], c_ID\[i\]\[j\]
fix references = f_ID, f_ID\[i\], f_ID\[i\]\[j\]
variable references = v_name, v_name\[i\] :pre
:ule
[Examples:]
variable x index run1 run2 run3 run4 run5 run6 run7 run8
variable LoopVar loop $n
variable beta equal temp/3.0
variable b1 equal x\[234\]+0.5*vol
variable b1 equal "x\[234\] + 0.5*vol"
variable b equal xcm(mol1,x)/2.0
variable b equal c_myTemp
variable b atom x*y/vol
variable foo string myfile
variable f file values.txt
variable temp world 300.0 310.0 320.0 $\{Tfinal\}
variable x universe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
variable x uloop 15 pad
variable str format x %.6g
variable x delete :pre
[Description:]
This command assigns one or more strings to a variable name for
evaluation later in the input script or during a simulation.
Variables can thus be useful in several contexts. A variable can be
defined and then referenced elsewhere in an input script to become
part of a new input command. For variable styles that store multiple
strings, the "next"_next.html command can be used to increment which
string is assigned to the variable. Variables of style {equal} store
a formula which when evaluated produces a single numeric value which
can be output either directly (see the "print"_print.html, "fix
print"_fix_print.html, and "run every"_run.html commands) or as part
of thermodynamic output (see the "thermo_style"_thermo_style.html
command), or used as input to an averaging fix (see the "fix
ave/time"_fix_ave_time.html command). Variables of style {atom} store
a formula which when evaluated produces one numeric value per atom
which can be output to a dump file (see the "dump custom"_dump.html
command) or used as input to an averaging fix (see the "fix
ave/spatial"_fix_ave_spatial.html and "fix ave/atom"_fix_ave_atom.html
commands). Variables of style {atomfile} can be used anywhere in an
input script that atom-style variables are used; they get their
per-atom values from a file rather than from a formula.
In the discussion that follows, the "name" of the variable is the
arbitrary string that is the 1st argument in the variable command.
This name can only contain alphanumeric characters and underscores.
The "string" is one or more of the subsequent arguments. The "string"
can be simple text as in the 1st example above, it can contain other
variables as in the 2nd example, or it can be a formula as in the 3rd
example. The "value" is the numeric quantity resulting from
evaluation of the string. Note that the same string can generate
different values when it is evaluated at different times during a
simulation.
IMPORTANT NOTE: When the input script line is encountered that defines
a variable of style {equal} or {atom} that contains a formula, the
formula is NOT immediately evaluated and the result stored. See the
discussion below about "Immediate Evaluation of Variables" if you want
to do this. This is also true of the {format} style variable
since it evaluates another variable when it is invoked.
IMPORTANT NOTE: When a variable command is encountered in the input
script and the variable name has already been specified, the command
is ignored. This means variables can NOT be re-defined in an input
script (with 2 exceptions, read further). This is to allow an input
script to be processed multiple times without resetting the variables;
see the "jump"_jump.html or "include"_include.html commands. It also
means that using the "command-line switch"_Section_start.html#start_7
-var will override a corresponding index variable setting in the input
script.
There are two exceptions to this rule. First, variables of style
{string}, {getenv}, {equal} and {atom} ARE redefined each time the
command is encountered. This allows these style of variables to be
redefined multiple times in an input script. In a loop, this means
the formula associated with an {equal} or {atom} style variable can
change if it contains a substitution for another variable, e.g. $x or
v_x.
Second, as described below, if a variable is iterated on to the end of
its list of strings via the "next"_next.html command, it is removed
from the list of active variables, and is thus available to be
re-defined in a subsequent variable command. The {delete} style does
the same thing.
:line
"This section"_Section_commands.html#cmd_2 of the manual explains how
occurrences of a variable name in an input script line are replaced by
the variable's string. The variable name can be referenced as $x if
the name "x" is a single character, or as $\{LoopVar\} if the name
"LoopVar" is one or more characters.
As described below, for variable styles {index}, {loop}, {file},
{universe}, and {uloop}, which string is assigned to a variable can be
incremented via the "next"_next.html command. When there are no more
strings to assign, the variable is exhausted and a flag is set that
causes the next "jump"_jump.html command encountered in the input
script to be skipped. This enables the construction of simple loops
in the input script that are iterated over and then exited from.
As explained above, an exhausted variable can be re-used in an input
script. The {delete} style also removes the variable, the same as if
it were exhausted, allowing it to be redefined later in the input
script or when the input script is looped over. This can be useful
when breaking out of a loop via the "if"_if.html and "jump"_jump.html
commands before the variable would become exhausted. For example,
label loop
variable a loop 5
print "A = $a"
if "$a > 2" then "jump in.script break"
next a
jump in.script loop
label break
variable a delete :pre
:line
This section describes how various variable styles are defined and
what they store. Many of the styles store one or more strings. Note
that a single string can contain spaces (multiple words), if it is
enclosed in quotes in the variable command. When the variable is
substituted for in another input script command, its returned string
will then be interpreted as multiple arguments in the expanded
command.
For the {index} style, one or more strings are specified. Initially,
the 1st string is assigned to the variable. Each time a
"next"_next.html command is used with the variable name, the next
string is assigned. All processors assign the same string to the
variable.
{Index} style variables with a single string value can also be set by
using the command-line switch -var; see "this
section"_Section_start.html#start_7 for details.
The {loop} style is identical to the {index} style except that the
strings are the integers from 1 to N inclusive, if only one argument N
is specified. This allows generation of a long list of runs
(e.g. 1000) without having to list N strings in the input script.
Initially, the string "1" is assigned to the variable. Each time a
"next"_next.html command is used with the variable name, the next
string ("2", "3", etc) is assigned. All processors assign the same
string to the variable. The {loop} style can also be specified with
two arguments N1 and N2. In this case the loop runs from N1 to N2
inclusive, and the string N1 is initially assigned to the variable.
N1 <= N2 and N2 >= 0 is required.
For the {world} style, one or more strings are specified. There must
be one string for each processor partition or "world". See "this
section"_Section_start.html#start_7 of the manual for information on
running LAMMPS with multiple partitions via the "-partition"
command-line switch. This variable command assigns one string to each
world. All processors in the world are assigned the same string. The
next command cannot be used with {equal} style variables, since there
is only one value per world. This style of variable is useful when
you wish to run different simulations on different partitions, or when
performing a parallel tempering simulation (see the
"temper"_temper.html command), to assign different temperatures to
different partitions.
For the {universe} style, one or more strings are specified. There
must be at least as many strings as there are processor partitions or
"worlds". See "this page"_Section_start.html#start_7 for information
on running LAMMPS with multiple partitions via the "-partition"
command-line switch. This variable command initially assigns one
string to each world. When a "next"_next.html command is encountered
using this variable, the first processor partition to encounter it, is
assigned the next available string. This continues until all the
variable strings are consumed. Thus, this command can be used to run
50 simulations on 8 processor partitions. The simulations will be run
one after the other on whatever partition becomes available, until
they are all finished. {Universe} style variables are incremented
using the files "tmp.lammps.variable" and "tmp.lammps.variable.lock"
which you will see in your directory during such a LAMMPS run.
The {uloop} style is identical to the {universe} style except that the
strings are the integers from 1 to N. This allows generation of long
list of runs (e.g. 1000) without having to list N strings in the input
script.
For the {string} style, a single string is assigned to the variable.
The only difference between this and using the {index} style with a
single string is that a variable with {string} style can be redefined.
E.g. by another command later in the input script, or if the script is
read again in a loop.
For the {format} style, an equal-style variable is specified along
with a C-style format string, e.g. "%f" or "%.10g", which must be
appropriate for formatting a double-precision floating-point value.
This allows an equal-style variable to be formatted specifically for
output as a string, e.g. by the "print"_print.html command, if the
default format "%.15g" has too much precision.
For the {getenv} style, a single string is assigned to the variable
which should be the name of an environment variable. When the
variable is evaluated, it returns the value of the environment
variable, or an empty string if it not defined. This style of
variable can be used to adapt the behavior of LAMMPS input scripts via
environment variable settings, or to retrieve information that has
been previously stored with the "shell putenv"_shell.html command.
Note that because environment variable settings are stored by the
operating systems, they persist beyond a "clear"_clear.html command.
For the {file} style, a filename is provided which contains a list of
strings to assign to the variable, one per line. The strings can be
numeric values if desired. See the discussion of the next() function
below for equal-style variables, which will convert the string of a
file-style variable into a numeric value in a formula.
When a file-style variable is defined, the file is opened and the
string on the first line is read and stored with the variable. This
means the variable can then be evaluated as many times as desired and
will return that string. There are two ways to cause the next string
from the file to be read: use the "next"_next.html command or the
next() function in an equal- or atom-style variable, as discussed
below.
The rules for formatting the file are as follows. A comment character
"#" can be used anywhere on a line; text starting with the comment
character is stripped. Blank lines are skipped. The first "word" of
a non-blank line, delimited by white space, is the "string" assigned
to the variable.
For the {atomfile} style, a filename is provided which contains one or
more sets of values, to assign on a per-atom basis to the variable.
The format of the file is described below.
When an atomfile-style variable is defined, the file is opened and the
first set of per-atom values are read and stored with the variable.
This means the variable can then be evaluated as many times as desired
and will return those values. There are two ways to cause the next
set of per-atom values from the file to be read: use the
"next"_next.html command or the next() function in an atom-style
variable, as discussed below.
The rules for formatting the file are as follows. Each time a set of
per-atom values is read, a non-blank line is searched for in the file.
A comment character "#" can be used anywhere on a line; text starting
with the comment character is stripped. Blank lines are skipped. The
first "word" of a non-blank line, delimited by white space, is read as
the count N of per-atom lines to immediately follow. N can be be the
total number of atoms in the system, or only a subset. The next N
lines have the following format
ID value :pre
where ID is an atom ID and value is the per-atom numeric value that
will be assigned to that atom. IDs can be listed in any order.
IMPORTANT NOTE: Every time a set of per-atom lines is read, the value
for all atoms is first set to 0.0. Thus values for atoms whose ID
does not appear in the set, will remain 0.0.
:line
For the {equal} and {atom} styles, a single string is specified which
represents a formula that will be evaluated afresh each time the
variable is used. If you want spaces in the string, enclose it in
double quotes so the parser will treat it as a single argument. For
{equal} style variables the formula computes a scalar quantity, which
becomes the value of the variable whenever it is evaluated. For
{atom} style variables the formula computes one quantity for each
atom whenever it is evaluated.
Note that {equal} and {atom} variables can produce different values at
different stages of the input script or at different times during a
run. For example, if an {equal} variable is used in a "fix
print"_fix_print.html command, different values could be printed each
timestep it was invoked. If you want a variable to be evaluated
immediately, so that the result is stored by the variable instead of
the string, see the section below on "Immediate Evaluation of
Variables".
The next command cannot be used with {equal} or {atom} style
variables, since there is only one string.
The formula for an {equal} or {atom} variable can contain a variety
of quantities. The syntax for each kind of quantity is simple, but
multiple quantities can be nested and combined in various ways to
build up formulas of arbitrary complexity. For example, this is a
valid (though strange) variable formula:
variable x equal "pe + c_MyTemp / vol^(1/3)" :pre
Specifically, an formula can contain numbers, thermo keywords, math
operators, math functions, group functions, region functions, atom
values, atom vectors, compute references, fix references, and
references to other variables.
Number: 0.2, 100, 1.0e20, -15.4, etc
Constant: PI
Thermo keywords: vol, pe, ebond, etc
Math operators: (), -x, x+y, x-y, x*y, x/y, x^y, x==y, x!=y, x<y, x<=y, x>y, x>=y, x&&y, x||y, !x
Math functions: sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), ramp(x,y), stagger(x,y), logfreq(x,y,z), stride(x,y,z), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)
Group functions: count(ID), mass(ID), charge(ID), xcm(ID,dim), \
vcm(ID,dim), fcm(ID,dim), bound(ID,dir), \
gyration(ID), ke(ID), angmom(ID,dim), torque(ID,dim), \
inertia(ID,dimdim), omega(ID,dim)
Region functions: count(ID,IDR), mass(ID,IDR), charge(ID,IDR), \
xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), \
bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), \
angmom(ID,dim,IDR), torque(ID,dim,IDR), \
inertia(ID,dimdim,IDR), omega(ID,dim,IDR)
Special functions: sum(x), min(x), max(x), ave(x), trap(x), slope(x), gmask(x), rmask(x), grmask(x,y), next(x)
Atom values: id\[i\], mass\[i\], type\[i\], mol\[i\], x\[i\], y\[i\], z\[i\], \
vx\[i\], vy\[i\], vz\[i\], fx\[i\], fy\[i\], fz\[i\]
Atom vectors: id, mass, type, mol, x, y, z, vx, vy, vz, fx, fy, fz
Compute references: c_ID, c_ID\[i\], c_ID\[i\]\[j\]
Fix references: f_ID, f_ID\[i\], f_ID\[i\]\[j\]
Other variables: v_name, v_name\[i\] :tb(s=:)
:line
Most of the formula elements produce a scalar value. A few produce a
per-atom vector of values. These are the atom vectors, compute
references that represent a per-atom vector, fix references that
represent a per-atom vector, and variables that are atom-style
variables. Math functions that operate on scalar values produce a
scalar value; math function that operate on per-atom vectors do so
element-by-element and produce a per-atom vector.
A formula for equal-style variables cannot use any formula element
that produces a per-atom vector. A formula for an atom-style variable
can use formula elements that produce either a scalar value or a
per-atom vector. Atom-style variables are evaluated by other commands
that define a "group"_group.html on which they operate, e.g. a
"dump"_dump.html or "compute"_compute.html or "fix"_fix.html command.
When they invoke the atom-style variable, only atoms in the group are
inlcuded in the formula evaluation. The variable evaluates to 0.0 for
atoms not in the group.
The thermo keywords allowed in a formula are those defined by the
"thermo_style custom"_thermo_style.html command. Thermo keywords that
require a "compute"_compute.html to calculate their values such as
"temp" or "press", use computes stored and invoked by the
"thermo_style"_thermo_style.html command. This means that you can
only use those keywords in a variable if the style you are using with
the thermo_style command (and the thermo keywords associated with that
style) also define and use the needed compute. Note that some thermo
keywords use a compute indirectly to calculate their value (e.g. the
enthalpy keyword uses temp, pe, and pressure). If a variable is
evaluated directly in an input script (not during a run), then the
values accessed by the thermo keyword must be current. See the
discussion below about "Variable Accuracy".
:line
Math Operators :h4
Math operators are written in the usual way, where the "x" and "y" in
the examples can themselves be arbitrarily complex formulas, as in the
examples above. In this syntax, "x" and "y" can be scalar values or
per-atom vectors. For example, "ke/natoms" is the division of two
scalars, where "vy+vz" is the element-by-element sum of two per-atom
vectors of y and z velocities.
Operators are evaluated left to right and have the usual C-style
precedence: unary minus and unary logical NOT operator "!" have the
highest precedence, exponentiation "^" is next; multiplication and
division are next; addition and subtraction are next; the 4 relational
operators "<", "<=", ">", and ">=" are next; the two remaining
relational operators "==" and "!=" are next; then the logical AND
operator "&&"; and finally the logical OR operator "||" has the lowest
precedence. Parenthesis can be used to group one or more portions of
a formula and/or enforce a different order of evaluation than what
would occur with the default precedence.
IMPORTANT NOTE: Because a unary minus is higher precedence than
exponentiation, the formula "-2^2" will evaluate to 4, not -4. This
convention is compatible with some programming languages, but not
others. As mentioned, this behavior can be easily overridden with
parenthesis; the formula "-(2^2)" will evaluate to -4.
The 6 relational operators return either a 1.0 or 0.0 depending on
whether the relationship between x and y is TRUE or FALSE. For
example the expression x<10.0 in an atom-style variable formula will
return 1.0 for all atoms whose x-coordinate is less than 10.0, and 0.0
for the others. The logical AND operator will return 1.0 if both its
arguments are non-zero, else it returns 0.0. The logical OR operator
will return 1.0 if either of its arguments is non-zero, else it
returns 0.0. The logical NOT operator returns 1.0 if its argument is
0.0, else it returns 0.0.
These relational and logical operators can be used as a masking or
selection operation in a formula. For example, the number of atoms
whose properties satifsy one or more criteria could be calculated by
taking the returned per-atom vector of ones and zeroes and passing it
to the "compute reduce"_compute_reduce.html command.
:line
Math Functions :h4
Math functions are specified as keywords followed by one or more
parenthesized arguments "x", "y", "z", each of which can themselves be
arbitrarily complex formulas. In this syntax, the arguments can
represent scalar values or per-atom vectors. In the latter case, the
math operation is performed on each element of the vector. For
example, "sqrt(natoms)" is the sqrt() of a scalar, where "sqrt(y*z)"
yields a per-atom vector with each element being the sqrt() of the
product of one atom's y and z coordinates.
Most of the math functions perform obvious operations. The ln() is
the natural log; log() is the base 10 log.
The random(x,y,z) function takes 3 arguments: x = lo, y = hi, and z =
seed. It generates a uniform random number between lo and hi. The
normal(x,y,z) function also takes 3 arguments: x = mu, y = sigma, and
z = seed. It generates a Gaussian variate centered on mu with
variance sigma^2. In both cases the seed is used the first time the
internal random number generator is invoked, to initialize it. For
equal-style variables, every processor uses the same seed so that they
each generate the same sequence of random numbers. For atom-style
variables, a unique seed is created for each processor, based on the
specified seed. This effectively generates a different random number
for each atom being looped over in the atom-style variable.
IMPORTANT NOTE: Internally, there is just one random number generator
for all equal-style variables and one for all atom-style variables.
If you define multiple variables (of each style) which use the
random() or normal() math functions, then the internal random number
generators will only be initialized once, which means only one of the
specified seeds will determine the sequence of generated random
numbers.
The ceil(), floor(), and round() functions are those in the C math
library. Ceil() is the smallest integer not less than its argument.
Floor() if the largest integer not greater than its argument. Round()
is the nearest integer to its argument.
The ramp(x,y) function uses the current timestep to generate a value
linearly intepolated between the specified x,y values over the course
of a run, according to this formula:
value = x + (y-x) * (timestep-startstep) / (stopstep-startstep) :pre
The run begins on startstep and ends on stopstep. Startstep and
stopstep can span multiple runs, using the {start} and {stop} keywords
of the "run"_run.html command. See the "run"_run.html command for
details of how to do this.
The stagger(x,y) function uses the current timestep to generate a new
timestep. X,y > 0 and x > y are required. The generated timesteps
increase in a staggered fashion, as the sequence
x,x+y,2x,2x+y,3x,3x+y,etc. For any current timestep, the next
timestep in the sequence is returned. Thus if stagger(1000,100) is
used in a variable by the "dump_modify every"_dump_modify.html
command, it will generate the sequence of output timesteps:
100,1000,1100,2000,2100,3000,etc :pre
The logfreq(x,y,z) function uses the current timestep to generate a
new timestep. X,y,z > 0 and y < z are required. The generated
timesteps increase in a logarithmic fashion, as the sequence
x,2x,3x,...y*x,z*x,2*z*x,3*z*x,...y*z*x,z*z*x,2*z*x*x,etc. For any
current timestep, the next timestep in the sequence is returned. Thus
if logfreq(100,4,10) is used in a variable by the "dump_modify
every"_dump_modify.html command, it will generate the sequence of
output timesteps:
100,200,300,400,1000,2000,3000,4000,10000,20000,etc :pre
The stride(x,y,z) function uses the current timestep to generate a new
timestep. X,y >= 0 and z > 0 and x <= y are required. The generated
timesteps increase in increments of z, from x to y, I.e. it generates
the sequece x,x+z,x+2z,...,y. If y-x is not a multiple of z, then
similar to the way a for loop operates, the last value will be one
that does not exceed y. For any current timestep, the next timestep
in the sequence is returned. Thus if stagger(1000,2000,100) is used
in a variable by the "dump_modify every"_dump_modify.html command, it
will generate the sequence of output timesteps:
1000,1100,1200, ... ,1900,2000 :pre
The vdisplace(x,y) function takes 2 arguments: x = value0 and y =
velocity, and uses the elapsed time to change the value by a linear
displacement due to the applied velocity over the course of a run,
according to this formula:
value = value0 + velocity*(timestep-startstep)*dt :pre
where dt = the timestep size.
The run begins on startstep. Startstep can span multiple runs, using
the {start} keyword of the "run"_run.html command. See the
"run"_run.html command for details of how to do this. Note that the
"thermo_style"_thermo_style.html keyword elaplong =
timestep-startstep.
The swiggle(x,y,z) and cwiggle(x,y,z) functions each take 3 arguments:
x = value0, y = amplitude, z = period. They use the elapsed time to
oscillate the value by a sin() or cos() function over the course of a
run, according to one of these formulas, where omega = 2 PI / period:
value = value0 + Amplitude * sin(omega*(timestep-startstep)*dt)
value = value0 + Amplitude * (1 - cos(omega*(timestep-startstep)*dt)) :pre
where dt = the timestep size.
The run begins on startstep. Startstep can span multiple runs, using
the {start} keyword of the "run"_run.html command. See the
"run"_run.html command for details of how to do this. Note that the
"thermo_style"_thermo_style.html keyword elaplong =
timestep-startstep.
:line
Group and Region Functions :h4
Group functions are specified as keywords followed by one or two
parenthesized arguments. The first argument is the group-ID. The
{dim} argument, if it exists, is {x} or {y} or {z}. The {dir}
argument, if it exists, is {xmin}, {xmax}, {ymin}, {ymax}, {zmin}, or
{zmax}. The {dimdim} argument, if it exists, is {xx} or {yy} or {zz}
or {xy} or {yz} or {xz}.
The group function count() is the number of atoms in the group. The
group functions mass() and charge() are the total mass and charge of
the group. Xcm() and vcm() return components of the position and
velocity of the center of mass of the group. Fcm() returns a
component of the total force on the group of atoms. Bound() returns
the min/max of a particular coordinate for all atoms in the group.
Gyration() computes the radius-of-gyration of the group of atoms. See
the "compute gyration"_compute_gyration.html command for a definition
of the formula. Angmom() returns components of the angular momentum
of the group of atoms around its center of mass. Torque() returns
components of the torque on the group of atoms around its center of
mass, based on current forces on the atoms. Inertia() returns one of
6 components of the symmetric inertia tensor of the group of atoms
around its center of mass, ordered as Ixx,Iyy,Izz,Ixy,Iyz,Ixz.
Omega() returns components of the angular velocity of the group of
atoms around its center of mass.
Region functions are specified exactly the same way as group functions
except they take an extra argument which is the region ID. The
function is computed for all atoms that are in both the group and the
region. If the group is "all", then the only criteria for atom
inclusion is that it be in the region.
:line
Special Functions :h4
Special functions take specific kinds of arguments, meaning their
arguments cannot be formulas themselves.
The sum(x), min(x), max(x), ave(x), trap(x), and slope(x) functions
each take 1 argument which is of the form "c_ID" or "c_ID\[N\]" or
"f_ID" or "f_ID\[N\]". The first two are computes and the second two
are fixes; the ID in the reference should be replaced by the ID of a
compute or fix defined elsewhere in the input script. The compute or
fix must produce either a global vector or array. If it produces a
global vector, then the notation without "\[N\]" should be used. If
it produces a global array, then the notation with "\[N\]" should be
used, when N is an integer, to specify which column of the global
array is being referenced.
These functions operate on the global vector of inputs and reduce it
to a single scalar value. This is analagous to the operation of the
"compute reduce"_compute_reduce.html command, which invokes the same
functions on per-atom and local vectors.
The sum() function calculates the sum of all the vector elements. The
min() and max() functions find the minimum and maximum element
respectively. The ave() function is the same as sum() except that it
divides the result by the length of the vector.
The trap() function is the same as sum() except the first and last
elements are multiplied by a weighting factor of 1/2 when performing
the sum. This effectively implements an integration via the
trapezoidal rule on the global vector of data. I.e. consider a set of
points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2),
..., (N,VN), where the Vi are the values in the global vector of
length N. The integral from 1 to N of these points is trap(). When
appropriately normalized by the timestep size, this function is useful
for calculating integrals of time-series data, like that generated by
the "fix ave/correlate"_fix_ave_correlate.html command.
The slope() function uses linear regression to fit a line to the set
of points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2),
..., (N,VN), where the Vi are the values in the global vector of
length N. The returned value is the slope of the line. If the line
has a single point or is vertical, it returns 1.0e20.
The gmask(x) function takes 1 argument which is a group ID. It
can only be used in atom-style variables. It returns a 1 for
atoms that are in the group, and a 0 for atoms that are not.
The rmask(x) function takes 1 argument which is a region ID. It can
only be used in atom-style variables. It returns a 1 for atoms that
are in the geometric region, and a 0 for atoms that are not.
The grmask(x,y) function takes 2 arguments. The first is a group ID,
and the second is a region ID. It can only be used in atom-style
variables. It returns a 1 for atoms that are in both the group and
region, and a 0 for atoms that are not in both.
The next(x) function takes 1 argument which is a variable ID (not
"v_foo", just "foo"). It must be for a file-style or atomfile-style
variable. Each time the next() function is invoked (i.e. each time
the equal-style or atom-style variable is evaluated), the following
steps occur.
For file-style variables, the current string value stored by the
file-style variable is converted to a numeric value and returned by
the function. And the next string value in the file is read and
stored. Note that if the line previously read from the file was not a
numeric string, then it will typically evaluate to 0.0, which is
likely not what you want.
For atomfile-style variables, the current per-atom values stored by
the atomfile-style variable are returned by the function. And the
next set of per-atom values in the file is read and stored.
Since file-style and atomfile-style variables read and store the first
line of the file or first set of per-atoms values when they are
defined in the input script, these are the value(s) that will be
returned the first time the next() function is invoked. If next() is
invoked more times than there are lines or sets of lines in the file,
the variable is deleted, similar to how the "next"_next.html command
operates.
:line
Atom Values and Vectors :h4
-Atom values take a single integer argument I from 1 to N, where I is
-the an atom-ID, e.g. x\[243\], which means use the x coordinate of the
-atom with ID = 243.
+Atom values take an integer argument I from 1 to N, where I is the an
+atom-ID, e.g. x\[243\], which means use the x coordinate of the atom
+with ID = 243. Or they can take a variable name, specified as v_name,
+where name is the name of the variable, like x\[v_myIndex\]. The
+variable can be of any style except atom or atom-file variables. The
+variable is evaluated and the result is expected to be numeric and is
+cast to an integer (i.e. 3.4 becomes 3), to use an an index, which
+must be a value from 1 to N. Note that a "formula" cannot be used as
+the argument between the brackets, e.g. x\[243+10\] or
+x\[v_myIndex+1\] are not allowed. To do this a single variable can be
+defined that contains the needed formula.
Atom vectors generate one value per atom, so that a reference like
"vx" means the x-component of each atom's velocity will be used when
evaluating the variable.
The meaning of the different atom values and vectors is mostly
-self-explanatory. Mol refernces the molecule ID of an atom, and is
-only defined if an "atom_style"_atom_style.html is being used
-that defines molecule IDs.
+self-explanatory. Mol refers to the molecule ID of an atom, and is
+only defined if an "atom_style"_atom_style.html is being used that
+defines molecule IDs.
Note that many other atom attributes can be used as inputs to a
variable by using the "compute
property/atom"_compute_property_atom.html command and then specifying
a quantity from that compute.
:line
Compute References :h4
Compute references access quantities calculated by a
"compute"_compute.html. The ID in the reference should be replaced by
the ID of a compute defined elsewhere in the input script. As
discussed in the doc page for the "compute"_compute.html command,
computes can produce global, per-atom, or local values. Only global
and per-atom values can be used in a variable. Computes can also
produce a scalar, vector, or array. An equal-style variable can only
use scalar values, which means a global scalar, or an element of a
global or per-atom vector or array. Atom-style variables can use the
same scalar values. They can also use per-atom vector values. A
vector value can be a per-atom vector itself, or a column of an
per-atom array. See the doc pages for individual computes to see what
kind of values they produce.
Examples of different kinds of compute references are as follows.
There is no ambiguity as to what a reference means, since computes
only produce global or per-atom quantities, never both.
c_ID: global scalar, or per-atom vector
c_ID\[I\]: Ith element of global vector, or atom I's value in per-atom vector, or Ith column from per-atom array
c_ID\[I\]\[J\]: I,J element of global array, or atom I's Jth value in per-atom array :tb(s=:)
-If a variable containing a compute is evaluated
-directly in an input script (not during a run), then the values
-accessed by the compute must be current. See the discussion below
-about "Variable Accuracy".
+For I and J, integers can be specified or a variable name, specified
+as v_name, where name is the name of the variable. The rules for this
+syntax are the same as for the "Atom Values and Vectors" discussion
+above.
+
+If a variable containing a compute is evaluated directly in an input
+script (not during a run), then the values accessed by the compute
+must be current. See the discussion below about "Variable Accuracy".
:line
Fix References :h4
Fix references access quantities calculated by a "fix"_compute.html.
The ID in the reference should be replaced by the ID of a fix defined
elsewhere in the input script. As discussed in the doc page for the
"fix"_fix.html command, fixes can produce global, per-atom, or local
values. Only global and per-atom values can be used in a variable.
Fixes can also produce a scalar, vector, or array. An equal-style
variable can only use scalar values, which means a global scalar, or
an element of a global or per-atom vector or array. Atom-style
variables can use the same scalar values. They can also use per-atom
vector values. A vector value can be a per-atom vector itself, or a
column of an per-atom array. See the doc pages for individual fixes
to see what kind of values they produce.
The different kinds of fix references are exactly the same as the
compute references listed in the above table, where "c_" is replaced
by "f_". Again, there is no ambiguity as to what a reference means,
since fixes only produce global or per-atom quantities, never both.
f_ID: global scalar, or per-atom vector
f_ID\[I\]: Ith element of global vector, or atom I's value in per-atom vector, or Ith column from per-atom array
f_ID\[I\]\[J\]: I,J element of global array, or atom I's Jth value in per-atom array :tb(s=:)
+For I and J, integers can be specified or a variable name, specified
+as v_name, where name is the name of the variable. The rules for this
+syntax are the same as for the "Atom Values and Vectors" discussion
+above.
+
If a variable containing a fix is evaluated directly in an input
script (not during a run), then the values accessed by the fix should
be current. See the discussion below about "Variable Accuracy".
Note that some fixes only generate quantities on certain timesteps.
If a variable attempts to access the fix on non-allowed timesteps, an
error is generated. For example, the "fix ave/time"_fix_ave_time.html
command may only generate averaged quantities every 100 steps. See
the doc pages for individual fix commands for details.
:line
Variable References :h4
Variable references access quantities stored or calculated by other
variables, which will cause those variables to be evaluated. The name
in the reference should be replaced by the name of a variable defined
elsewhere in the input script.
As discussed on this doc page, equal-style variables generate a global
scalar numeric value; atom-style and atomfile-style variables generate
a per-atom vector of numeric values; all other variables store a
string. The formula for an equal-style variable can use any style of
variable except an atom-style or atomfile-style (unless only a single
value from the variable is accessed via a subscript). If a
string-storing variable is used, the string is converted to a numeric
value. Note that this will typically produce a 0.0 if the string is
not a numeric string, which is likely not what you want. The formula
for an atom-style variable can use any style of variable, including
other atom-style or atomfile-style variables.
Examples of different kinds of variable references are as follows.
There is no ambiguity as to what a reference means, since variables
produce only a global scalar or a per-atom vector, never both.
v_name: scalar, or per-atom vector
v_name\[I\]: atom I's value in per-atom vector :tb(s=:)
+For I, an integer can be specified or a variable name, specified as
+v_name, where name is the name of the variable. The rules for this
+syntax are the same as for the "Atom Values and Vectors" discussion
+above.
+
:line
[Immediate Evaluation of Variables:]
There is a difference between referencing a variable with a leading $
sign (e.g. $x or $\{abc\}) versus with a leading "v_" (e.g. v_x or
v_abc). The former can be used in any input script command, including
a variable command. The input script parser evaluates the reference
variable immediately and substitutes its value into the command. As
explained in "Section commands 3.2"_Section_commands.html#3_2 for
"Parsing rules", you can also use un-named "immediate" variables for
this purpose. An variable reference such as
$((xlo+xhi)/2+sqrt(v_area)) evaluates the string between the
parenthesis as an equal-style variable.
Referencing a variable with a leading "v_" is an optional or required
kind of argument for some commands (e.g. the "fix
ave/spatial"_fix_ave_spatial.html or "dump custom"_dump.html or
"thermo_style"_thermo_style.html commands) if you wish it to evaluate
a variable periodically during a run. It can also be used in a
variable formula if you wish to reference a second variable. The
second variable will be evaluated whenever the first variable is
evaluated.
As an example, suppose you use this command in your input script to
define the variable "v" as
variable v equal vol :pre
before a run where the simulation box size changes. You might think
this will assign the initial volume to the variable "v". That is not
the case. Rather it assigns a formula which evaluates the volume
(using the thermo_style keyword "vol") to the variable "v". If you
use the variable "v" in some other command like "fix
ave/time"_fix_ave_time.html then the current volume of the box will be
evaluated continuously during the run.
If you want to store the initial volume of the system, you can do it
this way:
variable v equal vol
variable v0 equal $v :pre
The second command will force "v" to be evaluated (yielding the
initial volume) and assign that value to the variable "v0". Thus the
command
thermo_style custom step v_v v_v0 :pre
would print out both the current and initial volume periodically
during the run.
Note that it is a mistake to enclose a variable formula in double
quotes if it contains variables preceeded by $ signs. For example,
variable vratio equal "$\{vfinal\}/$\{v0\}" :pre
This is because the quotes prevent variable substitution (see "this
section"_Section_commands.html#cmd_2 on parsing input script
commands), and thus an error will occur when the formula for "vratio"
is evaluated later.
:line
[Variable Accuracy:]
Obviously, LAMMPS attempts to evaluate variables containing formulas
({equal} and {atom} style variables) accurately whenever the
evaluation is performed. Depending on what is included in the
formula, this may require invoking a "compute"_compute.html, either
directly or indirectly via a thermo keyword, or accessing a value
previously calculated by a compute, or accessing a value calculated
and stored by a "fix"_fix.html. If the compute is one that calculates
the pressure or energy of the system, then these quantities need to be
tallied during the evaluation of the interatomic potentials (pair,
bond, etc) on timesteps that the variable will need the values.
LAMMPS keeps track of all of this during a "run"_run.html or "energy
minimization"_minimize.html. An error will be generated if you
attempt to evaluate a variable on timesteps when it cannot produce
accurate values. For example, if a "thermo_style
custom"_thermo_style.html command prints a variable which accesses
values stored by a "fix ave/time"_fix_ave_time.html command and the
timesteps on which thermo output is generated are not multiples of the
averaging frequency used in the fix command, then an error will occur.
An input script can also request variables be evaluated before or
after or in between runs, e.g. by including them in a
"print"_print.html command. In this case, if a compute is needed to
evaluate a variable (either directly or indirectly), LAMMPS will not
invoke the compute, but it will use a value previously calculated by
the compute, and can do this only if it was invoked on the current
timestep. Fixes will always provide a quantity needed by a variable,
but the quantity may or may not be current. This leads to one of
three kinds of behavior:
(1) The variable may be evaluated accurately. If it contains
references to a compute or fix, and these values were calculated on
the last timestep of a preceeding run, then they will be accessed and
used by the variable and the result will be accurate.
(2) LAMMPS may not be able to evaluate the variable and will generate
an error message stating so. For example, if the variable requires a
quantity from a "compute"_compute.html that has not been invoked on
the current timestep, LAMMPS will generate an error. This means, for
example, that such a variable cannot be evaluated before the first run
has occurred. Likewise, in between runs, a variable containing a
compute cannot be evaluated unless the compute was invoked on the last
timestep of the preceding run, e.g. by thermodynamic output.
One way to get around this problem is to perform a 0-timestep run
before using the variable. For example, these commands
variable t equal temp
print "Initial temperature = $t"
run 1000 :pre
will generate an error if the run is the first run specified in the
input script, because generating a value for the "t" variable requires
a compute for calculating the temperature to be invoked.
However, this sequence of commands would be fine:
run 0
variable t equal temp
print "Initial temperature = $t"
run 1000 :pre
The 0-timestep run initializes and invokes various computes, including
the one for temperature, so that the value it stores is current and
can be accessed by the variable "t" after the run has completed. Note
that a 0-timestep run does not alter the state of the system, so it
does not change the input state for the 1000-timestep run that
follows. Also note that the 0-timestep run must actually use and
invoke the compute in question (e.g. via "thermo"_thermo_style.html or
"dump"_dump.html output) in order for it to enable the compute to be
used in a variable after the run. Thus if you are trying to print a
variable that uses a compute you have defined, you can insure it is
invoked on the last timestep of the preceding run by including it in
thermodynamic output.
Unlike computes, "fixes"_fix.html will never generate an error if
their values are accessed by a variable in between runs. They always
return some value to the variable. However, the value may not be what
you expect if the fix has not yet calculated the quantity of interest
or it is not current. For example, the "fix indent"_fix_indent.html
command stores the force on the indenter. But this is not computed
until a run is performed. Thus if a variable attempts to print this
value before the first run, zeroes will be output. Again, performing
a 0-timestep run before printing the variable has the desired effect.
(3) The variable may be evaluated incorrectly and LAMMPS may have no
way to detect this has occurred. Consider the following sequence of
commands:
pair_coeff 1 1 1.0 1.0
run 1000
pair_coeff 1 1 1.5 1.0
variable e equal pe
print "Final potential energy = $e" :pre
The first run is performed using one setting for the pairwise
potential defined by the "pair_style"_pair_style.html and
"pair_coeff"_pair_coeff.html commands. The potential energy is
evaluated on the final timestep and stored by the "compute
pe"_compute_pe.html compute (this is done by the
"thermo_style"_thermo_style.html command). Then a pair coefficient is
changed, altering the potential energy of the system. When the
potential energy is printed via the "e" variable, LAMMPS will use the
potential energy value stored by the "compute pe"_compute_pe.html
compute, thinking it is current. There are many other commands which
could alter the state of the system between runs, causing a variable
to evaluate incorrectly.
The solution to this issue is the same as for case (2) above, namely
perform a 0-timestep run before the variable is evaluated to insure
the system is up-to-date. For example, this sequence of commands
would print a potential energy that reflected the changed pairwise
coefficient:
pair_coeff 1 1 1.0 1.0
run 1000
pair_coeff 1 1 1.5 1.0
run 0
variable e equal pe
print "Final potential energy = $e" :pre
:line
[Restrictions:]
Indexing any formula element by global atom ID, such as an atom value,
requires the atom style to use a global mapping in order to look up
the vector indices. By default, only atom styles with molecular
information create global maps. The "atom_modify
map"_atom_modify.html command can override the default.
All {universe}- and {uloop}-style variables defined in an input script
must have the same number of values.
[Related commands:]
"next"_next.html, "jump"_jump.html, "include"_include.html,
"temper"_temper.html, "fix print"_fix_print.html, "print"_print.html
[Default:] none
diff --git a/examples/README b/examples/README
index 929cf7d15..33a28a98b 100644
--- a/examples/README
+++ b/examples/README
@@ -1,141 +1,142 @@
LAMMPS example problems
There are 3 flavors of sub-directories in this file, each with sample
problems you can run with LAMMPS.
lower-case directories = simple test problems for LAMMPS and its packages
upper-case directories = more complex problems
USER directory with its own sub-directories = tests for USER packages
Each is discussed below.
------------------------------------------
Lower-case directories
Each of these sub-directories contains a sample problem you can run
with LAMMPS. Most are 2d models so that they run quickly, requiring a
few seconds to a few minutes to run on a desktop machine. Each
problem has an input script (in.*) and produces a log file (log.*) and
(optionally) a dump file (dump.*) or image files (image.*) or movie
(movie.mpg) when it runs. Some use a data file (data.*) of initial
coordinates as additional input. Some require that you install one or
more optional LAMMPS packages.
A few sample log file outputs on different machines and different
numbers of processors are included in the directories to compare your
answers to. E.g. a log file like log.crack.date.foo.P means it ran on
P processors of machine "foo" with the dated version of LAMMPS. Note
that these problems should get statistically similar answers when run
on different machines or different numbers of processors, but not
identical answers to those in the log of dump files included here.
See the Errors section of the LAMMPS documentation for more
discussion.
Most of the example input scripts have commented-out lines that
produce dump snapshots of the running simulation in any of 3 formats.
If you uncomment the dump command in the input script, a text dump
file will be produced, which can be animated by various visualization
programs (see http://lammps.sandia.gov/viz.html) such as VMD or
AtomEye. It can also be animated using the xmovie tool described in
the Additional Tools section of the LAMMPS documentation.
If you uncomment the dump image command in the input script, and
assuming you have built LAMMPS with a JPG library, JPG snapshot images
will be produced when the simulation runs. They can be quickly
post-processed into a movie using commands described on the dump image
doc page.
If you uncomment the dump movie command in the input script, and
assuming you have built LAMMPS with the FFMPEG library, an MPG movie
will be produced when the simulation runs. The movie file can be
played using various viewers, such as mplayer or QuickTime.
Animations of many of these examples can be viewed on the Movies
section of the LAMMPS WWW Site.
These are the sample problems and their output in the various
sub-directories:
body: body particles, 2d system
colloid: big colloid particles in a small particle solvent, 2d system
comb: models using the COMB potential
crack: crack propagation in a 2d solid
deposit: deposition of atoms and molecules onto a 3d substrate
dipole: point dipolar particles, 2d system
dreiding: methanol via Dreiding FF
eim: NaCl using the EIM potential
ellipse: ellipsoidal particles in spherical solvent, 2d system
flow: Couette and Poiseuille flow in a 2d channel
friction: frictional contact of spherical asperities between 2d surfaces
gpu: use of the GPU package for GPU acceleration
hugoniostat: Hugoniostat shock dynamics
indent: spherical indenter into a 2d solid
kim: use of potentials in Knowledge Base for Interatomic Models (KIM)
meam: MEAM test for SiC and shear (same as shear examples)
melt: rapid melt of 3d LJ system
micelle: self-assembly of small lipid-like molecules into 2d bilayers
min: energy minimization of 2d LJ melt
msst: MSST shock dynamics
+nb3b: use of NB3B pair style
neb: nudged elastic band (NEB) calculation for barrier finding
nemd: non-equilibrium MD of 2d sheared system
obstacle: flow around two voids in a 2d channel
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
prd: parallel replica dynamics of vacancy diffusion in bulk Si
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
srd: stochastic rotation dynamics (SRD) particles as solvent
tad: temperature-accelerated dynamics of vacancy diffusion in bulk Si
voronoi: test of Voronoi tesselation in compute voronoi/atom
Here is how you might run and visualize one of the sample problems:
cd indent
cp ../../src/lmp_linux . # copy LAMMPS executable to this dir
lmp_linux < in.indent # run the problem
Running the simulation produces the files {dump.indent} and
{log.lammps}. You can visualize the dump file as follows:
../../tools/xmovie/xmovie -scale dump.indent
If you uncomment the dump image line(s) in the input script a series
of JPG images will be produced by the run. These can be viewed
individually or turned into a movie or animated by tools like
ImageMagick or QuickTime or various Windows-based tools. See the dump
image doc page for more details. E.g. this Imagemagick command would
create a GIF file suitable for viewing in a browser.
% convert -loop 1 *.jpg foo.gif
------------------------------------------
Upper-case directories
The ASPHERE directory has examples of how to model aspherical
particles with or without solvent, in 3 styles LAMMPS provides.
Namely point ellipsoids, rigid bodies, and generalized aspherical
bodies built from line/triangle surface facets in 2d/3d. See the
ASPHERE/README file to get started.
The COUPLE directory has examples of how to use LAMMPS as a library,
either by itself or in tandem with another code or library. See the
COUPLE/README file to get started.
The ELASTIC directory has an example script for computing elastic
constants, using a zero temperature Si example. See the
ELASTIC/in.elastic file for more info.
The KAPPA directory has an example scripts for computing the thermal
conductivity (kappa) of a LJ liquid using 4 different methods. See
the KAPPA/README file for more info.
The USER directory contains subdirectories of user-provided example
scripts for ser packages. See the README files in those directories
for more info. See the doc/Section_start.html file for more info
about installing and building user packages.
diff --git a/examples/nb3b/MOH.nb3b.harmonic b/examples/nb3b/MOH.nb3b.harmonic
new file mode 100644
index 000000000..4e39b2f63
--- /dev/null
+++ b/examples/nb3b/MOH.nb3b.harmonic
@@ -0,0 +1,20 @@
+# nb3b/harmonic (nonbonded 3-body harmonic) parameters for various elements
+#
+# multiple entries can be added to this file, LAMMPS reads the ones it needs
+#
+# these entries are in LAMMPS "real" units:
+# k [kcal/mol/rad^2], theta_0 [degrees], cutoff [Angstroms]
+#
+# format of a single entry (one or more lines):
+# element 1 (central atom), element 2, element 3,
+# k_theta, theta_0, cutoff
+#
+# (ijj)-->determines cutoff for i-j distance
+# (jik)-->determines k, theta_0 for i-j-k angle term
+#
+# ielem jelem kelem k theta_0 cutoff
+ O M M 0.00 0.00 2.80
+ O H H 0.00 0.00 1.20
+ O M H 6.35 120.00 0.00
+ O H M 6.35 120.00 0.00
+
diff --git a/examples/nb3b/data.nb3b b/examples/nb3b/data.nb3b
new file mode 100644
index 000000000..b27201e82
--- /dev/null
+++ b/examples/nb3b/data.nb3b
@@ -0,0 +1,1991 @@
+LAMMPS 2005 data file for example nb3b
+
+ 1400 atoms
+ 560 bonds
+ 0 angles
+ 0 dihedrals
+ 0 impropers
+
+ 3 atom types
+ 1 bond types
+
+ 0.000000000 22.590700000 xlo xhi
+ 0.000000000 22.359000000 ylo yhi
+ 0.000000000 23.470800000 zlo zhi
+
+Masses
+
+ 1 24.305000
+ 2 15.999400
+ 3 1.007970
+
+Bond Coeffs
+
+ 1 132.2491 2.1350 0.9572
+
+Atoms
+
+ 1 0 1 1.050000 0.000000262 0.000106849 0.000000568
+ 2 0 2 -0.950000 0.000000225 1.863354892 1.213706850
+ 3 0 3 0.425000 0.000001447 1.863360598 2.195781620
+ 4 0 2 -0.950000 1.613621236 0.931731439 -1.213704488
+ 5 0 3 0.425000 1.613621167 0.931734584 -2.195778520
+ 6 0 1 1.050000 3.227242289 0.000106860 0.000000485
+ 7 0 2 -0.950000 3.227242325 1.863355025 1.213706762
+ 8 0 3 0.425000 3.227242057 1.863358941 2.195781569
+ 9 0 2 -0.950000 4.840863318 0.931731440 -1.213704511
+ 10 0 3 0.425000 4.840863137 0.931735319 -2.195778539
+ 11 0 1 1.050000 6.454484299 0.000106840 0.000000446
+ 12 0 2 -0.950000 6.454484364 1.863354991 1.213706788
+ 13 0 3 0.425000 6.454484080 1.863358928 2.195781586
+ 14 0 2 -0.950000 8.068105260 0.931731407 -1.213704574
+ 15 0 3 0.425000 8.068105401 0.931736261 -2.195778606
+ 16 0 1 1.050000 9.681726311 0.000106832 0.000000315
+ 17 0 2 -0.950000 9.681726249 1.863354958 1.213706756
+ 18 0 3 0.425000 9.681727013 1.863358298 2.195781581
+ 19 0 2 -0.950000 11.295347151 0.931731353 -1.213704540
+ 20 0 3 0.425000 11.295349400 0.931737018 -2.195778610
+ 21 0 1 1.050000 12.908968296 0.000106822 0.000000442
+ 22 0 2 -0.950000 12.908968062 1.863354976 1.213706758
+ 23 0 3 0.425000 12.908970867 1.863358801 2.195781676
+ 24 0 2 -0.950000 14.522589020 0.931731441 -1.213704446
+ 25 0 3 0.425000 14.522591962 0.931735382 -2.195778597
+ 26 0 1 1.050000 16.136210287 0.000106848 0.000000478
+ 27 0 2 -0.950000 16.136210056 1.863354978 1.213706750
+ 28 0 3 0.425000 16.136212717 1.863358947 2.195781668
+ 29 0 2 -0.950000 17.749831034 0.931731382 -1.213704460
+ 30 0 3 0.425000 17.749833990 0.931735503 -2.195778550
+ 31 0 1 1.050000 19.363452276 0.000106831 0.000000502
+ 32 0 2 -0.950000 19.363451967 1.863355049 1.213706917
+ 33 0 3 0.425000 19.363455339 1.863358022 2.195781612
+ 34 0 2 -0.950000 20.977072983 0.931731581 -1.213704467
+ 35 0 3 0.425000 20.977076228 0.931733597 -2.195778450
+ 36 0 1 1.050000 -1.613620722 2.794979691 0.000001834
+ 37 0 2 -0.950000 -1.613620547 4.658227863 1.213707356
+ 38 0 3 0.425000 -1.613621531 4.658231935 2.195781735
+ 39 0 2 -0.950000 0.000000387 3.726603701 -1.213703507
+ 40 0 3 0.425000 -0.000000733 3.726608981 -2.195778085
+ 41 0 1 1.050000 1.613621318 2.794979700 0.000001736
+ 42 0 2 -0.950000 1.613621317 4.658228007 1.213707308
+ 43 0 3 0.425000 1.613621361 4.658230379 2.195781688
+ 44 0 2 -0.950000 3.227242332 3.726603860 -1.213703517
+ 45 0 3 0.425000 3.227242450 3.726607718 -2.195778091
+ 46 0 1 1.050000 4.840863335 2.794979720 0.000001771
+ 47 0 2 -0.950000 4.840863331 4.658227991 1.213707357
+ 48 0 3 0.425000 4.840863361 4.658230718 2.195781700
+ 49 0 2 -0.950000 6.454484353 3.726603840 -1.213703497
+ 50 0 3 0.425000 6.454484456 3.726607807 -2.195778054
+ 51 0 1 1.050000 8.068105339 2.794979722 0.000001796
+ 52 0 2 -0.950000 8.068105342 4.658227993 1.213707381
+ 53 0 3 0.425000 8.068105446 4.658230772 2.195781735
+ 54 0 2 -0.950000 9.681726388 3.726603866 -1.213703434
+ 55 0 3 0.425000 9.681726252 3.726607442 -2.195778041
+ 56 0 1 1.050000 11.295347305 2.794979711 0.000001836
+ 57 0 2 -0.950000 11.295347370 4.658227998 1.213707347
+ 58 0 3 0.425000 11.295347101 4.658230735 2.195781829
+ 59 0 2 -0.950000 12.908968378 3.726603818 -1.213703367
+ 60 0 3 0.425000 12.908967925 3.726607757 -2.195778096
+ 61 0 1 1.050000 14.522589284 2.794979700 0.000001808
+ 62 0 2 -0.950000 14.522589381 4.658227964 1.213707304
+ 63 0 3 0.425000 14.522589179 4.658230748 2.195781822
+ 64 0 2 -0.950000 16.136210390 3.726603792 -1.213703452
+ 65 0 3 0.425000 16.136209843 3.726607820 -2.195778100
+ 66 0 1 1.050000 17.749831268 2.794979701 0.000001816
+ 67 0 2 -0.950000 17.749831304 4.658228087 1.213707341
+ 68 0 3 0.425000 17.749831640 4.658229781 2.195781725
+ 69 0 2 -0.950000 19.363452290 3.726603927 -1.213703444
+ 70 0 3 0.425000 19.363452453 3.726606726 -2.195778003
+ 71 0 1 1.050000 -3.227241639 5.589852888 0.000001656
+ 72 0 2 -0.950000 -3.227241593 7.453101145 1.213706104
+ 73 0 3 0.425000 -3.227242192 7.453105232 2.195780851
+ 74 0 2 -0.950000 -1.613620608 6.521476288 -1.213704047
+ 75 0 3 0.425000 -1.613621178 6.521479676 -2.195778584
+ 76 0 1 1.050000 0.000000351 5.589852872 0.000001620
+ 77 0 2 -0.950000 0.000000293 7.453101307 1.213706103
+ 78 0 3 0.425000 0.000000628 7.453103659 2.195780822
+ 79 0 2 -0.950000 1.613621312 6.521476436 -1.213704074
+ 80 0 3 0.425000 1.613621615 6.521478379 -2.195778568
+ 81 0 1 1.050000 3.227242330 5.589852889 0.000001640
+ 82 0 2 -0.950000 3.227242302 7.453101253 1.213706192
+ 83 0 3 0.425000 3.227242391 7.453104029 2.195780814
+ 84 0 2 -0.950000 4.840863341 6.521476412 -1.213704066
+ 85 0 3 0.425000 4.840863407 6.521478575 -2.195778490
+ 86 0 1 1.050000 6.454484341 5.589852886 0.000001672
+ 87 0 2 -0.950000 6.454484325 7.453101262 1.213706236
+ 88 0 3 0.425000 6.454484401 7.453103948 2.195780840
+ 89 0 2 -0.950000 8.068105350 6.521476399 -1.213704024
+ 90 0 3 0.425000 8.068105446 6.521478593 -2.195778490
+ 91 0 1 1.050000 9.681726346 5.589852881 0.000001692
+ 92 0 2 -0.950000 9.681726321 7.453101257 1.213706163
+ 93 0 3 0.425000 9.681726446 7.453103903 2.195780920
+ 94 0 2 -0.950000 11.295347337 6.521476383 -1.213703930
+ 95 0 3 0.425000 11.295347499 6.521478503 -2.195778568
+ 96 0 1 1.050000 12.908968340 5.589852860 0.000001703
+ 97 0 2 -0.950000 12.908968325 7.453101233 1.213706099
+ 98 0 3 0.425000 12.908968356 7.453104057 2.195780968
+ 99 0 2 -0.950000 14.522589318 6.521476349 -1.213703934
+ 100 0 3 0.425000 14.522589202 6.521478649 -2.195778595
+ 101 0 1 1.050000 16.136210321 5.589852878 0.000001650
+ 102 0 2 -0.950000 16.136210254 7.453101352 1.213706104
+ 103 0 3 0.425000 16.136210955 7.453102782 2.195780896
+ 104 0 2 -0.950000 17.749831231 6.521476485 -1.213704008
+ 105 0 3 0.425000 17.749832115 6.521477448 -2.195778565
+ 106 0 1 1.050000 -4.840862672 8.384726544 0.000000904
+ 107 0 2 -0.950000 -4.840862622 10.247975593 1.213705455
+ 108 0 3 0.425000 -4.840863359 10.247981174 2.195780241
+ 109 0 2 -0.950000 -3.227241620 9.316350574 -1.213704222
+ 110 0 3 0.425000 -3.227242402 9.316354176 -2.195779002
+ 111 0 1 1.050000 -1.613620661 8.384726557 0.000000868
+ 112 0 2 -0.950000 -1.613620725 10.247975777 1.213705465
+ 113 0 3 0.425000 -1.613620524 10.247979502 2.195780210
+ 114 0 2 -0.950000 0.000000313 9.316350739 -1.213704260
+ 115 0 3 0.425000 0.000000428 9.316352843 -2.195778982
+ 116 0 1 1.050000 1.613621317 8.384726562 0.000000882
+ 117 0 2 -0.950000 1.613621288 10.247975713 1.213705558
+ 118 0 3 0.425000 1.613621241 10.247979812 2.195780164
+ 119 0 2 -0.950000 3.227242330 9.316350683 -1.213704290
+ 120 0 3 0.425000 3.227242310 9.316353071 -2.195778884
+ 121 0 1 1.050000 4.840863322 8.384726548 0.000000928
+ 122 0 2 -0.950000 4.840863290 10.247975715 1.213705614
+ 123 0 3 0.425000 4.840863319 10.247979759 2.195780165
+ 124 0 2 -0.950000 6.454484328 9.316350679 -1.213704259
+ 125 0 3 0.425000 6.454484360 9.316353005 -2.195778869
+ 126 0 1 1.050000 8.068105321 8.384726542 0.000000939
+ 127 0 2 -0.950000 8.068105294 10.247975713 1.213705551
+ 128 0 3 0.425000 8.068105361 10.247979714 2.195780228
+ 129 0 2 -0.950000 9.681726314 9.316350668 -1.213704179
+ 130 0 3 0.425000 9.681726367 9.316352926 -2.195778952
+ 131 0 1 1.050000 11.295347313 8.384726528 0.000000935
+ 132 0 2 -0.950000 11.295347297 10.247975689 1.213705501
+ 133 0 3 0.425000 11.295347271 10.247979824 2.195780278
+ 134 0 2 -0.950000 12.908968304 9.316350626 -1.213704156
+ 135 0 3 0.425000 12.908968192 9.316353143 -2.195778993
+ 136 0 1 1.050000 14.522589298 8.384726549 0.000000917
+ 137 0 2 -0.950000 14.522589210 10.247975827 1.213705464
+ 138 0 3 0.425000 14.522589999 10.247978588 2.195780256
+ 139 0 2 -0.950000 16.136210211 9.316350794 -1.213704162
+ 140 0 3 0.425000 16.136211112 9.316351727 -2.195778978
+ 141 0 1 1.050000 -6.454483708 11.179600857 0.000000585
+ 142 0 2 -0.950000 -6.454483639 13.042850628 1.213705372
+ 143 0 3 0.425000 -6.454484492 13.042857481 2.195780210
+ 144 0 2 -0.950000 -4.840862649 12.111225653 -1.213704303
+ 145 0 3 0.425000 -4.840863475 12.111230906 -2.195779117
+ 146 0 1 1.050000 -3.227241701 11.179600856 0.000000562
+ 147 0 2 -0.950000 -3.227241771 13.042850790 1.213705384
+ 148 0 3 0.425000 -3.227241578 13.042855862 2.195780202
+ 149 0 2 -0.950000 -1.613620730 12.111225823 -1.213704330
+ 150 0 3 0.425000 -1.613620636 12.111229475 -2.195779071
+ 151 0 1 1.050000 0.000000286 11.179600877 0.000000575
+ 152 0 2 -0.950000 0.000000248 13.042850736 1.213705499
+ 153 0 3 0.425000 0.000000187 13.042856174 2.195780143
+ 154 0 2 -0.950000 1.613621286 12.111225777 -1.213704397
+ 155 0 3 0.425000 1.613621244 12.111229685 -2.195778970
+ 156 0 1 1.050000 3.227242287 11.179600855 0.000000598
+ 157 0 2 -0.950000 3.227242257 13.042850741 1.213705545
+ 158 0 3 0.425000 3.227242264 13.042856108 2.195780107
+ 159 0 2 -0.950000 4.840863283 12.111225761 -1.213704401
+ 160 0 3 0.425000 4.840863301 12.111229623 -2.195778958
+ 161 0 1 1.050000 6.454484287 11.179600849 0.000000607
+ 162 0 2 -0.950000 6.454484258 13.042850728 1.213705501
+ 163 0 3 0.425000 6.454484243 13.042856144 2.195780141
+ 164 0 2 -0.950000 8.068105287 12.111225761 -1.213704333
+ 165 0 3 0.425000 8.068105256 12.111229568 -2.195779018
+ 166 0 1 1.050000 9.681726285 11.179600840 0.000000606
+ 167 0 2 -0.950000 9.681726277 13.042850728 1.213705454
+ 168 0 3 0.425000 9.681726247 13.042856101 2.195780190
+ 169 0 2 -0.950000 11.295347281 12.111225726 -1.213704305
+ 170 0 3 0.425000 11.295347208 12.111229757 -2.195779049
+ 171 0 1 1.050000 12.908968266 11.179600861 0.000000600
+ 172 0 2 -0.950000 12.908968184 13.042850861 1.213705422
+ 173 0 3 0.425000 12.908968909 13.042855110 2.195780188
+ 174 0 2 -0.950000 14.522589190 12.111225902 -1.213704278
+ 175 0 3 0.425000 14.522589920 12.111228326 -2.195779068
+ 176 0 1 1.050000 -8.068104728 13.974475155 0.000000277
+ 177 0 2 -0.950000 -8.068104632 15.837724784 1.213705012
+ 178 0 3 0.425000 -8.068105777 15.837731693 2.195779742
+ 179 0 2 -0.950000 -6.454483624 14.906100040 -1.213704977
+ 180 0 3 0.425000 -6.454484849 14.906106484 -2.195779776
+ 181 0 1 1.050000 -4.840862724 13.974475149 0.000000267
+ 182 0 2 -0.950000 -4.840862756 15.837725002 1.213705037
+ 183 0 3 0.425000 -4.840862945 15.837729534 2.195779778
+ 184 0 2 -0.950000 -3.227241749 14.906100194 -1.213704985
+ 185 0 3 0.425000 -3.227241772 14.906105169 -2.195779725
+ 186 0 1 1.050000 -1.613620751 13.974475165 0.000000295
+ 187 0 2 -0.950000 -1.613620767 15.837724924 1.213705161
+ 188 0 3 0.425000 -1.613620969 15.837730061 2.195779728
+ 189 0 2 -0.950000 0.000000252 14.906100155 -1.213705055
+ 190 0 3 0.425000 0.000000125 14.906105351 -2.195779609
+ 191 0 1 1.050000 1.613621248 13.974475150 0.000000306
+ 192 0 2 -0.950000 1.613621238 15.837724924 1.213705209
+ 193 0 3 0.425000 1.613621209 15.837729991 2.195779685
+ 194 0 2 -0.950000 3.227242238 14.906100143 -1.213705096
+ 195 0 3 0.425000 3.227242184 14.906105281 -2.195779609
+ 196 0 1 1.050000 4.840863248 13.974475143 0.000000288
+ 197 0 2 -0.950000 4.840863223 15.837724939 1.213705167
+ 198 0 3 0.425000 4.840863372 15.837729763 2.195779671
+ 199 0 2 -0.950000 6.454484221 14.906100135 -1.213705054
+ 200 0 3 0.425000 6.454484569 14.906105286 -2.195779652
+ 201 0 1 1.050000 8.068105253 13.974475132 0.000000298
+ 202 0 2 -0.950000 8.068105255 15.837724878 1.213705095
+ 203 0 3 0.425000 8.068105434 15.837730456 2.195779720
+ 204 0 2 -0.950000 9.681726261 14.906100109 -1.213705018
+ 205 0 3 0.425000 9.681726010 14.906105282 -2.195779709
+ 206 0 1 1.050000 11.295347243 13.974475170 0.000000276
+ 207 0 2 -0.950000 11.295347197 15.837725062 1.213705022
+ 208 0 3 0.425000 11.295347708 15.837728985 2.195779715
+ 209 0 2 -0.950000 12.908968188 14.906100275 -1.213705004
+ 210 0 3 0.425000 12.908968886 14.906104050 -2.195779729
+ 211 0 1 1.050000 -9.681725748 16.769348912 -0.000000658
+ 212 0 2 -0.950000 -9.681725718 18.632597414 1.213704363
+ 213 0 3 0.425000 -9.681725696 18.632601927 2.195779017
+ 214 0 2 -0.950000 -8.068104736 17.700973368 -1.213706471
+ 215 0 3 0.425000 -8.068104695 17.700979995 -2.195780761
+ 216 0 1 1.050000 -6.454483751 16.769348891 -0.000000642
+ 217 0 2 -0.950000 -6.454483872 18.632597559 1.213704395
+ 218 0 3 0.425000 -6.454482434 18.632600441 2.195779030
+ 219 0 2 -0.950000 -4.840862840 17.700973539 -1.213706491
+ 220 0 3 0.425000 -4.840861947 17.700977987 -2.195780716
+ 221 0 1 1.050000 -3.227241775 16.769348901 -0.000000609
+ 222 0 2 -0.950000 -3.227241820 18.632597507 1.213704454
+ 223 0 3 0.425000 -3.227241127 18.632600966 2.195778963
+ 224 0 2 -0.950000 -1.613620805 17.700973439 -1.213706566
+ 225 0 3 0.425000 -1.613620484 17.700978332 -2.195780633
+ 226 0 1 1.050000 0.000000232 16.769348881 -0.000000590
+ 227 0 2 -0.950000 0.000000208 18.632597483 1.213704491
+ 228 0 3 0.425000 0.000000301 18.632601148 2.195778926
+ 229 0 2 -0.950000 1.613621245 17.700973468 -1.213706570
+ 230 0 3 0.425000 1.613620974 17.700978340 -2.195780596
+ 231 0 1 1.050000 3.227242237 16.769348886 -0.000000615
+ 232 0 2 -0.950000 3.227242262 18.632597519 1.213704489
+ 233 0 3 0.425000 3.227242076 18.632600565 2.195778936
+ 234 0 2 -0.950000 4.840863264 17.700973499 -1.213706571
+ 235 0 3 0.425000 4.840862998 17.700978140 -2.195780633
+ 236 0 1 1.050000 6.454484245 16.769348871 -0.000000616
+ 237 0 2 -0.950000 6.454484282 18.632597460 1.213704474
+ 238 0 3 0.425000 6.454483569 18.632600898 2.195778991
+ 239 0 2 -0.950000 8.068105282 17.700973450 -1.213706497
+ 240 0 3 0.425000 8.068104612 17.700979016 -2.195780685
+ 241 0 1 1.050000 9.681726229 16.769348916 -0.000000657
+ 242 0 2 -0.950000 9.681726164 18.632597710 1.213704426
+ 243 0 3 0.425000 9.681727181 18.632598828 2.195778986
+ 244 0 2 -0.950000 11.295347111 17.700973637 -1.213706486
+ 245 0 3 0.425000 11.295348458 17.700977314 -2.195780744
+ 246 0 1 1.050000 -11.295346688 19.564222229 -0.000000869
+ 247 0 2 -0.950000 -11.295346399 21.427469920 1.213704641
+ 248 0 3 0.425000 -11.295350190 21.427474990 2.195780062
+ 249 0 2 -0.950000 -9.681725368 20.495846378 -1.213705957
+ 250 0 3 0.425000 -9.681728908 20.495850969 -2.195780563
+ 251 0 1 1.050000 -8.068104676 19.564222218 -0.000000845
+ 252 0 2 -0.950000 -8.068104436 21.427470083 1.213704741
+ 253 0 3 0.425000 -8.068107409 21.427473339 2.195780130
+ 254 0 2 -0.950000 -6.454483449 20.495846530 -1.213705935
+ 255 0 3 0.425000 -6.454486400 20.495849730 -2.195780532
+ 256 0 1 1.050000 -4.840862711 19.564222213 -0.000000854
+ 257 0 2 -0.950000 -4.840862417 21.427470003 1.213704780
+ 258 0 3 0.425000 -4.840865717 21.427473470 2.195780127
+ 259 0 2 -0.950000 -3.227241476 20.495846446 -1.213706037
+ 260 0 3 0.425000 -3.227244630 20.495850198 -2.195780507
+ 261 0 1 1.050000 -1.613620721 19.564222187 -0.000000910
+ 262 0 2 -0.950000 -1.613620559 21.427470110 1.213704779
+ 263 0 3 0.425000 -1.613622694 21.427471380 2.195780092
+ 264 0 2 -0.950000 0.000000323 20.495846475 -1.213706032
+ 265 0 3 0.425000 -0.000000102 20.495850576 -2.195780462
+ 266 0 1 1.050000 1.613621255 19.564222203 -0.000000850
+ 267 0 2 -0.950000 1.613621302 21.427470055 1.213704843
+ 268 0 3 0.425000 1.613621366 21.427472739 2.195780106
+ 269 0 2 -0.950000 3.227242224 20.495846514 -1.213705991
+ 270 0 3 0.425000 3.227242569 20.495849824 -2.195780470
+ 271 0 1 1.050000 4.840863251 19.564222210 -0.000000846
+ 272 0 2 -0.950000 4.840863280 21.427470047 1.213704805
+ 273 0 3 0.425000 4.840863557 21.427473293 2.195780071
+ 274 0 2 -0.950000 6.454484231 20.495846444 -1.213705972
+ 275 0 3 0.425000 6.454484847 20.495850043 -2.195780472
+ 276 0 1 1.050000 8.068105249 19.564222225 -0.000000808
+ 277 0 2 -0.950000 8.068105325 21.427470017 1.213704713
+ 278 0 3 0.425000 8.068105698 21.427474441 2.195780058
+ 279 0 2 -0.950000 9.681726369 20.495846633 -1.213706013
+ 280 0 3 0.425000 9.681724933 20.495847572 -2.195780588
+ 281 0 1 1.050000 0.000000256 0.000109139 4.694163404
+ 282 0 2 -0.950000 0.000000219 1.863357176 5.907869693
+ 283 0 3 0.425000 0.000001438 1.863362890 6.889944470
+ 284 0 2 -0.950000 1.613621229 0.931733733 3.480458374
+ 285 0 3 0.425000 1.613621164 0.931736865 2.498384301
+ 286 0 1 1.050000 3.227242283 0.000109150 4.694163322
+ 287 0 2 -0.950000 3.227242319 1.863357310 5.907869605
+ 288 0 3 0.425000 3.227242052 1.863361233 6.889944420
+ 289 0 2 -0.950000 4.840863312 0.931733734 3.480458351
+ 290 0 3 0.425000 4.840863130 0.931737595 2.498384282
+ 291 0 1 1.050000 6.454484293 0.000109130 4.694163283
+ 292 0 2 -0.950000 6.454484358 1.863357275 5.907869630
+ 293 0 3 0.425000 6.454484075 1.863361220 6.889944436
+ 294 0 2 -0.950000 8.068105254 0.931733702 3.480458288
+ 295 0 3 0.425000 8.068105391 0.931738543 2.498384215
+ 296 0 1 1.050000 9.681726305 0.000109123 4.694163151
+ 297 0 2 -0.950000 9.681726243 1.863357243 5.907869599
+ 298 0 3 0.425000 9.681727008 1.863360590 6.889944431
+ 299 0 2 -0.950000 11.295347145 0.931733647 3.480458321
+ 300 0 3 0.425000 11.295349395 0.931739305 2.498384211
+ 301 0 1 1.050000 12.908968290 0.000109113 4.694163279
+ 302 0 2 -0.950000 12.908968055 1.863357261 5.907869601
+ 303 0 3 0.425000 12.908970860 1.863361093 6.889944526
+ 304 0 2 -0.950000 14.522589013 0.931733736 3.480458415
+ 305 0 3 0.425000 14.522591955 0.931737657 2.498384224
+ 306 0 1 1.050000 16.136210281 0.000109138 4.694163315
+ 307 0 2 -0.950000 16.136210050 1.863357262 5.907869594
+ 308 0 3 0.425000 16.136212712 1.863361238 6.889944518
+ 309 0 2 -0.950000 17.749831029 0.931733675 3.480458401
+ 310 0 3 0.425000 17.749833974 0.931737787 2.498384273
+ 311 0 1 1.050000 19.363452270 0.000109122 4.694163339
+ 312 0 2 -0.950000 19.363451961 1.863357333 5.907869761
+ 313 0 3 0.425000 19.363455335 1.863360317 6.889944462
+ 314 0 2 -0.950000 20.977072977 0.931733876 3.480458393
+ 315 0 3 0.425000 20.977076234 0.931735875 2.498384372
+ 316 0 1 1.050000 -1.613620728 2.794981981 4.694164684
+ 317 0 2 -0.950000 -1.613620551 4.658230152 5.907870208
+ 318 0 3 0.425000 -1.613621536 4.658234236 6.889944598
+ 319 0 2 -0.950000 0.000000381 3.726605991 3.480459361
+ 320 0 3 0.425000 -0.000000736 3.726611255 2.498384748
+ 321 0 1 1.050000 1.613621312 2.794981989 4.694164586
+ 322 0 2 -0.950000 1.613621312 4.658230297 5.907870157
+ 323 0 3 0.425000 1.613621356 4.658232681 6.889944550
+ 324 0 2 -0.950000 3.227242326 3.726606151 3.480459352
+ 325 0 3 0.425000 3.227242443 3.726609990 2.498384740
+ 326 0 1 1.050000 4.840863329 2.794982010 4.694164621
+ 327 0 2 -0.950000 4.840863325 4.658230281 5.907870206
+ 328 0 3 0.425000 4.840863356 4.658233019 6.889944562
+ 329 0 2 -0.950000 6.454484347 3.726606131 3.480459373
+ 330 0 3 0.425000 6.454484451 3.726610079 2.498384777
+ 331 0 1 1.050000 8.068105333 2.794982012 4.694164645
+ 332 0 2 -0.950000 8.068105335 4.658230283 5.907870230
+ 333 0 3 0.425000 8.068105440 4.658233073 6.889944597
+ 334 0 2 -0.950000 9.681726382 3.726606157 3.480459435
+ 335 0 3 0.425000 9.681726246 3.726609713 2.498384790
+ 336 0 1 1.050000 11.295347299 2.794982000 4.694164687
+ 337 0 2 -0.950000 11.295347363 4.658230287 5.907870195
+ 338 0 3 0.425000 11.295347095 4.658233036 6.889944691
+ 339 0 2 -0.950000 12.908968371 3.726606108 3.480459502
+ 340 0 3 0.425000 12.908967914 3.726610027 2.498384737
+ 341 0 1 1.050000 14.522589277 2.794981990 4.694164658
+ 342 0 2 -0.950000 14.522589374 4.658230253 5.907870154
+ 343 0 3 0.425000 14.522589173 4.658233047 6.889944685
+ 344 0 2 -0.950000 16.136210385 3.726606083 3.480459417
+ 345 0 3 0.425000 16.136209829 3.726610099 2.498384734
+ 346 0 1 1.050000 17.749831263 2.794981991 4.694164667
+ 347 0 2 -0.950000 17.749831298 4.658230376 5.907870195
+ 348 0 3 0.425000 17.749831632 4.658232084 6.889944589
+ 349 0 2 -0.950000 19.363452284 3.726606220 3.480459423
+ 350 0 3 0.425000 19.363452457 3.726608984 2.498384833
+ 351 0 1 1.050000 -3.227241644 5.589855176 4.694164508
+ 352 0 2 -0.950000 -3.227241597 7.453103437 5.907868940
+ 353 0 3 0.425000 -3.227242195 7.453107526 6.889943715
+ 354 0 2 -0.950000 -1.613620615 6.521478573 3.480458829
+ 355 0 3 0.425000 -1.613621184 6.521481944 2.498384242
+ 356 0 1 1.050000 0.000000345 5.589855160 4.694164470
+ 357 0 2 -0.950000 0.000000288 7.453103600 5.907868934
+ 358 0 3 0.425000 0.000000623 7.453105953 6.889943683
+ 359 0 2 -0.950000 1.613621306 6.521478722 3.480458802
+ 360 0 3 0.425000 1.613621607 6.521480653 2.498384255
+ 361 0 1 1.050000 3.227242324 5.589855178 4.694164488
+ 362 0 2 -0.950000 3.227242296 7.453103546 5.907869022
+ 363 0 3 0.425000 3.227242385 7.453106322 6.889943675
+ 364 0 2 -0.950000 4.840863335 6.521478698 3.480458810
+ 365 0 3 0.425000 4.840863402 6.521480845 2.498384332
+ 366 0 1 1.050000 6.454484335 5.589855175 4.694164520
+ 367 0 2 -0.950000 6.454484318 7.453103554 5.907869065
+ 368 0 3 0.425000 6.454484394 7.453106242 6.889943701
+ 369 0 2 -0.950000 8.068105344 6.521478685 3.480458851
+ 370 0 3 0.425000 8.068105440 6.521480864 2.498384332
+ 371 0 1 1.050000 9.681726340 5.589855170 4.694164541
+ 372 0 2 -0.950000 9.681726314 7.453103550 5.907868992
+ 373 0 3 0.425000 9.681726440 7.453106196 6.889943781
+ 374 0 2 -0.950000 11.295347330 6.521478669 3.480458946
+ 375 0 3 0.425000 11.295347490 6.521480773 2.498384255
+ 376 0 1 1.050000 12.908968334 5.589855148 4.694164552
+ 377 0 2 -0.950000 12.908968317 7.453103525 5.907868931
+ 378 0 3 0.425000 12.908968350 7.453106350 6.889943830
+ 379 0 2 -0.950000 14.522589313 6.521478635 3.480458943
+ 380 0 3 0.425000 14.522589198 6.521480928 2.498384232
+ 381 0 1 1.050000 16.136210315 5.589855167 4.694164502
+ 382 0 2 -0.950000 16.136210248 7.453103644 5.907868942
+ 383 0 3 0.425000 16.136210946 7.453105075 6.889943761
+ 384 0 2 -0.950000 17.749831225 6.521478773 3.480458867
+ 385 0 3 0.425000 17.749832112 6.521479702 2.498384265
+ 386 0 1 1.050000 -4.840862678 8.384728835 4.694163749
+ 387 0 2 -0.950000 -4.840862626 10.247977886 5.907868285
+ 388 0 3 0.425000 -4.840863364 10.247983467 6.889943106
+ 389 0 2 -0.950000 -3.227241627 9.316352866 3.480458653
+ 390 0 3 0.425000 -3.227242407 9.316356461 2.498383813
+ 391 0 1 1.050000 -1.613620667 8.384728848 4.694163709
+ 392 0 2 -0.950000 -1.613620729 10.247978070 5.907868289
+ 393 0 3 0.425000 -1.613620529 10.247981795 6.889943071
+ 394 0 2 -0.950000 0.000000307 9.316353031 3.480458613
+ 395 0 3 0.425000 0.000000422 9.316355135 2.498383829
+ 396 0 1 1.050000 1.613621311 8.384728854 4.694163721
+ 397 0 2 -0.950000 1.613621282 10.247978006 5.907868381
+ 398 0 3 0.425000 1.613621235 10.247982104 6.889943024
+ 399 0 2 -0.950000 3.227242324 9.316352976 3.480458583
+ 400 0 3 0.425000 3.227242304 9.316355362 2.498383926
+ 401 0 1 1.050000 4.840863316 8.384728839 4.694163767
+ 402 0 2 -0.950000 4.840863283 10.247978008 5.907868437
+ 403 0 3 0.425000 4.840863313 10.247982051 6.889943025
+ 404 0 2 -0.950000 6.454484322 9.316352971 3.480458614
+ 405 0 3 0.425000 6.454484353 9.316355296 2.498383941
+ 406 0 1 1.050000 8.068105315 8.384728833 4.694163778
+ 407 0 2 -0.950000 8.068105287 10.247978006 5.907868374
+ 408 0 3 0.425000 8.068105355 10.247982006 6.889943088
+ 409 0 2 -0.950000 9.681726308 9.316352960 3.480458694
+ 410 0 3 0.425000 9.681726359 9.316355215 2.498383859
+ 411 0 1 1.050000 11.295347307 8.384728819 4.694163775
+ 412 0 2 -0.950000 11.295347289 10.247977981 5.907868326
+ 413 0 3 0.425000 11.295347265 10.247982116 6.889943139
+ 414 0 2 -0.950000 12.908968299 9.316352919 3.480458721
+ 415 0 3 0.425000 12.908968189 9.316355437 2.498383823
+ 416 0 1 1.050000 14.522589292 8.384728840 4.694163760
+ 417 0 2 -0.950000 14.522589204 10.247978120 5.907868296
+ 418 0 3 0.425000 14.522589992 10.247980880 6.889943121
+ 419 0 2 -0.950000 16.136210206 9.316353087 3.480458713
+ 420 0 3 0.425000 16.136211104 9.316354015 2.498383842
+ 421 0 1 1.050000 -6.454483714 11.179603151 4.694163431
+ 422 0 2 -0.950000 -6.454483644 13.042852923 5.907868202
+ 423 0 3 0.425000 -6.454484497 13.042859775 6.889943076
+ 424 0 2 -0.950000 -4.840862656 12.111227948 3.480458576
+ 425 0 3 0.425000 -4.840863481 12.111233196 2.498383697
+ 426 0 1 1.050000 -3.227241707 11.179603149 4.694163404
+ 427 0 2 -0.950000 -3.227241776 13.042853085 5.907868209
+ 428 0 3 0.425000 -3.227241584 13.042858156 6.889943065
+ 429 0 2 -0.950000 -1.613620736 12.111228117 3.480458547
+ 430 0 3 0.425000 -1.613620641 12.111231768 2.498383739
+ 431 0 1 1.050000 0.000000281 11.179603171 4.694163415
+ 432 0 2 -0.950000 0.000000243 13.042853030 5.907868324
+ 433 0 3 0.425000 0.000000181 13.042858468 6.889943006
+ 434 0 2 -0.950000 1.613621281 12.111228072 3.480458479
+ 435 0 3 0.425000 1.613621238 12.111231979 2.498383839
+ 436 0 1 1.050000 3.227242281 11.179603149 4.694163438
+ 437 0 2 -0.950000 3.227242251 13.042853035 5.907868369
+ 438 0 3 0.425000 3.227242257 13.042858402 6.889942969
+ 439 0 2 -0.950000 4.840863277 12.111228056 3.480458474
+ 440 0 3 0.425000 4.840863294 12.111231917 2.498383851
+ 441 0 1 1.050000 6.454484280 11.179603142 4.694163447
+ 442 0 2 -0.950000 6.454484252 13.042853022 5.907868325
+ 443 0 3 0.425000 6.454484237 13.042858437 6.889943004
+ 444 0 2 -0.950000 8.068105281 12.111228056 3.480458544
+ 445 0 3 0.425000 8.068105247 12.111231860 2.498383792
+ 446 0 1 1.050000 9.681726279 11.179603133 4.694163447
+ 447 0 2 -0.950000 9.681726270 13.042853022 5.907868280
+ 448 0 3 0.425000 9.681726240 13.042858395 6.889943054
+ 449 0 2 -0.950000 11.295347276 12.111228021 3.480458574
+ 450 0 3 0.425000 11.295347211 12.111232053 2.498383765
+ 451 0 1 1.050000 12.908968260 11.179603155 4.694163445
+ 452 0 2 -0.950000 12.908968178 13.042853155 5.907868254
+ 453 0 3 0.425000 12.908968902 13.042857402 6.889943055
+ 454 0 2 -0.950000 14.522589185 12.111228197 3.480458600
+ 455 0 3 0.425000 14.522589907 12.111230625 2.498383750
+ 456 0 1 1.050000 -8.068104734 13.974477449 4.694163125
+ 457 0 2 -0.950000 -8.068104638 15.837727081 5.907867845
+ 458 0 3 0.425000 -8.068105780 15.837733989 6.889942605
+ 459 0 2 -0.950000 -6.454483632 14.906102335 3.480457904
+ 460 0 3 0.425000 -6.454484860 14.906108778 2.498383039
+ 461 0 1 1.050000 -4.840862731 13.974477443 4.694163111
+ 462 0 2 -0.950000 -4.840862761 15.837727298 5.907867865
+ 463 0 3 0.425000 -4.840862950 15.837731830 6.889942639
+ 464 0 2 -0.950000 -3.227241756 14.906102489 3.480457895
+ 465 0 3 0.425000 -3.227241778 14.906107465 2.498383087
+ 466 0 1 1.050000 -1.613620757 13.974477460 4.694163137
+ 467 0 2 -0.950000 -1.613620772 15.837727220 5.907867988
+ 468 0 3 0.425000 -1.613620975 15.837732355 6.889942588
+ 469 0 2 -0.950000 0.000000246 14.906102450 3.480457824
+ 470 0 3 0.425000 0.000000121 14.906107647 2.498383202
+ 471 0 1 1.050000 1.613621242 13.974477444 4.694163149
+ 472 0 2 -0.950000 1.613621232 15.837727219 5.907868036
+ 473 0 3 0.425000 1.613621203 15.837732285 6.889942546
+ 474 0 2 -0.950000 3.227242232 14.906102438 3.480457783
+ 475 0 3 0.425000 3.227242178 14.906107577 2.498383203
+ 476 0 1 1.050000 4.840863241 13.974477437 4.694163130
+ 477 0 2 -0.950000 4.840863217 15.837727234 5.907867994
+ 478 0 3 0.425000 4.840863366 15.837732058 6.889942531
+ 479 0 2 -0.950000 6.454484215 14.906102430 3.480457825
+ 480 0 3 0.425000 6.454484564 14.906107582 2.498383160
+ 481 0 1 1.050000 8.068105247 13.974477426 4.694163141
+ 482 0 2 -0.950000 8.068105249 15.837727172 5.907867923
+ 483 0 3 0.425000 8.068105424 15.837732754 6.889942580
+ 484 0 2 -0.950000 9.681726255 14.906102405 3.480457862
+ 485 0 3 0.425000 9.681726014 14.906107571 2.498383106
+ 486 0 1 1.050000 11.295347238 13.974477464 4.694163122
+ 487 0 2 -0.950000 11.295347190 15.837727358 5.907867855
+ 488 0 3 0.425000 11.295347700 15.837731271 6.889942578
+ 489 0 2 -0.950000 12.908968183 14.906102569 3.480457874
+ 490 0 3 0.425000 12.908968870 14.906106361 2.498383090
+ 491 0 1 1.050000 -9.681725754 16.769351207 4.694162188
+ 492 0 2 -0.950000 -9.681725724 18.632599709 5.907867203
+ 493 0 3 0.425000 -9.681725705 18.632604222 6.889941871
+ 494 0 2 -0.950000 -8.068104743 17.700975663 3.480456406
+ 495 0 3 0.425000 -8.068104692 17.700982292 2.498382054
+ 496 0 1 1.050000 -6.454483758 16.769351186 4.694162202
+ 497 0 2 -0.950000 -6.454483878 18.632599854 5.907867235
+ 498 0 3 0.425000 -6.454482442 18.632602734 6.889941883
+ 499 0 2 -0.950000 -4.840862846 17.700975834 3.480456385
+ 500 0 3 0.425000 -4.840861951 17.700980277 2.498382097
+ 501 0 1 1.050000 -3.227241781 16.769351196 4.694162234
+ 502 0 2 -0.950000 -3.227241826 18.632599801 5.907867293
+ 503 0 3 0.425000 -3.227241133 18.632603260 6.889941816
+ 504 0 2 -0.950000 -1.613620811 17.700975734 3.480456310
+ 505 0 3 0.425000 -1.613620490 17.700980625 2.498382180
+ 506 0 1 1.050000 0.000000226 16.769351176 4.694162253
+ 507 0 2 -0.950000 0.000000203 18.632599778 5.907867330
+ 508 0 3 0.425000 0.000000295 18.632603443 6.889941779
+ 509 0 2 -0.950000 1.613621239 17.700975763 3.480456306
+ 510 0 3 0.425000 1.613620972 17.700980634 2.498382217
+ 511 0 1 1.050000 3.227242231 16.769351181 4.694162228
+ 512 0 2 -0.950000 3.227242256 18.632599813 5.907867328
+ 513 0 3 0.425000 3.227242071 18.632602858 6.889941789
+ 514 0 2 -0.950000 4.840863258 17.700975794 3.480456305
+ 515 0 3 0.425000 4.840862988 17.700980430 2.498382180
+ 516 0 1 1.050000 6.454484239 16.769351166 4.694162228
+ 517 0 2 -0.950000 6.454484275 18.632599755 5.907867313
+ 518 0 3 0.425000 6.454483563 18.632603193 6.889941843
+ 519 0 2 -0.950000 8.068105277 17.700975746 3.480456379
+ 520 0 3 0.425000 8.068104588 17.700981302 2.498382129
+ 521 0 1 1.050000 9.681726223 16.769351212 4.694162186
+ 522 0 2 -0.950000 9.681726157 18.632600005 5.907867266
+ 523 0 3 0.425000 9.681727180 18.632601121 6.889941839
+ 524 0 2 -0.950000 11.295347105 17.700975931 3.480456390
+ 525 0 3 0.425000 11.295348458 17.700979635 2.498382072
+ 526 0 1 1.050000 -11.295346695 19.564224522 4.694161974
+ 527 0 2 -0.950000 -11.295346405 21.427472211 5.907867476
+ 528 0 3 0.425000 -11.295350196 21.427477288 6.889942902
+ 529 0 2 -0.950000 -9.681725374 20.495848667 3.480456895
+ 530 0 3 0.425000 -9.681728924 20.495853257 2.498382255
+ 531 0 1 1.050000 -8.068104682 19.564224511 4.694161997
+ 532 0 2 -0.950000 -8.068104442 21.427472374 5.907867576
+ 533 0 3 0.425000 -8.068107416 21.427475640 6.889942970
+ 534 0 2 -0.950000 -6.454483455 20.495848818 3.480456917
+ 535 0 3 0.425000 -6.454486405 20.495852016 2.498382287
+ 536 0 1 1.050000 -4.840862716 19.564224506 4.694161988
+ 537 0 2 -0.950000 -4.840862422 21.427472293 5.907867615
+ 538 0 3 0.425000 -4.840865724 21.427475770 6.889942966
+ 539 0 2 -0.950000 -3.227241482 20.495848734 3.480456814
+ 540 0 3 0.425000 -3.227244639 20.495852476 2.498382311
+ 541 0 1 1.050000 -1.613620727 19.564224479 4.694161931
+ 542 0 2 -0.950000 -1.613620565 21.427472401 5.907867615
+ 543 0 3 0.425000 -1.613622700 21.427473676 6.889942931
+ 544 0 2 -0.950000 0.000000317 20.495848763 3.480456819
+ 545 0 3 0.425000 -0.000000107 20.495852854 2.498382357
+ 546 0 1 1.050000 1.613621249 19.564224495 4.694161991
+ 547 0 2 -0.950000 1.613621296 21.427472345 5.907867678
+ 548 0 3 0.425000 1.613621361 21.427475040 6.889942946
+ 549 0 2 -0.950000 3.227242218 20.495848802 3.480456861
+ 550 0 3 0.425000 3.227242560 20.495852110 2.498382348
+ 551 0 1 1.050000 4.840863245 19.564224502 4.694161995
+ 552 0 2 -0.950000 4.840863274 21.427472337 5.907867639
+ 553 0 3 0.425000 4.840863550 21.427475592 6.889942911
+ 554 0 2 -0.950000 6.454484225 20.495848732 3.480456880
+ 555 0 3 0.425000 6.454484850 20.495852331 2.498382346
+ 556 0 1 1.050000 8.068105243 19.564224517 4.694162033
+ 557 0 2 -0.950000 8.068105319 21.427472308 5.907867548
+ 558 0 3 0.425000 8.068105692 21.427476741 6.889942898
+ 559 0 2 -0.950000 9.681726363 20.495848923 3.480456839
+ 560 0 3 0.425000 9.681724932 20.495849842 2.498382231
+ 561 0 1 1.050000 0.000000250 0.000111429 9.388326261
+ 562 0 2 -0.950000 0.000000213 1.863359470 10.602032541
+ 563 0 3 0.425000 0.000001433 1.863365187 11.584107329
+ 564 0 2 -0.950000 1.613621224 0.931736023 8.174621222
+ 565 0 3 0.425000 1.613621156 0.931739164 7.192547161
+ 566 0 1 1.050000 3.227242277 0.000111440 9.388326178
+ 567 0 2 -0.950000 3.227242313 1.863359604 10.602032453
+ 568 0 3 0.425000 3.227242046 1.863363527 11.584107279
+ 569 0 2 -0.950000 4.840863306 0.931736024 8.174621199
+ 570 0 3 0.425000 4.840863124 0.931739892 7.192547142
+ 571 0 1 1.050000 6.454484287 0.000111420 9.388326139
+ 572 0 2 -0.950000 6.454484352 1.863359569 10.602032479
+ 573 0 3 0.425000 6.454484069 1.863363515 11.584107295
+ 574 0 2 -0.950000 8.068105248 0.931735992 8.174621136
+ 575 0 3 0.425000 8.068105385 0.931740840 7.192547074
+ 576 0 1 1.050000 9.681726299 0.000111413 9.388326008
+ 577 0 2 -0.950000 9.681726237 1.863359536 10.602032447
+ 578 0 3 0.425000 9.681727002 1.863362885 11.584107290
+ 579 0 2 -0.950000 11.295347139 0.931735936 8.174621170
+ 580 0 3 0.425000 11.295349389 0.931741600 7.192547071
+ 581 0 1 1.050000 12.908968284 0.000111403 9.388326136
+ 582 0 2 -0.950000 12.908968049 1.863359555 10.602032449
+ 583 0 3 0.425000 12.908970854 1.863363388 11.584107385
+ 584 0 2 -0.950000 14.522589007 0.931736025 8.174621263
+ 585 0 3 0.425000 14.522591950 0.931739954 7.192547084
+ 586 0 1 1.050000 16.136210275 0.000111429 9.388326171
+ 587 0 2 -0.950000 16.136210044 1.863359556 10.602032441
+ 588 0 3 0.425000 16.136212705 1.863363535 11.584107377
+ 589 0 2 -0.950000 17.749831023 0.931735965 8.174621249
+ 590 0 3 0.425000 17.749833971 0.931740084 7.192547131
+ 591 0 1 1.050000 19.363452264 0.000111412 9.388326195
+ 592 0 2 -0.950000 19.363451955 1.863359628 10.602032608
+ 593 0 3 0.425000 19.363455329 1.863362608 11.584107321
+ 594 0 2 -0.950000 20.977072971 0.931736166 8.174621242
+ 595 0 3 0.425000 20.977076226 0.931738169 7.192547231
+ 596 0 1 1.050000 -1.613620734 2.794984273 9.388327536
+ 597 0 2 -0.950000 -1.613620557 4.658232446 10.602033057
+ 598 0 3 0.425000 -1.613621542 4.658236527 11.584107451
+ 599 0 2 -0.950000 0.000000375 3.726608286 8.174622210
+ 600 0 3 0.425000 -0.000000743 3.726613567 7.192547606
+ 601 0 1 1.050000 1.613621306 2.794984282 9.388327438
+ 602 0 2 -0.950000 1.613621306 4.658232591 10.602033008
+ 603 0 3 0.425000 1.613621350 4.658234970 11.584107403
+ 604 0 2 -0.950000 3.227242320 3.726608446 8.174622200
+ 605 0 3 0.425000 3.227242437 3.726612302 7.192547599
+ 606 0 1 1.050000 4.840863323 2.794984303 9.388327473
+ 607 0 2 -0.950000 4.840863319 4.658232575 10.602033056
+ 608 0 3 0.425000 4.840863350 4.658235307 11.584107416
+ 609 0 2 -0.950000 6.454484341 3.726608426 8.174622220
+ 610 0 3 0.425000 6.454484445 3.726612390 7.192547636
+ 611 0 1 1.050000 8.068105327 2.794984304 9.388327498
+ 612 0 2 -0.950000 8.068105329 4.658232577 10.602033080
+ 613 0 3 0.425000 8.068105434 4.658235362 11.584107450
+ 614 0 2 -0.950000 9.681726376 3.726608451 8.174622283
+ 615 0 3 0.425000 9.681726240 3.726612024 7.192547649
+ 616 0 1 1.050000 11.295347293 2.794984293 9.388327539
+ 617 0 2 -0.950000 11.295347357 4.658232581 10.602033046
+ 618 0 3 0.425000 11.295347089 4.658235326 11.584107544
+ 619 0 2 -0.950000 12.908968365 3.726608403 8.174622349
+ 620 0 3 0.425000 12.908967909 3.726612339 7.192547595
+ 621 0 1 1.050000 14.522589271 2.794984282 9.388327510
+ 622 0 2 -0.950000 14.522589368 4.658232547 10.602033003
+ 623 0 3 0.425000 14.522589165 4.658235340 11.584107538
+ 624 0 2 -0.950000 16.136210379 3.726608377 8.174622264
+ 625 0 3 0.425000 16.136209825 3.726612409 7.192547592
+ 626 0 1 1.050000 17.749831256 2.794984283 9.388327518
+ 627 0 2 -0.950000 17.749831291 4.658232671 10.602033043
+ 628 0 3 0.425000 17.749831628 4.658234368 11.584107441
+ 629 0 2 -0.950000 19.363452278 3.726608514 8.174622272
+ 630 0 3 0.425000 19.363452448 3.726611297 7.192547691
+ 631 0 1 1.050000 -3.227241650 5.589857471 9.388327361
+ 632 0 2 -0.950000 -3.227241603 7.453105731 10.602031791
+ 633 0 3 0.425000 -3.227242204 7.453109816 11.584106562
+ 634 0 2 -0.950000 -1.613620620 6.521480868 8.174621673
+ 635 0 3 0.425000 -1.613621190 6.521484251 7.192547097
+ 636 0 1 1.050000 0.000000340 5.589857455 9.388327323
+ 637 0 2 -0.950000 0.000000282 7.453105893 10.602031788
+ 638 0 3 0.425000 0.000000616 7.453108242 11.584106532
+ 639 0 2 -0.950000 1.613621301 6.521481017 8.174621646
+ 640 0 3 0.425000 1.613621601 6.521482960 7.192547110
+ 641 0 1 1.050000 3.227242319 5.589857473 9.388327342
+ 642 0 2 -0.950000 3.227242290 7.453105840 10.602031876
+ 643 0 3 0.425000 3.227242379 7.453108611 11.584106524
+ 644 0 2 -0.950000 4.840863329 6.521480993 8.174621654
+ 645 0 3 0.425000 4.840863396 6.521483152 7.192547188
+ 646 0 1 1.050000 6.454484329 5.589857470 9.388327374
+ 647 0 2 -0.950000 6.454484312 7.453105848 10.602031920
+ 648 0 3 0.425000 6.454484388 7.453108530 11.584106550
+ 649 0 2 -0.950000 8.068105338 6.521480980 8.174621695
+ 650 0 3 0.425000 8.068105434 6.521483169 7.192547188
+ 651 0 1 1.050000 9.681726334 5.589857465 9.388327394
+ 652 0 2 -0.950000 9.681726308 7.453105844 10.602031847
+ 653 0 3 0.425000 9.681726434 7.453108485 11.584106630
+ 654 0 2 -0.950000 11.295347324 6.521480964 8.174621790
+ 655 0 3 0.425000 11.295347486 6.521483080 7.192547110
+ 656 0 1 1.050000 12.908968327 5.589857443 9.388327404
+ 657 0 2 -0.950000 12.908968311 7.453105819 10.602031784
+ 658 0 3 0.425000 12.908968343 7.453108641 11.584106678
+ 659 0 2 -0.950000 14.522589307 6.521480929 8.174621787
+ 660 0 3 0.425000 14.522589192 6.521483232 7.192547087
+ 661 0 1 1.050000 16.136210309 5.589857461 9.388327354
+ 662 0 2 -0.950000 16.136210241 7.453105938 10.602031792
+ 663 0 3 0.425000 16.136210944 7.453107362 11.584106608
+ 664 0 2 -0.950000 17.749831219 6.521481067 8.174621711
+ 665 0 3 0.425000 17.749832103 6.521482010 7.192547120
+ 666 0 1 1.050000 -4.840862684 8.384731130 9.388326600
+ 667 0 2 -0.950000 -4.840862632 10.247980179 10.602031139
+ 668 0 3 0.425000 -4.840863373 10.247985756 11.584105952
+ 669 0 2 -0.950000 -3.227241632 9.316355159 8.174621497
+ 670 0 3 0.425000 -3.227242414 9.316358755 7.192546669
+ 671 0 1 1.050000 -1.613620672 8.384731143 9.388326561
+ 672 0 2 -0.950000 -1.613620735 10.247980362 10.602031146
+ 673 0 3 0.425000 -1.613620537 10.247984083 11.584105919
+ 674 0 2 -0.950000 0.000000302 9.316355324 8.174621457
+ 675 0 3 0.425000 0.000000416 9.316357430 7.192546686
+ 676 0 1 1.050000 1.613621305 8.384731148 9.388326574
+ 677 0 2 -0.950000 1.613621276 10.247980299 10.602031239
+ 678 0 3 0.425000 1.613621228 10.247984393 11.584105873
+ 679 0 2 -0.950000 3.227242318 9.316355269 8.174621427
+ 680 0 3 0.425000 3.227242298 9.316357655 7.192546783
+ 681 0 1 1.050000 4.840863310 8.384731134 9.388326620
+ 682 0 2 -0.950000 4.840863277 10.247980301 10.602031295
+ 683 0 3 0.425000 4.840863307 10.247984340 11.584105875
+ 684 0 2 -0.950000 6.454484316 9.316355264 8.174621458
+ 685 0 3 0.425000 6.454484347 9.316357590 7.192546798
+ 686 0 1 1.050000 8.068105309 8.384731127 9.388326631
+ 687 0 2 -0.950000 8.068105281 10.247980298 10.602031232
+ 688 0 3 0.425000 8.068105349 10.247984296 11.584105937
+ 689 0 2 -0.950000 9.681726301 9.316355253 8.174621538
+ 690 0 3 0.425000 9.681726355 9.316357510 7.192546715
+ 691 0 1 1.050000 11.295347300 8.384731113 9.388326627
+ 692 0 2 -0.950000 11.295347283 10.247980274 10.602031182
+ 693 0 3 0.425000 11.295347261 10.247984405 11.584105987
+ 694 0 2 -0.950000 12.908968292 9.316355212 8.174621563
+ 695 0 3 0.425000 12.908968183 9.316357731 7.192546678
+ 696 0 1 1.050000 14.522589285 8.384731134 9.388326611
+ 697 0 2 -0.950000 14.522589198 10.247980412 10.602031150
+ 698 0 3 0.425000 14.522589989 10.247983172 11.584105968
+ 699 0 2 -0.950000 16.136210199 9.316355380 8.174621557
+ 700 0 3 0.425000 16.136211096 9.316356307 7.192546697
+ 701 0 1 1.050000 -6.454483719 11.179605444 9.388326281
+ 702 0 2 -0.950000 -6.454483650 13.042855214 10.602031057
+ 703 0 3 0.425000 -6.454484504 13.042862062 11.584105924
+ 704 0 2 -0.950000 -4.840862661 12.111230241 8.174621419
+ 705 0 3 0.425000 -4.840863487 12.111235487 7.192546555
+ 706 0 1 1.050000 -3.227241713 11.179605442 9.388326256
+ 707 0 2 -0.950000 -3.227241782 13.042855377 10.602031066
+ 708 0 3 0.425000 -3.227241591 13.042860444 11.584105915
+ 709 0 2 -0.950000 -1.613620741 12.111230410 8.174621390
+ 710 0 3 0.425000 -1.613620647 12.111234060 7.192546597
+ 711 0 1 1.050000 0.000000275 11.179605464 9.388326268
+ 712 0 2 -0.950000 0.000000237 13.042855322 10.602031181
+ 713 0 3 0.425000 0.000000174 13.042860757 11.584105856
+ 714 0 2 -0.950000 1.613621275 12.111230365 8.174621323
+ 715 0 3 0.425000 1.613621232 12.111234270 7.192546698
+ 716 0 1 1.050000 3.227242275 11.179605442 9.388326291
+ 717 0 2 -0.950000 3.227242245 13.042855327 10.602031227
+ 718 0 3 0.425000 3.227242251 13.042860691 11.584105819
+ 719 0 2 -0.950000 4.840863271 12.111230348 8.174621318
+ 720 0 3 0.425000 4.840863288 12.111234208 7.192546710
+ 721 0 1 1.050000 6.454484274 11.179605435 9.388326300
+ 722 0 2 -0.950000 6.454484246 13.042855314 10.602031183
+ 723 0 3 0.425000 6.454484232 13.042860726 11.584105854
+ 724 0 2 -0.950000 8.068105274 12.111230348 8.174621387
+ 725 0 3 0.425000 8.068105242 12.111234152 7.192546651
+ 726 0 1 1.050000 9.681726272 11.179605426 9.388326299
+ 727 0 2 -0.950000 9.681726264 13.042855314 10.602031137
+ 728 0 3 0.425000 9.681726237 13.042860681 11.584105903
+ 729 0 2 -0.950000 11.295347269 12.111230314 8.174621417
+ 730 0 3 0.425000 11.295347205 12.111234344 7.192546622
+ 731 0 1 1.050000 12.908968253 11.179605447 9.388326296
+ 732 0 2 -0.950000 12.908968172 13.042855446 10.602031109
+ 733 0 3 0.425000 12.908968896 13.042859698 11.584105903
+ 734 0 2 -0.950000 14.522589178 12.111230489 8.174621444
+ 735 0 3 0.425000 14.522589899 12.111232915 7.192546608
+ 736 0 1 1.050000 -8.068104740 13.974479742 9.388325977
+ 737 0 2 -0.950000 -8.068104644 15.837729372 10.602030698
+ 738 0 3 0.425000 -8.068105784 15.837736276 11.584105458
+ 739 0 2 -0.950000 -6.454483637 14.906104627 8.174620747
+ 740 0 3 0.425000 -6.454484862 14.906111067 7.192545897
+ 741 0 1 1.050000 -4.840862736 13.974479736 9.388325964
+ 742 0 2 -0.950000 -4.840862767 15.837729589 10.602030719
+ 743 0 3 0.425000 -4.840862956 15.837734119 11.584105493
+ 744 0 2 -0.950000 -3.227241761 14.906104781 8.174620738
+ 745 0 3 0.425000 -3.227241783 14.906109755 7.192545946
+ 746 0 1 1.050000 -1.613620763 13.974479752 9.388325990
+ 747 0 2 -0.950000 -1.613620778 15.837729510 10.602030844
+ 748 0 3 0.425000 -1.613620981 15.837734644 11.584105442
+ 749 0 2 -0.950000 0.000000240 14.906104742 8.174620668
+ 750 0 3 0.425000 0.000000115 14.906109937 7.192546061
+ 751 0 1 1.050000 1.613621236 13.974479736 9.388326002
+ 752 0 2 -0.950000 1.613621226 15.837729510 10.602030892
+ 753 0 3 0.425000 1.613621197 15.837734574 11.584105400
+ 754 0 2 -0.950000 3.227242226 14.906104730 8.174620627
+ 755 0 3 0.425000 3.227242172 14.906109867 7.192546062
+ 756 0 1 1.050000 4.840863235 13.974479729 9.388325984
+ 757 0 2 -0.950000 4.840863211 15.837729525 10.602030850
+ 758 0 3 0.425000 4.840863360 15.837734346 11.584105386
+ 759 0 2 -0.950000 6.454484209 14.906104722 8.174620669
+ 760 0 3 0.425000 6.454484558 14.906109872 7.192546019
+ 761 0 1 1.050000 8.068105240 13.974479718 9.388325994
+ 762 0 2 -0.950000 8.068105243 15.837729463 10.602030778
+ 763 0 3 0.425000 8.068105421 15.837735041 11.584105434
+ 764 0 2 -0.950000 9.681726249 14.906104697 8.174620705
+ 765 0 3 0.425000 9.681726002 14.906109862 7.192545964
+ 766 0 1 1.050000 11.295347231 13.974479756 9.388325975
+ 767 0 2 -0.950000 11.295347184 15.837729649 10.602030708
+ 768 0 3 0.425000 11.295347691 15.837733564 11.584105430
+ 769 0 2 -0.950000 12.908968176 14.906104861 8.174620719
+ 770 0 3 0.425000 12.908968866 14.906108650 7.192545948
+ 771 0 1 1.050000 -9.681725760 16.769353499 9.388325042
+ 772 0 2 -0.950000 -9.681725730 18.632601999 10.602030054
+ 773 0 3 0.425000 -9.681725708 18.632606513 11.584104730
+ 774 0 2 -0.950000 -8.068104749 17.700977954 8.174619251
+ 775 0 3 0.425000 -8.068104700 17.700984580 7.192544915
+ 776 0 1 1.050000 -6.454483764 16.769353477 9.388325056
+ 777 0 2 -0.950000 -6.454483884 18.632602144 10.602030087
+ 778 0 3 0.425000 -6.454482448 18.632605025 11.584104743
+ 779 0 2 -0.950000 -4.840862852 17.700978125 8.174619231
+ 780 0 3 0.425000 -4.840861957 17.700982568 7.192544957
+ 781 0 1 1.050000 -3.227241787 16.769353487 9.388325088
+ 782 0 2 -0.950000 -3.227241832 18.632602091 10.602030145
+ 783 0 3 0.425000 -3.227241139 18.632605551 11.584104676
+ 784 0 2 -0.950000 -1.613620817 17.700978025 8.174619156
+ 785 0 3 0.425000 -1.613620495 17.700982915 7.192545040
+ 786 0 1 1.050000 0.000000221 16.769353467 9.388325108
+ 787 0 2 -0.950000 0.000000197 18.632602068 10.602030182
+ 788 0 3 0.425000 0.000000289 18.632605734 11.584104639
+ 789 0 2 -0.950000 1.613621233 17.700978054 8.174619152
+ 790 0 3 0.425000 1.613620966 17.700982924 7.192545077
+ 791 0 1 1.050000 3.227242225 16.769353472 9.388325083
+ 792 0 2 -0.950000 3.227242250 18.632602103 10.602030180
+ 793 0 3 0.425000 3.227242065 18.632605149 11.584104649
+ 794 0 2 -0.950000 4.840863252 17.700978086 8.174619150
+ 795 0 3 0.425000 4.840862983 17.700982721 7.192545040
+ 796 0 1 1.050000 6.454484233 16.769353457 9.388325082
+ 797 0 2 -0.950000 6.454484270 18.632602044 10.602030165
+ 798 0 3 0.425000 6.454483557 18.632605484 11.584104703
+ 799 0 2 -0.950000 8.068105271 17.700978037 8.174619225
+ 800 0 3 0.425000 8.068104583 17.700983596 7.192544989
+ 801 0 1 1.050000 9.681726217 16.769353503 9.388325041
+ 802 0 2 -0.950000 9.681726152 18.632602295 10.602030117
+ 803 0 3 0.425000 9.681727171 18.632603411 11.584104699
+ 804 0 2 -0.950000 11.295347099 17.700978222 8.174619235
+ 805 0 3 0.425000 11.295348452 17.700981915 7.192544932
+ 806 0 1 1.050000 -11.295346701 19.564226813 9.388324830
+ 807 0 2 -0.950000 -11.295346411 21.427474502 10.602030327
+ 808 0 3 0.425000 -11.295350202 21.427479581 11.584105767
+ 809 0 2 -0.950000 -9.681725380 20.495850958 8.174619746
+ 810 0 3 0.425000 -9.681728929 20.495855543 7.192545115
+ 811 0 1 1.050000 -8.068104688 19.564226801 9.388324854
+ 812 0 2 -0.950000 -8.068104448 21.427474665 10.602030427
+ 813 0 3 0.425000 -8.068107422 21.427477933 11.584105835
+ 814 0 2 -0.950000 -6.454483461 20.495851109 8.174619768
+ 815 0 3 0.425000 -6.454486411 20.495854302 7.192545146
+ 816 0 1 1.050000 -4.840862722 19.564226797 9.388324844
+ 817 0 2 -0.950000 -4.840862428 21.427474584 10.602030465
+ 818 0 3 0.425000 -4.840865730 21.427478064 11.584105831
+ 819 0 2 -0.950000 -3.227241488 20.495851025 8.174619665
+ 820 0 3 0.425000 -3.227244647 20.495854764 7.192545170
+ 821 0 1 1.050000 -1.613620733 19.564226770 9.388324788
+ 822 0 2 -0.950000 -1.613620571 21.427474692 10.602030465
+ 823 0 3 0.425000 -1.613622706 21.427475967 11.584105796
+ 824 0 2 -0.950000 0.000000311 20.495851054 8.174619671
+ 825 0 3 0.425000 -0.000000111 20.495855142 7.192545216
+ 826 0 1 1.050000 1.613621243 19.564226786 9.388324848
+ 827 0 2 -0.950000 1.613621290 21.427474636 10.602030528
+ 828 0 3 0.425000 1.613621356 21.427477333 11.584105811
+ 829 0 2 -0.950000 3.227242212 20.495851093 8.174619713
+ 830 0 3 0.425000 3.227242554 20.495854397 7.192545207
+ 831 0 1 1.050000 4.840863239 19.564226793 9.388324852
+ 832 0 2 -0.950000 4.840863268 21.427474628 10.602030490
+ 833 0 3 0.425000 4.840863544 21.427477884 11.584105775
+ 834 0 2 -0.950000 6.454484219 20.495851023 8.174619732
+ 835 0 3 0.425000 6.454484843 20.495854620 7.192545205
+ 836 0 1 1.050000 8.068105237 19.564226808 9.388324890
+ 837 0 2 -0.950000 8.068105313 21.427474599 10.602030398
+ 838 0 3 0.425000 8.068105687 21.427479034 11.584105763
+ 839 0 2 -0.950000 9.681726357 20.495851213 8.174619690
+ 840 0 3 0.425000 9.681724925 20.495852129 7.192545090
+ 841 0 1 1.050000 0.000000244 0.000113720 14.082489112
+ 842 0 2 -0.950000 0.000000207 1.863361760 15.296195391
+ 843 0 3 0.425000 0.000001428 1.863367464 16.278270175
+ 844 0 2 -0.950000 1.613621218 0.931738315 12.868784067
+ 845 0 3 0.425000 1.613621150 0.931741458 11.886710019
+ 846 0 1 1.050000 3.227242271 0.000113731 14.082489029
+ 847 0 2 -0.950000 3.227242307 1.863361894 15.296195303
+ 848 0 3 0.425000 3.227242040 1.863365799 16.278270125
+ 849 0 2 -0.950000 4.840863300 0.931738316 12.868784044
+ 850 0 3 0.425000 4.840863118 0.931742186 11.886710000
+ 851 0 1 1.050000 6.454484280 0.000113711 14.082488991
+ 852 0 2 -0.950000 6.454484345 1.863361860 15.296195329
+ 853 0 3 0.425000 6.454484062 1.863365787 16.278270142
+ 854 0 2 -0.950000 8.068105242 0.931738284 12.868783981
+ 855 0 3 0.425000 8.068105379 0.931743134 11.886709933
+ 856 0 1 1.050000 9.681726293 0.000113704 14.082488859
+ 857 0 2 -0.950000 9.681726231 1.863361827 15.296195297
+ 858 0 3 0.425000 9.681726995 1.863365157 16.278270137
+ 859 0 2 -0.950000 11.295347133 0.931738229 12.868784014
+ 860 0 3 0.425000 11.295349383 0.931743894 11.886709929
+ 861 0 1 1.050000 12.908968278 0.000113694 14.082488987
+ 862 0 2 -0.950000 12.908968043 1.863361845 15.296195300
+ 863 0 3 0.425000 12.908970848 1.863365660 16.278270231
+ 864 0 2 -0.950000 14.522589001 0.931738317 12.868784108
+ 865 0 3 0.425000 14.522591943 0.931742248 11.886709942
+ 866 0 1 1.050000 16.136210269 0.000113719 14.082489022
+ 867 0 2 -0.950000 16.136210039 1.863361846 15.296195292
+ 868 0 3 0.425000 16.136212696 1.863365809 16.278270223
+ 869 0 2 -0.950000 17.749831017 0.931738256 12.868784093
+ 870 0 3 0.425000 17.749833963 0.931742378 11.886709989
+ 871 0 1 1.050000 19.363452258 0.000113702 14.082489046
+ 872 0 2 -0.950000 19.363451948 1.863361919 15.296195458
+ 873 0 3 0.425000 19.363455326 1.863364864 16.278270167
+ 874 0 2 -0.950000 20.977072965 0.931738458 12.868784086
+ 875 0 3 0.425000 20.977076223 0.931740461 11.886710089
+ 876 0 1 1.050000 -1.613620740 2.794986566 14.082490388
+ 877 0 2 -0.950000 -1.613620563 4.658234740 15.296195905
+ 878 0 3 0.425000 -1.613621554 4.658238817 16.278270301
+ 879 0 2 -0.950000 0.000000370 3.726610579 12.868785056
+ 880 0 3 0.425000 -0.000000749 3.726615859 11.886710459
+ 881 0 1 1.050000 1.613621300 2.794986574 14.082490290
+ 882 0 2 -0.950000 1.613621300 4.658234885 15.296195856
+ 883 0 3 0.425000 1.613621345 4.658237257 16.278270254
+ 884 0 2 -0.950000 3.227242314 3.726610739 12.868785048
+ 885 0 3 0.425000 3.227242431 3.726614592 11.886710452
+ 886 0 1 1.050000 4.840863317 2.794986595 14.082490325
+ 887 0 2 -0.950000 4.840863313 4.658234869 15.296195904
+ 888 0 3 0.425000 4.840863343 4.658237595 16.278270267
+ 889 0 2 -0.950000 6.454484335 3.726610719 12.868785068
+ 890 0 3 0.425000 6.454484439 3.726614681 11.886710490
+ 891 0 1 1.050000 8.068105321 2.794986596 14.082490350
+ 892 0 2 -0.950000 8.068105323 4.658234871 15.296195929
+ 893 0 3 0.425000 8.068105427 4.658237649 16.278270302
+ 894 0 2 -0.950000 9.681726370 3.726610745 12.868785131
+ 895 0 3 0.425000 9.681726234 3.726614314 11.886710503
+ 896 0 1 1.050000 11.295347287 2.794986585 14.082490391
+ 897 0 2 -0.950000 11.295347351 4.658234875 15.296195893
+ 898 0 3 0.425000 11.295347084 4.658237612 16.278270395
+ 899 0 2 -0.950000 12.908968359 3.726610696 12.868785196
+ 900 0 3 0.425000 12.908967902 3.726614629 11.886710448
+ 901 0 1 1.050000 14.522589265 2.794986574 14.082490361
+ 902 0 2 -0.950000 14.522589362 4.658234841 15.296195851
+ 903 0 3 0.425000 14.522589159 4.658237630 16.278270388
+ 904 0 2 -0.950000 16.136210373 3.726610670 12.868785110
+ 905 0 3 0.425000 16.136209816 3.726614700 11.886710445
+ 906 0 1 1.050000 17.749831250 2.794986576 14.082490370
+ 907 0 2 -0.950000 17.749831285 4.658234966 15.296195891
+ 908 0 3 0.425000 17.749831628 4.658236643 16.278270291
+ 909 0 2 -0.950000 19.363452272 3.726610807 12.868785118
+ 910 0 3 0.425000 19.363452446 3.726613584 11.886710543
+ 911 0 1 1.050000 -3.227241656 5.589859764 14.082490211
+ 912 0 2 -0.950000 -3.227241609 7.453108023 15.296194634
+ 913 0 3 0.425000 -3.227242216 7.453112106 16.278269421
+ 914 0 2 -0.950000 -1.613620626 6.521483162 12.868784525
+ 915 0 3 0.425000 -1.613621197 6.521486541 11.886709946
+ 916 0 1 1.050000 0.000000334 5.589859748 14.082490174
+ 917 0 2 -0.950000 0.000000276 7.453108186 15.296194631
+ 918 0 3 0.425000 0.000000610 7.453110532 16.278269391
+ 919 0 2 -0.950000 1.613621295 6.521483311 12.868784499
+ 920 0 3 0.425000 1.613621595 6.521485249 11.886709960
+ 921 0 1 1.050000 3.227242312 5.589859766 14.082490193
+ 922 0 2 -0.950000 3.227242284 7.453108132 15.296194720
+ 923 0 3 0.425000 3.227242373 7.453110900 16.278269384
+ 924 0 2 -0.950000 4.840863323 6.521483287 12.868784508
+ 925 0 3 0.425000 4.840863390 6.521485441 11.886710038
+ 926 0 1 1.050000 6.454484323 5.589859763 14.082490225
+ 927 0 2 -0.950000 6.454484306 7.453108141 15.296194763
+ 928 0 3 0.425000 6.454484382 7.453110820 16.278269411
+ 929 0 2 -0.950000 8.068105332 6.521483274 12.868784549
+ 930 0 3 0.425000 8.068105428 6.521485459 11.886710038
+ 931 0 1 1.050000 9.681726327 5.589859757 14.082490245
+ 932 0 2 -0.950000 9.681726302 7.453108137 15.296194690
+ 933 0 3 0.425000 9.681726429 7.453110775 16.278269490
+ 934 0 2 -0.950000 11.295347318 6.521483258 12.868784643
+ 935 0 3 0.425000 11.295347479 6.521485369 11.886709959
+ 936 0 1 1.050000 12.908968322 5.589859736 14.082490255
+ 937 0 2 -0.950000 12.908968306 7.453108112 15.296194626
+ 938 0 3 0.425000 12.908968336 7.453110932 16.278269537
+ 939 0 2 -0.950000 14.522589301 6.521483223 12.868784638
+ 940 0 3 0.425000 14.522589186 6.521485524 11.886709935
+ 941 0 1 1.050000 16.136210303 5.589859754 14.082490204
+ 942 0 2 -0.950000 16.136210235 7.453108231 15.296194636
+ 943 0 3 0.425000 16.136210944 7.453109647 16.278269466
+ 944 0 2 -0.950000 17.749831213 6.521483362 12.868784561
+ 945 0 3 0.425000 17.749832099 6.521484293 11.886709967
+ 946 0 1 1.050000 -4.840862690 8.384733422 14.082489452
+ 947 0 2 -0.950000 -4.840862639 10.247982472 15.296193981
+ 948 0 3 0.425000 -4.840863382 10.247988048 16.278268814
+ 949 0 2 -0.950000 -3.227241638 9.316357453 12.868784354
+ 950 0 3 0.425000 -3.227242420 9.316361046 11.886709517
+ 951 0 1 1.050000 -1.613620679 8.384733435 14.082489414
+ 952 0 2 -0.950000 -1.613620742 10.247982656 15.296193988
+ 953 0 3 0.425000 -1.613620542 10.247986377 16.278268782
+ 954 0 2 -0.950000 0.000000296 9.316357618 12.868784316
+ 955 0 3 0.425000 0.000000410 9.316359720 11.886709536
+ 956 0 1 1.050000 1.613621299 8.384733441 14.082489428
+ 957 0 2 -0.950000 1.613621270 10.247982592 15.296194083
+ 958 0 3 0.425000 1.613621222 10.247986687 16.278268737
+ 959 0 2 -0.950000 3.227242312 9.316357563 12.868784287
+ 960 0 3 0.425000 3.227242292 9.316359945 11.886709634
+ 961 0 1 1.050000 4.840863304 8.384733426 14.082489474
+ 962 0 2 -0.950000 4.840863271 10.247982594 15.296194139
+ 963 0 3 0.425000 4.840863301 10.247986633 16.278268739
+ 964 0 2 -0.950000 6.454484309 9.316357558 12.868784318
+ 965 0 3 0.425000 6.454484341 9.316359880 11.886709649
+ 966 0 1 1.050000 8.068105303 8.384733420 14.082489485
+ 967 0 2 -0.950000 8.068105275 10.247982592 15.296194075
+ 968 0 3 0.425000 8.068105344 10.247986590 16.278268801
+ 969 0 2 -0.950000 9.681726295 9.316357546 12.868784397
+ 970 0 3 0.425000 9.681726348 9.316359799 11.886709565
+ 971 0 1 1.050000 11.295347295 8.384733406 14.082489480
+ 972 0 2 -0.950000 11.295347278 10.247982567 15.296194024
+ 973 0 3 0.425000 11.295347254 10.247986699 16.278268850
+ 974 0 2 -0.950000 12.908968286 9.316357505 12.868784420
+ 975 0 3 0.425000 12.908968178 9.316360022 11.886709527
+ 976 0 1 1.050000 14.522589280 8.384733427 14.082489464
+ 977 0 2 -0.950000 14.522589192 10.247982705 15.296193993
+ 978 0 3 0.425000 14.522589984 10.247985465 16.278268831
+ 979 0 2 -0.950000 16.136210193 9.316357673 12.868784413
+ 980 0 3 0.425000 16.136211089 9.316358595 11.886709544
+ 981 0 1 1.050000 -6.454483726 11.179607736 14.082489134
+ 982 0 2 -0.950000 -6.454483656 13.042857507 15.296193900
+ 983 0 3 0.425000 -6.454484514 13.042864352 16.278268784
+ 984 0 2 -0.950000 -4.840862667 12.111232532 12.868784277
+ 985 0 3 0.425000 -4.840863492 12.111237776 11.886709403
+ 986 0 1 1.050000 -3.227241719 11.179607734 14.082489109
+ 987 0 2 -0.950000 -3.227241788 13.042857669 15.296193910
+ 988 0 3 0.425000 -3.227241595 13.042862737 16.278268777
+ 989 0 2 -0.950000 -1.613620747 12.111232702 12.868784250
+ 990 0 3 0.425000 -1.613620652 12.111236349 11.886709447
+ 991 0 1 1.050000 0.000000269 11.179607756 14.082489123
+ 992 0 2 -0.950000 0.000000230 13.042857615 15.296194026
+ 993 0 3 0.425000 0.000000169 13.042863051 16.278268719
+ 994 0 2 -0.950000 1.613621269 12.111232656 12.868784183
+ 995 0 3 0.425000 1.613621226 12.111236560 11.886709549
+ 996 0 1 1.050000 3.227242269 11.179607734 14.082489146
+ 997 0 2 -0.950000 3.227242239 13.042857620 15.296194072
+ 998 0 3 0.425000 3.227242245 13.042862985 16.278268682
+ 999 0 2 -0.950000 4.840863265 12.111232640 12.868784179
+ 1000 0 3 0.425000 4.840863281 12.111236497 11.886709561
+ 1001 0 1 1.050000 6.454484268 11.179607727 14.082489155
+ 1002 0 2 -0.950000 6.454484240 13.042857607 15.296194027
+ 1003 0 3 0.425000 6.454484226 13.042863021 16.278268716
+ 1004 0 2 -0.950000 8.068105268 12.111232640 12.868784247
+ 1005 0 3 0.425000 8.068105236 12.111236441 11.886709501
+ 1006 0 1 1.050000 9.681726267 11.179607719 14.082489153
+ 1007 0 2 -0.950000 9.681726259 13.042857607 15.296193981
+ 1008 0 3 0.425000 9.681726233 13.042862972 16.278268765
+ 1009 0 2 -0.950000 11.295347263 12.111232605 12.868784274
+ 1010 0 3 0.425000 11.295347201 12.111236632 11.886709471
+ 1011 0 1 1.050000 12.908968248 11.179607740 14.082489149
+ 1012 0 2 -0.950000 12.908968166 13.042857738 15.296193954
+ 1013 0 3 0.425000 12.908968889 13.042862002 16.278268765
+ 1014 0 2 -0.950000 14.522589172 12.111232780 12.868784300
+ 1015 0 3 0.425000 14.522589890 12.111235207 11.886709456
+ 1016 0 1 1.050000 -8.068104746 13.974482032 14.082488828
+ 1017 0 2 -0.950000 -8.068104650 15.837731662 15.296193545
+ 1018 0 3 0.425000 -8.068105789 15.837738557 16.278268312
+ 1019 0 2 -0.950000 -6.454483643 14.906106917 12.868783601
+ 1020 0 3 0.425000 -6.454484867 14.906113355 11.886708748
+ 1021 0 1 1.050000 -4.840862742 13.974482026 14.082488816
+ 1022 0 2 -0.950000 -4.840862774 15.837731879 15.296193567
+ 1023 0 3 0.425000 -4.840862959 15.837736404 16.278268347
+ 1024 0 2 -0.950000 -3.227241767 14.906107071 12.868783594
+ 1025 0 3 0.425000 -3.227241788 14.906112044 11.886708798
+ 1026 0 1 1.050000 -1.613620769 13.974482043 14.082488843
+ 1027 0 2 -0.950000 -1.613620785 15.837731801 15.296193692
+ 1028 0 3 0.425000 -1.613620986 15.837736930 16.278268297
+ 1029 0 2 -0.950000 0.000000234 14.906107032 12.868783524
+ 1030 0 3 0.425000 0.000000109 14.906112226 11.886708914
+ 1031 0 1 1.050000 1.613621230 13.974482027 14.082488856
+ 1032 0 2 -0.950000 1.613621220 15.837731800 15.296193740
+ 1033 0 3 0.425000 1.613621191 15.837736860 16.278268255
+ 1034 0 2 -0.950000 3.227242220 14.906107019 12.868783484
+ 1035 0 3 0.425000 3.227242166 14.906112156 11.886708915
+ 1036 0 1 1.050000 4.840863229 13.974482020 14.082488837
+ 1037 0 2 -0.950000 4.840863205 15.837731815 15.296193698
+ 1038 0 3 0.425000 4.840863353 15.837736633 16.278268241
+ 1039 0 2 -0.950000 6.454484203 14.906107012 12.868783525
+ 1040 0 3 0.425000 6.454484552 14.906112161 11.886708872
+ 1041 0 1 1.050000 8.068105234 13.974482009 14.082488847
+ 1042 0 2 -0.950000 8.068105237 15.837731754 15.296193626
+ 1043 0 3 0.425000 8.068105418 15.837737321 16.278268289
+ 1044 0 2 -0.950000 9.681726243 14.906106987 12.868783560
+ 1045 0 3 0.425000 9.681725997 14.906112148 11.886708816
+ 1046 0 1 1.050000 11.295347225 13.974482047 14.082488827
+ 1047 0 2 -0.950000 11.295347179 15.837731938 15.296193556
+ 1048 0 3 0.425000 11.295347677 15.837735864 16.278268285
+ 1049 0 2 -0.950000 12.908968170 14.906107150 12.868783572
+ 1050 0 3 0.425000 12.908968857 14.906110946 11.886708799
+ 1051 0 1 1.050000 -9.681725766 16.769355788 14.082487893
+ 1052 0 2 -0.950000 -9.681725737 18.632604289 15.296192909
+ 1053 0 3 0.425000 -9.681725706 18.632608790 16.278267580
+ 1054 0 2 -0.950000 -8.068104755 17.700980244 12.868782101
+ 1055 0 3 0.425000 -8.068104705 17.700986868 11.886707771
+ 1056 0 1 1.050000 -6.454483770 16.769355767 14.082487908
+ 1057 0 2 -0.950000 -6.454483890 18.632604433 15.296192941
+ 1058 0 3 0.425000 -6.454482451 18.632607306 16.278267592
+ 1059 0 2 -0.950000 -4.840862857 17.700980414 12.868782081
+ 1060 0 3 0.425000 -4.840861962 17.700984855 11.886707815
+ 1061 0 1 1.050000 -3.227241793 16.769355777 14.082487941
+ 1062 0 2 -0.950000 -3.227241838 18.632604381 15.296193000
+ 1063 0 3 0.425000 -3.227241145 18.632607827 16.278267527
+ 1064 0 2 -0.950000 -1.613620822 17.700980313 12.868782006
+ 1065 0 3 0.425000 -1.613620501 17.700985202 11.886707898
+ 1066 0 1 1.050000 0.000000215 16.769355757 14.082487961
+ 1067 0 2 -0.950000 0.000000190 18.632604357 15.296193037
+ 1068 0 3 0.425000 0.000000283 18.632608010 16.278267489
+ 1069 0 2 -0.950000 1.613621227 17.700980343 12.868782003
+ 1070 0 3 0.425000 1.613620960 17.700985211 11.886707935
+ 1071 0 1 1.050000 3.227242219 16.769355762 14.082487935
+ 1072 0 2 -0.950000 3.227242244 18.632604392 15.296193035
+ 1073 0 3 0.425000 3.227242059 18.632607429 16.278267499
+ 1074 0 2 -0.950000 4.840863246 17.700980374 12.868782001
+ 1075 0 3 0.425000 4.840862976 17.700985008 11.886707898
+ 1076 0 1 1.050000 6.454484227 16.769355747 14.082487935
+ 1077 0 2 -0.950000 6.454484264 18.632604334 15.296193020
+ 1078 0 3 0.425000 6.454483550 18.632607765 16.278267554
+ 1079 0 2 -0.950000 8.068105264 17.700980326 12.868782075
+ 1080 0 3 0.425000 8.068104575 17.700985881 11.886707846
+ 1081 0 1 1.050000 9.681726211 16.769355793 14.082487892
+ 1082 0 2 -0.950000 9.681726146 18.632604585 15.296192972
+ 1083 0 3 0.425000 9.681727154 18.632605687 16.278267549
+ 1084 0 2 -0.950000 11.295347092 17.700980511 12.868782084
+ 1085 0 3 0.425000 11.295348446 17.700984208 11.886707789
+ 1086 0 1 1.050000 -11.295346707 19.564229102 14.082487683
+ 1087 0 2 -0.950000 -11.295346418 21.427476793 15.296193183
+ 1088 0 3 0.425000 -11.295350210 21.427481858 16.278268613
+ 1089 0 2 -0.950000 -9.681725386 20.495853247 12.868782594
+ 1090 0 3 0.425000 -9.681728935 20.495857835 11.886707976
+ 1091 0 1 1.050000 -8.068104695 19.564229091 14.082487706
+ 1092 0 2 -0.950000 -8.068104454 21.427476956 15.296193283
+ 1093 0 3 0.425000 -8.068107428 21.427480207 16.278268681
+ 1094 0 2 -0.950000 -6.454483467 20.495853398 12.868782616
+ 1095 0 3 0.425000 -6.454486417 20.495856595 11.886708007
+ 1096 0 1 1.050000 -4.840862728 19.564229086 14.082487697
+ 1097 0 2 -0.950000 -4.840862434 21.427476875 15.296193321
+ 1098 0 3 0.425000 -4.840865734 21.427480342 16.278268677
+ 1099 0 2 -0.950000 -3.227241493 20.495853314 12.868782513
+ 1100 0 3 0.425000 -3.227244654 20.495857056 11.886708031
+ 1101 0 1 1.050000 -1.613620739 19.564229059 14.082487641
+ 1102 0 2 -0.950000 -1.613620577 21.427476983 15.296193321
+ 1103 0 3 0.425000 -1.613622713 21.427478237 16.278268642
+ 1104 0 2 -0.950000 0.000000305 20.495853343 12.868782519
+ 1105 0 3 0.425000 -0.000000117 20.495857434 11.886708077
+ 1106 0 1 1.050000 1.613621237 19.564229075 14.082487701
+ 1107 0 2 -0.950000 1.613621284 21.427476927 15.296193384
+ 1108 0 3 0.425000 1.613621349 21.427479611 16.278268657
+ 1109 0 2 -0.950000 3.227242206 20.495853382 12.868782561
+ 1110 0 3 0.425000 3.227242548 20.495856689 11.886708068
+ 1111 0 1 1.050000 4.840863233 19.564229083 14.082487705
+ 1112 0 2 -0.950000 4.840863262 21.427476919 15.296193345
+ 1113 0 3 0.425000 4.840863539 21.427480160 16.278268622
+ 1114 0 2 -0.950000 6.454484212 20.495853312 12.868782580
+ 1115 0 3 0.425000 6.454484837 20.495856913 11.886708066
+ 1116 0 1 1.050000 8.068105231 19.564229098 14.082487743
+ 1117 0 2 -0.950000 8.068105307 21.427476889 15.296193254
+ 1118 0 3 0.425000 8.068105682 21.427481310 16.278268609
+ 1119 0 2 -0.950000 9.681726351 20.495853503 12.868782538
+ 1120 0 3 0.425000 9.681724920 20.495854420 11.886707951
+ 1121 0 1 1.050000 0.000000237 0.000116018 18.776651955
+ 1122 0 2 -0.950000 0.000000201 1.863364059 19.990358232
+ 1123 0 3 0.425000 0.000001419 1.863369778 20.972433017
+ 1124 0 2 -0.950000 1.613621211 0.931740611 17.562946925
+ 1125 0 3 0.425000 1.613621143 0.931743740 16.580872849
+ 1126 0 1 1.050000 3.227242265 0.000116028 18.776651871
+ 1127 0 2 -0.950000 3.227242301 1.863364192 19.990358144
+ 1128 0 3 0.425000 3.227242031 1.863368123 20.972432965
+ 1129 0 2 -0.950000 4.840863294 0.931740613 17.562946902
+ 1130 0 3 0.425000 4.840863113 0.931744467 16.580872831
+ 1131 0 1 1.050000 6.454484275 0.000116008 18.776651833
+ 1132 0 2 -0.950000 6.454484339 1.863364157 19.990358171
+ 1133 0 3 0.425000 6.454484060 1.863368111 20.972432982
+ 1134 0 2 -0.950000 8.068105236 0.931740580 17.562946839
+ 1135 0 3 0.425000 8.068105373 0.931745415 16.580872764
+ 1136 0 1 1.050000 9.681726287 0.000116001 18.776651702
+ 1137 0 2 -0.950000 9.681726225 1.863364125 19.990358139
+ 1138 0 3 0.425000 9.681726992 1.863367483 20.972432978
+ 1139 0 2 -0.950000 11.295347127 0.931740525 17.562946873
+ 1140 0 3 0.425000 11.295349376 0.931746176 16.580872760
+ 1141 0 1 1.050000 12.908968272 0.000115991 18.776651829
+ 1142 0 2 -0.950000 12.908968038 1.863364144 19.990358140
+ 1143 0 3 0.425000 12.908970840 1.863367984 20.972433073
+ 1144 0 2 -0.950000 14.522588996 0.931740615 17.562946967
+ 1145 0 3 0.425000 14.522591936 0.931744528 16.580872772
+ 1146 0 1 1.050000 16.136210263 0.000116017 18.776651865
+ 1147 0 2 -0.950000 16.136210032 1.863364145 19.990358131
+ 1148 0 3 0.425000 16.136212699 1.863368126 20.972433065
+ 1149 0 2 -0.950000 17.749831011 0.931740554 17.562946953
+ 1150 0 3 0.425000 17.749833951 0.931744663 16.580872819
+ 1151 0 1 1.050000 19.363452252 0.000116000 18.776651889
+ 1152 0 2 -0.950000 19.363451943 1.863364215 19.990358299
+ 1153 0 3 0.425000 19.363455313 1.863367224 20.972433010
+ 1154 0 2 -0.950000 20.977072958 0.931740756 17.562946946
+ 1155 0 3 0.425000 20.977076225 0.931742737 16.580872920
+ 1156 0 1 1.050000 -1.613620746 2.794988865 18.776653228
+ 1157 0 2 -0.950000 -1.613620569 4.658237032 19.990358768
+ 1158 0 3 0.425000 -1.613621552 4.658241117 20.972433136
+ 1159 0 2 -0.950000 0.000000363 3.726612877 17.562947903
+ 1160 0 3 0.425000 -0.000000758 3.726618151 16.580873306
+ 1161 0 1 1.050000 1.613621294 2.794988873 18.776653129
+ 1162 0 2 -0.950000 1.613621294 4.658237177 19.990358719
+ 1163 0 3 0.425000 1.613621336 4.658239558 20.972433086
+ 1164 0 2 -0.950000 3.227242308 3.726613037 17.562947893
+ 1165 0 3 0.425000 3.227242425 3.726616879 16.580873299
+ 1166 0 1 1.050000 4.840863311 2.794988893 18.776653165
+ 1167 0 2 -0.950000 4.840863307 4.658237161 19.990358768
+ 1168 0 3 0.425000 4.840863337 4.658239900 20.972433099
+ 1169 0 2 -0.950000 6.454484329 3.726613017 17.562947914
+ 1170 0 3 0.425000 6.454484433 3.726616968 16.580873337
+ 1171 0 1 1.050000 8.068105315 2.794988895 18.776653190
+ 1172 0 2 -0.950000 8.068105317 4.658237163 19.990358792
+ 1173 0 3 0.425000 8.068105422 4.658239954 20.972433133
+ 1174 0 2 -0.950000 9.681726364 3.726613043 17.562947976
+ 1175 0 3 0.425000 9.681726228 3.726616602 16.580873350
+ 1176 0 1 1.050000 11.295347281 2.794988884 18.776653231
+ 1177 0 2 -0.950000 11.295347345 4.658237167 19.990358756
+ 1178 0 3 0.425000 11.295347079 4.658239916 20.972433227
+ 1179 0 2 -0.950000 12.908968353 3.726612995 17.562948043
+ 1180 0 3 0.425000 12.908967898 3.726616916 16.580873295
+ 1181 0 1 1.050000 14.522589259 2.794988873 18.776653202
+ 1182 0 2 -0.950000 14.522589355 4.658237134 19.990358714
+ 1183 0 3 0.425000 14.522589161 4.658239925 20.972433223
+ 1184 0 2 -0.950000 16.136210367 3.726612969 17.562947959
+ 1185 0 3 0.425000 16.136209807 3.726616992 16.580873292
+ 1186 0 1 1.050000 17.749831244 2.794988874 18.776653211
+ 1187 0 2 -0.950000 17.749831280 4.658237255 19.990358754
+ 1188 0 3 0.425000 17.749831606 4.658238979 20.972433129
+ 1189 0 2 -0.950000 19.363452265 3.726613107 17.562947968
+ 1190 0 3 0.425000 19.363452444 3.726615857 16.580873391
+ 1191 0 1 1.050000 -3.227241662 5.589862059 18.776653062
+ 1192 0 2 -0.950000 -3.227241615 7.453110317 19.990357521
+ 1193 0 3 0.425000 -3.227242208 7.453114413 20.972432239
+ 1194 0 2 -0.950000 -1.613620633 6.521485452 17.562947359
+ 1195 0 3 0.425000 -1.613621205 6.521488827 16.580872816
+ 1196 0 1 1.050000 0.000000328 5.589862043 18.776653023
+ 1197 0 2 -0.950000 0.000000270 7.453110480 19.990357517
+ 1198 0 3 0.425000 0.000000607 7.453112834 20.972432204
+ 1199 0 2 -0.950000 1.613621289 6.521485602 17.562947330
+ 1200 0 3 0.425000 1.613621588 6.521487533 16.580872828
+ 1201 0 1 1.050000 3.227242306 5.589862060 18.776653041
+ 1202 0 2 -0.950000 3.227242278 7.453110426 19.990357606
+ 1203 0 3 0.425000 3.227242366 7.453113206 20.972432196
+ 1204 0 2 -0.950000 4.840863317 6.521485578 17.562947339
+ 1205 0 3 0.425000 4.840863384 6.521487724 16.580872907
+ 1206 0 1 1.050000 6.454484317 5.589862057 18.776653074
+ 1207 0 2 -0.950000 6.454484300 7.453110435 19.990357650
+ 1208 0 3 0.425000 6.454484376 7.453113125 20.972432222
+ 1209 0 2 -0.950000 8.068105326 6.521485565 17.562947380
+ 1210 0 3 0.425000 8.068105422 6.521487742 16.580872907
+ 1211 0 1 1.050000 9.681726322 5.589862052 18.776653094
+ 1212 0 2 -0.950000 9.681726296 7.453110430 19.990357576
+ 1213 0 3 0.425000 9.681726423 7.453113079 20.972432302
+ 1214 0 2 -0.950000 11.295347312 6.521485549 17.562947473
+ 1215 0 3 0.425000 11.295347473 6.521487652 16.580872827
+ 1216 0 1 1.050000 12.908968315 5.589862031 18.776653104
+ 1217 0 2 -0.950000 12.908968299 7.453110406 19.990357514
+ 1218 0 3 0.425000 12.908968333 7.453113232 20.972432352
+ 1219 0 2 -0.950000 14.522589296 6.521485515 17.562947473
+ 1220 0 3 0.425000 14.522589181 6.521487813 16.580872805
+ 1221 0 1 1.050000 16.136210297 5.589862049 18.776653055
+ 1222 0 2 -0.950000 16.136210230 7.453110524 19.990357522
+ 1223 0 3 0.425000 16.136210919 7.453111961 20.972432287
+ 1224 0 2 -0.950000 17.749831206 6.521485653 17.562947401
+ 1225 0 3 0.425000 17.749832095 6.521486565 16.580872839
+ 1226 0 1 1.050000 -4.840862696 8.384735714 18.776652300
+ 1227 0 2 -0.950000 -4.840862643 10.247984761 19.990356872
+ 1228 0 3 0.425000 -4.840863380 10.247990349 20.972431621
+ 1229 0 2 -0.950000 -3.227241645 9.316359740 17.562947171
+ 1230 0 3 0.425000 -3.227242427 9.316363333 16.580872393
+ 1231 0 1 1.050000 -1.613620685 8.384735726 18.776652259
+ 1232 0 2 -0.950000 -1.613620748 10.247984945 19.990356876
+ 1233 0 3 0.425000 -1.613620546 10.247988670 20.972431583
+ 1234 0 2 -0.950000 0.000000289 9.316359906 17.562947130
+ 1235 0 3 0.425000 0.000000404 9.316362007 16.580872409
+ 1236 0 1 1.050000 1.613621293 8.384735732 18.776652271
+ 1237 0 2 -0.950000 1.613621264 10.247984881 19.990356969
+ 1238 0 3 0.425000 1.613621215 10.247988981 20.972431537
+ 1239 0 2 -0.950000 3.227242306 9.316359851 17.562947101
+ 1240 0 3 0.425000 3.227242286 9.316362232 16.580872507
+ 1241 0 1 1.050000 4.840863298 8.384735717 18.776652317
+ 1242 0 2 -0.950000 4.840863265 10.247984883 19.990357025
+ 1243 0 3 0.425000 4.840863295 10.247988928 20.972431539
+ 1244 0 2 -0.950000 6.454484304 9.316359846 17.562947131
+ 1245 0 3 0.425000 6.454484335 9.316362167 16.580872522
+ 1246 0 1 1.050000 8.068105297 8.384735711 18.776652328
+ 1247 0 2 -0.950000 8.068105269 10.247984880 19.990356961
+ 1248 0 3 0.425000 8.068105337 10.247988884 20.972431600
+ 1249 0 2 -0.950000 9.681726290 9.316359835 17.562947210
+ 1250 0 3 0.425000 9.681726342 9.316362086 16.580872439
+ 1251 0 1 1.050000 11.295347289 8.384735697 18.776652324
+ 1252 0 2 -0.950000 11.295347271 10.247984855 19.990356913
+ 1253 0 3 0.425000 11.295347248 10.247988991 20.972431652
+ 1254 0 2 -0.950000 12.908968282 9.316359794 17.562947238
+ 1255 0 3 0.425000 12.908968175 9.316362311 16.580872403
+ 1256 0 1 1.050000 14.522589274 8.384735718 18.776652312
+ 1257 0 2 -0.950000 14.522589185 10.247984994 19.990356882
+ 1258 0 3 0.425000 14.522589971 10.247987751 20.972431639
+ 1259 0 2 -0.950000 16.136210187 9.316359962 17.562947236
+ 1260 0 3 0.425000 16.136211081 9.316360876 16.580872423
+ 1261 0 1 1.050000 -6.454483731 11.179610024 18.776651981
+ 1262 0 2 -0.950000 -6.454483661 13.042859793 19.990356788
+ 1263 0 3 0.425000 -6.454484514 13.042866650 20.972431594
+ 1264 0 2 -0.950000 -4.840862675 12.111234820 17.562947094
+ 1265 0 3 0.425000 -4.840863499 12.111240063 16.580872278
+ 1266 0 1 1.050000 -3.227241725 11.179610022 18.776651952
+ 1267 0 2 -0.950000 -3.227241795 13.042859955 19.990356796
+ 1268 0 3 0.425000 -3.227241602 13.042865026 20.972431581
+ 1269 0 2 -0.950000 -1.613620755 12.111234990 17.562947063
+ 1270 0 3 0.425000 -1.613620658 12.111238636 16.580872320
+ 1271 0 1 1.050000 0.000000262 11.179610043 18.776651964
+ 1272 0 2 -0.950000 0.000000224 13.042859901 19.990356911
+ 1273 0 3 0.425000 0.000000162 13.042865338 20.972431522
+ 1274 0 2 -0.950000 1.613621262 12.111234945 17.562946997
+ 1275 0 3 0.425000 1.613621220 12.111238846 16.580872421
+ 1276 0 1 1.050000 3.227242263 11.179610022 18.776651987
+ 1277 0 2 -0.950000 3.227242233 13.042859906 19.990356957
+ 1278 0 3 0.425000 3.227242240 13.042865272 20.972431485
+ 1279 0 2 -0.950000 4.840863259 12.111234928 17.562946992
+ 1280 0 3 0.425000 4.840863276 12.111238784 16.580872433
+ 1281 0 1 1.050000 6.454484262 11.179610015 18.776651996
+ 1282 0 2 -0.950000 6.454484234 13.042859893 19.990356912
+ 1283 0 3 0.425000 6.454484220 13.042865308 20.972431519
+ 1284 0 2 -0.950000 8.068105263 12.111234928 17.562947060
+ 1285 0 3 0.425000 8.068105230 12.111238729 16.580872373
+ 1286 0 1 1.050000 9.681726261 11.179610006 18.776651994
+ 1287 0 2 -0.950000 9.681726252 13.042859891 19.990356867
+ 1288 0 3 0.425000 9.681726222 13.042865270 20.972431570
+ 1289 0 2 -0.950000 11.295347259 12.111234894 17.562947092
+ 1290 0 3 0.425000 11.295347203 12.111238920 16.580872346
+ 1291 0 1 1.050000 12.908968242 11.179610028 18.776651995
+ 1292 0 2 -0.950000 12.908968159 13.042860026 19.990356839
+ 1293 0 3 0.425000 12.908968884 13.042864256 20.972431576
+ 1294 0 2 -0.950000 14.522589167 12.111235068 17.562947123
+ 1295 0 3 0.425000 14.522589877 12.111237493 16.580872333
+ 1296 0 1 1.050000 -8.068104752 13.974484319 18.776651676
+ 1297 0 2 -0.950000 -8.068104655 15.837733952 19.990356416
+ 1298 0 3 0.425000 -8.068105799 15.837740863 20.972431131
+ 1299 0 2 -0.950000 -6.454483650 14.906109205 17.562946429
+ 1300 0 3 0.425000 -6.454484871 14.906115636 16.580871611
+ 1301 0 1 1.050000 -4.840862749 13.974484313 18.776651660
+ 1302 0 2 -0.950000 -4.840862780 15.837734168 19.990356438
+ 1303 0 3 0.425000 -4.840862969 15.837738705 20.972431162
+ 1304 0 2 -0.950000 -3.227241774 14.906109359 17.562946419
+ 1305 0 3 0.425000 -3.227241793 14.906114325 16.580871659
+ 1306 0 1 1.050000 -1.613620775 13.974484329 18.776651687
+ 1307 0 2 -0.950000 -1.613620791 15.837734090 19.990356563
+ 1308 0 3 0.425000 -1.613620994 15.837739230 20.972431111
+ 1309 0 2 -0.950000 0.000000227 14.906109320 17.562946349
+ 1310 0 3 0.425000 0.000000103 14.906114509 16.580871775
+ 1311 0 1 1.050000 1.613621224 13.974484314 18.776651699
+ 1312 0 2 -0.950000 1.613621214 15.837734090 19.990356612
+ 1313 0 3 0.425000 1.613621184 15.837739158 20.972431068
+ 1314 0 2 -0.950000 3.227242214 14.906109308 17.562946308
+ 1315 0 3 0.425000 3.227242160 14.906114439 16.580871775
+ 1316 0 1 1.050000 4.840863223 13.974484307 18.776651681
+ 1317 0 2 -0.950000 4.840863199 15.837734104 19.990356570
+ 1318 0 3 0.425000 4.840863346 15.837738932 20.972431054
+ 1319 0 2 -0.950000 6.454484198 14.906109300 17.562946350
+ 1320 0 3 0.425000 6.454484545 14.906114445 16.580871732
+ 1321 0 1 1.050000 8.068105229 13.974484296 18.776651691
+ 1322 0 2 -0.950000 8.068105232 15.837734042 19.990356497
+ 1323 0 3 0.425000 8.068105402 15.837739631 20.972431104
+ 1324 0 2 -0.950000 9.681726238 14.906109275 17.562946388
+ 1325 0 3 0.425000 9.681725997 14.906114427 16.580871677
+ 1326 0 1 1.050000 11.295347219 13.974484334 18.776651674
+ 1327 0 2 -0.950000 11.295347171 15.837734230 19.990356426
+ 1328 0 3 0.425000 11.295347692 15.837738130 20.972431104
+ 1329 0 2 -0.950000 12.908968165 14.906109437 17.562946404
+ 1330 0 3 0.425000 12.908968843 14.906113238 16.580871662
+ 1331 0 1 1.050000 -9.681725772 16.769358077 18.776650736
+ 1332 0 2 -0.950000 -9.681725742 18.632606579 19.990355754
+ 1333 0 3 0.425000 -9.681725735 18.632611090 20.972430415
+ 1334 0 2 -0.950000 -8.068104762 17.700982536 17.562944945
+ 1335 0 3 0.425000 -8.068104706 17.700989151 16.580870616
+ 1336 0 1 1.050000 -6.454483776 16.769358056 18.776650750
+ 1337 0 2 -0.950000 -6.454483895 18.632606724 19.990355786
+ 1338 0 3 0.425000 -6.454482467 18.632609601 20.972430426
+ 1339 0 2 -0.950000 -4.840862864 17.700982707 17.562944923
+ 1340 0 3 0.425000 -4.840861969 17.700987141 16.580870659
+ 1341 0 1 1.050000 -3.227241799 16.769358065 18.776650782
+ 1342 0 2 -0.950000 -3.227241844 18.632606671 19.990355845
+ 1343 0 3 0.425000 -3.227241153 18.632610132 20.972430360
+ 1344 0 2 -0.950000 -1.613620829 17.700982606 17.562944848
+ 1345 0 3 0.425000 -1.613620508 17.700987490 16.580870743
+ 1346 0 1 1.050000 0.000000208 16.769358046 18.776650802
+ 1347 0 2 -0.950000 0.000000185 18.632606647 19.990355883
+ 1348 0 3 0.425000 0.000000276 18.632610317 20.972430322
+ 1349 0 2 -0.950000 1.613621220 17.700982635 17.562944845
+ 1350 0 3 0.425000 1.613620955 17.700987498 16.580870780
+ 1351 0 1 1.050000 3.227242213 16.769358050 18.776650776
+ 1352 0 2 -0.950000 3.227242238 18.632606683 19.990355881
+ 1353 0 3 0.425000 3.227242051 18.632609725 20.972430332
+ 1354 0 2 -0.950000 4.840863241 17.700982666 17.562944843
+ 1355 0 3 0.425000 4.840862970 17.700987296 16.580870743
+ 1356 0 1 1.050000 6.454484221 16.769358035 18.776650776
+ 1357 0 2 -0.950000 6.454484257 18.632606624 19.990355866
+ 1358 0 3 0.425000 6.454483555 18.632610056 20.972430387
+ 1359 0 2 -0.950000 8.068105259 17.700982619 17.562944917
+ 1360 0 3 0.425000 8.068104563 17.700988161 16.580870691
+ 1361 0 1 1.050000 9.681726205 16.769358081 18.776650735
+ 1362 0 2 -0.950000 9.681726139 18.632606874 19.990355818
+ 1363 0 3 0.425000 9.681727175 18.632608006 20.972430383
+ 1364 0 2 -0.950000 11.295347087 17.700982802 17.562944929
+ 1365 0 3 0.425000 11.295348441 17.700986510 16.580870634
+ 1366 0 1 1.050000 -11.295346713 19.564231395 18.776650527
+ 1367 0 2 -0.950000 -11.295346424 21.427479090 19.990356024
+ 1368 0 3 0.425000 -11.295350206 21.427484173 20.972431457
+ 1369 0 2 -0.950000 -9.681725392 20.495855543 17.562945456
+ 1370 0 3 0.425000 -9.681728944 20.495860119 16.580870807
+ 1371 0 1 1.050000 -8.068104700 19.564231385 18.776650551
+ 1372 0 2 -0.950000 -8.068104460 21.427479253 19.990356124
+ 1373 0 3 0.425000 -8.068107431 21.427482536 20.972431523
+ 1374 0 2 -0.950000 -6.454483473 20.495855694 17.562945478
+ 1375 0 3 0.425000 -6.454486422 20.495858879 16.580870838
+ 1376 0 1 1.050000 -4.840862734 19.564231380 18.776650542
+ 1377 0 2 -0.950000 -4.840862440 21.427479173 19.990356162
+ 1378 0 3 0.425000 -4.840865744 21.427482658 20.972431519
+ 1379 0 2 -0.950000 -3.227241499 20.495855610 17.562945375
+ 1380 0 3 0.425000 -3.227244662 20.495859337 16.580870863
+ 1381 0 1 1.050000 -1.613620745 19.564231353 18.776650486
+ 1382 0 2 -0.950000 -1.613620583 21.427479280 19.990356164
+ 1383 0 3 0.425000 -1.613622716 21.427480575 20.972431486
+ 1384 0 2 -0.950000 0.000000299 20.495855640 17.562945381
+ 1385 0 3 0.425000 -0.000000121 20.495859715 16.580870909
+ 1386 0 1 1.050000 1.613621231 19.564231369 18.776650545
+ 1387 0 2 -0.950000 1.613621278 21.427479225 19.990356226
+ 1388 0 3 0.425000 1.613621347 21.427481927 20.972431498
+ 1389 0 2 -0.950000 3.227242200 20.495855678 17.562945422
+ 1390 0 3 0.425000 3.227242541 20.495858973 16.580870900
+ 1391 0 1 1.050000 4.840863227 19.564231376 18.776650550
+ 1392 0 2 -0.950000 4.840863256 21.427479216 19.990356188
+ 1393 0 3 0.425000 4.840863531 21.427482488 20.972431463
+ 1394 0 2 -0.950000 6.454484206 20.495855608 17.562945441
+ 1395 0 3 0.425000 6.454484832 20.495859196 16.580870898
+ 1396 0 1 1.050000 8.068105225 19.564231391 18.776650587
+ 1397 0 2 -0.950000 8.068105301 21.427479187 19.990356096
+ 1398 0 3 0.425000 8.068105662 21.427483631 20.972431452
+ 1399 0 2 -0.950000 9.681726345 20.495855798 17.562945401
+ 1400 0 3 0.425000 9.681724915 20.495856701 16.580870783
+
+Bonds
+
+ 1 1 2 3
+ 2 1 4 5
+ 3 1 7 8
+ 4 1 9 10
+ 5 1 12 13
+ 6 1 14 15
+ 7 1 17 18
+ 8 1 19 20
+ 9 1 22 23
+ 10 1 24 25
+ 11 1 27 28
+ 12 1 29 30
+ 13 1 32 33
+ 14 1 34 35
+ 15 1 37 38
+ 16 1 39 40
+ 17 1 42 43
+ 18 1 44 45
+ 19 1 47 48
+ 20 1 49 50
+ 21 1 52 53
+ 22 1 54 55
+ 23 1 57 58
+ 24 1 59 60
+ 25 1 62 63
+ 26 1 64 65
+ 27 1 67 68
+ 28 1 69 70
+ 29 1 72 73
+ 30 1 74 75
+ 31 1 77 78
+ 32 1 79 80
+ 33 1 82 83
+ 34 1 84 85
+ 35 1 87 88
+ 36 1 89 90
+ 37 1 92 93
+ 38 1 94 95
+ 39 1 97 98
+ 40 1 99 100
+ 41 1 102 103
+ 42 1 104 105
+ 43 1 107 108
+ 44 1 109 110
+ 45 1 112 113
+ 46 1 114 115
+ 47 1 117 118
+ 48 1 119 120
+ 49 1 122 123
+ 50 1 124 125
+ 51 1 127 128
+ 52 1 129 130
+ 53 1 132 133
+ 54 1 134 135
+ 55 1 137 138
+ 56 1 139 140
+ 57 1 142 143
+ 58 1 144 145
+ 59 1 147 148
+ 60 1 149 150
+ 61 1 152 153
+ 62 1 154 155
+ 63 1 157 158
+ 64 1 159 160
+ 65 1 162 163
+ 66 1 164 165
+ 67 1 167 168
+ 68 1 169 170
+ 69 1 172 173
+ 70 1 174 175
+ 71 1 177 178
+ 72 1 179 180
+ 73 1 182 183
+ 74 1 184 185
+ 75 1 187 188
+ 76 1 189 190
+ 77 1 192 193
+ 78 1 194 195
+ 79 1 197 198
+ 80 1 199 200
+ 81 1 202 203
+ 82 1 204 205
+ 83 1 207 208
+ 84 1 209 210
+ 85 1 212 213
+ 86 1 214 215
+ 87 1 217 218
+ 88 1 219 220
+ 89 1 222 223
+ 90 1 224 225
+ 91 1 227 228
+ 92 1 229 230
+ 93 1 232 233
+ 94 1 234 235
+ 95 1 237 238
+ 96 1 239 240
+ 97 1 242 243
+ 98 1 244 245
+ 99 1 247 248
+ 100 1 249 250
+ 101 1 252 253
+ 102 1 254 255
+ 103 1 257 258
+ 104 1 259 260
+ 105 1 262 263
+ 106 1 264 265
+ 107 1 267 268
+ 108 1 269 270
+ 109 1 272 273
+ 110 1 274 275
+ 111 1 277 278
+ 112 1 279 280
+ 113 1 282 283
+ 114 1 284 285
+ 115 1 287 288
+ 116 1 289 290
+ 117 1 292 293
+ 118 1 294 295
+ 119 1 297 298
+ 120 1 299 300
+ 121 1 302 303
+ 122 1 304 305
+ 123 1 307 308
+ 124 1 309 310
+ 125 1 312 313
+ 126 1 314 315
+ 127 1 317 318
+ 128 1 319 320
+ 129 1 322 323
+ 130 1 324 325
+ 131 1 327 328
+ 132 1 329 330
+ 133 1 332 333
+ 134 1 334 335
+ 135 1 337 338
+ 136 1 339 340
+ 137 1 342 343
+ 138 1 344 345
+ 139 1 347 348
+ 140 1 349 350
+ 141 1 352 353
+ 142 1 354 355
+ 143 1 357 358
+ 144 1 359 360
+ 145 1 362 363
+ 146 1 364 365
+ 147 1 367 368
+ 148 1 369 370
+ 149 1 372 373
+ 150 1 374 375
+ 151 1 377 378
+ 152 1 379 380
+ 153 1 382 383
+ 154 1 384 385
+ 155 1 387 388
+ 156 1 389 390
+ 157 1 392 393
+ 158 1 394 395
+ 159 1 397 398
+ 160 1 399 400
+ 161 1 402 403
+ 162 1 404 405
+ 163 1 407 408
+ 164 1 409 410
+ 165 1 412 413
+ 166 1 414 415
+ 167 1 417 418
+ 168 1 419 420
+ 169 1 422 423
+ 170 1 424 425
+ 171 1 427 428
+ 172 1 429 430
+ 173 1 432 433
+ 174 1 434 435
+ 175 1 437 438
+ 176 1 439 440
+ 177 1 442 443
+ 178 1 444 445
+ 179 1 447 448
+ 180 1 449 450
+ 181 1 452 453
+ 182 1 454 455
+ 183 1 457 458
+ 184 1 459 460
+ 185 1 462 463
+ 186 1 464 465
+ 187 1 467 468
+ 188 1 469 470
+ 189 1 472 473
+ 190 1 474 475
+ 191 1 477 478
+ 192 1 479 480
+ 193 1 482 483
+ 194 1 484 485
+ 195 1 487 488
+ 196 1 489 490
+ 197 1 492 493
+ 198 1 494 495
+ 199 1 497 498
+ 200 1 499 500
+ 201 1 502 503
+ 202 1 504 505
+ 203 1 507 508
+ 204 1 509 510
+ 205 1 512 513
+ 206 1 514 515
+ 207 1 517 518
+ 208 1 519 520
+ 209 1 522 523
+ 210 1 524 525
+ 211 1 527 528
+ 212 1 529 530
+ 213 1 532 533
+ 214 1 534 535
+ 215 1 537 538
+ 216 1 539 540
+ 217 1 542 543
+ 218 1 544 545
+ 219 1 547 548
+ 220 1 549 550
+ 221 1 552 553
+ 222 1 554 555
+ 223 1 557 558
+ 224 1 559 560
+ 225 1 562 563
+ 226 1 564 565
+ 227 1 567 568
+ 228 1 569 570
+ 229 1 572 573
+ 230 1 574 575
+ 231 1 577 578
+ 232 1 579 580
+ 233 1 582 583
+ 234 1 584 585
+ 235 1 587 588
+ 236 1 589 590
+ 237 1 592 593
+ 238 1 594 595
+ 239 1 597 598
+ 240 1 599 600
+ 241 1 602 603
+ 242 1 604 605
+ 243 1 607 608
+ 244 1 609 610
+ 245 1 612 613
+ 246 1 614 615
+ 247 1 617 618
+ 248 1 619 620
+ 249 1 622 623
+ 250 1 624 625
+ 251 1 627 628
+ 252 1 629 630
+ 253 1 632 633
+ 254 1 634 635
+ 255 1 637 638
+ 256 1 639 640
+ 257 1 642 643
+ 258 1 644 645
+ 259 1 647 648
+ 260 1 649 650
+ 261 1 652 653
+ 262 1 654 655
+ 263 1 657 658
+ 264 1 659 660
+ 265 1 662 663
+ 266 1 664 665
+ 267 1 667 668
+ 268 1 669 670
+ 269 1 672 673
+ 270 1 674 675
+ 271 1 677 678
+ 272 1 679 680
+ 273 1 682 683
+ 274 1 684 685
+ 275 1 687 688
+ 276 1 689 690
+ 277 1 692 693
+ 278 1 694 695
+ 279 1 697 698
+ 280 1 699 700
+ 281 1 702 703
+ 282 1 704 705
+ 283 1 707 708
+ 284 1 709 710
+ 285 1 712 713
+ 286 1 714 715
+ 287 1 717 718
+ 288 1 719 720
+ 289 1 722 723
+ 290 1 724 725
+ 291 1 727 728
+ 292 1 729 730
+ 293 1 732 733
+ 294 1 734 735
+ 295 1 737 738
+ 296 1 739 740
+ 297 1 742 743
+ 298 1 744 745
+ 299 1 747 748
+ 300 1 749 750
+ 301 1 752 753
+ 302 1 754 755
+ 303 1 757 758
+ 304 1 759 760
+ 305 1 762 763
+ 306 1 764 765
+ 307 1 767 768
+ 308 1 769 770
+ 309 1 772 773
+ 310 1 774 775
+ 311 1 777 778
+ 312 1 779 780
+ 313 1 782 783
+ 314 1 784 785
+ 315 1 787 788
+ 316 1 789 790
+ 317 1 792 793
+ 318 1 794 795
+ 319 1 797 798
+ 320 1 799 800
+ 321 1 802 803
+ 322 1 804 805
+ 323 1 807 808
+ 324 1 809 810
+ 325 1 812 813
+ 326 1 814 815
+ 327 1 817 818
+ 328 1 819 820
+ 329 1 822 823
+ 330 1 824 825
+ 331 1 827 828
+ 332 1 829 830
+ 333 1 832 833
+ 334 1 834 835
+ 335 1 837 838
+ 336 1 839 840
+ 337 1 842 843
+ 338 1 844 845
+ 339 1 847 848
+ 340 1 849 850
+ 341 1 852 853
+ 342 1 854 855
+ 343 1 857 858
+ 344 1 859 860
+ 345 1 862 863
+ 346 1 864 865
+ 347 1 867 868
+ 348 1 869 870
+ 349 1 872 873
+ 350 1 874 875
+ 351 1 877 878
+ 352 1 879 880
+ 353 1 882 883
+ 354 1 884 885
+ 355 1 887 888
+ 356 1 889 890
+ 357 1 892 893
+ 358 1 894 895
+ 359 1 897 898
+ 360 1 899 900
+ 361 1 902 903
+ 362 1 904 905
+ 363 1 907 908
+ 364 1 909 910
+ 365 1 912 913
+ 366 1 914 915
+ 367 1 917 918
+ 368 1 919 920
+ 369 1 922 923
+ 370 1 924 925
+ 371 1 927 928
+ 372 1 929 930
+ 373 1 932 933
+ 374 1 934 935
+ 375 1 937 938
+ 376 1 939 940
+ 377 1 942 943
+ 378 1 944 945
+ 379 1 947 948
+ 380 1 949 950
+ 381 1 952 953
+ 382 1 954 955
+ 383 1 957 958
+ 384 1 959 960
+ 385 1 962 963
+ 386 1 964 965
+ 387 1 967 968
+ 388 1 969 970
+ 389 1 972 973
+ 390 1 974 975
+ 391 1 977 978
+ 392 1 979 980
+ 393 1 982 983
+ 394 1 984 985
+ 395 1 987 988
+ 396 1 989 990
+ 397 1 992 993
+ 398 1 994 995
+ 399 1 997 998
+ 400 1 999 1000
+ 401 1 1002 1003
+ 402 1 1004 1005
+ 403 1 1007 1008
+ 404 1 1009 1010
+ 405 1 1012 1013
+ 406 1 1014 1015
+ 407 1 1017 1018
+ 408 1 1019 1020
+ 409 1 1022 1023
+ 410 1 1024 1025
+ 411 1 1027 1028
+ 412 1 1029 1030
+ 413 1 1032 1033
+ 414 1 1034 1035
+ 415 1 1037 1038
+ 416 1 1039 1040
+ 417 1 1042 1043
+ 418 1 1044 1045
+ 419 1 1047 1048
+ 420 1 1049 1050
+ 421 1 1052 1053
+ 422 1 1054 1055
+ 423 1 1057 1058
+ 424 1 1059 1060
+ 425 1 1062 1063
+ 426 1 1064 1065
+ 427 1 1067 1068
+ 428 1 1069 1070
+ 429 1 1072 1073
+ 430 1 1074 1075
+ 431 1 1077 1078
+ 432 1 1079 1080
+ 433 1 1082 1083
+ 434 1 1084 1085
+ 435 1 1087 1088
+ 436 1 1089 1090
+ 437 1 1092 1093
+ 438 1 1094 1095
+ 439 1 1097 1098
+ 440 1 1099 1100
+ 441 1 1102 1103
+ 442 1 1104 1105
+ 443 1 1107 1108
+ 444 1 1109 1110
+ 445 1 1112 1113
+ 446 1 1114 1115
+ 447 1 1117 1118
+ 448 1 1119 1120
+ 449 1 1122 1123
+ 450 1 1124 1125
+ 451 1 1127 1128
+ 452 1 1129 1130
+ 453 1 1132 1133
+ 454 1 1134 1135
+ 455 1 1137 1138
+ 456 1 1139 1140
+ 457 1 1142 1143
+ 458 1 1144 1145
+ 459 1 1147 1148
+ 460 1 1149 1150
+ 461 1 1152 1153
+ 462 1 1154 1155
+ 463 1 1157 1158
+ 464 1 1159 1160
+ 465 1 1162 1163
+ 466 1 1164 1165
+ 467 1 1167 1168
+ 468 1 1169 1170
+ 469 1 1172 1173
+ 470 1 1174 1175
+ 471 1 1177 1178
+ 472 1 1179 1180
+ 473 1 1182 1183
+ 474 1 1184 1185
+ 475 1 1187 1188
+ 476 1 1189 1190
+ 477 1 1192 1193
+ 478 1 1194 1195
+ 479 1 1197 1198
+ 480 1 1199 1200
+ 481 1 1202 1203
+ 482 1 1204 1205
+ 483 1 1207 1208
+ 484 1 1209 1210
+ 485 1 1212 1213
+ 486 1 1214 1215
+ 487 1 1217 1218
+ 488 1 1219 1220
+ 489 1 1222 1223
+ 490 1 1224 1225
+ 491 1 1227 1228
+ 492 1 1229 1230
+ 493 1 1232 1233
+ 494 1 1234 1235
+ 495 1 1237 1238
+ 496 1 1239 1240
+ 497 1 1242 1243
+ 498 1 1244 1245
+ 499 1 1247 1248
+ 500 1 1249 1250
+ 501 1 1252 1253
+ 502 1 1254 1255
+ 503 1 1257 1258
+ 504 1 1259 1260
+ 505 1 1262 1263
+ 506 1 1264 1265
+ 507 1 1267 1268
+ 508 1 1269 1270
+ 509 1 1272 1273
+ 510 1 1274 1275
+ 511 1 1277 1278
+ 512 1 1279 1280
+ 513 1 1282 1283
+ 514 1 1284 1285
+ 515 1 1287 1288
+ 516 1 1289 1290
+ 517 1 1292 1293
+ 518 1 1294 1295
+ 519 1 1297 1298
+ 520 1 1299 1300
+ 521 1 1302 1303
+ 522 1 1304 1305
+ 523 1 1307 1308
+ 524 1 1309 1310
+ 525 1 1312 1313
+ 526 1 1314 1315
+ 527 1 1317 1318
+ 528 1 1319 1320
+ 529 1 1322 1323
+ 530 1 1324 1325
+ 531 1 1327 1328
+ 532 1 1329 1330
+ 533 1 1332 1333
+ 534 1 1334 1335
+ 535 1 1337 1338
+ 536 1 1339 1340
+ 537 1 1342 1343
+ 538 1 1344 1345
+ 539 1 1347 1348
+ 540 1 1349 1350
+ 541 1 1352 1353
+ 542 1 1354 1355
+ 543 1 1357 1358
+ 544 1 1359 1360
+ 545 1 1362 1363
+ 546 1 1364 1365
+ 547 1 1367 1368
+ 548 1 1369 1370
+ 549 1 1372 1373
+ 550 1 1374 1375
+ 551 1 1377 1378
+ 552 1 1379 1380
+ 553 1 1382 1383
+ 554 1 1384 1385
+ 555 1 1387 1388
+ 556 1 1389 1390
+ 557 1 1392 1393
+ 558 1 1394 1395
+ 559 1 1397 1398
+ 560 1 1399 1400
+
diff --git a/examples/nb3b/in.nb3b b/examples/nb3b/in.nb3b
new file mode 100644
index 000000000..8d44b71b0
--- /dev/null
+++ b/examples/nb3b/in.nb3b
@@ -0,0 +1,49 @@
+# test of NB3B pair style with pair hybrid and KSpace solver
+
+units real
+atom_style full
+
+bond_style morse
+angle_style none
+dihedral_style none
+improper_style none
+
+read_data data.nb3b
+
+pair_style hybrid/overlay nb3b/harmonic lj/cut/coul/long 10.0
+pair_coeff * * nb3b/harmonic MOH.nb3b.harmonic M O H
+pair_modify mix arithmetic
+
+pair_coeff 1 1 lj/cut/coul/long 0.000000903 5.264325869
+pair_coeff 1 2 lj/cut/coul/long 0.000374621 4.214922978
+pair_coeff 1 3 lj/cut/coul/long 0 2.632162934
+pair_coeff 2 2 lj/cut/coul/long 0.155416412 3.165520088
+pair_coeff 2 3 lj/cut/coul/long 0 1.582760044
+pair_coeff 3 3 lj/cut/coul/long 0 0
+
+kspace_style ewald/disp 0.0001
+
+neighbor 2.0 bin
+neigh_modify delay 5
+special_bonds lj/coul 0.0 0.0 1.0
+
+thermo_style custom step etotal ke temp pe ebond eangle edihed eimp &
+ evdwl ecoul elong press lx ly lz xy xz yz vol
+
+timestep 1.0
+run_style respa 2 2 pair 1 kspace 2
+
+thermo 50
+
+### Minimize forces in structure ###
+
+minimize 1.0e-06 1.0e-08 1000 10000
+
+### Run NVE to equilibrate velocities ###
+
+velocity all create 298.0 4928459 mom yes rot yes dist gaussian
+
+fix 1 all nve
+fix 2 all temp/rescale 10 298.0 298.0 25.0 1.0
+
+run 100
diff --git a/examples/nb3b/log.nb3b.1Feb14.linux.1 b/examples/nb3b/log.nb3b.1Feb14.linux.1
new file mode 100644
index 000000000..4cb66af14
--- /dev/null
+++ b/examples/nb3b/log.nb3b.1Feb14.linux.1
@@ -0,0 +1,144 @@
+LAMMPS (3 May 2014)
+# test of NB3B pair style with pair hybrid and KSpace solver
+
+units real
+atom_style full
+
+bond_style morse
+angle_style none
+dihedral_style none
+improper_style none
+
+read_data data.nb3b
+ orthogonal box = (0 0 0) to (22.5907 22.359 23.4708)
+ 1 by 1 by 1 MPI processor grid
+ reading atoms ...
+ 1400 atoms
+ scanning bonds ...
+ 1 = max bonds/atom
+ reading bonds ...
+ 560 bonds
+ 1 = max # of 1-2 neighbors
+ 0 = max # of 1-3 neighbors
+ 0 = max # of 1-4 neighbors
+ 1 = max # of special neighbors
+
+pair_style hybrid/overlay nb3b/harmonic lj/cut/coul/long 10.0
+pair_coeff * * nb3b/harmonic MOH.nb3b.harmonic M O H
+pair_modify mix arithmetic
+
+pair_coeff 1 1 lj/cut/coul/long 0.000000903 5.264325869
+pair_coeff 1 2 lj/cut/coul/long 0.000374621 4.214922978
+pair_coeff 1 3 lj/cut/coul/long 0 2.632162934
+pair_coeff 2 2 lj/cut/coul/long 0.155416412 3.165520088
+pair_coeff 2 3 lj/cut/coul/long 0 1.582760044
+pair_coeff 3 3 lj/cut/coul/long 0 0
+
+kspace_style ewald/disp 0.0001
+
+neighbor 2.0 bin
+neigh_modify delay 5
+special_bonds lj/coul 0.0 0.0 1.0
+ 1 = max # of 1-2 neighbors
+ 0 = max # of 1-3 neighbors
+ 1 = max # of special neighbors
+
+thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press lx ly lz xy xz yz vol
+
+timestep 1.0
+run_style respa 2 2 pair 1 kspace 2
+Respa levels:
+ 1 = bond angle dihedral improper pair
+ 2 = kspace
+
+thermo 50
+
+### Minimize forces in structure ###
+
+minimize 1.0e-06 1.0e-08 1000 10000
+WARNING: Resetting reneighboring criteria during minimization (../min.cpp:173)
+EwaldDisp initialization ...
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+ G vector = 0.269426
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+ vectors: nbox = 6, nkvec = 478
+Memory usage per processor = 21.4036 Mbytes
+Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume
+ 0 -61505.983 0 0 -61505.983 198.11978 0 0 0 5426.6842 -20935.868 -46194.919 979.72809 22.5907 22.359 23.4708 0 0 0 11855.229
+ 3 -61506.574 0 0 -61506.574 192.23343 0 0 0 5462.762 -20966.52 -46195.05 2196.3697 22.5907 22.359 23.4708 0 0 0 11855.229
+Loop time of 0.969872 on 1 procs for 3 steps with 1400 atoms
+
+Minimization stats:
+ Stopping criterion = energy tolerance
+ Energy initial, next-to-last, final =
+ -61505.9829 -61506.5583555 -61506.5743242
+ Force two-norm initial, final = 17.893 9.98801
+ Force max component initial, final = 0.757547 0.314107
+ Final line search alpha, max atom move = 0.000178805 5.61639e-05
+ Iterations, force evaluations = 3 25
+
+Pair time (%) = 0.747406 (77.0623)
+Bond time (%) = 0.000653505 (0.0673806)
+Kspce time (%) = 0.218625 (22.5416)
+Neigh time (%) = 0 (0)
+Comm time (%) = 0.00222945 (0.229871)
+Outpt time (%) = 0 (0)
+Other time (%) = 0.000958443 (0.0988216)
+
+Nlocal: 1400 ave 1400 max 1400 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Nghost: 10804 ave 10804 max 10804 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Neighs: 596960 ave 596960 max 596960 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+FullNghs: 1.19392e+06 ave 1.19392e+06 max 1.19392e+06 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+
+Total # of neighbors = 1193920
+Ave neighs/atom = 852.8
+Ave special neighs/atom = 0.8
+Neighbor list builds = 0
+Dangerous builds = 0
+
+### Run NVE to equilibrate velocities ###
+
+velocity all create 298.0 4928459 mom yes rot yes dist gaussian
+
+fix 1 all nve
+fix 2 all temp/rescale 10 298.0 298.0 25.0 1.0
+
+run 100
+EwaldDisp initialization ...
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+ G vector = 0.269426
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+Memory usage per processor = 20.9138 Mbytes
+Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume
+ 3 -60263.869 1242.7057 298 -61506.574 192.23343 0 0 0 5462.762 -20966.52 -46195.05 6988.0868 22.5907 22.359 23.4708 0 0 0 11855.229
+ 50 -58834.736 1260.2404 302.20481 -60094.977 213.89563 0 0 0 6132.6243 -20255.127 -46186.37 21262.808 22.5907 22.359 23.4708 0 0 0 11855.229
+ 100 -58828.252 1242.7057 298 -60070.958 437.82815 0 0 0 6455.2967 -20778.873 -46185.21 20113.98 22.5907 22.359 23.4708 0 0 0 11855.229
+ 103 -58827.642 1235.2387 296.20942 -60062.881 453.5865 0 0 0 6411.1525 -20743.952 -46183.668 18788.656 22.5907 22.359 23.4708 0 0 0 11855.229
+Loop time of 5.86221 on 1 procs for 100 steps with 1400 atoms
+
+Pair time (%) = 4.88784 (83.3788)
+Bond time (%) = 0.00446033 (0.0760863)
+Kspce time (%) = 0.840367 (14.3353)
+Neigh time (%) = 0.0973861 (1.66125)
+Comm time (%) = 0.01776 (0.302958)
+Outpt time (%) = 0.000123978 (0.00211486)
+Other time (%) = 0.0142703 (0.243429)
+
+Nlocal: 1400 ave 1400 max 1400 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Nghost: 10843 ave 10843 max 10843 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+Neighs: 595351 ave 595351 max 595351 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+FullNghs: 1.1907e+06 ave 1.1907e+06 max 1.1907e+06 min
+Histogram: 1 0 0 0 0 0 0 0 0 0
+
+Total # of neighbors = 1190702
+Ave neighs/atom = 850.501
+Ave special neighs/atom = 0.8
+Neighbor list builds = 2
+Dangerous builds = 0
diff --git a/examples/nb3b/log.nb3b.1Feb14.linux.4 b/examples/nb3b/log.nb3b.1Feb14.linux.4
new file mode 100644
index 000000000..5234a2504
--- /dev/null
+++ b/examples/nb3b/log.nb3b.1Feb14.linux.4
@@ -0,0 +1,144 @@
+LAMMPS (3 May 2014)
+# test of NB3B pair style with pair hybrid and KSpace solver
+
+units real
+atom_style full
+
+bond_style morse
+angle_style none
+dihedral_style none
+improper_style none
+
+read_data data.nb3b
+ orthogonal box = (0 0 0) to (22.5907 22.359 23.4708)
+ 2 by 1 by 2 MPI processor grid
+ reading atoms ...
+ 1400 atoms
+ scanning bonds ...
+ 1 = max bonds/atom
+ reading bonds ...
+ 560 bonds
+ 1 = max # of 1-2 neighbors
+ 0 = max # of 1-3 neighbors
+ 0 = max # of 1-4 neighbors
+ 1 = max # of special neighbors
+
+pair_style hybrid/overlay nb3b/harmonic lj/cut/coul/long 10.0
+pair_coeff * * nb3b/harmonic MOH.nb3b.harmonic M O H
+pair_modify mix arithmetic
+
+pair_coeff 1 1 lj/cut/coul/long 0.000000903 5.264325869
+pair_coeff 1 2 lj/cut/coul/long 0.000374621 4.214922978
+pair_coeff 1 3 lj/cut/coul/long 0 2.632162934
+pair_coeff 2 2 lj/cut/coul/long 0.155416412 3.165520088
+pair_coeff 2 3 lj/cut/coul/long 0 1.582760044
+pair_coeff 3 3 lj/cut/coul/long 0 0
+
+kspace_style ewald/disp 0.0001
+
+neighbor 2.0 bin
+neigh_modify delay 5
+special_bonds lj/coul 0.0 0.0 1.0
+ 1 = max # of 1-2 neighbors
+ 0 = max # of 1-3 neighbors
+ 1 = max # of special neighbors
+
+thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press lx ly lz xy xz yz vol
+
+timestep 1.0
+run_style respa 2 2 pair 1 kspace 2
+Respa levels:
+ 1 = bond angle dihedral improper pair
+ 2 = kspace
+
+thermo 50
+
+### Minimize forces in structure ###
+
+minimize 1.0e-06 1.0e-08 1000 10000
+WARNING: Resetting reneighboring criteria during minimization (../min.cpp:173)
+EwaldDisp initialization ...
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+ G vector = 0.269426
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+ vectors: nbox = 6, nkvec = 478
+Memory usage per processor = 10.9549 Mbytes
+Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume
+ 0 -61505.983 0 0 -61505.983 198.11978 0 0 0 5426.6842 -20935.868 -46194.919 979.72809 22.5907 22.359 23.4708 0 0 0 11855.229
+ 3 -61506.574 0 0 -61506.574 192.23343 0 0 0 5462.762 -20966.52 -46195.05 2196.3697 22.5907 22.359 23.4708 0 0 0 11855.229
+Loop time of 0.288323 on 4 procs for 3 steps with 1400 atoms
+
+Minimization stats:
+ Stopping criterion = energy tolerance
+ Energy initial, next-to-last, final =
+ -61505.9829 -61506.5583555 -61506.5743242
+ Force two-norm initial, final = 17.893 9.98801
+ Force max component initial, final = 0.757547 0.314107
+ Final line search alpha, max atom move = 0.000178805 5.61639e-05
+ Iterations, force evaluations = 3 25
+
+Pair time (%) = 0.19587 (67.9344)
+Bond time (%) = 0.000175655 (0.060923)
+Kspce time (%) = 0.0835239 (28.9689)
+Neigh time (%) = 0 (0)
+Comm time (%) = 0.00802237 (2.78243)
+Outpt time (%) = 0 (0)
+Other time (%) = 0.000730693 (0.253429)
+
+Nlocal: 350 ave 399 max 305 min
+Histogram: 1 1 0 0 0 0 0 0 1 1
+Nghost: 6602 ave 6647 max 6553 min
+Histogram: 1 1 0 0 0 0 0 0 1 1
+Neighs: 149240 ave 170954 max 129384 min
+Histogram: 1 1 0 0 0 0 0 1 0 1
+FullNghs: 298480 ave 340157 max 260160 min
+Histogram: 1 1 0 0 0 0 0 0 1 1
+
+Total # of neighbors = 1193920
+Ave neighs/atom = 852.8
+Ave special neighs/atom = 0.8
+Neighbor list builds = 0
+Dangerous builds = 0
+
+### Run NVE to equilibrate velocities ###
+
+velocity all create 298.0 4928459 mom yes rot yes dist gaussian
+
+fix 1 all nve
+fix 2 all temp/rescale 10 298.0 298.0 25.0 1.0
+
+run 100
+EwaldDisp initialization ...
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+ G vector = 0.269426
+WARNING: Using a manybody potential with bonds/angles/dihedrals and special_bond exclusions (../pair.cpp:195)
+Memory usage per processor = 10.7173 Mbytes
+Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Lx Ly Lz Xy Xz Yz Volume
+ 3 -60263.869 1242.7057 298 -61506.574 192.23343 0 0 0 5462.762 -20966.52 -46195.05 6988.0868 22.5907 22.359 23.4708 0 0 0 11855.229
+ 50 -58834.736 1260.2404 302.20481 -60094.977 213.89563 0 0 0 6132.6243 -20255.127 -46186.37 21262.808 22.5907 22.359 23.4708 0 0 0 11855.229
+ 100 -58828.252 1242.7057 298 -60070.958 437.82815 0 0 0 6455.2967 -20778.873 -46185.21 20113.98 22.5907 22.359 23.4708 0 0 0 11855.229
+ 103 -58827.642 1235.2387 296.20942 -60062.881 453.5865 0 0 0 6411.1525 -20743.952 -46183.668 18788.656 22.5907 22.359 23.4708 0 0 0 11855.229
+Loop time of 1.67162 on 4 procs for 100 steps with 1400 atoms
+
+Pair time (%) = 1.28323 (76.7654)
+Bond time (%) = 0.00121307 (0.0725687)
+Kspce time (%) = 0.22219 (13.2919)
+Neigh time (%) = 0.0252143 (1.50837)
+Comm time (%) = 0.123892 (7.4115)
+Outpt time (%) = 0.000187218 (0.0111998)
+Other time (%) = 0.0156981 (0.939097)
+
+Nlocal: 350 ave 356 max 341 min
+Histogram: 1 0 0 0 0 0 1 0 1 1
+Nghost: 6638.5 ave 6656 max 6627 min
+Histogram: 2 0 0 0 0 1 0 0 0 1
+Neighs: 148838 ave 151622 max 145706 min
+Histogram: 1 0 0 0 1 0 1 0 0 1
+FullNghs: 297676 ave 302447 max 289666 min
+Histogram: 1 0 0 0 0 0 1 0 1 1
+
+Total # of neighbors = 1190702
+Ave neighs/atom = 850.501
+Ave special neighs/atom = 0.8
+Neighbor list builds = 2
+Dangerous builds = 0
diff --git a/src/ASPHERE/compute_temp_asphere.cpp b/src/ASPHERE/compute_temp_asphere.cpp
index 0bad2d713..4c08097fa 100644
--- a/src/ASPHERE/compute_temp_asphere.cpp
+++ b/src/ASPHERE/compute_temp_asphere.cpp
@@ -1,410 +1,414 @@
/* ----------------------------------------------------------------------
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 author: Mike Brown (SNL)
------------------------------------------------------------------------- */
#include "mpi.h"
#include "string.h"
#include "compute_temp_asphere.h"
#include "math_extra.h"
#include "atom.h"
#include "atom_vec_ellipsoid.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "modify.h"
#include "fix.h"
#include "group.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{ROTATE,ALL};
#define INERTIA 0.2 // moment of inertia prefactor for ellipsoid
/* ---------------------------------------------------------------------- */
ComputeTempAsphere::ComputeTempAsphere(LAMMPS *lmp, int narg, char **arg) :
Compute(lmp, narg, arg)
{
if (narg < 3) error->all(FLERR,"Illegal compute temp/asphere command");
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
tempbias = 0;
id_bias = NULL;
mode = ALL;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"bias") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/asphere command");
tempbias = 1;
int n = strlen(arg[iarg+1]) + 1;
id_bias = new char[n];
strcpy(id_bias,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"dof") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/asphere command");
if (strcmp(arg[iarg+1],"rotate") == 0) mode = ROTATE;
else if (strcmp(arg[iarg+1],"all") == 0) mode = ALL;
else error->all(FLERR,"Illegal compute temp/asphere command");
iarg += 2;
} else error->all(FLERR,"Illegal compute temp/asphere command");
}
vector = new double[6];
}
/* ---------------------------------------------------------------------- */
ComputeTempAsphere::~ComputeTempAsphere()
{
delete [] id_bias;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeTempAsphere::init()
{
// error check
avec = (AtomVecEllipsoid *) atom->style_match("ellipsoid");
if (!avec)
error->all(FLERR,"Compute temp/asphere requires atom style ellipsoid");
// check that all particles are finite-size, no point particles allowed
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (ellipsoid[i] < 0)
error->one(FLERR,"Compute temp/asphere requires extended particles");
if (tempbias) {
int i = modify->find_compute(id_bias);
if (i < 0)
error->all(FLERR,"Could not find compute ID for temperature bias");
tbias = modify->compute[i];
if (tbias->tempflag == 0)
error->all(FLERR,"Bias compute does not calculate temperature");
if (tbias->tempbias == 0)
error->all(FLERR,"Bias compute does not calculate a velocity bias");
if (tbias->igroup != igroup)
error->all(FLERR,"Bias compute group does not match compute group");
tbias->init();
tbias->setup();
if (strcmp(tbias->style,"temp/region") == 0) tempbias = 2;
else tempbias = 1;
}
}
/* ---------------------------------------------------------------------- */
void ComputeTempAsphere::setup()
{
fix_dof = 0;
for (int i = 0; i < modify->nfix; i++)
fix_dof += modify->fix[i]->dof(igroup);
dof_compute();
}
/* ---------------------------------------------------------------------- */
void ComputeTempAsphere::dof_compute()
{
// 6 dof for 3d, 3 dof for 2d
// which dof are included also depends on mode
// assume full rotation of extended particles
// user should correct this via compute_modify if needed
double natoms = group->count(igroup);
int nper;
if (domain->dimension == 3) {
if (mode == ALL) nper = 6;
else nper = 3;
} else {
if (mode == ALL) nper = 3;
else nper = 1;
}
dof = nper*natoms;
// additional adjustments to dof
if (tempbias == 1) {
if (mode == ALL) dof -= tbias->dof_remove(-1) * natoms;
+
} else if (tempbias == 2) {
int *mask = atom->mask;
int nlocal = atom->nlocal;
+
+ tbias->dof_remove_pre();
+
int count = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (tbias->dof_remove(i)) count++;
int count_all;
MPI_Allreduce(&count,&count_all,1,MPI_INT,MPI_SUM,world);
dof -= nper*count_all;
}
dof -= extra_dof + fix_dof;
if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz);
else tfactor = 0.0;
}
/* ---------------------------------------------------------------------- */
double ComputeTempAsphere::compute_scalar()
{
invoked_scalar = update->ntimestep;
if (tempbias) {
if (tbias->invoked_scalar != update->ntimestep) tbias->compute_scalar();
tbias->remove_bias_all();
}
AtomVecEllipsoid::Bonus *bonus = avec->bonus;
double **v = atom->v;
double **angmom = atom->angmom;
double *rmass = atom->rmass;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *shape,*quat;
double wbody[3],inertia[3];
double rot[3][3];
// sum translational and rotational energy for each particle
// no point particles since divide by inertia
double t = 0.0;
if (mode == ALL) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i];
// principal moments of inertia
shape = bonus[ellipsoid[i]].shape;
quat = bonus[ellipsoid[i]].quat;
inertia[0] = INERTIA*rmass[i] * (shape[1]*shape[1]+shape[2]*shape[2]);
inertia[1] = INERTIA*rmass[i] * (shape[0]*shape[0]+shape[2]*shape[2]);
inertia[2] = INERTIA*rmass[i] * (shape[0]*shape[0]+shape[1]*shape[1]);
// wbody = angular velocity in body frame
MathExtra::quat_to_mat(quat,rot);
MathExtra::transpose_matvec(rot,angmom[i],wbody);
wbody[0] /= inertia[0];
wbody[1] /= inertia[1];
wbody[2] /= inertia[2];
t += inertia[0]*wbody[0]*wbody[0] +
inertia[1]*wbody[1]*wbody[1] + inertia[2]*wbody[2]*wbody[2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
// principal moments of inertia
shape = bonus[ellipsoid[i]].shape;
quat = bonus[ellipsoid[i]].quat;
inertia[0] = INERTIA*rmass[i] * (shape[1]*shape[1]+shape[2]*shape[2]);
inertia[1] = INERTIA*rmass[i] * (shape[0]*shape[0]+shape[2]*shape[2]);
inertia[2] = INERTIA*rmass[i] * (shape[0]*shape[0]+shape[1]*shape[1]);
// wbody = angular velocity in body frame
MathExtra::quat_to_mat(quat,rot);
MathExtra::transpose_matvec(rot,angmom[i],wbody);
wbody[0] /= inertia[0];
wbody[1] /= inertia[1];
wbody[2] /= inertia[2];
t += inertia[0]*wbody[0]*wbody[0] +
inertia[1]*wbody[1]*wbody[1] + inertia[2]*wbody[2]*wbody[2];
}
}
if (tempbias) tbias->restore_bias_all();
MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
if (dynamic || tempbias == 2) dof_compute();
scalar *= tfactor;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempAsphere::compute_vector()
{
int i;
invoked_vector = update->ntimestep;
if (tempbias) {
if (tbias->invoked_vector != update->ntimestep) tbias->compute_vector();
tbias->remove_bias_all();
}
AtomVecEllipsoid::Bonus *bonus = avec->bonus;
double **v = atom->v;
double **angmom = atom->angmom;
double *rmass = atom->rmass;
int *ellipsoid = atom->ellipsoid;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *shape,*quat;
double wbody[3],inertia[3],t[6];
double rot[3][3];
double massone;
// sum translational and rotational energy for each particle
// no point particles since divide by inertia
for (i = 0; i < 6; i++) t[i] = 0.0;
if (mode == ALL) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
// principal moments of inertia
shape = bonus[ellipsoid[i]].shape;
quat = bonus[ellipsoid[i]].quat;
inertia[0] = INERTIA*massone * (shape[1]*shape[1]+shape[2]*shape[2]);
inertia[1] = INERTIA*massone * (shape[0]*shape[0]+shape[2]*shape[2]);
inertia[2] = INERTIA*massone * (shape[0]*shape[0]+shape[1]*shape[1]);
// wbody = angular velocity in body frame
MathExtra::quat_to_mat(quat,rot);
MathExtra::transpose_matvec(rot,angmom[i],wbody);
wbody[0] /= inertia[0];
wbody[1] /= inertia[1];
wbody[2] /= inertia[2];
// rotational kinetic energy
t[0] += inertia[0]*wbody[0]*wbody[0];
t[1] += inertia[1]*wbody[1]*wbody[1];
t[2] += inertia[2]*wbody[2]*wbody[2];
t[3] += inertia[0]*wbody[0]*wbody[1];
t[4] += inertia[1]*wbody[0]*wbody[2];
t[5] += inertia[2]*wbody[1]*wbody[2];
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
// principal moments of inertia
shape = bonus[ellipsoid[i]].shape;
quat = bonus[ellipsoid[i]].quat;
massone = rmass[i];
inertia[0] = INERTIA*massone * (shape[1]*shape[1]+shape[2]*shape[2]);
inertia[1] = INERTIA*massone * (shape[0]*shape[0]+shape[2]*shape[2]);
inertia[2] = INERTIA*massone * (shape[0]*shape[0]+shape[1]*shape[1]);
// wbody = angular velocity in body frame
MathExtra::quat_to_mat(quat,rot);
MathExtra::transpose_matvec(rot,angmom[i],wbody);
wbody[0] /= inertia[0];
wbody[1] /= inertia[1];
wbody[2] /= inertia[2];
// rotational kinetic energy
t[0] += inertia[0]*wbody[0]*wbody[0];
t[1] += inertia[1]*wbody[1]*wbody[1];
t[2] += inertia[2]*wbody[2]*wbody[2];
t[3] += inertia[0]*wbody[0]*wbody[1];
t[4] += inertia[1]*wbody[0]*wbody[2];
t[5] += inertia[2]*wbody[1]*wbody[2];
}
}
if (tempbias) tbias->restore_bias_all();
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempAsphere::remove_bias(int i, double *v)
{
if (tbias) tbias->remove_bias(i,v);
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempAsphere::remove_bias_thr(int i, double *v, double *b)
{
if (tbias) tbias->remove_bias_thr(i,v,b);
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempAsphere::restore_bias(int i, double *v)
{
if (tbias) tbias->restore_bias(i,v);
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias_thr()
assume remove_bias_thr() was previously called with the same buffer b
------------------------------------------------------------------------- */
void ComputeTempAsphere::restore_bias_thr(int i, double *v, double *b)
{
if (tbias) tbias->restore_bias_thr(i,v,b);
}
diff --git a/src/CLASS2/dihedral_class2.cpp b/src/CLASS2/dihedral_class2.cpp
index e4f58e056..579e195c2 100644
--- a/src/CLASS2/dihedral_class2.cpp
+++ b/src/CLASS2/dihedral_class2.cpp
@@ -1,959 +1,957 @@
/* ----------------------------------------------------------------------
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 author: Eric Simon (Cray)
------------------------------------------------------------------------- */
#include "math.h"
#include "string.h"
#include "stdlib.h"
#include "dihedral_class2.h"
#include "atom.h"
#include "neighbor.h"
#include "update.h"
#include "domain.h"
#include "comm.h"
#include "force.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define TOLERANCE 0.05
#define SMALL 0.0000001
/* ---------------------------------------------------------------------- */
DihedralClass2::DihedralClass2(LAMMPS *lmp) : Dihedral(lmp)
{
writedata = 1;
}
/* ---------------------------------------------------------------------- */
DihedralClass2::~DihedralClass2()
{
if (allocated) {
memory->destroy(setflag);
memory->destroy(setflag_d);
memory->destroy(setflag_mbt);
memory->destroy(setflag_ebt);
memory->destroy(setflag_at);
memory->destroy(setflag_aat);
memory->destroy(setflag_bb13t);
memory->destroy(k1);
memory->destroy(k2);
memory->destroy(k3);
memory->destroy(phi1);
memory->destroy(phi2);
memory->destroy(phi3);
memory->destroy(mbt_f1);
memory->destroy(mbt_f2);
memory->destroy(mbt_f3);
memory->destroy(mbt_r0);
memory->destroy(ebt_f1_1);
memory->destroy(ebt_f2_1);
memory->destroy(ebt_f3_1);
memory->destroy(ebt_r0_1);
memory->destroy(ebt_f1_2);
memory->destroy(ebt_f2_2);
memory->destroy(ebt_f3_2);
memory->destroy(ebt_r0_2);
memory->destroy(at_f1_1);
memory->destroy(at_f2_1);
memory->destroy(at_f3_1);
memory->destroy(at_theta0_1);
memory->destroy(at_f1_2);
memory->destroy(at_f2_2);
memory->destroy(at_f3_2);
memory->destroy(at_theta0_2);
memory->destroy(aat_k);
memory->destroy(aat_theta0_1);
memory->destroy(aat_theta0_2);
memory->destroy(bb13t_k);
memory->destroy(bb13t_r10);
memory->destroy(bb13t_r30);
}
}
/* ---------------------------------------------------------------------- */
void DihedralClass2::compute(int eflag, int vflag)
{
int i1,i2,i3,i4,i,j,k,n,type;
double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,vb2xm,vb2ym,vb2zm;
double edihedral;
double r1mag2,r1,r2mag2,r2,r3mag2,r3;
double sb1,rb1,sb2,rb2,sb3,rb3,c0,r12c1;
double r12c2,costh12,costh13,costh23,sc1,sc2,s1,s2,c;
double cosphi,phi,sinphi,a11,a22,a33,a12,a13,a23,sx1,sx2;
double sx12,sy1,sy2,sy12,sz1,sz2,sz12,dphi1,dphi2,dphi3;
double de_dihedral,t1,t2,t3,t4,cos2phi,cos3phi,bt1,bt2;
double bt3,sumbte,db,sumbtf,at1,at2,at3,da,da1,da2,r1_0;
double r3_0,dr1,dr2,tk1,tk2,s12,sin2;
double dcosphidr[4][3],dphidr[4][3],dbonddr[3][4][3],dthetadr[2][4][3];
double fabcd[4][3];
edihedral = 0.0;
if (eflag || vflag) ev_setup(eflag,vflag);
else evflag = 0;
double **x = atom->x;
double **f = atom->f;
int **dihedrallist = neighbor->dihedrallist;
int ndihedrallist = neighbor->ndihedrallist;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
for (n = 0; n < ndihedrallist; n++) {
i1 = dihedrallist[n][0];
i2 = dihedrallist[n][1];
i3 = dihedrallist[n][2];
i4 = dihedrallist[n][3];
type = dihedrallist[n][4];
// 1st bond
vb1x = x[i1][0] - x[i2][0];
vb1y = x[i1][1] - x[i2][1];
vb1z = x[i1][2] - x[i2][2];
// 2nd bond
vb2x = x[i3][0] - x[i2][0];
vb2y = x[i3][1] - x[i2][1];
vb2z = x[i3][2] - x[i2][2];
vb2xm = -vb2x;
vb2ym = -vb2y;
vb2zm = -vb2z;
// 3rd bond
vb3x = x[i4][0] - x[i3][0];
vb3y = x[i4][1] - x[i3][1];
vb3z = x[i4][2] - x[i3][2];
// distances
r1mag2 = vb1x*vb1x + vb1y*vb1y + vb1z*vb1z;
r1 = sqrt(r1mag2);
r2mag2 = vb2x*vb2x + vb2y*vb2y + vb2z*vb2z;
r2 = sqrt(r2mag2);
r3mag2 = vb3x*vb3x + vb3y*vb3y + vb3z*vb3z;
r3 = sqrt(r3mag2);
sb1 = 1.0/r1mag2;
rb1 = 1.0/r1;
sb2 = 1.0/r2mag2;
rb2 = 1.0/r2;
sb3 = 1.0/r3mag2;
rb3 = 1.0/r3;
c0 = (vb1x*vb3x + vb1y*vb3y + vb1z*vb3z) * rb1*rb3;
// angles
r12c1 = rb1*rb2;
r12c2 = rb2*rb3;
costh12 = (vb1x*vb2x + vb1y*vb2y + vb1z*vb2z) * r12c1;
costh13 = c0;
costh23 = (vb2xm*vb3x + vb2ym*vb3y + vb2zm*vb3z) * r12c2;
// cos and sin of 2 angles and final c
sin2 = MAX(1.0 - costh12*costh12,0.0);
sc1 = sqrt(sin2);
if (sc1 < SMALL) sc1 = SMALL;
sc1 = 1.0/sc1;
sin2 = MAX(1.0 - costh23*costh23,0.0);
sc2 = sqrt(sin2);
if (sc2 < SMALL) sc2 = SMALL;
sc2 = 1.0/sc2;
s1 = sc1 * sc1;
s2 = sc2 * sc2;
s12 = sc1 * sc2;
c = (c0 + costh12*costh23) * s12;
// error check
if (c > 1.0 + TOLERANCE || c < (-1.0 - TOLERANCE)) {
int me;
MPI_Comm_rank(world,&me);
if (screen) {
char str[128];
sprintf(str,"Dihedral problem: %d " BIGINT_FORMAT " "
TAGINT_FORMAT " " TAGINT_FORMAT " "
TAGINT_FORMAT " " TAGINT_FORMAT,
me,update->ntimestep,
atom->tag[i1],atom->tag[i2],atom->tag[i3],atom->tag[i4]);
error->warning(FLERR,str,0);
fprintf(screen," 1st atom: %d %g %g %g\n",
me,x[i1][0],x[i1][1],x[i1][2]);
fprintf(screen," 2nd atom: %d %g %g %g\n",
me,x[i2][0],x[i2][1],x[i2][2]);
fprintf(screen," 3rd atom: %d %g %g %g\n",
me,x[i3][0],x[i3][1],x[i3][2]);
fprintf(screen," 4th atom: %d %g %g %g\n",
me,x[i4][0],x[i4][1],x[i4][2]);
}
}
if (c > 1.0) c = 1.0;
if (c < -1.0) c = -1.0;
cosphi = c;
phi = acos(c);
sinphi = sqrt(1.0 - c*c);
sinphi = MAX(sinphi,SMALL);
- // addition by Andrew Jewett, Jan 2013
- // adjust the sign of phi if necessary for negative input angles
- // n123 = vb2 x vb1
+ // n123 = vb1 x vb2
double n123x = vb1y*vb2z - vb1z*vb2y;
double n123y = vb1z*vb2x - vb1x*vb2z;
double n123z = vb1x*vb2y - vb1y*vb2x;
double n123_dot_vb3 = n123x*vb3x + n123y*vb3y + n123z*vb3z;
if (n123_dot_vb3 > 0.0) {
phi = -phi;
sinphi = -sinphi;
}
a11 = -c*sb1*s1;
a22 = sb2 * (2.0*costh13*s12 - c*(s1+s2));
a33 = -c*sb3*s2;
a12 = r12c1 * (costh12*c*s1 + costh23*s12);
a13 = rb1*rb3*s12;
a23 = r12c2 * (-costh23*c*s2 - costh12*s12);
sx1 = a11*vb1x + a12*vb2x + a13*vb3x;
sx2 = a12*vb1x + a22*vb2x + a23*vb3x;
sx12 = a13*vb1x + a23*vb2x + a33*vb3x;
sy1 = a11*vb1y + a12*vb2y + a13*vb3y;
sy2 = a12*vb1y + a22*vb2y + a23*vb3y;
sy12 = a13*vb1y + a23*vb2y + a33*vb3y;
sz1 = a11*vb1z + a12*vb2z + a13*vb3z;
sz2 = a12*vb1z + a22*vb2z + a23*vb3z;
sz12 = a13*vb1z + a23*vb2z + a33*vb3z;
// set up d(cos(phi))/d(r) and dphi/dr arrays
dcosphidr[0][0] = -sx1;
dcosphidr[0][1] = -sy1;
dcosphidr[0][2] = -sz1;
dcosphidr[1][0] = sx2 + sx1;
dcosphidr[1][1] = sy2 + sy1;
dcosphidr[1][2] = sz2 + sz1;
dcosphidr[2][0] = sx12 - sx2;
dcosphidr[2][1] = sy12 - sy2;
dcosphidr[2][2] = sz12 - sz2;
dcosphidr[3][0] = -sx12;
dcosphidr[3][1] = -sy12;
dcosphidr[3][2] = -sz12;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
dphidr[i][j] = -dcosphidr[i][j] / sinphi;
// energy
dphi1 = phi - phi1[type];
dphi2 = 2.0*phi - phi2[type];
dphi3 = 3.0*phi - phi3[type];
if (eflag) edihedral = k1[type]*(1.0 - cos(dphi1)) +
k2[type]*(1.0 - cos(dphi2)) +
k3[type]*(1.0 - cos(dphi3));
de_dihedral = k1[type]*sin(dphi1) + 2.0*k2[type]*sin(dphi2) +
3.0*k3[type]*sin(dphi3);
// torsion forces on all 4 atoms
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] = de_dihedral*dphidr[i][j];
// set up d(bond)/d(r) array
// dbonddr(i,j,k) = bond i, atom j, coordinate k
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
for (k = 0; k < 3; k++)
dbonddr[i][j][k] = 0.0;
// bond1
dbonddr[0][0][0] = vb1x / r1;
dbonddr[0][0][1] = vb1y / r1;
dbonddr[0][0][2] = vb1z / r1;
dbonddr[0][1][0] = -vb1x / r1;
dbonddr[0][1][1] = -vb1y / r1;
dbonddr[0][1][2] = -vb1z / r1;
// bond2
dbonddr[1][1][0] = vb2x / r2;
dbonddr[1][1][1] = vb2y / r2;
dbonddr[1][1][2] = vb2z / r2;
dbonddr[1][2][0] = -vb2x / r2;
dbonddr[1][2][1] = -vb2y / r2;
dbonddr[1][2][2] = -vb2z / r2;
// bond3
dbonddr[2][2][0] = vb3x / r3;
dbonddr[2][2][1] = vb3y / r3;
dbonddr[2][2][2] = vb3z / r3;
dbonddr[2][3][0] = -vb3x / r3;
dbonddr[2][3][1] = -vb3y / r3;
dbonddr[2][3][2] = -vb3z / r3;
// set up d(theta)/d(r) array
// dthetadr(i,j,k) = angle i, atom j, coordinate k
for (i = 0; i < 2; i++)
for (j = 0; j < 4; j++)
for (k = 0; k < 3; k++)
dthetadr[i][j][k] = 0.0;
t1 = costh12 / r1mag2;
t2 = costh23 / r2mag2;
t3 = costh12 / r2mag2;
t4 = costh23 / r3mag2;
// angle12
dthetadr[0][0][0] = sc1 * ((t1 * vb1x) - (vb2x * r12c1));
dthetadr[0][0][1] = sc1 * ((t1 * vb1y) - (vb2y * r12c1));
dthetadr[0][0][2] = sc1 * ((t1 * vb1z) - (vb2z * r12c1));
dthetadr[0][1][0] = sc1 * ((-t1 * vb1x) + (vb2x * r12c1) +
(-t3 * vb2x) + (vb1x * r12c1));
dthetadr[0][1][1] = sc1 * ((-t1 * vb1y) + (vb2y * r12c1) +
(-t3 * vb2y) + (vb1y * r12c1));
dthetadr[0][1][2] = sc1 * ((-t1 * vb1z) + (vb2z * r12c1) +
(-t3 * vb2z) + (vb1z * r12c1));
dthetadr[0][2][0] = sc1 * ((t3 * vb2x) - (vb1x * r12c1));
dthetadr[0][2][1] = sc1 * ((t3 * vb2y) - (vb1y * r12c1));
dthetadr[0][2][2] = sc1 * ((t3 * vb2z) - (vb1z * r12c1));
// angle23
dthetadr[1][1][0] = sc2 * ((t2 * vb2x) + (vb3x * r12c2));
dthetadr[1][1][1] = sc2 * ((t2 * vb2y) + (vb3y * r12c2));
dthetadr[1][1][2] = sc2 * ((t2 * vb2z) + (vb3z * r12c2));
dthetadr[1][2][0] = sc2 * ((-t2 * vb2x) - (vb3x * r12c2) +
(t4 * vb3x) + (vb2x * r12c2));
dthetadr[1][2][1] = sc2 * ((-t2 * vb2y) - (vb3y * r12c2) +
(t4 * vb3y) + (vb2y * r12c2));
dthetadr[1][2][2] = sc2 * ((-t2 * vb2z) - (vb3z * r12c2) +
(t4 * vb3z) + (vb2z * r12c2));
dthetadr[1][3][0] = -sc2 * ((t4 * vb3x) + (vb2x * r12c2));
dthetadr[1][3][1] = -sc2 * ((t4 * vb3y) + (vb2y * r12c2));
dthetadr[1][3][2] = -sc2 * ((t4 * vb3z) + (vb2z * r12c2));
// mid-bond/torsion coupling
// energy on bond2 (middle bond)
cos2phi = cos(2.0*phi);
cos3phi = cos(3.0*phi);
bt1 = mbt_f1[type] * cosphi;
bt2 = mbt_f2[type] * cos2phi;
bt3 = mbt_f3[type] * cos3phi;
sumbte = bt1 + bt2 + bt3;
db = r2 - mbt_r0[type];
if (eflag) edihedral += db * sumbte;
// force on bond2
bt1 = -mbt_f1[type] * sinphi;
bt2 = -2.0 * mbt_f2[type] * sin(2.0*phi);
bt3 = -3.0 * mbt_f3[type] * sin(3.0*phi);
sumbtf = bt1 + bt2 + bt3;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] += db*sumbtf*dphidr[i][j] + sumbte*dbonddr[1][i][j];
// end-bond/torsion coupling
// energy on bond1 (first bond)
bt1 = ebt_f1_1[type] * cosphi;
bt2 = ebt_f2_1[type] * cos2phi;
bt3 = ebt_f3_1[type] * cos3phi;
sumbte = bt1 + bt2 + bt3;
db = r1 - ebt_r0_1[type];
if (eflag) edihedral += db * (bt1+bt2+bt3);
// force on bond1
bt1 = ebt_f1_1[type] * sinphi;
bt2 = 2.0 * ebt_f2_1[type] * sin(2.0*phi);
bt3 = 3.0 * ebt_f3_1[type] * sin(3.0*phi);
sumbtf = bt1 + bt2 + bt3;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] -= db*sumbtf*dphidr[i][j] + sumbte*dbonddr[0][i][j];
// end-bond/torsion coupling
// energy on bond3 (last bond)
bt1 = ebt_f1_2[type] * cosphi;
bt2 = ebt_f2_2[type] * cos2phi;
bt3 = ebt_f3_2[type] * cos3phi;
sumbte = bt1 + bt2 + bt3;
db = r3 - ebt_r0_2[type];
if (eflag) edihedral += db * (bt1+bt2+bt3);
// force on bond3
bt1 = -ebt_f1_2[type] * sinphi;
bt2 = -2.0 * ebt_f2_2[type] * sin(2.0*phi);
bt3 = -3.0 * ebt_f3_2[type] * sin(3.0*phi);
sumbtf = bt1 + bt2 + bt3;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] += db*sumbtf*dphidr[i][j] + sumbte*dbonddr[2][i][j];
// angle/torsion coupling
// energy on angle1
at1 = at_f1_1[type] * cosphi;
at2 = at_f2_1[type] * cos2phi;
at3 = at_f3_1[type] * cos3phi;
sumbte = at1 + at2 + at3;
da = acos(costh12) - at_theta0_1[type];
if (eflag) edihedral += da * (at1+at2+at3);
// force on angle1
bt1 = at_f1_1[type] * sinphi;
bt2 = 2.0 * at_f2_1[type] * sin(2.0*phi);
bt3 = 3.0 * at_f3_1[type] * sin(3.0*phi);
sumbtf = bt1 + bt2 + bt3;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] -= da*sumbtf*dphidr[i][j] + sumbte*dthetadr[0][i][j];
// energy on angle2
at1 = at_f1_2[type] * cosphi;
at2 = at_f2_2[type] * cos2phi;
at3 = at_f3_2[type] * cos3phi;
sumbte = at1 + at2 + at3;
da = acos(costh23) - at_theta0_2[type];
if (eflag) edihedral += da * (at1+at2+at3);
// force on angle2
bt1 = -at_f1_2[type] * sinphi;
bt2 = -2.0 * at_f2_2[type] * sin(2.0*phi);
bt3 = -3.0 * at_f3_2[type] * sin(3.0*phi);
sumbtf = bt1 + bt2 + bt3;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] += da*sumbtf*dphidr[i][j] + sumbte*dthetadr[1][i][j];
// angle/angle/torsion coupling
da1 = acos(costh12) - aat_theta0_1[type];
da2 = acos(costh23) - aat_theta0_2[type];
if (eflag) edihedral += aat_k[type]*da1*da2*cosphi;
for (i = 0; i < 4; i++)
for (j = 0; j < 3; j++)
fabcd[i][j] -= aat_k[type] *
(cosphi * (da2*dthetadr[0][i][j] - da1*dthetadr[1][i][j]) +
sinphi * da1*da2*dphidr[i][j]);
// bond1/bond3 coupling
if (fabs(bb13t_k[type]) > SMALL) {
r1_0 = bb13t_r10[type];
r3_0 = bb13t_r30[type];
dr1 = r1 - r1_0;
dr2 = r3 - r3_0;
tk1 = -bb13t_k[type] * dr1 / r3;
tk2 = -bb13t_k[type] * dr2 / r1;
if (eflag) edihedral += bb13t_k[type]*dr1*dr2;
fabcd[0][0] += tk2 * vb1x;
fabcd[0][1] += tk2 * vb1y;
fabcd[0][2] += tk2 * vb1z;
fabcd[1][0] -= tk2 * vb1x;
fabcd[1][1] -= tk2 * vb1y;
fabcd[1][2] -= tk2 * vb1z;
fabcd[2][0] -= tk1 * vb3x;
fabcd[2][1] -= tk1 * vb3y;
fabcd[2][2] -= tk1 * vb3z;
fabcd[3][0] += tk1 * vb3x;
fabcd[3][1] += tk1 * vb3y;
fabcd[3][2] += tk1 * vb3z;
}
// apply force to each of 4 atoms
if (newton_bond || i1 < nlocal) {
f[i1][0] += fabcd[0][0];
f[i1][1] += fabcd[0][1];
f[i1][2] += fabcd[0][2];
}
if (newton_bond || i2 < nlocal) {
f[i2][0] += fabcd[1][0];
f[i2][1] += fabcd[1][1];
f[i2][2] += fabcd[1][2];
}
if (newton_bond || i3 < nlocal) {
f[i3][0] += fabcd[2][0];
f[i3][1] += fabcd[2][1];
f[i3][2] += fabcd[2][2];
}
if (newton_bond || i4 < nlocal) {
f[i4][0] += fabcd[3][0];
f[i4][1] += fabcd[3][1];
f[i4][2] += fabcd[3][2];
}
if (evflag)
ev_tally(i1,i2,i3,i4,nlocal,newton_bond,edihedral,
fabcd[0],fabcd[2],fabcd[3],
vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z);
}
}
/* ---------------------------------------------------------------------- */
void DihedralClass2::allocate()
{
allocated = 1;
int n = atom->ndihedraltypes;
memory->create(k1,n+1,"dihedral:k1");
memory->create(k2,n+1,"dihedral:k2");
memory->create(k3,n+1,"dihedral:k3");
memory->create(phi1,n+1,"dihedral:phi1");
memory->create(phi2,n+1,"dihedral:phi2");
memory->create(phi3,n+1,"dihedral:phi3");
memory->create(mbt_f1,n+1,"dihedral:mbt_f1");
memory->create(mbt_f2,n+1,"dihedral:mbt_f2");
memory->create(mbt_f3,n+1,"dihedral:mbt_f3");
memory->create(mbt_r0,n+1,"dihedral:mbt_r0");
memory->create(ebt_f1_1,n+1,"dihedral:ebt_f1_1");
memory->create(ebt_f2_1,n+1,"dihedral:ebt_f2_1");
memory->create(ebt_f3_1,n+1,"dihedral:ebt_f3_1");
memory->create(ebt_r0_1,n+1,"dihedral:ebt_r0_1");
memory->create(ebt_f1_2,n+1,"dihedral:ebt_f1_2");
memory->create(ebt_f2_2,n+1,"dihedral:ebt_f2_2");
memory->create(ebt_f3_2,n+1,"dihedral:ebt_f3_2");
memory->create(ebt_r0_2,n+1,"dihedral:ebt_r0_2");
memory->create(at_f1_1,n+1,"dihedral:at_f1_1");
memory->create(at_f2_1,n+1,"dihedral:at_f2_1");
memory->create(at_f3_1,n+1,"dihedral:at_f3_1");
memory->create(at_theta0_1,n+1,"dihedral:at_theta0_1");
memory->create(at_f1_2,n+1,"dihedral:at_f1_2");
memory->create(at_f2_2,n+1,"dihedral:at_f2_2");
memory->create(at_f3_2,n+1,"dihedral:at_f3_2");
memory->create(at_theta0_2,n+1,"dihedral:at_theta0_2");
memory->create(aat_k,n+1,"dihedral:aat_k");
memory->create(aat_theta0_1,n+1,"dihedral:aat_theta0_1");
memory->create(aat_theta0_2,n+1,"dihedral:aat_theta0_2");
memory->create(bb13t_k,n+1,"dihedral:bb13t_k");
memory->create(bb13t_r10,n+1,"dihedral:bb13t_r10");
memory->create(bb13t_r30,n+1,"dihedral:bb13t_r30");
memory->create(setflag,n+1,"dihedral:setflag");
memory->create(setflag_d,n+1,"dihedral:setflag_d");
memory->create(setflag_mbt,n+1,"dihedral:setflag_mbt");
memory->create(setflag_ebt,n+1,"dihedral:setflag_ebt");
memory->create(setflag_at,n+1,"dihedral:setflag_at");
memory->create(setflag_aat,n+1,"dihedral:setflag_aat");
memory->create(setflag_bb13t,n+1,"dihedral:setflag_bb13t");
for (int i = 1; i <= n; i++)
setflag[i] = setflag_d[i] = setflag_mbt[i] = setflag_ebt[i] =
setflag_at[i] = setflag_aat[i] = setflag_bb13t[i] = 0;
}
/* ----------------------------------------------------------------------
set coeffs for one or more types
arg1 = "mbt" -> MiddleBondTorsion coeffs
arg1 = "ebt" -> EndBondTorsion coeffs
arg1 = "at" -> AngleTorsion coeffs
arg1 = "aat" -> AngleAngleTorsion coeffs
arg1 = "bb13" -> BondBond13Torsion coeffs
arg1 -> Dihedral coeffs
------------------------------------------------------------------------- */
void DihedralClass2::coeff(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Invalid coeffs for this dihedral style");
if (!allocated) allocate();
int ilo,ihi;
force->bounds(arg[0],atom->ndihedraltypes,ilo,ihi);
int count = 0;
if (strcmp(arg[1],"mbt") == 0) {
if (narg != 6) error->all(FLERR,"Incorrect args for dihedral coefficients");
double f1_one = force->numeric(FLERR,arg[2]);
double f2_one = force->numeric(FLERR,arg[3]);
double f3_one = force->numeric(FLERR,arg[4]);
double r0_one = force->numeric(FLERR,arg[5]);
for (int i = ilo; i <= ihi; i++) {
mbt_f1[i] = f1_one;
mbt_f2[i] = f2_one;
mbt_f3[i] = f3_one;
mbt_r0[i] = r0_one;
setflag_mbt[i] = 1;
count++;
}
} else if (strcmp(arg[1],"ebt") == 0) {
if (narg != 10) error->all(FLERR,"Incorrect args for dihedral coefficients");
double f1_1_one = force->numeric(FLERR,arg[2]);
double f2_1_one = force->numeric(FLERR,arg[3]);
double f3_1_one = force->numeric(FLERR,arg[4]);
double f1_2_one = force->numeric(FLERR,arg[5]);
double f2_2_one = force->numeric(FLERR,arg[6]);
double f3_2_one = force->numeric(FLERR,arg[7]);
double r0_1_one = force->numeric(FLERR,arg[8]);
double r0_2_one = force->numeric(FLERR,arg[9]);
for (int i = ilo; i <= ihi; i++) {
ebt_f1_1[i] = f1_1_one;
ebt_f2_1[i] = f2_1_one;
ebt_f3_1[i] = f3_1_one;
ebt_f1_2[i] = f1_2_one;
ebt_f2_2[i] = f2_2_one;
ebt_f3_2[i] = f3_2_one;
ebt_r0_1[i] = r0_1_one;
ebt_r0_2[i] = r0_2_one;
setflag_ebt[i] = 1;
count++;
}
} else if (strcmp(arg[1],"at") == 0) {
if (narg != 10) error->all(FLERR,"Incorrect args for dihedral coefficients");
double f1_1_one = force->numeric(FLERR,arg[2]);
double f2_1_one = force->numeric(FLERR,arg[3]);
double f3_1_one = force->numeric(FLERR,arg[4]);
double f1_2_one = force->numeric(FLERR,arg[5]);
double f2_2_one = force->numeric(FLERR,arg[6]);
double f3_2_one = force->numeric(FLERR,arg[7]);
double theta0_1_one = force->numeric(FLERR,arg[8]);
double theta0_2_one = force->numeric(FLERR,arg[9]);
// convert theta0's from degrees to radians
for (int i = ilo; i <= ihi; i++) {
at_f1_1[i] = f1_1_one;
at_f2_1[i] = f2_1_one;
at_f3_1[i] = f3_1_one;
at_f1_2[i] = f1_2_one;
at_f2_2[i] = f2_2_one;
at_f3_2[i] = f3_2_one;
at_theta0_1[i] = theta0_1_one/180.0 * MY_PI;
at_theta0_2[i] = theta0_2_one/180.0 * MY_PI;
setflag_at[i] = 1;
count++;
}
} else if (strcmp(arg[1],"aat") == 0) {
if (narg != 5) error->all(FLERR,"Incorrect args for dihedral coefficients");
double k_one = force->numeric(FLERR,arg[2]);
double theta0_1_one = force->numeric(FLERR,arg[3]);
double theta0_2_one = force->numeric(FLERR,arg[4]);
// convert theta0's from degrees to radians
for (int i = ilo; i <= ihi; i++) {
aat_k[i] = k_one;
aat_theta0_1[i] = theta0_1_one/180.0 * MY_PI;
aat_theta0_2[i] = theta0_2_one/180.0 * MY_PI;
setflag_aat[i] = 1;
count++;
}
} else if (strcmp(arg[1],"bb13") == 0) {
if (narg != 5) error->all(FLERR,"Incorrect args for dihedral coefficients");
double k_one = force->numeric(FLERR,arg[2]);
double r10_one = force->numeric(FLERR,arg[3]);
double r30_one = force->numeric(FLERR,arg[4]);
for (int i = ilo; i <= ihi; i++) {
bb13t_k[i] = k_one;
bb13t_r10[i] = r10_one;
bb13t_r30[i] = r30_one;
setflag_bb13t[i] = 1;
count++;
}
} else {
if (narg != 7) error->all(FLERR,"Incorrect args for dihedral coefficients");
double k1_one = force->numeric(FLERR,arg[1]);
double phi1_one = force->numeric(FLERR,arg[2]);
double k2_one = force->numeric(FLERR,arg[3]);
double phi2_one = force->numeric(FLERR,arg[4]);
double k3_one = force->numeric(FLERR,arg[5]);
double phi3_one = force->numeric(FLERR,arg[6]);
// convert phi's from degrees to radians
for (int i = ilo; i <= ihi; i++) {
k1[i] = k1_one;
phi1[i] = phi1_one/180.0 * MY_PI;
k2[i] = k2_one;
phi2[i] = phi2_one/180.0 * MY_PI;
k3[i] = k3_one;
phi3[i] = phi3_one/180.0 * MY_PI;
setflag_d[i] = 1;
count++;
}
}
if (count == 0) error->all(FLERR,"Incorrect args for dihedral coefficients");
for (int i = ilo; i <= ihi; i++)
if (setflag_d[i] == 1 && setflag_mbt[i] == 1 && setflag_ebt[i] == 1 &&
setflag_at[i] == 1 && setflag_aat[i] == 1 && setflag_bb13t[i] == 1)
setflag[i] = 1;
}
/* ----------------------------------------------------------------------
proc 0 writes out coeffs to restart file
------------------------------------------------------------------------- */
void DihedralClass2::write_restart(FILE *fp)
{
fwrite(&k1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&k2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&k3[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&phi1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&phi2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&phi3[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&mbt_f1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&mbt_f2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&mbt_f3[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&mbt_r0[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_f1_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_f2_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_f3_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_r0_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_f1_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_f2_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_f3_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&ebt_r0_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_f1_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_f2_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_f3_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_theta0_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_f1_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_f2_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_f3_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&at_theta0_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&aat_k[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&aat_theta0_1[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&aat_theta0_2[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&bb13t_k[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&bb13t_r10[1],sizeof(double),atom->ndihedraltypes,fp);
fwrite(&bb13t_r30[1],sizeof(double),atom->ndihedraltypes,fp);
}
/* ----------------------------------------------------------------------
proc 0 reads coeffs from restart file, bcasts them
------------------------------------------------------------------------- */
void DihedralClass2::read_restart(FILE *fp)
{
allocate();
if (comm->me == 0) {
fread(&k1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&k2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&k3[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&phi1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&phi2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&phi3[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&mbt_f1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&mbt_f2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&mbt_f3[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&mbt_r0[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_f1_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_f2_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_f3_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_r0_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_f1_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_f2_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_f3_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&ebt_r0_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_f1_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_f2_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_f3_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_theta0_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_f1_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_f2_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_f3_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&at_theta0_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&aat_k[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&aat_theta0_1[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&aat_theta0_2[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&bb13t_k[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&bb13t_r10[1],sizeof(double),atom->ndihedraltypes,fp);
fread(&bb13t_r30[1],sizeof(double),atom->ndihedraltypes,fp);
}
MPI_Bcast(&k1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&k2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&k3[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&phi1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&phi2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&phi3[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&mbt_f1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&mbt_f2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&mbt_f3[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&mbt_r0[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_f1_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_f2_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_f3_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_r0_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_f1_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_f2_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_f3_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&ebt_r0_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_f1_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_f2_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_f3_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_theta0_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_f1_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_f2_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_f3_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&at_theta0_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&aat_k[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&aat_theta0_1[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&aat_theta0_2[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&bb13t_k[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&bb13t_r10[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
MPI_Bcast(&bb13t_r30[1],atom->ndihedraltypes,MPI_DOUBLE,0,world);
for (int i = 1; i <= atom->ndihedraltypes; i++) setflag[i] = 1;
}
/* ----------------------------------------------------------------------
proc 0 writes to data file
------------------------------------------------------------------------- */
void DihedralClass2::write_data(FILE *fp)
{
for (int i = 1; i <= atom->ndihedraltypes; i++)
fprintf(fp,"%d %g %g %g %g %g %g\n",
i,k1[i],phi1[i],k2[i],phi2[i],k3[i],phi3[i]);
fprintf(fp,"\nAngleAngleTorsion Coeffs\n\n");
for (int i = 1; i <= atom->ndihedraltypes; i++)
fprintf(fp,"%d %g %g %g\n",i,aat_k[i],
aat_theta0_1[i]*180.0/MY_PI,aat_theta0_2[i]*180.0/MY_PI);
fprintf(fp,"\nEndBondTorsion Coeffs\n\n");
for (int i = 1; i <= atom->ndihedraltypes; i++)
fprintf(fp,"%d %g %g %g %g %g %g %g %g\n",i,
ebt_f1_1[i],ebt_f2_1[i],ebt_f3_1[i],
ebt_f1_2[i],ebt_f2_2[i],ebt_f3_2[i],
ebt_r0_1[i],ebt_r0_2[i]);
fprintf(fp,"\nMiddleBondTorsion Coeffs\n\n");
for (int i = 1; i <= atom->ndihedraltypes; i++)
fprintf(fp,"%d %g %g %g %g\n",i,mbt_f1[i],mbt_f2[i],mbt_f3[i],mbt_r0[i]);
fprintf(fp,"\nBondBond13 Coeffs\n\n");
for (int i = 1; i <= atom->ndihedraltypes; i++)
fprintf(fp,"%d %g %g %g\n",i,bb13t_k[i],bb13t_r10[i],bb13t_r30[i]);
fprintf(fp,"\nAngleTorsion Coeffs\n\n");
for (int i = 1; i <= atom->ndihedraltypes; i++)
fprintf(fp,"%d %g %g %g %g %g %g %g %g\n",i,
at_f1_1[i],at_f2_1[i],at_f3_1[i],
at_f1_2[i],at_f2_2[i],at_f3_2[i],
at_theta0_1[i]*180.0/MY_PI,at_theta0_2[i]*180.0/MY_PI);
}
diff --git a/src/MAKE/Makefile.ubuntu b/src/MAKE/Makefile.ubuntu
index 0cd049f9c..3d2bf0703 100644
--- a/src/MAKE/Makefile.ubuntu
+++ b/src/MAKE/Makefile.ubuntu
@@ -1,112 +1,112 @@
# ubuntu = Ubuntu Linux box, g++, openmpi, FFTW3
-#
+
# you have to install the packages g++, mpi-default-bin, mpi-default-dev,
# libfftw3-dev, libjpeg-dev and libpng12-dev to compile LAMMPS with this
# makefile
SHELL = /bin/sh
# ---------------------------------------------------------------------
# compiler/linker settings
# specify flags and libraries needed for your compiler
CC = mpic++
CCFLAGS = -g -O3 # -Wunused
SHFLAGS = -fPIC
DEPFLAGS = -M
LINK = mpic++
LINKFLAGS = -g -O3
LIB =
SIZE = size
ARCHIVE = ar
ARFLAGS = -rc
SHLIBFLAGS = -shared
# ---------------------------------------------------------------------
# LAMMPS-specific settings
# specify settings for LAMMPS features you will use
# if you change any -D setting, do full re-compile after "make clean"
# LAMMPS ifdef settings, OPTIONAL
# see possible settings in doc/Section_start.html#2_2 (step 4)
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_FFMPEG
# MPI library, REQUIRED
# see discussion in doc/Section_start.html#2_2 (step 5)
# can point to dummy MPI library in src/STUBS as in Makefile.serial
# INC = path for mpi.h, MPI compiler settings
# PATH = path for MPI library
# LIB = name of MPI library
MPI_INC =
MPI_PATH =
MPI_LIB =
# FFT library, OPTIONAL
# see discussion in doc/Section_start.html#2_2 (step 6)
# can be left blank to use provided KISS FFT library
# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings
# PATH = path for FFT library
# LIB = name of FFT library
FFT_INC = -DFFT_FFTW3
FFT_PATH =
FFT_LIB = -lfftw3
# JPEG and/or PNG library, OPTIONAL
# see discussion in doc/Section_start.html#2_2 (step 7)
# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC
# INC = path(s) for jpeglib.h and/or png.h
# PATH = path(s) for JPEG library and/or PNG library
# LIB = name(s) of JPEG library and/or PNG library
JPG_INC =
JPG_PATH =
JPG_LIB = -ljpeg -lpng
# ---------------------------------------------------------------------
# build rules and dependencies
# no need to edit this section
include Makefile.package.settings
include Makefile.package
EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC)
EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH)
EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB)
# Path to src files
vpath %.cpp ..
vpath %.h ..
# Link target
$(EXE): $(OBJ)
$(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE)
$(SIZE) $(EXE)
# Library targets
lib: $(OBJ)
$(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
shlib: $(OBJ)
$(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \
$(OBJ) $(EXTRA_LIB) $(LIB)
# Compilation rules
%.o:%.cpp
$(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $<
%.d:%.cpp
$(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@
# Individual dependencies
DEPENDS = $(OBJ:.o=.d)
sinclude $(DEPENDS)
diff --git a/src/MISC/fix_efield.cpp b/src/MISC/fix_efield.cpp
index 9868189ff..bb1aa73ab 100644
--- a/src/MISC/fix_efield.cpp
+++ b/src/MISC/fix_efield.cpp
@@ -1,448 +1,449 @@
/* ----------------------------------------------------------------------
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 author: Christina Payne (Vanderbilt U)
Stan Moore (Sandia) for dipole terms
------------------------------------------------------------------------- */
#include "math.h"
#include "string.h"
#include "stdlib.h"
#include "fix_efield.h"
#include "atom.h"
#include "update.h"
#include "domain.h"
#include "comm.h"
#include "modify.h"
#include "force.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "region.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
FixEfield::FixEfield(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR,"Illegal fix efield command");
+ dynamic_group_allow = 1;
vector_flag = 1;
scalar_flag = 1;
size_vector = 3;
global_freq = 1;
extvector = 1;
extscalar = 1;
qe2f = force->qe2f;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else {
ex = qe2f * force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else {
ey = qe2f * force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else {
ez = qe2f * force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
estr = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix efield command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix efield does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"energy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix efield command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
int n = strlen(&arg[iarg+1][2]) + 1;
estr = new char[n];
strcpy(estr,&arg[iarg+1][2]);
} else error->all(FLERR,"Illegal fix efield command");
iarg += 2;
} else error->all(FLERR,"Illegal fix efield command");
}
force_flag = 0;
fsum[0] = fsum[1] = fsum[2] = fsum[3] = 0.0;
maxatom = -1;
efield = NULL;
}
/* ---------------------------------------------------------------------- */
FixEfield::~FixEfield()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] estr;
delete [] idregion;
memory->destroy(efield);
}
/* ---------------------------------------------------------------------- */
int FixEfield::setmask()
{
int mask = 0;
mask |= THERMO_ENERGY;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixEfield::init()
{
qflag = muflag = 0;
if (atom->q_flag) qflag = 1;
if (atom->mu_flag && atom->torque_flag) muflag = 1;
if (!qflag && !muflag)
error->all(FLERR,"Fix efield requires atom attribute q or mu");
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix efield does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xstyle = ATOM;
else error->all(FLERR,"Variable for fix efield is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix efield does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else if (input->variable->atomstyle(yvar)) ystyle = ATOM;
else error->all(FLERR,"Variable for fix efield is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix efield does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zstyle = ATOM;
else error->all(FLERR,"Variable for fix efield is invalid style");
}
if (estr) {
evar = input->variable->find(estr);
if (evar < 0)
error->all(FLERR,"Variable name for fix efield does not exist");
if (input->variable->atomstyle(evar)) estyle = ATOM;
else error->all(FLERR,"Variable for fix efield is invalid style");
} else estyle = NONE;
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix aveforce does not exist");
}
if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM)
varflag = ATOM;
else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL)
varflag = EQUAL;
else varflag = CONSTANT;
if (muflag && varflag == ATOM)
error->all(FLERR,"Fix efield with dipoles cannot use atom-style variables");
if (muflag && update->whichflag == 2 && comm->me == 0)
error->warning(FLERR,
"The minimizer does not re-orient dipoles "
"when using fix efield");
if (varflag == CONSTANT && estyle != NONE)
error->all(FLERR,"Cannot use variable energy with "
"constant efield in fix efield");
if ((varflag == EQUAL || varflag == ATOM) &&
update->whichflag == 2 && estyle == NONE)
error->all(FLERR,"Must use variable energy with fix efield");
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixEfield::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
}
/* ---------------------------------------------------------------------- */
void FixEfield::min_setup(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
apply F = qE
------------------------------------------------------------------------- */
void FixEfield::post_force(int vflag)
{
double **f = atom->f;
double *q = atom->q;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
// reallocate efield array if necessary
if (varflag == ATOM && nlocal > maxatom) {
maxatom = atom->nmax;
memory->destroy(efield);
memory->create(efield,maxatom,4,"efield:efield");
}
+ // update region if necessary
+
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
// fsum[0] = "potential energy" for added force
// fsum[123] = extra force added to atoms
fsum[0] = fsum[1] = fsum[2] = fsum[3] = 0.0;
force_flag = 0;
double **x = atom->x;
double fx,fy,fz;
// constant efield
if (varflag == CONSTANT) {
double unwrap[3];
// charge interactions
// force = qE, potential energy = F dot x in unwrapped coords
if (qflag) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
fx = q[i]*ex;
fy = q[i]*ey;
fz = q[i]*ez;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
domain->unmap(x[i],image[i],unwrap);
fsum[0] -= fx*unwrap[0]+fy*unwrap[1]+fz*unwrap[2];
fsum[1] += fx;
fsum[2] += fy;
fsum[3] += fz;
}
}
// dipole interactions
// no force, torque = mu cross E, potential energy = -mu dot E
if (muflag) {
double **mu = atom->mu;
double **t = atom->torque;
double tx,ty,tz;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
tx = ez*mu[i][1] - ey*mu[i][2];
ty = ex*mu[i][2] - ez*mu[i][0];
tz = ey*mu[i][0] - ex*mu[i][1];
t[i][0] += tx;
t[i][1] += ty;
t[i][2] += tz;
fsum[0] -= mu[i][0]*ex + mu[i][1]*ey + mu[i][2]*ez;
}
}
// variable efield, wrap with clear/add
// potential energy = evar if defined, else 0.0
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) ex = qe2f * input->variable->compute_equal(xvar);
else if (xstyle == ATOM) {
if (efield) input->variable->compute_atom(xvar,igroup,&efield[0][0],3,0);
else input->variable->compute_atom(xvar,igroup,NULL,3,0);
}
if (ystyle == EQUAL) ey = qe2f * input->variable->compute_equal(yvar);
else if (ystyle == ATOM) {
if (efield) input->variable->compute_atom(yvar,igroup,&efield[0][1],3,0);
else input->variable->compute_atom(yvar,igroup,NULL,3,0);
}
if (zstyle == EQUAL) ez = qe2f * input->variable->compute_equal(zvar);
else if (zstyle == ATOM) {
if (efield) input->variable->compute_atom(zvar,igroup,&efield[0][2],3,0);
else input->variable->compute_atom(zvar,igroup,NULL,3,0);
}
if (estyle == ATOM) {
if (efield) input->variable->compute_atom(evar,igroup,&efield[0][3],4,0);
else input->variable->compute_atom(evar,igroup,NULL,4,0);
}
modify->addstep_compute(update->ntimestep + 1);
// charge interactions
// force = qE
if (qflag) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle == ATOM) fx = qe2f * q[i]*efield[i][0];
else fx = q[i]*ex;
f[i][0] += fx;
fsum[1] += fx;
if (ystyle == ATOM) fy = qe2f * q[i]*efield[i][1];
else fy = q[i]*ey;
f[i][1] += fy;
fsum[2] += fy;
if (zstyle == ATOM) fz = qe2f * q[i]*efield[i][2];
else fz = q[i]*ez;
f[i][2] += fz;
fsum[3] += fz;
if (estyle == ATOM) fsum[0] += efield[0][3];
}
}
// dipole interactions
// no force, torque = mu cross E
if (muflag) {
double **mu = atom->mu;
double **t = atom->torque;
double tx,ty,tz;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
tx = ez*mu[i][1] - ey*mu[i][2];
ty = ex*mu[i][2] - ez*mu[i][0];
tz = ey*mu[i][0] - ex*mu[i][1];
t[i][0] += tx;
t[i][1] += ty;
t[i][2] += tz;
}
}
}
}
/* ---------------------------------------------------------------------- */
void FixEfield::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixEfield::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixEfield::memory_usage()
{
double bytes = 0.0;
if (varflag == ATOM) bytes = atom->nmax*4 * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
return energy added by fix
------------------------------------------------------------------------- */
double FixEfield::compute_scalar(void)
{
if (force_flag == 0) {
MPI_Allreduce(fsum,fsum_all,4,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return fsum_all[0];
}
/* ----------------------------------------------------------------------
return total extra force due to fix
------------------------------------------------------------------------- */
double FixEfield::compute_vector(int n)
{
if (force_flag == 0) {
MPI_Allreduce(fsum,fsum_all,4,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return fsum_all[n+1];
}
diff --git a/src/MISC/fix_evaporate.cpp b/src/MISC/fix_evaporate.cpp
index 208c94451..cbaa50db7 100644
--- a/src/MISC/fix_evaporate.cpp
+++ b/src/MISC/fix_evaporate.cpp
@@ -1,405 +1,407 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "fix_evaporate.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "update.h"
#include "domain.h"
#include "region.h"
#include "comm.h"
#include "force.h"
#include "group.h"
#include "random_park.h"
#include "random_mars.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixEvaporate::FixEvaporate(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 7) error->all(FLERR,"Illegal fix evaporate command");
scalar_flag = 1;
global_freq = 1;
extscalar = 0;
nevery = force->inumeric(FLERR,arg[3]);
nflux = force->inumeric(FLERR,arg[4]);
iregion = domain->find_region(arg[5]);
int n = strlen(arg[5]) + 1;
idregion = new char[n];
strcpy(idregion,arg[5]);
int seed = force->inumeric(FLERR,arg[6]);
if (nevery <= 0 || nflux <= 0)
error->all(FLERR,"Illegal fix evaporate command");
if (iregion == -1)
error->all(FLERR,"Region ID for fix evaporate does not exist");
if (seed <= 0) error->all(FLERR,"Illegal fix evaporate command");
// random number generator, same for all procs
random = new RanPark(lmp,seed);
// optional args
molflag = 0;
int iarg = 7;
while (iarg < narg) {
if (strcmp(arg[iarg],"molecule") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix evaporate command");
if (strcmp(arg[iarg+1],"no") == 0) molflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) molflag = 1;
else error->all(FLERR,"Illegal fix evaporate command");
iarg += 2;
} else error->all(FLERR,"Illegal fix evaporate command");
}
// set up reneighboring
force_reneighbor = 1;
next_reneighbor = (update->ntimestep/nevery)*nevery + nevery;
ndeleted = 0;
nmax = 0;
list = NULL;
mark = NULL;
}
/* ---------------------------------------------------------------------- */
FixEvaporate::~FixEvaporate()
{
delete [] idregion;
delete random;
memory->destroy(list);
memory->destroy(mark);
}
/* ---------------------------------------------------------------------- */
int FixEvaporate::setmask()
{
int mask = 0;
mask |= PRE_EXCHANGE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixEvaporate::init()
{
// set index and check validity of region
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix evaporate does not exist");
// check that no deletable atoms are in atom->firstgroup
// deleting such an atom would not leave firstgroup atoms first
if (atom->firstgroup >= 0) {
int *mask = atom->mask;
int nlocal = atom->nlocal;
int firstgroupbit = group->bitmask[atom->firstgroup];
int flag = 0;
for (int i = 0; i < nlocal; i++)
if ((mask[i] & groupbit) && (mask[i] && firstgroupbit)) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Cannot evaporate atoms in atom_modify first group");
}
// if molflag not set, warn if any deletable atom has a mol ID
if (molflag == 0 && atom->molecule_flag) {
tagint *molecule = atom->molecule;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int flag = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (molecule[i]) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->warning(FLERR,
"Fix evaporate may delete atom with non-zero molecule ID");
}
if (molflag && atom->molecule_flag == 0)
error->all(FLERR,
"Fix evaporate molecule requires atom attribute molecule");
}
/* ----------------------------------------------------------------------
perform particle deletion
done before exchange, borders, reneighbor
so that ghost atoms and neighbor lists will be correct
------------------------------------------------------------------------- */
void FixEvaporate::pre_exchange()
{
int i,j,m,iwhichglobal,iwhichlocal;
int ndel,ndeltopo[4];
if (update->ntimestep != next_reneighbor) return;
// grow list and mark arrays if necessary
if (atom->nlocal > nmax) {
memory->destroy(list);
memory->destroy(mark);
nmax = atom->nmax;
memory->create(list,nmax,"evaporate:list");
memory->create(mark,nmax,"evaporate:mark");
}
// ncount = # of deletable atoms in region that I own
// nall = # on all procs
// nbefore = # on procs before me
// list[ncount] = list of local indices of atoms I can delete
+ Region *region = domain->regions[iregion];
+ region->prematch();
+
double **x = atom->x;
int *mask = atom->mask;
tagint *tag = atom->tag;
int nlocal = atom->nlocal;
int ncount = 0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
- if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- list[ncount++] = i;
+ if (region->match(x[i][0],x[i][1],x[i][2])) list[ncount++] = i;
int nall,nbefore;
MPI_Allreduce(&ncount,&nall,1,MPI_INT,MPI_SUM,world);
MPI_Scan(&ncount,&nbefore,1,MPI_INT,MPI_SUM,world);
nbefore -= ncount;
// ndel = total # of atom deletions, in or out of region
// ndeltopo[1,2,3,4] = ditto for bonds, angles, dihedrals, impropers
// mark[] = 1 if deleted
ndel = 0;
for (i = 0; i < nlocal; i++) mark[i] = 0;
// atomic deletions
// choose atoms randomly across all procs and mark them for deletion
// shrink eligible list as my atoms get marked
// keep ndel,ncount,nall,nbefore current after each atom deletion
if (molflag == 0) {
while (nall && ndel < nflux) {
iwhichglobal = static_cast<int> (nall*random->uniform());
if (iwhichglobal < nbefore) nbefore--;
else if (iwhichglobal < nbefore + ncount) {
iwhichlocal = iwhichglobal - nbefore;
mark[list[iwhichlocal]] = 1;
list[iwhichlocal] = list[ncount-1];
ncount--;
}
ndel++;
nall--;
}
// molecule deletions
// choose one atom in one molecule randomly across all procs
// bcast mol ID and delete all atoms in that molecule on any proc
// update deletion count by total # of atoms in molecule
// shrink list of eligible candidates as any of my atoms get marked
// keep ndel,ndeltopo,ncount,nall,nbefore current after each mol deletion
} else {
int me,proc,iatom,ndelone,ndelall,index;
tagint imolecule;
tagint *molecule = atom->molecule;
int *molindex = atom->molindex;
int *molatom = atom->molatom;
int molecular = atom->molecular;
Molecule **onemols = atom->avec->onemols;
ndeltopo[0] = ndeltopo[1] = ndeltopo[2] = ndeltopo[3] = 0;
while (nall && ndel < nflux) {
// pick an iatom,imolecule on proc me to delete
iwhichglobal = static_cast<int> (nall*random->uniform());
if (iwhichglobal >= nbefore && iwhichglobal < nbefore + ncount) {
iwhichlocal = iwhichglobal - nbefore;
iatom = list[iwhichlocal];
imolecule = molecule[iatom];
me = comm->me;
} else me = -1;
// bcast mol ID to delete all atoms from
// if mol ID > 0, delete any atom in molecule and decrement counters
// if mol ID == 0, delete single iatom
// logic with ndeltopo is to count # of deleted bonds,angles,etc
// for atom->molecular = 1, do this for each deleted atom in molecule
// for atom->molecular = 2, use Molecule counts for just 1st atom in mol
MPI_Allreduce(&me,&proc,1,MPI_INT,MPI_MAX,world);
MPI_Bcast(&imolecule,1,MPI_LMP_TAGINT,proc,world);
ndelone = 0;
for (i = 0; i < nlocal; i++) {
if (imolecule && molecule[i] == imolecule) {
mark[i] = 1;
ndelone++;
if (molecular == 1) {
if (atom->avec->bonds_allow) {
if (force->newton_bond) ndeltopo[0] += atom->num_bond[i];
else {
for (j = 0; j < atom->num_bond[i]; j++) {
if (tag[i] < atom->bond_atom[i][j]) ndeltopo[0]++;
}
}
}
if (atom->avec->angles_allow) {
if (force->newton_bond) ndeltopo[1] += atom->num_angle[i];
else {
for (j = 0; j < atom->num_angle[i]; j++) {
m = atom->map(atom->angle_atom2[i][j]);
if (m >= 0 && m < nlocal) ndeltopo[1]++;
}
}
}
if (atom->avec->dihedrals_allow) {
if (force->newton_bond) ndeltopo[2] += atom->num_dihedral[i];
else {
for (j = 0; j < atom->num_dihedral[i]; j++) {
m = atom->map(atom->dihedral_atom2[i][j]);
if (m >= 0 && m < nlocal) ndeltopo[2]++;
}
}
}
if (atom->avec->impropers_allow) {
if (force->newton_bond) ndeltopo[3] += atom->num_improper[i];
else {
for (j = 0; j < atom->num_improper[i]; j++) {
m = atom->map(atom->improper_atom2[i][j]);
if (m >= 0 && m < nlocal) ndeltopo[3]++;
}
}
}
} else {
if (molatom[i] == 0) {
index = molindex[i];
ndeltopo[0] += onemols[index]->nbonds;
ndeltopo[1] += onemols[index]->nangles;
ndeltopo[2] += onemols[index]->ndihedrals;
ndeltopo[3] += onemols[index]->nimpropers;
}
}
} else if (me == proc && i == iatom) {
mark[i] = 1;
ndelone++;
}
}
// remove any atoms marked for deletion from my eligible list
i = 0;
while (i < ncount) {
if (mark[list[i]]) {
list[i] = list[ncount-1];
ncount--;
} else i++;
}
// update ndel,ncount,nall,nbefore
// ndelall is total atoms deleted on this iteration
// ncount is already correct, so resum to get nall and nbefore
MPI_Allreduce(&ndelone,&ndelall,1,MPI_INT,MPI_SUM,world);
ndel += ndelall;
MPI_Allreduce(&ncount,&nall,1,MPI_INT,MPI_SUM,world);
MPI_Scan(&ncount,&nbefore,1,MPI_INT,MPI_SUM,world);
nbefore -= ncount;
}
}
// delete my marked atoms
// loop in reverse order to avoid copying marked atoms
AtomVec *avec = atom->avec;
for (i = nlocal-1; i >= 0; i--) {
if (mark[i]) {
avec->copy(atom->nlocal-1,i,1);
atom->nlocal--;
}
}
// reset global natoms and bonds, angles, etc
// if global map exists, reset it now instead of waiting for comm
// since deleting atoms messes up ghosts
atom->natoms -= ndel;
if (molflag) {
int all[4];
MPI_Allreduce(ndeltopo,all,4,MPI_INT,MPI_SUM,world);
atom->nbonds -= all[0];
atom->nangles -= all[1];
atom->ndihedrals -= all[2];
atom->nimpropers -= all[3];
}
if (ndel && atom->map_style) {
atom->nghost = 0;
atom->map_init();
atom->map_set();
}
// statistics
ndeleted += ndel;
next_reneighbor = update->ntimestep + nevery;
}
/* ----------------------------------------------------------------------
return number of deleted particles
------------------------------------------------------------------------- */
double FixEvaporate::compute_scalar()
{
return 1.0*ndeleted;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixEvaporate::memory_usage()
{
double bytes = 2*nmax * sizeof(int);
return bytes;
}
diff --git a/src/MISC/fix_oneway.cpp b/src/MISC/fix_oneway.cpp
index e0345de3f..3945dbb29 100644
--- a/src/MISC/fix_oneway.cpp
+++ b/src/MISC/fix_oneway.cpp
@@ -1,109 +1,110 @@
/* ----------------------------------------------------------------------
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 author: Axel Kohlmeyer (ICTP, Italy)
------------------------------------------------------------------------- */
#include "string.h"
#include "fix_oneway.h"
#include "atom.h"
#include "domain.h"
#include "error.h"
#include "force.h"
#include "region.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE=-1,X=0,Y=1,Z=2,XYZMASK=3,MINUS=4,PLUS=0};
/* ---------------------------------------------------------------------- */
FixOneWay::FixOneWay(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
{
direction = NONE;
regionidx = 0;
regionstr = NULL;
if (narg < 6) error->all(FLERR,"Illegal fix oneway command");
nevery = force->inumeric(FLERR,arg[3]);
if (nevery < 1) error->all(FLERR,"Illegal nevery value for fix oneway");
int len = strlen(arg[4]);
regionstr = new char[len];
strcpy(regionstr,arg[4]);
if (strcmp(arg[5], "x") == 0) direction = X|PLUS;
if (strcmp(arg[5], "X") == 0) direction = X|PLUS;
if (strcmp(arg[5], "y") == 0) direction = Y|PLUS;
if (strcmp(arg[5], "Y") == 0) direction = Y|PLUS;
if (strcmp(arg[5], "z") == 0) direction = Z|PLUS;
if (strcmp(arg[5], "Z") == 0) direction = Z|PLUS;
if (strcmp(arg[5],"-x") == 0) direction = X|MINUS;
if (strcmp(arg[5],"-X") == 0) direction = X|MINUS;
if (strcmp(arg[5],"-y") == 0) direction = Y|MINUS;
if (strcmp(arg[5],"-Y") == 0) direction = Y|MINUS;
if (strcmp(arg[5],"-z") == 0) direction = Z|MINUS;
if (strcmp(arg[5],"-Z") == 0) direction = Z|MINUS;
global_freq = nevery;
}
/* ---------------------------------------------------------------------- */
FixOneWay::~FixOneWay()
{
if (regionstr) delete[] regionstr;
}
/* ---------------------------------------------------------------------- */
int FixOneWay::setmask()
{
return END_OF_STEP;
}
/* ---------------------------------------------------------------------- */
void FixOneWay::init()
{
regionidx = domain->find_region(regionstr);
if (regionidx < 0)
error->warning(FLERR,"Region for fix oneway does not exist");
}
/* ---------------------------------------------------------------------- */
void FixOneWay::end_of_step()
{
Region *region = domain->regions[regionidx];
- const int idx = direction & XYZMASK;
+ region->prematch();
+ const int idx = direction & XYZMASK;
const double * const * const x = atom->x;
double * const * const v = atom->v;
const int *mask = atom->mask;
const int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; ++i) {
if ((mask[i] & groupbit) && region->match(x[i][0],x[i][1],x[i][2])) {
if (direction & MINUS) {
if (v[i][idx] > 0.0) v[i][idx] = -v[i][idx];
} else {
if (v[i][idx] < 0.0) v[i][idx] = -v[i][idx];
}
}
}
}
diff --git a/src/USER-EFF/compute_temp_region_eff.cpp b/src/USER-EFF/compute_temp_region_eff.cpp
index 27dcd5d0f..d0ee66e1b 100644
--- a/src/USER-EFF/compute_temp_region_eff.cpp
+++ b/src/USER-EFF/compute_temp_region_eff.cpp
@@ -1,281 +1,292 @@
/* ----------------------------------------------------------------------
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 author: Andres Jaramillo-Botero (Caltech)
------------------------------------------------------------------------- */
#include "mpi.h"
#include "math.h"
#include "string.h"
#include "compute_temp_region_eff.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeTempRegionEff::ComputeTempRegionEff(LAMMPS *lmp, int narg, char **arg) :
Compute(lmp, narg, arg)
{
if (!atom->electron_flag)
error->all(FLERR,"Compute temp/region/eff requires atom style electron");
if (narg != 4) error->all(FLERR,"Illegal compute temp/region/eff command");
iregion = domain->find_region(arg[3]);
if (iregion == -1)
error->all(FLERR,"Region ID for compute temp/region/eff does not exist");
int n = strlen(arg[3]) + 1;
idregion = new char[n];
strcpy(idregion,arg[3]);
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
tempbias = 1;
maxbias = 0;
vbiasall = NULL;
vector = new double[6];
}
/* ---------------------------------------------------------------------- */
ComputeTempRegionEff::~ComputeTempRegionEff()
{
delete [] idregion;
memory->destroy(vbiasall);
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegionEff::init()
{
// set index and check validity of region
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for compute temp/region/eff does not exist");
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegionEff::setup()
{
dof = 0.0;
}
/* ---------------------------------------------------------------------- */
+void ComputeTempRegionEff::dof_remove_pre()
+{
+ domain->regions[iregion]->prematch();
+}
+
+/* ---------------------------------------------------------------------- */
+
int ComputeTempRegionEff::dof_remove(int i)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2])) return 0;
return 1;
}
/* ---------------------------------------------------------------------- */
double ComputeTempRegionEff::compute_scalar()
{
invoked_scalar = update->ntimestep;
double **x = atom->x;
double **v = atom->v;
double *ervel = atom->ervel;
double *mass = atom->mass;
int *spin = atom->spin;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double mefactor = domain->dimension/4.0;
Region *region = domain->regions[iregion];
+ region->prematch();
+
int count = 0;
int ecount = 0;
double t = 0.0;
if (mass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
count++;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
if (fabs(spin[i])==1) {
t += mefactor*mass[type[i]]*ervel[i]*ervel[i];
ecount++;
}
}
}
double tarray[2],tarray_all[2];
// Assume 3/2 k T per nucleus
tarray[0] = count-ecount;
tarray[1] = t;
MPI_Allreduce(tarray,tarray_all,2,MPI_DOUBLE,MPI_SUM,world);
dof = domain->dimension * tarray_all[0] - extra_dof;
int one = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (fabs(spin[i])==1) one++;
}
if (dof > 0) scalar = force->mvv2e * tarray_all[1] / (dof * force->boltz);
else scalar = 0.0;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegionEff::compute_vector()
{
int i;
invoked_vector = update->ntimestep;
double **x = atom->x;
double **v = atom->v;
double *ervel = atom->ervel;
double *mass = atom->mass;
int *spin = atom->spin;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double mefactor = domain->dimension/4.0;
Region *region = domain->regions[iregion];
+ region->prematch();
+
double massone,t[6];
for (i = 0; i < 6; i++) t[i] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
massone = mass[type[i]];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
if (fabs(spin[i])==1) {
t[0] += mefactor * massone * ervel[i]*ervel[i];
t[1] += mefactor * massone * ervel[i]*ervel[i];
t[2] += mefactor * massone * ervel[i]*ervel[i];
}
}
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
NOTE: the following commands do not bias the radial electron velocities
------------------------------------------------------------------------- */
void ComputeTempRegionEff::remove_bias(int i, double *v)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2]))
vbias[0] = vbias[1] = vbias[2] = 0.0;
else {
vbias[0] = v[0];
vbias[1] = v[1];
vbias[2] = v[2];
v[0] = v[1] = v[2] = 0.0;
}
}
/* ----------------------------------------------------------------------
remove velocity bias from all atoms to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempRegionEff::remove_bias_all()
{
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (nlocal > maxbias) {
memory->destroy(vbiasall);
maxbias = atom->nmax;
memory->create(vbiasall,maxbias,3,"temp/region:vbiasall");
}
Region *region = domain->regions[iregion];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region->match(x[i][0],x[i][1],x[i][2]))
vbiasall[i][0] = vbiasall[i][1] = vbiasall[i][2] = 0.0;
else {
vbiasall[i][0] = v[i][0];
vbiasall[i][1] = v[i][1];
vbiasall[i][2] = v[i][2];
v[i][0] = v[i][1] = v[i][2] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempRegionEff::restore_bias(int i, double *v)
{
v[0] += vbias[0];
v[1] += vbias[1];
v[2] += vbias[2];
}
/* ----------------------------------------------------------------------
add back in velocity bias to all atoms removed by remove_bias_all()
assume remove_bias_all() was previously called
------------------------------------------------------------------------- */
void ComputeTempRegionEff::restore_bias_all()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] += vbiasall[i][0];
v[i][1] += vbiasall[i][1];
v[i][2] += vbiasall[i][2];
}
}
/* ---------------------------------------------------------------------- */
double ComputeTempRegionEff::memory_usage()
{
double bytes = maxbias * sizeof(double);
return bytes;
}
diff --git a/src/USER-EFF/compute_temp_region_eff.h b/src/USER-EFF/compute_temp_region_eff.h
index eddaa244c..682a415a4 100644
--- a/src/USER-EFF/compute_temp_region_eff.h
+++ b/src/USER-EFF/compute_temp_region_eff.h
@@ -1,51 +1,52 @@
/* -*- c++ -*- ----------------------------------------------------------
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 COMPUTE_CLASS
ComputeStyle(temp/region/eff,ComputeTempRegionEff)
#else
#ifndef LMP_COMPUTE_TEMP_REGION_EFF_H
#define LMP_COMPUTE_TEMP_REGION_EFF_H
#include "compute.h"
namespace LAMMPS_NS {
class ComputeTempRegionEff : public Compute {
public:
ComputeTempRegionEff(class LAMMPS *, int, char **);
virtual ~ComputeTempRegionEff();
void init();
void setup();
virtual double compute_scalar();
virtual void compute_vector();
+ void dof_remove_pre(void);
int dof_remove(int);
void remove_bias(int, double *);
void remove_bias_all();
void restore_bias(int, double *);
void restore_bias_all();
double memory_usage();
protected:
int iregion;
char *idregion;
};
}
#endif
#endif
diff --git a/src/USER-REAXC/fix_qeq_reax.cpp b/src/USER-REAXC/fix_qeq_reax.cpp
index 98b929e9f..c0ccb01ca 100644
--- a/src/USER-REAXC/fix_qeq_reax.cpp
+++ b/src/USER-REAXC/fix_qeq_reax.cpp
@@ -1,917 +1,1042 @@
/* ----------------------------------------------------------------------
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 author: Hasan Metin Aktulga, Purdue University
(now at Lawrence Berkeley National Laboratory, hmaktulga@lbl.gov)
+
+ Hybrid and sub-group capabilities: Ray Shan (Sandia)
------------------------------------------------------------------------- */
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "fix_qeq_reax.h"
#include "pair_reax_c.h"
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "update.h"
#include "force.h"
+#include "group.h"
#include "pair.h"
#include "respa.h"
#include "memory.h"
#include "citeme.h"
#include "error.h"
#include "reaxc_defs.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define EV_TO_KCAL_PER_MOL 14.4
//#define DANGER_ZONE 0.95
//#define LOOSE_ZONE 0.7
#define SQR(x) ((x)*(x))
#define CUBE(x) ((x)*(x)*(x))
#define MIN_NBRS 100
static const char cite_fix_qeq_reax[] =
"fix qeq/reax command:\n\n"
"@Article{Aktulga12,\n"
" author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama},\n"
" title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques},\n"
" journal = {Parallel Computing},\n"
" year = 2012,\n"
" volume = 38,\n"
" pages = {245--259}\n"
"}\n\n";
/* ---------------------------------------------------------------------- */
FixQEqReax::FixQEqReax(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (lmp->citeme) lmp->citeme->add(cite_fix_qeq_reax);
if (narg != 8) error->all(FLERR,"Illegal fix qeq/reax command");
nevery = force->inumeric(FLERR,arg[3]);
- if (nevery <= 0) error->all(FLERR,"Illegal fix qeq/reax command");
-
swa = force->numeric(FLERR,arg[4]);
swb = force->numeric(FLERR,arg[5]);
tolerance = force->numeric(FLERR,arg[6]);
pertype_parameters(arg[7]);
shld = NULL;
n = n_cap = 0;
N = nmax = 0;
m_fill = m_cap = 0;
pack_flag = 0;
s = NULL;
t = NULL;
nprev = 5;
Hdia_inv = NULL;
b_s = NULL;
b_t = NULL;
b_prc = NULL;
b_prm = NULL;
// CG
p = NULL;
q = NULL;
r = NULL;
d = NULL;
// H matrix
H.firstnbr = NULL;
H.numnbrs = NULL;
H.jlist = NULL;
H.val = NULL;
- // GMRES
- //g = NULL;
- //y = NULL;
- //hstr = NULL;
- //v = NULL;
- //h = NULL;
- //hc = NULL;
- //hs = NULL;
-
// perform initial allocation of atom-based arrays
// register with Atom class
s_hist = t_hist = NULL;
grow_arrays(atom->nmax);
atom->add_callback(0);
for( int i = 0; i < atom->nmax; i++ )
for (int j = 0; j < nprev; ++j )
s_hist[i][j] = t_hist[i][j] = 0;
reaxc = NULL;
reaxc = (PairReaxC *) force->pair_match("reax/c",1);
+
}
/* ---------------------------------------------------------------------- */
FixQEqReax::~FixQEqReax()
{
// unregister callbacks to this fix from Atom class
atom->delete_callback(id,0);
memory->destroy(s_hist);
memory->destroy(t_hist);
deallocate_storage();
deallocate_matrix();
memory->destroy(shld);
if (!reaxflag) {
memory->destroy(chi);
memory->destroy(eta);
memory->destroy(gamma);
}
}
/* ---------------------------------------------------------------------- */
int FixQEqReax::setmask()
{
int mask = 0;
mask |= PRE_FORCE;
mask |= MIN_PRE_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::pertype_parameters(char *arg)
{
if (strcmp(arg,"reax/c") == 0) {
reaxflag = 1;
Pair *pair = force->pair_match("reax/c",1);
if (pair == NULL) error->all(FLERR,"No pair reax/c for fix qeq/reax");
int tmp;
chi = (double *) pair->extract("chi",tmp);
eta = (double *) pair->extract("eta",tmp);
gamma = (double *) pair->extract("gamma",tmp);
if (chi == NULL || eta == NULL || gamma == NULL)
error->all(FLERR,
"Fix qeq/reax could not extract params from pair reax/c");
return;
}
int i,itype,ntypes;
double v1,v2,v3;
FILE *pf;
reaxflag = 0;
ntypes = atom->ntypes;
memory->create(chi,ntypes+1,"qeq/reax:chi");
memory->create(eta,ntypes+1,"qeq/reax:eta");
memory->create(gamma,ntypes+1,"qeq/reax:gamma");
if (comm->me == 0) {
if ((pf = fopen(arg,"r")) == NULL)
error->one(FLERR,"Fix qeq/reax parameter file could not be found");
for (i = 1; i <= ntypes && !feof(pf); i++) {
fscanf(pf,"%d %lg %lg %lg",&itype,&v1,&v2,&v3);
if (itype < 1 || itype > ntypes)
error->one(FLERR,"Fix qeq/reax invalid atom type in param file");
chi[itype] = v1;
eta[itype] = v2;
gamma[itype] = v3;
}
if (i <= ntypes) error->one(FLERR,"Invalid param file for fix qeq/reax");
fclose(pf);
}
MPI_Bcast(&chi[1],ntypes,MPI_DOUBLE,0,world);
MPI_Bcast(&eta[1],ntypes,MPI_DOUBLE,0,world);
MPI_Bcast(&gamma[1],ntypes,MPI_DOUBLE,0,world);
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::allocate_storage()
{
nmax = atom->nmax;
memory->create(s,nmax,"qeq:s");
memory->create(t,nmax,"qeq:t");
memory->create(Hdia_inv,nmax,"qeq:Hdia_inv");
memory->create(b_s,nmax,"qeq:b_s");
memory->create(b_t,nmax,"qeq:b_t");
memory->create(b_prc,nmax,"qeq:b_prc");
memory->create(b_prm,nmax,"qeq:b_prm");
memory->create(p,nmax,"qeq:p");
memory->create(q,nmax,"qeq:q");
memory->create(r,nmax,"qeq:r");
memory->create(d,nmax,"qeq:d");
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::deallocate_storage()
{
memory->destroy(s);
memory->destroy(t);
memory->destroy( Hdia_inv );
memory->destroy( b_s );
memory->destroy( b_t );
memory->destroy( b_prc );
memory->destroy( b_prm );
memory->destroy( p );
memory->destroy( q );
memory->destroy( r );
memory->destroy( d );
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::reallocate_storage()
{
deallocate_storage();
allocate_storage();
init_storage();
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::allocate_matrix()
{
- int i,ii;
+ int i,ii,inum,m;
+ int *ilist, *numneigh;
int mincap;
double safezone;
if( reaxflag ) {
mincap = reaxc->system->mincap;
safezone = reaxc->system->safezone;
} else {
mincap = MIN_CAP;
safezone = SAFE_ZONE;
}
n = atom->nlocal;
n_cap = MAX( (int)(n * safezone), mincap );
// determine the total space for the H matrix
- int m = 0;
- for( ii = 0; ii < list->inum; ii++ ) {
- i = list->ilist[ii];
- m += list->numneigh[i];
+ if (reaxc) {
+ inum = reaxc->list->inum;
+ ilist = reaxc->list->ilist;
+ numneigh = reaxc->list->numneigh;
+ } else {
+ inum = list->inum;
+ ilist = list->ilist;
+ numneigh = list->numneigh;
+ }
+
+ m = 0;
+ for( ii = 0; ii < inum; ii++ ) {
+ i = ilist[ii];
+ m += numneigh[i];
}
m_cap = MAX( (int)(m * safezone), mincap * MIN_NBRS );
H.n = n_cap;
H.m = m_cap;
memory->create(H.firstnbr,n_cap,"qeq:H.firstnbr");
memory->create(H.numnbrs,n_cap,"qeq:H.numnbrs");
memory->create(H.jlist,m_cap,"qeq:H.jlist");
memory->create(H.val,m_cap,"qeq:H.val");
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::deallocate_matrix()
{
memory->destroy( H.firstnbr );
memory->destroy( H.numnbrs );
memory->destroy( H.jlist );
memory->destroy( H.val );
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::reallocate_matrix()
{
deallocate_matrix();
allocate_matrix();
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::init()
{
if (!atom->q_flag) error->all(FLERR,"Fix qeq/reax requires atom attribute q");
if (!force->pair_match("reax/c",1))
error->all(FLERR,"Must use pair_style reax/c with fix qeq/reax");
+ ngroup = group->count(igroup);
+ if (ngroup == 0) error->all(FLERR,"Fix qeq/reax group has no atoms");
+
+ /*
+ if (reaxc)
+ if (ngroup != reaxc->ngroup)
+ error->all(FLERR,"Fix qeq/reax group and pair reax/c have "
+ "different numbers of atoms");
+ */
+
// need a half neighbor list w/ Newton off and ghost neighbors
- // make it occasional if QeQ not performed every timestep
+ // built whenever re-neighboring occurs
int irequest = neighbor->request(this);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->fix = 1;
neighbor->requests[irequest]->newton = 2;
neighbor->requests[irequest]->ghost = 1;
- if (nevery > 1) neighbor->requests[irequest]->occasional = 1;
init_shielding();
init_taper();
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::init_shielding()
{
int i,j;
int ntypes;
ntypes = atom->ntypes;
memory->create(shld,ntypes+1,ntypes+1,"qeq:shileding");
for( i = 1; i <= ntypes; ++i )
for( j = 1; j <= ntypes; ++j )
shld[i][j] = pow( gamma[i] * gamma[j], -1.5 );
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::init_taper()
{
double d7, swa2, swa3, swb2, swb3;
if (fabs(swa) > 0.01 && comm->me == 0)
error->warning(FLERR,"Fix qeq/reax has non-zero lower Taper radius cutoff");
if (swb < 0)
error->all(FLERR, "Fix qeq/reax has negative upper Taper radius cutoff");
else if (swb < 5 && comm->me == 0)
error->warning(FLERR,"Fix qeq/reax has very low Taper radius cutoff");
d7 = pow( swb - swa, 7 );
swa2 = SQR( swa );
swa3 = CUBE( swa );
swb2 = SQR( swb );
swb3 = CUBE( swb );
Tap[7] = 20.0 / d7;
Tap[6] = -70.0 * (swa + swb) / d7;
Tap[5] = 84.0 * (swa2 + 3.0*swa*swb + swb2) / d7;
Tap[4] = -35.0 * (swa3 + 9.0*swa2*swb + 9.0*swa*swb2 + swb3 ) / d7;
Tap[3] = 140.0 * (swa3*swb + 3.0*swa2*swb2 + swa*swb3 ) / d7;
Tap[2] =-210.0 * (swa3*swb2 + swa2*swb3) / d7;
Tap[1] = 140.0 * swa3 * swb3 / d7;
Tap[0] = (-35.0*swa3*swb2*swb2 + 21.0*swa2*swb3*swb2 +
7.0*swa*swb3*swb3 + swb3*swb3*swb ) / d7;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::setup_pre_force(int vflag)
{
neighbor->build_one(list->index);
deallocate_storage();
allocate_storage();
init_storage();
deallocate_matrix();
allocate_matrix();
pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::setup_pre_force_respa(int vflag, int ilevel)
{
if (ilevel < nlevels_respa-1) return;
setup_pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::min_setup_pre_force(int vflag)
{
setup_pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::init_storage()
{
- N = atom->nlocal + atom->nghost;
- for( int i = 0; i < N; i++ ) {
+ int NN;
+
+ if (reaxc)
+ NN = reaxc->list->inum + reaxc->list->gnum;
+ else
+ NN = list->inum + list->gnum;
+
+ for( int i = 0; i < NN; i++ ) {
Hdia_inv[i] = 1. / eta[atom->type[i]];
b_s[i] = -chi[atom->type[i]];
b_t[i] = -1.0;
b_prc[i] = 0;
b_prm[i] = 0;
s[i] = t[i] = 0;
}
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::pre_force(int vflag)
{
double t_start, t_end;
if (update->ntimestep % nevery) return;
if( comm->me == 0 ) t_start = MPI_Wtime();
n = atom->nlocal;
N = atom->nlocal + atom->nghost;
+
// grow arrays if necessary
// need to be atom->nmax in length
+
if( atom->nmax > nmax ) reallocate_storage();
if( n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE )
reallocate_matrix();
init_matvec();
- matvecs = CG(b_s, s); // CG on s - parallel
- matvecs += CG(b_t, t); // CG on t - parallel
+ matvecs = CG(b_s, s); // CG on s - parallel
+ matvecs += CG(b_t, t); // CG on t - parallel
calculate_Q();
if( comm->me == 0 ) {
t_end = MPI_Wtime();
qeq_time = t_end - t_start;
}
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::pre_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::min_pre_force(int vflag)
{
pre_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::init_matvec()
{
/* fill-in H matrix */
compute_H();
- for( int i = 0; i < n; ++i ) {
- /* init pre-conditioner for H and init solution vectors */
- Hdia_inv[i] = 1. / eta[ atom->type[i] ];
- b_s[i] = -chi[ atom->type[i] ];
- b_t[i] = -1.0;
-
- /* linear extrapolation for s & t from previous solutions */
- //s[i] = 2 * s_hist[i][0] - s_hist[i][1];
- //t[i] = 2 * t_hist[i][0] - t_hist[i][1];
+ int nn, ii, i;
+ int *ilist;
- /* quadratic extrapolation for s & t from previous solutions */
- //s[i] = s_hist[i][2] + 3 * ( s_hist[i][0] - s_hist[i][1] );
- t[i] = t_hist[i][2] + 3 * ( t_hist[i][0] - t_hist[i][1] );
+ if (reaxc) {
+ nn = reaxc->list->inum;
+ ilist = reaxc->list->ilist;
+ } else {
+ nn = list->inum;
+ ilist = list->ilist;
+ }
- /* cubic extrapolation for s & t from previous solutions */
- s[i] = 4*(s_hist[i][0]+s_hist[i][2])-(6*s_hist[i][1]+s_hist[i][3]);
- //t[i] = 4*(t_hist[i][0]+t_hist[i][2])-(6*t_hist[i][1]+t_hist[i][3]);
+ for( ii = 0; ii < nn; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit) {
+
+ /* init pre-conditioner for H and init solution vectors */
+ Hdia_inv[i] = 1. / eta[ atom->type[i] ];
+ b_s[i] = -chi[ atom->type[i] ];
+ b_t[i] = -1.0;
+
+ /* linear extrapolation for s & t from previous solutions */
+ //s[i] = 2 * s_hist[i][0] - s_hist[i][1];
+ //t[i] = 2 * t_hist[i][0] - t_hist[i][1];
+
+ /* quadratic extrapolation for s & t from previous solutions */
+ //s[i] = s_hist[i][2] + 3 * ( s_hist[i][0] - s_hist[i][1] );
+ t[i] = t_hist[i][2] + 3 * ( t_hist[i][0] - t_hist[i][1] );
+
+ /* cubic extrapolation for s & t from previous solutions */
+ s[i] = 4*(s_hist[i][0]+s_hist[i][2])-(6*s_hist[i][1]+s_hist[i][3]);
+ //t[i] = 4*(t_hist[i][0]+t_hist[i][2])-(6*t_hist[i][1]+t_hist[i][3]);
+ }
}
pack_flag = 2;
comm->forward_comm_fix(this); //Dist_vector( s );
pack_flag = 3;
comm->forward_comm_fix(this); //Dist_vector( t );
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::compute_H()
{
int inum, jnum, *ilist, *jlist, *numneigh, **firstneigh;
- int i, j, ii, jj, flag;
+ int i, j, ii, jj, temp, newnbr, flag;
double **x, SMALL = 0.0001;
double dx, dy, dz, r_sqr;
int *type = atom->type;
tagint *tag = atom->tag;
x = atom->x;
+ int *mask = atom->mask;
- if (nevery > 1) neighbor->build_one(list->index);
- inum = list->inum;
- ilist = list->ilist;
- numneigh = list->numneigh;
- firstneigh = list->firstneigh;
-
+ if (reaxc) {
+ inum = reaxc->list->inum;
+ ilist = reaxc->list->ilist;
+ numneigh = reaxc->list->numneigh;
+ firstneigh = reaxc->list->firstneigh;
+ } else {
+ inum = list->inum;
+ ilist = list->ilist;
+ numneigh = list->numneigh;
+ firstneigh = list->firstneigh;
+ }
+
// fill in the H matrix
-
m_fill = 0;
r_sqr = 0;
for( ii = 0; ii < inum; ii++ ) {
i = ilist[ii];
- jlist = firstneigh[i];
- jnum = numneigh[i];
- H.firstnbr[i] = m_fill;
-
- for( jj = 0; jj < jnum; jj++ ) {
- j = jlist[jj];
-
- dx = x[j][0] - x[i][0];
- dy = x[j][1] - x[i][1];
- dz = x[j][2] - x[i][2];
- r_sqr = SQR(dx) + SQR(dy) + SQR(dz);
-
- flag = 0;
- if (r_sqr <= SQR(swb)) {
- if (j < n) flag = 1;
- else if (tag[i] < tag[j]) flag = 1;
- else if (tag[i] == tag[j]) {
- if (dz > SMALL) flag = 1;
- else if (fabs(dz) < SMALL) {
- if (dy > SMALL) flag = 1;
- else if (fabs(dy) < SMALL && dx > SMALL)
- flag = 1;
- }
+ if (mask[i] & groupbit) {
+ jlist = firstneigh[i];
+ jnum = numneigh[i];
+ H.firstnbr[i] = m_fill;
+
+ for( jj = 0; jj < jnum; jj++ ) {
+ j = jlist[jj];
+
+ dx = x[j][0] - x[i][0];
+ dy = x[j][1] - x[i][1];
+ dz = x[j][2] - x[i][2];
+ r_sqr = SQR(dx) + SQR(dy) + SQR(dz);
+
+ flag = 0;
+ if (r_sqr <= SQR(swb)) {
+ if (j < n) flag = 1;
+ else if (tag[i] < tag[j]) flag = 1;
+ else if (tag[i] == tag[j]) {
+ if (dz > SMALL) flag = 1;
+ else if (fabs(dz) < SMALL) {
+ if (dy > SMALL) flag = 1;
+ else if (fabs(dy) < SMALL && dx > SMALL)
+ flag = 1;
+ }
+ }
+ }
+
+ if( flag ) {
+ H.jlist[m_fill] = j;
+ H.val[m_fill] = calculate_H( sqrt(r_sqr), shld[type[i]][type[j]] );
+ m_fill++;
}
}
-
- if( flag ) {
- H.jlist[m_fill] = j;
- H.val[m_fill] = calculate_H( sqrt(r_sqr), shld[type[i]][type[j]] );
- m_fill++;
- }
+ H.numnbrs[i] = m_fill - H.firstnbr[i];
}
-
- H.numnbrs[i] = m_fill - H.firstnbr[i];
}
if (m_fill >= H.m) {
char str[128];
sprintf(str,"H matrix size has been exceeded: m_fill=%d H.m=%d\n",
m_fill, H.m );
error->warning(FLERR,str);
error->all(FLERR,"Fix qeq/reax has insufficient QEq matrix size");
}
}
/* ---------------------------------------------------------------------- */
double FixQEqReax::calculate_H( double r, double gamma )
{
double Taper, denom;
Taper = Tap[7] * r + Tap[6];
Taper = Taper * r + Tap[5];
Taper = Taper * r + Tap[4];
Taper = Taper * r + Tap[3];
Taper = Taper * r + Tap[2];
Taper = Taper * r + Tap[1];
Taper = Taper * r + Tap[0];
denom = r * r * r + gamma;
denom = pow(denom,0.3333333333333);
return Taper * EV_TO_KCAL_PER_MOL / denom;
}
/* ---------------------------------------------------------------------- */
int FixQEqReax::CG( double *b, double *x )
{
int i, j, imax;
double tmp, alpha, beta, b_norm;
- double sig_old, sig_new;
+ double sig_old, sig_new, sig0;
+
+ int nn, jj;
+ int *ilist;
+ if (reaxc) {
+ nn = reaxc->list->inum;
+ ilist = reaxc->list->ilist;
+ } else {
+ nn = list->inum;
+ ilist = list->ilist;
+ }
imax = 200;
pack_flag = 1;
sparse_matvec( &H, x, q );
comm->reverse_comm_fix( this ); //Coll_Vector( q );
- vector_sum( r , 1., b, -1., q, n );
- for( j = 0; j < n; ++j )
- d[j] = r[j] * Hdia_inv[j]; //pre-condition
+ vector_sum( r , 1., b, -1., q, nn );
+
+ for( jj = 0; jj < nn; ++jj ) {
+ j = ilist[jj];
+ if (atom->mask[j] & groupbit)
+ d[j] = r[j] * Hdia_inv[j]; //pre-condition
+ }
- b_norm = parallel_norm( b, n );
- sig_new = parallel_dot( r, d, n );
+ int ttype = 1;
+ b_norm = parallel_norm( b, nn );
+ sig_new = parallel_dot( r, d, nn);
+ sig0 = sig_new;
for( i = 1; i < imax && sqrt(sig_new) / b_norm > tolerance; ++i ) {
comm->forward_comm_fix(this); //Dist_vector( d );
sparse_matvec( &H, d, q );
comm->reverse_comm_fix(this); //Coll_vector( q );
- tmp = parallel_dot( d, q, n );
+ ttype = 2;
+ tmp = parallel_dot( d, q, nn);
alpha = sig_new / tmp;
- // comm->me, i, parallel_norm( d, n ), parallel_norm( q, n ), tmp );
- vector_add( x, alpha, d, n );
- vector_add( r, -alpha, q, n );
+ vector_add( x, alpha, d, nn );
+ vector_add( r, -alpha, q, nn );
// pre-conditioning
- for( j = 0; j < n; ++j )
- p[j] = r[j] * Hdia_inv[j];
+ for( jj = 0; jj < nn; ++jj ) {
+ j = ilist[jj];
+ if (atom->mask[j] & groupbit)
+ p[j] = r[j] * Hdia_inv[j];
+ }
sig_old = sig_new;
- sig_new = parallel_dot( r, p, n );
-
+ sig_new = parallel_dot( r, p, nn);
beta = sig_new / sig_old;
- vector_sum( d, 1., p, beta, d, n );
+ vector_sum( d, 1., p, beta, d, nn );
+
}
if (i >= imax && comm->me == 0) {
char str[128];
sprintf(str,"Fix qeq/reax CG convergence failed after %d iterations "
"at " BIGINT_FORMAT " step",i,update->ntimestep);
error->warning(FLERR,str);
}
return i;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::sparse_matvec( sparse_matrix *A, double *x, double *b )
{
int i, j, itr_j;
+ int nn, NN, ii;
+ int *ilist;
+
+ if (reaxc) {
+ nn = reaxc->list->inum;
+ NN = reaxc->list->inum + reaxc->list->gnum;
+ ilist = reaxc->list->ilist;
+ } else {
+ nn = list->inum;
+ NN = list->inum + list->gnum;
+ ilist = list->ilist;
+ }
- for( i = 0; i < n; ++i )
- b[i] = eta[ atom->type[i] ] * x[i];
- for( i = n; i < N; ++i )
- b[i] = 0;
+ for( ii = 0; ii < nn; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit)
+ b[i] = eta[ atom->type[i] ] * x[i];
+ }
+
+ for( ii = nn; ii < NN; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit)
+ b[i] = 0;
+ }
- for( i = 0; i < n; ++i ) {
- for( itr_j=A->firstnbr[i]; itr_j<A->firstnbr[i]+A->numnbrs[i]; itr_j++) {
- j = A->jlist[itr_j];
- b[i] += A->val[itr_j] * x[j];
- b[j] += A->val[itr_j] * x[i];
+ for( ii = 0; ii < nn; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit) {
+ for( itr_j=A->firstnbr[i]; itr_j<A->firstnbr[i]+A->numnbrs[i]; itr_j++) {
+ j = A->jlist[itr_j];
+ b[i] += A->val[itr_j] * x[j];
+ b[j] += A->val[itr_j] * x[i];
+ }
}
}
+
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::calculate_Q()
{
int i, k;
double u, s_sum, t_sum;
double *q = atom->q;
- s_sum = parallel_vector_acc( s, n );
- t_sum = parallel_vector_acc( t, n);
+ int nn, ii;
+ int *ilist;
+
+ if (reaxc) {
+ nn = reaxc->list->inum;
+ ilist = reaxc->list->ilist;
+ } else {
+ nn = list->inum;
+ ilist = list->ilist;
+ }
+
+ s_sum = parallel_vector_acc( s, nn );
+ t_sum = parallel_vector_acc( t, nn);
u = s_sum / t_sum;
- for( i = 0; i < n; ++i ) {
- q[i] = s[i] - u * t[i];
+ for( ii = 0; ii < nn; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit) {
+ q[i] = s[i] - u * t[i];
- /* backup s & t */
- for( k = 4; k > 0; --k ) {
- s_hist[i][k] = s_hist[i][k-1];
- t_hist[i][k] = t_hist[i][k-1];
+ /* backup s & t */
+ for( k = 4; k > 0; --k ) {
+ s_hist[i][k] = s_hist[i][k-1];
+ t_hist[i][k] = t_hist[i][k-1];
+ }
+ s_hist[i][0] = s[i];
+ t_hist[i][0] = t[i];
}
- s_hist[i][0] = s[i];
- t_hist[i][0] = t[i];
}
pack_flag = 4;
comm->forward_comm_fix( this ); //Dist_vector( atom->q );
}
/* ---------------------------------------------------------------------- */
int FixQEqReax::pack_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc)
{
int m;
if( pack_flag == 1)
for(m = 0; m < n; m++) buf[m] = d[list[m]];
else if( pack_flag == 2 )
for(m = 0; m < n; m++) buf[m] = s[list[m]];
else if( pack_flag == 3 )
for(m = 0; m < n; m++) buf[m] = t[list[m]];
else if( pack_flag == 4 )
for(m = 0; m < n; m++) buf[m] = atom->q[list[m]];
return 1;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::unpack_comm(int n, int first, double *buf)
{
int i, m;
if( pack_flag == 1)
for(m = 0, i = first; m < n; m++, i++) d[i] = buf[m];
else if( pack_flag == 2)
for(m = 0, i = first; m < n; m++, i++) s[i] = buf[m];
else if( pack_flag == 3)
for(m = 0, i = first; m < n; m++, i++) t[i] = buf[m];
else if( pack_flag == 4)
for(m = 0, i = first; m < n; m++, i++) atom->q[i] = buf[m];
}
/* ---------------------------------------------------------------------- */
int FixQEqReax::pack_reverse_comm(int n, int first, double *buf)
{
int i, m;
for(m = 0, i = first; m < n; m++, i++) buf[m] = q[i];
return 1;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::unpack_reverse_comm(int n, int *list, double *buf)
{
for(int m = 0; m < n; m++) q[list[m]] += buf[m];
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixQEqReax::memory_usage()
{
double bytes;
bytes = atom->nmax*nprev*2 * sizeof(double); // s_hist & t_hist
bytes += atom->nmax*11 * sizeof(double); // storage
bytes += n_cap*2 * sizeof(int); // matrix...
bytes += m_cap * sizeof(int);
bytes += m_cap * sizeof(double);
return bytes;
}
/* ----------------------------------------------------------------------
allocate fictitious charge arrays
------------------------------------------------------------------------- */
void FixQEqReax::grow_arrays(int nmax)
{
memory->grow(s_hist,nmax,nprev,"qeq:s_hist");
memory->grow(t_hist,nmax,nprev,"qeq:t_hist");
}
/* ----------------------------------------------------------------------
copy values within fictitious charge arrays
------------------------------------------------------------------------- */
void FixQEqReax::copy_arrays(int i, int j, int delflag)
{
for (int m = 0; m < nprev; m++) {
s_hist[j][m] = s_hist[i][m];
t_hist[j][m] = t_hist[i][m];
}
}
/* ----------------------------------------------------------------------
pack values in local atom-based array for exchange with another proc
------------------------------------------------------------------------- */
int FixQEqReax::pack_exchange(int i, double *buf)
{
for (int m = 0; m < nprev; m++) buf[m] = s_hist[i][m];
for (int m = 0; m < nprev; m++) buf[nprev+m] = t_hist[i][m];
return nprev*2;
}
/* ----------------------------------------------------------------------
unpack values in local atom-based array from exchange with another proc
------------------------------------------------------------------------- */
int FixQEqReax::unpack_exchange(int nlocal, double *buf)
{
for (int m = 0; m < nprev; m++) s_hist[nlocal][m] = buf[m];
for (int m = 0; m < nprev; m++) t_hist[nlocal][m] = buf[nprev+m];
return nprev*2;
}
/* ---------------------------------------------------------------------- */
double FixQEqReax::parallel_norm( double *v, int n )
{
int i;
double my_sum, norm_sqr;
- my_sum = 0;
- for( i = 0; i < n; ++i )
- my_sum += SQR( v[i] );
+ int ii;
+ int *ilist;
+
+ if (reaxc)
+ ilist = reaxc->list->ilist;
+ else
+ ilist = list->ilist;
+
+ my_sum = 0.0;
+ norm_sqr = 0.0;
+ for( ii = 0; ii < n; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit)
+ my_sum += SQR( v[i] );
+ }
MPI_Allreduce( &my_sum, &norm_sqr, 1, MPI_DOUBLE, MPI_SUM, world );
return sqrt( norm_sqr );
}
/* ---------------------------------------------------------------------- */
-double FixQEqReax::parallel_dot( double *v1, double *v2, int n )
+double FixQEqReax::parallel_dot( double *v1, double *v2, int n)
{
int i;
double my_dot, res;
- my_dot = 0;
- res = 0;
- for( i = 0; i < n; ++i )
- my_dot += v1[i] * v2[i];
+ int ii;
+ int *ilist;
+ if (reaxc)
+ ilist = reaxc->list->ilist;
+ else
+ ilist = list->ilist;
+
+ my_dot = 0.0;
+ res = 0.0;
+ for( ii = 0; ii < n; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit)
+ my_dot += v1[i] * v2[i];
+ }
+
MPI_Allreduce( &my_dot, &res, 1, MPI_DOUBLE, MPI_SUM, world );
return res;
}
/* ---------------------------------------------------------------------- */
double FixQEqReax::parallel_vector_acc( double *v, int n )
{
int i;
double my_acc, res;
- my_acc = 0;
- for( i = 0; i < n; ++i )
- my_acc += v[i];
+ int ii;
+ int *ilist;
- MPI_Allreduce( &my_acc, &res, 1, MPI_DOUBLE, MPI_SUM, world );
+ if (reaxc)
+ ilist = reaxc->list->ilist;
+ else
+ ilist = list->ilist;
- return res;
-}
-
-/* ---------------------------------------------------------------------- */
-
-double FixQEqReax::norm( double* v1, int k )
-{
- double ret = 0;
+ my_acc = 0.0;
+ res = 0.0;
+ for( ii = 0; ii < n; ++ii ) {
+ i = ilist[ii];
+ if (atom->mask[i] & groupbit)
+ my_acc += v[i];
+ }
- for( --k; k>=0; --k )
- ret += ( v1[k] * v1[k] );
+ MPI_Allreduce( &my_acc, &res, 1, MPI_DOUBLE, MPI_SUM, world );
- return sqrt( ret );
+ return res;
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::vector_sum( double* dest, double c, double* v,
double d, double* y, int k )
{
- for( --k; k>=0; --k )
- dest[k] = c * v[k] + d * y[k];
-}
-
-/* ---------------------------------------------------------------------- */
-
-void FixQEqReax::vector_scale( double* dest, double c, double* v, int k )
-{
- for( --k; k>=0; --k )
- dest[k] = c * v[k];
-}
-
-/* ---------------------------------------------------------------------- */
-
-double FixQEqReax::dot( double* v1, double* v2, int k )
-{
- double ret = 0;
-
- for( --k; k>=0; --k )
- ret += v1[k] * v2[k];
-
- return ret;
+ int kk;
+ int *ilist;
+
+ if (reaxc)
+ ilist = reaxc->list->ilist;
+ else
+ ilist = list->ilist;
+
+ for( --k; k>=0; --k ) {
+ kk = ilist[k];
+ if (atom->mask[kk] & groupbit)
+ dest[kk] = c * v[kk] + d * y[kk];
+ }
}
/* ---------------------------------------------------------------------- */
void FixQEqReax::vector_add( double* dest, double c, double* v, int k )
{
- for( --k; k>=0; --k )
- dest[k] += c * v[k];
+ int kk;
+ int *ilist;
+
+ if (reaxc)
+ ilist = reaxc->list->ilist;
+ else
+ ilist = list->ilist;
+
+ for( --k; k>=0; --k ) {
+ kk = ilist[k];
+ if (atom->mask[kk] & groupbit)
+ dest[kk] += c * v[kk];
+ }
+
}
diff --git a/src/USER-REAXC/fix_qeq_reax.h b/src/USER-REAXC/fix_qeq_reax.h
index c2aa1cfe4..3d7eae7ce 100644
--- a/src/USER-REAXC/fix_qeq_reax.h
+++ b/src/USER-REAXC/fix_qeq_reax.h
@@ -1,145 +1,144 @@
/* -*- c++ -*- ----------------------------------------------------------
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 author: Hasan Metin Aktulga, Purdue University
(now at Lawrence Berkeley National Laboratory, hmaktulga@lbl.gov)
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
FixStyle(qeq/reax,FixQEqReax)
#else
#ifndef LMP_FIX_QEQ_REAX_H
#define LMP_FIX_QEQ_REAX_H
#include "fix.h"
namespace LAMMPS_NS {
class FixQEqReax : public Fix {
public:
FixQEqReax(class LAMMPS *, int, char **);
~FixQEqReax();
int setmask();
void init();
void init_list(int,class NeighList *);
void init_storage();
void setup_pre_force(int);
void pre_force(int);
void setup_pre_force_respa(int, int);
void pre_force_respa(int, int, int);
void min_setup_pre_force(int);
void min_pre_force(int);
int matvecs;
double qeq_time;
private:
int nevery,reaxflag;
int n, N, m_fill;
int n_cap, nmax, m_cap;
int pack_flag;
int nlevels_respa;
class NeighList *list;
class PairReaxC *reaxc;
double swa, swb; // lower/upper Taper cutoff radius
double Tap[8]; // Taper function
double tolerance; // tolerance for the norm of the rel residual in CG
double *chi,*eta,*gamma; // qeq parameters
double **shld;
+ bigint ngroup;
+
// fictitious charges
double *s, *t;
double **s_hist, **t_hist;
int nprev;
typedef struct{
int n, m;
int *firstnbr;
int *numnbrs;
int *jlist;
double *val;
} sparse_matrix;
sparse_matrix H;
double *Hdia_inv;
double *b_s, *b_t;
double *b_prc, *b_prm;
//CG storage
double *p, *q, *r, *d;
//GMRES storage
//double *g,*y;
//double **v;
//double **h;
//double *hc, *hs;
void pertype_parameters(char*);
void init_shielding();
void init_taper();
void allocate_storage();
void deallocate_storage();
void reallocate_storage();
void allocate_matrix();
void deallocate_matrix();
void reallocate_matrix();
void init_matvec();
void init_H();
void compute_H();
double calculate_H(double,double);
void calculate_Q();
int CG(double*,double*);
//int GMRES(double*,double*);
void sparse_matvec(sparse_matrix*,double*,double*);
int pack_comm(int, int *, double *, int, int *);
void unpack_comm(int, int, double *);
int pack_reverse_comm(int, int, double *);
void unpack_reverse_comm(int, int *, double *);
double memory_usage();
void grow_arrays(int);
void copy_arrays(int, int, int);
int pack_exchange(int, double *);
int unpack_exchange(int, double *);
double parallel_norm( double*, int );
double parallel_dot( double*, double*, int );
double parallel_vector_acc( double*, int );
- double norm(double*,int);
void vector_sum(double*,double,double*,double,double*,int);
- void vector_scale(double*,double,double*,int);
- double dot(double*,double*,int);
void vector_add(double*, double, double*,int);
};
}
#endif
#endif
diff --git a/src/USER-REAXC/fix_reaxc_species.cpp b/src/USER-REAXC/fix_reaxc_species.cpp
index d48828941..f68d92ae6 100644
--- a/src/USER-REAXC/fix_reaxc_species.cpp
+++ b/src/USER-REAXC/fix_reaxc_species.cpp
@@ -1,976 +1,977 @@
/* ----------------------------------------------------------------------
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: Ray Shan (Sandia, tnshan@sandia.gov)
Oleg Sergeev (VNIIA, sergeev@vniia.ru)
------------------------------------------------------------------------- */
#include "lmptype.h"
#include "stdlib.h"
#include "math.h"
#include "atom.h"
#include "string.h"
#include "fix_ave_atom.h"
#include "fix_reaxc_species.h"
#include "domain.h"
#include "update.h"
#include "pair_reax_c.h"
#include "modify.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "comm.h"
#include "force.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "reaxc_list.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixReaxCSpecies::FixReaxCSpecies(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 7) error->all(FLERR,"Illegal fix reax/c/species command");
force_reneighbor = 0;
vector_flag = 1;
size_vector = 2;
+ extvector = 0;
peratom_flag = 1;
size_peratom_cols = 0;
peratom_freq = 1;
MPI_Comm_rank(world,&me);
MPI_Comm_size(world,&nprocs);
ntypes = atom->ntypes;
nevery = atoi(arg[3]);
nrepeat = atoi(arg[4]);
global_freq = nfreq = atoi(arg[5]);
comm_forward = 1;
if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0)
error->all(FLERR,"Illegal fix reax/c/species command");
if (nfreq % nevery || (nrepeat-1)*nevery >= nfreq)
error->all(FLERR,"Illegal fix reax/c/species command");
// Neighbor lists must stay unchanged during averaging of bonds,
// but may be updated when no averaging is performed.
int rene_flag = 0;
if (nfreq % neighbor->every != 0 || neighbor->every < nevery * nrepeat) {
int newneighborevery = nevery * nrepeat;
while (nfreq % newneighborevery != 0 && newneighborevery <= nfreq / 2)
newneighborevery++;
if (nfreq % newneighborevery != 0)
newneighborevery = nfreq;
neighbor->every = newneighborevery;
rene_flag = 1;
}
if (neighbor->delay != 0 || neighbor->dist_check != 0) {
neighbor->delay = 0;
neighbor->dist_check = 0;
rene_flag = 1;
}
if (me == 0 && rene_flag) {
char str[128];
sprintf(str,"Resetting reneighboring criteria for fix reax/c/species");
error->warning(FLERR,str);
}
tmparg = NULL;
memory->create(tmparg,4,4,"reax/c/species:tmparg");
strcpy(tmparg[0],arg[3]);
strcpy(tmparg[1],arg[4]);
strcpy(tmparg[2],arg[5]);
if (me == 0) {
fp = fopen(arg[6],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix reax/c/species file %s",arg[6]);
error->one(FLERR,str);
}
}
x0 = NULL;
PBCconnected = NULL;
clusterID = NULL;
int ntmp = 1;
memory->create(x0,ntmp,"reax/c/species:x0");
memory->create(PBCconnected,ntmp,"reax/c/species:PBCconnected");
memory->create(clusterID,ntmp,"reax/c/species:clusterID");
vector_atom = clusterID;
BOCut = NULL;
Name = NULL;
MolName = NULL;
MolType = NULL;
NMol = NULL;
nd = NULL;
molmap = NULL;
nmax = 0;
setupflag = 0;
// set default bond order cutoff
int n, i, j, itype, jtype;
double bo_cut;
bg_cut = 0.30;
n = ntypes+1;
memory->create(BOCut,n,n,"reax/c/species:BOCut");
for (i = 1; i < n; i ++)
for (j = 1; j < n; j ++)
BOCut[i][j] = bg_cut;
// optional args
eletype = NULL;
ele = filepos = NULL;
eleflag = posflag = padflag = 0;
singlepos_opened = multipos_opened = 0;
multipos = 0;
posfreq = 0;
int iarg = 7;
while (iarg < narg) {
// set BO cutoff
if (strcmp(arg[iarg],"cutoff") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix reax/c/species command");
itype = atoi(arg[iarg+1]);
jtype = atoi(arg[iarg+2]);
bo_cut = atof(arg[iarg+3]);
if (itype > ntypes || jtype > ntypes)
error->all(FLERR,"Illegal fix reax/c/species command");
if (itype <= 0 || jtype <= 0)
error->all(FLERR,"Illegal fix reax/c/species command");
if (bo_cut > 1.0 || bo_cut < 0.0)
error->all(FLERR,"Illegal fix reax/c/species command");
BOCut[itype][jtype] = bo_cut;
BOCut[jtype][itype] = bo_cut;
iarg += 4;
// modify element type names
} else if (strcmp(arg[iarg],"element") == 0) {
if (iarg+ntypes+1 > narg) error->all(FLERR,"Illegal fix reax/c/species command");
eletype = (char**) malloc(ntypes*sizeof(char*));
for (int i = 0; i < ntypes; i ++) {
eletype[i] = (char*) malloc(2*sizeof(char));
strcpy(eletype[i],arg[iarg+1+i]);
}
eleflag = 1;
iarg += ntypes + 1;
// position of molecules
} else if (strcmp(arg[iarg],"position") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix reax/c/species command");
posflag = 1;
posfreq = atoi(arg[iarg+1]);
if (posfreq < nfreq || (posfreq%nfreq != 0))
error->all(FLERR,"Illegal fix reax/c/species command");
filepos = new char[255];
strcpy(filepos,arg[iarg+2]);
if (strchr(filepos,'*')) {
multipos = 1;
} else {
if (me == 0) {
pos = fopen(filepos, "w");
if (pos == NULL) error->one(FLERR,"Cannot open fix reax/c/species position file");
}
singlepos_opened = 1;
multipos = 0;
}
iarg += 3;
} else error->all(FLERR,"Illegal fix reax/c/species command");
}
if (!eleflag) {
memory->create(ele,ntypes+1,"reax/c/species:ele");
ele[0]='C';
if (ntypes > 1)
ele[1]='H';
if (ntypes > 2)
ele[2]='O';
if (ntypes > 3)
ele[3]='N';
}
vector_nmole = 0;
vector_nspec = 0;
}
/* ---------------------------------------------------------------------- */
FixReaxCSpecies::~FixReaxCSpecies()
{
memory->destroy(ele);
memory->destroy(BOCut);
memory->destroy(clusterID);
memory->destroy(PBCconnected);
memory->destroy(x0);
memory->destroy(nd);
memory->destroy(Name);
memory->destroy(NMol);
memory->destroy(MolType);
memory->destroy(MolName);
memory->destroy(tmparg);
if (filepos)
delete [] filepos;
if (me == 0) fclose(fp);
if (me == 0 && posflag && multipos_opened) fclose(pos);
modify->delete_compute("SPECATOM");
modify->delete_fix("SPECBOND");
}
/* ---------------------------------------------------------------------- */
int FixReaxCSpecies::setmask()
{
int mask = 0;
mask |= POST_INTEGRATE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::setup(int vflag)
{
ntotal = static_cast<int> (atom->natoms);
memory->create(Name,ntypes,"reax/c/species:Name");
post_integrate();
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::init()
{
if (atom->tag_enable == 0)
error->all(FLERR,"Cannot use fix reax/c/species unless atoms have IDs");
reaxc = (PairReaxC *) force->pair_match("reax/c",1);
if (reaxc == NULL) error->all(FLERR,"Cannot use fix reax/c/species without "
"pair_style reax/c");
reaxc->fixspecies_flag = 1;
nvalid = update->ntimestep+nfreq;
// check if this fix has been called twice
int count = 0;
for (int i = 0; i < modify->nfix; i++)
if (strcmp(modify->fix[i]->style,"reax/c/species") == 0) count++;
if (count > 1 && comm->me == 0)
error->warning(FLERR,"More than one fix reax/c/species");
if (!setupflag) {
// create a compute to store properties
create_compute();
// create a fix to point to fix_ave_atom for averaging stored properties
create_fix();
setupflag = 1;
}
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::create_compute()
{
int narg;
char **args;
narg = 34;
args = new char*[narg];
args[0] = (char *) "SPECATOM";
args[1] = (char *) "all";
args[2] = (char *) "SPEC/ATOM";
args[3] = (char *) "q";
args[4] = (char *) "x";
args[5] = (char *) "y";
args[6] = (char *) "z";
args[7] = (char *) "vx";
args[8] = (char *) "vy";
args[9] = (char *) "vz";
args[10] = (char *) "abo01";
args[11] = (char *) "abo02";
args[12] = (char *) "abo03";
args[13] = (char *) "abo04";
args[14] = (char *) "abo05";
args[15] = (char *) "abo06";
args[16] = (char *) "abo07";
args[17] = (char *) "abo08";
args[18] = (char *) "abo09";
args[19] = (char *) "abo10";
args[20] = (char *) "abo11";
args[21] = (char *) "abo12";
args[22] = (char *) "abo13";
args[23] = (char *) "abo14";
args[24] = (char *) "abo15";
args[25] = (char *) "abo16";
args[26] = (char *) "abo17";
args[27] = (char *) "abo18";
args[28] = (char *) "abo19";
args[29] = (char *) "abo20";
args[30] = (char *) "abo21";
args[31] = (char *) "abo22";
args[32] = (char *) "abo23";
args[33] = (char *) "abo24";
modify->add_compute(narg,args);
delete [] args;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::create_fix()
{
int narg;
char **args;
narg = 37;
args = new char*[narg];
args[0] = (char *) "SPECBOND";
args[1] = (char *) "all";
args[2] = (char *) "ave/atom";
args[3] = tmparg[0];
args[4] = tmparg[1];
args[5] = tmparg[2];
args[6] = (char *) "c_SPECATOM[1]"; // q, array_atoms[i][0]
args[7] = (char *) "c_SPECATOM[2]"; // x, 1
args[8] = (char *) "c_SPECATOM[3]"; // y, 2
args[9] = (char *) "c_SPECATOM[4]"; // z, 3
args[10] = (char *) "c_SPECATOM[5]"; // vx, 4
args[11] = (char *) "c_SPECATOM[6]"; // vy, 5
args[12] = (char *) "c_SPECATOM[7]"; // vz, 6
args[13] = (char *) "c_SPECATOM[8]"; // abo01, 7
args[14] = (char *) "c_SPECATOM[9]";
args[15] = (char *) "c_SPECATOM[10]";
args[16] = (char *) "c_SPECATOM[11]";
args[17] = (char *) "c_SPECATOM[12]";
args[18] = (char *) "c_SPECATOM[13]";
args[19] = (char *) "c_SPECATOM[14]";
args[20] = (char *) "c_SPECATOM[15]";
args[21] = (char *) "c_SPECATOM[16]";
args[22] = (char *) "c_SPECATOM[17]";
args[23] = (char *) "c_SPECATOM[18]";
args[24] = (char *) "c_SPECATOM[19]"; // abo12, 18
args[25] = (char *) "c_SPECATOM[20]";
args[26] = (char *) "c_SPECATOM[21]";
args[27] = (char *) "c_SPECATOM[22]";
args[28] = (char *) "c_SPECATOM[23]";
args[29] = (char *) "c_SPECATOM[24]";
args[30] = (char *) "c_SPECATOM[25]";
args[31] = (char *) "c_SPECATOM[26]";
args[32] = (char *) "c_SPECATOM[27]";
args[33] = (char *) "c_SPECATOM[28]";
args[34] = (char *) "c_SPECATOM[29]";
args[35] = (char *) "c_SPECATOM[30]";
args[36] = (char *) "c_SPECATOM[31]";
modify->add_fix(narg,args);
f_SPECBOND = (FixAveAtom *) modify->fix[modify->nfix-1];
delete [] args;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::init_list(int id, NeighList *ptr)
{
list = ptr;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::post_integrate()
{
Output_ReaxC_Bonds(update->ntimestep,fp);
if (me == 0) fflush(fp);
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::Output_ReaxC_Bonds(bigint ntimestep, FILE *fp)
{
int Nmole, Nspec;
// point to fix_ave_atom
f_SPECBOND->end_of_step();
if (ntimestep != nvalid) return;
nlocal = atom->nlocal;
if (atom->nmax > nmax) {
nmax = atom->nmax;
memory->destroy(x0);
memory->destroy(PBCconnected);
memory->destroy(clusterID);
memory->create(x0,nmax,"reax/c/species:x0");
memory->create(PBCconnected,nmax,"reax/c/species:PBCconnected");
memory->create(clusterID,nmax,"reax/c/species:clusterID");
vector_atom = clusterID;
}
for (int i = 0; i < nmax; i++) {
PBCconnected[i] = 0;
x0[i].x = x0[i].y = x0[i].z = 0.0;
}
Nmole = Nspec = 0;
FindMolecule();
SortMolecule (Nmole);
FindSpecies(Nmole, Nspec);
vector_nmole = Nmole;
vector_nspec = Nspec;
if (me == 0 && ntimestep >= 0)
WriteFormulas (Nmole, Nspec);
if (posflag && ((ntimestep)%posfreq==0)) {
WritePos(Nmole, Nspec);
if (me == 0) fflush(pos);
}
nvalid += nfreq;
}
/* ---------------------------------------------------------------------- */
AtomCoord chAnchor(AtomCoord in1, AtomCoord in2)
{
if (in1.x < in2.x)
return in1;
return in2;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::FindMolecule ()
{
int i,j,ii,jj,inum,itype,jtype,loop,looptot;
int change,done,anychange;
int *mask = atom->mask;
int *ilist;
double bo_tmp,bo_cut;
double **spec_atom = f_SPECBOND->array_atom;
inum = reaxc->list->inum;
ilist = reaxc->list->ilist;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (mask[i] & groupbit) {
clusterID[i] = atom->tag[i];
x0[i].x = spec_atom[i][1];
x0[i].y = spec_atom[i][2];
x0[i].z = spec_atom[i][3];
}
else clusterID[i] = 0.0;
}
loop = 0;
while (1) {
comm->forward_comm_fix(this);
loop ++;
change = 0;
while (1) {
done = 1;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
if (!(mask[i] & groupbit)) continue;
itype = atom->type[i];
for (jj = 0; jj < MAXSPECBOND; jj++) {
j = reaxc->tmpid[i][jj];
if (j < i) continue;
if (!(mask[j] & groupbit)) continue;
if (clusterID[i] == clusterID[j] && PBCconnected[i] == PBCconnected[j]
&& x0[i].x == x0[j].x && x0[i].y == x0[j].y && x0[i].z == x0[j].z) continue;
jtype = atom->type[j];
bo_cut = BOCut[itype][jtype];
bo_tmp = spec_atom[i][jj+7];
if (bo_tmp > bo_cut) {
clusterID[i] = clusterID[j] = MIN(clusterID[i], clusterID[j]);
PBCconnected[i] = PBCconnected[j] = MAX(PBCconnected[i], PBCconnected[j]);
x0[i] = x0[j] = chAnchor(x0[i], x0[j]);
if ((fabs(spec_atom[i][1] - spec_atom[j][1]) > reaxc->control->bond_cut)
|| (fabs(spec_atom[i][2] - spec_atom[j][2]) > reaxc->control->bond_cut)
|| (fabs(spec_atom[i][3] - spec_atom[j][3]) > reaxc->control->bond_cut))
PBCconnected[i] = PBCconnected[j] = 1;
done = 0;
}
}
}
if (!done) change = 1;
if (done) break;
}
MPI_Allreduce(&change,&anychange,1,MPI_INT,MPI_MAX,world);
if (!anychange) break;
MPI_Allreduce(&loop,&looptot,1,MPI_INT,MPI_SUM,world);
if (looptot >= 400*nprocs) break;
}
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::SortMolecule(int &Nmole)
{
memory->destroy(molmap);
molmap = NULL;
int n, idlo, idhi;
int *mask =atom->mask;
int lo = ntotal;
int hi = -ntotal;
int flag = 0;
for (n = 0; n < nlocal; n++) {
if (!(mask[n] & groupbit)) continue;
if (clusterID[n] == 0.0) flag = 1;
lo = MIN(lo,nint(clusterID[n]));
hi = MAX(hi,nint(clusterID[n]));
}
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && me == 0)
error->warning(FLERR,"Atom with cluster ID = 0 included in "
"fix reax/c/species group");
MPI_Allreduce(&lo,&idlo,1,MPI_INT,MPI_MIN,world);
MPI_Allreduce(&hi,&idhi,1,MPI_INT,MPI_MAX,world);
if (idlo == ntotal)
if (me == 0)
error->warning(FLERR,"Atom with cluster ID = maxmol "
"included in fix reax/c/species group");
int nlen = idhi - idlo + 1;
memory->create(molmap,nlen,"reax/c/species:molmap");
for (n = 0; n < nlen; n++) molmap[n] = 0;
for (n = 0; n < nlocal; n++) {
if (!(mask[n] & groupbit)) continue;
molmap[nint(clusterID[n])-idlo] = 1;
}
int *molmapall;
memory->create(molmapall,nlen,"reax/c/species:molmapall");
MPI_Allreduce(molmap,molmapall,nlen,MPI_INT,MPI_MAX,world);
Nmole = 0;
for (n = 0; n < nlen; n++) {
if (molmapall[n]) molmap[n] = Nmole++;
else molmap[n] = -1;
}
memory->destroy(molmapall);
flag = 0;
for (n = 0; n < nlocal; n++) {
if (mask[n] & groupbit) continue;
if (nint(clusterID[n]) < idlo || nint(clusterID[n]) > idhi) continue;
if (molmap[nint(clusterID[n])-idlo] >= 0) flag = 1;
}
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->warning(FLERR,"One or more cluster has atoms not in group");
for (n = 0; n < nlocal; n++) {
if (!(mask[n] & groupbit)) continue;
clusterID[n] = molmap[nint(clusterID[n])-idlo] + 1;
}
memory->destroy(molmap);
molmap = NULL;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::FindSpecies(int Nmole, int &Nspec)
{
int k, l, m, n, itype, cid;
int flag_identity, flag_mol, flag_spec;
int flag_tmp;
int *mask =atom->mask;
int *Nameall, *NMolall;
memory->destroy(MolName);
MolName = NULL;
memory->create(MolName,Nmole*(ntypes+1),"reax/c/species:MolName");
memory->destroy(NMol);
NMol = NULL;
memory->create(NMol,Nmole,"reax/c/species:NMol");
for (m = 0; m < Nmole; m ++)
NMol[m] = 1;
memory->create(Nameall,ntypes,"reax/c/species:Nameall");
memory->create(NMolall,Nmole,"reax/c/species:NMolall");
for (m = 1, Nspec = 0; m <= Nmole; m ++) {
for (n = 0; n < ntypes; n ++) Name[n] = 0;
for (n = 0, flag_mol = 0; n < nlocal; n ++) {
if (!(mask[n] & groupbit)) continue;
cid = nint(clusterID[n]);
if (cid == m) {
itype = atom->type[n]-1;
Name[itype] ++;
flag_mol = 1;
}
}
MPI_Allreduce(&flag_mol,&flag_tmp,1,MPI_INT,MPI_MAX,world);
flag_mol = flag_tmp;
MPI_Allreduce(Name,Nameall,ntypes,MPI_INT,MPI_SUM,world);
for (n = 0; n < ntypes; n++) Name[n] = Nameall[n];
if (flag_mol == 1) {
flag_identity = 1;
for (k = 0; k < Nspec; k ++) {
flag_spec=0;
for (l = 0; l < ntypes; l ++)
if (MolName[ntypes*k+l] != Name[l]) flag_spec = 1;
if (flag_spec == 0) NMol[k] ++;
flag_identity *= flag_spec;
}
if (Nspec == 0 || flag_identity == 1) {
for (l = 0; l < ntypes; l ++)
MolName[ntypes*Nspec+l] = Name[l];
Nspec ++;
}
}
}
memory->destroy(NMolall);
memory->destroy(Nameall);
memory->destroy(nd);
nd = NULL;
memory->create(nd,Nspec,"reax/c/species:nd");
memory->destroy(MolType);
MolType = NULL;
memory->create(MolType,Nspec*(ntypes+2),"reax/c/species:MolType");
}
/* ---------------------------------------------------------------------- */
int FixReaxCSpecies::CheckExistence(int id, int ntypes)
{
int i, j, molid, flag;
for (i = 0; i < Nmoltype; i ++) {
flag = 0;
for (j = 0; j < ntypes; j ++) {
molid = MolType[ntypes * i + j];
if (molid != MolName[ntypes * id + j]) flag = 1;
}
if (flag == 0) return i;
}
for (i = 0; i < ntypes; i ++)
MolType[ntypes * Nmoltype + i] = MolName[ntypes *id + i];
Nmoltype ++;
return Nmoltype - 1;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::WriteFormulas(int Nmole, int Nspec)
{
int i, j, itemp;
bigint ntimestep = update->ntimestep;
fprintf(fp,"# Timestep No_Moles No_Specs ");
Nmoltype = 0;
for (i = 0; i < Nspec; i ++)
nd[i] = CheckExistence(i, ntypes);
for (i = 0; i < Nmoltype; i ++) {
for (j = 0;j < ntypes; j ++) {
itemp = MolType[ntypes * i + j];
if (itemp != 0) {
if (eletype) fprintf(fp,"%s",eletype[j]);
else fprintf(fp,"%c",ele[j]);
if (itemp != 1) fprintf(fp,"%d",itemp);
}
}
fprintf(fp,"\t");
}
fprintf(fp,"\n");
fprintf(fp,BIGINT_FORMAT,ntimestep);
fprintf(fp,"%11d%11d\t",Nmole,Nspec);
for (i = 0; i < Nmoltype; i ++)
fprintf(fp," %d\t",NMol[i]);
fprintf(fp,"\n");
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::OpenPos()
{
char *filecurrent;
bigint ntimestep = update->ntimestep;
filecurrent = (char*) malloc((strlen(filepos)+16)*sizeof(char));
char *ptr = strchr(filepos,'*');
*ptr = '\0';
if (padflag == 0)
sprintf(filecurrent,"%s" BIGINT_FORMAT "%s",
filepos,ntimestep,ptr+1);
else {
char bif[8],pad[16];
strcpy(bif,BIGINT_FORMAT);
sprintf(pad,"%%s%%0%d%s%%s",padflag,&bif[1]);
sprintf(filecurrent,pad,filepos,ntimestep,ptr+1);
}
*ptr = '*';
if (me == 0) {
pos = fopen(filecurrent, "w");
if (pos == NULL) error->one(FLERR,"Cannot open fix reax/c/species position file");
} else pos = NULL;
multipos_opened = 1;
free(filecurrent);
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::WritePos(int Nmole, int Nspec)
{
int i, itype, cid;
int count, count_tmp, m, n, k;
int *Nameall;
int *mask =atom->mask;
double avq, avq_tmp, avx[3], avx_tmp, box[3], halfbox[3];
double **spec_atom = f_SPECBOND->array_atom;
if (multipos) OpenPos();
box[0] = domain->boxhi[0] - domain->boxlo[0];
box[1] = domain->boxhi[1] - domain->boxlo[1];
box[2] = domain->boxhi[2] - domain->boxlo[2];
for (int j = 0; j < 3; j++)
halfbox[j] = box[j] / 2;
if (me == 0) {
fprintf(pos,"Timestep "BIGINT_FORMAT " NMole %d NSpec %d xlo %f "
"xhi %f ylo %f yhi %f zlo %f zhi %f\n",
update->ntimestep,Nmole, Nspec,
domain->boxlo[0],domain->boxhi[0],
domain->boxlo[1],domain->boxhi[1],
domain->boxlo[2],domain->boxhi[2]);
fprintf(pos,"ID\tAtom_Count\tType\tAve_q\t\tCoM_x\t\tCoM_y\t\tCoM_z\n");
}
Nameall = NULL;
memory->create(Nameall,ntypes,"reax/c/species:Nameall");
for (m = 1; m <= Nmole; m ++) {
count = 0;
avq = 0.0;
for (n = 0; n < 3; n++)
avx[n] = 0.0;
for (n = 0; n < ntypes; n ++)
Name[n] = 0;
for (i = 0; i < nlocal; i ++) {
if (!(mask[i] & groupbit)) continue;
cid = nint(clusterID[i]);
if (cid == m) {
itype = atom->type[i]-1;
Name[itype] ++;
count ++;
avq += spec_atom[i][0];
if (PBCconnected[i]) {
if ((x0[i].x - spec_atom[i][1]) > halfbox[0])
spec_atom[i][1] += box[0];
if ((spec_atom[i][1] - x0[i].x) > halfbox[0])
spec_atom[i][1] -= box[0];
if ((x0[i].y - spec_atom[i][2]) > halfbox[1])
spec_atom[i][2] += box[1];
if ((spec_atom[i][2] - x0[i].y) > halfbox[1])
spec_atom[i][2] -= box[1];
if ((x0[i].z - spec_atom[i][3]) > halfbox[2])
spec_atom[i][3] += box[2];
if ((spec_atom[i][3] - x0[i].z) > halfbox[2])
spec_atom[i][3] -= box[2];
}
for (n = 0; n < 3; n++)
avx[n] += spec_atom[i][n+1];
}
}
avq_tmp = 0.0;
MPI_Allreduce(&avq,&avq_tmp,1,MPI_DOUBLE,MPI_SUM,world);
avq = avq_tmp;
for (n = 0; n < 3; n++) {
avx_tmp = 0.0;
MPI_Reduce(&avx[n],&avx_tmp,1,MPI_DOUBLE,MPI_SUM,0,world);
avx[n] = avx_tmp;
}
MPI_Reduce(&count,&count_tmp,1,MPI_INT,MPI_SUM,0,world);
count = count_tmp;
MPI_Reduce(Name,Nameall,ntypes,MPI_INT,MPI_SUM,0,world);
for (n = 0; n < ntypes; n++) Name[n] = Nameall[n];
if (me == 0) {
fprintf(pos,"%d\t%d\t",m,count);
for (n = 0; n < ntypes; n++) {
if (Name[n] != 0) {
if (eletype) fprintf(pos,"%s",eletype[n]);
else fprintf(pos,"%c",ele[n]);
if (Name[n] != 1) fprintf(pos,"%d",Name[n]);
}
}
if (count > 0) {
avq /= count;
for (k = 0; k < 3; k++) {
avx[k] /= count;
if (avx[k] >= domain->boxhi[k])
avx[k] -= box[k];
if (avx[k] < domain->boxlo[k])
avx[k] += box[k];
avx[k] -= domain->boxlo[k];
avx[k] /= box[k];
}
fprintf(pos,"\t%.8f \t%.8f \t%.8f \t%.8f",
avq,avx[0],avx[1],avx[2]);
}
fprintf(pos,"\n");
}
}
if (me == 0 && !multipos) fprintf(pos,"#\n");
memory->destroy(Nameall);
}
/* ---------------------------------------------------------------------- */
double FixReaxCSpecies::compute_vector(int n)
{
if (n == 0)
return vector_nmole;
if (n == 1)
return vector_nspec;
return 0.0;
}
/* ---------------------------------------------------------------------- */
int FixReaxCSpecies::nint(const double &r)
{
int i = 0;
if (r>0.0) i = static_cast<int>(r+0.5);
else if (r<0.0) i = static_cast<int>(r-0.5);
return i;
}
/* ---------------------------------------------------------------------- */
int FixReaxCSpecies::pack_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc)
{
int i,j,m;
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
buf[m] = clusterID[j];
buf[m+1] = (double)PBCconnected[j];
buf[m+2] = x0[j].x;
buf[m+3] = x0[j].y;
buf[m+4] = x0[j].z;
m += 5;
}
return 5;
}
/* ---------------------------------------------------------------------- */
void FixReaxCSpecies::unpack_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
for (i = first; i < last; i++) {
clusterID[i] = buf[m];
PBCconnected[i] = (int)buf[m+1];
x0[i].x = buf[m+2];
x0[i].y = buf[m+3];
x0[i].z = buf[m+4];
m += 5;
}
}
/* ---------------------------------------------------------------------- */
double FixReaxCSpecies::memory_usage()
{
double bytes;
bytes = 5*nmax*sizeof(double); // clusterID + PBCconnected + x0
return bytes;
}
/* ---------------------------------------------------------------------- */
diff --git a/src/USER-REAXC/pair_reax_c.cpp b/src/USER-REAXC/pair_reax_c.cpp
index 31c8c7f4c..48355be93 100644
--- a/src/USER-REAXC/pair_reax_c.cpp
+++ b/src/USER-REAXC/pair_reax_c.cpp
@@ -1,812 +1,833 @@
/* ----------------------------------------------------------------------
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 author: Hasan Metin Aktulga, Purdue University
(now at Lawrence Berkeley National Laboratory, hmaktulga@lbl.gov)
Per-atom energy/virial added by Ray Shan (Sandia)
Fix reax/c/bonds and fix reax/c/species for pair_style reax/c added by
Ray Shan (Sandia)
+ Hybrid and hybrid/overlay compatibility added by Ray Shan (Sandia)
------------------------------------------------------------------------- */
#include "pair_reax_c.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 "modify.h"
#include "fix.h"
#include "fix_reax_c.h"
#include "citeme.h"
#include "memory.h"
#include "error.h"
#include "reaxc_types.h"
#include "reaxc_allocate.h"
#include "reaxc_control.h"
#include "reaxc_ffield.h"
#include "reaxc_forces.h"
#include "reaxc_init_md.h"
#include "reaxc_io_tools.h"
#include "reaxc_list.h"
#include "reaxc_lookup.h"
#include "reaxc_reset_tools.h"
#include "reaxc_traj.h"
#include "reaxc_vector.h"
#include "fix_reaxc_bonds.h"
using namespace LAMMPS_NS;
static const char cite_pair_reax_c[] =
"pair reax/c command:\n\n"
"@Article{Aktulga12,\n"
" author = {H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama},\n"
" title = {Parallel reactive molecular dynamics: Numerical methods and algorithmic techniques},\n"
" journal = {Parallel Computing},\n"
" year = 2012,\n"
" volume = 38,\n"
" pages = {245--259}\n"
"}\n\n";
/* ---------------------------------------------------------------------- */
PairReaxC::PairReaxC(LAMMPS *lmp) : Pair(lmp)
{
if (lmp->citeme) lmp->citeme->add(cite_pair_reax_c);
single_enable = 0;
restartinfo = 0;
one_coeff = 1;
manybody_flag = 1;
ghostneigh = 1;
system = (reax_system *)
memory->smalloc(sizeof(reax_system),"reax:system");
control = (control_params *)
memory->smalloc(sizeof(control_params),"reax:control");
data = (simulation_data *)
memory->smalloc(sizeof(simulation_data),"reax:data");
workspace = (storage *)
memory->smalloc(sizeof(storage),"reax:storage");
lists = (reax_list *)
memory->smalloc(LIST_N * sizeof(reax_list),"reax:lists");
out_control = (output_controls *)
memory->smalloc(sizeof(output_controls),"reax:out_control");
mpi_data = (mpi_datatypes *)
memory->smalloc(sizeof(mpi_datatypes),"reax:mpi");
MPI_Comm_rank(world,&system->my_rank);
system->my_coords[0] = 0;
system->my_coords[1] = 0;
system->my_coords[2] = 0;
system->num_nbrs = 0;
system->n = 0; // my atoms
system->N = 0; // mine + ghosts
system->bigN = 0; // all atoms in the system
system->local_cap = 0;
system->total_cap = 0;
system->gcell_cap = 0;
system->bndry_cuts.ghost_nonb = 0;
system->bndry_cuts.ghost_hbond = 0;
system->bndry_cuts.ghost_bond = 0;
system->bndry_cuts.ghost_cutoff = 0;
system->my_atoms = NULL;
system->pair_ptr = this;
fix_reax = NULL;
tmpid = NULL;
tmpbo = NULL;
nextra = 14;
pvector = new double[nextra];
setup_flag = 0;
fixspecies_flag = 0;
nmax = 0;
}
/* ---------------------------------------------------------------------- */
PairReaxC::~PairReaxC()
{
if (fix_reax) modify->delete_fix("REAXC");
if (setup_flag) {
Close_Output_Files( system, control, out_control, mpi_data );
// deallocate reax data-structures
if( control->tabulate ) Deallocate_Lookup_Tables( system );
if( control->hbond_cut > 0 ) Delete_List( lists+HBONDS, world );
Delete_List( lists+BONDS, world );
Delete_List( lists+THREE_BODIES, world );
Delete_List( lists+FAR_NBRS, world );
DeAllocate_Workspace( control, workspace );
DeAllocate_System( system );
}
memory->destroy( system );
memory->destroy( control );
memory->destroy( data );
memory->destroy( workspace );
memory->destroy( lists );
memory->destroy( out_control );
memory->destroy( mpi_data );
// deallocate interface storage
if( allocated ) {
memory->destroy(setflag);
memory->destroy(cutsq);
memory->destroy(cutghost);
delete [] map;
delete [] chi;
delete [] eta;
delete [] gamma;
}
memory->destroy(tmpid);
memory->destroy(tmpbo);
delete [] pvector;
}
/* ---------------------------------------------------------------------- */
void PairReaxC::allocate( )
{
allocated = 1;
int n = atom->ntypes;
memory->create(setflag,n+1,n+1,"pair:setflag");
memory->create(cutsq,n+1,n+1,"pair:cutsq");
memory->create(cutghost,n+1,n+1,"pair:cutghost");
map = new int[n+1];
chi = new double[n+1];
eta = new double[n+1];
gamma = new double[n+1];
}
/* ---------------------------------------------------------------------- */
void PairReaxC::settings(int narg, char **arg)
{
if (narg < 1) error->all(FLERR,"Illegal pair_style command");
// read name of control file or use default controls
if (strcmp(arg[0],"NULL") == 0) {
strcpy( control->sim_name, "simulate" );
control->ensemble = 0;
out_control->energy_update_freq = 0;
control->tabulate = 0;
control->reneighbor = 1;
control->vlist_cut = control->nonb_cut;
control->bond_cut = 5.;
control->hbond_cut = 7.50;
control->thb_cut = 0.001;
control->thb_cutsq = 0.00001;
control->bg_cut = 0.3;
out_control->write_steps = 0;
out_control->traj_method = 0;
strcpy( out_control->traj_title, "default_title" );
out_control->atom_info = 0;
out_control->bond_info = 0;
out_control->angle_info = 0;
} else Read_Control_File(arg[0], control, out_control);
// default values
qeqflag = 1;
control->lgflag = 0;
system->mincap = MIN_CAP;
system->safezone = SAFE_ZONE;
system->saferzone = SAFER_ZONE;
// process optional keywords
int iarg = 1;
while (iarg < narg) {
if (strcmp(arg[iarg],"checkqeq") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
if (strcmp(arg[iarg+1],"yes") == 0) qeqflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) qeqflag = 0;
else error->all(FLERR,"Illegal pair_style reax/c command");
iarg += 2;
} else if (strcmp(arg[iarg],"lgvdw") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
if (strcmp(arg[iarg+1],"yes") == 0) control->lgflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) control->lgflag = 0;
else error->all(FLERR,"Illegal pair_style reax/c command");
iarg += 2;
} else if (strcmp(arg[iarg],"safezone") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
system->safezone = force->numeric(FLERR,arg[iarg+1]);
if (system->safezone < 0.0)
error->all(FLERR,"Illegal pair_style reax/c safezone command");
system->saferzone = system->safezone + 0.2;
iarg += 2;
} else if (strcmp(arg[iarg],"mincap") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
system->mincap = force->inumeric(FLERR,arg[iarg+1]);
if (system->mincap < 0)
error->all(FLERR,"Illegal pair_style reax/c mincap command");
iarg += 2;
} else error->all(FLERR,"Illegal pair_style reax/c command");
}
// LAMMPS is responsible for generating nbrs
control->reneighbor = 1;
}
/* ---------------------------------------------------------------------- */
void PairReaxC::coeff( int nargs, char **args )
{
if (!allocated) allocate();
if (nargs != 3 + atom->ntypes)
error->all(FLERR,"Incorrect args for pair coefficients");
// insure I,J args are * *
if (strcmp(args[0],"*") != 0 || strcmp(args[1],"*") != 0)
error->all(FLERR,"Incorrect args for pair coefficients");
// read ffield file
Read_Force_Field(args[2], &(system->reax_param), control);
// read args that map atom types to elements in potential file
// map[i] = which element the Ith atom type is, -1 if NULL
- int itmp;
+ int itmp = 0;
int nreax_types = system->reax_param.num_atom_types;
for (int i = 3; i < nargs; i++) {
if (strcmp(args[i],"NULL") == 0) {
map[i-2] = -1;
+ itmp ++;
continue;
}
}
int n = atom->ntypes;
// pair_coeff element map
- itmp = 0;
for (int i = 3; i < nargs; i++)
for (int j = 0; j < nreax_types; j++)
if (strcasecmp(args[i],system->reax_param.sbp[j].name) == 0) {
map[i-2] = j;
itmp ++;
}
// error check
if (itmp != n)
error->all(FLERR,"Non-existent ReaxFF type");
+ for (int i = 1; i <= n; i++)
+ for (int j = i; j <= n; j++)
+ setflag[i][j] = 0;
+
+ // set setflag i,j for type pairs where both are mapped to elements
+
int count = 0;
for (int i = 1; i <= n; i++)
- for (int j = i; j <= n; j++) {
- setflag[i][j] = 1;
- count++;
- }
+ for (int j = i; j <= n; j++)
+ if (map[i] >= 0 && map[j] >= 0) {
+ setflag[i][j] = 1;
+ count++;
+ }
if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients");
+
}
/* ---------------------------------------------------------------------- */
void PairReaxC::init_style( )
{
if (!atom->q_flag) error->all(FLERR,"Pair reax/c requires atom attribute q");
// firstwarn = 1;
int iqeq;
for (iqeq = 0; iqeq < modify->nfix; iqeq++)
if (strcmp(modify->fix[iqeq]->style,"qeq/reax") == 0) break;
if (iqeq == modify->nfix && qeqflag == 1)
error->all(FLERR,"Pair reax/c requires use of fix qeq/reax");
system->n = atom->nlocal; // my atoms
system->N = atom->nlocal + atom->nghost; // mine + ghosts
system->bigN = static_cast<int> (atom->natoms); // all atoms in the system
system->wsize = comm->nprocs;
system->big_box.V = 0;
system->big_box.box_norms[0] = 0;
system->big_box.box_norms[1] = 0;
system->big_box.box_norms[2] = 0;
if (atom->tag_enable == 0)
error->all(FLERR,"Pair style reax/c requires atom IDs");
if (force->newton_pair == 0)
error->all(FLERR,"Pair style reax/c requires newton pair on");
// need a half neighbor list w/ Newton off and ghost neighbors
// built whenever re-neighboring occurs
int irequest = neighbor->request(this);
neighbor->requests[irequest]->newton = 2;
neighbor->requests[irequest]->ghost = 1;
cutmax = MAX3(control->nonb_cut, control->hbond_cut, 2*control->bond_cut);
for( int i = 0; i < LIST_N; ++i )
lists[i].allocated = 0;
if (fix_reax == NULL) {
char **fixarg = new char*[3];
fixarg[0] = (char *) "REAXC";
fixarg[1] = (char *) "all";
fixarg[2] = (char *) "REAXC";
modify->add_fix(3,fixarg);
delete [] fixarg;
fix_reax = (FixReaxC *) modify->fix[modify->nfix-1];
}
+
}
/* ---------------------------------------------------------------------- */
void PairReaxC::setup( )
{
int oldN;
int mincap = system->mincap;
double safezone = system->safezone;
system->n = atom->nlocal; // my atoms
system->N = atom->nlocal + atom->nghost; // mine + ghosts
oldN = system->N;
system->bigN = static_cast<int> (atom->natoms); // all atoms in the system
if (setup_flag == 0) {
setup_flag = 1;
int *num_bonds = fix_reax->num_bonds;
int *num_hbonds = fix_reax->num_hbonds;
control->vlist_cut = neighbor->cutneighmax;
// determine the local and total capacity
system->local_cap = MAX( (int)(system->n * safezone), mincap );
system->total_cap = MAX( (int)(system->N * safezone), mincap );
// initialize my data structures
PreAllocate_Space( system, control, workspace, world );
write_reax_atoms();
int num_nbrs = estimate_reax_lists();
if(!Make_List(system->total_cap, num_nbrs, TYP_FAR_NEIGHBOR,
lists+FAR_NBRS, world))
error->all(FLERR,"Pair reax/c problem in far neighbor list");
write_reax_lists();
Initialize( system, control, data, workspace, &lists, out_control,
mpi_data, world );
for( int k = 0; k < system->N; ++k ) {
num_bonds[k] = system->my_atoms[k].num_bonds;
num_hbonds[k] = system->my_atoms[k].num_hbonds;
}
} else {
// fill in reax datastructures
write_reax_atoms();
// reset the bond list info for new atoms
for(int k = oldN; k < system->N; ++k)
Set_End_Index( k, Start_Index( k, lists+BONDS ), lists+BONDS );
// check if I need to shrink/extend my data-structs
ReAllocate( system, control, data, workspace, &lists, mpi_data );
}
+
+ ngroup = 0;
+ int ngroup_sum = 0;
+ for (int i = 0; i < list->inum; i++) {
+ ngroup ++;
+ }
+ MPI_Allreduce( &ngroup, &ngroup_sum, 1, MPI_INT, MPI_SUM, world );
+ ngroup = ngroup_sum;
+
}
/* ---------------------------------------------------------------------- */
double PairReaxC::init_one(int i, int j)
{
+ if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set");
+
cutghost[i][j] = cutghost[j][i] = cutmax;
return cutmax;
}
/* ---------------------------------------------------------------------- */
void PairReaxC::compute(int eflag, int vflag)
{
double evdwl,ecoul;
double t_start, t_end;
// communicate num_bonds once every reneighboring
// 2 num arrays stored by fix, grab ptr to them
if (neighbor->ago == 0) comm->forward_comm_fix(fix_reax);
int *num_bonds = fix_reax->num_bonds;
int *num_hbonds = fix_reax->num_hbonds;
evdwl = ecoul = 0.0;
if (eflag || vflag) ev_setup(eflag,vflag);
else ev_unset();
if (vflag_global) control->virial = 1;
else control->virial = 0;
system->n = atom->nlocal; // my atoms
system->N = atom->nlocal + atom->nghost; // mine + ghosts
system->bigN = static_cast<int> (atom->natoms); // all atoms in the system
system->big_box.V = 0;
system->big_box.box_norms[0] = 0;
system->big_box.box_norms[1] = 0;
system->big_box.box_norms[2] = 0;
if( comm->me == 0 ) t_start = MPI_Wtime();
// setup data structures
setup();
Reset( system, control, data, workspace, &lists, world );
workspace->realloc.num_far = write_reax_lists();
// timing for filling in the reax lists
if( comm->me == 0 ) {
t_end = MPI_Wtime();
data->timing.nbrs = t_end - t_start;
}
// forces
Compute_Forces(system,control,data,workspace,&lists,out_control,mpi_data);
- read_reax_forces();
+ read_reax_forces(vflag);
for(int k = 0; k < system->N; ++k) {
num_bonds[k] = system->my_atoms[k].num_bonds;
num_hbonds[k] = system->my_atoms[k].num_hbonds;
}
// energies and pressure
if (eflag_global) {
evdwl += data->my_en.e_bond;
evdwl += data->my_en.e_ov;
evdwl += data->my_en.e_un;
evdwl += data->my_en.e_lp;
evdwl += data->my_en.e_ang;
evdwl += data->my_en.e_pen;
evdwl += data->my_en.e_coa;
evdwl += data->my_en.e_hb;
evdwl += data->my_en.e_tor;
evdwl += data->my_en.e_con;
evdwl += data->my_en.e_vdW;
ecoul += data->my_en.e_ele;
ecoul += data->my_en.e_pol;
// eng_vdwl += evdwl;
// eng_coul += ecoul;
// Store the different parts of the energy
// in a list for output by compute pair command
pvector[0] = data->my_en.e_bond;
pvector[1] = data->my_en.e_ov + data->my_en.e_un;
pvector[2] = data->my_en.e_lp;
pvector[3] = 0.0;
pvector[4] = data->my_en.e_ang;
pvector[5] = data->my_en.e_pen;
pvector[6] = data->my_en.e_coa;
pvector[7] = data->my_en.e_hb;
pvector[8] = data->my_en.e_tor;
pvector[9] = data->my_en.e_con;
pvector[10] = data->my_en.e_vdW;
pvector[11] = data->my_en.e_ele;
pvector[12] = 0.0;
pvector[13] = data->my_en.e_pol;
}
if (vflag_fdotr) virial_fdotr_compute();
// Set internal timestep counter to that of LAMMPS
data->step = update->ntimestep;
Output_Results( system, control, data, &lists, out_control, mpi_data );
// populate tmpid and tmpbo arrays for fix reax/c/species
int i, j;
if(fixspecies_flag) {
if (system->N > nmax) {
memory->destroy(tmpid);
memory->destroy(tmpbo);
nmax = system->N;
memory->create(tmpid,nmax,MAXSPECBOND,"pair:tmpid");
memory->create(tmpbo,nmax,MAXSPECBOND,"pair:tmpbo");
}
for (i = 0; i < system->N; i ++)
for (j = 0; j < MAXSPECBOND; j ++) {
tmpbo[i][j] = 0.0;
tmpid[i][j] = 0;
}
FindBond();
}
}
/* ---------------------------------------------------------------------- */
void PairReaxC::write_reax_atoms()
{
int *num_bonds = fix_reax->num_bonds;
int *num_hbonds = fix_reax->num_hbonds;
if (system->N > system->total_cap)
error->all(FLERR,"Too many ghost atoms");
for( int i = 0; i < system->N; ++i ){
system->my_atoms[i].orig_id = atom->tag[i];
system->my_atoms[i].type = map[atom->type[i]];
system->my_atoms[i].x[0] = atom->x[i][0];
system->my_atoms[i].x[1] = atom->x[i][1];
system->my_atoms[i].x[2] = atom->x[i][2];
system->my_atoms[i].q = atom->q[i];
system->my_atoms[i].num_bonds = num_bonds[i];
system->my_atoms[i].num_hbonds = num_hbonds[i];
}
}
/* ---------------------------------------------------------------------- */
void PairReaxC::get_distance( rvec xj, rvec xi, double *d_sqr, rvec *dvec )
{
(*dvec)[0] = xj[0] - xi[0];
(*dvec)[1] = xj[1] - xi[1];
(*dvec)[2] = xj[2] - xi[2];
*d_sqr = SQR((*dvec)[0]) + SQR((*dvec)[1]) + SQR((*dvec)[2]);
}
/* ---------------------------------------------------------------------- */
void PairReaxC::set_far_nbr( far_neighbor_data *fdest,
int j, double d, rvec dvec )
{
fdest->nbr = j;
fdest->d = d;
rvec_Copy( fdest->dvec, dvec );
ivec_MakeZero( fdest->rel_box );
}
/* ---------------------------------------------------------------------- */
int PairReaxC::estimate_reax_lists()
{
int itr_i, itr_j, i, j;
int num_nbrs, num_marked;
int *ilist, *jlist, *numneigh, **firstneigh, *marked;
double d_sqr;
rvec dvec;
double *dist, **x;
int mincap = system->mincap;
double safezone = system->safezone;
x = atom->x;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
num_nbrs = 0;
num_marked = 0;
marked = (int*) calloc( system->N, sizeof(int) );
- dist = (double*) calloc( system->N, sizeof(double) );
- int numall = list->inum + list->gnum;
+ int inum = list->inum;
+ int gnum = list->gnum;
+ int numall = inum + gnum;
- for( itr_i = 0; itr_i < numall; ++itr_i ){
+ for( itr_i = 0; itr_i < inum+gnum; ++itr_i ){
i = ilist[itr_i];
marked[i] = 1;
++num_marked;
jlist = firstneigh[i];
for( itr_j = 0; itr_j < numneigh[i]; ++itr_j ){
j = jlist[itr_j];
j &= NEIGHMASK;
get_distance( x[j], x[i], &d_sqr, &dvec );
if( d_sqr <= SQR(control->nonb_cut) )
++num_nbrs;
}
}
free( marked );
- free( dist );
return static_cast<int> (MAX( num_nbrs*safezone, mincap*MIN_NBRS ));
}
/* ---------------------------------------------------------------------- */
int PairReaxC::write_reax_lists()
{
- int itr_i, itr_j, i, j;
+ int itr_i, itr_j, itr_g, i, j, g, flag;
int nlocal, nghost, num_nbrs;
- int *ilist, *jlist, *numneigh, **firstneigh, *marked;
- double d_sqr;
- rvec dvec;
- double *dist, **x;
+ int *ilist, *jlist, *numneigh, **firstneigh;
+ double d_sqr, g_d, g_d_sqr;
+ rvec dvec, g_dvec;
+ double *dist, **x, SMALL = 0.0001;
reax_list *far_nbrs;
far_neighbor_data *far_list;
x = atom->x;
nlocal = atom->nlocal;
nghost = atom->nghost;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
far_nbrs = lists + FAR_NBRS;
far_list = far_nbrs->select.far_nbr_list;
num_nbrs = 0;
- marked = (int*) calloc( system->N, sizeof(int) );
dist = (double*) calloc( system->N, sizeof(double) );
- int numall = list->inum + list->gnum;
+ int inum = list->inum;
+ int gnum = list->gnum;
+ int numall = inum + gnum;
- for( itr_i = 0; itr_i < numall; ++itr_i ){
+ for( itr_i = 0; itr_i < inum+gnum; ++itr_i ){
i = ilist[itr_i];
- marked[i] = 1;
jlist = firstneigh[i];
Set_Start_Index( i, num_nbrs, far_nbrs );
for( itr_j = 0; itr_j < numneigh[i]; ++itr_j ){
j = jlist[itr_j];
j &= NEIGHMASK;
get_distance( x[j], x[i], &d_sqr, &dvec );
if( d_sqr <= (control->nonb_cut*control->nonb_cut) ){
dist[j] = sqrt( d_sqr );
set_far_nbr( &far_list[num_nbrs], j, dist[j], dvec );
++num_nbrs;
}
}
Set_End_Index( i, num_nbrs, far_nbrs );
}
- free( marked );
free( dist );
return num_nbrs;
}
/* ---------------------------------------------------------------------- */
-void PairReaxC::read_reax_forces()
+void PairReaxC::read_reax_forces(int vflag)
{
for( int i = 0; i < system->N; ++i ) {
system->my_atoms[i].f[0] = workspace->f[i][0];
system->my_atoms[i].f[1] = workspace->f[i][1];
system->my_atoms[i].f[2] = workspace->f[i][2];
- atom->f[i][0] = -workspace->f[i][0];
- atom->f[i][1] = -workspace->f[i][1];
- atom->f[i][2] = -workspace->f[i][2];
+ atom->f[i][0] += -workspace->f[i][0];
+ atom->f[i][1] += -workspace->f[i][1];
+ atom->f[i][2] += -workspace->f[i][2];
}
+
}
/* ---------------------------------------------------------------------- */
void *PairReaxC::extract(const char *str, int &dim)
{
dim = 1;
if (strcmp(str,"chi") == 0 && chi) {
for (int i = 1; i <= atom->ntypes; i++)
if (map[i] >= 0) chi[i] = system->reax_param.sbp[map[i]].chi;
else chi[i] = 0.0;
return (void *) chi;
}
if (strcmp(str,"eta") == 0 && eta) {
for (int i = 1; i <= atom->ntypes; i++)
if (map[i] >= 0) eta[i] = system->reax_param.sbp[map[i]].eta;
else eta[i] = 0.0;
return (void *) eta;
}
if (strcmp(str,"gamma") == 0 && gamma) {
for (int i = 1; i <= atom->ntypes; i++)
if (map[i] >= 0) gamma[i] = system->reax_param.sbp[map[i]].gamma;
else gamma[i] = 0.0;
return (void *) gamma;
}
return NULL;
}
/* ---------------------------------------------------------------------- */
double PairReaxC::memory_usage()
{
double bytes = 0.0;
// From pair_reax_c
bytes += 1.0 * system->N * sizeof(int);
bytes += 1.0 * system->N * sizeof(double);
// From reaxc_allocate: BO
bytes += 1.0 * system->total_cap * sizeof(reax_atom);
bytes += 19.0 * system->total_cap * sizeof(real);
bytes += 3.0 * system->total_cap * sizeof(int);
+ double mem1 = bytes;
+
// From reaxc_lists
bytes += 2.0 * lists->n * sizeof(int);
bytes += lists->num_intrs * sizeof(three_body_interaction_data);
bytes += lists->num_intrs * sizeof(bond_data);
bytes += lists->num_intrs * sizeof(dbond_data);
bytes += lists->num_intrs * sizeof(dDelta_data);
bytes += lists->num_intrs * sizeof(far_neighbor_data);
bytes += lists->num_intrs * sizeof(hbond_data);
if(fixspecies_flag)
bytes += 2 * nmax * MAXSPECBOND * sizeof(double);
return bytes;
}
/* ---------------------------------------------------------------------- */
void PairReaxC::FindBond()
{
- int i, j, pj, nj;
- double bo_tmp, bo_cut, r_tmp;
+ int i, ii, j, pj, nj, jtmp, jj;
+ double bo_tmp, bo_cut, rij, rsq, r_tmp;
bond_data *bo_ij;
bo_cut = 0.10;
for (i = 0; i < system->n; i++) {
nj = 0;
for( pj = Start_Index(i, lists); pj < End_Index(i, lists); ++pj ) {
bo_ij = &( lists->select.bond_list[pj] );
j = bo_ij->nbr;
if (j < i) continue;
bo_tmp = bo_ij->bo_data.BO;
r_tmp = bo_ij->d;
if (bo_tmp >= bo_cut ) {
tmpid[i][nj] = j;
tmpbo[i][nj] = bo_tmp;
nj ++;
if (nj > MAXSPECBOND) error->all(FLERR,"Increase MAXSPECBOND in reaxc_defs.h");
}
}
}
}
-
-/* ---------------------------------------------------------------------- */
diff --git a/src/USER-REAXC/pair_reax_c.h b/src/USER-REAXC/pair_reax_c.h
index 3dd7629ca..3ddeb781a 100644
--- a/src/USER-REAXC/pair_reax_c.h
+++ b/src/USER-REAXC/pair_reax_c.h
@@ -1,97 +1,104 @@
/* -*- c++ -*- ----------------------------------------------------------
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 author: Hasan Metin Aktulga, Purdue University
(now at Lawrence Berkeley National Laboratory, hmaktulga@lbl.gov)
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
------------------------------------------------------------------------- */
#ifdef PAIR_CLASS
PairStyle(reax/c,PairReaxC)
#else
#ifndef LMP_PAIR_REAXC_H
#define LMP_PAIR_REAXC_H
#include "pair.h"
#include "reaxc_types.h"
namespace LAMMPS_NS {
class PairReaxC : public Pair {
public:
PairReaxC(class LAMMPS *);
~PairReaxC();
void compute(int, int);
void settings(int, char **);
void coeff(int, char **);
void init_style();
double init_one(int, int);
void *extract(const char *, int &);
int fixbond_flag, fixspecies_flag;
int **tmpid;
double ** tmpbo, **tmpr;
control_params *control;
reax_system *system;
output_controls *out_control;
simulation_data *data;
storage *workspace;
reax_list *lists;
mpi_datatypes *mpi_data;
+ bigint ngroup;
+
private:
double cutmax;
+ int nelements; // # of unique elements
+ char **elements; // names of unique elements
int *map;
class FixReaxC *fix_reax;
double *chi,*eta,*gamma;
int qeqflag;
int setup_flag;
int firstwarn;
void allocate();
+ void setup();
+ void create_compute();
+ void create_fix();
void write_reax_atoms();
void get_distance(rvec, rvec, double *, rvec *);
void set_far_nbr(far_neighbor_data *, int, double, rvec);
int estimate_reax_lists();
int write_reax_lists();
- void read_reax_forces();
- void setup();
+ void read_reax_forces(int);
int nmax;
void FindBond();
double memory_usage();
+
};
}
#endif
#endif
/* ERROR/WARNING messages:
E: Too many ghost atoms
Number of ghost atoms has increased too much during simulation and has exceeded
the size of reax/c arrays. Increase safe_zone and min_cap in pair_style reax/c
command
*/
diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp
index 3a766bf7e..54f416ac7 100644
--- a/src/USER-REAXC/reaxc_allocate.cpp
+++ b/src/USER-REAXC/reaxc_allocate.cpp
@@ -1,882 +1,649 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_allocate.h"
#include "reaxc_list.h"
#include "reaxc_reset_tools.h"
#include "reaxc_tool_box.h"
#include "reaxc_vector.h"
-
/* allocate space for my_atoms
important: we cannot know the exact number of atoms that will fall into a
process's box throughout the whole simulation. therefore
we need to make upper bound estimates for various data structures */
int PreAllocate_Space( reax_system *system, control_params *control,
storage *workspace, MPI_Comm comm )
{
int mincap = system->mincap;
double safezone = system->safezone;
// determine the local and total capacity
system->local_cap = MAX( (int)(system->n * safezone), mincap );
system->total_cap = MAX( (int)(system->N * safezone), mincap );
-#if defined(DEBUG)
- fprintf( stderr, "p%d: local_cap=%d total_cap=%d\n",
- system->my_rank, system->local_cap, system->total_cap );
-#endif
-
system->my_atoms = (reax_atom*)
scalloc( system->total_cap, sizeof(reax_atom), "my_atoms", comm );
- /* space for keeping restriction info, if any */
- // not yet implemented in the parallel version!!!
- // if( control->restrict_bonds ) {
- // workspace->restricted = (int*)
- // scalloc( system->local_cap, sizeof(int), "restricted_atoms", comm );
-
- // workspace->restricted_list = (int**)
- // scalloc( system->local_cap, sizeof(int*), "restricted_list", comm );
-
- // for( i = 0; i < system->local_cap; ++i )
- // workspace->restricted_list[i] = (int*)
- // scalloc( MAX_RESTRICT, sizeof(int), "restricted_list[i]", comm );
- // }
-
return SUCCESS;
}
/************* system *************/
inline void reax_atom_Copy( reax_atom *dest, reax_atom *src )
{
dest->orig_id = src->orig_id;
dest->type = src->type;
strcpy( dest->name, src->name );
rvec_Copy( dest->x, src->x );
rvec_Copy( dest->v, src->v );
rvec_Copy( dest->f_old, src->f_old );
rvec_Copy( dest->s, src->s );
rvec_Copy( dest->t, src->t );
dest->Hindex = src->Hindex;
dest->num_bonds = src->num_bonds;
dest->num_hbonds = src->num_hbonds;
dest->numbonds = src->numbonds;
}
void Copy_Atom_List( reax_atom *dest, reax_atom *src, int n )
{
int i;
for( i = 0; i < n; ++i )
memcpy( dest+i, src+i, sizeof(reax_atom) );
}
int Allocate_System( reax_system *system, int local_cap, int total_cap,
char *msg )
{
system->my_atoms = (reax_atom*)
realloc( system->my_atoms, total_cap*sizeof(reax_atom) );
return SUCCESS;
}
void DeAllocate_System( reax_system *system )
{
int i, j, k;
int ntypes;
reax_interaction *ff_params;
// dealloocate the atom list
sfree( system->my_atoms, "system->my_atoms" );
// deallocate the ffield parameters storage
ff_params = &(system->reax_param);
ntypes = ff_params->num_atom_types;
sfree( ff_params->gp.l, "ff:globals" );
for( i = 0; i < ntypes; ++i ) {
for( j = 0; j < ntypes; ++j ) {
for( k = 0; k < ntypes; ++k ) {
sfree( ff_params->fbp[i][j][k], "ff:fbp[i,j,k]" );
}
sfree( ff_params->fbp[i][j], "ff:fbp[i,j]" );
sfree( ff_params->thbp[i][j], "ff:thbp[i,j]" );
sfree( ff_params->hbp[i][j], "ff:hbp[i,j]" );
}
sfree( ff_params->fbp[i], "ff:fbp[i]" );
sfree( ff_params->thbp[i], "ff:thbp[i]" );
sfree( ff_params->hbp[i], "ff:hbp[i]" );
sfree( ff_params->tbp[i], "ff:tbp[i]" );
}
sfree( ff_params->fbp, "ff:fbp" );
sfree( ff_params->thbp, "ff:thbp" );
sfree( ff_params->hbp, "ff:hbp" );
sfree( ff_params->tbp, "ff:tbp" );
sfree( ff_params->sbp, "ff:sbp" );
}
/************* workspace *************/
void DeAllocate_Workspace( control_params *control, storage *workspace )
{
int i;
if( !workspace->allocated )
return;
workspace->allocated = 0;
/* communication storage */
for( i = 0; i < MAX_NBRS; ++i ) {
sfree( workspace->tmp_dbl[i], "tmp_dbl[i]" );
sfree( workspace->tmp_rvec[i], "tmp_rvec[i]" );
sfree( workspace->tmp_rvec2[i], "tmp_rvec2[i]" );
}
/* bond order storage */
sfree( workspace->within_bond_box, "skin" );
sfree( workspace->total_bond_order, "total_bo" );
sfree( workspace->Deltap, "Deltap" );
sfree( workspace->Deltap_boc, "Deltap_boc" );
sfree( workspace->dDeltap_self, "dDeltap_self" );
sfree( workspace->Delta, "Delta" );
sfree( workspace->Delta_lp, "Delta_lp" );
sfree( workspace->Delta_lp_temp, "Delta_lp_temp" );
sfree( workspace->dDelta_lp, "dDelta_lp" );
sfree( workspace->dDelta_lp_temp, "dDelta_lp_temp" );
sfree( workspace->Delta_e, "Delta_e" );
sfree( workspace->Delta_boc, "Delta_boc" );
sfree( workspace->Delta_val, "Delta_val" );
sfree( workspace->nlp, "nlp" );
sfree( workspace->nlp_temp, "nlp_temp" );
sfree( workspace->Clp, "Clp" );
sfree( workspace->vlpex, "vlpex" );
sfree( workspace->bond_mark, "bond_mark" );
sfree( workspace->done_after, "done_after" );
/* QEq storage */
sfree( workspace->Hdia_inv, "Hdia_inv" );
sfree( workspace->b_s, "b_s" );
sfree( workspace->b_t, "b_t" );
sfree( workspace->b_prc, "b_prc" );
sfree( workspace->b_prm, "b_prm" );
sfree( workspace->s, "s" );
sfree( workspace->t, "t" );
sfree( workspace->droptol, "droptol" );
sfree( workspace->b, "b" );
sfree( workspace->x, "x" );
/* GMRES storage */
for( i = 0; i < RESTART+1; ++i ) {
sfree( workspace->h[i], "h[i]" );
sfree( workspace->v[i], "v[i]" );
}
sfree( workspace->h, "h" );
sfree( workspace->v, "v" );
sfree( workspace->y, "y" );
sfree( workspace->z, "z" );
sfree( workspace->g, "g" );
sfree( workspace->hs, "hs" );
sfree( workspace->hc, "hc" );
/* CG storage */
sfree( workspace->r, "r" );
sfree( workspace->d, "d" );
sfree( workspace->q, "q" );
sfree( workspace->p, "p" );
sfree( workspace->r2, "r2" );
sfree( workspace->d2, "d2" );
sfree( workspace->q2, "q2" );
sfree( workspace->p2, "p2" );
/* integrator */
- // sfree( workspace->f_old );
sfree( workspace->v_const, "v_const" );
- /*workspace->realloc.num_far = -1;
- workspace->realloc.Htop = -1;
- workspace->realloc.hbonds = -1;
- workspace->realloc.bonds = -1;
- workspace->realloc.num_3body = -1;
- workspace->realloc.gcell_atoms = -1;*/
-
- /* storage for analysis */
- // if( control->molecular_analysis || control->diffusion_coef ) {
- // sfree( workspace->mark, "mark" );
- // sfree( workspace->old_mark, "old_mark" );
- // }
-
- // if( control->diffusion_coef )
- // sfree( workspace->x_old, "x_old" );
-
/* force related storage */
sfree( workspace->f, "f" );
sfree( workspace->CdDelta, "CdDelta" );
-#ifdef TEST_FORCES
- sfree(workspace->dDelta, "dDelta" );
- sfree( workspace->f_ele, "f_ele" );
- sfree( workspace->f_vdw, "f_vdw" );
- sfree( workspace->f_bo, "f_bo" );
- sfree( workspace->f_be, "f_be" );
- sfree( workspace->f_lp, "f_lp" );
- sfree( workspace->f_ov, "f_ov" );
- sfree( workspace->f_un, "f_un" );
- sfree( workspace->f_ang, "f_ang" );
- sfree( workspace->f_coa, "f_coa" );
- sfree( workspace->f_pen, "f_pen" );
- sfree( workspace->f_hb, "f_hb" );
- sfree( workspace->f_tor, "f_tor" );
- sfree( workspace->f_con, "f_con" );
- sfree( workspace->f_tot, "f_tot" );
-
- sfree( workspace->rcounts, "rcounts" );
- sfree( workspace->displs, "displs" );
- sfree( workspace->id_all, "id_all" );
- sfree( workspace->f_all, "f_all" );
-#endif
-
- /* hbond storage */
- //sfree( workspace->Hindex, "Hindex" );
- //sfree( workspace->num_bonds );
- //sfree( workspace->num_hbonds );
- //sfree( workspace->hash, "hash" );
- //sfree( workspace->rev_hash, "rev_hash" );
+
}
int Allocate_Workspace( reax_system *system, control_params *control,
storage *workspace, int local_cap, int total_cap,
MPI_Comm comm, char *msg )
{
int i, total_real, total_rvec, local_rvec;
workspace->allocated = 1;
total_real = total_cap * sizeof(real);
total_rvec = total_cap * sizeof(rvec);
local_rvec = local_cap * sizeof(rvec);
/* communication storage */
for( i = 0; i < MAX_NBRS; ++i ) {
workspace->tmp_dbl[i] = (real*)
scalloc( total_cap, sizeof(real), "tmp_dbl", comm );
workspace->tmp_rvec[i] = (rvec*)
scalloc( total_cap, sizeof(rvec), "tmp_rvec", comm );
workspace->tmp_rvec2[i] = (rvec2*)
scalloc( total_cap, sizeof(rvec2), "tmp_rvec2", comm );
}
/* bond order related storage */
workspace->within_bond_box = (int*)
scalloc( total_cap, sizeof(int), "skin", comm );
workspace->total_bond_order = (real*) smalloc( total_real, "total_bo", comm );
workspace->Deltap = (real*) smalloc( total_real, "Deltap", comm );
workspace->Deltap_boc = (real*) smalloc( total_real, "Deltap_boc", comm );
workspace->dDeltap_self = (rvec*) smalloc( total_rvec, "dDeltap_self", comm );
workspace->Delta = (real*) smalloc( total_real, "Delta", comm );
workspace->Delta_lp = (real*) smalloc( total_real, "Delta_lp", comm );
workspace->Delta_lp_temp = (real*)
smalloc( total_real, "Delta_lp_temp", comm );
workspace->dDelta_lp = (real*) smalloc( total_real, "dDelta_lp", comm );
workspace->dDelta_lp_temp = (real*)
smalloc( total_real, "dDelta_lp_temp", comm );
workspace->Delta_e = (real*) smalloc( total_real, "Delta_e", comm );
workspace->Delta_boc = (real*) smalloc( total_real, "Delta_boc", comm );
workspace->Delta_val = (real*) smalloc( total_real, "Delta_val", comm );
workspace->nlp = (real*) smalloc( total_real, "nlp", comm );
workspace->nlp_temp = (real*) smalloc( total_real, "nlp_temp", comm );
workspace->Clp = (real*) smalloc( total_real, "Clp", comm );
workspace->vlpex = (real*) smalloc( total_real, "vlpex", comm );
workspace->bond_mark = (int*)
scalloc( total_cap, sizeof(int), "bond_mark", comm );
workspace->done_after = (int*)
scalloc( total_cap, sizeof(int), "done_after", comm );
- // fprintf( stderr, "p%d: bond order storage\n", system->my_rank );
/* QEq storage */
workspace->Hdia_inv = (real*)
scalloc( total_cap, sizeof(real), "Hdia_inv", comm );
workspace->b_s = (real*) scalloc( total_cap, sizeof(real), "b_s", comm );
workspace->b_t = (real*) scalloc( total_cap, sizeof(real), "b_t", comm );
workspace->b_prc = (real*) scalloc( total_cap, sizeof(real), "b_prc", comm );
workspace->b_prm = (real*) scalloc( total_cap, sizeof(real), "b_prm", comm );
workspace->s = (real*) scalloc( total_cap, sizeof(real), "s", comm );
workspace->t = (real*) scalloc( total_cap, sizeof(real), "t", comm );
workspace->droptol = (real*)
scalloc( total_cap, sizeof(real), "droptol", comm );
workspace->b = (rvec2*) scalloc( total_cap, sizeof(rvec2), "b", comm );
workspace->x = (rvec2*) scalloc( total_cap, sizeof(rvec2), "x", comm );
/* GMRES storage */
workspace->y = (real*) scalloc( RESTART+1, sizeof(real), "y", comm );
workspace->z = (real*) scalloc( RESTART+1, sizeof(real), "z", comm );
workspace->g = (real*) scalloc( RESTART+1, sizeof(real), "g", comm );
workspace->h = (real**) scalloc( RESTART+1, sizeof(real*), "h", comm );
workspace->hs = (real*) scalloc( RESTART+1, sizeof(real), "hs", comm );
workspace->hc = (real*) scalloc( RESTART+1, sizeof(real), "hc", comm );
workspace->v = (real**) scalloc( RESTART+1, sizeof(real*), "v", comm );
for( i = 0; i < RESTART+1; ++i ) {
workspace->h[i] = (real*) scalloc( RESTART+1, sizeof(real), "h[i]", comm );
workspace->v[i] = (real*) scalloc( total_cap, sizeof(real), "v[i]", comm );
}
/* CG storage */
workspace->r = (real*) scalloc( total_cap, sizeof(real), "r", comm );
workspace->d = (real*) scalloc( total_cap, sizeof(real), "d", comm );
workspace->q = (real*) scalloc( total_cap, sizeof(real), "q", comm );
workspace->p = (real*) scalloc( total_cap, sizeof(real), "p", comm );
workspace->r2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "r2", comm );
workspace->d2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "d2", comm );
workspace->q2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "q2", comm );
workspace->p2 = (rvec2*) scalloc( total_cap, sizeof(rvec2), "p2", comm );
/* integrator storage */
workspace->v_const = (rvec*) smalloc( local_rvec, "v_const", comm );
- /* storage for analysis */
- // not yet implemented in the parallel version!!!
- // if( control->molecular_analysis || control->diffusion_coef ) {
- // workspace->mark = (int*) scalloc( local_cap, sizeof(int), "mark", comm );
- // workspace->old_mark = (int*)
- // scalloc( local_cap, sizeof(int), "old_mark", comm );
- // }
- // else
- // workspace->mark = workspace->old_mark = NULL;
-
- // if( control->diffusion_coef )
- // workspace->x_old = (rvec*)
- // scalloc( local_cap, sizeof(rvec), "x_old", comm );
- // else workspace->x_old = NULL;
-
// /* force related storage */
workspace->f = (rvec*) scalloc( total_cap, sizeof(rvec), "f", comm );
workspace->CdDelta = (real*)
scalloc( total_cap, sizeof(real), "CdDelta", comm );
-#ifdef TEST_FORCES
- workspace->dDelta=(rvec*) smalloc( total_rvec, "dDelta", comm );
- workspace->f_ele =(rvec*) smalloc( total_rvec, "f_ele", comm );
- workspace->f_vdw =(rvec*) smalloc( total_rvec, "f_vdw", comm );
- workspace->f_bo =(rvec*) smalloc( total_rvec, "f_bo", comm );
- workspace->f_be =(rvec*) smalloc( total_rvec, "f_be", comm );
- workspace->f_lp =(rvec*) smalloc( total_rvec, "f_lp", comm );
- workspace->f_ov =(rvec*) smalloc( total_rvec, "f_ov", comm );
- workspace->f_un =(rvec*) smalloc( total_rvec, "f_un", comm );
- workspace->f_ang =(rvec*) smalloc( total_rvec, "f_ang", comm );
- workspace->f_coa =(rvec*) smalloc( total_rvec, "f_coa", comm );
- workspace->f_pen =(rvec*) smalloc( total_rvec, "f_pen", comm );
- workspace->f_hb =(rvec*) smalloc( total_rvec, "f_hb", comm );
- workspace->f_tor =(rvec*) smalloc( total_rvec, "f_tor", comm );
- workspace->f_con =(rvec*) smalloc( total_rvec, "f_con", comm );
- workspace->f_tot =(rvec*) smalloc( total_rvec, "f_tot", comm );
-
- if( system->my_rank == MASTER_NODE ) {
- workspace->rcounts = (int*)
- smalloc( system->wsize*sizeof(int), "rcount", comm );
- workspace->displs = (int*)
- smalloc( system->wsize*sizeof(int), "displs", comm );
- workspace->id_all = (int*)
- smalloc( system->bigN*sizeof(int), "id_all", comm );
- workspace->f_all = (rvec*)
- smalloc( system->bigN*sizeof(rvec), "f_all", comm );
- }
- else{
- workspace->rcounts = NULL;
- workspace->displs = NULL;
- workspace->id_all = NULL;
- workspace->f_all = NULL;
- }
-#endif
-
return SUCCESS;
}
void Reallocate_Neighbor_List( reax_list *far_nbrs, int n, int num_intrs,
MPI_Comm comm )
{
Delete_List( far_nbrs, comm );
if(!Make_List( n, num_intrs, TYP_FAR_NEIGHBOR, far_nbrs, comm )){
fprintf(stderr, "Problem in initializing far nbrs list. Terminating!\n");
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
}
int Allocate_Matrix( sparse_matrix **pH, int cap, int m, MPI_Comm comm )
{
sparse_matrix *H;
*pH = (sparse_matrix*)
smalloc( sizeof(sparse_matrix), "sparse_matrix", comm );
H = *pH;
H->cap = cap;
H->m = m;
H->start = (int*) smalloc( sizeof(int) * cap, "matrix_start", comm );
H->end = (int*) smalloc( sizeof(int) * cap, "matrix_end", comm );
H->entries = (sparse_matrix_entry*)
smalloc( sizeof(sparse_matrix_entry)*m, "matrix_entries", comm );
return SUCCESS;
}
void Deallocate_Matrix( sparse_matrix *H )
{
sfree(H->start, "H->start");
sfree(H->end, "H->end");
sfree(H->entries, "H->entries");
sfree(H, "H");
}
int Reallocate_Matrix( sparse_matrix **H, int n, int m, char *name,
MPI_Comm comm )
{
Deallocate_Matrix( *H );
if( !Allocate_Matrix( H, n, m, comm ) ) {
fprintf(stderr, "not enough space for %s matrix. terminating!\n", name);
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "reallocating %s matrix, n = %d, m = %d\n", name, n, m );
- fprintf( stderr, "memory allocated: %s = %dMB\n",
- name, (int)(m * sizeof(sparse_matrix_entry) / (1024*1024)) );
-#endif
return SUCCESS;
}
int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds,
MPI_Comm comm )
{
int i, id, total_hbonds;
int mincap = system->mincap;
double saferzone = system->saferzone;
total_hbonds = 0;
for( i = 0; i < system->n; ++i )
if( (id = system->my_atoms[i].Hindex) >= 0 ) {
- // commented out - already updated in validate_lists in forces.c
- // system->my_atoms[i].num_hbonds = MAX(Num_Entries(id,hbonds)*SAFER_ZONE,
- // MIN_HBONDS);
total_hbonds += system->my_atoms[i].num_hbonds;
}
total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS ));
Delete_List( hbonds, comm );
if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, hbonds, comm ) ) {
fprintf( stderr, "not enough space for hbonds list. terminating!\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
return total_hbonds;
}
int Reallocate_Bonds_List( reax_system *system, reax_list *bonds,
int *total_bonds, int *est_3body, MPI_Comm comm )
{
int i;
int mincap = system->mincap;
double safezone = system->safezone;
*total_bonds = 0;
*est_3body = 0;
for( i = 0; i < system->N; ++i ){
*est_3body += SQR(system->my_atoms[i].num_bonds);
- // commented out - already updated in validate_lists in forces.c
- // system->my_atoms[i].num_bonds = MAX( Num_Entries(i,bonds)*2, MIN_BONDS );
*total_bonds += system->my_atoms[i].num_bonds;
}
*total_bonds = (int)(MAX( *total_bonds * safezone, mincap*MIN_BONDS ));
Delete_List( bonds, comm );
if(!Make_List(system->total_cap, *total_bonds, TYP_BOND, bonds, comm)) {
fprintf( stderr, "not enough space for bonds list. terminating!\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
return SUCCESS;
}
/************* grid *************/
int Estimate_GCell_Population( reax_system* system, MPI_Comm comm )
{
int d, i, j, k, l, max_atoms, my_max, all_max;
ivec c;
grid *g;
grid_cell *gc;
simulation_box *my_ext_box;
reax_atom *atoms;
my_ext_box = &(system->my_ext_box);
g = &(system->my_grid);
atoms = system->my_atoms;
Reset_Grid( g );
for( l = 0; l < system->n; l++ ) {
for( d = 0; d < 3; ++d ) {
c[d] = (int)((atoms[l].x[d]-my_ext_box->min[d])*g->inv_len[d]);
if( c[d] >= g->native_end[d] )
c[d] = g->native_end[d] - 1;
else if( c[d] < g->native_str[d] )
c[d] = g->native_str[d];
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d bin_my_atoms: l:%d - atom%d @ %.5f %.5f %.5f" \
- "--> cell: %d %d %d\n",
- system->my_rank, l, atoms[l].orig_id,
- atoms[l].x[0], atoms[l].x[1], atoms[l].x[2],
- c[0], c[1], c[2] );
-#endif
gc = &( g->cells[c[0]][c[1]][c[2]] );
gc->top++;
}
max_atoms = 0;
for( i = 0; i < g->ncells[0]; i++ )
for( j = 0; j < g->ncells[1]; j++ )
for( k = 0; k < g->ncells[2]; k++ ) {
gc = &(g->cells[i][j][k]);
if( max_atoms < gc->top )
max_atoms = gc->top;
-#if defined(DEBUG)
- fprintf( stderr, "p%d gc[%d,%d,%d]->top=%d\n",
- system->my_rank, i, j, k, gc->top );
-#endif
}
my_max = (int)(MAX(max_atoms*SAFE_ZONE, MIN_GCELL_POPL));
MPI_Allreduce( &my_max, &all_max, 1, MPI_INT, MPI_MAX, comm );
-#if defined(DEBUG)
- fprintf( stderr, "p%d max_atoms=%d, my_max=%d, all_max=%d\n",
- system->my_rank, max_atoms, my_max, all_max );
-#endif
return all_max;
}
void Allocate_Grid( reax_system *system, MPI_Comm comm )
{
int i, j, k, l;
grid *g;
grid_cell *gc;
g = &( system->my_grid );
/* allocate gcell reordering space */
g->order = (ivec*) scalloc( g->total+1, sizeof(ivec), "g:order", comm );
/* allocate the gcells for the new grid */
g->max_nbrs = (2*g->vlist_span[0]+1)*(2*g->vlist_span[1]+1)*
(2*g->vlist_span[2]+1)+3;
g->cells = (grid_cell***)
scalloc( g->ncells[0], sizeof(grid_cell**), "gcells", comm );
for( i = 0; i < g->ncells[0]; i++ ) {
g->cells[i] = (grid_cell**)
scalloc( g->ncells[1], sizeof(grid_cell*),"gcells[i]", comm );
for( j = 0; j < g->ncells[1]; ++j ) {
g->cells[i][j] = (grid_cell*)
scalloc( g->ncells[2], sizeof(grid_cell), "gcells[i][j]", comm );
for( k = 0; k < g->ncells[2]; k++ ) {
gc = &(g->cells[i][j][k]);
gc->top = gc->mark = gc->str = gc->end = 0;
gc->nbrs = (grid_cell**)
scalloc( g->max_nbrs, sizeof(grid_cell*), "g:nbrs", comm );
gc->nbrs_x = (ivec*)
scalloc( g->max_nbrs, sizeof(ivec), "g:nbrs_x", comm );
gc->nbrs_cp = (rvec*)
scalloc( g->max_nbrs, sizeof(rvec), "g:nbrs_cp", comm );
for( l = 0; l < g->max_nbrs; ++l )
gc->nbrs[l] = NULL;
}
}
}
/* allocate atom id storage in gcells */
g->max_atoms = Estimate_GCell_Population( system, comm );
/* space for storing atom id's is required only for native cells */
for( i = g->native_str[0]; i < g->native_end[0]; ++i )
for( j = g->native_str[1]; j < g->native_end[1]; ++j )
for( k = g->native_str[2]; k < g->native_end[2]; ++k )
g->cells[i][j][k].atoms = (int*) scalloc( g->max_atoms, sizeof(int),
"g:atoms", comm );
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d-allocated %dx%dx%d grid: nbrs=%d atoms=%d space=%dMB\n",
- system->my_rank, g->ncells[0], g->ncells[1], g->ncells[2],
- g->max_nbrs, g->max_atoms,
- (int)
- ((g->total*sizeof(grid_cell)+g->total*g->max_nbrs*sizeof(int*) +
- g->total*g->max_nbrs*sizeof(rvec) +
- (g->native_end[0]-g->native_str[0])*
- (g->native_end[1]-g->native_str[1])*
- (g->native_end[2]-g->native_str[2])*g->max_atoms*sizeof(int))/
- (1024*1024)) );
-#endif
}
void Deallocate_Grid( grid *g )
{
int i, j, k;
grid_cell *gc;
sfree( g->order, "g:order" );
/* deallocate the grid cells */
for( i = 0; i < g->ncells[0]; i++ ) {
for( j = 0; j < g->ncells[1]; j++ ) {
for( k = 0; k < g->ncells[2]; k++ ) {
gc = &(g->cells[i][j][k]);
sfree( gc->nbrs, "g:nbrs" );
sfree( gc->nbrs_x, "g:nbrs_x" );
sfree( gc->nbrs_cp, "g:nbrs_cp" );
if(gc->atoms != NULL )
sfree( gc->atoms, "g:atoms" );
}
sfree( g->cells[i][j], "g:cells[i][j]" );
}
sfree( g->cells[i], "g:cells[i]" );
}
sfree( g->cells, "g:cells" );
}
void ReAllocate( reax_system *system, control_params *control,
simulation_data *data, storage *workspace, reax_list **lists,
mpi_datatypes *mpi_data )
{
int num_bonds, est_3body, Hflag, ret;
int renbr, newsize;
reallocate_data *realloc;
reax_list *far_nbrs;
MPI_Comm comm;
char msg[200];
int mincap = system->mincap;
double safezone = system->safezone;
double saferzone = system->saferzone;
realloc = &(workspace->realloc);
comm = mpi_data->world;
-#if defined(DEBUG)
- fprintf( stderr, "p%d@reallocate: n: %d, N: %d, numH: %d\n",
- system->my_rank, system->n, system->N, system->numH );
- fprintf( stderr, "p%d@reallocate: local_cap: %d, total_cap: %d, Hcap: %d\n",
- system->my_rank, system->local_cap, system->total_cap,
- system->Hcap);
- fprintf( stderr, "p%d: realloc.num_far: %d\n",
- system->my_rank, realloc->num_far );
- fprintf( stderr, "p%d: realloc.H: %d, realloc.Htop: %d\n",
- system->my_rank, realloc->H, realloc->Htop );
- fprintf( stderr, "p%d: realloc.Hbonds: %d, realloc.num_hbonds: %d\n",
- system->my_rank, realloc->hbonds, realloc->num_hbonds );
- fprintf( stderr, "p%d: realloc.bonds: %d, num_bonds: %d\n",
- system->my_rank, realloc->bonds, realloc->num_bonds );
- fprintf( stderr, "p%d: realloc.num_3body: %d\n",
- system->my_rank, realloc->num_3body );
-#endif
-
- // IMPORTANT: LOOSE ZONES CHECKS ARE DISABLED FOR NOW BY &&'ing with 0!!!
-
int nflag = 0;
if( system->n >= DANGER_ZONE * system->local_cap ||
(0 && system->n <= LOOSE_ZONE * system->local_cap) ) {
nflag = 1;
system->local_cap = MAX( (int)(system->n * safezone), mincap );
}
int Nflag = 0;
if( system->N >= DANGER_ZONE * system->total_cap ||
(0 && system->N <= LOOSE_ZONE * system->total_cap) ) {
Nflag = 1;
system->total_cap = MAX( (int)(system->N * safezone), mincap );
}
if( Nflag ) {
/* system */
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: reallocating system and workspace -"\
- "n=%d N=%d local_cap=%d total_cap=%d\n",
- system->my_rank, system->n, system->N,
- system->local_cap, system->total_cap );
-#endif
ret = Allocate_System( system, system->local_cap, system->total_cap, msg );
if( ret != SUCCESS ) {
fprintf( stderr, "not enough space for atom_list: total_cap=%d",
system->total_cap );
fprintf( stderr, "terminating...\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
/* workspace */
DeAllocate_Workspace( control, workspace );
ret = Allocate_Workspace( system, control, workspace, system->local_cap,
system->total_cap, comm, msg );
if( ret != SUCCESS ) {
fprintf( stderr, "no space for workspace: local_cap=%d total_cap=%d",
system->local_cap, system->total_cap );
fprintf( stderr, "terminating...\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
}
renbr = (data->step - data->prev_steps) % control->reneighbor == 0;
/* far neighbors */
if( renbr ) {
far_nbrs = *lists + FAR_NBRS;
if( Nflag || realloc->num_far >= far_nbrs->num_intrs * DANGER_ZONE ) {
if( realloc->num_far > far_nbrs->num_intrs ) {
fprintf( stderr, "step%d-ran out of space on far_nbrs: top=%d, max=%d",
data->step, realloc->num_far, far_nbrs->num_intrs );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
newsize = static_cast<int>
(MAX( realloc->num_far*safezone, mincap*MIN_NBRS ));
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: reallocating far_nbrs: num_fars=%d, space=%dMB\n",
- system->my_rank, (int)(realloc->num_far*SAFE_ZONE),
- (newsize*sizeof(far_neighbor_data)/(1024*1024)) );
-#endif
Reallocate_Neighbor_List( far_nbrs, system->total_cap, newsize, comm );
realloc->num_far = 0;
}
}
-#if defined(PURE_REAX)
- /* qeq coef matrix */
- H = workspace->H;
- if( nflag || realloc->Htop >= H->m * DANGER_ZONE ) {
- if( realloc->Htop > H->m ) {
- fprintf( stderr,
- "step%d - ran out of space on H matrix: Htop=%d, max = %d",
- data->step, realloc->Htop, H->m );
- MPI_Abort( comm, INSUFFICIENT_MEMORY );
- }
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: reallocating H matrix: Htop=%d, space=%dMB\n",
- system->my_rank, (int)(realloc->Htop*SAFE_ZONE),
- (int)(realloc->Htop * SAFE_ZONE * sizeof(sparse_matrix_entry) /
- (1024*1024)) );
-#endif
-
- newsize = static_cast<int>
- (MAX( realloc->Htop*safezone, mincap*MIN_NBRS ));
- Reallocate_Matrix( &(workspace->H), system->local_cap,
- newsize, "H", comm );
- //Deallocate_Matrix( workspace->L );
- //Deallocate_Matrix( workspace->U );
- workspace->L = NULL;
- workspace->U = NULL;
- realloc->Htop = 0;
- }
-#endif /*PURE_REAX*/
-
/* hydrogen bonds list */
if( control->hbond_cut > 0 ) {
Hflag = 0;
if( system->numH >= DANGER_ZONE * system->Hcap ||
(0 && system->numH <= LOOSE_ZONE * system->Hcap) ) {
Hflag = 1;
system->Hcap = int(MAX( system->numH * saferzone, mincap ));
}
if( Hflag || realloc->hbonds ) {
ret = Reallocate_HBonds_List( system, (*lists)+HBONDS, comm );
realloc->hbonds = 0;
-#if defined(DEBUG_FOCUS)
- fprintf(stderr, "p%d: reallocating hbonds: total_hbonds=%d space=%dMB\n",
- system->my_rank, ret, (int)(ret*sizeof(hbond_data)/(1024*1024)));
-#endif
}
}
/* bonds list */
num_bonds = est_3body = -1;
if( Nflag || realloc->bonds ){
Reallocate_Bonds_List( system, (*lists)+BONDS, &num_bonds,
&est_3body, comm );
realloc->bonds = 0;
realloc->num_3body = MAX( realloc->num_3body, est_3body );
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: reallocating bonds: total_bonds=%d, space=%dMB\n",
- system->my_rank, num_bonds,
- (int)(num_bonds*sizeof(bond_data)/(1024*1024)) );
-#endif
}
/* 3-body list */
if( realloc->num_3body > 0 ) {
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: reallocating 3body list: num_3body=%d, space=%dMB\n",
- system->my_rank, realloc->num_3body,
- (int)(realloc->num_3body * sizeof(three_body_interaction_data) /
- (1024*1024)) );
-#endif
Delete_List( (*lists)+THREE_BODIES, comm );
if( num_bonds == -1 )
num_bonds = ((*lists)+BONDS)->num_intrs;
realloc->num_3body = (int)(MAX(realloc->num_3body*safezone, MIN_3BODIES));
if( !Make_List( num_bonds, realloc->num_3body, TYP_THREE_BODY,
(*lists)+THREE_BODIES, comm ) ) {
fprintf( stderr, "Problem in initializing angles list. Terminating!\n" );
MPI_Abort( comm, CANNOT_INITIALIZE );
}
realloc->num_3body = -1;
}
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: reallocate done\n",
- system->my_rank, data->step );
- MPI_Barrier( comm );
-#endif
}
diff --git a/src/USER-REAXC/reaxc_basic_comm.cpp b/src/USER-REAXC/reaxc_basic_comm.cpp
index 70d9d070d..b63d08dec 100644
--- a/src/USER-REAXC/reaxc_basic_comm.cpp
+++ b/src/USER-REAXC/reaxc_basic_comm.cpp
@@ -1,317 +1,71 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "basic_comm.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_basic_comm.h"
#include "reaxc_vector.h"
-#endif
-#if defined(PURE_REAX)
-void real_packer( void *dummy, mpi_out_data *out_buf )
-{
- int i;
- real *buf = (real*) dummy;
- real *out = (real*) out_buf->out_atoms;
-
- for( i = 0; i < out_buf->cnt; ++i )
- out[i] = buf[ out_buf->index[i] ];
-}
-
-
-void rvec_packer( void *dummy, mpi_out_data *out_buf )
-{
- int i;
- rvec *buf = (rvec*) dummy;
- rvec *out = (rvec*)out_buf->out_atoms;
-
- for( i = 0; i < out_buf->cnt; ++i )
- memcpy( out[i], buf[ out_buf->index[i] ], sizeof(rvec) );
-}
-
-
-void rvec2_packer( void *dummy, mpi_out_data *out_buf )
-{
- int i;
- rvec2 *buf = (rvec2*) dummy;
- rvec2 *out = (rvec2*) out_buf->out_atoms;
-
- for( i = 0; i < out_buf->cnt; ++i )
- memcpy( out[i], buf[ out_buf->index[i] ], sizeof(rvec2) );
-}
-
-
-void Dist( reax_system* system, mpi_datatypes *mpi_data,
- void *buf, MPI_Datatype type, int scale, dist_packer pack )
-{
- int d;
- mpi_out_data *out_bufs;
- MPI_Comm comm;
- MPI_Request req1, req2;
- MPI_Status stat1, stat2;
- neighbor_proc *nbr1, *nbr2;
-
-#if defined(DEBUG)
- fprintf( stderr, "p%d dist: entered\n", system->my_rank );
-#endif
- comm = mpi_data->comm_mesh3D;
- out_bufs = mpi_data->out_buffers;
-
- for( d = 0; d < 3; ++d ) {
- /* initiate recvs */
- nbr1 = &(system->my_nbrs[2*d]);
- if( nbr1->atoms_cnt )
- MPI_Irecv( buf + nbr1->atoms_str*scale, nbr1->atoms_cnt, type,
- nbr1->rank, 2*d+1,comm, &req1 );
-
- nbr2 = &(system->my_nbrs[2*d+1]);
- if( nbr2->atoms_cnt )
- MPI_Irecv( buf + nbr2->atoms_str*scale, nbr2->atoms_cnt, type,
- nbr2->rank, 2*d, comm, &req2 );
-
- /* send both messages in dimension d */
- if( out_bufs[2*d].cnt ) {
- pack( buf, out_bufs + (2*d) );
- MPI_Send( out_bufs[2*d].out_atoms, out_bufs[2*d].cnt, type,
- nbr1->rank, 2*d, comm );
- }
-
- if( out_bufs[2*d+1].cnt ) {
- pack( buf, out_bufs + (2*d+1) );
- MPI_Send( out_bufs[2*d+1].out_atoms, out_bufs[2*d+1].cnt, type,
- nbr2->rank, 2*d+1, comm );
- }
-
- if( nbr1->atoms_cnt ) MPI_Wait( &req1, &stat1 );
- if( nbr2->atoms_cnt ) MPI_Wait( &req2, &stat2 );
- }
-
-#if defined(DEBUG)
- fprintf( stderr, "p%d dist: done\n", system->my_rank );
-#endif
-}
-
-
-void real_unpacker( void *dummy_in, void *dummy_buf, mpi_out_data *out_buf )
-{
- int i;
- real *in = (real*) dummy_in;
- real *buf = (real*) dummy_buf;
-
- for( i = 0; i < out_buf->cnt; ++i )
- buf[ out_buf->index[i] ] += in[i];
-}
-
-
-void rvec_unpacker( void *dummy_in, void *dummy_buf, mpi_out_data *out_buf )
-{
- int i;
- rvec *in = (rvec*) dummy_in;
- rvec *buf = (rvec*) dummy_buf;
-
- for( i = 0; i < out_buf->cnt; ++i ) {
- rvec_Add( buf[ out_buf->index[i] ], in[i] );
-#if defined(DEBUG)
- fprintf( stderr, "rvec_unpacker: cnt=%d i =%d index[i]=%d\n",
- out_buf->cnt, i, out_buf->index[i] );
-#endif
- }
-}
-
-
-void rvec2_unpacker( void *dummy_in, void *dummy_buf, mpi_out_data *out_buf )
-{
- int i;
- rvec2 *in = (rvec2*) dummy_in;
- rvec2 *buf = (rvec2*) dummy_buf;
-
- for( i = 0; i < out_buf->cnt; ++i ) {
- buf[ out_buf->index[i] ][0] += in[i][0];
- buf[ out_buf->index[i] ][1] += in[i][1];
- }
-}
-
-
-void Coll( reax_system* system, mpi_datatypes *mpi_data,
- void *buf, MPI_Datatype type, int scale, coll_unpacker unpack )
-{
- int d;
- void *in1, *in2;
- mpi_out_data *out_bufs;
- MPI_Comm comm;
- MPI_Request req1, req2;
- MPI_Status stat1, stat2;
- neighbor_proc *nbr1, *nbr2;
-
-#if defined(DEBUG)
- fprintf( stderr, "p%d coll: entered\n", system->my_rank );
-#endif
- comm = mpi_data->comm_mesh3D;
- in1 = mpi_data->in1_buffer;
- in2 = mpi_data->in2_buffer;
- out_bufs = mpi_data->out_buffers;
-
- for( d = 2; d >= 0; --d ) {
- /* initiate recvs */
- nbr1 = &(system->my_nbrs[2*d]);
- if( out_bufs[2*d].cnt )
- MPI_Irecv(in1, out_bufs[2*d].cnt, type, nbr1->rank, 2*d+1, comm, &req1);
-
- nbr2 = &(system->my_nbrs[2*d+1]);
- if( out_bufs[2*d+1].cnt )
- MPI_Irecv(in2, out_bufs[2*d+1].cnt, type, nbr2->rank, 2*d, comm, &req2);
-
- /* send both messages in dimension d */
- if( nbr1->atoms_cnt )
- MPI_Send( buf + nbr1->atoms_str*scale, nbr1->atoms_cnt, type,
- nbr1->rank, 2*d, comm );
-
- if( nbr2->atoms_cnt )
- MPI_Send( buf + nbr2->atoms_str*scale, nbr2->atoms_cnt, type,
- nbr2->rank, 2*d+1, comm );
-
-#if defined(DEBUG)
- fprintf( stderr, "p%d coll[%d] nbr1: str=%d cnt=%d recv=%d\n",
- system->my_rank, d, nbr1->atoms_str, nbr1->atoms_cnt,
- out_bufs[2*d].cnt );
- fprintf( stderr, "p%d coll[%d] nbr2: str=%d cnt=%d recv=%d\n",
- system->my_rank, d, nbr2->atoms_str, nbr2->atoms_cnt,
- out_bufs[2*d+1].cnt );
-#endif
-
- if( out_bufs[2*d].cnt ) {
- MPI_Wait( &req1, &stat1 );
- unpack( in1, buf, out_bufs + (2*d) );
- }
-
- if( out_bufs[2*d+1].cnt ) {
- MPI_Wait( &req2, &stat2 );
- unpack( in2, buf, out_bufs + (2*d+1) );
- }
- }
-
-#if defined(DEBUG)
- fprintf( stderr, "p%d coll: done\n", system->my_rank );
-#endif
-}
-#endif /*PURE_REAX*/
-
-/*****************************************************************************/
real Parallel_Norm( real *v, int n, MPI_Comm comm )
{
int i;
real my_sum, norm_sqr;
my_sum = 0;
for( i = 0; i < n; ++i )
my_sum += SQR( v[i] );
MPI_Allreduce( &my_sum, &norm_sqr, 1, MPI_DOUBLE, MPI_SUM, comm );
return sqrt( norm_sqr );
}
-
-
real Parallel_Dot( real *v1, real *v2, int n, MPI_Comm comm )
{
int i;
real my_dot, res;
my_dot = 0;
for( i = 0; i < n; ++i )
my_dot += v1[i] * v2[i];
MPI_Allreduce( &my_dot, &res, 1, MPI_DOUBLE, MPI_SUM, comm );
return res;
}
-
-
real Parallel_Vector_Acc( real *v, int n, MPI_Comm comm )
{
int i;
real my_acc, res;
my_acc = 0;
for( i = 0; i < n; ++i )
my_acc += v[i];
MPI_Allreduce( &my_acc, &res, 1, MPI_DOUBLE, MPI_SUM, comm );
return res;
}
-
-
-/*****************************************************************************/
-#if defined(TEST_FORCES)
-void Coll_ids_at_Master( reax_system *system, storage *workspace,
- mpi_datatypes *mpi_data )
-{
- int i;
- rc_tagint *id_list;
-
- MPI_Gather( &system->n, 1, MPI_INT, workspace->rcounts, 1, MPI_INT,
- MASTER_NODE, mpi_data->world );
-
- if( system->my_rank == MASTER_NODE ){
- workspace->displs[0] = 0;
- for( i = 1; i < system->wsize; ++i )
- workspace->displs[i] = workspace->displs[i-1] + workspace->rcounts[i-1];
- }
-
- id_list = (int*) malloc( system->n * sizeof(int) );
- for( i = 0; i < system->n; ++i )
- id_list[i] = system->my_atoms[i].orig_id;
-
- MPI_Gatherv( id_list, system->n, MPI_INT,
- workspace->id_all, workspace->rcounts, workspace->displs,
- MPI_INT, MASTER_NODE, mpi_data->world );
-
- free( id_list );
-
-#if defined(DEBUG)
- if( system->my_rank == MASTER_NODE ) {
- for( i = 0 ; i < system->bigN; ++i )
- fprintf( stderr, "id_all[%d]: %d\n", i, workspace->id_all[i] );
- }
-#endif
-}
-
-
-void Coll_rvecs_at_Master( reax_system *system, storage *workspace,
- mpi_datatypes *mpi_data, rvec* v )
-{
- MPI_Gatherv( v, system->n, mpi_data->mpi_rvec,
- workspace->f_all, workspace->rcounts, workspace->displs,
- mpi_data->mpi_rvec, MASTER_NODE, mpi_data->world );
-}
-
-#endif
diff --git a/src/USER-REAXC/reaxc_bond_orders.cpp b/src/USER-REAXC/reaxc_bond_orders.cpp
index 6f37d91c9..11f862f64 100644
--- a/src/USER-REAXC/reaxc_bond_orders.cpp
+++ b/src/USER-REAXC/reaxc_bond_orders.cpp
@@ -1,1219 +1,600 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_types.h"
-#if defined(PURE_REAX)
-#include "bond_orders.h"
-#include "list.h"
-#include "vector.h"
-#include "io_tools.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_vector.h"
-#endif
-
-#ifdef TEST_FORCES
-void Get_dBO( reax_system *system, reax_list **lists,
- int i, int pj, real C, rvec *v )
-{
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
- int start_pj, end_pj, k;
-
- pj = bonds->select.bond_list[pj].dbond_index;
- start_pj = Start_Index(pj, dBOs);
- end_pj = End_Index(pj, dBOs);
-
- for( k = start_pj; k < end_pj; ++k )
- rvec_Scale( v[dBOs->select.dbo_list[k].wrt],
- C, dBOs->select.dbo_list[k].dBO );
-}
-
-
-void Get_dBOpinpi2( reax_system *system, reax_list **lists,
- int i, int pj, real Cpi, real Cpi2, rvec *vpi, rvec *vpi2 )
-{
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
- dbond_data *dbo_k;
- int start_pj, end_pj, k;
-
- pj = bonds->select.bond_list[pj].dbond_index;
- start_pj = Start_Index(pj, dBOs);
- end_pj = End_Index(pj, dBOs);
-
- for( k = start_pj; k < end_pj; ++k )
- {
- dbo_k = &(dBOs->select.dbo_list[k]);
- rvec_Scale( vpi[dbo_k->wrt], Cpi, dbo_k->dBOpi );
- rvec_Scale( vpi2[dbo_k->wrt], Cpi2, dbo_k->dBOpi2 );
- }
-}
-
-
-void Add_dBO( reax_system *system, reax_list **lists,
- int i, int pj, real C, rvec *v )
-{
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
- int start_pj, end_pj, k;
-
- pj = bonds->select.bond_list[pj].dbond_index;
- start_pj = Start_Index(pj, dBOs);
- end_pj = End_Index(pj, dBOs);
- //fprintf( stderr, "i=%d j=%d start=%d end=%d\n", i, pj, start_pj, end_pj );
-
- for( k = start_pj; k < end_pj; ++k )
- rvec_ScaledAdd( v[dBOs->select.dbo_list[k].wrt],
- C, dBOs->select.dbo_list[k].dBO );
-
-}
-
-
-void Add_dBOpinpi2( reax_system *system, reax_list **lists,
- int i, int pj, real Cpi, real Cpi2, rvec *vpi, rvec *vpi2 )
-{
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
- dbond_data *dbo_k;
- int start_pj, end_pj, k;
-
- pj = bonds->select.bond_list[pj].dbond_index;
- start_pj = Start_Index(pj, dBOs);
- end_pj = End_Index(pj, dBOs);
-
- for( k = start_pj; k < end_pj; ++k )
- {
- dbo_k = &(dBOs->select.dbo_list[k]);
- rvec_ScaledAdd( vpi[dbo_k->wrt], Cpi, dbo_k->dBOpi );
- rvec_ScaledAdd( vpi2[dbo_k->wrt], Cpi2, dbo_k->dBOpi2 );
- }
-}
-
-
-void Add_dBO_to_Forces( reax_system *system, reax_list **lists,
- int i, int pj, real C )
-{
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
- int start_pj, end_pj, k;
-
- pj = bonds->select.bond_list[pj].dbond_index;
- start_pj = Start_Index(pj, dBOs);
- end_pj = End_Index(pj, dBOs);
-
- for( k = start_pj; k < end_pj; ++k )
- rvec_ScaledAdd( system->my_atoms[dBOs->select.dbo_list[k].wrt].f,
- C, dBOs->select.dbo_list[k].dBO );
-}
-
-
-void Add_dBOpinpi2_to_Forces( reax_system *system, reax_list **lists,
- int i, int pj, real Cpi, real Cpi2 )
-{
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
- dbond_data *dbo_k;
- int start_pj, end_pj, k;
-
- pj = bonds->select.bond_list[pj].dbond_index;
- start_pj = Start_Index(pj, dBOs);
- end_pj = End_Index(pj, dBOs);
-
- for( k = start_pj; k < end_pj; ++k )
- {
- dbo_k = &(dBOs->select.dbo_list[k]);
- rvec_ScaledAdd( system->my_atoms[dbo_k->wrt].f, Cpi, dbo_k->dBOpi );
- rvec_ScaledAdd( system->my_atoms[dbo_k->wrt].f, Cpi2, dbo_k->dBOpi2 );
- }
-}
-
-
-void Add_dDelta( reax_system *system, reax_list **lists, int i, real C, rvec *v )
-{
- reax_list *dDeltas = &((*lists)[DDELTAS]);
- int start = Start_Index(i, dDeltas);
- int end = End_Index(i, dDeltas);
- int k;
-
- for( k = start; k < end; ++k )
- rvec_ScaledAdd( v[dDeltas->select.dDelta_list[k].wrt],
- C, dDeltas->select.dDelta_list[k].dVal );
-}
-
-
-void Add_dDelta_to_Forces( reax_system *system, reax_list **lists,
- int i, real C )
-{
- reax_list *dDeltas = &((*lists)[DDELTAS]);
- int start = Start_Index(i, dDeltas);
- int end = End_Index(i, dDeltas);
- int k;
-
- for( k = start; k < end; ++k )
- rvec_ScaledAdd( system->my_atoms[dDeltas->select.dDelta_list[k].wrt].f,
- C, dDeltas->select.dDelta_list[k].dVal );
-}
-
-
-
-void Calculate_dBO( int i, int pj,
- storage *workspace, reax_list **lists, int *top )
-{
- /* Initializations */
- reax_list *bonds, *dBOs;
- int j, k, l, start_i, end_i, end_j;
- bond_data *nbr_l, *nbr_k;
- bond_order_data *bo_ij;
- dbond_data *top_dbo;
-
- // rvec due_j[1000], due_i[1000];
- // rvec due_j_pi[1000], due_i_pi[1000];
-
- // memset(due_j, 0, sizeof(rvec)*1000 );
- // memset(due_i, 0, sizeof(rvec)*1000 );
- // memset(due_j_pi, 0, sizeof(rvec)*1000 );
- // memset(due_i_pi, 0, sizeof(rvec)*1000 );
-
- bonds = *lists + BONDS;
- dBOs = *lists + DBOS;
-
- start_i = Start_Index(i, bonds);
- end_i = End_Index(i, bonds);
-
- j = bonds->select.bond_list[pj].nbr;
- l = Start_Index(j, bonds);
- end_j = End_Index(j, bonds);
-
- bo_ij = &(bonds->select.bond_list[pj].bo_data);
- top_dbo = &(dBOs->select.dbo_list[ (*top) ]);
-
- for( k = start_i; k < end_i; ++k ) {
- nbr_k = &(bonds->select.bond_list[k]);
-
- for( ; l < end_j && bonds->select.bond_list[l].nbr < nbr_k->nbr; ++l ) {
- /* These are the neighbors of j which are not in the nbr_list of i
- Note that they might also include i! */
- nbr_l = &(bonds->select.bond_list[l]);
- top_dbo->wrt = nbr_l->nbr;
-
- //rvec_ScaledAdd( due_j[top_dbo->wrt],
- // -bo_ij->BO * bo_ij->A2_ji, nbr_l->bo_data.dBOp );
-
- /*3rd, dBO*/
- rvec_Scale( top_dbo->dBO, -bo_ij->C3dbo, nbr_l->bo_data.dBOp );
- /*4th, dBOpi*/
- rvec_Scale( top_dbo->dBOpi, -bo_ij->C4dbopi, nbr_l->bo_data.dBOp );
- /*4th, dBOpp*/
- rvec_Scale( top_dbo->dBOpi2, -bo_ij->C4dbopi2, nbr_l->bo_data.dBOp );
-
- if( nbr_l->nbr == i ) {
- /* do the adjustments on i */
- //rvec_ScaledAdd( due_i[i], bo_ij->A0_ij+bo_ij->BO*bo_ij->A1_ij,
- // bo_ij->dBOp ); /*1st, dBO*/
- //rvec_ScaledAdd( due_i[i], bo_ij->BO * bo_ij->A2_ij,
- // workspace->dDeltap_self[i] ); /*2nd, dBO*/
-
- /*1st, dBO*/
- rvec_ScaledAdd( top_dbo->dBO, bo_ij->C1dbo, bo_ij->dBOp );
- /*2nd, dBO*/
- rvec_ScaledAdd( top_dbo->dBO,
- bo_ij->C2dbo, workspace->dDeltap_self[i] );
-
- /*1st, dBOpi*/
- rvec_ScaledAdd(top_dbo->dBOpi,bo_ij->C1dbopi,bo_ij->dln_BOp_pi );
- /*2nd, dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi, bo_ij->C2dbopi, bo_ij->dBOp );
- /*3rd, dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi,
- bo_ij->C3dbopi, workspace->dDeltap_self[i] );
-
- /*1st, dBO_p*/
- rvec_ScaledAdd( top_dbo->dBOpi2,
- bo_ij->C1dbopi2, bo_ij->dln_BOp_pi2 );
- /*2nd, dBO_p*/
- rvec_ScaledAdd( top_dbo->dBOpi2, bo_ij->C2dbopi2, bo_ij->dBOp );
- /*3rd, dBO_p*/
- rvec_ScaledAdd( top_dbo->dBOpi2,
- bo_ij->C3dbopi2, workspace->dDeltap_self[i] );
- }
-
- //rvec_Add( workspace->dDelta[nbr_l->nbr], top_dbo->dBO );
- ++(*top), ++top_dbo;
- }
-
- /* Now we are processing neighbor k of i. */
- top_dbo->wrt = nbr_k->nbr;
-
- //2nd, dBO
- //rvec_ScaledAdd( due_i[top_dbo->wrt],
- // -bo_ij->BO * bo_ij->A2_ij, nbr_k->bo_data.dBOp );
-
- /*2nd, dBO*/
- rvec_Scale( top_dbo->dBO, -bo_ij->C2dbo, nbr_k->bo_data.dBOp );
- /*3rd, dBOpi*/
- rvec_Scale( top_dbo->dBOpi, -bo_ij->C3dbopi, nbr_k->bo_data.dBOp );
- /*3rd, dBOpp*/
- rvec_Scale( top_dbo->dBOpi2, -bo_ij->C3dbopi2, nbr_k->bo_data.dBOp );
-
- if( l < end_j && bonds->select.bond_list[l].nbr == nbr_k->nbr ) {
- /* This is a common neighbor of i and j. */
- nbr_l = &(bonds->select.bond_list[l]);
-
- /*3rd, dBO*/
- //rvec_ScaledAdd( due_j[top_dbo->wrt],
- // -bo_ij->BO * bo_ij->A2_ji, nbr_l->bo_data.dBOp );
-
- /*3rd, dBO*/
- rvec_ScaledAdd( top_dbo->dBO, -bo_ij->C3dbo, nbr_l->bo_data.dBOp );
- /*4th, dBOpi*/
- rvec_ScaledAdd(top_dbo->dBOpi, -bo_ij->C4dbopi, nbr_l->bo_data.dBOp);
- /*4th, dBOpp*/
- rvec_ScaledAdd(top_dbo->dBOpi2,-bo_ij->C4dbopi2,nbr_l->bo_data.dBOp);
- ++l;
- }
- else if( k == pj ) {
- /* This negihbor is j. */
- //rvec_ScaledAdd( due_j[j], -(bo_ij->A0_ij+bo_ij->BO*bo_ij->A1_ij),
- // bo_ij->dBOp ); /*1st, dBO*/
- //rvec_ScaledAdd( due_j[j], bo_ij->BO * bo_ij->A2_ji,
- // workspace->dDeltap_self[j] ); /*3rd, dBO*/
-
- /*1st, dBO*/
- rvec_ScaledAdd( top_dbo->dBO, -bo_ij->C1dbo, bo_ij->dBOp );
- /*3rd, dBO*/
- rvec_ScaledAdd(top_dbo->dBO,bo_ij->C3dbo,workspace->dDeltap_self[j]);
-
- /*1st, dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi, -bo_ij->C1dbopi, bo_ij->dln_BOp_pi );
- /*2nd, dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi, -bo_ij->C2dbopi, bo_ij->dBOp );
- /*4th, dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi,
- bo_ij->C4dbopi, workspace->dDeltap_self[j] );
-
- /*1st, dBOpi2*/
- rvec_ScaledAdd(top_dbo->dBOpi2,-bo_ij->C1dbopi2,bo_ij->dln_BOp_pi2);
- /*2nd, dBOpi2*/
- rvec_ScaledAdd(top_dbo->dBOpi2,-bo_ij->C2dbopi2,bo_ij->dBOp );
- /*4th, dBOpi2*/
- rvec_ScaledAdd(top_dbo->dBOpi2, bo_ij->C4dbopi2,
- workspace->dDeltap_self[j] );
- }
-
- // rvec_Add( workspace->dDelta[nbr_k->nbr], top_dbo->dBO );
- ++(*top), ++top_dbo;
- }
-
- for( ; l < end_j; ++l ) {
- /* These are the remaining neighbors of j which are not in the
- neighbor_list of i. Note that they might also include i!*/
- nbr_l = &(bonds->select.bond_list[l]);
- top_dbo->wrt = nbr_l->nbr;
-
- // fprintf( stdout, "\tl: %d nbr:%d\n", l, nbr_l->nbr+1 );
-
- // rvec_ScaledAdd( due_j[top_dbo->wrt],
- // -bo_ij->BO * bo_ij->A2_ji, nbr_l->bo_data.dBOp );
-
- /*3rd, dBO*/
- rvec_Scale( top_dbo->dBO, -bo_ij->C3dbo, nbr_l->bo_data.dBOp );
- /*4th, dBOpi*/
- rvec_Scale( top_dbo->dBOpi, -bo_ij->C4dbopi, nbr_l->bo_data.dBOp );
- /*4th, dBOpp*/
- rvec_Scale( top_dbo->dBOpi2, -bo_ij->C4dbopi2, nbr_l->bo_data.dBOp );
-
- if( nbr_l->nbr == i )
- {
- /* do the adjustments on i */
- //rvec_ScaledAdd( due_i[i], bo_ij->A0_ij + bo_ij->BO * bo_ij->A1_ij,
- // bo_ij->dBOp ); /*1st, dBO*/
- //rvec_ScaledAdd( due_i[i], bo_ij->BO * bo_ij->A2_ij,
- // workspace->dDeltap_self[i] ); /*2nd, dBO*/
-
- /*1st, dBO*/
- rvec_ScaledAdd( top_dbo->dBO, bo_ij->C1dbo, bo_ij->dBOp );
- /*2nd, dBO*/
- rvec_ScaledAdd(top_dbo->dBO,bo_ij->C2dbo,workspace->dDeltap_self[i]);
-
- /*1st, dBO_p*/
- rvec_ScaledAdd( top_dbo->dBOpi, bo_ij->C1dbopi, bo_ij->dln_BOp_pi );
- /*2nd, dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi, bo_ij->C2dbopi, bo_ij->dBOp );
- /*3rd,dBOpi*/
- rvec_ScaledAdd( top_dbo->dBOpi,
- bo_ij->C3dbopi, workspace->dDeltap_self[i] );
-
- /*1st, dBO_p*/
- rvec_ScaledAdd(top_dbo->dBOpi2, bo_ij->C1dbopi2, bo_ij->dln_BOp_pi2);
- /*2nd, dBO_p*/
- rvec_ScaledAdd(top_dbo->dBOpi2, bo_ij->C2dbopi2, bo_ij->dBOp);
- /*3rd,dBO_p*/
- rvec_ScaledAdd(top_dbo->dBOpi2,
- bo_ij->C3dbopi2, workspace->dDeltap_self[i]);
- }
-
- // rvec_Add( workspace->dDelta[nbr_l->nbr], top_dbo->dBO );
- ++(*top), ++top_dbo;
- }
-
- // for( k = 0; k < 21; ++k ){
- // fprintf( stderr, "%d %d %d, due_i:[%g %g %g]\n",
- // i+1, j+1, k+1, due_i[k][0], due_i[k][1], due_i[k][2] );
- // fprintf( stderr, "%d %d %d, due_j:[%g %g %g]\n",
- // i+1, j+1, k+1, due_j[k][0], due_j[k][1], due_j[k][2] );
-}
-#endif
-
void Add_dBond_to_Forces_NPT( int i, int pj, simulation_data *data,
storage *workspace, reax_list **lists )
{
reax_list *bonds = (*lists) + BONDS;
bond_data *nbr_j, *nbr_k;
bond_order_data *bo_ij, *bo_ji;
dbond_coefficients coef;
rvec temp, ext_press;
ivec rel_box;
int pk, k, j;
/* Initializations */
nbr_j = &(bonds->select.bond_list[pj]);
j = nbr_j->nbr;
bo_ij = &(nbr_j->bo_data);
bo_ji = &(bonds->select.bond_list[ nbr_j->sym_index ].bo_data);
coef.C1dbo = bo_ij->C1dbo * (bo_ij->Cdbo + bo_ji->Cdbo);
coef.C2dbo = bo_ij->C2dbo * (bo_ij->Cdbo + bo_ji->Cdbo);
coef.C3dbo = bo_ij->C3dbo * (bo_ij->Cdbo + bo_ji->Cdbo);
coef.C1dbopi = bo_ij->C1dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C2dbopi = bo_ij->C2dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C3dbopi = bo_ij->C3dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C4dbopi = bo_ij->C4dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C1dbopi2 = bo_ij->C1dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C2dbopi2 = bo_ij->C2dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C3dbopi2 = bo_ij->C3dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C4dbopi2 = bo_ij->C4dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C1dDelta = bo_ij->C1dbo * (workspace->CdDelta[i]+workspace->CdDelta[j]);
coef.C2dDelta = bo_ij->C2dbo * (workspace->CdDelta[i]+workspace->CdDelta[j]);
coef.C3dDelta = bo_ij->C3dbo * (workspace->CdDelta[i]+workspace->CdDelta[j]);
-
- /************************************
- * forces related to atom i *
- * first neighbors of atom i *
- ************************************/
for( pk = Start_Index(i, bonds); pk < End_Index(i, bonds); ++pk ) {
nbr_k = &(bonds->select.bond_list[pk]);
k = nbr_k->nbr;
rvec_Scale(temp, -coef.C2dbo, nbr_k->bo_data.dBOp); /*2nd, dBO*/
rvec_ScaledAdd(temp, -coef.C2dDelta, nbr_k->bo_data.dBOp);/*dDelta*/
rvec_ScaledAdd(temp, -coef.C3dbopi, nbr_k->bo_data.dBOp); /*3rd, dBOpi*/
rvec_ScaledAdd(temp, -coef.C3dbopi2, nbr_k->bo_data.dBOp);/*3rd, dBOpi2*/
/* force */
rvec_Add( workspace->f[k], temp );
/* pressure */
rvec_iMultiply( ext_press, nbr_k->rel_box, temp );
rvec_Add( data->my_ext_press, ext_press );
- /* if( !ivec_isZero( nbr_k->rel_box ) )
- fprintf( stderr, "%3d %3d %3d: dvec[%10.6f %10.6f %10.6f]"
- "ext[%3d %3d %3d] f[%10.6f %10.6f %10.6f]\n",
- i+1, system->my_atoms[i].x[0],
- system->my_atoms[i].x[1], system->my_atoms[i].x[2],
- j+1, k+1, system->my_atoms[k].x[0],
- system->my_atoms[k].x[1], system->my_atoms[k].x[2],
- nbr_k->dvec[0], nbr_k->dvec[1], nbr_k->dvec[2],
- nbr_k->rel_box[0], nbr_k->rel_box[1], nbr_k->rel_box[2],
- temp[0], temp[1], temp[2] ); */
}
/* then atom i itself */
rvec_Scale( temp, coef.C1dbo, bo_ij->dBOp ); /*1st,dBO*/
rvec_ScaledAdd( temp, coef.C2dbo, workspace->dDeltap_self[i] ); /*2nd,dBO*/
rvec_ScaledAdd( temp, coef.C1dDelta, bo_ij->dBOp ); /*1st,dBO*/
rvec_ScaledAdd( temp, coef.C2dDelta, workspace->dDeltap_self[i] );/*2nd,dBO*/
rvec_ScaledAdd( temp, coef.C1dbopi, bo_ij->dln_BOp_pi ); /*1st,dBOpi*/
rvec_ScaledAdd( temp, coef.C2dbopi, bo_ij->dBOp ); /*2nd,dBOpi*/
rvec_ScaledAdd( temp, coef.C3dbopi, workspace->dDeltap_self[i]);/*3rd,dBOpi*/
rvec_ScaledAdd( temp, coef.C1dbopi2, bo_ij->dln_BOp_pi2 ); /*1st,dBO_pi2*/
rvec_ScaledAdd( temp, coef.C2dbopi2, bo_ij->dBOp ); /*2nd,dBO_pi2*/
rvec_ScaledAdd( temp, coef.C3dbopi2, workspace->dDeltap_self[i] );/*3rd*/
/* force */
rvec_Add( workspace->f[i], temp );
- /* ext pressure due to i is dropped, counting force on j will be enough */
-
- /******************************************************
- * forces and pressure related to atom j *
- * first neighbors of atom j *
- ******************************************************/
for( pk = Start_Index(j, bonds); pk < End_Index(j, bonds); ++pk ) {
nbr_k = &(bonds->select.bond_list[pk]);
k = nbr_k->nbr;
rvec_Scale( temp, -coef.C3dbo, nbr_k->bo_data.dBOp ); /*3rd,dBO*/
rvec_ScaledAdd( temp, -coef.C3dDelta, nbr_k->bo_data.dBOp);/*dDelta*/
rvec_ScaledAdd( temp, -coef.C4dbopi, nbr_k->bo_data.dBOp); /*4th,dBOpi*/
rvec_ScaledAdd( temp, -coef.C4dbopi2, nbr_k->bo_data.dBOp);/*4th,dBOpi2*/
/* force */
rvec_Add( workspace->f[k], temp );
/* pressure */
if( k != i ) {
ivec_Sum( rel_box, nbr_k->rel_box, nbr_j->rel_box ); //rel_box(k, i)
rvec_iMultiply( ext_press, rel_box, temp );
rvec_Add( data->my_ext_press, ext_press );
- /* if( !ivec_isZero( rel_box ) )
- fprintf( stderr, "%3d %3d %3d: dvec[%10.6f %10.6f %10.6f]"
- "ext[%3d %3d %3d] f[%10.6f %10.6f %10.6f]\n",
- i+1, j+1, system->my_atoms[j].x[0],
- system->my_atoms[j].x[1], system->my_atoms[j].x[2],
- k+1, system->my_atoms[k].x[0],
- system->my_atoms[k].x[1], system->my_atoms[k].x[2],
- nbr_k->dvec[0], nbr_k->dvec[1], nbr_k->dvec[2],
- rel_box[0], rel_box[1], rel_box[2],
- temp[0], temp[1], temp[2] ); */
}
}
/* then atom j itself */
rvec_Scale( temp, -coef.C1dbo, bo_ij->dBOp ); /*1st, dBO*/
rvec_ScaledAdd( temp, coef.C3dbo, workspace->dDeltap_self[j] ); /*2nd, dBO*/
rvec_ScaledAdd( temp, -coef.C1dDelta, bo_ij->dBOp ); /*1st, dBO*/
rvec_ScaledAdd( temp, coef.C3dDelta, workspace->dDeltap_self[j]);/*2nd, dBO*/
rvec_ScaledAdd( temp, -coef.C1dbopi, bo_ij->dln_BOp_pi ); /*1st,dBOpi*/
rvec_ScaledAdd( temp, -coef.C2dbopi, bo_ij->dBOp ); /*2nd,dBOpi*/
rvec_ScaledAdd( temp, coef.C4dbopi, workspace->dDeltap_self[j]);/*3rd,dBOpi*/
rvec_ScaledAdd( temp, -coef.C1dbopi2, bo_ij->dln_BOp_pi2 ); /*1st,dBOpi2*/
rvec_ScaledAdd( temp, -coef.C2dbopi2, bo_ij->dBOp ); /*2nd,dBOpi2*/
rvec_ScaledAdd( temp,coef.C4dbopi2,workspace->dDeltap_self[j]);/*3rd,dBOpi2*/
/* force */
rvec_Add( workspace->f[j], temp );
/* pressure */
rvec_iMultiply( ext_press, nbr_j->rel_box, temp );
rvec_Add( data->my_ext_press, ext_press );
- /* if( !ivec_isZero( nbr_j->rel_box ) )
- fprintf( stderr, "%3d %3d %3d: dvec[%10.6f %10.6f %10.6f]"
- "ext[%3d %3d %3d] f[%10.6f %10.6f %10.6f]\n",
- i+1, system->my_atoms[i].x[0], system->my_atoms[i].x[1],
- system->my_atoms[i].x[2],
- j+1,system->my_atoms[j].x[0], system->my_atoms[j].x[1],
- system->my_atoms[j].x[2],
- j+1, nbr_j->dvec[0], nbr_j->dvec[1], nbr_j->dvec[2],
- nbr_j->rel_box[0], nbr_j->rel_box[1], nbr_j->rel_box[2],
- temp[0], temp[1], temp[2] ); */
}
-
-
void Add_dBond_to_Forces( reax_system *system, int i, int pj,
storage *workspace, reax_list **lists )
{
reax_list *bonds = (*lists) + BONDS;
bond_data *nbr_j, *nbr_k;
bond_order_data *bo_ij, *bo_ji;
dbond_coefficients coef;
int pk, k, j;
/* Virial Tallying variables */
+ real f_scaler;
rvec fi_tmp, fj_tmp, fk_tmp, delij, delji, delki, delkj, temp;
/* Initializations */
nbr_j = &(bonds->select.bond_list[pj]);
j = nbr_j->nbr;
bo_ij = &(nbr_j->bo_data);
bo_ji = &(bonds->select.bond_list[ nbr_j->sym_index ].bo_data);
coef.C1dbo = bo_ij->C1dbo * (bo_ij->Cdbo + bo_ji->Cdbo);
coef.C2dbo = bo_ij->C2dbo * (bo_ij->Cdbo + bo_ji->Cdbo);
coef.C3dbo = bo_ij->C3dbo * (bo_ij->Cdbo + bo_ji->Cdbo);
coef.C1dbopi = bo_ij->C1dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C2dbopi = bo_ij->C2dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C3dbopi = bo_ij->C3dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C4dbopi = bo_ij->C4dbopi * (bo_ij->Cdbopi + bo_ji->Cdbopi);
coef.C1dbopi2 = bo_ij->C1dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C2dbopi2 = bo_ij->C2dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C3dbopi2 = bo_ij->C3dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C4dbopi2 = bo_ij->C4dbopi2 * (bo_ij->Cdbopi2 + bo_ji->Cdbopi2);
coef.C1dDelta = bo_ij->C1dbo * (workspace->CdDelta[i]+workspace->CdDelta[j]);
coef.C2dDelta = bo_ij->C2dbo * (workspace->CdDelta[i]+workspace->CdDelta[j]);
coef.C3dDelta = bo_ij->C3dbo * (workspace->CdDelta[i]+workspace->CdDelta[j]);
// forces on i
rvec_Scale( temp, coef.C1dbo, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C2dbo, workspace->dDeltap_self[i] );
rvec_ScaledAdd( temp, coef.C1dDelta, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C2dDelta, workspace->dDeltap_self[i] );
rvec_ScaledAdd( temp, coef.C1dbopi, bo_ij->dln_BOp_pi );
rvec_ScaledAdd( temp, coef.C2dbopi, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C3dbopi, workspace->dDeltap_self[i]);
rvec_ScaledAdd( temp, coef.C1dbopi2, bo_ij->dln_BOp_pi2 );
rvec_ScaledAdd( temp, coef.C2dbopi2, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C3dbopi2, workspace->dDeltap_self[i] );
rvec_Add( workspace->f[i], temp );
if( system->pair_ptr->vflag_atom) {
rvec_Scale(fi_tmp, -1.0, temp);
rvec_ScaledSum( delij, 1., system->my_atoms[i].x,-1., system->my_atoms[j].x );
system->pair_ptr->v_tally(i,fi_tmp,delij);
}
// forces on j
rvec_Scale( temp, -coef.C1dbo, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C3dbo, workspace->dDeltap_self[j] );
rvec_ScaledAdd( temp, -coef.C1dDelta, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C3dDelta, workspace->dDeltap_self[j]);
rvec_ScaledAdd( temp, -coef.C1dbopi, bo_ij->dln_BOp_pi );
rvec_ScaledAdd( temp, -coef.C2dbopi, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C4dbopi, workspace->dDeltap_self[j]);
rvec_ScaledAdd( temp, -coef.C1dbopi2, bo_ij->dln_BOp_pi2 );
rvec_ScaledAdd( temp, -coef.C2dbopi2, bo_ij->dBOp );
rvec_ScaledAdd( temp, coef.C4dbopi2, workspace->dDeltap_self[j]);
rvec_Add( workspace->f[j], temp );
if( system->pair_ptr->vflag_atom) {
rvec_Scale(fj_tmp, -1.0, temp);
rvec_ScaledSum( delji, 1., system->my_atoms[j].x,-1., system->my_atoms[i].x );
system->pair_ptr->v_tally(j,fj_tmp,delji);
}
// forces on k: i neighbor
for( pk = Start_Index(i, bonds); pk < End_Index(i, bonds); ++pk ) {
nbr_k = &(bonds->select.bond_list[pk]);
k = nbr_k->nbr;
rvec_Scale( temp, -coef.C2dbo, nbr_k->bo_data.dBOp);
rvec_ScaledAdd( temp, -coef.C2dDelta, nbr_k->bo_data.dBOp);
rvec_ScaledAdd( temp, -coef.C3dbopi, nbr_k->bo_data.dBOp);
rvec_ScaledAdd( temp, -coef.C3dbopi2, nbr_k->bo_data.dBOp);
rvec_Add( workspace->f[k], temp );
if( system->pair_ptr->vflag_atom ) {
rvec_Scale(fk_tmp, -1.0, temp);
rvec_ScaledSum(delki,1.,system->my_atoms[k].x,-1.,system->my_atoms[i].x);
system->pair_ptr->v_tally(k,fk_tmp,delki);
rvec_ScaledSum(delkj,1.,system->my_atoms[k].x,-1.,system->my_atoms[j].x);
system->pair_ptr->v_tally(k,fk_tmp,delkj);
}
}
// forces on k: j neighbor
for( pk = Start_Index(j, bonds); pk < End_Index(j, bonds); ++pk ) {
nbr_k = &(bonds->select.bond_list[pk]);
k = nbr_k->nbr;
rvec_Scale( temp, -coef.C3dbo, nbr_k->bo_data.dBOp );
rvec_ScaledAdd( temp, -coef.C3dDelta, nbr_k->bo_data.dBOp);
rvec_ScaledAdd( temp, -coef.C4dbopi, nbr_k->bo_data.dBOp);
rvec_ScaledAdd( temp, -coef.C4dbopi2, nbr_k->bo_data.dBOp);
rvec_Add( workspace->f[k], temp );
if( system->pair_ptr->vflag_atom ) {
rvec_Scale(fk_tmp, -1.0, temp);
rvec_ScaledSum(delki,1.,system->my_atoms[k].x,-1.,system->my_atoms[i].x);
system->pair_ptr->v_tally(k,fk_tmp,delki);
rvec_ScaledSum(delkj,1.,system->my_atoms[k].x,-1.,system->my_atoms[j].x);
system->pair_ptr->v_tally(k,fk_tmp,delkj);
}
}
}
int BOp( storage *workspace, reax_list *bonds, real bo_cut,
int i, int btop_i, far_neighbor_data *nbr_pj,
single_body_parameters *sbp_i, single_body_parameters *sbp_j,
two_body_parameters *twbp ) {
int j, btop_j;
real r2, C12, C34, C56;
real Cln_BOp_s, Cln_BOp_pi, Cln_BOp_pi2;
real BO, BO_s, BO_pi, BO_pi2;
bond_data *ibond, *jbond;
bond_order_data *bo_ij, *bo_ji;
j = nbr_pj->nbr;
r2 = SQR(nbr_pj->d);
if( sbp_i->r_s > 0.0 && sbp_j->r_s > 0.0 ) {
C12 = twbp->p_bo1 * pow( nbr_pj->d / twbp->r_s, twbp->p_bo2 );
BO_s = (1.0 + bo_cut) * exp( C12 );
}
else BO_s = C12 = 0.0;
if( sbp_i->r_pi > 0.0 && sbp_j->r_pi > 0.0 ) {
C34 = twbp->p_bo3 * pow( nbr_pj->d / twbp->r_p, twbp->p_bo4 );
BO_pi = exp( C34 );
}
else BO_pi = C34 = 0.0;
if( sbp_i->r_pi_pi > 0.0 && sbp_j->r_pi_pi > 0.0 ) {
C56 = twbp->p_bo5 * pow( nbr_pj->d / twbp->r_pp, twbp->p_bo6 );
BO_pi2= exp( C56 );
}
else BO_pi2 = C56 = 0.0;
/* Initially BO values are the uncorrected ones, page 1 */
BO = BO_s + BO_pi + BO_pi2;
if( BO >= bo_cut ) {
/****** bonds i-j and j-i ******/
ibond = &( bonds->select.bond_list[btop_i] );
btop_j = End_Index( j, bonds );
jbond = &(bonds->select.bond_list[btop_j]);
ibond->nbr = j;
jbond->nbr = i;
ibond->d = nbr_pj->d;
jbond->d = nbr_pj->d;
rvec_Copy( ibond->dvec, nbr_pj->dvec );
rvec_Scale( jbond->dvec, -1, nbr_pj->dvec );
ivec_Copy( ibond->rel_box, nbr_pj->rel_box );
ivec_Scale( jbond->rel_box, -1, nbr_pj->rel_box );
ibond->dbond_index = btop_i;
jbond->dbond_index = btop_i;
ibond->sym_index = btop_j;
jbond->sym_index = btop_i;
Set_End_Index( j, btop_j+1, bonds );
bo_ij = &( ibond->bo_data );
bo_ji = &( jbond->bo_data );
bo_ji->BO = bo_ij->BO = BO;
bo_ji->BO_s = bo_ij->BO_s = BO_s;
bo_ji->BO_pi = bo_ij->BO_pi = BO_pi;
bo_ji->BO_pi2 = bo_ij->BO_pi2 = BO_pi2;
/* Bond Order page2-3, derivative of total bond order prime */
Cln_BOp_s = twbp->p_bo2 * C12 / r2;
Cln_BOp_pi = twbp->p_bo4 * C34 / r2;
Cln_BOp_pi2 = twbp->p_bo6 * C56 / r2;
/* Only dln_BOp_xx wrt. dr_i is stored here, note that
dln_BOp_xx/dr_i = -dln_BOp_xx/dr_j and all others are 0 */
rvec_Scale(bo_ij->dln_BOp_s,-bo_ij->BO_s*Cln_BOp_s,ibond->dvec);
rvec_Scale(bo_ij->dln_BOp_pi,-bo_ij->BO_pi*Cln_BOp_pi,ibond->dvec);
rvec_Scale(bo_ij->dln_BOp_pi2,
-bo_ij->BO_pi2*Cln_BOp_pi2,ibond->dvec);
rvec_Scale(bo_ji->dln_BOp_s, -1., bo_ij->dln_BOp_s);
rvec_Scale(bo_ji->dln_BOp_pi, -1., bo_ij->dln_BOp_pi );
rvec_Scale(bo_ji->dln_BOp_pi2, -1., bo_ij->dln_BOp_pi2 );
- /* Only dBOp wrt. dr_i is stored here, note that
- dBOp/dr_i = -dBOp/dr_j and all others are 0 */
rvec_Scale( bo_ij->dBOp,
-(bo_ij->BO_s * Cln_BOp_s +
bo_ij->BO_pi * Cln_BOp_pi +
bo_ij->BO_pi2 * Cln_BOp_pi2), ibond->dvec );
rvec_Scale( bo_ji->dBOp, -1., bo_ij->dBOp );
rvec_Add( workspace->dDeltap_self[i], bo_ij->dBOp );
rvec_Add( workspace->dDeltap_self[j], bo_ji->dBOp );
bo_ij->BO_s -= bo_cut;
bo_ij->BO -= bo_cut;
bo_ji->BO_s -= bo_cut;
bo_ji->BO -= bo_cut;
workspace->total_bond_order[i] += bo_ij->BO; //currently total_BOp
workspace->total_bond_order[j] += bo_ji->BO; //currently total_BOp
bo_ij->Cdbo = bo_ij->Cdbopi = bo_ij->Cdbopi2 = 0.0;
bo_ji->Cdbo = bo_ji->Cdbopi = bo_ji->Cdbopi2 = 0.0;
- /*fprintf( stderr, "%d %d %g %g %g\n",
- i+1, j+1, bo_ij->BO, bo_ij->BO_pi, bo_ij->BO_pi2 );*/
-
- /*fprintf( stderr, "Cln_BOp_s: %f, pbo2: %f, C12:%f\n",
- Cln_BOp_s, twbp->p_bo2, C12 );
- fprintf( stderr, "Cln_BOp_pi: %f, pbo4: %f, C34:%f\n",
- Cln_BOp_pi, twbp->p_bo4, C34 );
- fprintf( stderr, "Cln_BOp_pi2: %f, pbo6: %f, C56:%f\n",
- Cln_BOp_pi2, twbp->p_bo6, C56 );*/
- /*fprintf(stderr, "pbo1: %f, pbo2:%f\n", twbp->p_bo1, twbp->p_bo2);
- fprintf(stderr, "pbo3: %f, pbo4:%f\n", twbp->p_bo3, twbp->p_bo4);
- fprintf(stderr, "pbo5: %f, pbo6:%f\n", twbp->p_bo5, twbp->p_bo6);
- fprintf( stderr, "r_s: %f, r_p: %f, r_pp: %f\n",
- twbp->r_s, twbp->r_p, twbp->r_pp );
- fprintf( stderr, "C12: %g, C34:%g, C56:%g\n", C12, C34, C56 );*/
-
- /*fprintf( stderr, "\tfactors: %g %g %g\n",
- -(bo_ij->BO_s * Cln_BOp_s + bo_ij->BO_pi * Cln_BOp_pi +
- bo_ij->BO_pi2 * Cln_BOp_pp),
- -bo_ij->BO_pi * Cln_BOp_pi, -bo_ij->BO_pi2 * Cln_BOp_pi2 );*/
- /*fprintf( stderr, "dBOpi:\t[%g, %g, %g]\n",
- bo_ij->dBOp[0], bo_ij->dBOp[1], bo_ij->dBOp[2] );
- fprintf( stderr, "dBOpi:\t[%g, %g, %g]\n",
- bo_ij->dln_BOp_pi[0], bo_ij->dln_BOp_pi[1],
- bo_ij->dln_BOp_pi[2] );
- fprintf( stderr, "dBOpi2:\t[%g, %g, %g]\n\n",
- bo_ij->dln_BOp_pi2[0], bo_ij->dln_BOp_pi2[1],
- bo_ij->dln_BOp_pi2[2] );*/
-
return 1;
}
return 0;
}
int compare_bonds( const void *p1, const void *p2 )
{
return ((bond_data *)p1)->nbr - ((bond_data *)p2)->nbr;
}
void BO( reax_system *system, control_params *control, simulation_data *data,
storage *workspace, reax_list **lists, output_controls *out_control )
{
int i, j, pj, type_i, type_j;
- int start_i, end_i, sym_index;
+ int start_i, end_i, sym_index, num_bonds;
real val_i, Deltap_i, Deltap_boc_i;
real val_j, Deltap_j, Deltap_boc_j;
real f1, f2, f3, f4, f5, f4f5, exp_f4, exp_f5;
real exp_p1i, exp_p2i, exp_p1j, exp_p2j;
real temp, u1_ij, u1_ji, Cf1A_ij, Cf1B_ij, Cf1_ij, Cf1_ji;
real Cf45_ij, Cf45_ji, p_lp1; //u_ij, u_ji
real A0_ij, A1_ij, A2_ij, A2_ji, A3_ij, A3_ji;
real explp1, p_boc1, p_boc2;
single_body_parameters *sbp_i, *sbp_j;
two_body_parameters *twbp;
bond_order_data *bo_ij, *bo_ji;
reax_list *bonds = (*lists) + BONDS;
-#ifdef TEST_FORCES
- int k, pk, start_j, end_j;
- int top_dbo, top_dDelta;
- dbond_data *pdbo;
- dDelta_data *ptop_dDelta;
- reax_list *dDeltas, *dBOs;
- top_dbo=0;
- top_dDelta=0;
- dDeltas = (*lists) + DDELTAS;
- dBOs = (*lists) + DBOS;
-
- //for( i = 0; i < system->N; ++i )
- // qsort( &(bonds->select.bond_list[Start_Index(i, bonds)]),
- // Num_Entries(i, bonds), sizeof(bond_data), compare_bonds );
-#endif
+ num_bonds = 0;
p_boc1 = system->reax_param.gp.l[0];
p_boc2 = system->reax_param.gp.l[1];
/* Calculate Deltaprime, Deltaprime_boc values */
for( i = 0; i < system->N; ++i ) {
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
sbp_i = &(system->reax_param.sbp[type_i]);
workspace->Deltap[i] = workspace->total_bond_order[i] - sbp_i->valency;
workspace->Deltap_boc[i] =
workspace->total_bond_order[i] - sbp_i->valency_val;
- //fprintf( stdout, "%d(%d) %24.15f\n",
- // i, workspace->bond_mark[i], workspace->total_bond_order[i] );
workspace->total_bond_order[i] = 0;
}
- // fprintf( stderr, "done with uncorrected bond orders\n" );
/* Corrected Bond Order calculations */
for( i = 0; i < system->N; ++i ) {
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
sbp_i = &(system->reax_param.sbp[type_i]);
val_i = sbp_i->valency;
Deltap_i = workspace->Deltap[i];
Deltap_boc_i = workspace->Deltap_boc[i];
start_i = Start_Index(i, bonds);
end_i = End_Index(i, bonds);
- // fprintf( stderr, "i:%d Dp:%g Dbocp:%g s:%d e:%d\n",
- // i+1, Deltap_i, Deltap_boc_i, start_i, end_i );
for( pj = start_i; pj < end_i; ++pj ) {
j = bonds->select.bond_list[pj].nbr;
type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
bo_ij = &( bonds->select.bond_list[pj].bo_data );
// fprintf( stderr, "\tj:%d - ubo: %8.3f\n", j+1, bo_ij->BO );
if( i < j || workspace->bond_mark[j] > 3 ) {
twbp = &( system->reax_param.tbp[type_i][type_j] );
-#ifdef TEST_FORCES
- Set_Start_Index( pj, top_dbo, dBOs );
- /* fprintf( stderr, "%6d%6d%12.6f%12.6f%12.6f\n",
- workspace->reverse_map[i], workspace->reverse_map[j],
- twbp->ovc, twbp->v13cor, bo_ij->BO ); */
-#endif
if( twbp->ovc < 0.001 && twbp->v13cor < 0.001 ) {
- /* There is no correction to bond orders nor to derivatives
- of bond order prime! So we leave bond orders unchanged and
- set derivative of bond order coefficients such that
- dBO = dBOp & dBOxx = dBOxxp in Add_dBO_to_Forces */
bo_ij->C1dbo = 1.000000;
bo_ij->C2dbo = 0.000000;
bo_ij->C3dbo = 0.000000;
bo_ij->C1dbopi = bo_ij->BO_pi;
bo_ij->C2dbopi = 0.000000;
bo_ij->C3dbopi = 0.000000;
bo_ij->C4dbopi = 0.000000;
bo_ij->C1dbopi2 = bo_ij->BO_pi2;
bo_ij->C2dbopi2 = 0.000000;
bo_ij->C3dbopi2 = 0.000000;
bo_ij->C4dbopi2 = 0.000000;
-#ifdef TEST_FORCES
- pdbo = &(dBOs->select.dbo_list[ top_dbo ]);
-
- // compute dBO_ij/dr_i
- pdbo->wrt = i;
- rvec_Copy( pdbo->dBO, bo_ij->dBOp );
- rvec_Scale( pdbo->dBOpi, bo_ij->BO_pi, bo_ij->dln_BOp_pi );
- rvec_Scale( pdbo->dBOpi2, bo_ij->BO_pi2, bo_ij->dln_BOp_pi2);
-
- // compute dBO_ij/dr_j
- pdbo++;
- pdbo->wrt = j;
- rvec_Scale( pdbo->dBO, -1.0, bo_ij->dBOp );
- rvec_Scale( pdbo->dBOpi, -bo_ij->BO_pi, bo_ij->dln_BOp_pi );
- rvec_Scale(pdbo->dBOpi2, -bo_ij->BO_pi2, bo_ij->dln_BOp_pi2);
-
- top_dbo += 2;
-#endif
}
else {
val_j = system->reax_param.sbp[type_j].valency;
Deltap_j = workspace->Deltap[j];
Deltap_boc_j = workspace->Deltap_boc[j];
/* on page 1 */
if( twbp->ovc >= 0.001 ) {
/* Correction for overcoordination */
exp_p1i = exp( -p_boc1 * Deltap_i );
exp_p2i = exp( -p_boc2 * Deltap_i );
exp_p1j = exp( -p_boc1 * Deltap_j );
exp_p2j = exp( -p_boc2 * Deltap_j );
f2 = exp_p1i + exp_p1j;
f3 = -1.0 / p_boc2 * log( 0.5 * ( exp_p2i + exp_p2j ) );
f1 = 0.5 * ( ( val_i + f2 )/( val_i + f2 + f3 ) +
( val_j + f2 )/( val_j + f2 + f3 ) );
- /*fprintf( stderr,"%d %d\t%g %g j:%g %g p_boc:%g %g\n"
- "\tf:%g %g %g, exp:%g %g %g %g\n",
- i+1, j+1,
- val_i, Deltap_i, val_j, Deltap_j, p_boc1, p_boc2,
- f1, f2, f3, exp_p1i, exp_p2i, exp_p1j, exp_p2j );*/
-
- /* Now come the derivates */
- /* Bond Order pages 5-7, derivative of f1 */
temp = f2 + f3;
u1_ij = val_i + temp;
u1_ji = val_j + temp;
Cf1A_ij = 0.5 * f3 * (1.0 / SQR( u1_ij ) +
1.0 / SQR( u1_ji ));
Cf1B_ij = -0.5 * (( u1_ij - f3 ) / SQR( u1_ij ) +
( u1_ji - f3 ) / SQR( u1_ji ));
- //Cf1_ij = -Cf1A_ij * p_boc1 * exp_p1i +
- // Cf1B_ij * exp_p2i / ( exp_p2i + exp_p2j );
Cf1_ij = 0.50 * ( -p_boc1 * exp_p1i / u1_ij -
((val_i+f2) / SQR(u1_ij)) *
( -p_boc1 * exp_p1i +
exp_p2i / ( exp_p2i + exp_p2j ) ) +
-p_boc1 * exp_p1i / u1_ji -
((val_j+f2) / SQR(u1_ji)) *
( -p_boc1 * exp_p1i +
exp_p2i / ( exp_p2i + exp_p2j ) ));
Cf1_ji = -Cf1A_ij * p_boc1 * exp_p1j +
Cf1B_ij * exp_p2j / ( exp_p2i + exp_p2j );
- //fprintf( stderr, "\tCf1:%g %g\n", Cf1_ij, Cf1_ji );
}
else {
/* No overcoordination correction! */
f1 = 1.0;
Cf1_ij = Cf1_ji = 0.0;
}
if( twbp->v13cor >= 0.001 ) {
/* Correction for 1-3 bond orders */
exp_f4 =exp(-(twbp->p_boc4 * SQR( bo_ij->BO ) -
Deltap_boc_i) * twbp->p_boc3 + twbp->p_boc5);
exp_f5 =exp(-(twbp->p_boc4 * SQR( bo_ij->BO ) -
Deltap_boc_j) * twbp->p_boc3 + twbp->p_boc5);
f4 = 1. / (1. + exp_f4);
f5 = 1. / (1. + exp_f5);
f4f5 = f4 * f5;
/* Bond Order pages 8-9, derivative of f4 and f5 */
- /*temp = twbp->p_boc5 -
- twbp->p_boc3 * twbp->p_boc4 * SQR( bo_ij->BO );
- u_ij = temp + twbp->p_boc3 * Deltap_boc_i;
- u_ji = temp + twbp->p_boc3 * Deltap_boc_j;
- Cf45_ij = Cf45( u_ij, u_ji ) / f4f5;
- Cf45_ji = Cf45( u_ji, u_ij ) / f4f5;*/
Cf45_ij = -f4 * exp_f4;
Cf45_ji = -f5 * exp_f5;
}
else {
f4 = f5 = f4f5 = 1.0;
Cf45_ij = Cf45_ji = 0.0;
}
/* Bond Order page 10, derivative of total bond order */
A0_ij = f1 * f4f5;
A1_ij = -2 * twbp->p_boc3 * twbp->p_boc4 * bo_ij->BO *
(Cf45_ij + Cf45_ji);
A2_ij = Cf1_ij / f1 + twbp->p_boc3 * Cf45_ij;
A2_ji = Cf1_ji / f1 + twbp->p_boc3 * Cf45_ji;
A3_ij = A2_ij + Cf1_ij / f1;
A3_ji = A2_ji + Cf1_ji / f1;
- /*fprintf( stderr, "\tBO: %f, A0: %f, A1: %f"
- "A2_ij: %f A2_ji: %f, A3_ij: %f, A3_ji: %f\n",
- bo_ij->BO,
- A0_ij, A1_ij, A2_ij, A2_ji, A3_ij, A3_ji );*/
-
-
/* find corrected bond orders and their derivative coef */
bo_ij->BO = bo_ij->BO * A0_ij;
bo_ij->BO_pi = bo_ij->BO_pi * A0_ij *f1;
bo_ij->BO_pi2= bo_ij->BO_pi2* A0_ij *f1;
bo_ij->BO_s = bo_ij->BO - ( bo_ij->BO_pi + bo_ij->BO_pi2 );
bo_ij->C1dbo = A0_ij + bo_ij->BO * A1_ij;
bo_ij->C2dbo = bo_ij->BO * A2_ij;
bo_ij->C3dbo = bo_ij->BO * A2_ji;
bo_ij->C1dbopi = f1*f1*f4*f5;
bo_ij->C2dbopi = bo_ij->BO_pi * A1_ij;
bo_ij->C3dbopi = bo_ij->BO_pi * A3_ij;
bo_ij->C4dbopi = bo_ij->BO_pi * A3_ji;
bo_ij->C1dbopi2 = f1*f1*f4*f5;
bo_ij->C2dbopi2 = bo_ij->BO_pi2 * A1_ij;
bo_ij->C3dbopi2 = bo_ij->BO_pi2 * A3_ij;
bo_ij->C4dbopi2 = bo_ij->BO_pi2 * A3_ji;
-#ifdef TEST_FORCES
- Calculate_dBO( i, pj, workspace, lists, &top_dbo );
-#endif
}
/* neglect bonds that are < 1e-10 */
if( bo_ij->BO < 1e-10 )
bo_ij->BO = 0.0;
if( bo_ij->BO_s < 1e-10 )
bo_ij->BO_s = 0.0;
if( bo_ij->BO_pi < 1e-10 )
bo_ij->BO_pi = 0.0;
if( bo_ij->BO_pi2 < 1e-10 )
bo_ij->BO_pi2 = 0.0;
workspace->total_bond_order[i] += bo_ij->BO; //now keeps total_BO
-
- /* fprintf( stderr, "%d %d\t%g %g %g %g\n"
- "Cdbo:\t%g %g %g\n"
- "Cdbopi:\t%g %g %g %g\n"
- "Cdbopi2:%g %g %g %g\n\n",
- i+1, j+1,
- bonds->select.bond_list[ pj ].d,
- bo_ij->BO,bo_ij->BO_pi, bo_ij->BO_pi2,
- bo_ij->C1dbo, bo_ij->C2dbo, bo_ij->C3dbo,
- bo_ij->C1dbopi, bo_ij->C2dbopi,
- bo_ij->C3dbopi, bo_ij->C4dbopi,
- bo_ij->C1dbopi2,bo_ij->C2dbopi2,
- bo_ij->C3dbopi2, bo_ij->C4dbopi2 ); */
-
- /* fprintf( stderr, "%d %d BO:%f BO_s:%f BO_pi:%f BO_pi2:%f\n",
- i+1,j+1,bo_ij->BO,bo_ij->BO_s,bo_ij->BO_pi,bo_ij->BO_pi2 );*/
-
-#ifdef TEST_FORCES
- Set_End_Index( pj, top_dbo, dBOs );
- Add_dBO( system, lists, i, pj, 1.0, workspace->dDelta );
-#endif
}
else {
/* We only need to update bond orders from bo_ji
everything else is set in uncorrected_bo calculations */
sym_index = bonds->select.bond_list[pj].sym_index;
bo_ji = &(bonds->select.bond_list[ sym_index ].bo_data);
bo_ij->BO = bo_ji->BO;
bo_ij->BO_s = bo_ji->BO_s;
bo_ij->BO_pi = bo_ji->BO_pi;
bo_ij->BO_pi2 = bo_ji->BO_pi2;
workspace->total_bond_order[i] += bo_ij->BO;// now keeps total_BO
-#ifdef TEST_FORCES
- Add_dBO( system, lists, j, sym_index, 1.0, workspace->dDelta );
-#endif
}
}
-#ifdef TEST_FORCES
- // fprintf( stderr, "dDelta computations\nj:" );
- Set_Start_Index( i, top_dDelta, dDeltas );
- ptop_dDelta = &( dDeltas->select.dDelta_list[top_dDelta] );
-
- for( pj = start_i; pj < end_i; ++pj ) {
- j = bonds->select.bond_list[pj].nbr;
- // fprintf( stderr, "%d ", j );
-
- if( !rvec_isZero( workspace->dDelta[j] ) ) {
- ptop_dDelta->wrt = j;
- rvec_Copy( ptop_dDelta->dVal, workspace->dDelta[j] );
- rvec_MakeZero( workspace->dDelta[j] );
- ++top_dDelta, ++ptop_dDelta;
- }
-
- start_j = Start_Index(j, bonds);
- end_j = End_Index(j, bonds);
- for( pk = start_j; pk < end_j; ++pk ) {
- k = bonds->select.bond_list[pk].nbr;
- if( !rvec_isZero( workspace->dDelta[k] ) ) {
- ptop_dDelta->wrt = k;
- rvec_Copy( ptop_dDelta->dVal, workspace->dDelta[k] );
- rvec_MakeZero( workspace->dDelta[k] );
- ++top_dDelta, ++ptop_dDelta;
- }
- }
- }
-
- Set_End_Index( i, top_dDelta, dDeltas );
-
- /*for(pj = Start_Index(i,dDeltas); pj < End_Index(i,dDeltas); ++pj)
- fprintf( stdout, "dDel: %d %d [%g %g %g]\n",
- i+1, dDeltas->select.dDelta_list[pj].wrt+1,
- dDeltas->select.dDelta_list[pj].dVal[0],
- dDeltas->select.dDelta_list[pj].dVal[1],
- dDeltas->select.dDelta_list[pj].dVal[2] );*/
-#endif
}
- /* fprintf( stderr, "\tCalculated actual bond orders ...\n" );
- fprintf( stderr, "j\tDelta\tDelta_e\tDelta_boc\tnlp"
- "\tDelta_lp\tClp\tdDelta_lp\n" );
- fprintf( stderr, "Atom\tDelta\t\tDelta_e\t\tDelta_boc\tnlp"
- "\t\tnlp_opt\t\tDelta_lp\tClp\t\tdDelta_lp\n" );*/
-
p_lp1 = system->reax_param.gp.l[15];
- /* Calculate some helper variables that are used at many places
- throughout force calculations */
for( j = 0; j < system->N; ++j ){
type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
sbp_j = &(system->reax_param.sbp[ type_j ]);
workspace->Delta[j] = workspace->total_bond_order[j] - sbp_j->valency;
workspace->Delta_e[j] = workspace->total_bond_order[j] - sbp_j->valency_e;
workspace->Delta_boc[j] = workspace->total_bond_order[j] -
sbp_j->valency_boc;
workspace->Delta_val[j] = workspace->total_bond_order[j] -
sbp_j->valency_val;
workspace->vlpex[j] = workspace->Delta_e[j] -
2.0 * (int)(workspace->Delta_e[j]/2.0);
explp1 = exp(-p_lp1 * SQR(2.0 + workspace->vlpex[j]));
workspace->nlp[j] = explp1 - (int)(workspace->Delta_e[j] / 2.0);
workspace->Delta_lp[j] = sbp_j->nlp_opt - workspace->nlp[j];
workspace->Clp[j] = 2.0 * p_lp1 * explp1 * (2.0 + workspace->vlpex[j]);
- /* Adri uses different dDelta_lp values than the ones in notes... */
workspace->dDelta_lp[j] = workspace->Clp[j];
- //workspace->dDelta_lp[j] = workspace->Clp[j] + (0.5-workspace->Clp[j]) *
- //((fabs(workspace->Delta_e[j]/2.0 -
- // (int)(workspace->Delta_e[j]/2.0)) < 0.1) ? 1 : 0 );
if( sbp_j->mass > 21.0 ) {
workspace->nlp_temp[j] = 0.5 * (sbp_j->valency_e - sbp_j->valency);
workspace->Delta_lp_temp[j] = sbp_j->nlp_opt - workspace->nlp_temp[j];
workspace->dDelta_lp_temp[j] = 0.;
}
else {
workspace->nlp_temp[j] = workspace->nlp[j];
workspace->Delta_lp_temp[j] = sbp_j->nlp_opt - workspace->nlp_temp[j];
workspace->dDelta_lp_temp[j] = workspace->Clp[j];
}
- }
-
-#if defined(TEST_ENERGIES) || defined(TEST_FORCES)
- Print_Bond_List( system, control, data, lists, out_control);
-#endif
-}
-
-#if defined(DEPRECATED)
-/* Locate j on i's list.
- This function assumes that j is there for sure!
- And this is the case given our method of neighbor generation*/
-int Locate_Symmetric_Bond( reax_list *bonds, int i, int j )
-{
- int start = Start_Index(i, bonds);
- int end = End_Index(i, bonds);
- int mid = (start + end) / 2;
- int mid_nbr;
-
- while( (mid_nbr = bonds->select.bond_list[mid].nbr) != j ) {
- /*fprintf( stderr, "\tstart: %d end: %d mid: %d\n",
- start, end, mid );*/
- if( mid_nbr < j )
- start = mid+1;
- else end = mid - 1;
-
- mid = (start + end) / 2;
}
- return mid;
-}
-
-
-inline void Copy_Bond_Order_Data( bond_order_data *dest, bond_order_data *src )
-{
- dest->BO = src->BO;
- dest->BO_s = src->BO_s;
- dest->BO_pi = src->BO_pi;
- dest->BO_pi2 = src->BO_pi2;
-
- rvec_Scale( dest->dBOp, -1.0, src->dBOp );
- rvec_Scale( dest->dln_BOp_s, -1.0, src->dln_BOp_s );
- rvec_Scale( dest->dln_BOp_pi, -1.0, src->dln_BOp_pi );
- rvec_Scale( dest->dln_BOp_pi2, -1.0, src->dln_BOp_pi2 );
}
-#endif
diff --git a/src/USER-REAXC/reaxc_bonds.cpp b/src/USER-REAXC/reaxc_bonds.cpp
index 45b493237..c6fb8b372 100644
--- a/src/USER-REAXC/reaxc_bonds.cpp
+++ b/src/USER-REAXC/reaxc_bonds.cpp
@@ -1,161 +1,128 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "bonds.h"
-#include "bond_orders.h"
-#include "list.h"
-#include "tool_box.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_bonds.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_tool_box.h"
#include "reaxc_vector.h"
-#endif
-
void Bonds( reax_system *system, control_params *control,
simulation_data *data, storage *workspace, reax_list **lists,
output_controls *out_control )
{
int i, j, pj, natoms;
int start_i, end_i;
int type_i, type_j;
real ebond, pow_BOs_be2, exp_be12, CEbo;
real gp3, gp4, gp7, gp10, gp37;
real exphu, exphua1, exphub1, exphuov, hulpov, estriph;
real decobdbo, decobdboua, decobdboub;
single_body_parameters *sbp_i, *sbp_j;
two_body_parameters *twbp;
bond_order_data *bo_ij;
reax_list *bonds;
bonds = (*lists) + BONDS;
gp3 = system->reax_param.gp.l[3];
gp4 = system->reax_param.gp.l[4];
gp7 = system->reax_param.gp.l[7];
gp10 = system->reax_param.gp.l[10];
gp37 = (int) system->reax_param.gp.l[37];
natoms = system->n;
for( i = 0; i < natoms; ++i ) {
start_i = Start_Index(i, bonds);
end_i = End_Index(i, bonds);
for( pj = start_i; pj < end_i; ++pj ) {
j = bonds->select.bond_list[pj].nbr;
if( system->my_atoms[i].orig_id <= system->my_atoms[j].orig_id ) {
/* set the pointers */
type_i = system->my_atoms[i].type;
type_j = system->my_atoms[j].type;
sbp_i = &( system->reax_param.sbp[type_i] );
sbp_j = &( system->reax_param.sbp[type_j] );
twbp = &( system->reax_param.tbp[type_i][type_j] );
bo_ij = &( bonds->select.bond_list[pj].bo_data );
/* calculate the constants */
pow_BOs_be2 = pow( bo_ij->BO_s, twbp->p_be2 );
exp_be12 = exp( twbp->p_be1 * ( 1.0 - pow_BOs_be2 ) );
CEbo = -twbp->De_s * exp_be12 *
( 1.0 - twbp->p_be1 * twbp->p_be2 * pow_BOs_be2 );
/* calculate the Bond Energy */
data->my_en.e_bond += ebond =
-twbp->De_s * bo_ij->BO_s * exp_be12
-twbp->De_p * bo_ij->BO_pi
-twbp->De_pp * bo_ij->BO_pi2;
/* tally into per-atom energy */
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(i,j,natoms,1,ebond,0.0,0.0,0.0,0.0,0.0);
/* calculate derivatives of Bond Orders */
bo_ij->Cdbo += CEbo;
bo_ij->Cdbopi -= (CEbo + twbp->De_p);
bo_ij->Cdbopi2 -= (CEbo + twbp->De_pp);
-#ifdef TEST_ENERGY
- //fprintf( out_control->ebond, "%6d%6d%24.15e%24.15e%24.15e\n",
- fprintf( out_control->ebond, "%6d%6d%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[j].orig_id,
- bo_ij->BO, ebond, data->my_en.e_bond );
-#endif
-#ifdef TEST_FORCES
- Add_dBO( system, lists, i, pj, CEbo, workspace->f_be );
- Add_dBOpinpi2( system, lists, i, pj,
- -(CEbo + twbp->De_p), -(CEbo + twbp->De_pp),
- workspace->f_be, workspace->f_be );
-#endif
/* Stabilisation terminal triple bond */
if( bo_ij->BO >= 1.00 ) {
if( gp37 == 2 ||
(sbp_i->mass == 12.0000 && sbp_j->mass == 15.9990) ||
(sbp_j->mass == 12.0000 && sbp_i->mass == 15.9990) ) {
exphu = exp( -gp7 * SQR(bo_ij->BO - 2.50) );
exphua1 = exp(-gp3 * (workspace->total_bond_order[i]-bo_ij->BO));
exphub1 = exp(-gp3 * (workspace->total_bond_order[j]-bo_ij->BO));
exphuov = exp(gp4 * (workspace->Delta[i] + workspace->Delta[j]));
hulpov = 1.0 / (1.0 + 25.0 * exphuov);
estriph = gp10 * exphu * hulpov * (exphua1 + exphub1);
data->my_en.e_bond += estriph;
decobdbo = gp10 * exphu * hulpov * (exphua1 + exphub1) *
( gp3 - 2.0 * gp7 * (bo_ij->BO-2.50) );
decobdboua = -gp10 * exphu * hulpov *
(gp3*exphua1 + 25.0*gp4*exphuov*hulpov*(exphua1+exphub1));
decobdboub = -gp10 * exphu * hulpov *
(gp3*exphub1 + 25.0*gp4*exphuov*hulpov*(exphua1+exphub1));
/* tally into per-atom energy */
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(i,j,natoms,1,estriph,0.0,0.0,0.0,0.0,0.0);
bo_ij->Cdbo += decobdbo;
workspace->CdDelta[i] += decobdboua;
workspace->CdDelta[j] += decobdboub;
-#ifdef TEST_ENERGY
- //fprintf( out_control->ebond,
- // "%6d%6d%24.15e%24.15e%24.15e%24.15e\n",
- // system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- // estriph, decobdbo, decobdboua, decobdboub );
-#endif
-#ifdef TEST_FORCES
- Add_dBO( system, lists, i, pj, decobdbo, workspace->f_be );
- Add_dDelta( system, lists, i, decobdboua, workspace->f_be );
- Add_dDelta( system, lists, j, decobdboub, workspace->f_be );
-#endif
}
}
}
}
}
}
diff --git a/src/USER-REAXC/reaxc_control.cpp b/src/USER-REAXC/reaxc_control.cpp
index 2902d5161..eadce53a0 100644
--- a/src/USER-REAXC/reaxc_control.cpp
+++ b/src/USER-REAXC/reaxc_control.cpp
@@ -1,407 +1,385 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "control.h"
-#include "tool_box.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_control.h"
#include "reaxc_tool_box.h"
-#endif
-
char Read_Control_File( char *control_file, control_params* control,
output_controls *out_control )
{
FILE *fp;
char *s, **tmp;
int c,i,ival;
real val;
/* open control file */
if ( (fp = fopen( control_file, "r" ) ) == NULL ) {
fprintf( stderr, "error opening the control file! terminating...\n" );
MPI_Abort( MPI_COMM_WORLD, FILE_NOT_FOUND );
}
/* assign default values */
strcpy( control->sim_name, "simulate" );
control->ensemble = NVE;
control->nsteps = 0;
control->dt = 0.25;
control->nprocs = 1;
control->procs_by_dim[0] = 1;
control->procs_by_dim[1] = 1;
control->procs_by_dim[2] = 1;
control->geo_format = 1;
control->restart = 0;
out_control->restart_format = WRITE_BINARY;
out_control->restart_freq = 0;
control->reposition_atoms = 0;
control->restrict_bonds = 0;
control->remove_CoM_vel = 25;
out_control->debug_level = 0;
out_control->energy_update_freq = 0;
control->reneighbor = 1;
control->vlist_cut = control->nonb_cut;
control->bond_cut = 5.0;
control->bg_cut = 0.3;
control->thb_cut = 0.001;
control->thb_cutsq = 0.00001;
control->hbond_cut = 7.5;
control->tabulate = 0;
control->qeq_freq = 1;
control->q_err = 1e-6;
control->refactor = 100;
control->droptol = 1e-2;;
control->T_init = 0.;
control->T_final = 300.;
control->Tau_T = 500.0;
control->T_mode = 0;
control->T_rate = 1.;
control->T_freq = 1.;
control->P[0] = control->P[1] = control->P[2] = 0.000101325;
control->Tau_P[0] = control->Tau_P[1] = control->Tau_P[2] = 500.0;
control->Tau_PT[0] = control->Tau_PT[1] = control->Tau_PT[2] = 500.0;
control->compressibility = 1.0;
control->press_mode = 0;
control->virial = 0;
out_control->write_steps = 0;
out_control->traj_compress = 0;
out_control->traj_method = REG_TRAJ;
strcpy( out_control->traj_title, "default_title" );
out_control->atom_info = 0;
out_control->bond_info = 0;
out_control->angle_info = 0;
control->molecular_analysis = 0;
control->dipole_anal = 0;
control->freq_dipole_anal = 0;
control->diffusion_coef = 0;
control->freq_diffusion_coef = 0;
control->restrict_type = 0;
/* memory allocations */
s = (char*) malloc(sizeof(char)*MAX_LINE);
tmp = (char**) malloc(sizeof(char*)*MAX_TOKENS);
for (i=0; i < MAX_TOKENS; i++)
tmp[i] = (char*) malloc(sizeof(char)*MAX_LINE);
/* read control parameters file */
while (!feof(fp)) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
- //fprintf( stderr, "%s\n", s );
if( strcmp(tmp[0], "simulation_name") == 0 ) {
strcpy( control->sim_name, tmp[1] );
}
else if( strcmp(tmp[0], "ensemble_type") == 0 ) {
ival = atoi(tmp[1]);
control->ensemble = ival;
if( ival == iNPT || ival ==sNPT || ival == NPT )
control->virial = 1;
}
else if( strcmp(tmp[0], "nsteps") == 0 ) {
ival = atoi(tmp[1]);
control->nsteps = ival;
}
else if( strcmp(tmp[0], "dt") == 0) {
val = atof(tmp[1]);
control->dt = val * 1.e-3; // convert dt from fs to ps!
}
else if( strcmp(tmp[0], "proc_by_dim") == 0 ) {
ival = atoi(tmp[1]);
control->procs_by_dim[0] = ival;
ival = atoi(tmp[2]);
control->procs_by_dim[1] = ival;
ival = atoi(tmp[3]);
control->procs_by_dim[2] = ival;
control->nprocs = control->procs_by_dim[0]*control->procs_by_dim[1]*
control->procs_by_dim[2];
}
- //else if( strcmp(tmp[0], "restart") == 0 ) {
- // ival = atoi(tmp[1]);
- // control->restart = ival;
- //}
- //else if( strcmp(tmp[0], "restart_from") == 0 ) {
- // strcpy( control->restart_from, tmp[1] );
- //}
else if( strcmp(tmp[0], "random_vel") == 0 ) {
ival = atoi(tmp[1]);
control->random_vel = ival;
}
else if( strcmp(tmp[0], "restart_format") == 0 ) {
ival = atoi(tmp[1]);
out_control->restart_format = ival;
}
else if( strcmp(tmp[0], "restart_freq") == 0 ) {
ival = atoi(tmp[1]);
out_control->restart_freq = ival;
}
else if( strcmp(tmp[0], "reposition_atoms") == 0 ) {
ival = atoi(tmp[1]);
control->reposition_atoms = ival;
}
else if( strcmp(tmp[0], "restrict_bonds") == 0 ) {
ival = atoi( tmp[1] );
control->restrict_bonds = ival;
}
else if( strcmp(tmp[0], "remove_CoM_vel") == 0 ) {
ival = atoi(tmp[1]);
control->remove_CoM_vel = ival;
}
else if( strcmp(tmp[0], "debug_level") == 0 ) {
ival = atoi(tmp[1]);
out_control->debug_level = ival;
}
else if( strcmp(tmp[0], "energy_update_freq") == 0 ) {
ival = atoi(tmp[1]);
out_control->energy_update_freq = ival;
}
else if( strcmp(tmp[0], "reneighbor") == 0 ) {
ival = atoi( tmp[1] );
control->reneighbor = ival;
}
else if( strcmp(tmp[0], "vlist_buffer") == 0 ) {
val = atof(tmp[1]);
control->vlist_cut= val + control->nonb_cut;
}
else if( strcmp(tmp[0], "nbrhood_cutoff") == 0 ) {
val = atof(tmp[1]);
control->bond_cut = val;
}
else if( strcmp(tmp[0], "bond_graph_cutoff") == 0 ) {
val = atof(tmp[1]);
control->bg_cut = val;
}
else if( strcmp(tmp[0], "thb_cutoff") == 0 ) {
val = atof(tmp[1]);
control->thb_cut = val;
}
else if( strcmp(tmp[0], "thb_cutoff_sq") == 0 ) {
val = atof(tmp[1]);
control->thb_cutsq = val;
}
else if( strcmp(tmp[0], "hbond_cutoff") == 0 ) {
val = atof( tmp[1] );
control->hbond_cut = val;
}
else if( strcmp(tmp[0], "ghost_cutoff") == 0 ) {
val = atof(tmp[1]);
control->user_ghost_cut = val;
}
else if( strcmp(tmp[0], "tabulate_long_range") == 0 ) {
ival = atoi( tmp[1] );
control->tabulate = ival;
}
else if( strcmp(tmp[0], "qeq_freq") == 0 ) {
ival = atoi( tmp[1] );
control->qeq_freq = ival;
}
else if( strcmp(tmp[0], "q_err") == 0 ) {
val = atof( tmp[1] );
control->q_err = val;
}
else if( strcmp(tmp[0], "ilu_refactor") == 0 ) {
ival = atoi( tmp[1] );
control->refactor = ival;
}
else if( strcmp(tmp[0], "ilu_droptol") == 0 ) {
val = atof( tmp[1] );
control->droptol = val;
}
else if( strcmp(tmp[0], "temp_init") == 0 ) {
val = atof(tmp[1]);
control->T_init = val;
if( control->T_init < 0.1 )
control->T_init = 0.1;
}
else if( strcmp(tmp[0], "temp_final") == 0 ) {
val = atof(tmp[1]);
control->T_final = val;
if( control->T_final < 0.1 )
control->T_final = 0.1;
}
else if( strcmp(tmp[0], "t_mass") == 0 ) {
val = atof(tmp[1]);
control->Tau_T = val * 1.e-3; // convert t_mass from fs to ps
}
else if( strcmp(tmp[0], "t_mode") == 0 ) {
ival = atoi(tmp[1]);
control->T_mode = ival;
}
else if( strcmp(tmp[0], "t_rate") == 0 ) {
val = atof(tmp[1]);
control->T_rate = val;
}
else if( strcmp(tmp[0], "t_freq") == 0 ) {
val = atof(tmp[1]);
control->T_freq = val;
}
else if( strcmp(tmp[0], "pressure") == 0 ) {
if( control->ensemble == iNPT ) {
control->P[0] = control->P[1] = control->P[2] = atof(tmp[1]);
}
else if( control->ensemble == sNPT ) {
control->P[0] = atof(tmp[1]);
control->P[1] = atof(tmp[2]);
control->P[2] = atof(tmp[3]);
}
}
else if( strcmp(tmp[0], "p_mass") == 0 ) {
// convert p_mass from fs to ps
if( control->ensemble == iNPT ) {
control->Tau_P[0] = control->Tau_P[1] = control->Tau_P[2] =
atof(tmp[1]) * 1.e-3;
}
else if( control->ensemble == sNPT ) {
control->Tau_P[0] = atof(tmp[1]) * 1.e-3;
control->Tau_P[1] = atof(tmp[2]) * 1.e-3;
control->Tau_P[2] = atof(tmp[3]) * 1.e-3;
}
}
else if( strcmp(tmp[0], "pt_mass") == 0 ) {
val = atof(tmp[1]);
control->Tau_PT[0] = control->Tau_PT[1] = control->Tau_PT[2] =
val * 1.e-3; // convert pt_mass from fs to ps
}
else if( strcmp(tmp[0], "compress") == 0 ) {
val = atof(tmp[1]);
control->compressibility = val;
}
else if( strcmp(tmp[0], "press_mode") == 0 ) {
ival = atoi(tmp[1]);
control->press_mode = ival;
}
else if( strcmp(tmp[0], "geo_format") == 0 ) {
ival = atoi( tmp[1] );
control->geo_format = ival;
}
else if( strcmp(tmp[0], "write_freq") == 0 ) {
ival = atoi(tmp[1]);
out_control->write_steps = ival;
}
else if( strcmp(tmp[0], "traj_compress") == 0 ) {
ival = atoi(tmp[1]);
out_control->traj_compress = ival;
}
else if( strcmp(tmp[0], "traj_method") == 0 ) {
ival = atoi(tmp[1]);
out_control->traj_method = ival;
}
else if( strcmp(tmp[0], "traj_title") == 0 ) {
strcpy( out_control->traj_title, tmp[1] );
}
else if( strcmp(tmp[0], "atom_info") == 0 ) {
ival = atoi(tmp[1]);
out_control->atom_info += ival * 4;
}
else if( strcmp(tmp[0], "atom_velocities") == 0 ) {
ival = atoi(tmp[1]);
out_control->atom_info += ival * 2;
}
else if( strcmp(tmp[0], "atom_forces") == 0 ) {
ival = atoi(tmp[1]);
out_control->atom_info += ival * 1;
}
else if( strcmp(tmp[0], "bond_info") == 0 ) {
ival = atoi(tmp[1]);
out_control->bond_info = ival;
}
else if( strcmp(tmp[0], "angle_info") == 0 ) {
ival = atoi(tmp[1]);
out_control->angle_info = ival;
}
else if( strcmp(tmp[0], "molecular_analysis") == 0 ) {
ival = atoi(tmp[1]);
control->molecular_analysis = ival;
}
else if( strcmp(tmp[0], "ignore") == 0 ) {
control->num_ignored = atoi(tmp[1]);
for( i = 0; i < control->num_ignored; ++i )
control->ignore[atoi(tmp[i+2])] = 1;
}
else if( strcmp(tmp[0], "dipole_anal") == 0 ) {
ival = atoi(tmp[1]);
control->dipole_anal = ival;
}
else if( strcmp(tmp[0], "freq_dipole_anal") == 0 ) {
ival = atoi(tmp[1]);
control->freq_dipole_anal = ival;
}
else if( strcmp(tmp[0], "diffusion_coef") == 0 ) {
ival = atoi(tmp[1]);
control->diffusion_coef = ival;
}
else if( strcmp(tmp[0], "freq_diffusion_coef") == 0 ) {
ival = atoi(tmp[1]);
control->freq_diffusion_coef = ival;
}
else if( strcmp(tmp[0], "restrict_type") == 0 ) {
ival = atoi(tmp[1]);
control->restrict_type = ival;
}
else {
fprintf( stderr, "WARNING: unknown parameter %s\n", tmp[0] );
MPI_Abort( MPI_COMM_WORLD, 15 );
}
}
/* determine target T */
if( control->T_mode == 0 )
control->T = control->T_final;
else control->T = control->T_init;
/* free memory allocations at the top */
for( i = 0; i < MAX_TOKENS; i++ )
free( tmp[i] );
free( tmp );
free( s );
fclose(fp);
- // fprintf( stderr,"%d %d %10.5f %d %10.5f %10.5f\n",
- // control->ensemble, control->nsteps, control->dt,
- // control->tabulate, control->T, control->P );
-
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "control file read\n" );
-#endif
-
return SUCCESS;
}
diff --git a/src/USER-REAXC/reaxc_defs.h b/src/USER-REAXC/reaxc_defs.h
index 6a1406387..d0a75d431 100644
--- a/src/USER-REAXC/reaxc_defs.h
+++ b/src/USER-REAXC/reaxc_defs.h
@@ -1,159 +1,159 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#ifndef REAX_DEFS_H
#define REAX_DEFS_H
#if defined(__IBMC__)
#define inline __inline__
#endif /*IBMC*/
#ifndef SUCCESS
#define SUCCESS 1
#endif
#ifndef FAILURE
#define FAILURE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define SQR(x) ((x)*(x))
#define CUBE(x) ((x)*(x)*(x))
#define DEG2RAD(a) ((a)*constPI/180.0)
#define RAD2DEG(a) ((a)*180.0/constPI)
// #define MAX(x,y) (((x) > (y)) ? (x) : (y))
// #define MIN(x,y) (((x) < (y)) ? (x) : (y))
#define MAX3(x,y,z) MAX( MAX(x,y), z)
#define constPI 3.14159265
#define C_ele 332.06371
//#define K_B 503.398008 // kcal/mol/K
#define K_B 0.831687 // amu A^2 / ps^2 / K
#define F_CONV 1e6 / 48.88821291 / 48.88821291 // --> amu A / ps^2
#define E_CONV 0.002391 // amu A^2 / ps^2 --> kcal/mol
#define EV_to_KCALpMOL 14.400000 // ElectronVolt --> KCAL per MOLe
#define KCALpMOL_to_EV 23.02 // 23.060549 //KCAL per MOLe --> ElectronVolt
#define ECxA_to_DEBYE 4.803204 // elem. charge * Ang -> debye
#define CAL_to_JOULES 4.184000 // CALories --> JOULES
#define JOULES_to_CAL 1/4.184000 // JOULES --> CALories
#define AMU_to_GRAM 1.6605e-24
#define ANG_to_CM 1e-8
#define AVOGNR 6.0221367e23
#define P_CONV 1e-24 * AVOGNR * JOULES_to_CAL
#define MAX_STR 1024
#define MAX_LINE 1024
#define MAX_TOKENS 1024
#define MAX_TOKEN_LEN 1024
#define MAX_ATOM_ID 100000
#define MAX_RESTRICT 15
#define MAX_MOLECULE_SIZE 20
#define MAX_ATOM_TYPES 25
#define NUM_INTRS 10
#define ALMOST_ZERO 1e-10
#define NEG_INF -1e10
#define NO_BOND 1e-3 // 0.001
#define HB_THRESHOLD 1e-2 // 0.01
#define MIN_CAP 50
#define MIN_NBRS 100
#define MIN_HENTRIES 100
#define MAX_BONDS 30
#define MIN_BONDS 25
#define MIN_HBONDS 25
#define MIN_3BODIES 1000
#define MIN_GCELL_POPL 50
#define MIN_SEND 100
#define SAFE_ZONE 1.2
#define SAFER_ZONE 1.4
#define DANGER_ZONE 0.90
#define LOOSE_ZONE 0.75
#define MAX_3BODY_PARAM 5
#define MAX_4BODY_PARAM 5
#define MAX_dV 1.01
#define MIN_dV 0.99
#define MAX_dT 4.00
#define MIN_dT 0.00
#define MASTER_NODE 0
#define MAX_NBRS 6 //27
#define MYSELF 13 // encoding of relative coordinate (0,0,0)
#define MAX_ITR 10
#define RESTART 30
#define MAX_BOND 20
#define MAXREAXBOND 24 /* used in fix_reaxc_bonds.cpp and pair_reax_c.cpp */
-#define MAXSPECBOND 24 /* used in fix_species.cpp and pair_reax_c.cpp */
+#define MAXSPECBOND 24 /* used in fix_reaxc_species.cpp and pair_reax_c.cpp */
/******************* ENUMERATIONS *************************/
enum geo_formats { CUSTOM, PDB, ASCII_RESTART, BINARY_RESTART, GF_N };
enum restart_formats { WRITE_ASCII, WRITE_BINARY, RF_N };
enum ensembles { NVE, bNVT, nhNVT, sNPT, iNPT, NPT, ens_N };
enum lists { BONDS, OLD_BONDS, THREE_BODIES,
HBONDS, FAR_NBRS, DBOS, DDELTAS, LIST_N };
enum interactions { TYP_VOID, TYP_BOND, TYP_THREE_BODY,
TYP_HBOND, TYP_FAR_NEIGHBOR, TYP_DBO, TYP_DDELTA, TYP_N };
enum message_tags { INIT, UPDATE, BNDRY, UPDATE_BNDRY,
EXC_VEC1, EXC_VEC2, DIST_RVEC2, COLL_RVEC2,
DIST_RVECS, COLL_RVECS, INIT_DESCS, ATOM_LINES,
BOND_LINES, ANGLE_LINES, RESTART_ATOMS, TAGS_N };
enum errors { FILE_NOT_FOUND = -10, UNKNOWN_ATOM_TYPE = -11,
CANNOT_OPEN_FILE = -12, CANNOT_INITIALIZE = -13,
INSUFFICIENT_MEMORY = -14, UNKNOWN_OPTION = -15,
INVALID_INPUT = -16, INVALID_GEO = -17 };
enum exchanges { NONE, NEAR_EXCH, FULL_EXCH };
enum gcell_types { NO_NBRS=0, NEAR_ONLY=1, HBOND_ONLY=2, FAR_ONLY=4,
NEAR_HBOND=3, NEAR_FAR=5, HBOND_FAR=6, FULL_NBRS=7,
NATIVE=8 };
enum atoms { C_ATOM = 0, H_ATOM = 1, O_ATOM = 2, N_ATOM = 3,
S_ATOM = 4, SI_ATOM = 5, GE_ATOM = 6, X_ATOM = 7 };
enum traj_methods { REG_TRAJ, MPI_TRAJ, TF_N };
enum molecules { UNKNOWN, WATER };
#endif
diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp
index a0a23777e..bd75498a4 100644
--- a/src/USER-REAXC/reaxc_ffield.cpp
+++ b/src/USER-REAXC/reaxc_ffield.cpp
@@ -1,763 +1,700 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "error.h"
-#if defined(PURE_REAX)
-#include "ffield.h"
-#include "tool_box.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_ffield.h"
#include "reaxc_tool_box.h"
-#endif
-
char Read_Force_Field( char *ffield_file, reax_interaction *reax,
control_params *control )
{
FILE *fp;
char *s;
char **tmp;
char ****tor_flag;
int c, i, j, k, l, m, n, o, p, cnt;
int lgflag = control->lgflag;
int errorflag = 1;
real val;
MPI_Comm comm;
comm = MPI_COMM_WORLD;
/* open force field file */
if ( (fp = fopen( ffield_file, "r" ) ) == NULL ) {
fprintf( stderr, "error opening the force field file! terminating...\n" );
MPI_Abort( comm, FILE_NOT_FOUND );
}
s = (char*) malloc(sizeof(char)*MAX_LINE);
tmp = (char**) malloc(sizeof(char*)*MAX_TOKENS);
for (i=0; i < MAX_TOKENS; i++)
tmp[i] = (char*) malloc(sizeof(char)*MAX_TOKEN_LEN);
/* reading first header comment */
fgets( s, MAX_LINE, fp );
/* line 2 is number of global parameters */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
/* reading the number of global parameters */
n = atoi(tmp[0]);
if (n < 1) {
fprintf( stderr, "WARNING: number of globals in ffield file is 0!\n" );
fclose(fp);
return 1;
}
reax->gp.n_global = n;
reax->gp.l = (real*) malloc(sizeof(real)*n);
/* see reax_types.h for mapping between l[i] and the lambdas used in ff */
for (i=0; i < n; i++) {
fgets(s,MAX_LINE,fp);
c = Tokenize(s,&tmp);
val = (real) atof(tmp[0]);
reax->gp.l[i] = val;
}
control->bo_cut = 0.01 * reax->gp.l[29];
control->nonb_low = reax->gp.l[11];
control->nonb_cut = reax->gp.l[12];
/* next line is number of atom types and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
reax->num_atom_types = atoi(tmp[0]);
/* 3 lines of comments */
fgets(s,MAX_LINE,fp);
fgets(s,MAX_LINE,fp);
fgets(s,MAX_LINE,fp);
/* Allocating structures in reax_interaction */
reax->sbp = (single_body_parameters*)
scalloc( reax->num_atom_types, sizeof(single_body_parameters), "sbp",
comm );
reax->tbp = (two_body_parameters**)
scalloc( reax->num_atom_types, sizeof(two_body_parameters*), "tbp", comm );
reax->thbp= (three_body_header***)
scalloc( reax->num_atom_types, sizeof(three_body_header**), "thbp", comm );
reax->hbp = (hbond_parameters***)
scalloc( reax->num_atom_types, sizeof(hbond_parameters**), "hbp", comm );
reax->fbp = (four_body_header****)
scalloc( reax->num_atom_types, sizeof(four_body_header***), "fbp", comm );
tor_flag = (char****)
scalloc( reax->num_atom_types, sizeof(char***), "tor_flag", comm );
for( i = 0; i < reax->num_atom_types; i++ ) {
reax->tbp[i] = (two_body_parameters*)
scalloc( reax->num_atom_types, sizeof(two_body_parameters), "tbp[i]",
comm );
reax->thbp[i]= (three_body_header**)
scalloc( reax->num_atom_types, sizeof(three_body_header*), "thbp[i]",
comm );
reax->hbp[i] = (hbond_parameters**)
scalloc( reax->num_atom_types, sizeof(hbond_parameters*), "hbp[i]",
comm );
reax->fbp[i] = (four_body_header***)
scalloc( reax->num_atom_types, sizeof(four_body_header**), "fbp[i]",
comm );
tor_flag[i] = (char***)
scalloc( reax->num_atom_types, sizeof(char**), "tor_flag[i]", comm );
for( j = 0; j < reax->num_atom_types; j++ ) {
reax->thbp[i][j]= (three_body_header*)
scalloc( reax->num_atom_types, sizeof(three_body_header), "thbp[i,j]",
comm );
reax->hbp[i][j] = (hbond_parameters*)
scalloc( reax->num_atom_types, sizeof(hbond_parameters), "hbp[i,j]",
comm );
reax->fbp[i][j] = (four_body_header**)
scalloc( reax->num_atom_types, sizeof(four_body_header*), "fbp[i,j]",
comm );
tor_flag[i][j] = (char**)
scalloc( reax->num_atom_types, sizeof(char*), "tor_flag[i,j]", comm );
for (k=0; k < reax->num_atom_types; k++) {
reax->fbp[i][j][k] = (four_body_header*)
scalloc( reax->num_atom_types, sizeof(four_body_header), "fbp[i,j,k]",
comm );
tor_flag[i][j][k] = (char*)
scalloc( reax->num_atom_types, sizeof(char), "tor_flag[i,j,k]",
comm );
}
}
}
- // vdWaals type: 1: Shielded Morse, no inner-wall
- // 2: inner wall, no shielding
- // 3: inner wall+shielding
reax->gp.vdw_type = 0;
- /* reading single atom parameters */
- /* there are 4 or 5 lines of each single atom parameters in ff files,
- depending on using lgvdw or not. These parameters later determine
- some of the pair and triplet parameters using combination rules. */
for( i = 0; i < reax->num_atom_types; i++ ) {
/* line one */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
for( j = 0; j < (int)(strlen(tmp[0])); ++j )
reax->sbp[i].name[j] = toupper( tmp[0][j] );
val = atof(tmp[1]); reax->sbp[i].r_s = val;
val = atof(tmp[2]); reax->sbp[i].valency = val;
val = atof(tmp[3]); reax->sbp[i].mass = val;
val = atof(tmp[4]); reax->sbp[i].r_vdw = val;
val = atof(tmp[5]); reax->sbp[i].epsilon = val;
val = atof(tmp[6]); reax->sbp[i].gamma = val;
val = atof(tmp[7]); reax->sbp[i].r_pi = val;
val = atof(tmp[8]); reax->sbp[i].valency_e = val;
reax->sbp[i].nlp_opt = 0.5 * (reax->sbp[i].valency_e-reax->sbp[i].valency);
/* line two */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
val = atof(tmp[0]); reax->sbp[i].alpha = val;
val = atof(tmp[1]); reax->sbp[i].gamma_w = val;
val = atof(tmp[2]); reax->sbp[i].valency_boc= val;
val = atof(tmp[3]); reax->sbp[i].p_ovun5 = val;
val = atof(tmp[4]);
val = atof(tmp[5]); reax->sbp[i].chi = val;
val = atof(tmp[6]); reax->sbp[i].eta = 2.0 * val;
val = atof(tmp[7]); reax->sbp[i].p_hbond = (int) val;
/* line 3 */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
val = atof(tmp[0]); reax->sbp[i].r_pi_pi = val;
val = atof(tmp[1]); reax->sbp[i].p_lp2 = val;
val = atof(tmp[2]);
val = atof(tmp[3]); reax->sbp[i].b_o_131 = val;
val = atof(tmp[4]); reax->sbp[i].b_o_132 = val;
val = atof(tmp[5]); reax->sbp[i].b_o_133 = val;
val = atof(tmp[6]);
val = atof(tmp[7]);
/* line 4 */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
/* Sanity check */
if (c < 3) {
fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n");
MPI_Abort( comm, FILE_NOT_FOUND );
}
val = atof(tmp[0]); reax->sbp[i].p_ovun2 = val;
val = atof(tmp[1]); reax->sbp[i].p_val3 = val;
val = atof(tmp[2]);
val = atof(tmp[3]); reax->sbp[i].valency_val= val;
val = atof(tmp[4]); reax->sbp[i].p_val5 = val;
val = atof(tmp[5]); reax->sbp[i].rcore2 = val;
val = atof(tmp[6]); reax->sbp[i].ecore2 = val;
val = atof(tmp[7]); reax->sbp[i].acore2 = val;
/* line 5, only if lgvdw is yes */
if (lgflag) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
/* Sanity check */
if (c > 3) {
fprintf(stderr, "Inconsistent ffield file (reaxc_ffield.cpp) \n");
MPI_Abort( comm, FILE_NOT_FOUND );
}
val = atof(tmp[0]); reax->sbp[i].lgcij = val;
val = atof(tmp[1]); reax->sbp[i].lgre = val;
}
if( reax->sbp[i].rcore2>0.01 && reax->sbp[i].acore2>0.01 ){ // Inner-wall
if( reax->sbp[i].gamma_w>0.5 ){ // Shielding vdWaals
if( reax->gp.vdw_type != 0 && reax->gp.vdw_type != 3 ) {
if (errorflag)
fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \
"Force field parameters for element %s\n" \
"indicate inner wall+shielding, but earlier\n" \
"atoms indicate different vdWaals-method.\n" \
"This may cause division-by-zero errors.\n" \
"Keeping vdWaals-setting for earlier atoms.\n",
reax->sbp[i].name );
errorflag = 0;
}
else{
reax->gp.vdw_type = 3;
-#if defined(DEBUG)
- fprintf( stderr, "vdWaals type for element %s: Shielding+inner-wall",
- reax->sbp[i].name );
-#endif
}
}
else { // No shielding vdWaals parameters present
if( reax->gp.vdw_type != 0 && reax->gp.vdw_type != 2 )
fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \
"Force field parameters for element %s\n" \
"indicate inner wall without shielding, but earlier\n" \
"atoms indicate different vdWaals-method.\n" \
"This may cause division-by-zero errors.\n" \
"Keeping vdWaals-setting for earlier atoms.\n",
reax->sbp[i].name );
else{
reax->gp.vdw_type = 2;
-#if defined(DEBUG)
- fprintf( stderr,"vdWaals type for element%s: No Shielding,inner-wall",
- reax->sbp[i].name );
-#endif
}
}
}
else{ // No Inner wall parameters present
if( reax->sbp[i].gamma_w>0.5 ){ // Shielding vdWaals
if( reax->gp.vdw_type != 0 && reax->gp.vdw_type != 1 )
fprintf( stderr, "Warning: inconsistent vdWaals-parameters\n" \
"Force field parameters for element %s\n" \
"indicate shielding without inner wall, but earlier\n" \
"atoms indicate different vdWaals-method.\n" \
"This may cause division-by-zero errors.\n" \
"Keeping vdWaals-setting for earlier atoms.\n",
reax->sbp[i].name );
else{
reax->gp.vdw_type = 1;
-#if defined(DEBUG)
- fprintf( stderr,"vdWaals type for element%s: Shielding,no inner-wall",
- reax->sbp[i].name );
-#endif
}
}
else{
fprintf( stderr, "Error: inconsistent vdWaals-parameters\n"\
"No shielding or inner-wall set for element %s\n",
reax->sbp[i].name );
MPI_Abort( comm, INVALID_INPUT );
}
}
}
-#if defined(DEBUG)
- fprintf( stderr, "vdWaals type: %d\n", reax->gp.vdw_type );
-#endif
-
/* Equate vval3 to valf for first-row elements (25/10/2004) */
for( i = 0; i < reax->num_atom_types; i++ )
if( reax->sbp[i].mass < 21 &&
reax->sbp[i].valency_val != reax->sbp[i].valency_boc ){
fprintf( stderr, "Warning: changed valency_val to valency_boc for %s\n",
reax->sbp[i].name );
reax->sbp[i].valency_val = reax->sbp[i].valency_boc;
}
-
/* next line is number of two body combination and some comments */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
l = atoi(tmp[0]);
/* a line of comments */
fgets(s,MAX_LINE,fp);
for (i=0; i < l; i++) {
/* line 1 */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
if (j < reax->num_atom_types && k < reax->num_atom_types) {
val = atof(tmp[2]); reax->tbp[j][k].De_s = val;
reax->tbp[k][j].De_s = val;
val = atof(tmp[3]); reax->tbp[j][k].De_p = val;
reax->tbp[k][j].De_p = val;
val = atof(tmp[4]); reax->tbp[j][k].De_pp = val;
reax->tbp[k][j].De_pp = val;
val = atof(tmp[5]); reax->tbp[j][k].p_be1 = val;
reax->tbp[k][j].p_be1 = val;
val = atof(tmp[6]); reax->tbp[j][k].p_bo5 = val;
reax->tbp[k][j].p_bo5 = val;
val = atof(tmp[7]); reax->tbp[j][k].v13cor = val;
reax->tbp[k][j].v13cor = val;
val = atof(tmp[8]); reax->tbp[j][k].p_bo6 = val;
reax->tbp[k][j].p_bo6 = val;
val = atof(tmp[9]); reax->tbp[j][k].p_ovun1 = val;
reax->tbp[k][j].p_ovun1 = val;
/* line 2 */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
val = atof(tmp[0]); reax->tbp[j][k].p_be2 = val;
reax->tbp[k][j].p_be2 = val;
val = atof(tmp[1]); reax->tbp[j][k].p_bo3 = val;
reax->tbp[k][j].p_bo3 = val;
val = atof(tmp[2]); reax->tbp[j][k].p_bo4 = val;
reax->tbp[k][j].p_bo4 = val;
val = atof(tmp[3]);
val = atof(tmp[4]); reax->tbp[j][k].p_bo1 = val;
reax->tbp[k][j].p_bo1 = val;
val = atof(tmp[5]); reax->tbp[j][k].p_bo2 = val;
reax->tbp[k][j].p_bo2 = val;
val = atof(tmp[6]); reax->tbp[j][k].ovc = val;
reax->tbp[k][j].ovc = val;
val = atof(tmp[7]);
}
}
- /* calculating combination rules and filling up remaining fields. */
-
for (i=0; i < reax->num_atom_types; i++)
for (j=i; j < reax->num_atom_types; j++) {
reax->tbp[i][j].r_s = 0.5 *
(reax->sbp[i].r_s + reax->sbp[j].r_s);
reax->tbp[j][i].r_s = 0.5 *
(reax->sbp[j].r_s + reax->sbp[i].r_s);
reax->tbp[i][j].r_p = 0.5 *
(reax->sbp[i].r_pi + reax->sbp[j].r_pi);
reax->tbp[j][i].r_p = 0.5 *
(reax->sbp[j].r_pi + reax->sbp[i].r_pi);
reax->tbp[i][j].r_pp = 0.5 *
(reax->sbp[i].r_pi_pi + reax->sbp[j].r_pi_pi);
reax->tbp[j][i].r_pp = 0.5 *
(reax->sbp[j].r_pi_pi + reax->sbp[i].r_pi_pi);
reax->tbp[i][j].p_boc3 =
sqrt(reax->sbp[i].b_o_132 *
reax->sbp[j].b_o_132);
reax->tbp[j][i].p_boc3 =
sqrt(reax->sbp[j].b_o_132 *
reax->sbp[i].b_o_132);
reax->tbp[i][j].p_boc4 =
sqrt(reax->sbp[i].b_o_131 *
reax->sbp[j].b_o_131);
reax->tbp[j][i].p_boc4 =
sqrt(reax->sbp[j].b_o_131 *
reax->sbp[i].b_o_131);
reax->tbp[i][j].p_boc5 =
sqrt(reax->sbp[i].b_o_133 *
reax->sbp[j].b_o_133);
reax->tbp[j][i].p_boc5 =
sqrt(reax->sbp[j].b_o_133 *
reax->sbp[i].b_o_133);
reax->tbp[i][j].D =
sqrt(reax->sbp[i].epsilon *
reax->sbp[j].epsilon);
reax->tbp[j][i].D =
sqrt(reax->sbp[j].epsilon *
reax->sbp[i].epsilon);
reax->tbp[i][j].alpha =
sqrt(reax->sbp[i].alpha *
reax->sbp[j].alpha);
reax->tbp[j][i].alpha =
sqrt(reax->sbp[j].alpha *
reax->sbp[i].alpha);
reax->tbp[i][j].r_vdW =
2.0 * sqrt(reax->sbp[i].r_vdw * reax->sbp[j].r_vdw);
reax->tbp[j][i].r_vdW =
2.0 * sqrt(reax->sbp[j].r_vdw * reax->sbp[i].r_vdw);
reax->tbp[i][j].gamma_w =
sqrt(reax->sbp[i].gamma_w *
reax->sbp[j].gamma_w);
reax->tbp[j][i].gamma_w =
sqrt(reax->sbp[j].gamma_w *
reax->sbp[i].gamma_w);
reax->tbp[i][j].gamma =
pow(reax->sbp[i].gamma *
reax->sbp[j].gamma,-1.5);
reax->tbp[j][i].gamma =
pow(reax->sbp[j].gamma *
reax->sbp[i].gamma,-1.5);
// additions for additional vdWaals interaction types - inner core
reax->tbp[i][j].rcore = reax->tbp[j][i].rcore =
sqrt( reax->sbp[i].rcore2 * reax->sbp[j].rcore2 );
reax->tbp[i][j].ecore = reax->tbp[j][i].ecore =
sqrt( reax->sbp[i].ecore2 * reax->sbp[j].ecore2 );
reax->tbp[i][j].acore = reax->tbp[j][i].acore =
sqrt( reax->sbp[i].acore2 * reax->sbp[j].acore2 );
// additions for additional vdWalls interaction types lg correction
reax->tbp[i][j].lgcij = reax->tbp[j][i].lgcij =
sqrt( reax->sbp[i].lgcij * reax->sbp[j].lgcij );
reax->tbp[i][j].lgre = reax->tbp[j][i].lgre = 2.0 *
sqrt( reax->sbp[i].lgre*reax->sbp[j].lgre );
}
-
- /* next line is number of two body offdiagonal combinations and comments */
- /* these are two body offdiagonal terms that are different from the
- combination rules defined above */
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
l = atoi(tmp[0]);
for (i=0; i < l; i++) {
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
if (j < reax->num_atom_types && k < reax->num_atom_types) {
val = atof(tmp[2]);
if (val > 0.0) {
reax->tbp[j][k].D = val;
reax->tbp[k][j].D = val;
}
val = atof(tmp[3]);
if (val > 0.0) {
reax->tbp[j][k].r_vdW = 2 * val;
reax->tbp[k][j].r_vdW = 2 * val;
}
val = atof(tmp[4]);
if (val > 0.0) {
reax->tbp[j][k].alpha = val;
reax->tbp[k][j].alpha = val;
}
val = atof(tmp[5]);
if (val > 0.0) {
reax->tbp[j][k].r_s = val;
reax->tbp[k][j].r_s = val;
}
val = atof(tmp[6]);
if (val > 0.0) {
reax->tbp[j][k].r_p = val;
reax->tbp[k][j].r_p = val;
}
val = atof(tmp[7]);
if (val > 0.0) {
reax->tbp[j][k].r_pp = val;
reax->tbp[k][j].r_pp = val;
}
val = atof(tmp[8]);
if (val >= 0.0) {
reax->tbp[j][k].lgcij = val;
reax->tbp[k][j].lgcij = val;
}
}
}
-
- /* 3-body parameters -
- supports multi-well potentials (upto MAX_3BODY_PARAM in mytypes.h) */
- /* clear entries first */
for( i = 0; i < reax->num_atom_types; ++i )
for( j = 0; j < reax->num_atom_types; ++j )
for( k = 0; k < reax->num_atom_types; ++k )
reax->thbp[i][j][k].cnt = 0;
- /* next line is number of 3-body params and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
l = atoi( tmp[0] );
for( i = 0; i < l; i++ ) {
fgets(s,MAX_LINE,fp);
c=Tokenize(s,&tmp);
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
m = atoi(tmp[2]) - 1;
if (j < reax->num_atom_types && k < reax->num_atom_types &&
m < reax->num_atom_types) {
cnt = reax->thbp[j][k][m].cnt;
reax->thbp[j][k][m].cnt++;
reax->thbp[m][k][j].cnt++;
val = atof(tmp[3]);
reax->thbp[j][k][m].prm[cnt].theta_00 = val;
reax->thbp[m][k][j].prm[cnt].theta_00 = val;
val = atof(tmp[4]);
reax->thbp[j][k][m].prm[cnt].p_val1 = val;
reax->thbp[m][k][j].prm[cnt].p_val1 = val;
val = atof(tmp[5]);
reax->thbp[j][k][m].prm[cnt].p_val2 = val;
reax->thbp[m][k][j].prm[cnt].p_val2 = val;
val = atof(tmp[6]);
reax->thbp[j][k][m].prm[cnt].p_coa1 = val;
reax->thbp[m][k][j].prm[cnt].p_coa1 = val;
val = atof(tmp[7]);
reax->thbp[j][k][m].prm[cnt].p_val7 = val;
reax->thbp[m][k][j].prm[cnt].p_val7 = val;
val = atof(tmp[8]);
reax->thbp[j][k][m].prm[cnt].p_pen1 = val;
reax->thbp[m][k][j].prm[cnt].p_pen1 = val;
val = atof(tmp[9]);
reax->thbp[j][k][m].prm[cnt].p_val4 = val;
reax->thbp[m][k][j].prm[cnt].p_val4 = val;
}
}
-
- /* 4-body parameters are entered in compact form. i.e. 0-X-Y-0
- correspond to any type of pair of atoms in 1 and 4
- position. However, explicit X-Y-Z-W takes precedence over the
- default description.
- supports multi-well potentials (upto MAX_4BODY_PARAM in mytypes.h)
- IMPORTANT: for now, directions on how to read multi-entries from ffield
- is not clear */
-
/* clear all entries first */
for( i = 0; i < reax->num_atom_types; ++i )
for( j = 0; j < reax->num_atom_types; ++j )
for( k = 0; k < reax->num_atom_types; ++k )
for( m = 0; m < reax->num_atom_types; ++m ) {
reax->fbp[i][j][k][m].cnt = 0;
tor_flag[i][j][k][m] = 0;
}
/* next line is number of 4-body params and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
l = atoi( tmp[0] );
for( i = 0; i < l; i++ ) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
m = atoi(tmp[2]) - 1;
n = atoi(tmp[3]) - 1;
if (j >= 0 && n >= 0) { // this means the entry is not in compact form
if (j < reax->num_atom_types && k < reax->num_atom_types &&
m < reax->num_atom_types && n < reax->num_atom_types) {
- /* these flags ensure that this entry take precedence
- over the compact form entries */
tor_flag[j][k][m][n] = 1;
tor_flag[n][m][k][j] = 1;
reax->fbp[j][k][m][n].cnt = 1;
reax->fbp[n][m][k][j].cnt = 1;
- /* cnt = reax->fbp[j][k][m][n].cnt;
- reax->fbp[j][k][m][n].cnt++;
- reax->fbp[n][m][k][j].cnt++; */
val = atof(tmp[4]);
reax->fbp[j][k][m][n].prm[0].V1 = val;
reax->fbp[n][m][k][j].prm[0].V1 = val;
val = atof(tmp[5]);
reax->fbp[j][k][m][n].prm[0].V2 = val;
reax->fbp[n][m][k][j].prm[0].V2 = val;
val = atof(tmp[6]);
reax->fbp[j][k][m][n].prm[0].V3 = val;
reax->fbp[n][m][k][j].prm[0].V3 = val;
val = atof(tmp[7]);
reax->fbp[j][k][m][n].prm[0].p_tor1 = val;
reax->fbp[n][m][k][j].prm[0].p_tor1 = val;
val = atof(tmp[8]);
reax->fbp[j][k][m][n].prm[0].p_cot1 = val;
reax->fbp[n][m][k][j].prm[0].p_cot1 = val;
}
}
else { /* This means the entry is of the form 0-X-Y-0 */
if( k < reax->num_atom_types && m < reax->num_atom_types )
for( p = 0; p < reax->num_atom_types; p++ )
for( o = 0; o < reax->num_atom_types; o++ ) {
reax->fbp[p][k][m][o].cnt = 1;
reax->fbp[o][m][k][p].cnt = 1;
- /* cnt = reax->fbp[p][k][m][o].cnt;
- reax->fbp[p][k][m][o].cnt++;
- reax->fbp[o][m][k][p].cnt++; */
if (tor_flag[p][k][m][o] == 0) {
reax->fbp[p][k][m][o].prm[0].V1 = atof(tmp[4]);
reax->fbp[p][k][m][o].prm[0].V2 = atof(tmp[5]);
reax->fbp[p][k][m][o].prm[0].V3 = atof(tmp[6]);
reax->fbp[p][k][m][o].prm[0].p_tor1 = atof(tmp[7]);
reax->fbp[p][k][m][o].prm[0].p_cot1 = atof(tmp[8]);
}
if (tor_flag[o][m][k][p] == 0) {
reax->fbp[o][m][k][p].prm[0].V1 = atof(tmp[4]);
reax->fbp[o][m][k][p].prm[0].V2 = atof(tmp[5]);
reax->fbp[o][m][k][p].prm[0].V3 = atof(tmp[6]);
reax->fbp[o][m][k][p].prm[0].p_tor1 = atof(tmp[7]);
reax->fbp[o][m][k][p].prm[0].p_cot1 = atof(tmp[8]);
}
}
}
}
/* next line is number of hydrogen bond params and some comments */
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
l = atoi( tmp[0] );
for( i = 0; i < l; i++ ) {
fgets( s, MAX_LINE, fp );
c = Tokenize( s, &tmp );
j = atoi(tmp[0]) - 1;
k = atoi(tmp[1]) - 1;
m = atoi(tmp[2]) - 1;
if( j < reax->num_atom_types && m < reax->num_atom_types ) {
val = atof(tmp[3]);
reax->hbp[j][k][m].r0_hb = val;
val = atof(tmp[4]);
reax->hbp[j][k][m].p_hb1 = val;
val = atof(tmp[5]);
reax->hbp[j][k][m].p_hb2 = val;
val = atof(tmp[6]);
reax->hbp[j][k][m].p_hb3 = val;
}
}
-
/* deallocate helper storage */
for( i = 0; i < MAX_TOKENS; i++ )
free( tmp[i] );
free( tmp );
free( s );
/* deallocate tor_flag */
for( i = 0; i < reax->num_atom_types; i++ ) {
for( j = 0; j < reax->num_atom_types; j++ ) {
for( k = 0; k < reax->num_atom_types; k++ ) {
free( tor_flag[i][j][k] );
}
free( tor_flag[i][j] );
}
free( tor_flag[i] );
}
free( tor_flag );
// close file
fclose(fp);
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "force field read\n" );
-#endif
-
return SUCCESS;
}
diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp
index d10b2e8e2..d581cbebb 100644
--- a/src/USER-REAXC/reaxc_forces.cpp
+++ b/src/USER-REAXC/reaxc_forces.cpp
@@ -1,940 +1,680 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "forces.h"
-#include "bond_orders.h"
-#include "bonds.h"
-#include "basic_comm.h"
-#include "hydrogen_bonds.h"
-#include "io_tools.h"
-#include "list.h"
-#include "lookup.h"
-#include "multi_body.h"
-#include "nonbonded.h"
-#include "qEq.h"
-#include "tool_box.h"
-#include "torsion_angles.h"
-#include "valence_angles.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_forces.h"
#include "reaxc_bond_orders.h"
#include "reaxc_bonds.h"
#include "reaxc_basic_comm.h"
#include "reaxc_hydrogen_bonds.h"
#include "reaxc_io_tools.h"
#include "reaxc_list.h"
#include "reaxc_lookup.h"
#include "reaxc_multi_body.h"
#include "reaxc_nonbonded.h"
#include "reaxc_tool_box.h"
#include "reaxc_torsion_angles.h"
#include "reaxc_valence_angles.h"
#include "reaxc_vector.h"
-#endif
interaction_function Interaction_Functions[NUM_INTRS];
void Dummy_Interaction( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control )
{
}
void Init_Force_Functions( control_params *control )
{
Interaction_Functions[0] = BO;
Interaction_Functions[1] = Bonds; //Dummy_Interaction;
Interaction_Functions[2] = Atom_Energy; //Dummy_Interaction;
Interaction_Functions[3] = Valence_Angles; //Dummy_Interaction;
Interaction_Functions[4] = Torsion_Angles; //Dummy_Interaction;
if( control->hbond_cut > 0 )
Interaction_Functions[5] = Hydrogen_Bonds;
else Interaction_Functions[5] = Dummy_Interaction;
Interaction_Functions[6] = Dummy_Interaction; //empty
Interaction_Functions[7] = Dummy_Interaction; //empty
Interaction_Functions[8] = Dummy_Interaction; //empty
Interaction_Functions[9] = Dummy_Interaction; //empty
}
void Compute_Bonded_Forces( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control,
MPI_Comm comm )
{
int i;
- /* Mark beginning of a new timestep in bonded energy files */
-#if defined(TEST_ENERGY)
- Debug_Marker_Bonded( out_control, data->step );
-#endif
-
/* Implement all force calls as function pointers */
for( i = 0; i < NUM_INTRS; i++ ) {
-#if defined(DEBUG)
- fprintf( stderr, "p%d: starting f%d\n", system->my_rank, i );
- MPI_Barrier( comm );
-#endif
(Interaction_Functions[i])( system, control, data, workspace,
lists, out_control );
-#if defined(DEBUG)
- fprintf( stderr, "p%d: f%d done\n", system->my_rank, i );
- MPI_Barrier( comm );
-#endif
}
}
void Compute_NonBonded_Forces( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control,
MPI_Comm comm )
{
- /* Mark beginning of a new timestep in nonbonded energy files */
-#if defined(TEST_ENERGY)
- Debug_Marker_Nonbonded( out_control, data->step );
-#endif
/* van der Waals and Coulomb interactions */
if( control->tabulate == 0 )
vdW_Coulomb_Energy( system, control, data, workspace,
lists, out_control );
else
Tabulated_vdW_Coulomb_Energy( system, control, data, workspace,
lists, out_control );
-
-#if defined(DEBUG)
- fprintf( stderr, "p%d: nonbonded forces done\n", system->my_rank );
- MPI_Barrier( comm );
-#endif
}
-
-/* this version of Compute_Total_Force computes forces from
- coefficients accumulated by all interaction functions.
- Saves enormous time & space! */
void Compute_Total_Force( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, mpi_datatypes *mpi_data )
{
int i, pj;
reax_list *bonds = (*lists) + BONDS;
for( i = 0; i < system->N; ++i )
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj )
if( i < bonds->select.bond_list[pj].nbr ) {
if( control->virial == 0 )
Add_dBond_to_Forces( system, i, pj, workspace, lists );
else
Add_dBond_to_Forces_NPT( i, pj, data, workspace, lists );
}
- //Print_Total_Force( system, data, workspace );
-#if defined(PURE_REAX)
- /* now all forces are computed to their partially-final values
- based on the neighbors information each processor has had.
- final values of force on each atom needs to be computed by adding up
- all partially-final pieces */
- Coll( system, mpi_data, workspace->f, mpi_data->mpi_rvec,
- sizeof(rvec)/sizeof(void), rvec_unpacker );
- for( i = 0; i < system->n; ++i )
- rvec_Copy( system->my_atoms[i].f, workspace->f[i] );
-
-#if defined(TEST_FORCES)
- Coll( system, mpi_data, workspace->f_ele, mpi_data->mpi_rvec, rvec_unpacker);
- Coll( system, mpi_data, workspace->f_vdw, mpi_data->mpi_rvec, rvec_unpacker);
- Coll( system, mpi_data, workspace->f_be, mpi_data->mpi_rvec, rvec_unpacker );
- Coll( system, mpi_data, workspace->f_lp, mpi_data->mpi_rvec, rvec_unpacker );
- Coll( system, mpi_data, workspace->f_ov, mpi_data->mpi_rvec, rvec_unpacker );
- Coll( system, mpi_data, workspace->f_un, mpi_data->mpi_rvec, rvec_unpacker );
- Coll( system, mpi_data, workspace->f_ang, mpi_data->mpi_rvec, rvec_unpacker);
- Coll( system, mpi_data, workspace->f_coa, mpi_data->mpi_rvec, rvec_unpacker);
- Coll( system, mpi_data, workspace->f_pen, mpi_data->mpi_rvec, rvec_unpacker);
- Coll( system, mpi_data, workspace->f_hb, mpi_data->mpi_rvec, rvec_unpacker );
- Coll( system, mpi_data, workspace->f_tor, mpi_data->mpi_rvec, rvec_unpacker);
- Coll( system, mpi_data, workspace->f_con, mpi_data->mpi_rvec, rvec_unpacker);
-#endif
-
-#endif
}
void Validate_Lists( reax_system *system, storage *workspace, reax_list **lists,
int step, int n, int N, int numH, MPI_Comm comm )
{
int i, comp, Hindex;
reax_list *bonds, *hbonds;
reallocate_data *realloc;
realloc = &(workspace->realloc);
double saferzone = system->saferzone;
/* bond list */
if( N > 0 ) {
bonds = *lists + BONDS;
for( i = 0; i < N; ++i ) {
- // if( i < n ) - we need to update ghost estimates for delayed nbrings
system->my_atoms[i].num_bonds = MAX(Num_Entries(i,bonds)*2, MIN_BONDS);
- //if( End_Index(i, bonds) >= Start_Index(i+1, bonds)-2 )
- //workspace->realloc.bonds = 1;
-
if( i < N-1 )
comp = Start_Index(i+1, bonds);
else comp = bonds->num_intrs;
if( End_Index(i, bonds) > comp ) {
fprintf( stderr, "step%d-bondchk failed: i=%d end(i)=%d str(i+1)=%d\n",
step, i, End_Index(i,bonds), comp );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
}
}
/* hbonds list */
if( numH > 0 ) {
hbonds = *lists + HBONDS;
for( i = 0; i < N; ++i ) {
Hindex = system->my_atoms[i].Hindex;
if( Hindex > -1 ) {
system->my_atoms[i].num_hbonds =
(int)(MAX( Num_Entries(Hindex, hbonds)*saferzone, MIN_HBONDS ));
//if( Num_Entries(i, hbonds) >=
//(Start_Index(i+1,hbonds)-Start_Index(i,hbonds))*0.90/*DANGER_ZONE*/){
// workspace->realloc.hbonds = 1;
if( Hindex < numH-1 )
comp = Start_Index(Hindex+1, hbonds);
else comp = hbonds->num_intrs;
if( End_Index(Hindex, hbonds) > comp ) {
fprintf(stderr,"step%d-hbondchk failed: H=%d end(H)=%d str(H+1)=%d\n",
step, Hindex, End_Index(Hindex,hbonds), comp );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
}
}
}
}
real Compute_H( real r, real gamma, real *ctap )
{
real taper, dr3gamij_1, dr3gamij_3;
taper = ctap[7] * r + ctap[6];
taper = taper * r + ctap[5];
taper = taper * r + ctap[4];
taper = taper * r + ctap[3];
taper = taper * r + ctap[2];
taper = taper * r + ctap[1];
taper = taper * r + ctap[0];
dr3gamij_1 = ( r*r*r + gamma );
dr3gamij_3 = pow( dr3gamij_1 , 0.33333333333333 );
return taper * EV_to_KCALpMOL / dr3gamij_3;
}
real Compute_tabH( real r_ij, int ti, int tj )
{
int r, tmin, tmax;
real val, dif, base;
LR_lookup_table *t;
tmin = MIN( ti, tj );
tmax = MAX( ti, tj );
t = &( LR[tmin][tmax] );
/* cubic spline interpolation */
r = (int)(r_ij * t->inv_dx);
if( r == 0 ) ++r;
base = (real)(r+1) * t->dx;
dif = r_ij - base;
val = ((t->ele[r].d*dif + t->ele[r].c)*dif + t->ele[r].b)*dif +
t->ele[r].a;
val *= EV_to_KCALpMOL / C_ele;
return val;
}
void Init_Forces( reax_system *system, control_params *control,
simulation_data *data, storage *workspace, reax_list **lists,
output_controls *out_control, MPI_Comm comm ) {
int i, j, pj;
int start_i, end_i;
int type_i, type_j;
int Htop, btop_i, btop_j, num_bonds, num_hbonds;
int ihb, jhb, ihb_top, jhb_top;
int local, flag, renbr;
real r_ij, cutoff;
sparse_matrix *H;
reax_list *far_nbrs, *bonds, *hbonds;
single_body_parameters *sbp_i, *sbp_j;
two_body_parameters *twbp;
far_neighbor_data *nbr_pj;
reax_atom *atom_i, *atom_j;
far_nbrs = *lists + FAR_NBRS;
bonds = *lists + BONDS;
hbonds = *lists + HBONDS;
for( i = 0; i < system->n; ++i )
workspace->bond_mark[i] = 0;
for( i = system->n; i < system->N; ++i ) {
workspace->bond_mark[i] = 1000; // put ghost atoms to an infinite distance
- //workspace->done_after[i] = Start_Index( i, far_nbrs );
}
H = workspace->H;
H->n = system->n;
Htop = 0;
num_bonds = 0;
num_hbonds = 0;
btop_i = btop_j = 0;
renbr = (data->step-data->prev_steps) % control->reneighbor == 0;
for( i = 0; i < system->N; ++i ) {
atom_i = &(system->my_atoms[i]);
type_i = atom_i->type;
+ if (type_i < 0) continue;
start_i = Start_Index(i, far_nbrs);
end_i = End_Index(i, far_nbrs);
btop_i = End_Index( i, bonds );
sbp_i = &(system->reax_param.sbp[type_i]);
if( i < system->n ) {
local = 1;
cutoff = control->nonb_cut;
}
else {
local = 0;
cutoff = control->bond_cut;
}
ihb = -1;
ihb_top = -1;
if( local ) {
H->start[i] = Htop;
H->entries[Htop].j = i;
H->entries[Htop].val = sbp_i->eta;
++Htop;
if( control->hbond_cut > 0 ) {
ihb = sbp_i->p_hbond;
if( ihb == 1 )
ihb_top = End_Index( atom_i->Hindex, hbonds );
else ihb_top = -1;
}
}
/* update i-j distance - check if j is within cutoff */
for( pj = start_i; pj < end_i; ++pj ) {
nbr_pj = &( far_nbrs->select.far_nbr_list[pj] );
j = nbr_pj->nbr;
atom_j = &(system->my_atoms[j]);
- //fprintf( stderr, "%d%d i=%d x_i: %f %f %f,j=%d x_j: %f %f %f, d=%f\n",
- // MIN(atom_i->orig_id, atom_j->orig_id),
- // MAX(atom_i->orig_id, atom_j->orig_id),
- // i, atom_i->x[0], atom_i->x[1], atom_i->x[2],
- // j, atom_j->x[0], atom_j->x[1], atom_j->x[2], nbr_pj->d );
if( renbr ) {
if(nbr_pj->d <= cutoff)
flag = 1;
else flag = 0;
}
else{
nbr_pj->dvec[0] = atom_j->x[0] - atom_i->x[0];
nbr_pj->dvec[1] = atom_j->x[1] - atom_i->x[1];
nbr_pj->dvec[2] = atom_j->x[2] - atom_i->x[2];
nbr_pj->d = rvec_Norm_Sqr( nbr_pj->dvec );
if( nbr_pj->d <= SQR(cutoff) ) {
nbr_pj->d = sqrt(nbr_pj->d);
flag = 1;
}
else {
flag = 0;
}
}
if( flag ){
type_j = atom_j->type;
+ if (type_j < 0) continue;
r_ij = nbr_pj->d;
sbp_j = &(system->reax_param.sbp[type_j]);
twbp = &(system->reax_param.tbp[type_i][type_j]);
if( local ) {
/* H matrix entry */
if( j < system->n || atom_i->orig_id < atom_j->orig_id ) {//tryQEq||1
H->entries[Htop].j = j;
- //fprintf( stdout, "%d%d %d %d\n",
- // MIN(atom_i->orig_id, atom_j->orig_id),
- // MAX(atom_i->orig_id, atom_j->orig_id),
- // MIN(atom_i->orig_id, atom_j->orig_id),
- // MAX(atom_i->orig_id, atom_j->orig_id) );
if( control->tabulate == 0 )
H->entries[Htop].val = Compute_H(r_ij,twbp->gamma,workspace->Tap);
else H->entries[Htop].val = Compute_tabH(r_ij, type_i, type_j);
++Htop;
}
/* hydrogen bond lists */
if( control->hbond_cut > 0 && (ihb==1 || ihb==2) &&
nbr_pj->d <= control->hbond_cut ) {
- // fprintf( stderr, "%d %d\n", atom1, atom2 );
jhb = sbp_j->p_hbond;
if( ihb == 1 && jhb == 2 ) {
hbonds->select.hbond_list[ihb_top].nbr = j;
hbonds->select.hbond_list[ihb_top].scl = 1;
hbonds->select.hbond_list[ihb_top].ptr = nbr_pj;
++ihb_top;
++num_hbonds;
}
else if( j < system->n && ihb == 2 && jhb == 1 ) {
jhb_top = End_Index( atom_j->Hindex, hbonds );
hbonds->select.hbond_list[jhb_top].nbr = i;
hbonds->select.hbond_list[jhb_top].scl = -1;
hbonds->select.hbond_list[jhb_top].ptr = nbr_pj;
Set_End_Index( atom_j->Hindex, jhb_top+1, hbonds );
++num_hbonds;
}
}
}
/* uncorrected bond orders */
if( //(workspace->bond_mark[i] < 3 || workspace->bond_mark[j] < 3) &&
nbr_pj->d <= control->bond_cut &&
BOp( workspace, bonds, control->bo_cut,
i , btop_i, nbr_pj, sbp_i, sbp_j, twbp ) ) {
num_bonds += 2;
++btop_i;
if( workspace->bond_mark[j] > workspace->bond_mark[i] + 1 )
workspace->bond_mark[j] = workspace->bond_mark[i] + 1;
else if( workspace->bond_mark[i] > workspace->bond_mark[j] + 1 ) {
workspace->bond_mark[i] = workspace->bond_mark[j] + 1;
- //if( workspace->bond_mark[i] == 1000 )
- // workspace->done_after[i] = pj;
}
- //fprintf( stdout, "%d%d - %d(%d) %d(%d)\n",
- // i , j, i, workspace->bond_mark[i], j, workspace->bond_mark[j] );
}
}
}
Set_End_Index( i, btop_i, bonds );
if( local ) {
H->end[i] = Htop;
if( ihb == 1 )
Set_End_Index( atom_i->Hindex, ihb_top, hbonds );
}
}
- //fprintf( stderr, "after the first init loop\n" );
- /*for( i = system->n; i < system->N; ++i )
- if( workspace->bond_mark[i] > 3 ) {
- start_i = Start_Index(i, bonds);
- end_i = End_Index(i, bonds);
- num_bonds -= (end_i - start_i);
- Set_End_Index(i, start_i, bonds );
- }*/
-
- /*for( i = system->n; i < system->N; ++i ) {
- start_i = Start_Index(i, far_nbrs);
- end_i = workspace->done_after[i];
-
- if( workspace->bond_mark[i] >= 2 && start_i < end_i ) {
- atom_i = &(system->my_atoms[i]);
- type_i = atom_i->type;
- btop_i = End_Index( i, bonds );
- sbp_i = &(system->reax_param.sbp[type_i]);
-
- for( pj = start_i; pj < end_i; ++pj ) {
- nbr_pj = &( far_nbrs->select.far_nbr_list[pj] );
- j = nbr_pj->nbr;
-
- if( workspace->bond_mark[j] >= 2 && nbr_pj->d <= control->bond_cut ) {
- atom_j = &(system->my_atoms[j]);
- type_j = atom_j->type;
- sbp_j = &(system->reax_param.sbp[type_j]);
- twbp = &(system->reax_param.tbp[type_i][type_j]);
-
- if( BOp( workspace, bonds, control->bo_cut,
- i , btop_i, nbr_pj, sbp_i, sbp_j, twbp ) ) {
- num_bonds += 2;
- ++btop_i;
-
- if( workspace->bond_mark[j] > workspace->bond_mark[i] + 1 )
- workspace->bond_mark[j] = workspace->bond_mark[i] + 1;
- else if( workspace->bond_mark[i] > workspace->bond_mark[j] + 1 )
- workspace->bond_mark[i] = workspace->bond_mark[j] + 1;
-
- //fprintf( stdout, "%d%d - %d(%d) %d(%d) new\n",
- // i , j, i, workspace->bond_mark[i], j, workspace->bond_mark[j] );
- }
- }
- }
- Set_End_Index( i, btop_i, bonds );
- }
- }*/
-
workspace->realloc.Htop = Htop;
workspace->realloc.num_bonds = num_bonds;
workspace->realloc.num_hbonds = num_hbonds;
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: Htop = %d num_bonds = %d num_hbonds = %d\n",
- system->my_rank, data->step, Htop, num_bonds, num_hbonds );
- MPI_Barrier( comm );
-#endif
-#if defined( DEBUG )
- Print_Bonds( system, bonds, "debugbonds.out" );
- Print_Bond_List2( system, bonds, "pbonds.out" );
- Print_Sparse_Matrix( system, H );
- for( i = 0; i < H->n; ++i )
- for( j = H->start[i]; j < H->end[i]; ++j )
- fprintf( stderr, "%d %d %.15e\n",
- MIN(system->my_atoms[i].orig_id,
- system->my_atoms[H->entries[j].j].orig_id),
- MAX(system->my_atoms[i].orig_id,
- system->my_atoms[H->entries[j].j].orig_id),
- H->entries[j].val );
-#endif
-
Validate_Lists( system, workspace, lists, data->step,
system->n, system->N, system->numH, comm );
}
void Init_Forces_noQEq( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control,
MPI_Comm comm ) {
int i, j, pj;
int start_i, end_i;
int type_i, type_j;
int btop_i, btop_j, num_bonds, num_hbonds;
int ihb, jhb, ihb_top, jhb_top;
int local, flag, renbr;
real r_ij, cutoff;
reax_list *far_nbrs, *bonds, *hbonds;
single_body_parameters *sbp_i, *sbp_j;
two_body_parameters *twbp;
far_neighbor_data *nbr_pj;
reax_atom *atom_i, *atom_j;
far_nbrs = *lists + FAR_NBRS;
bonds = *lists + BONDS;
hbonds = *lists + HBONDS;
for( i = 0; i < system->n; ++i )
workspace->bond_mark[i] = 0;
for( i = system->n; i < system->N; ++i ) {
workspace->bond_mark[i] = 1000; // put ghost atoms to an infinite distance
- //workspace->done_after[i] = Start_Index( i, far_nbrs );
}
num_bonds = 0;
num_hbonds = 0;
btop_i = btop_j = 0;
renbr = (data->step-data->prev_steps) % control->reneighbor == 0;
for( i = 0; i < system->N; ++i ) {
atom_i = &(system->my_atoms[i]);
type_i = atom_i->type;
+ if (type_i < 0) continue;
start_i = Start_Index(i, far_nbrs);
end_i = End_Index(i, far_nbrs);
btop_i = End_Index( i, bonds );
sbp_i = &(system->reax_param.sbp[type_i]);
if( i < system->n ) {
local = 1;
cutoff = MAX( control->hbond_cut, control->bond_cut );
}
else {
local = 0;
cutoff = control->bond_cut;
}
ihb = -1;
ihb_top = -1;
if( local && control->hbond_cut > 0 ) {
ihb = sbp_i->p_hbond;
if( ihb == 1 )
ihb_top = End_Index( atom_i->Hindex, hbonds );
else ihb_top = -1;
}
/* update i-j distance - check if j is within cutoff */
for( pj = start_i; pj < end_i; ++pj ) {
nbr_pj = &( far_nbrs->select.far_nbr_list[pj] );
j = nbr_pj->nbr;
atom_j = &(system->my_atoms[j]);
if( renbr ) {
if( nbr_pj->d <= cutoff )
flag = 1;
else flag = 0;
}
else{
nbr_pj->dvec[0] = atom_j->x[0] - atom_i->x[0];
nbr_pj->dvec[1] = atom_j->x[1] - atom_i->x[1];
nbr_pj->dvec[2] = atom_j->x[2] - atom_i->x[2];
nbr_pj->d = rvec_Norm_Sqr( nbr_pj->dvec );
if( nbr_pj->d <= SQR(cutoff) ) {
nbr_pj->d = sqrt(nbr_pj->d);
flag = 1;
}
else {
flag = 0;
}
}
if( flag ) {
type_j = atom_j->type;
+ if (type_j < 0) continue;
r_ij = nbr_pj->d;
sbp_j = &(system->reax_param.sbp[type_j]);
twbp = &(system->reax_param.tbp[type_i][type_j]);
if( local ) {
/* hydrogen bond lists */
if( control->hbond_cut > 0 && (ihb==1 || ihb==2) &&
nbr_pj->d <= control->hbond_cut ) {
// fprintf( stderr, "%d %d\n", atom1, atom2 );
jhb = sbp_j->p_hbond;
if( ihb == 1 && jhb == 2 ) {
hbonds->select.hbond_list[ihb_top].nbr = j;
hbonds->select.hbond_list[ihb_top].scl = 1;
hbonds->select.hbond_list[ihb_top].ptr = nbr_pj;
++ihb_top;
++num_hbonds;
}
else if( j < system->n && ihb == 2 && jhb == 1 ) {
jhb_top = End_Index( atom_j->Hindex, hbonds );
hbonds->select.hbond_list[jhb_top].nbr = i;
hbonds->select.hbond_list[jhb_top].scl = -1;
hbonds->select.hbond_list[jhb_top].ptr = nbr_pj;
Set_End_Index( atom_j->Hindex, jhb_top+1, hbonds );
++num_hbonds;
}
}
}
-
- /* uncorrected bond orders */
if( //(workspace->bond_mark[i] < 3 || workspace->bond_mark[j] < 3) &&
nbr_pj->d <= control->bond_cut &&
BOp( workspace, bonds, control->bo_cut,
i , btop_i, nbr_pj, sbp_i, sbp_j, twbp ) ) {
num_bonds += 2;
++btop_i;
if( workspace->bond_mark[j] > workspace->bond_mark[i] + 1 )
workspace->bond_mark[j] = workspace->bond_mark[i] + 1;
else if( workspace->bond_mark[i] > workspace->bond_mark[j] + 1 ) {
workspace->bond_mark[i] = workspace->bond_mark[j] + 1;
- //if( workspace->bond_mark[i] == 1000 )
- // workspace->done_after[i] = pj;
}
- //fprintf( stdout, "%d%d - %d(%d) %d(%d)\n",
- // i , j, i, workspace->bond_mark[i], j, workspace->bond_mark[j] );
}
}
}
Set_End_Index( i, btop_i, bonds );
if( local && ihb == 1 )
Set_End_Index( atom_i->Hindex, ihb_top, hbonds );
}
- /*for( i = system->n; i < system->N; ++i )
- if( workspace->bond_mark[i] > 3 ) {
- start_i = Start_Index(i, bonds);
- end_i = End_Index(i, bonds);
- num_bonds -= (end_i - start_i);
- Set_End_Index(i, start_i, bonds );
- }*/
workspace->realloc.num_bonds = num_bonds;
workspace->realloc.num_hbonds = num_hbonds;
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: num_bonds = %d num_hbonds = %d\n",
- system->my_rank, data->step, num_bonds, num_hbonds );
- MPI_Barrier( comm );
-#endif
-#if defined( DEBUG )
- Print_Bonds( system, bonds, "debugbonds.out" );
- Print_Bond_List2( system, bonds, "pbonds.out" );
-#endif
-
Validate_Lists( system, workspace, lists, data->step,
system->n, system->N, system->numH, comm );
}
void Estimate_Storages( reax_system *system, control_params *control,
reax_list **lists, int *Htop, int *hb_top,
int *bond_top, int *num_3body, MPI_Comm comm )
{
int i, j, pj;
int start_i, end_i;
int type_i, type_j;
int ihb, jhb;
int local;
real cutoff;
real r_ij, r2;
real C12, C34, C56;
real BO, BO_s, BO_pi, BO_pi2;
reax_list *far_nbrs;
single_body_parameters *sbp_i, *sbp_j;
two_body_parameters *twbp;
far_neighbor_data *nbr_pj;
reax_atom *atom_i, *atom_j;
int mincap = system->mincap;
double safezone = system->safezone;
double saferzone = system->saferzone;
far_nbrs = *lists + FAR_NBRS;
*Htop = 0;
memset( hb_top, 0, sizeof(int) * system->local_cap );
memset( bond_top, 0, sizeof(int) * system->total_cap );
*num_3body = 0;
for( i = 0; i < system->N; ++i ) {
atom_i = &(system->my_atoms[i]);
type_i = atom_i->type;
+ if (type_i < 0) continue;
start_i = Start_Index(i, far_nbrs);
end_i = End_Index(i, far_nbrs);
sbp_i = &(system->reax_param.sbp[type_i]);
if( i < system->n ) {
local = 1;
cutoff = control->nonb_cut;
++(*Htop);
ihb = sbp_i->p_hbond;
}
else {
local = 0;
cutoff = control->bond_cut;
ihb = -1;
}
for( pj = start_i; pj < end_i; ++pj ) {
nbr_pj = &( far_nbrs->select.far_nbr_list[pj] );
j = nbr_pj->nbr;
atom_j = &(system->my_atoms[j]);
if(nbr_pj->d <= cutoff) {
type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
r_ij = nbr_pj->d;
sbp_j = &(system->reax_param.sbp[type_j]);
twbp = &(system->reax_param.tbp[type_i][type_j]);
if( local ) {
if( j < system->n || atom_i->orig_id < atom_j->orig_id ) //tryQEq ||1
++(*Htop);
/* hydrogen bond lists */
if( control->hbond_cut > 0.1 && (ihb==1 || ihb==2) &&
nbr_pj->d <= control->hbond_cut ) {
jhb = sbp_j->p_hbond;
if( ihb == 1 && jhb == 2 )
++hb_top[i];
else if( j < system->n && ihb == 2 && jhb == 1 )
++hb_top[j];
}
}
/* uncorrected bond orders */
if( nbr_pj->d <= control->bond_cut ) {
r2 = SQR(r_ij);
if( sbp_i->r_s > 0.0 && sbp_j->r_s > 0.0) {
C12 = twbp->p_bo1 * pow( r_ij / twbp->r_s, twbp->p_bo2 );
BO_s = (1.0 + control->bo_cut) * exp( C12 );
}
else BO_s = C12 = 0.0;
if( sbp_i->r_pi > 0.0 && sbp_j->r_pi > 0.0) {
C34 = twbp->p_bo3 * pow( r_ij / twbp->r_p, twbp->p_bo4 );
BO_pi = exp( C34 );
}
else BO_pi = C34 = 0.0;
if( sbp_i->r_pi_pi > 0.0 && sbp_j->r_pi_pi > 0.0) {
C56 = twbp->p_bo5 * pow( r_ij / twbp->r_pp, twbp->p_bo6 );
BO_pi2= exp( C56 );
}
else BO_pi2 = C56 = 0.0;
/* Initially BO values are the uncorrected ones, page 1 */
BO = BO_s + BO_pi + BO_pi2;
if( BO >= control->bo_cut ) {
++bond_top[i];
++bond_top[j];
}
}
}
}
}
*Htop = (int)(MAX( *Htop * safezone, mincap * MIN_HENTRIES ));
for( i = 0; i < system->n; ++i )
hb_top[i] = (int)(MAX( hb_top[i] * saferzone, MIN_HBONDS ));
for( i = 0; i < system->N; ++i ) {
*num_3body += SQR(bond_top[i]);
- //if( i < system->n )
bond_top[i] = MAX( bond_top[i] * 2, MIN_BONDS );
- //else bond_top[i] = MAX_BONDS;
}
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ estimate storages: Htop = %d, num_3body = %d\n",
- system->my_rank, *Htop, *num_3body );
- MPI_Barrier( comm );
-#endif
}
void Compute_Forces( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control,
mpi_datatypes *mpi_data )
{
MPI_Comm comm;
int qeq_flag;
-#if defined(LOG_PERFORMANCE)
- real t_start = 0;
-
- //MPI_Barrier( mpi_data->world );
- if( system->my_rank == MASTER_NODE )
- t_start = Get_Time( );
-#endif
comm = mpi_data->world;
- /********* init forces ************/
-#if defined(PURE_REAX)
- if( control->qeq_freq && (data->step-data->prev_steps)%control->qeq_freq==0 )
- qeq_flag = 1;
- else qeq_flag = 0;
-#elif defined(LAMMPS_REAX)
qeq_flag = 0;
-#endif
if( qeq_flag )
Init_Forces( system, control, data, workspace, lists, out_control, comm );
else
Init_Forces_noQEq( system, control, data, workspace,
lists, out_control, comm );
-#if defined(LOG_PERFORMANCE)
- //MPI_Barrier( mpi_data->world );
- if( system->my_rank == MASTER_NODE )
- Update_Timing_Info( &t_start, &(data->timing.init_forces) );
-#endif
-
/********* bonded interactions ************/
Compute_Bonded_Forces( system, control, data, workspace,
lists, out_control, mpi_data->world );
-#if defined(LOG_PERFORMANCE)
- //MPI_Barrier( mpi_data->world );
- if( system->my_rank == MASTER_NODE )
- Update_Timing_Info( &t_start, &(data->timing.bonded) );
-#endif
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: completed bonded\n",
- system->my_rank, data->step );
- MPI_Barrier( mpi_data->world );
-#endif
-
-
- /**************** qeq ************************/
-#if defined(PURE_REAX)
- if( qeq_flag )
- QEq( system, control, data, workspace, out_control, mpi_data );
-
-#if defined(LOG_PERFORMANCE)
- //MPI_Barrier( mpi_data->world );
- if( system->my_rank == MASTER_NODE )
- Update_Timing_Info( &t_start, &(data->timing.qEq) );
-#endif
-#if defined(DEBUG_FOCUS)
- fprintf(stderr, "p%d @ step%d: qeq completed\n", system->my_rank, data->step);
- MPI_Barrier( mpi_data->world );
-#endif
-#endif //PURE_REAX
-
-
/********* nonbonded interactions ************/
Compute_NonBonded_Forces( system, control, data, workspace,
lists, out_control, mpi_data->world );
-#if defined(LOG_PERFORMANCE)
- //MPI_Barrier( mpi_data->world );
- if( system->my_rank == MASTER_NODE )
- Update_Timing_Info( &t_start, &(data->timing.nonb) );
-#endif
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: nonbonded forces completed\n",
- system->my_rank, data->step );
- MPI_Barrier( mpi_data->world );
-#endif
-
-
/*********** total force ***************/
Compute_Total_Force( system, control, data, workspace, lists, mpi_data );
-#if defined(LOG_PERFORMANCE)
- //MPI_Barrier( mpi_data->world );
- if( system->my_rank == MASTER_NODE )
- Update_Timing_Info( &t_start, &(data->timing.bonded) );
-#endif
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: total forces computed\n",
- system->my_rank, data->step );
- //Print_Total_Force( system, data, workspace );
- MPI_Barrier( mpi_data->world );
-#endif
-
-#if defined(TEST_FORCES)
- Print_Force_Files( system, control, data, workspace,
- lists, out_control, mpi_data );
-#endif
}
diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp
index 12a929d3b..b366872b7 100644
--- a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp
+++ b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp
@@ -1,242 +1,185 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "hydrogen_bonds.h"
-#include "bond_orders.h"
-#include "list.h"
-#include "valence_angles.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_hydrogen_bonds.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_valence_angles.h"
#include "reaxc_vector.h"
-#endif
-
void Hydrogen_Bonds( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control )
{
int i, j, k, pi, pk;
int type_i, type_j, type_k;
int start_j, end_j, hb_start_j, hb_end_j;
int hblist[MAX_BONDS];
int itr, top;
int num_hb_intrs = 0;
ivec rel_jk;
real r_ij, r_jk, theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2;
real e_hb, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3;
rvec dcos_theta_di, dcos_theta_dj, dcos_theta_dk;
rvec dvec_jk, force, ext_press;
- // rtensor temp_rtensor, total_rtensor;
hbond_parameters *hbp;
bond_order_data *bo_ij;
bond_data *pbond_ij;
far_neighbor_data *nbr_jk;
reax_list *bonds, *hbonds;
bond_data *bond_list;
hbond_data *hbond_list;
// tally variables
real fi_tmp[3], fk_tmp[3], delij[3], delkj[3];
bonds = (*lists) + BONDS;
bond_list = bonds->select.bond_list;
hbonds = (*lists) + HBONDS;
hbond_list = hbonds->select.hbond_list;
- /* loops below discover the Hydrogen bonds between i-j-k triplets.
- here j is H atom and there has to be some bond between i and j.
- Hydrogen bond is between j and k.
- so in this function i->X, j->H, k->Z when we map
- variables onto the ones in the handout.*/
for( j = 0; j < system->n; ++j )
- /* j has to be of type H */
+ if (system->my_atoms[j].type < 0) continue;
if( system->reax_param.sbp[system->my_atoms[j].type].p_hbond == 1 ) {
- /*set j's variables */
type_j = system->my_atoms[j].type;
start_j = Start_Index(j, bonds);
end_j = End_Index(j, bonds);
hb_start_j = Start_Index( system->my_atoms[j].Hindex, hbonds );
hb_end_j = End_Index( system->my_atoms[j].Hindex, hbonds );
top = 0;
for( pi = start_j; pi < end_j; ++pi ) {
pbond_ij = &( bond_list[pi] );
i = pbond_ij->nbr;
- bo_ij = &(pbond_ij->bo_data);
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
+ bo_ij = &(pbond_ij->bo_data);
if( system->reax_param.sbp[type_i].p_hbond == 2 &&
bo_ij->BO >= HB_THRESHOLD )
hblist[top++] = pi;
}
- // fprintf( stderr, "j: %d, top: %d, hb_start_j: %d, hb_end_j:%d\n",
- // j, top, hb_start_j, hb_end_j );
-
for( pk = hb_start_j; pk < hb_end_j; ++pk ) {
/* set k's varibles */
k = hbond_list[pk].nbr;
type_k = system->my_atoms[k].type;
+ if (type_k < 0) continue;
nbr_jk = hbond_list[pk].ptr;
r_jk = nbr_jk->d;
rvec_Scale( dvec_jk, hbond_list[pk].scl, nbr_jk->dvec );
for( itr = 0; itr < top; ++itr ) {
pi = hblist[itr];
pbond_ij = &( bonds->select.bond_list[pi] );
i = pbond_ij->nbr;
if( system->my_atoms[i].orig_id != system->my_atoms[k].orig_id ) {
bo_ij = &(pbond_ij->bo_data);
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
r_ij = pbond_ij->d;
hbp = &(system->reax_param.hbp[ type_i ][ type_j ][ type_k ]);
++num_hb_intrs;
Calculate_Theta( pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk,
&theta, &cos_theta );
/* the derivative of cos(theta) */
Calculate_dCos_Theta( pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk,
&dcos_theta_di, &dcos_theta_dj,
&dcos_theta_dk );
/* hyrogen bond energy*/
sin_theta2 = sin( theta/2.0 );
sin_xhz4 = SQR(sin_theta2);
sin_xhz4 *= sin_xhz4;
cos_xhz1 = ( 1.0 - cos_theta );
exp_hb2 = exp( -hbp->p_hb2 * bo_ij->BO );
exp_hb3 = exp( -hbp->p_hb3 * ( hbp->r0_hb / r_jk +
r_jk / hbp->r0_hb - 2.0 ) );
data->my_en.e_hb += e_hb =
hbp->p_hb1 * (1.0 - exp_hb2) * exp_hb3 * sin_xhz4;
CEhb1 = hbp->p_hb1 * hbp->p_hb2 * exp_hb2 * exp_hb3 * sin_xhz4;
CEhb2 = -hbp->p_hb1/2.0 * (1.0 - exp_hb2) * exp_hb3 * cos_xhz1;
CEhb3 = -hbp->p_hb3 *
(-hbp->r0_hb / SQR(r_jk) + 1.0 / hbp->r0_hb) * e_hb;
- /*fprintf( stdout,
- "%6d%6d%6d%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- r_jk, theta, hbp->p_hb1, exp_hb2, hbp->p_hb3, hbp->r0_hb,
- exp_hb3, sin_xhz4, e_hb ); */
/* hydrogen bond forces */
bo_ij->Cdbo += CEhb1; // dbo term
if( control->virial == 0 ) {
// dcos terms
rvec_ScaledAdd( workspace->f[i], +CEhb2, dcos_theta_di );
rvec_ScaledAdd( workspace->f[j], +CEhb2, dcos_theta_dj );
rvec_ScaledAdd( workspace->f[k], +CEhb2, dcos_theta_dk );
// dr terms
rvec_ScaledAdd( workspace->f[j], -CEhb3/r_jk, dvec_jk );
rvec_ScaledAdd( workspace->f[k], +CEhb3/r_jk, dvec_jk );
}
else {
- /* for pressure coupling, terms that are not related to bond order
- derivatives are added directly into pressure vector/tensor */
rvec_Scale( force, +CEhb2, dcos_theta_di ); // dcos terms
rvec_Add( workspace->f[i], force );
rvec_iMultiply( ext_press, pbond_ij->rel_box, force );
rvec_ScaledAdd( data->my_ext_press, 1.0, ext_press );
rvec_ScaledAdd( workspace->f[j], +CEhb2, dcos_theta_dj );
ivec_Scale( rel_jk, hbond_list[pk].scl, nbr_jk->rel_box );
rvec_Scale( force, +CEhb2, dcos_theta_dk );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, rel_jk, force );
rvec_ScaledAdd( data->my_ext_press, 1.0, ext_press );
// dr terms
rvec_ScaledAdd( workspace->f[j], -CEhb3/r_jk, dvec_jk );
rvec_Scale( force, CEhb3/r_jk, dvec_jk );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, rel_jk, force );
rvec_ScaledAdd( data->my_ext_press, 1.0, ext_press );
}
/* tally into per-atom virials */
if (system->pair_ptr->vflag_atom || system->pair_ptr->evflag) {
rvec_ScaledSum( delij, 1., system->my_atoms[i].x,
-1., system->my_atoms[j].x );
rvec_ScaledSum( delkj, 1., system->my_atoms[k].x,
-1., system->my_atoms[j].x );
rvec_Scale(fi_tmp, CEhb2, dcos_theta_di);
rvec_Scale(fk_tmp, CEhb2, dcos_theta_dk);
rvec_ScaledAdd(fk_tmp, CEhb3/r_jk, dvec_jk);
system->pair_ptr->ev_tally3(i,j,k,e_hb,0.0,fi_tmp,fk_tmp,delij,delkj);
}
-
-#ifdef TEST_ENERGY
- /* fprintf( out_control->ehb,
- "%24.15e%24.15e%24.15e\n%24.15e%24.15e%24.15e\n%24.15e%24.15e%24.15e\n",
- dcos_theta_di[0], dcos_theta_di[1], dcos_theta_di[2],
- dcos_theta_dj[0], dcos_theta_dj[1], dcos_theta_dj[2],
- dcos_theta_dk[0], dcos_theta_dk[1], dcos_theta_dk[2]);
- fprintf( out_control->ehb, "%24.15e%24.15e%24.15e\n",
- CEhb1, CEhb2, CEhb3 ); */
- fprintf( out_control->ehb,
- //"%6d%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- "%6d%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- r_jk, theta, bo_ij->BO, e_hb, data->my_en.e_hb );
-#endif
-#ifdef TEST_FORCES
- Add_dBO( system, lists, j, pi, +CEhb1, workspace->f_hb ); //dbo term
- // dcos terms
- rvec_ScaledAdd( workspace->f_hb[i], +CEhb2, dcos_theta_di );
- rvec_ScaledAdd( workspace->f_hb[j], +CEhb2, dcos_theta_dj );
- rvec_ScaledAdd( workspace->f_hb[k], +CEhb2, dcos_theta_dk );
- // dr terms
- rvec_ScaledAdd( workspace->f_hb[j], -CEhb3/r_jk, dvec_jk );
- rvec_ScaledAdd( workspace->f_hb[k], +CEhb3/r_jk, dvec_jk );
-#endif
}
}
}
}
-
-#if defined(DEBUG)
- fprintf( stderr, "Number of hydrogen bonds: %d\n", num_hb_intrs );
- fprintf( stderr, "Hydrogen Bond Energy: %g\n", data->my_en.e_hb );
- fprintf( stderr, "hydbonds: ext_press (%24.15e %24.15e %24.15e)\n",
- data->ext_press[0], data->ext_press[1], data->ext_press[2] );
-#endif
}
diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp
index 7dfc09490..a674b2e39 100644
--- a/src/USER-REAXC/reaxc_init_md.cpp
+++ b/src/USER-REAXC/reaxc_init_md.cpp
@@ -1,363 +1,280 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_init_md.h"
#include "reaxc_allocate.h"
#include "reaxc_forces.h"
#include "reaxc_io_tools.h"
#include "reaxc_list.h"
#include "reaxc_lookup.h"
#include "reaxc_reset_tools.h"
#include "reaxc_system_props.h"
#include "reaxc_tool_box.h"
#include "reaxc_vector.h"
-
int Init_System( reax_system *system, control_params *control, char *msg )
{
int i;
reax_atom *atom;
int mincap = system->mincap;
double safezone = system->safezone;
double saferzone = system->saferzone;
// determine the local and total capacity
system->local_cap = MAX( (int)(system->n * safezone), mincap);
system->total_cap = MAX( (int)(system->N * safezone), mincap);
/* estimate numH and Hcap */
system->numH = 0;
if( control->hbond_cut > 0 )
for( i = 0; i < system->n; ++i ) {
atom = &(system->my_atoms[i]);
+ if (atom->type < 0) continue;
if( system->reax_param.sbp[ atom->type ].p_hbond == 1 )
atom->Hindex = system->numH++;
else atom->Hindex = -1;
}
system->Hcap = (int)(MAX( system->numH * saferzone, mincap ));
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: n=%d local_cap=%d\n",
- system->my_rank, system->n, system->local_cap );
- fprintf( stderr, "p%d: N=%d total_cap=%d\n",
- system->my_rank, system->N, system->total_cap );
- fprintf( stderr, "p%d: numH=%d H_cap=%d\n",
- system->my_rank, system->numH, system->Hcap );
-#endif
-
return SUCCESS;
}
int Init_Simulation_Data( reax_system *system, control_params *control,
simulation_data *data, char *msg )
{
Reset_Simulation_Data( data, control->virial );
/* initialize the timer(s) */
if( system->my_rank == MASTER_NODE ) {
data->timing.start = Get_Time( );
-#if defined(LOG_PERFORMANCE)
- Reset_Timing( &data->timing );
-#endif
}
- //if( !control->restart )
data->step = data->prev_steps = 0;
return SUCCESS;
}
-
-/************************ initialize workspace ************************/
-/* Initialize Taper params */
void Init_Taper( control_params *control, storage *workspace, MPI_Comm comm )
{
real d1, d7;
real swa, swa2, swa3;
real swb, swb2, swb3;
swa = control->nonb_low;
swb = control->nonb_cut;
if( fabs( swa ) > 0.01 )
fprintf( stderr, "Warning: non-zero lower Taper-radius cutoff\n" );
if( swb < 0 ) {
fprintf( stderr, "Negative upper Taper-radius cutoff\n" );
MPI_Abort( comm, INVALID_INPUT );
}
else if( swb < 5 )
fprintf( stderr, "Warning: very low Taper-radius cutoff: %f\n", swb );
d1 = swb - swa;
d7 = pow( d1, 7.0 );
swa2 = SQR( swa );
swa3 = CUBE( swa );
swb2 = SQR( swb );
swb3 = CUBE( swb );
workspace->Tap[7] = 20.0 / d7;
workspace->Tap[6] = -70.0 * (swa + swb) / d7;
workspace->Tap[5] = 84.0 * (swa2 + 3.0*swa*swb + swb2) / d7;
workspace->Tap[4] = -35.0 * (swa3 + 9.0*swa2*swb + 9.0*swa*swb2 + swb3 ) / d7;
workspace->Tap[3] = 140.0 * (swa3*swb + 3.0*swa2*swb2 + swa*swb3 ) / d7;
workspace->Tap[2] =-210.0 * (swa3*swb2 + swa2*swb3) / d7;
workspace->Tap[1] = 140.0 * swa3 * swb3 / d7;
workspace->Tap[0] = (-35.0*swa3*swb2*swb2 + 21.0*swa2*swb3*swb2 +
7.0*swa*swb3*swb3 + swb3*swb3*swb ) / d7;
}
int Init_Workspace( reax_system *system, control_params *control,
storage *workspace, MPI_Comm comm, char *msg )
{
int ret;
ret = Allocate_Workspace( system, control, workspace,
system->local_cap, system->total_cap, comm, msg );
if( ret != SUCCESS )
return ret;
memset( &(workspace->realloc), 0, sizeof(reallocate_data) );
Reset_Workspace( system, workspace );
/* Initialize the Taper function */
Init_Taper( control, workspace, comm );
return SUCCESS;
}
/************** setup communication data structures **************/
int Init_MPI_Datatypes( reax_system *system, storage *workspace,
mpi_datatypes *mpi_data, MPI_Comm comm, char *msg )
{
/* setup the world */
mpi_data->world = comm;
MPI_Comm_size( comm, &(system->wsize) );
return SUCCESS;
}
int Init_Lists( reax_system *system, control_params *control,
simulation_data *data, storage *workspace, reax_list **lists,
mpi_datatypes *mpi_data, char *msg )
{
int i, total_hbonds, total_bonds, bond_cap, num_3body, cap_3body, Htop;
int *hb_top, *bond_top;
MPI_Comm comm;
int mincap = system->mincap;
double safezone = system->safezone;
double saferzone = system->saferzone;
comm = mpi_data->world;
bond_top = (int*) calloc( system->total_cap, sizeof(int) );
hb_top = (int*) calloc( system->local_cap, sizeof(int) );
Estimate_Storages( system, control, lists,
&Htop, hb_top, bond_top, &num_3body, comm );
if( control->hbond_cut > 0 ) {
/* init H indexes */
total_hbonds = 0;
for( i = 0; i < system->n; ++i ) {
system->my_atoms[i].num_hbonds = hb_top[i];
total_hbonds += hb_top[i];
}
total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS ));
if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND,
*lists+HBONDS, comm ) ) {
fprintf( stderr, "not enough space for hbonds list. terminating!\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: allocated hbonds: total_hbonds=%d, space=%dMB\n",
- system->my_rank, total_hbonds,
- (int)(total_hbonds*sizeof(hbond_data)/(1024*1024)) );
-#endif
}
- /* bonds list */
- //Allocate_Bond_List( system->N, bond_top, (*lists)+BONDS );
- //num_bonds = bond_top[system->N-1];
total_bonds = 0;
for( i = 0; i < system->N; ++i ) {
system->my_atoms[i].num_bonds = bond_top[i];
total_bonds += bond_top[i];
}
bond_cap = (int)(MAX( total_bonds*safezone, mincap*MIN_BONDS ));
if( !Make_List( system->total_cap, bond_cap, TYP_BOND,
*lists+BONDS, comm ) ) {
fprintf( stderr, "not enough space for bonds list. terminating!\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: allocated bonds: total_bonds=%d, space=%dMB\n",
- system->my_rank, bond_cap,
- (int)(bond_cap*sizeof(bond_data)/(1024*1024)) );
-#endif
/* 3bodies list */
cap_3body = (int)(MAX( num_3body*safezone, MIN_3BODIES ));
if( !Make_List( bond_cap, cap_3body, TYP_THREE_BODY,
*lists+THREE_BODIES, comm ) ){
fprintf( stderr, "Problem in initializing angles list. Terminating!\n" );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: allocated 3-body list: num_3body=%d, space=%dMB\n",
- system->my_rank, cap_3body,
- (int)(cap_3body*sizeof(three_body_interaction_data)/(1024*1024)) );
-#endif
-
-#if defined(TEST_FORCES)
- if( !Make_List( system->total_cap, bond_cap*8, TYP_DDELTA,
- *lists+DDELTAS, comm ) ) {
- fprintf( stderr, "Problem in initializing dDelta list. Terminating!\n" );
- MPI_Abort( comm, INSUFFICIENT_MEMORY );
- }
- fprintf( stderr, "p%d: allocated dDelta list: num_ddelta=%d space=%ldMB\n",
- system->my_rank, bond_cap*30,
- bond_cap*8*sizeof(dDelta_data)/(1024*1024) );
-
- if( !Make_List( bond_cap, bond_cap*50, TYP_DBO, (*lists)+DBOS, comm ) ) {
- fprintf( stderr, "Problem in initializing dBO list. Terminating!\n" );
- MPI_Abort( comm, INSUFFICIENT_MEMORY );
- }
- fprintf( stderr, "p%d: allocated dbond list: num_dbonds=%d space=%ldMB\n",
- system->my_rank, bond_cap*MAX_BONDS*3,
- bond_cap*MAX_BONDS*3*sizeof(dbond_data)/(1024*1024) );
-#endif
free( hb_top );
free( bond_top );
return SUCCESS;
}
-
-
void Initialize( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control,
mpi_datatypes *mpi_data, MPI_Comm comm )
{
char msg[MAX_STR];
if( Init_MPI_Datatypes(system, workspace, mpi_data, comm, msg) == FAILURE ) {
fprintf( stderr, "p%d: init_mpi_datatypes: could not create datatypes\n",
system->my_rank );
fprintf( stderr, "p%d: mpi_data couldn't be initialized! terminating.\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: initialized mpi datatypes\n", system->my_rank );
-#endif
if( Init_System(system, control, msg) == FAILURE ){
fprintf( stderr, "p%d: %s\n", system->my_rank, msg );
fprintf( stderr, "p%d: system could not be initialized! terminating.\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: system initialized\n", system->my_rank );
-#endif
if( Init_Simulation_Data( system, control, data, msg ) == FAILURE ) {
fprintf( stderr, "p%d: %s\n", system->my_rank, msg );
fprintf( stderr, "p%d: sim_data couldn't be initialized! terminating.\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: initialized simulation data\n", system->my_rank );
-#endif
if( Init_Workspace( system, control, workspace, mpi_data->world, msg ) ==
FAILURE ) {
fprintf( stderr, "p%d:init_workspace: not enough memory\n",
system->my_rank );
fprintf( stderr, "p%d:workspace couldn't be initialized! terminating.\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: initialized workspace\n", system->my_rank );
-#endif
if( Init_Lists( system, control, data, workspace, lists, mpi_data, msg ) ==
FAILURE ) {
fprintf( stderr, "p%d: %s\n", system->my_rank, msg );
fprintf( stderr, "p%d: system could not be initialized! terminating.\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: initialized lists\n", system->my_rank );
-#endif
if( Init_Output_Files(system,control,out_control,mpi_data,msg)== FAILURE) {
fprintf( stderr, "p%d: %s\n", system->my_rank, msg );
fprintf( stderr, "p%d: could not open output files! terminating...\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: output files opened\n", system->my_rank );
-#endif
if( control->tabulate ) {
if( Init_Lookup_Tables( system, control, workspace, mpi_data, msg ) == FAILURE ) {
fprintf( stderr, "p%d: %s\n", system->my_rank, msg );
fprintf( stderr, "p%d: couldn't create lookup table! terminating.\n",
system->my_rank );
MPI_Abort( mpi_data->world, CANNOT_INITIALIZE );
}
-#if defined(DEBUG)
- fprintf( stderr, "p%d: initialized lookup tables\n", system->my_rank );
-#endif
}
Init_Force_Functions( control );
-#if defined(DEBUG)
- fprintf( stderr, "p%d: initialized force functions\n", system->my_rank );
-#endif
- /*#if defined(TEST_FORCES)
- Init_Force_Test_Functions();
- fprintf(stderr,"p%d: initialized force test functions\n",system->my_rank);
- #endif*/
}
diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp
index 841a77925..9645234bd 100644
--- a/src/USER-REAXC/reaxc_io_tools.cpp
+++ b/src/USER-REAXC/reaxc_io_tools.cpp
@@ -1,1722 +1,582 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "update.h"
-#if defined(PURE_REAX)
-#include "io_tools.h"
-#include "basic_comm.h"
-#include "list.h"
-#include "reset_tools.h"
-#include "system_props.h"
-#include "tool_box.h"
-#include "traj.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_io_tools.h"
#include "reaxc_basic_comm.h"
#include "reaxc_list.h"
#include "reaxc_reset_tools.h"
#include "reaxc_system_props.h"
#include "reaxc_tool_box.h"
#include "reaxc_traj.h"
#include "reaxc_vector.h"
-#endif
print_interaction Print_Interactions[NUM_INTRS];
-/************************ initialize output controls ************************/
int Init_Output_Files( reax_system *system, control_params *control,
output_controls *out_control, mpi_datatypes *mpi_data,
char *msg )
{
char temp[MAX_STR];
int ret;
if( out_control->write_steps > 0 ){
ret = Init_Traj( system, control, out_control, mpi_data, msg );
if( ret == FAILURE )
return ret;
}
if( system->my_rank == MASTER_NODE ) {
/* These files are written only by the master node */
if( out_control->energy_update_freq > 0 ) {
-#if defined(PURE_REAX)
- /* init out file */
- sprintf( temp, "%s.out", control->sim_name );
- if( (out_control->out = fopen( temp, "w" )) != NULL ) {
-#if !defined(DEBUG) && !defined(DEBUG_FOCUS)
- fprintf( out_control->out, "%-6s%14s%14s%14s%11s%13s%13s\n",
- "step", "total energy", "potential", "kinetic",
- "T(K)", "V(A^3)", "P(Gpa)" );
-#else
- fprintf( out_control->out, "%-6s%24s%24s%24s%13s%16s%13s\n",
- "step", "total energy", "potential", "kinetic",
- "T(K)", "V(A^3)", "P(GPa)" );
-#endif
- fflush( out_control->out );
- }
- else {
- strcpy( msg, "init_out_controls: .out file could not be opened\n" );
- return FAILURE;
- }
-#endif
/* init potentials file */
sprintf( temp, "%s.pot", control->sim_name );
if( (out_control->pot = fopen( temp, "w" )) != NULL ) {
-#if !defined(DEBUG) && !defined(DEBUG_FOCUS)
- fprintf( out_control->pot,
- "%-6s%14s%14s%14s%14s%14s%14s%14s%14s%14s%14s%14s\n",
- "step", "ebond", "eatom", "elp",
- "eang", "ecoa", "ehb", "etor", "econj",
- "evdw","ecoul", "epol" );
-#else
- fprintf( out_control->pot,
- "%-6s%24s%24s%24s%24s%24s%24s%24s%24s%24s%24s%24s\n",
- "step", "ebond", "eatom", "elp",
- "eang", "ecoa", "ehb", "etor", "econj",
- "evdw","ecoul", "epol" );
-#endif
fflush( out_control->pot );
}
else {
strcpy( msg, "init_out_controls: .pot file could not be opened\n" );
return FAILURE;
}
/* init log file */
-#if defined(LOG_PERFORMANCE)
- sprintf( temp, "%s.log", control->sim_name );
- if( (out_control->log = fopen( temp, "w" )) != NULL ) {
- fprintf( out_control->log, "%6s%8s%8s%8s%8s%8s%8s%8s%8s\n",
- "step", "total", "comm", "nbrs", "init", "bonded", "nonb",
- "qeq", "matvecs" );
- fflush( out_control->log );
- }
- else {
- strcpy( msg, "init_out_controls: .log file could not be opened\n" );
- return FAILURE;
- }
-#endif
}
/* init pressure file */
if( control->ensemble == NPT ||
control->ensemble == iNPT ||
control->ensemble == sNPT ) {
sprintf( temp, "%s.prs", control->sim_name );
if( (out_control->prs = fopen( temp, "w" )) != NULL ) {
fprintf(out_control->prs,"%8s%13s%13s%13s%13s%13s%13s%13s\n",
"step", "Pint/norm[x]", "Pint/norm[y]", "Pint/norm[z]",
"Pext/Ptot[x]", "Pext/Ptot[y]", "Pext/Ptot[z]", "Pkin/V" );
fflush( out_control->prs );
}
else {
strcpy(msg,"init_out_controls: .prs file couldn't be opened\n");
return FAILURE;
}
}
-
- /* init electric dipole moment analysis file */
- // not yet implemented in the parallel version!!!
- // if( control->dipole_anal ) {
- // sprintf( temp, "%s.dpl", control->sim_name );
- // if( (out_control->dpl = fopen( temp, "w" )) != NULL ) {
- // fprintf( out_control->dpl, "%6s%20s%30s",
- // "step", "molecule count", "avg dipole moment norm" );
- // fflush( out_control->dpl );
- // }
- // else {
- // strcpy(msg, "init_out_controls: .dpl file couldn't be opened\n");
- // return FAILURE;
- // }
- // }
-
- /* init diffusion coef analysis file */
- // not yet implemented in the parallel version!!!
- // if( control->diffusion_coef ) {
- // sprintf( temp, "%s.drft", control->sim_name );
- // if( (out_control->drft = fopen( temp, "w" )) != NULL ) {
- // fprintf( out_control->drft, "%7s%20s%20s\n",
- // "step", "type count", "avg disp^2" );
- // fflush( out_control->drft );
- // }
- // else {
- // strcpy(msg,"init_out_controls: .drft file couldn't be opened\n");
- // return FAILURE;
- // }
- // }
- }
-
-
- /* init molecular analysis file */
- /* proc0 opens this file and shares it with everyone.
- then all processors write into it in a round-robin
- fashion controlled by their rank */
- /*if( control->molecular_analysis ) {
- if( system->my_rank == MASTER_NODE ) {
- sprintf( temp, "%s.mol", control->sim_name );
- if( (out_control->mol = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"init_out_controls: .mol file could not be opened\n");
- return FAILURE;
- }
- }
-
- MPI_Bcast( &(out_control->mol), 1, MPI_LONG, 0, MPI_COMM_WORLD );
- }*/
-
-
-#ifdef TEST_ENERGY
- /* open bond energy file */
- sprintf( temp, "%s.ebond.%d", control->sim_name, system->my_rank );
- if( (out_control->ebond = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .ebond file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open lone-pair energy file */
- sprintf( temp, "%s.elp.%d", control->sim_name, system->my_rank );
- if( (out_control->elp = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .elp file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open overcoordination energy file */
- sprintf( temp, "%s.eov.%d", control->sim_name, system->my_rank );
- if( (out_control->eov = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .eov file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open undercoordination energy file */
- sprintf( temp, "%s.eun.%d", control->sim_name, system->my_rank );
- if( (out_control->eun = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .eun file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open angle energy file */
- sprintf( temp, "%s.eval.%d", control->sim_name, system->my_rank );
- if( (out_control->eval = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .eval file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open coalition energy file */
- sprintf( temp, "%s.ecoa.%d", control->sim_name, system->my_rank );
- if( (out_control->ecoa = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .ecoa file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open penalty energy file */
- sprintf( temp, "%s.epen.%d", control->sim_name, system->my_rank );
- if( (out_control->epen = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .epen file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open torsion energy file */
- sprintf( temp, "%s.etor.%d", control->sim_name, system->my_rank );
- if( (out_control->etor = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .etor file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open conjugation energy file */
- sprintf( temp, "%s.econ.%d", control->sim_name, system->my_rank );
- if( (out_control->econ = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .econ file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open hydrogen bond energy file */
- sprintf( temp, "%s.ehb.%d", control->sim_name, system->my_rank );
- if( (out_control->ehb = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .ehb file couldn't be opened\n");
- return FAILURE;
}
- /* open vdWaals energy file */
- sprintf( temp, "%s.evdw.%d", control->sim_name, system->my_rank );
- if( (out_control->evdw = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .evdw file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open coulomb energy file */
- sprintf( temp, "%s.ecou.%d", control->sim_name, system->my_rank );
- if( (out_control->ecou = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .ecou file couldn't be opened\n");
- return FAILURE;
- }
-#endif
-
-
-#ifdef TEST_FORCES
- /* open bond orders file */
- sprintf( temp, "%s.fbo.%d", control->sim_name, system->my_rank );
- if( (out_control->fbo = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fbo file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open bond orders derivatives file */
- sprintf( temp, "%s.fdbo.%d", control->sim_name, system->my_rank );
- if( (out_control->fdbo = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fdbo file couldn't be opened\n");
- return FAILURE;
- }
-
- /* produce a single force file - to be written by p0 */
- if( system->my_rank == MASTER_NODE ) {
- /* open bond forces file */
- sprintf( temp, "%s.fbond", control->sim_name );
- if( (out_control->fbond = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fbond file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open lone-pair forces file */
- sprintf( temp, "%s.flp", control->sim_name );
- if( (out_control->flp = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .flp file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open overcoordination forces file */
- sprintf( temp, "%s.fov", control->sim_name );
- if( (out_control->fov = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fov file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open undercoordination forces file */
- sprintf( temp, "%s.fun", control->sim_name );
- if( (out_control->fun = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fun file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open angle forces file */
- sprintf( temp, "%s.fang", control->sim_name );
- if( (out_control->fang = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fang file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open coalition forces file */
- sprintf( temp, "%s.fcoa", control->sim_name );
- if( (out_control->fcoa = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fcoa file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open penalty forces file */
- sprintf( temp, "%s.fpen", control->sim_name );
- if( (out_control->fpen = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fpen file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open torsion forces file */
- sprintf( temp, "%s.ftor", control->sim_name );
- if( (out_control->ftor = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .ftor file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open conjugation forces file */
- sprintf( temp, "%s.fcon", control->sim_name );
- if( (out_control->fcon = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fcon file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open hydrogen bond forces file */
- sprintf( temp, "%s.fhb", control->sim_name );
- if( (out_control->fhb = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fhb file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open vdw forces file */
- sprintf( temp, "%s.fvdw", control->sim_name );
- if( (out_control->fvdw = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fvdw file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open nonbonded forces file */
- sprintf( temp, "%s.fele", control->sim_name );
- if( (out_control->fele = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fele file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open total force file */
- sprintf( temp, "%s.ftot", control->sim_name );
- if( (out_control->ftot = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .ftot file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open force comprison file */
- sprintf( temp, "%s.fcomp", control->sim_name );
- if( (out_control->fcomp = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .fcomp file couldn't be opened\n");
- return FAILURE;
- }
- }
-#endif
-
-#if defined(PURE_REAX)
-#if defined(TEST_FORCES) || defined(TEST_ENERGY)
- /* open far neighbor list file */
- sprintf( temp, "%s.far_nbrs_list.%d", control->sim_name, system->my_rank );
- if( (out_control->flist = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .far_nbrs_list file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open bond list file */
- sprintf( temp, "%s.bond_list.%d", control->sim_name, system->my_rank );
- if( (out_control->blist = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .bond_list file couldn't be opened\n");
- return FAILURE;
- }
-
- /* open near neighbor list file */
- sprintf( temp, "%s.near_nbrs_list.%d", control->sim_name, system->my_rank );
- if( (out_control->nlist = fopen( temp, "w" )) == NULL ) {
- strcpy(msg,"Init_Out_Files: .near_nbrs_list file couldn't be opened\n");
- return FAILURE;
- }
-#endif
-#endif
-
return SUCCESS;
}
/************************ close output files ************************/
int Close_Output_Files( reax_system *system, control_params *control,
output_controls *out_control, mpi_datatypes *mpi_data )
{
if( out_control->write_steps > 0 )
End_Traj( system->my_rank, out_control );
if( system->my_rank == MASTER_NODE ) {
if( out_control->energy_update_freq > 0 ) {
-#if defined(PURE_REAX)
- fclose( out_control->out );
-#endif
fclose( out_control->pot );
-#if defined(LOG_PERFORMANCE)
- fclose( out_control->log );
-#endif
}
if( control->ensemble == NPT || control->ensemble == iNPT ||
control->ensemble == sNPT )
fclose( out_control->prs );
-
- // not yet implemented in the parallel version
- //if( control->dipole_anal ) fclose( out_control->dpl );
- //if( control->diffusion_coef ) fclose( out_control->drft );
- //if( control->molecular_analysis ) fclose( out_control->mol );
}
-#ifdef TEST_ENERGY
- fclose( out_control->ebond );
- fclose( out_control->elp );
- fclose( out_control->eov );
- fclose( out_control->eun );
- fclose( out_control->eval );
- fclose( out_control->epen );
- fclose( out_control->ecoa );
- fclose( out_control->ehb );
- fclose( out_control->etor );
- fclose( out_control->econ );
- fclose( out_control->evdw );
- fclose( out_control->ecou );
-#endif
-
-#ifdef TEST_FORCES
- fclose( out_control->fbo );
- fclose( out_control->fdbo );
-
- if( system->my_rank == MASTER_NODE ) {
- fclose( out_control->fbond );
- fclose( out_control->flp );
- fclose( out_control->fov );
- fclose( out_control->fun );
- fclose( out_control->fang );
- fclose( out_control->fcoa );
- fclose( out_control->fpen );
- fclose( out_control->ftor );
- fclose( out_control->fcon );
- fclose( out_control->fhb );
- fclose( out_control->fvdw );
- fclose( out_control->fele );
- fclose( out_control->ftot );
- fclose( out_control->fcomp );
- }
-#endif
-
-#if defined(PURE_REAX)
-#if defined(TEST_FORCES) || defined(TEST_ENERGY)
- fclose( out_control->flist );
- fclose( out_control->blist );
- fclose( out_control->nlist );
-#endif
-#endif
-
return SUCCESS;
}
void Print_Box( simulation_box* box, char *name, FILE *out )
{
// int i, j;
fprintf( out, "%s:\n", name );
fprintf( out, "\tmin[%8.3f %8.3f %8.3f]\n",
box->min[0], box->min[1], box->min[2] );
fprintf( out, "\tmax[%8.3f %8.3f %8.3f]\n",
box->max[0], box->max[1], box->max[2] );
fprintf( out, "\tdims[%8.3f%8.3f%8.3f]\n",
box->box_norms[0], box->box_norms[1], box->box_norms[2] );
- // fprintf( out, "box: {" );
- // for( i = 0; i < 3; ++i )
- // {
- // fprintf( out, "{" );
- // for( j = 0; j < 3; ++j )
- // fprintf( out, "%8.3f ", box->box[i][j] );
- // fprintf( out, "}" );
- // }
- // fprintf( out, "}\n" );
-
- // fprintf( out, "box_trans: {" );
- // for( i = 0; i < 3; ++i )
- // {
- // fprintf( out, "{" );
- // for( j = 0; j < 3; ++j )
- // fprintf( out, "%8.3f ", box->trans[i][j] );
- // fprintf( out, "}" );
- // }
- // fprintf( out, "}\n" );
-
- // fprintf( out, "box_trinv: {" );
- // for( i = 0; i < 3; ++i )
- // {
- // fprintf( out, "{" );
- // for( j = 0; j < 3; ++j )
- // fprintf( out, "%8.3f ", box->trans_inv[i][j] );
- // fprintf( out, "}" );
- // }
- // fprintf( out, "}\n" );
}
void Print_Grid( grid* g, FILE *out )
{
int x, y, z, gc_type;
ivec gc_str;
char gcell_type_text[10][12] =
{ "NO_NBRS", "NEAR_ONLY", "HBOND_ONLY", "FAR_ONLY",
"NEAR_HBOND", "NEAR_FAR", "HBOND_FAR", "FULL_NBRS", "NATIVE" };
fprintf( out, "\tnumber of grid cells: %d %d %d\n",
g->ncells[0], g->ncells[1], g->ncells[2] );
fprintf( out, "\tgcell lengths: %8.3f %8.3f %8.3f\n",
g->cell_len[0], g->cell_len[1], g->cell_len[2] );
fprintf( out, "\tinverses of gcell lengths: %8.3f %8.3f %8.3f\n",
g->inv_len[0], g->inv_len[1], g->inv_len[2] );
fprintf( out, "\t---------------------------------\n" );
fprintf( out, "\tnumber of native gcells: %d %d %d\n",
g->native_cells[0], g->native_cells[1], g->native_cells[2] );
fprintf( out, "\tnative gcell span: %d-%d %d-%d %d-%d\n",
g->native_str[0], g->native_end[0],
g->native_str[1], g->native_end[1],
g->native_str[2], g->native_end[2] );
fprintf( out, "\t---------------------------------\n" );
fprintf( out, "\tvlist gcell stretch: %d %d %d\n",
g->vlist_span[0], g->vlist_span[1], g->vlist_span[2] );
fprintf( out, "\tnonbonded nbrs gcell stretch: %d %d %d\n",
g->nonb_span[0], g->nonb_span[1], g->nonb_span[2] );
fprintf( out, "\tbonded nbrs gcell stretch: %d %d %d\n",
g->bond_span[0], g->bond_span[1], g->bond_span[2] );
fprintf( out, "\t---------------------------------\n" );
fprintf( out, "\tghost gcell span: %d %d %d\n",
g->ghost_span[0], g->ghost_span[1], g->ghost_span[2] );
fprintf( out, "\tnonbonded ghost gcell span: %d %d %d\n",
g->ghost_nonb_span[0],g->ghost_nonb_span[1],g->ghost_nonb_span[2]);
fprintf(out, "\thbonded ghost gcell span: %d %d %d\n",
g->ghost_hbond_span[0],g->ghost_hbond_span[1],g->ghost_hbond_span[2]);
fprintf( out, "\tbonded ghost gcell span: %d %d %d\n",
g->ghost_bond_span[0],g->ghost_bond_span[1],g->ghost_bond_span[2]);
- //fprintf(out, "\t---------------------------------\n" );
- //fprintf(out, "\tmax number of gcells at the boundary: %d\n", g->gcell_cap);
fprintf( out, "\t---------------------------------\n" );
fprintf( stderr, "GCELL MARKS:\n" );
gc_type = g->cells[0][0][0].type;
ivec_MakeZero( gc_str );
x = y = z = 0;
for( x = 0; x < g->ncells[0]; ++x )
for( y = 0; y < g->ncells[1]; ++y )
for( z = 0; z < g->ncells[2]; ++z )
if( g->cells[x][y][z].type != gc_type ){
fprintf( stderr,
"\tgcells from(%2d %2d %2d) to (%2d %2d %2d): %d - %s\n",
gc_str[0], gc_str[1], gc_str[2], x, y, z,
gc_type, gcell_type_text[gc_type] );
gc_type = g->cells[x][y][z].type;
gc_str[0] = x;
gc_str[1] = y;
gc_str[2] = z;
}
fprintf( stderr, "\tgcells from(%2d %2d %2d) to (%2d %2d %2d): %d - %s\n",
gc_str[0], gc_str[1], gc_str[2], x, y, z,
gc_type, gcell_type_text[gc_type] );
fprintf( out, "-------------------------------------\n" );
}
-
-#if 0
-void Print_GCell_Exchange_Bounds( int my_rank, neighbor_proc *my_nbrs )
-{
- ivec r;
- int nbr;
- neighbor_proc *nbr_pr;
- char fname[100];
- FILE *f;
- char exch[3][10] = { "NONE", "NEAR_EXCH", "FULL_EXCH" };
-
- sprintf( fname, "gcell_exchange_bounds%d", my_rank );
- f = fopen( fname, "w" );
-
- /* loop over neighbor processes */
- for( r[0] = -1; r[0] <= 1; ++r[0])
- for( r[1] = -1; r[1] <= 1; ++r[1] )
- for( r[2] = -1; r[2] <= 1; ++r[2] )
- if( r[0]!=0 || r[1]!=0 || r[2]!=0 ) {
- nbr_pr = &(my_nbrs[nbr]);
-
- fprintf( f, "p%-2d GCELL BOUNDARIES with r(%2d %2d %2d):\n",
- my_rank, r[0], r[1], r[2] );
-
- fprintf( f, "\tsend_type %s: send(%d %d %d) to (%d %d %d)\n",
- exch[nbr_pr->send_type],
- nbr_pr->str_send[0], nbr_pr->str_send[1],
- nbr_pr->str_send[2],
- nbr_pr->end_send[0], nbr_pr->end_send[1],
- nbr_pr->end_send[2] );
-
- fprintf( f, "\trecv_type %s: recv(%d %d %d) to (%d %d %d)\n",
- exch[nbr_pr->recv_type],
- nbr_pr->str_recv[0], nbr_pr->str_recv[1],
- nbr_pr->str_recv[2],
- nbr_pr->end_recv[0], nbr_pr->end_recv[1],
- nbr_pr->end_recv[2] );
- }
-
- fclose(f);
-}
-#endif
-
-
-
void Print_Native_GCells( reax_system *system )
{
int i, j, k, l;
char fname[100];
FILE *f;
grid *g;
grid_cell *gc;
char gcell_type_text[10][12] =
{ "NO_NBRS", "NEAR_ONLY", "HBOND_ONLY", "FAR_ONLY",
"NEAR_HBOND", "NEAR_FAR", "HBOND_FAR", "FULL_NBRS", "NATIVE" };
sprintf( fname, "native_gcells.%d", system->my_rank );
f = fopen( fname, "w" );
g = &(system->my_grid);
for( i = g->native_str[0]; i < g->native_end[0]; i++ )
for( j = g->native_str[1]; j < g->native_end[1]; j++ )
for( k = g->native_str[2]; k < g->native_end[2]; k++ )
{
gc = &( g->cells[i][j][k] );
fprintf( f, "p%d gcell(%2d %2d %2d) of type %d(%s)\n",
system->my_rank, i, j, k,
gc->type, gcell_type_text[gc->type] );
fprintf( f, "\tatom list start: %d, end: %d\n\t", gc->str, gc->end );
for( l = gc->str; l < gc->end; ++l )
fprintf( f, TAGINT_FORMAT, system->my_atoms[l].orig_id );
fprintf( f, "\n" );
}
fclose(f);
}
void Print_All_GCells( reax_system *system )
{
int i, j, k, l;
char fname[100];
FILE *f;
grid *g;
grid_cell *gc;
char gcell_type_text[10][12] =
{ "NO_NBRS", "NEAR_ONLY", "HBOND_ONLY", "FAR_ONLY",
"NEAR_HBOND", "NEAR_FAR", "HBOND_FAR", "FULL_NBRS", "NATIVE" };
sprintf( fname, "all_gcells.%d", system->my_rank );
f = fopen( fname, "w" );
g = &(system->my_grid);
for( i = 0; i < g->ncells[0]; i++ )
for( j = 0; j < g->ncells[1]; j++ )
for( k = 0; k < g->ncells[2]; k++ )
{
gc = &( g->cells[i][j][k] );
fprintf( f, "p%d gcell(%2d %2d %2d) of type %d(%s)\n",
system->my_rank, i, j, k,
gc->type, gcell_type_text[gc->type] );
fprintf( f, "\tatom list start: %d, end: %d\n\t", gc->str, gc->end );
for( l = gc->str; l < gc->end; ++l )
fprintf( f, TAGINT_FORMAT, system->my_atoms[l].orig_id );
fprintf( f, "\n" );
}
fclose(f);
}
void Print_My_Atoms( reax_system *system )
{
int i;
char fname[100];
FILE *fh;
sprintf( fname, "my_atoms.%d", system->my_rank );
if( (fh = fopen( fname, "w" )) == NULL )
{
fprintf( stderr, "error in opening my_atoms file" );
MPI_Abort( MPI_COMM_WORLD, FILE_NOT_FOUND );
}
- // fprintf( stderr, "p%d had %d atoms\n",
- // system->my_rank, system->n );
-
for( i = 0; i < system->n; ++i )
fprintf( fh, "p%-2d %-5d %2d %24.15e%24.15e%24.15e\n",
system->my_rank,
system->my_atoms[i].orig_id, system->my_atoms[i].type,
system->my_atoms[i].x[0],
system->my_atoms[i].x[1],
system->my_atoms[i].x[2] );
fclose( fh );
}
void Print_My_Ext_Atoms( reax_system *system )
{
int i;
char fname[100];
FILE *fh;
sprintf( fname, "my_ext_atoms.%d", system->my_rank );
if( (fh = fopen( fname, "w" )) == NULL )
{
fprintf( stderr, "error in opening my_ext_atoms file" );
MPI_Abort( MPI_COMM_WORLD, FILE_NOT_FOUND );
}
- // fprintf( stderr, "p%d had %d atoms\n",
- // system->my_rank, system->n );
-
for( i = 0; i < system->N; ++i )
fprintf( fh, "p%-2d %-5d imprt%-5d %2d %24.15e%24.15e%24.15e\n",
system->my_rank, system->my_atoms[i].orig_id,
system->my_atoms[i].imprt_id, system->my_atoms[i].type,
system->my_atoms[i].x[0],
system->my_atoms[i].x[1],
system->my_atoms[i].x[2] );
fclose( fh );
}
void Print_Far_Neighbors( reax_system *system, reax_list **lists,
control_params *control )
{
char fname[100];
int i, j, nbr, natoms;
rc_tagint id_i, id_j;
FILE *fout;
reax_list *far_nbrs;
sprintf( fname, "%s.far_nbrs.%d", control->sim_name, system->my_rank );
fout = fopen( fname, "w" );
far_nbrs = (*lists) + FAR_NBRS;
natoms = system->N;
for( i = 0; i < natoms; ++i ) {
id_i = system->my_atoms[i].orig_id;
for( j = Start_Index(i,far_nbrs); j < End_Index(i,far_nbrs); ++j ) {
nbr = far_nbrs->select.far_nbr_list[j].nbr;
id_j = system->my_atoms[nbr].orig_id;
fprintf( fout, "%6d%6d%24.15e%24.15e%24.15e%24.15e\n",
id_i, id_j, far_nbrs->select.far_nbr_list[j].d,
far_nbrs->select.far_nbr_list[j].dvec[0],
far_nbrs->select.far_nbr_list[j].dvec[1],
far_nbrs->select.far_nbr_list[j].dvec[2] );
fprintf( fout, "%6d%6d%24.15e%24.15e%24.15e%24.15e\n",
id_j, id_i, far_nbrs->select.far_nbr_list[j].d,
-far_nbrs->select.far_nbr_list[j].dvec[0],
-far_nbrs->select.far_nbr_list[j].dvec[1],
-far_nbrs->select.far_nbr_list[j].dvec[2] );
}
}
fclose( fout );
}
void Print_Sparse_Matrix( reax_system *system, sparse_matrix *A )
{
int i, j;
for( i = 0; i < A->n; ++i )
for( j = A->start[i]; j < A->end[i]; ++j )
fprintf( stderr, "%d %d %.15e\n",
system->my_atoms[i].orig_id,
system->my_atoms[A->entries[j].j].orig_id,
A->entries[j].val );
}
void Print_Sparse_Matrix2( reax_system *system, sparse_matrix *A, char *fname )
{
int i, j;
FILE *f = fopen( fname, "w" );
for( i = 0; i < A->n; ++i )
for( j = A->start[i]; j < A->end[i]; ++j )
fprintf( f, "%d %d %.15e\n",
system->my_atoms[i].orig_id,
system->my_atoms[A->entries[j].j].orig_id,
A->entries[j].val );
fclose(f);
}
void Print_Symmetric_Sparse(reax_system *system, sparse_matrix *A, char *fname)
{
int i, j;
reax_atom *ai, *aj;
FILE *f = fopen( fname, "w" );
for( i = 0; i < A->n; ++i ) {
ai = &(system->my_atoms[i]);
for( j = A->start[i]; j < A->end[i]; ++j ) {
aj = &(system->my_atoms[A->entries[j].j]);
fprintf( f, "%d %d %.15e\n",
ai->renumber, aj->renumber, A->entries[j].val );
if( A->entries[j].j < system->n && ai->renumber != aj->renumber )
fprintf( f, "%d %d %.15e\n",
aj->renumber, ai->renumber, A->entries[j].val );
}
}
fclose(f);
}
void Print_Linear_System( reax_system *system, control_params *control,
storage *workspace, int step )
{
int i;
char fname[100];
reax_atom *ai;
FILE *out;
// print rhs and init guesses for QEq
sprintf( fname, "%s.p%dstate%d", control->sim_name, system->my_rank, step );
out = fopen( fname, "w" );
for( i = 0; i < system->n; i++ ) {
ai = &(system->my_atoms[i]);
fprintf( out, "%6d%2d%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e\n",
ai->renumber, ai->type, ai->x[0], ai->x[1], ai->x[2],
workspace->s[i], workspace->b_s[i],
workspace->t[i], workspace->b_t[i] );
}
fclose( out );
// print QEq coef matrix
sprintf( fname, "%s.p%dH%d", control->sim_name, system->my_rank, step );
Print_Symmetric_Sparse( system, workspace->H, fname );
- // print the incomplete H matrix
- /*sprintf( fname, "%s.p%dHinc%d", control->sim_name, system->my_rank, step );
- out = fopen( fname, "w" );
- H = workspace->H;
- for( i = 0; i < H->n; ++i ) {
- ai = &(system->my_atoms[i]);
- for( j = H->start[i]; j < H->end[i]; ++j )
- if( H->entries[j].j < system->n ) {
- aj = &(system->my_atoms[H->entries[j].j]);
- fprintf( out, "%d %d %.15e\n",
- ai->orig_id, aj->orig_id, H->entries[j].val );
- if( ai->orig_id != aj->orig_id )
- fprintf( out, "%d %d %.15e\n",
- aj->orig_id, ai->orig_id, H->entries[j].val );
- }
- }
- fclose( out );*/
-
- // print the L from incomplete cholesky decomposition
- /*sprintf( fname, "%s.p%dL%d", control->sim_name, system->my_rank, step );
- Print_Sparse_Matrix2( system, workspace->L, fname );*/
}
void Print_LinSys_Soln( reax_system *system, real *x, real *b_prm, real *b )
{
int i;
char fname[100];
FILE *fout;
sprintf( fname, "qeq.%d.out", system->my_rank );
fout = fopen( fname, "w" );
for( i = 0; i < system->n; ++i )
fprintf( fout, "%6d%10.4f%10.4f%10.4f\n",
system->my_atoms[i].orig_id, x[i], b_prm[i], b[i] );
fclose( fout );
}
void Print_Charges( reax_system *system )
{
int i;
char fname[100];
FILE *fout;
sprintf( fname, "q.%d.out", system->my_rank );
fout = fopen( fname, "w" );
for( i = 0; i < system->n; ++i )
fprintf( fout, "%6d %10.7f %10.7f %10.7f\n",
system->my_atoms[i].orig_id,
system->my_atoms[i].s[0],
system->my_atoms[i].t[0],
system->my_atoms[i].q );
fclose( fout );
}
void Print_Bonds( reax_system *system, reax_list *bonds, char *fname )
{
int i, j, pj;
bond_data *pbond;
bond_order_data *bo_ij;
FILE *f = fopen( fname, "w" );
for( i = 0; i < system->N; ++i )
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
pbond = &(bonds->select.bond_list[pj]);
bo_ij = &(pbond->bo_data);
j = pbond->nbr;
- //fprintf( f, "%6d%6d%23.15e%23.15e%23.15e%23.15e%23.15e\n",
- // system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- // pbond->d, bo_ij->BO, bo_ij->BO_s, bo_ij->BO_pi, bo_ij->BO_pi2 );
fprintf( f, "%8d%8d %24.15f %24.15f\n",
i, j,//system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
pbond->d, bo_ij->BO );
}
fclose(f);
}
int fn_qsort_intcmp( const void *a, const void *b )
{
return( *(int *)a - *(int *)b );
}
void Print_Bond_List2( reax_system *system, reax_list *bonds, char *fname )
{
int i,j, nbr, pj;
rc_tagint id_i, id_j;
FILE *f = fopen( fname, "w" );
int temp[500];
int num=0;
for( i = 0; i < system->n; ++i ) {
num=0;
id_i = system->my_atoms[i].orig_id;
fprintf( f, "%6d:", id_i);
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
nbr = bonds->select.bond_list[pj].nbr;
id_j = system->my_atoms[nbr].orig_id;
if( id_i < id_j )
temp[num++] = id_j;
}
qsort(&temp, num, sizeof(int), fn_qsort_intcmp);
for(j=0; j < num; j++)
fprintf(f, "%6d", temp[j] );
fprintf(f, "\n");
}
}
void Print_Total_Force( reax_system *system, simulation_data *data,
storage *workspace )
{
int i;
fprintf( stderr, "step: %d\n", data->step );
fprintf( stderr, "%6s\t%-38s\n", "atom", "atom.f[0,1,2]");
for( i = 0; i < system->N; ++i )
fprintf( stderr, "%6d %f %f %f\n",
//"%6d%24.15e%24.15e%24.15e\n",
system->my_atoms[i].orig_id,
workspace->f[i][0], workspace->f[i][1], workspace->f[i][2] );
}
void Output_Results( reax_system *system, control_params *control,
simulation_data *data, reax_list **lists,
output_controls *out_control, mpi_datatypes *mpi_data )
{
-#if defined(LOG_PERFORMANCE)
- real t_elapsed, denom;
-#endif
if((out_control->energy_update_freq > 0 &&
data->step%out_control->energy_update_freq == 0) ||
(out_control->write_steps > 0 &&
data->step%out_control->write_steps == 0)){
/* update system-wide energies */
Compute_System_Energy( system, data, mpi_data->world );
/* output energies */
if( system->my_rank == MASTER_NODE &&
out_control->energy_update_freq > 0 &&
data->step % out_control->energy_update_freq == 0 ) {
-#if !defined(DEBUG) && !defined(DEBUG_FOCUS)
-#if defined(PURE_REAX)
- fprintf( out_control->out,
- "%-6d%14.2f%14.2f%14.2f%11.2f%13.2f%13.5f\n",
- data->step, data->sys_en.e_tot, data->sys_en.e_pot,
- E_CONV * data->sys_en.e_kin, data->therm.T,
- system->big_box.V, data->iso_bar.P );
- fflush( out_control->out );
-#endif
-
- fprintf( out_control->pot,
- "%-6d%14.2f%14.2f%14.2f%14.2f%14.2f%14.2f%14.2f%14.2f%14.2f%14.2f%14.2f\n",
- data->step,
- data->sys_en.e_bond,
- data->sys_en.e_ov + data->sys_en.e_un, data->sys_en.e_lp,
- data->sys_en.e_ang + data->sys_en.e_pen, data->sys_en.e_coa,
- data->sys_en.e_hb,
- data->sys_en.e_tor, data->sys_en.e_con,
- data->sys_en.e_vdW, data->sys_en.e_ele, data->sys_en.e_pol);
- fflush( out_control->pot );
-#else
-#if defined(PURE_REAX)
- fprintf( out_control->out,
- "%-6d%24.15e%24.15e%24.15e%13.5f%16.5f%13.5f\n",
- data->step, data->sys_en.e_tot, data->sys_en.e_pot,
- E_CONV * data->sys_en.e_kin, data->therm.T,
- system->big_box.V, data->iso_bar.P );
- fflush( out_control->out );
-#endif
-
- fprintf( out_control->pot,
- "%-6d%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- data->step,
- data->sys_en.e_bond,
- data->sys_en.e_ov + data->sys_en.e_un, data->sys_en.e_lp,
- data->sys_en.e_ang + data->sys_en.e_pen, data->sys_en.e_coa,
- data->sys_en.e_hb,
- data->sys_en.e_tor, data->sys_en.e_con,
- data->sys_en.e_vdW, data->sys_en.e_ele, data->sys_en.e_pol);
- fflush( out_control->pot );
-#endif //DEBUG
-
-#if defined(LOG_PERFORMANCE)
- t_elapsed = Get_Timing_Info( data->timing.total );
- if( data->step - data->prev_steps > 0 )
- denom = 1.0 / out_control->energy_update_freq;
- else denom = 1;
-
- fprintf( out_control->log, "%6d%8.3f%8.3f%8.3f%8.3f%8.3f%8.3f%8.3f%6d\n",
- data->step,
- t_elapsed * denom,
- data->timing.comm * denom,
- data->timing.nbrs * denom,
- data->timing.init_forces * denom,
- data->timing.bonded * denom,
- data->timing.nonb * denom,
- data->timing.qEq * denom,
- (int)((data->timing.s_matvecs+data->timing.t_matvecs)*denom) );
-
- Reset_Timing( &(data->timing) );
- fflush( out_control->log );
-#endif //LOG_PERFORMANCE
if( control->virial ){
fprintf( out_control->prs,
"%8d%13.6f%13.6f%13.6f%13.6f%13.6f%13.6f%13.6f\n",
data->step,
data->int_press[0], data->int_press[1], data->int_press[2],
data->ext_press[0], data->ext_press[1], data->ext_press[2],
data->kin_press );
fprintf( out_control->prs,
"%8s%13.6f%13.6f%13.6f%13.6f%13.6f%13.6f%13.6f\n",
"",system->big_box.box_norms[0], system->big_box.box_norms[1],
system->big_box.box_norms[2],
data->tot_press[0], data->tot_press[1], data->tot_press[2],
system->big_box.V );
fflush( out_control->prs);
}
}
/* write current frame */
if( out_control->write_steps > 0 &&
(data->step-data->prev_steps) % out_control->write_steps == 0 ) {
Append_Frame( system, control, data, lists, out_control, mpi_data );
}
}
-#if defined(DEBUG)
- fprintf( stderr, "output_results... done\n" );
-#endif
-}
-
-
-#ifdef TEST_ENERGY
-void Debug_Marker_Bonded( output_controls *out_control, int step )
-{
- fprintf( out_control->ebond, "step: %d\n%6s%6s%12s%12s%12s\n",
- step, "atom1", "atom2", "bo", "ebond", "total" );
- fprintf( out_control->elp, "step: %d\n%6s%12s%12s%12s\n",
- step, "atom", "nlp", "elp", "total" );
- fprintf( out_control->eov, "step: %d\n%6s%12s%12s\n",
- step, "atom", "eov", "total" );
- fprintf( out_control->eun, "step: %d\n%6s%12s%12s\n",
- step, "atom", "eun", "total" );
- fprintf( out_control->eval, "step: %d\n%6s%6s%6s%12s%12s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "atom3", "angle", "theta0",
- "bo(12)", "bo(23)", "eval", "total" );
- fprintf( out_control->epen, "step: %d\n%6s%6s%6s%12s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "atom3", "angle", "bo(12)", "bo(23)",
- "epen", "total" );
- fprintf( out_control->ecoa, "step: %d\n%6s%6s%6s%12s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "atom3", "angle", "bo(12)", "bo(23)",
- "ecoa", "total" );
- fprintf( out_control->ehb, "step: %d\n%6s%6s%6s%12s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "atom3", "r(23)", "angle", "bo(12)",
- "ehb", "total" );
- fprintf( out_control->etor, "step: %d\n%6s%6s%6s%6s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "atom3", "atom4", "phi", "bo(23)",
- "etor", "total" );
- fprintf( out_control->econ,"step:%d\n%6s%6s%6s%6s%12s%12s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "atom3", "atom4",
- "phi", "bo(12)", "bo(23)", "bo(34)", "econ", "total" );
-}
-
-void Debug_Marker_Nonbonded( output_controls *out_control, int step )
-{
- fprintf( out_control->evdw, "step: %d\n%6s%6s%12s%12s%12s\n",
- step, "atom1", "atom2", "r12", "evdw", "total" );
- fprintf( out_control->ecou, "step: %d\n%6s%6s%12s%12s%12s%12s%12s\n",
- step, "atom1", "atom2", "r12", "q1", "q2", "ecou", "total" );
-}
-
-#endif
-
-
-#ifdef TEST_FORCES
-void Dummy_Printer( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
-}
-
-
-
-void Print_Bond_Orders( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i, pj, pk;
- bond_order_data *bo_ij;
- dbond_data *dbo_k;
- reax_list *bonds = (*lists) + BONDS;
- reax_list *dBOs = (*lists) + DBOS;
-
- /* bond orders */
- fprintf( out_control->fbo, "step: %d\n", data->step );
- fprintf( out_control->fbo, "%6s%6s%12s%12s%12s%12s%12s\n",
- "atom1", "atom2", "r_ij", "total_bo", "bo_s", "bo_p", "bo_pp" );
-
- for( i = 0; i < system->N; ++i )
- for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
- bo_ij = &(bonds->select.bond_list[pj].bo_data);
- fprintf( out_control->fbo,
- "%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[bonds->select.bond_list[pj].nbr].orig_id,
- bonds->select.bond_list[pj].d,
- bo_ij->BO, bo_ij->BO_s, bo_ij->BO_pi, bo_ij->BO_pi2 );
- }
-
-
- /* derivatives of bond orders */
- fprintf( out_control->fdbo, "step: %d\n", data->step );
- fprintf( out_control->fdbo, "%6s%6s%6s%24s%24s%24s\n",
- "atom1", "atom2", "atom2", "dBO", "dBOpi", "dBOpi2" );
- for( i = 0; i < system->N; ++i )
- for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
- /* fprintf( out_control->fdbo, "%6d %6d\tstart: %6d\tend: %6d\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[bonds->select.bond_list[pj].nbr].orig_id,
- Start_Index( pj, dBOs ), End_Index( pj, dBOs ) ); */
- for( pk = Start_Index(pj, dBOs); pk < End_Index(pj, dBOs); ++pk ) {
- dbo_k = &(dBOs->select.dbo_list[pk]);
- fprintf( out_control->fdbo, "%6d%6d%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[bonds->select.bond_list[pj].nbr].orig_id,
- system->my_atoms[dbo_k->wrt].orig_id,
- dbo_k->dBO[0], dbo_k->dBO[1], dbo_k->dBO[2] );
-
- fprintf( out_control->fdbo, "%6d%6d%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[bonds->select.bond_list[pj].nbr].orig_id,
- system->my_atoms[dbo_k->wrt].orig_id,
- dbo_k->dBOpi[0], dbo_k->dBOpi[1], dbo_k->dBOpi[2] );
-
- fprintf( out_control->fdbo, "%6d%6d%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[bonds->select.bond_list[pj].nbr].orig_id,
- system->my_atoms[dbo_k->wrt].orig_id,
- dbo_k->dBOpi2[0], dbo_k->dBOpi2[1], dbo_k->dBOpi2[2] );
- }
- }
-}
-
-
-void Print_Forces( FILE *f, storage *workspace, int N, int step )
-{
- int i;
-
- fprintf( f, "step: %d\n", step );
- for( i = 0; i < N; ++i )
- //fprintf( f, "%6d %23.15e %23.15e %23.15e\n",
- //fprintf( f, "%6d%12.6f%12.6f%12.6f\n",
- fprintf( f, "%6d %19.9e %19.9e %19.9e\n",
- workspace->id_all[i], workspace->f_all[i][0],
- workspace->f_all[i][1], workspace->f_all[i][2] );
-}
-
-
-void Print_Force_Files( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control,
- mpi_datatypes *mpi_data )
-{
- int i, d;
-
- Coll_ids_at_Master( system, workspace, mpi_data );
-
- Print_Bond_Orders( system, control, data, workspace, lists, out_control );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_be );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fbond, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_lp );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->flp, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_ov );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fov, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_un );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fun, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_ang );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fang, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_coa );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fcoa, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_pen );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fpen, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_tor );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->ftor, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_con );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fcon, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_hb );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fhb, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_vdw );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fvdw, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_ele );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fele, workspace, system->bigN, data->step );
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->ftot, workspace, system->bigN, data->step );
-
- for( i = 0; i < system->n; ++i ) {
- for( d = 0; d < 3; ++d )
- workspace->f_tot[i][d] = workspace->f_be[i][d] +
- workspace->f_lp[i][d]+workspace->f_ov[i][d]+workspace->f_un[i][d] +
- workspace->f_ang[i][d]+workspace->f_pen[i][d]+workspace->f_coa[i][d] +
- workspace->f_tor[i][d]+workspace->f_con[i][d] +
- workspace->f_vdw[i][d]+workspace->f_ele[i][d] +
- workspace->f_hb[i][d];
- }
-
- Coll_rvecs_at_Master( system, workspace, mpi_data, workspace->f_tot );
- if( system->my_rank == MASTER_NODE )
- Print_Forces( out_control->fcomp, workspace, system->bigN, data->step );
-}
-#endif
-
-
-#if defined(TEST_FORCES) || defined(TEST_ENERGY)
-
-void Print_Far_Neighbors_List( reax_system *system, reax_list **lists,
- control_params *control, simulation_data *data,
- output_controls *out_control )
-{
- int i, j, nbr, natoms;
- rc_tagint id_i, id_j;
- int num=0;
- int temp[500];
- reax_list *far_nbrs;
-
- far_nbrs = (*lists) + FAR_NBRS;
- fprintf( out_control->flist, "step: %d\n", data->step );
- fprintf( out_control->flist, "%6s\t%-38s\n", "atom", "Far_nbrs_list");
-
-
- natoms = system->n;
- for( i = 0; i < natoms; ++i ) {
- id_i = system->my_atoms[i].orig_id;
- fprintf( out_control->flist, "%6d:",id_i);
- num=0;
-
- for( j = Start_Index(i,far_nbrs); j < End_Index(i,far_nbrs); ++j ) {
- nbr = far_nbrs->select.far_nbr_list[j].nbr;
- id_j = system->my_atoms[nbr].orig_id;
- temp[num++] = id_j;
- }
-
- qsort(&temp, num, sizeof(int), fn_qsort_intcmp);
- for(j=0; j < num; j++)
- fprintf(out_control->flist, "%6d",temp[j]);
- fprintf( out_control->flist, "\n");
- }
-}
-
-void Print_Bond_List( reax_system *system, control_params *control,
- simulation_data *data, reax_list **lists,
- output_controls *out_control)
-{
- int i,j, nbr, pj;
- rc_tagint id_i, id_j;
- reax_list *bonds = (*lists) + BONDS;
-
- int temp[500];
- int num=0;
-
- fprintf( out_control->blist, "step: %d\n", data->step );
- fprintf( out_control->blist, "%6s\t%-38s\n", "atom", "Bond_list");
-
- /* bond list */
- for( i = 0; i < system->n; ++i ) {
- num=0;
- id_i = system->my_atoms[i].orig_id;
- fprintf( out_control->blist, "%6d:", id_i);
- for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
- nbr = bonds->select.bond_list[pj].nbr;
- id_j = system->my_atoms[nbr].orig_id;
- if( id_i < id_j )
- temp[num++] = id_j;
- }
-
- qsort(&temp, num, sizeof(int), fn_qsort_intcmp);
- for(j=0; j < num; j++)
- fprintf(out_control->blist, "%6d",temp[j]);
- fprintf(out_control->blist, "\n");
- }
-}
-
-
-#endif
-
-
-#ifdef OLD_VERSION
-void Print_Init_Atoms( reax_system *system, storage *workspace )
-{
- int i;
-
- fprintf( stderr, "p%d had %d atoms\n",
- system->my_rank, workspace->init_cnt );
-
- for( i = 0; i < workspace->init_cnt; ++i )
- fprintf( stderr, "p%d, atom%d: %d %s %8.3f %8.3f %8.3f\n",
- system->my_rank, i,
- workspace->init_atoms[i].type, workspace->init_atoms[i].name,
- workspace->init_atoms[i].x[0],
- workspace->init_atoms[i].x[1],
- workspace->init_atoms[i].x[2] );
}
-#endif //OLD_VERSION
-
-
-/*void Print_Bond_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- fprintf( out_control->fbond, "step: %d\n", data->step );
- fprintf( out_control->fbond, "%6s%24s%24s%24s\n",
- "atom", "f_be[0]", "f_be[1]", "f_be[2]" );
-
- for( i = 0; i < system->bigN; ++i )
- fprintf(out_control->fbond, "%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- workspace->f_all[i][0], workspace->f_all[i][1],
- workspace->f_all[i][2]);
-}
-
-void Print_LonePair_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- fprintf( out_control->flp, "step: %d\n", data->step );
- fprintf( out_control->flp, "%6s%24s\n", "atom", "f_lonepair" );
-
- for( i = 0; i < system->bigN; ++i )
- fprintf(out_control->flp, "%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- workspace->f_all[i][0], workspace->f_all[i][1],
- workspace->f_all[i][2]);
-}
-
-
-void Print_OverCoor_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- fprintf( out_control->fov, "step: %d\n", data->step );
- fprintf( out_control->fov, "%6s%-38s%-38s%-38s\n",
- "atom","f_over[0]", "f_over[1]", "f_over[2]" );
-
- for( i = 0; i < system->bigN; ++i )
- fprintf( out_control->fov,
- "%6d %24.15e%24.15e%24.15e 0 0 0\n",
- system->my_atoms[i].orig_id,
- workspace->f_all[i][0], workspace->f_all[i][1],
- workspace->f_all[i][2] );
-}
-
-
-void Print_UnderCoor_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- fprintf( out_control->fun, "step: %d\n", data->step );
- fprintf( out_control->fun, "%6s%-38s%-38s%-38s\n",
- "atom","f_under[0]", "f_under[1]", "f_under[2]" );
-
- for( i = 0; i < system->bigN; ++i )
- fprintf( out_control->fun,
- "%6d %24.15e%24.15e%24.15e 0 0 0\n",
- system->my_atoms[i].orig_id,
- workspace->f_all[i][0], workspace->f_all[i][1],
- workspace->f_all[i][2] );
-}
-
-
-void Print_ValAngle_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int j;
-
- fprintf( out_control->f3body, "step: %d\n", data->step );
- fprintf( out_control->f3body, "%6s%-37s%-37s%-37s%-38s\n",
- "atom", "3-body total", "f_ang", "f_pen", "f_coa" );
-
- for( j = 0; j < system->N; ++j ){
- if( rvec_isZero(workspace->f_pen[j]) && rvec_isZero(workspace->f_coa[j]) )
- fprintf( out_control->f3body,
- "%6d %24.15e%24.15e%24.15e 0 0 0 0 0 0\n",
- system->my_atoms[j].orig_id,
- workspace->f_ang[j][0], workspace->f_ang[j][1],
- workspace->f_ang[j][2] );
- else if( rvec_isZero(workspace->f_coa[j]) )
- fprintf( out_control->f3body,
- "%6d %24.15e%24.15e%24.15e %24.15e%24.15e%24.15e " \
- "%24.15e%24.15e%24.15e\n",
- system->my_atoms[j].orig_id,
- workspace->f_ang[j][0] + workspace->f_pen[j][0],
- workspace->f_ang[j][1] + workspace->f_pen[j][1],
- workspace->f_ang[j][2] + workspace->f_pen[j][2],
- workspace->f_ang[j][0], workspace->f_ang[j][1],
- workspace->f_ang[j][2],
- workspace->f_pen[j][0], workspace->f_pen[j][1],
- workspace->f_pen[j][2] );
- else{
- fprintf( out_control->f3body, "%6d %24.15e%24.15e%24.15e ",
- system->my_atoms[j].orig_id,
- workspace->f_ang[j][0] + workspace->f_pen[j][0] +
- workspace->f_coa[j][0],
- workspace->f_ang[j][1] + workspace->f_pen[j][1] +
- workspace->f_coa[j][1],
- workspace->f_ang[j][2] + workspace->f_pen[j][2] +
- workspace->f_coa[j][2] );
-
- fprintf( out_control->f3body,
- "%24.15e%24.15e%24.15e %24.15e%24.15e%24.15e "\
- "%24.15e%24.15e%24.15e\n",
- workspace->f_ang[j][0], workspace->f_ang[j][1],
- workspace->f_ang[j][2],
- workspace->f_pen[j][0], workspace->f_pen[j][1],
- workspace->f_pen[j][2],
- workspace->f_coa[j][0], workspace->f_coa[j][1],
- workspace->f_coa[j][2] );
- }
- }
-}
-
-
-void Print_Hydrogen_Bond_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control)
-{
- int j;
-
- fprintf( out_control->fhb, "step: %d\n", data->step );
- fprintf( out_control->fhb, "%6s\t%-38s\n", "atom", "f_hb[0,1,2]" );
-
- for( j = 0; j < system->N; ++j )
- fprintf(out_control->fhb, "%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[j].orig_id,
- workspace->f_hb[j][0],
- workspace->f_hb[j][1],
- workspace->f_hb[j][2] );
-}
-
-
-void Print_Four_Body_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int j;
-
- fprintf( out_control->f4body, "step: %d\n", data->step );
- fprintf( out_control->f4body, "%6s\t%-38s%-38s%-38s\n",
- "atom", "4-body total", "f_tor", "f_con" );
-
- for( j = 0; j < system->N; ++j ){
- if( !rvec_isZero( workspace->f_con[j] ) )
- fprintf( out_control->f4body,
- "%6d %24.15e%24.15e%24.15e %24.15e%24.15e%24.15e "\
- "%24.15e%24.15e%24.15e\n",
- system->my_atoms[j].orig_id,
- workspace->f_tor[j][0] + workspace->f_con[j][0],
- workspace->f_tor[j][1] + workspace->f_con[j][1],
- workspace->f_tor[j][2] + workspace->f_con[j][2],
- workspace->f_tor[j][0], workspace->f_tor[j][1],
- workspace->f_tor[j][2],
- workspace->f_con[j][0], workspace->f_con[j][1],
- workspace->f_con[j][2] );
- else
- fprintf( out_control->f4body,
- "%6d %24.15e%24.15e%24.15e 0 0 0\n",
- system->my_atoms[j].orig_id, workspace->f_tor[j][0],
- workspace->f_tor[j][1], workspace->f_tor[j][2] );
- }
-
-}
-
-
-void Print_vdW_Coulomb_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- return;
-
- fprintf( out_control->fnonb, "step: %d\n", data->step );
- fprintf( out_control->fnonb, "%6s\t%-38s%-38s%-38s\n",
- "atom", "nonbonded_total[0,1,2]", "f_vdw[0,1,2]", "f_ele[0,1,2]" );
-
- for( i = 0; i < system->N; ++i )
- fprintf( out_control->fnonb,
- "%6d%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- workspace->f_vdw[i][0] + workspace->f_ele[i][0],
- workspace->f_vdw[i][1] + workspace->f_ele[i][1],
- workspace->f_vdw[i][2] + workspace->f_ele[i][2],
- workspace->f_vdw[i][0],
- workspace->f_vdw[i][1],
- workspace->f_vdw[i][2],
- workspace->f_ele[i][0],
- workspace->f_ele[i][1],
- workspace->f_ele[i][2] );
-}
-
-
-void Print_Total_Force( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- return;
-
- fprintf( out_control->ftot, "step: %d\n", data->step );
- fprintf( out_control->ftot, "%6s\t%-38s\n", "atom", "atom.f[0,1,2]");
-
- for( i = 0; i < system->n; ++i )
- fprintf( out_control->ftot, "%6d%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[i].f[0],
- system->my_atoms[i].f[1],
- system->my_atoms[i].f[2] );
-}
-
-
-void Compare_Total_Forces( reax_system *system, control_params *control,
- simulation_data *data, storage *workspace,
- reax_list **lists, output_controls *out_control )
-{
- int i;
-
- return;
-
- fprintf( out_control->ftot2, "step: %d\n", data->step );
- fprintf( out_control->ftot2, "%6s\t%-38s%-38s\n",
- "atom", "f_total[0,1,2]", "test_force_total[0,1,2]" );
-
- for( i = 0; i < system->N; ++i )
- fprintf( out_control->ftot2, "%6d%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[i].f[0],
- system->my_atoms[i].f[1],
- system->my_atoms[i].f[2],
- workspace->f_be[i][0] + workspace->f_lp[i][0] +
- workspace->f_ov[i][0] + workspace->f_un[i][0] +
- workspace->f_ang[i][0]+ workspace->f_pen[i][0]+
- workspace->f_coa[i][0]+ + workspace->f_hb[i][0] +
- workspace->f_tor[i][0] + workspace->f_con[i][0] +
- workspace->f_vdw[i][0] + workspace->f_ele[i][0],
- workspace->f_be[i][1] + workspace->f_lp[i][1] +
- workspace->f_ov[i][1] + workspace->f_un[i][1] +
- workspace->f_ang[i][1]+ workspace->f_pen[i][1]+
- workspace->f_coa[i][1]+ + workspace->f_hb[i][1] +
- workspace->f_tor[i][1] + workspace->f_con[i][1] +
- workspace->f_vdw[i][1] + workspace->f_ele[i][1],
- workspace->f_be[i][2] + workspace->f_lp[i][2] +
- workspace->f_ov[i][2] + workspace->f_un[i][2] +
- workspace->f_ang[i][2]+ workspace->f_pen[i][2] +
- workspace->f_coa[i][2]+ + workspace->f_hb[i][2] +
- workspace->f_tor[i][2] + workspace->f_con[i][2] +
- workspace->f_vdw[i][2] + workspace->f_ele[i][2] );
-}*/
-
-/*void Init_Force_Test_Functions( )
-{
- Print_Interactions[0] = Print_Bond_Orders;
- Print_Interactions[1] = Print_Bond_Forces;
- Print_Interactions[2] = Print_LonePair_Forces;
- Print_Interactions[3] = Print_OverUnderCoor_Forces;
- Print_Interactions[4] = Print_Three_Body_Forces;
- Print_Interactions[5] = Print_Four_Body_Forces;
- Print_Interactions[6] = Print_Hydrogen_Bond_Forces;
- Print_Interactions[7] = Print_vdW_Coulomb_Forces;
- Print_Interactions[8] = Print_Total_Force;
- Print_Interactions[9] = Compare_Total_Forces;
- }*/
diff --git a/src/USER-REAXC/reaxc_list.cpp b/src/USER-REAXC/reaxc_list.cpp
index 5a99e8780..d22ac4ca7 100644
--- a/src/USER-REAXC/reaxc_list.cpp
+++ b/src/USER-REAXC/reaxc_list.cpp
@@ -1,157 +1,126 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_list.h"
#include "reaxc_tool_box.h"
-
/************* allocate list space ******************/
int Make_List(int n, int num_intrs, int type, reax_list *l, MPI_Comm comm)
{
l->allocated = 1;
l->n = n;
l->num_intrs = num_intrs;
l->index = (int*) smalloc( n * sizeof(int), "list:index", comm );
l->end_index = (int*) smalloc( n * sizeof(int), "list:end_index", comm );
l->type = type;
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "list: n=%d num_intrs=%d type=%d\n", n, num_intrs, type );
-#endif
switch(l->type) {
case TYP_VOID:
l->select.v = (void*) smalloc(l->num_intrs * sizeof(void*), "list:v", comm);
break;
case TYP_THREE_BODY:
l->select.three_body_list = (three_body_interaction_data*)
smalloc( l->num_intrs * sizeof(three_body_interaction_data),
"list:three_bodies", comm );
break;
case TYP_BOND:
l->select.bond_list = (bond_data*)
smalloc( l->num_intrs * sizeof(bond_data), "list:bonds", comm );
break;
case TYP_DBO:
l->select.dbo_list = (dbond_data*)
smalloc( l->num_intrs * sizeof(dbond_data), "list:dbonds", comm );
break;
case TYP_DDELTA:
l->select.dDelta_list = (dDelta_data*)
smalloc( l->num_intrs * sizeof(dDelta_data), "list:dDeltas", comm );
break;
case TYP_FAR_NEIGHBOR:
l->select.far_nbr_list = (far_neighbor_data*)
smalloc(l->num_intrs * sizeof(far_neighbor_data), "list:far_nbrs", comm);
break;
case TYP_HBOND:
l->select.hbond_list = (hbond_data*)
smalloc( l->num_intrs * sizeof(hbond_data), "list:hbonds", comm );
break;
default:
fprintf( stderr, "ERROR: no %d list type defined!\n", l->type );
MPI_Abort( comm, INVALID_INPUT );
}
return SUCCESS;
}
void Delete_List( reax_list *l, MPI_Comm comm )
{
if( l->allocated == 0 )
return;
l->allocated = 0;
sfree( l->index, "list:index" );
sfree( l->end_index, "list:end_index" );
switch(l->type) {
case TYP_VOID:
sfree( l->select.v, "list:v" );
break;
case TYP_HBOND:
sfree( l->select.hbond_list, "list:hbonds" );
break;
case TYP_FAR_NEIGHBOR:
sfree( l->select.far_nbr_list, "list:far_nbrs" );
break;
case TYP_BOND:
sfree( l->select.bond_list, "list:bonds" );
break;
case TYP_DBO:
sfree( l->select.dbo_list, "list:dbos" );
break;
case TYP_DDELTA:
sfree( l->select.dDelta_list, "list:dDeltas" );
break;
case TYP_THREE_BODY:
sfree( l->select.three_body_list, "list:three_bodies" );
break;
default:
fprintf( stderr, "ERROR: no %d list type defined!\n", l->type );
MPI_Abort( comm, INVALID_INPUT );
}
}
-
-#if defined(PURE_REAX)
-inline int Num_Entries( int i, reax_list *l )
-{
- return l->end_index[i] - l->index[i];
-}
-
-inline int Start_Index( int i, reax_list *l )
-{
- return l->index[i];
-}
-
-inline int End_Index( int i, reax_list *l )
-{
- return l->end_index[i];
-}
-
-inline void Set_Start_Index( int i, int val, reax_list *l )
-{
- l->index[i] = val;
-}
-
-inline void Set_End_Index( int i, int val, reax_list *l )
-{
- l->end_index[i] = val;
-}
-#endif
diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp
index 48a6c19aa..fe01d4bb4 100644
--- a/src/USER-REAXC/reaxc_lookup.cpp
+++ b/src/USER-REAXC/reaxc_lookup.cpp
@@ -1,345 +1,328 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "lookup.h"
-#include "nonbonded.h"
-#include "tool_box.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_lookup.h"
#include "reaxc_nonbonded.h"
#include "reaxc_tool_box.h"
-#endif
LR_lookup_table **LR;
-/* Fills solution into x. Warning: will modify c and d! */
void Tridiagonal_Solve( const real *a, const real *b,
real *c, real *d, real *x, unsigned int n){
int i;
real id;
- /* Modify the coefficients. */
c[0] /= b[0]; /* Division by zero risk. */
d[0] /= b[0]; /* Division by zero would imply a singular matrix. */
for(i = 1; i < n; i++){
id = (b[i] - c[i-1] * a[i]); /* Division by zero risk. */
c[i] /= id; /* Last value calculated is redundant. */
d[i] = (d[i] - d[i-1] * a[i])/id;
}
- /* Now back substitute. */
x[n - 1] = d[n - 1];
for(i = n - 2; i >= 0; i--)
x[i] = d[i] - c[i] * x[i + 1];
}
void Natural_Cubic_Spline( const real *h, const real *f,
cubic_spline_coef *coef, unsigned int n,
MPI_Comm comm )
{
int i;
real *a, *b, *c, *d, *v;
/* allocate space for the linear system */
a = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
b = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
c = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
d = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
v = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
/* build the linear system */
a[0] = a[1] = a[n-1] = 0;
for( i = 2; i < n-1; ++i )
a[i] = h[i-1];
b[0] = b[n-1] = 0;
for( i = 1; i < n-1; ++i )
b[i] = 2 * (h[i-1] + h[i]);
c[0] = c[n-2] = c[n-1] = 0;
for( i = 1; i < n-2; ++i )
c[i] = h[i];
d[0] = d[n-1] = 0;
for( i = 1; i < n-1; ++i )
d[i] = 6 * ((f[i+1]-f[i])/h[i] - (f[i]-f[i-1])/h[i-1]);
v[0] = 0;
v[n-1] = 0;
Tridiagonal_Solve( &(a[1]), &(b[1]), &(c[1]), &(d[1]), &(v[1]), n-2 );
for( i = 1; i < n; ++i ){
coef[i-1].d = (v[i] - v[i-1]) / (6*h[i-1]);
coef[i-1].c = v[i]/2;
coef[i-1].b = (f[i]-f[i-1])/h[i-1] + h[i-1]*(2*v[i] + v[i-1])/6;
coef[i-1].a = f[i];
}
sfree( a, "cubic_spline:a" );
sfree( b, "cubic_spline:b" );
sfree( c, "cubic_spline:c" );
sfree( d, "cubic_spline:d" );
sfree( v, "cubic_spline:v" );
}
void Complete_Cubic_Spline( const real *h, const real *f, real v0, real vlast,
cubic_spline_coef *coef, unsigned int n,
MPI_Comm comm )
{
int i;
real *a, *b, *c, *d, *v;
/* allocate space for the linear system */
a = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
b = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
c = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
d = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
v = (real*) smalloc( n * sizeof(real), "cubic_spline:a", comm );
/* build the linear system */
a[0] = 0;
for( i = 1; i < n; ++i )
a[i] = h[i-1];
b[0] = 2*h[0];
for( i = 1; i < n; ++i )
b[i] = 2 * (h[i-1] + h[i]);
c[n-1] = 0;
for( i = 0; i < n-1; ++i )
c[i] = h[i];
d[0] = 6 * (f[1]-f[0])/h[0] - 6 * v0;
d[n-1] = 6 * vlast - 6 * (f[n-1]-f[n-2]/h[n-2]);
for( i = 1; i < n-1; ++i )
d[i] = 6 * ((f[i+1]-f[i])/h[i] - (f[i]-f[i-1])/h[i-1]);
Tridiagonal_Solve( &(a[0]), &(b[0]), &(c[0]), &(d[0]), &(v[0]), n );
for( i = 1; i < n; ++i ){
coef[i-1].d = (v[i] - v[i-1]) / (6*h[i-1]);
coef[i-1].c = v[i]/2;
coef[i-1].b = (f[i]-f[i-1])/h[i-1] + h[i-1]*(2*v[i] + v[i-1])/6;
coef[i-1].a = f[i];
}
sfree( a, "cubic_spline:a" );
sfree( b, "cubic_spline:b" );
sfree( c, "cubic_spline:c" );
sfree( d, "cubic_spline:d" );
sfree( v, "cubic_spline:v" );
}
void LR_Lookup( LR_lookup_table *t, real r, LR_data *y )
{
int i;
real base, dif;
i = (int)(r * t->inv_dx);
if( i == 0 ) ++i;
base = (real)(i+1) * t->dx;
dif = r - base;
y->e_vdW = ((t->vdW[i].d*dif + t->vdW[i].c)*dif + t->vdW[i].b)*dif +
t->vdW[i].a;
y->CEvd = ((t->CEvd[i].d*dif + t->CEvd[i].c)*dif +
t->CEvd[i].b)*dif + t->CEvd[i].a;
y->e_ele = ((t->ele[i].d*dif + t->ele[i].c)*dif + t->ele[i].b)*dif +
t->ele[i].a;
y->CEclmb = ((t->CEclmb[i].d*dif + t->CEclmb[i].c)*dif + t->CEclmb[i].b)*dif +
t->CEclmb[i].a;
y->H = y->e_ele * EV_to_KCALpMOL / C_ele;
}
int Init_Lookup_Tables( reax_system *system, control_params *control,
storage *workspace, mpi_datatypes *mpi_data, char *msg )
{
int i, j, r;
int num_atom_types;
int existing_types[MAX_ATOM_TYPES], aggregated[MAX_ATOM_TYPES];
real dr;
real *h, *fh, *fvdw, *fele, *fCEvd, *fCEclmb;
real v0_vdw, v0_ele, vlast_vdw, vlast_ele;
MPI_Comm comm;
/* initializations */
v0_vdw = 0;
v0_ele = 0;
vlast_vdw = 0;
vlast_ele = 0;
comm = mpi_data->world;
num_atom_types = system->reax_param.num_atom_types;
dr = control->nonb_cut / control->tabulate;
h = (real*)
smalloc( (control->tabulate+2) * sizeof(real), "lookup:h", comm );
fh = (real*)
smalloc( (control->tabulate+2) * sizeof(real), "lookup:fh", comm );
fvdw = (real*)
smalloc( (control->tabulate+2) * sizeof(real), "lookup:fvdw", comm );
fCEvd = (real*)
smalloc( (control->tabulate+2) * sizeof(real), "lookup:fCEvd", comm );
fele = (real*)
smalloc( (control->tabulate+2) * sizeof(real), "lookup:fele", comm );
fCEclmb = (real*)
smalloc( (control->tabulate+2) * sizeof(real), "lookup:fCEclmb", comm );
- /* allocate Long-Range LookUp Table space based on
- number of atom types in the ffield file */
LR = (LR_lookup_table**)
scalloc( num_atom_types, sizeof(LR_lookup_table*), "lookup:LR", comm );
for( i = 0; i < num_atom_types; ++i )
LR[i] = (LR_lookup_table*)
scalloc( num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]", comm );
- /* most atom types in ffield file will not exist in the current
- simulation. to avoid unnecessary lookup table space, determine
- the atom types that exist in the current simulation */
for( i = 0; i < MAX_ATOM_TYPES; ++i )
existing_types[i] = 0;
for( i = 0; i < system->n; ++i )
existing_types[ system->my_atoms[i].type ] = 1;
MPI_Allreduce( existing_types, aggregated, MAX_ATOM_TYPES,
MPI_INT, MPI_SUM, mpi_data->world );
- /* fill in the lookup table entries for existing atom types.
- only lower half should be enough. */
for( i = 0; i < num_atom_types; ++i ) {
if( aggregated[i] ) {
- //for( j = 0; j < num_atom_types; ++j )
for( j = i; j < num_atom_types; ++j ) {
if( aggregated[j] ) {
LR[i][j].xmin = 0;
LR[i][j].xmax = control->nonb_cut;
LR[i][j].n = control->tabulate + 2;
LR[i][j].dx = dr;
LR[i][j].inv_dx = control->tabulate / control->nonb_cut;
LR[i][j].y = (LR_data*)
smalloc( LR[i][j].n * sizeof(LR_data), "lookup:LR[i,j].y", comm );
LR[i][j].H = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].H" ,
comm );
LR[i][j].vdW = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].vdW",
comm);
LR[i][j].CEvd = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].CEvd",
comm);
LR[i][j].ele = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),"lookup:LR[i,j].ele",
comm );
LR[i][j].CEclmb = (cubic_spline_coef*)
smalloc( LR[i][j].n*sizeof(cubic_spline_coef),
"lookup:LR[i,j].CEclmb", comm );
for( r = 1; r <= control->tabulate; ++r ) {
LR_vdW_Coulomb( system, workspace, control, i, j, r * dr, &(LR[i][j].y[r]) );
h[r] = LR[i][j].dx;
fh[r] = LR[i][j].y[r].H;
fvdw[r] = LR[i][j].y[r].e_vdW;
fCEvd[r] = LR[i][j].y[r].CEvd;
fele[r] = LR[i][j].y[r].e_ele;
fCEclmb[r] = LR[i][j].y[r].CEclmb;
}
// init the start-end points
h[r] = LR[i][j].dx;
v0_vdw = LR[i][j].y[1].CEvd;
v0_ele = LR[i][j].y[1].CEclmb;
fh[r] = fh[r-1];
fvdw[r] = fvdw[r-1];
fCEvd[r] = fCEvd[r-1];
fele[r] = fele[r-1];
fCEclmb[r] = fCEclmb[r-1];
vlast_vdw = fCEvd[r-1];
vlast_ele = fele[r-1];
Natural_Cubic_Spline( &h[1], &fh[1],
&(LR[i][j].H[1]), control->tabulate+1, comm );
Complete_Cubic_Spline( &h[1], &fvdw[1], v0_vdw, vlast_vdw,
&(LR[i][j].vdW[1]), control->tabulate+1,
comm );
Natural_Cubic_Spline( &h[1], &fCEvd[1],
&(LR[i][j].CEvd[1]), control->tabulate+1,
comm );
Complete_Cubic_Spline( &h[1], &fele[1], v0_ele, vlast_ele,
&(LR[i][j].ele[1]), control->tabulate+1,
comm );
Natural_Cubic_Spline( &h[1], &fCEclmb[1],
&(LR[i][j].CEclmb[1]), control->tabulate+1,
comm );
} else{
LR[i][j].n = 0;
}
}
}
}
free(h);
free(fh);
free(fvdw);
free(fCEvd);
free(fele);
free(fCEclmb);
return 1;
}
void Deallocate_Lookup_Tables( reax_system *system )
{
int i, j;
int ntypes;
ntypes = system->reax_param.num_atom_types;
for( i = 0; i < ntypes; ++i ) {
for( j = i; j < ntypes; ++j )
if( LR[i][j].n ) {
sfree( LR[i][j].y, "LR[i,j].y" );
sfree( LR[i][j].H, "LR[i,j].H" );
sfree( LR[i][j].vdW, "LR[i,j].vdW" );
sfree( LR[i][j].CEvd, "LR[i,j].CEvd" );
sfree( LR[i][j].ele, "LR[i,j].ele" );
sfree( LR[i][j].CEclmb, "LR[i,j].CEclmb" );
}
sfree( LR[i], "LR[i]" );
}
sfree( LR, "LR" );
}
diff --git a/src/USER-REAXC/reaxc_multi_body.cpp b/src/USER-REAXC/reaxc_multi_body.cpp
index 70e78063e..220fcb072 100644
--- a/src/USER-REAXC/reaxc_multi_body.cpp
+++ b/src/USER-REAXC/reaxc_multi_body.cpp
@@ -1,319 +1,243 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_multi_body.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_vector.h"
-
void Atom_Energy( reax_system *system, control_params *control,
simulation_data *data, storage *workspace, reax_list **lists,
output_controls *out_control )
{
int i, j, pj, type_i, type_j;
real Delta_lpcorr, dfvl;
real e_lp, expvd2, inv_expvd2, dElp, CElp, DlpVi;
real e_lph, Di, vov3, deahu2dbo, deahu2dsbo;
real e_ov, CEover1, CEover2, CEover3, CEover4;
real exp_ovun1, exp_ovun2, sum_ovun1, sum_ovun2;
real exp_ovun2n, exp_ovun6, exp_ovun8;
real inv_exp_ovun1, inv_exp_ovun2, inv_exp_ovun2n, inv_exp_ovun8;
real e_un, CEunder1, CEunder2, CEunder3, CEunder4;
- real p_lp2, p_lp3;
+ real p_lp1, p_lp2, p_lp3;
real p_ovun2, p_ovun3, p_ovun4, p_ovun5, p_ovun6, p_ovun7, p_ovun8;
- real eng_tmp;
+ real eng_tmp, f_tmp;
+ int numbonds;
- single_body_parameters *sbp_i;
+ single_body_parameters *sbp_i, *sbp_j;
two_body_parameters *twbp;
bond_data *pbond;
bond_order_data *bo_ij;
reax_list *bonds = (*lists) + BONDS;
/* Initialize parameters */
+ p_lp1 = system->reax_param.gp.l[15];
p_lp3 = system->reax_param.gp.l[5];
p_ovun3 = system->reax_param.gp.l[32];
p_ovun4 = system->reax_param.gp.l[31];
p_ovun6 = system->reax_param.gp.l[6];
p_ovun7 = system->reax_param.gp.l[8];
p_ovun8 = system->reax_param.gp.l[9];
for( i = 0; i < system->n; ++i ) {
/* set the parameter pointer */
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
sbp_i = &(system->reax_param.sbp[ type_i ]);
/* lone-pair Energy */
p_lp2 = sbp_i->p_lp2;
expvd2 = exp( -75 * workspace->Delta_lp[i] );
inv_expvd2 = 1. / (1. + expvd2 );
+ numbonds = 0;
+ e_lp = 0.0;
+ for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj )
+ numbonds ++;
+
/* calculate the energy */
- data->my_en.e_lp += e_lp =
- p_lp2 * workspace->Delta_lp[i] * inv_expvd2;
+ if (numbonds > 0)
+ data->my_en.e_lp += e_lp =
+ p_lp2 * workspace->Delta_lp[i] * inv_expvd2;
dElp = p_lp2 * inv_expvd2 +
75 * p_lp2 * workspace->Delta_lp[i] * expvd2 * SQR(inv_expvd2);
CElp = dElp * workspace->dDelta_lp[i];
- workspace->CdDelta[i] += CElp; // lp - 1st term
+ if (numbonds > 0) workspace->CdDelta[i] += CElp; // lp - 1st term
/* tally into per-atom energy */
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(i,i,system->n,1,e_lp,0.0,0.0,0.0,0.0,0.0);
-#ifdef TEST_ENERGY
-// fprintf( out_control->elp, "%24.15e%24.15e%24.15e%24.15e\n",
-// p_lp2, workspace->Delta_lp_temp[i], expvd2, dElp );
-// fprintf( out_control->elp, "%6d%24.15e%24.15e%24.15e\n",
- fprintf( out_control->elp, "%6d%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id, workspace->nlp[i],
- e_lp, data->my_en.e_lp );
-#endif
-#ifdef TEST_FORCES
- Add_dDelta( system, lists, i, CElp, workspace->f_lp ); // lp - 1st term
-#endif
-
/* correction for C2 */
if( p_lp3 > 0.001 && !strcmp(system->reax_param.sbp[type_i].name, "C") )
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
j = bonds->select.bond_list[pj].nbr;
type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
if( !strcmp( system->reax_param.sbp[type_j].name, "C" ) ) {
twbp = &( system->reax_param.tbp[type_i][type_j]);
bo_ij = &( bonds->select.bond_list[pj].bo_data );
Di = workspace->Delta[i];
vov3 = bo_ij->BO - Di - 0.040*pow(Di, 4.);
if( vov3 > 3. ) {
data->my_en.e_lp += e_lph = p_lp3 * SQR(vov3-3.0);
deahu2dbo = 2.*p_lp3*(vov3 - 3.);
deahu2dsbo = 2.*p_lp3*(vov3 - 3.)*(-1. - 0.16*pow(Di, 3.));
bo_ij->Cdbo += deahu2dbo;
workspace->CdDelta[i] += deahu2dsbo;
/* tally into per-atom energy */
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(i,j,system->n,1,e_lph,0.0,0.0,0.0,0.0,0.0);
-#ifdef TEST_ENERGY
- fprintf(out_control->elp,"C2cor%6d%6d%12.6f%12.6f%12.6f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- e_lph, deahu2dbo, deahu2dsbo );
-#endif
-#ifdef TEST_FORCES
- Add_dBO(system, lists, i, pj, deahu2dbo, workspace->f_lp);
- Add_dDelta(system, lists, i, deahu2dsbo, workspace->f_lp);
-#endif
}
}
}
}
for( i = 0; i < system->n; ++i ) {
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
sbp_i = &(system->reax_param.sbp[ type_i ]);
/* over-coordination energy */
if( sbp_i->mass > 21.0 )
dfvl = 0.0;
else dfvl = 1.0; // only for 1st-row elements
p_ovun2 = sbp_i->p_ovun2;
sum_ovun1 = sum_ovun2 = 0;
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
j = bonds->select.bond_list[pj].nbr;
type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
bo_ij = &(bonds->select.bond_list[pj].bo_data);
+ sbp_j = &(system->reax_param.sbp[ type_j ]);
twbp = &(system->reax_param.tbp[ type_i ][ type_j ]);
sum_ovun1 += twbp->p_ovun1 * twbp->De_s * bo_ij->BO;
sum_ovun2 += (workspace->Delta[j] - dfvl*workspace->Delta_lp_temp[j])*
( bo_ij->BO_pi + bo_ij->BO_pi2 );
- /*fprintf( stdout, "%4d%4d%12.6f%12.6f%12.6f\n",
- i+1, j+1,
- dfvl * workspace->Delta_lp_temp[j],
- sbp_j->nlp_opt,
- workspace->nlp_temp[j] );*/
}
exp_ovun1 = p_ovun3 * exp( p_ovun4 * sum_ovun2 );
inv_exp_ovun1 = 1.0 / (1 + exp_ovun1);
Delta_lpcorr = workspace->Delta[i] -
(dfvl * workspace->Delta_lp_temp[i]) * inv_exp_ovun1;
exp_ovun2 = exp( p_ovun2 * Delta_lpcorr );
inv_exp_ovun2 = 1.0 / (1.0 + exp_ovun2);
DlpVi = 1.0 / (Delta_lpcorr + sbp_i->valency + 1e-8);
CEover1 = Delta_lpcorr * DlpVi * inv_exp_ovun2;
data->my_en.e_ov += e_ov = sum_ovun1 * CEover1;
CEover2 = sum_ovun1 * DlpVi * inv_exp_ovun2 *
(1.0 - Delta_lpcorr * ( DlpVi + p_ovun2 * exp_ovun2 * inv_exp_ovun2 ));
CEover3 = CEover2 * (1.0 - dfvl * workspace->dDelta_lp[i] * inv_exp_ovun1 );
CEover4 = CEover2 * (dfvl * workspace->Delta_lp_temp[i]) *
p_ovun4 * exp_ovun1 * SQR(inv_exp_ovun1);
/* under-coordination potential */
p_ovun2 = sbp_i->p_ovun2;
p_ovun5 = sbp_i->p_ovun5;
exp_ovun2n = 1.0 / exp_ovun2;
exp_ovun6 = exp( p_ovun6 * Delta_lpcorr );
exp_ovun8 = p_ovun7 * exp(p_ovun8 * sum_ovun2);
inv_exp_ovun2n = 1.0 / (1.0 + exp_ovun2n);
inv_exp_ovun8 = 1.0 / (1.0 + exp_ovun8);
- data->my_en.e_un += e_un =
- -p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
+ numbonds = 0;
+ e_un = 0.0;
+ for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj )
+ numbonds ++;
+
+ if (numbonds > 0)
+ data->my_en.e_un += e_un =
+ -p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
CEunder1 = inv_exp_ovun2n *
( p_ovun5 * p_ovun6 * exp_ovun6 * inv_exp_ovun8 +
p_ovun2 * e_un * exp_ovun2n );
CEunder2 = -e_un * p_ovun8 * exp_ovun8 * inv_exp_ovun8;
CEunder3 = CEunder1 * (1.0 - dfvl*workspace->dDelta_lp[i]*inv_exp_ovun1);
CEunder4 = CEunder1 * (dfvl*workspace->Delta_lp_temp[i]) *
p_ovun4 * exp_ovun1 * SQR(inv_exp_ovun1) + CEunder2;
/* tally into per-atom energy */
if( system->pair_ptr->evflag) {
- eng_tmp = e_ov + e_un;
+ eng_tmp = e_ov;
+ if (numbonds > 0) eng_tmp += e_un;
+ f_tmp = CEover3 + CEunder3;
system->pair_ptr->ev_tally(i,i,system->n,1,eng_tmp,0.0,0.0,0.0,0.0,0.0);
}
/* forces */
workspace->CdDelta[i] += CEover3; // OvCoor - 2nd term
- workspace->CdDelta[i] += CEunder3; // UnCoor - 1st term
-
-#ifdef TEST_FORCES
- Add_dDelta( system, lists, i, CEover3, workspace->f_ov ); // OvCoor 2nd
- Add_dDelta( system, lists, i, CEunder3, workspace->f_un ); // UnCoor 1st
-#endif
+ if (numbonds > 0) workspace->CdDelta[i] += CEunder3; // UnCoor - 1st term
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
pbond = &(bonds->select.bond_list[pj]);
j = pbond->nbr;
bo_ij = &(pbond->bo_data);
twbp = &(system->reax_param.tbp[ system->my_atoms[i].type ]
[system->my_atoms[pbond->nbr].type]);
bo_ij->Cdbo += CEover1 * twbp->p_ovun1 * twbp->De_s;// OvCoor-1st
workspace->CdDelta[j] += CEover4 * (1.0 - dfvl*workspace->dDelta_lp[j]) *
(bo_ij->BO_pi + bo_ij->BO_pi2); // OvCoor-3a
bo_ij->Cdbopi += CEover4 *
(workspace->Delta[j] - dfvl*workspace->Delta_lp_temp[j]); // OvCoor-3b
bo_ij->Cdbopi2 += CEover4 *
(workspace->Delta[j] - dfvl*workspace->Delta_lp_temp[j]); // OvCoor-3b
workspace->CdDelta[j] += CEunder4 * (1.0 - dfvl*workspace->dDelta_lp[j]) *
(bo_ij->BO_pi + bo_ij->BO_pi2); // UnCoor - 2a
bo_ij->Cdbopi += CEunder4 *
(workspace->Delta[j] - dfvl*workspace->Delta_lp_temp[j]); // UnCoor-2b
bo_ij->Cdbopi2 += CEunder4 *
(workspace->Delta[j] - dfvl*workspace->Delta_lp_temp[j]); // UnCoor-2b
-
-#ifdef TEST_ENERGY
-/* fprintf( out_control->eov, "%6d%12.6f\n",
- workspace->reverse_map[j],
- // CEover1 * twbp->p_ovun1 * twbp->De_s, CEover3,
- CEover4 * (1.0 - workspace->dDelta_lp[j]) *
- (bo_ij->BO_pi + bo_ij->BO_pi2)
-*/// /*CEover4 * (workspace->Delta[j]-workspace->Delta_lp[j])*/);
-// fprintf( out_control->eov, "%6d%12.6f\n",
-// fprintf( out_control->eov, "%6d%24.15e\n",
-// system->my_atoms[j].orig_id,
- // CEover1 * twbp->p_ovun1 * twbp->De_s, CEover3,
-// CEover4 * (1.0 - workspace->dDelta_lp[j]) *
-// (bo_ij->BO_pi + bo_ij->BO_pi2)
-// /*CEover4 * (workspace->Delta[j]-workspace->Delta_lp[j])*/);
-
- // CEunder4 * (1.0 - workspace->dDelta_lp[j]) *
- // (bo_ij->BO_pi + bo_ij->BO_pi2),
- // CEunder4 * (workspace->Delta[j] - workspace->Delta_lp[j]) );
-#endif
-
-#ifdef TEST_FORCES
- Add_dBO( system, lists, i, pj, CEover1 * twbp->p_ovun1 * twbp->De_s,
- workspace->f_ov ); // OvCoor - 1st term
-
- Add_dDelta( system, lists, j,
- CEover4 * (1.0 - dfvl*workspace->dDelta_lp[j]) *
- (bo_ij->BO_pi + bo_ij->BO_pi2),
- workspace->f_ov ); // OvCoor - 3a
-
- Add_dBOpinpi2( system, lists, i, pj,
- CEover4 * (workspace->Delta[j] -
- dfvl * workspace->Delta_lp_temp[j]),
- CEover4 * (workspace->Delta[j] -
- dfvl * workspace->Delta_lp_temp[j]),
- workspace->f_ov, workspace->f_ov ); // OvCoor - 3b
-
- Add_dDelta( system, lists, j,
- CEunder4 * (1.0 - dfvl*workspace->dDelta_lp[j]) *
- (bo_ij->BO_pi + bo_ij->BO_pi2),
- workspace->f_un ); // UnCoor - 2a
-
- Add_dBOpinpi2( system, lists, i, pj,
- CEunder4 * (workspace->Delta[j] -
- dfvl * workspace->Delta_lp_temp[j]),
- CEunder4 * (workspace->Delta[j] -
- dfvl * workspace->Delta_lp_temp[j]),
- workspace->f_un, workspace->f_un ); // UnCoor - 2b
-#endif
}
-#ifdef TEST_ENERGY
- //fprintf( out_control->elp, "%6d%24.15e%24.15e%24.15e\n",
- //fprintf( out_control->elp, "%6d%12.4f%12.4f%12.4f\n",
- // system->my_atoms[i].orig_id, workspace->nlp[i],
- // e_lp, data->my_en.e_lp );
-
- //fprintf( out_control->eov, "%6d%24.15e%24.15e\n",
- fprintf( out_control->eov, "%6d%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,
- e_ov, data->my_en.e_ov + data->my_en.e_un );
-
- //fprintf( out_control->eun, "%6d%24.15e%24.15e\n",
- fprintf( out_control->eun, "%6d%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,
- e_un, data->my_en.e_ov + data->my_en.e_un );
-#endif
}
}
diff --git a/src/USER-REAXC/reaxc_nonbonded.cpp b/src/USER-REAXC/reaxc_nonbonded.cpp
index e38c4e224..5cb9c9ee4 100644
--- a/src/USER-REAXC/reaxc_nonbonded.cpp
+++ b/src/USER-REAXC/reaxc_nonbonded.cpp
@@ -1,523 +1,432 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_types.h"
-#if defined(PURE_REAX)
-#include "nonbonded.h"
-#include "bond_orders.h"
-#include "list.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_nonbonded.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_vector.h"
-#endif
void vdW_Coulomb_Energy( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control )
{
int i, j, pj, natoms;
int start_i, end_i, flag;
rc_tagint orig_i, orig_j;
real p_vdW1, p_vdW1i;
real powr_vdW1, powgi_vdW1;
real tmp, r_ij, fn13, exp1, exp2;
real Tap, dTap, dfn13, CEvd, CEclmb, de_core;
real dr3gamij_1, dr3gamij_3;
real e_ele, e_vdW, e_core, SMALL = 0.0001;
real e_lg, de_lg, r_ij5, r_ij6, re6;
rvec temp, ext_press;
two_body_parameters *twbp;
far_neighbor_data *nbr_pj;
reax_list *far_nbrs;
- // rtensor temp_rtensor, total_rtensor;
// Tallying variables:
real pe_vdw, f_tmp, delij[3];
natoms = system->n;
far_nbrs = (*lists) + FAR_NBRS;
p_vdW1 = system->reax_param.gp.l[28];
p_vdW1i = 1.0 / p_vdW1;
e_core = 0;
e_vdW = 0;
e_lg = de_lg = 0.0;
for( i = 0; i < natoms; ++i ) {
+ if (system->my_atoms[i].type < 0) continue;
start_i = Start_Index(i, far_nbrs);
end_i = End_Index(i, far_nbrs);
orig_i = system->my_atoms[i].orig_id;
- //fprintf( stderr, "i:%d, start_i: %d, end_i: %d\n", i, start_i, end_i );
for( pj = start_i; pj < end_i; ++pj ) {
nbr_pj = &(far_nbrs->select.far_nbr_list[pj]);
j = nbr_pj->nbr;
+ if (system->my_atoms[j].type < 0) continue;
orig_j = system->my_atoms[j].orig_id;
-#if defined(PURE_REAX)
- if( nbr_pj->d <= control->nonb_cut && (j < natoms || orig_i < orig_j) ) {
-#elif defined(LAMMPS_REAX)
flag = 0;
if(nbr_pj->d <= control->nonb_cut) {
if (j < natoms) flag = 1;
else if (orig_i < orig_j) flag = 1;
else if (orig_i == orig_j) {
if (nbr_pj->dvec[2] > SMALL) flag = 1;
else if (fabs(nbr_pj->dvec[2]) < SMALL) {
if (nbr_pj->dvec[1] > SMALL) flag = 1;
else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL)
flag = 1;
}
}
}
if (flag) {
-#endif
r_ij = nbr_pj->d;
twbp = &(system->reax_param.tbp[ system->my_atoms[i].type ]
[ system->my_atoms[j].type ]);
- /* Calculate Taper and its derivative */
- // Tap = nbr_pj->Tap; -- precomputed during compte_H
Tap = workspace->Tap[7] * r_ij + workspace->Tap[6];
Tap = Tap * r_ij + workspace->Tap[5];
Tap = Tap * r_ij + workspace->Tap[4];
Tap = Tap * r_ij + workspace->Tap[3];
Tap = Tap * r_ij + workspace->Tap[2];
Tap = Tap * r_ij + workspace->Tap[1];
Tap = Tap * r_ij + workspace->Tap[0];
dTap = 7*workspace->Tap[7] * r_ij + 6*workspace->Tap[6];
dTap = dTap * r_ij + 5*workspace->Tap[5];
dTap = dTap * r_ij + 4*workspace->Tap[4];
dTap = dTap * r_ij + 3*workspace->Tap[3];
dTap = dTap * r_ij + 2*workspace->Tap[2];
dTap += workspace->Tap[1]/r_ij;
/*vdWaals Calculations*/
if(system->reax_param.gp.vdw_type==1 || system->reax_param.gp.vdw_type==3)
{ // shielding
powr_vdW1 = pow(r_ij, p_vdW1);
powgi_vdW1 = pow( 1.0 / twbp->gamma_w, p_vdW1);
fn13 = pow( powr_vdW1 + powgi_vdW1, p_vdW1i );
exp1 = exp( twbp->alpha * (1.0 - fn13 / twbp->r_vdW) );
exp2 = exp( 0.5 * twbp->alpha * (1.0 - fn13 / twbp->r_vdW) );
e_vdW = twbp->D * (exp1 - 2.0 * exp2);
data->my_en.e_vdW += Tap * e_vdW;
dfn13 = pow( powr_vdW1 + powgi_vdW1, p_vdW1i - 1.0) *
pow(r_ij, p_vdW1 - 2.0);
CEvd = dTap * e_vdW -
Tap * twbp->D * (twbp->alpha / twbp->r_vdW) * (exp1 - exp2) * dfn13;
}
else{ // no shielding
exp1 = exp( twbp->alpha * (1.0 - r_ij / twbp->r_vdW) );
exp2 = exp( 0.5 * twbp->alpha * (1.0 - r_ij / twbp->r_vdW) );
e_vdW = twbp->D * (exp1 - 2.0 * exp2);
data->my_en.e_vdW += Tap * e_vdW;
CEvd = dTap * e_vdW -
Tap * twbp->D * (twbp->alpha / twbp->r_vdW) * (exp1 - exp2) / r_ij;
}
if(system->reax_param.gp.vdw_type==2 || system->reax_param.gp.vdw_type==3)
{ // innner wall
e_core = twbp->ecore * exp(twbp->acore * (1.0-(r_ij/twbp->rcore)));
data->my_en.e_vdW += Tap * e_core;
de_core = -(twbp->acore/twbp->rcore) * e_core;
CEvd += dTap * e_core + Tap * de_core / r_ij;
// lg correction, only if lgvdw is yes
if (control->lgflag) {
r_ij5 = pow( r_ij, 5.0 );
r_ij6 = pow( r_ij, 6.0 );
re6 = pow( twbp->lgre, 6.0 );
e_lg = -(twbp->lgcij/( r_ij6 + re6 ));
data->my_en.e_vdW += Tap * e_lg;
de_lg = -6.0 * e_lg * r_ij5 / ( r_ij6 + re6 ) ;
CEvd += dTap * e_lg + Tap * de_lg / r_ij;
}
}
/*Coulomb Calculations*/
dr3gamij_1 = ( r_ij * r_ij * r_ij + twbp->gamma );
dr3gamij_3 = pow( dr3gamij_1 , 0.33333333333333 );
tmp = Tap / dr3gamij_3;
data->my_en.e_ele += e_ele =
C_ele * system->my_atoms[i].q * system->my_atoms[j].q * tmp;
CEclmb = C_ele * system->my_atoms[i].q * system->my_atoms[j].q *
( dTap - Tap * r_ij / dr3gamij_1 ) / dr3gamij_3;
/* tally into per-atom energy */
if( system->pair_ptr->evflag || system->pair_ptr->vflag_atom) {
pe_vdw = Tap * (e_vdW + e_core + e_lg);
rvec_ScaledSum( delij, 1., system->my_atoms[i].x,
-1., system->my_atoms[j].x );
f_tmp = -(CEvd + CEclmb);
system->pair_ptr->ev_tally(i,j,natoms,1,pe_vdw,e_ele,
f_tmp,delij[0],delij[1],delij[2]);
}
- /* fprintf(stderr, "%5d %5d %10.6f %10.6f\n",
- MIN( system->my_atoms[i].orig_id, system->my_atoms[j].orig_id ),
- MAX( system->my_atoms[i].orig_id, system->my_atoms[j].orig_id ),
- CEvd, CEclmb ); */
-
if( control->virial == 0 ) {
rvec_ScaledAdd( workspace->f[i], -(CEvd + CEclmb), nbr_pj->dvec );
rvec_ScaledAdd( workspace->f[j], +(CEvd + CEclmb), nbr_pj->dvec );
}
else { /* NPT, iNPT or sNPT */
- /* for pressure coupling, terms not related to bond order
- derivatives are added directly into pressure vector/tensor */
rvec_Scale( temp, CEvd + CEclmb, nbr_pj->dvec );
rvec_ScaledAdd( workspace->f[i], -1., temp );
rvec_Add( workspace->f[j], temp );
rvec_iMultiply( ext_press, nbr_pj->rel_box, temp );
rvec_Add( data->my_ext_press, ext_press );
-
- /* fprintf( stderr, "nonbonded(%d,%d): rel_box (%f %f %f)
- force(%f %f %f) ext_press (%12.6f %12.6f %12.6f)\n",
- i, j, nbr_pj->rel_box[0], nbr_pj->rel_box[1], nbr_pj->rel_box[2],
- temp[0], temp[1], temp[2],
- data->ext_press[0], data->ext_press[1], data->ext_press[2] ); */
}
-
-#ifdef TEST_ENERGY
- // fprintf( out_control->evdw,
- // "%12.9f%12.9f%12.9f%12.9f%12.9f%12.9f%12.9f%12.9f\n",
- // workspace->Tap[7],workspace->Tap[6],workspace->Tap[5],
- // workspace->Tap[4],workspace->Tap[3],workspace->Tap[2],
- // workspace->Tap[1], Tap );
- //fprintf( out_control->evdw, "%6d%6d%24.15e%24.15e%24.15e\n",
- fprintf( out_control->evdw, "%6d%6d%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- r_ij, e_vdW, data->my_en.e_vdW );
- //fprintf(out_control->ecou,"%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- fprintf( out_control->ecou, "%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- r_ij, system->my_atoms[i].q, system->my_atoms[j].q,
- e_ele, data->my_en.e_ele );
-#endif
-#ifdef TEST_FORCES
- rvec_ScaledAdd( workspace->f_vdw[i], -CEvd, nbr_pj->dvec );
- rvec_ScaledAdd( workspace->f_vdw[j], +CEvd, nbr_pj->dvec );
- rvec_ScaledAdd( workspace->f_ele[i], -CEclmb, nbr_pj->dvec );
- rvec_ScaledAdd( workspace->f_ele[j], +CEclmb, nbr_pj->dvec );
-#endif
}
}
}
-#if defined(DEBUG)
- fprintf( stderr, "nonbonded: ext_press (%12.6f %12.6f %12.6f)\n",
- data->ext_press[0], data->ext_press[1], data->ext_press[2] );
- MPI_Barrier( MPI_COMM_WORLD );
-#endif
-
Compute_Polarization_Energy( system, data );
}
void Tabulated_vdW_Coulomb_Energy( reax_system *system,control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists,
output_controls *out_control )
{
int i, j, pj, r, natoms;
int type_i, type_j, tmin, tmax;
int start_i, end_i, flag;
rc_tagint orig_i, orig_j;
real r_ij, base, dif;
real e_vdW, e_ele;
real CEvd, CEclmb, SMALL = 0.0001;
real f_tmp, delij[3];
rvec temp, ext_press;
far_neighbor_data *nbr_pj;
reax_list *far_nbrs;
LR_lookup_table *t;
natoms = system->n;
far_nbrs = (*lists) + FAR_NBRS;
e_ele = e_vdW = 0;
for( i = 0; i < natoms; ++i ) {
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
start_i = Start_Index(i,far_nbrs);
end_i = End_Index(i,far_nbrs);
orig_i = system->my_atoms[i].orig_id;
for( pj = start_i; pj < end_i; ++pj ) {
nbr_pj = &(far_nbrs->select.far_nbr_list[pj]);
j = nbr_pj->nbr;
+ type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
orig_j = system->my_atoms[j].orig_id;
-#if defined(PURE_REAX)
- if( nbr_pj->d <= control->nonb_cut && (j < natoms || orig_i < orig_j) ) {
-#elif defined(LAMMPS_REAX)
flag = 0;
if(nbr_pj->d <= control->nonb_cut) {
if (j < natoms) flag = 1;
else if (orig_i < orig_j) flag = 1;
else if (orig_i == orig_j) {
if (nbr_pj->dvec[2] > SMALL) flag = 1;
else if (fabs(nbr_pj->dvec[2]) < SMALL) {
if (nbr_pj->dvec[1] > SMALL) flag = 1;
else if (fabs(nbr_pj->dvec[1]) < SMALL && nbr_pj->dvec[0] > SMALL)
flag = 1;
}
}
}
if (flag) {
-#endif
- j = nbr_pj->nbr;
- type_j = system->my_atoms[j].type;
r_ij = nbr_pj->d;
tmin = MIN( type_i, type_j );
tmax = MAX( type_i, type_j );
t = &( LR[tmin][tmax] );
- //t = &( LR[type_i][type_j] );
/* Cubic Spline Interpolation */
r = (int)(r_ij * t->inv_dx);
if( r == 0 ) ++r;
base = (real)(r+1) * t->dx;
dif = r_ij - base;
- //fprintf(stderr, "r: %f, i: %d, base: %f, dif: %f\n", r, i, base, dif);
e_vdW = ((t->vdW[r].d*dif + t->vdW[r].c)*dif + t->vdW[r].b)*dif +
t->vdW[r].a;
e_ele = ((t->ele[r].d*dif + t->ele[r].c)*dif + t->ele[r].b)*dif +
t->ele[r].a;
e_ele *= system->my_atoms[i].q * system->my_atoms[j].q;
data->my_en.e_vdW += e_vdW;
data->my_en.e_ele += e_ele;
CEvd = ((t->CEvd[r].d*dif + t->CEvd[r].c)*dif + t->CEvd[r].b)*dif +
t->CEvd[r].a;
CEclmb = ((t->CEclmb[r].d*dif+t->CEclmb[r].c)*dif+t->CEclmb[r].b)*dif +
t->CEclmb[r].a;
CEclmb *= system->my_atoms[i].q * system->my_atoms[j].q;
-
/* tally into per-atom energy */
if( system->pair_ptr->evflag || system->pair_ptr->vflag_atom) {
rvec_ScaledSum( delij, 1., system->my_atoms[i].x,
-1., system->my_atoms[j].x );
f_tmp = -(CEvd + CEclmb);
system->pair_ptr->ev_tally(i,j,natoms,1,e_vdW,e_ele,
f_tmp,delij[0],delij[1],delij[2]);
}
if( control->virial == 0 ) {
rvec_ScaledAdd( workspace->f[i], -(CEvd + CEclmb), nbr_pj->dvec );
rvec_ScaledAdd( workspace->f[j], +(CEvd + CEclmb), nbr_pj->dvec );
}
else { // NPT, iNPT or sNPT
- /* for pressure coupling, terms not related to bond order derivatives
- are added directly into pressure vector/tensor */
rvec_Scale( temp, CEvd + CEclmb, nbr_pj->dvec );
rvec_ScaledAdd( workspace->f[i], -1., temp );
rvec_Add( workspace->f[j], temp );
rvec_iMultiply( ext_press, nbr_pj->rel_box, temp );
rvec_Add( data->my_ext_press, ext_press );
}
-
-#ifdef TEST_ENERGY
- //fprintf( out_control->evdw, "%6d%6d%24.15e%24.15e%24.15e\n",
- fprintf( out_control->evdw, "%6d%6d%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- r_ij, e_vdW, data->my_en.e_vdW );
- //fprintf(out_control->ecou,"%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- fprintf( out_control->ecou, "%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
- r_ij, system->my_atoms[i].q, system->my_atoms[j].q,
- e_ele, data->my_en.e_ele );
-#endif
-#ifdef TEST_FORCES
- rvec_ScaledAdd( workspace->f_vdw[i], -CEvd, nbr_pj->dvec );
- rvec_ScaledAdd( workspace->f_vdw[j], +CEvd, nbr_pj->dvec );
- rvec_ScaledAdd( workspace->f_ele[i], -CEclmb, nbr_pj->dvec );
- rvec_ScaledAdd( workspace->f_ele[j], +CEclmb, nbr_pj->dvec );
-#endif
}
}
}
Compute_Polarization_Energy( system, data );
}
void Compute_Polarization_Energy( reax_system *system, simulation_data *data )
{
int i, type_i;
real q, en_tmp;
data->my_en.e_pol = 0.0;
for( i = 0; i < system->n; i++ ) {
- q = system->my_atoms[i].q;
type_i = system->my_atoms[i].type;
+ if (type_i < 0) continue;
+ q = system->my_atoms[i].q;
en_tmp = KCALpMOL_to_EV * (system->reax_param.sbp[type_i].chi * q +
(system->reax_param.sbp[type_i].eta / 2.) * SQR(q));
data->my_en.e_pol += en_tmp;
/* tally into per-atom energy */
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(i,i,system->n,1,0.0,en_tmp,0.0,0.0,0.0,0.0);
}
}
void LR_vdW_Coulomb( reax_system *system, storage *workspace,
control_params *control, int i, int j, real r_ij, LR_data *lr )
{
real p_vdW1 = system->reax_param.gp.l[28];
real p_vdW1i = 1.0 / p_vdW1;
real powr_vdW1, powgi_vdW1;
real tmp, fn13, exp1, exp2;
real Tap, dTap, dfn13;
real dr3gamij_1, dr3gamij_3;
real e_core, de_core;
real e_lg, de_lg, r_ij5, r_ij6, re6;
two_body_parameters *twbp;
twbp = &(system->reax_param.tbp[i][j]);
e_core = 0;
de_core = 0;
e_lg = de_lg = 0.0;
/* calculate taper and its derivative */
Tap = workspace->Tap[7] * r_ij + workspace->Tap[6];
Tap = Tap * r_ij + workspace->Tap[5];
Tap = Tap * r_ij + workspace->Tap[4];
Tap = Tap * r_ij + workspace->Tap[3];
Tap = Tap * r_ij + workspace->Tap[2];
Tap = Tap * r_ij + workspace->Tap[1];
Tap = Tap * r_ij + workspace->Tap[0];
dTap = 7*workspace->Tap[7] * r_ij + 6*workspace->Tap[6];
dTap = dTap * r_ij + 5*workspace->Tap[5];
dTap = dTap * r_ij + 4*workspace->Tap[4];
dTap = dTap * r_ij + 3*workspace->Tap[3];
dTap = dTap * r_ij + 2*workspace->Tap[2];
dTap += workspace->Tap[1]/r_ij;
/*vdWaals Calculations*/
if(system->reax_param.gp.vdw_type==1 || system->reax_param.gp.vdw_type==3)
{ // shielding
powr_vdW1 = pow(r_ij, p_vdW1);
powgi_vdW1 = pow( 1.0 / twbp->gamma_w, p_vdW1);
fn13 = pow( powr_vdW1 + powgi_vdW1, p_vdW1i );
exp1 = exp( twbp->alpha * (1.0 - fn13 / twbp->r_vdW) );
exp2 = exp( 0.5 * twbp->alpha * (1.0 - fn13 / twbp->r_vdW) );
lr->e_vdW = Tap * twbp->D * (exp1 - 2.0 * exp2);
dfn13 = pow( powr_vdW1 + powgi_vdW1, p_vdW1i-1.0) * pow(r_ij, p_vdW1-2.0);
lr->CEvd = dTap * twbp->D * (exp1 - 2.0 * exp2) -
Tap * twbp->D * (twbp->alpha / twbp->r_vdW) * (exp1 - exp2) * dfn13;
}
else{ // no shielding
exp1 = exp( twbp->alpha * (1.0 - r_ij / twbp->r_vdW) );
exp2 = exp( 0.5 * twbp->alpha * (1.0 - r_ij / twbp->r_vdW) );
lr->e_vdW = Tap * twbp->D * (exp1 - 2.0 * exp2);
lr->CEvd = dTap * twbp->D * (exp1 - 2.0 * exp2) -
Tap * twbp->D * (twbp->alpha / twbp->r_vdW) * (exp1 - exp2) / r_ij;
}
if(system->reax_param.gp.vdw_type==2 || system->reax_param.gp.vdw_type==3)
{ // innner wall
e_core = twbp->ecore * exp(twbp->acore * (1.0-(r_ij/twbp->rcore)));
lr->e_vdW += Tap * e_core;
de_core = -(twbp->acore/twbp->rcore) * e_core;
lr->CEvd += dTap * e_core + Tap * de_core / r_ij;
// lg correction, only if lgvdw is yes
if (control->lgflag) {
r_ij5 = pow( r_ij, 5.0 );
r_ij6 = pow( r_ij, 6.0 );
re6 = pow( twbp->lgre, 6.0 );
e_lg = -(twbp->lgcij/( r_ij6 + re6 ));
lr->e_vdW += Tap * e_lg;
de_lg = -6.0 * e_lg * r_ij5 / ( r_ij6 + re6 ) ;
lr->CEvd += dTap * e_lg + Tap * de_lg/r_ij;
}
}
/* Coulomb calculations */
dr3gamij_1 = ( r_ij * r_ij * r_ij + twbp->gamma );
dr3gamij_3 = pow( dr3gamij_1 , 0.33333333333333 );
tmp = Tap / dr3gamij_3;
lr->H = EV_to_KCALpMOL * tmp;
lr->e_ele = C_ele * tmp;
- // fprintf( stderr,
- // "i:%d(%d), j:%d(%d), gamma:%f, Tap:%f, dr3gamij_3:%f, qi: %f, qj: %f\n",
- // i, system->my_atoms[i].type, j, system->my_atoms[j].type,
- // twbp->gamma, Tap, dr3gamij_3,
- // system->my_atoms[i].q, system->my_atoms[j].q );
lr->CEclmb = C_ele * ( dTap - Tap * r_ij / dr3gamij_1 ) / dr3gamij_3;
- // fprintf( stdout, "%d %d\t%g\t%g %g\t%g %g\t%g %g\n",
- // i+1, j+1, r_ij, e_vdW, CEvd * r_ij,
- // system->my_atoms[i].q, system->my_atoms[j].q, e_ele, CEclmb * r_ij );
-
- // fprintf(stderr,"LR_Lookup: %3d %3d %5.3f-%8.5f %8.5f %8.5f %8.5f %8.5f\n",
- // i, j, r_ij, lr->H, lr->e_vdW, lr->CEvd, lr->e_ele, lr->CEclmb ); */
}
diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp
index 31348ae30..7c3ba779a 100644
--- a/src/USER-REAXC/reaxc_reset_tools.cpp
+++ b/src/USER-REAXC/reaxc_reset_tools.cpp
@@ -1,251 +1,215 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_reset_tools.h"
#include "reaxc_list.h"
#include "reaxc_tool_box.h"
#include "reaxc_vector.h"
-
void Reset_Atoms( reax_system* system, control_params *control )
{
int i;
reax_atom *atom;
system->numH = 0;
if( control->hbond_cut > 0 )
for( i = 0; i < system->n; ++i ) {
atom = &(system->my_atoms[i]);
+ if (atom->type < 0) continue;
if( system->reax_param.sbp[ atom->type ].p_hbond == 1 )
atom->Hindex = system->numH++;
else atom->Hindex = -1;
}
}
void Reset_Energies( energy_data *en )
{
en->e_bond = 0;
en->e_ov = 0;
en->e_un = 0;
en->e_lp = 0;
en->e_ang = 0;
en->e_pen = 0;
en->e_coa = 0;
en->e_hb = 0;
en->e_tor = 0;
en->e_con = 0;
en->e_vdW = 0;
en->e_ele = 0;
en->e_pol = 0;
en->e_pot = 0;
en->e_kin = 0;
en->e_tot = 0;
}
void Reset_Temperatures( simulation_data *data )
{
data->therm.T = 0;
}
void Reset_Pressures( simulation_data *data )
{
data->flex_bar.P_scalar = 0;
rtensor_MakeZero( data->flex_bar.P );
data->iso_bar.P = 0;
rvec_MakeZero( data->int_press );
rvec_MakeZero( data->my_ext_press );
rvec_MakeZero( data->ext_press );
}
void Reset_Simulation_Data( simulation_data* data, int virial )
{
Reset_Energies( &data->my_en );
Reset_Energies( &data->sys_en );
Reset_Temperatures( data );
- //if( virial )
Reset_Pressures( data );
}
void Reset_Timing( reax_timing *rt )
{
rt->total = Get_Time();
rt->comm = 0;
rt->nbrs = 0;
rt->init_forces = 0;
rt->bonded = 0;
rt->nonb = 0;
rt->qEq = 0;
rt->s_matvecs = 0;
rt->t_matvecs = 0;
}
-
-#ifdef TEST_FORCES
-void Reset_Test_Forces( reax_system *system, storage *workspace )
-{
- memset( workspace->f_ele, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_vdw, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_bo, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_be, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_lp, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_ov, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_un, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_ang, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_coa, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_pen, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_hb, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_tor, 0, system->total_cap * sizeof(rvec) );
- memset( workspace->f_con, 0, system->total_cap * sizeof(rvec) );
-}
-#endif
-
void Reset_Workspace( reax_system *system, storage *workspace )
{
memset( workspace->total_bond_order, 0, system->total_cap * sizeof( real ) );
memset( workspace->dDeltap_self, 0, system->total_cap * sizeof( rvec ) );
memset( workspace->CdDelta, 0, system->total_cap * sizeof( real ) );
memset( workspace->f, 0, system->total_cap * sizeof( rvec ) );
-#ifdef TEST_FORCES
- memset( workspace->dDelta, 0, sizeof(rvec) * system->total_cap );
- Reset_Test_Forces( system, workspace );
-#endif
}
void Reset_Grid( grid *g )
{
int i, j, k;
for( i = 0; i < g->ncells[0]; i++ )
for( j = 0; j < g->ncells[1]; j++ )
for( k = 0; k < g->ncells[2]; k++ ) {
g->cells[i][j][k].top = 0;
g->cells[i][j][k].str = 0;
g->cells[i][j][k].end = 0;
}
}
void Reset_Out_Buffers( mpi_out_data *out_buf, int n )
{
int i;
for( i = 0; i < n; ++i )
out_buf[i].cnt = 0;
}
void Reset_Neighbor_Lists( reax_system *system, control_params *control,
storage *workspace, reax_list **lists,
MPI_Comm comm )
{
int i, total_bonds, Hindex, total_hbonds;
reax_list *bonds, *hbonds;
/* bonds list */
if( system->N > 0 ){
bonds = (*lists) + BONDS;
total_bonds = 0;
/* reset start-end indexes */
for( i = 0; i < system->N; ++i ) {
Set_Start_Index( i, total_bonds, bonds );
Set_End_Index( i, total_bonds, bonds );
total_bonds += system->my_atoms[i].num_bonds;
}
/* is reallocation needed? */
if( total_bonds >= bonds->num_intrs * DANGER_ZONE ) {
workspace->realloc.bonds = 1;
if( total_bonds >= bonds->num_intrs ) {
fprintf(stderr,
"p%d: not enough space for bonds! total=%d allocated=%d\n",
system->my_rank, total_bonds, bonds->num_intrs );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
}
}
- // fprintf( stderr, "p%d: n:%d num_intrs:%d num_H:%d\n",
- // system->my_rank, hbonds->n, hbonds->num_intrs, workspace->num_H );
- // MPI_Barrier( comm );
- /* hbonds list */
if( control->hbond_cut > 0 && system->numH > 0 ) {
hbonds = (*lists) + HBONDS;
total_hbonds = 0;
/* reset start-end indexes */
for( i = 0; i < system->n; ++i ) {
Hindex = system->my_atoms[i].Hindex;
if( Hindex > -1 ) {
Set_Start_Index( Hindex, total_hbonds, hbonds );
Set_End_Index( Hindex, total_hbonds, hbonds );
total_hbonds += system->my_atoms[i].num_hbonds;
}
}
/* is reallocation needed? */
if( total_hbonds >= hbonds->num_intrs * 0.90/*DANGER_ZONE*/ ) {
workspace->realloc.hbonds = 1;
if( total_hbonds >= hbonds->num_intrs ) {
fprintf(stderr,
"p%d: not enough space for hbonds! total=%d allocated=%d\n",
system->my_rank, total_hbonds, hbonds->num_intrs );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
}
}
- // fprintf( stderr, "p%d: cleared hbonds\n", system->my_rank );
- // MPI_Barrier( comm );
}
void Reset( reax_system *system, control_params *control, simulation_data *data,
storage *workspace, reax_list **lists, MPI_Comm comm )
{
Reset_Atoms( system, control );
Reset_Simulation_Data( data, control->virial );
Reset_Workspace( system, workspace );
Reset_Neighbor_Lists( system, control, workspace, lists, comm );
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d @ step%d: reset done\n", system->my_rank, data->step );
- MPI_Barrier( comm );
-#endif
-
}
diff --git a/src/USER-REAXC/reaxc_system_props.cpp b/src/USER-REAXC/reaxc_system_props.cpp
index 0410b625a..f9abcc770 100644
--- a/src/USER-REAXC/reaxc_system_props.cpp
+++ b/src/USER-REAXC/reaxc_system_props.cpp
@@ -1,416 +1,303 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "system_props.h"
-#include "tool_box.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_system_props.h"
#include "reaxc_tool_box.h"
#include "reaxc_vector.h"
-#endif
-
void Temperature_Control( control_params *control, simulation_data *data )
{
real tmp;
if( control->T_mode == 1 ) {// step-wise temperature control
if((data->step-data->prev_steps) % ((int)(control->T_freq/control->dt))==0){
if( fabs( control->T - control->T_final ) >= fabs( control->T_rate ) )
control->T += control->T_rate;
else control->T = control->T_final;
}
}
else if( control->T_mode == 2 ) { // constant slope control
tmp = control->T_rate * control->dt / control->T_freq;
if( fabs( control->T - control->T_final ) >= fabs( tmp ) )
control->T += tmp;
}
}
void Compute_Kinetic_Energy( reax_system* system, simulation_data* data,
MPI_Comm comm )
{
int i;
rvec p;
real m;
data->my_en.e_kin = 0.0;
data->sys_en.e_kin = 0.0;
data->therm.T = 0;
for( i = 0; i < system->n; i++ ) {
m = system->reax_param.sbp[system->my_atoms[i].type].mass;
rvec_Scale( p, m, system->my_atoms[i].v );
data->my_en.e_kin += 0.5 * rvec_Dot( p, system->my_atoms[i].v );
}
MPI_Allreduce( &data->my_en.e_kin, &data->sys_en.e_kin,
1, MPI_DOUBLE, MPI_SUM, comm );
data->therm.T = (2. * data->sys_en.e_kin) / (data->N_f * K_B);
// avoid T being an absolute zero, might cause F.P.E!
if( fabs(data->therm.T) < ALMOST_ZERO )
data->therm.T = ALMOST_ZERO;
}
void Compute_System_Energy( reax_system *system, simulation_data *data,
MPI_Comm comm )
{
real my_en[15], sys_en[15];
my_en[0] = data->my_en.e_bond;
my_en[1] = data->my_en.e_ov;
my_en[2] = data->my_en.e_un;
my_en[3] = data->my_en.e_lp;
my_en[4] = data->my_en.e_ang;
my_en[5] = data->my_en.e_pen;
my_en[6] = data->my_en.e_coa;
my_en[7] = data->my_en.e_hb;
my_en[8] = data->my_en.e_tor;
my_en[9] = data->my_en.e_con;
my_en[10] = data->my_en.e_vdW;
my_en[11] = data->my_en.e_ele;
my_en[12] = data->my_en.e_pol;
my_en[13] = data->my_en.e_kin;
MPI_Reduce( my_en, sys_en, 14, MPI_DOUBLE, MPI_SUM, MASTER_NODE, comm );
data->my_en.e_pot = data->my_en.e_bond +
data->my_en.e_ov + data->my_en.e_un + data->my_en.e_lp +
data->my_en.e_ang + data->my_en.e_pen + data->my_en.e_coa +
data->my_en.e_hb +
data->my_en.e_tor + data->my_en.e_con +
data->my_en.e_vdW + data->my_en.e_ele + data->my_en.e_pol;
data->my_en.e_tot = data->my_en.e_pot + E_CONV * data->my_en.e_kin;
if( system->my_rank == MASTER_NODE ) {
data->sys_en.e_bond = sys_en[0];
data->sys_en.e_ov = sys_en[1];
data->sys_en.e_un = sys_en[2];
data->sys_en.e_lp = sys_en[3];
data->sys_en.e_ang = sys_en[4];
data->sys_en.e_pen = sys_en[5];
data->sys_en.e_coa = sys_en[6];
data->sys_en.e_hb = sys_en[7];
data->sys_en.e_tor = sys_en[8];
data->sys_en.e_con = sys_en[9];
data->sys_en.e_vdW = sys_en[10];
data->sys_en.e_ele = sys_en[11];
data->sys_en.e_pol = sys_en[12];
data->sys_en.e_kin = sys_en[13];
data->sys_en.e_pot = data->sys_en.e_bond +
data->sys_en.e_ov + data->sys_en.e_un + data->sys_en.e_lp +
data->sys_en.e_ang + data->sys_en.e_pen + data->sys_en.e_coa +
data->sys_en.e_hb +
data->sys_en.e_tor + data->sys_en.e_con +
data->sys_en.e_vdW + data->sys_en.e_ele + data->sys_en.e_pol;
data->sys_en.e_tot = data->sys_en.e_pot + E_CONV * data->sys_en.e_kin;
}
}
void Compute_Total_Mass( reax_system *system, simulation_data *data,
MPI_Comm comm )
{
int i;
real tmp;
tmp = 0;
for( i = 0; i < system->n; i++ )
tmp += system->reax_param.sbp[ system->my_atoms[i].type ].mass;
MPI_Allreduce( &tmp, &data->M, 1, MPI_DOUBLE, MPI_SUM, comm );
data->inv_M = 1. / data->M;
}
void Compute_Center_of_Mass( reax_system *system, simulation_data *data,
mpi_datatypes *mpi_data, MPI_Comm comm )
{
int i;
real m, det; //xx, xy, xz, yy, yz, zz;
real tmp_mat[6], tot_mat[6];
rvec my_xcm, my_vcm, my_amcm, my_avcm;
rvec tvec, diff;
rtensor mat, inv;
rvec_MakeZero( my_xcm ); // position of CoM
rvec_MakeZero( my_vcm ); // velocity of CoM
rvec_MakeZero( my_amcm ); // angular momentum of CoM
rvec_MakeZero( my_avcm ); // angular velocity of CoM
/* Compute the position, vel. and ang. momentum about the centre of mass */
for( i = 0; i < system->n; ++i ) {
m = system->reax_param.sbp[ system->my_atoms[i].type ].mass;
rvec_ScaledAdd( my_xcm, m, system->my_atoms[i].x );
rvec_ScaledAdd( my_vcm, m, system->my_atoms[i].v );
rvec_Cross( tvec, system->my_atoms[i].x, system->my_atoms[i].v );
rvec_ScaledAdd( my_amcm, m, tvec );
}
MPI_Allreduce( my_xcm, data->xcm, 3, MPI_DOUBLE, MPI_SUM, comm );
MPI_Allreduce( my_vcm, data->vcm, 3, MPI_DOUBLE, MPI_SUM, comm );
MPI_Allreduce( my_amcm, data->amcm, 3, MPI_DOUBLE, MPI_SUM, comm );
rvec_Scale( data->xcm, data->inv_M, data->xcm );
rvec_Scale( data->vcm, data->inv_M, data->vcm );
rvec_Cross( tvec, data->xcm, data->vcm );
rvec_ScaledAdd( data->amcm, -data->M, tvec );
data->etran_cm = 0.5 * data->M * rvec_Norm_Sqr( data->vcm );
/* Calculate and then invert the inertial tensor */
for( i = 0; i < 6; ++i )
tmp_mat[i] = 0;
//my_xx = my_xy = my_xz = my_yy = my_yz = my_zz = 0;
for( i = 0; i < system->n; ++i ){
m = system->reax_param.sbp[ system->my_atoms[i].type ].mass;
rvec_ScaledSum( diff, 1., system->my_atoms[i].x, -1., data->xcm );
tmp_mat[0]/*my_xx*/ += diff[0] * diff[0] * m;
tmp_mat[1]/*my_xy*/ += diff[0] * diff[1] * m;
tmp_mat[2]/*my_xz*/ += diff[0] * diff[2] * m;
tmp_mat[3]/*my_yy*/ += diff[1] * diff[1] * m;
tmp_mat[4]/*my_yz*/ += diff[1] * diff[2] * m;
tmp_mat[5]/*my_zz*/ += diff[2] * diff[2] * m;
}
MPI_Reduce( tmp_mat, tot_mat, 6, MPI_DOUBLE, MPI_SUM, MASTER_NODE, comm );
if( system->my_rank == MASTER_NODE ) {
mat[0][0] = tot_mat[3] + tot_mat[5]; // yy + zz;
mat[0][1] = mat[1][0] = -tot_mat[1]; // -xy;
mat[0][2] = mat[2][0] = -tot_mat[2]; // -xz;
mat[1][1] = tot_mat[0] + tot_mat[5]; // xx + zz;
mat[2][1] = mat[1][2] = -tot_mat[4]; // -yz;
mat[2][2] = tot_mat[0] + tot_mat[3]; // xx + yy;
/* invert the inertial tensor */
det = ( mat[0][0] * mat[1][1] * mat[2][2] +
mat[0][1] * mat[1][2] * mat[2][0] +
mat[0][2] * mat[1][0] * mat[2][1] ) -
( mat[0][0] * mat[1][2] * mat[2][1] +
mat[0][1] * mat[1][0] * mat[2][2] +
mat[0][2] * mat[1][1] * mat[2][0] );
inv[0][0] = mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1];
inv[0][1] = mat[0][2] * mat[2][1] - mat[0][1] * mat[2][2];
inv[0][2] = mat[0][1] * mat[1][2] - mat[0][2] * mat[1][1];
inv[1][0] = mat[1][2] * mat[2][0] - mat[1][0] * mat[2][2];
inv[1][1] = mat[0][0] * mat[2][2] - mat[0][2] * mat[2][0];
inv[1][2] = mat[0][2] * mat[1][0] - mat[0][0] * mat[1][2];
inv[2][0] = mat[1][0] * mat[2][1] - mat[2][0] * mat[1][1];
inv[2][1] = mat[2][0] * mat[0][1] - mat[0][0] * mat[2][1];
inv[2][2] = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1];
if( det > ALMOST_ZERO )
rtensor_Scale( inv, 1./det, inv );
else rtensor_MakeZero( inv );
/* Compute the angular velocity about the centre of mass */
rtensor_MatVec( data->avcm, inv, data->amcm );
}
MPI_Bcast( data->avcm, 3, MPI_DOUBLE, MASTER_NODE, comm );
/* Compute the rotational energy */
data->erot_cm = 0.5 * E_CONV * rvec_Dot( data->avcm, data->amcm );
-#if defined(DEBUG)
- fprintf( stderr, "xcm: %24.15e %24.15e %24.15e\n",
- data->xcm[0], data->xcm[1], data->xcm[2] );
- fprintf( stderr, "vcm: %24.15e %24.15e %24.15e\n",
- data->vcm[0], data->vcm[1], data->vcm[2] );
- fprintf( stderr, "amcm: %24.15e %24.15e %24.15e\n",
- data->amcm[0], data->amcm[1], data->amcm[2] );
- /* fprintf( stderr, "mat: %f %f %f\n %f %f %f\n %f %f %f\n",
- mat[0][0], mat[0][1], mat[0][2],
- mat[1][0], mat[1][1], mat[1][2],
- mat[2][0], mat[2][1], mat[2][2] );
- fprintf( stderr, "inv: %g %g %g\n %g %g %g\n %g %g %g\n",
- inv[0][0], inv[0][1], inv[0][2],
- inv[1][0], inv[1][1], inv[1][2],
- inv[2][0], inv[2][1], inv[2][2] ); */
- fprintf( stderr, "avcm: %24.15e %24.15e %24.15e\n",
- data->avcm[0], data->avcm[1], data->avcm[2] );
-#endif
}
-
-
-/* IMPORTANT: This function assumes that current kinetic energy
- * the system is already computed
- *
- * IMPORTANT: In Klein's paper, it is stated that a dU/dV term needs
- * to be added when there are long-range interactions or long-range
- * corrections to short-range interactions present.
- * We may want to add that for more accuracy.
- */
void Compute_Pressure(reax_system* system, control_params *control,
simulation_data* data, mpi_datatypes *mpi_data)
{
int i;
reax_atom *p_atom;
rvec tmp, tx, int_press;
simulation_box *big_box = &(system->big_box);
/* Calculate internal pressure */
rvec_MakeZero( int_press );
// 0: both int and ext, 1: ext only, 2: int only
if( control->press_mode == 0 || control->press_mode == 2 ) {
for( i = 0; i < system->n; ++i ) {
p_atom = &( system->my_atoms[i] );
/* transform x into unitbox coordinates */
Transform_to_UnitBox( p_atom->x, big_box, 1, tx );
/* this atom's contribution to internal pressure */
rvec_Multiply( tmp, p_atom->f, tx );
rvec_Add( int_press, tmp );
-#if defined(DEBUG)
- fprintf( stderr, "%8d%8.2f%8.2f%8.2f",
- i+1, p_atom->x[0], p_atom->x[1], p_atom->x[2] );
- fprintf( stderr, "%8.2f%8.2f%8.2f",
- p_atom->f[0], p_atom->f[1], p_atom->f[2] );
- fprintf( stderr, "%8.2f%8.2f%8.2f\n",
- int_press[0], int_press[1], int_press[2] );
-#endif
}
}
/* sum up internal and external pressure */
-#if defined(DEBUG)
- fprintf(stderr,"p%d:p_int(%10.5f %10.5f %10.5f)p_ext(%10.5f %10.5f %10.5f)\n",
- system->my_rank, int_press[0], int_press[1], int_press[2],
- data->my_ext_press[0], data->my_ext_press[1], data->my_ext_press[2] );
-#endif
MPI_Allreduce( int_press, data->int_press,
3, MPI_DOUBLE, MPI_SUM, mpi_data->comm_mesh3D );
MPI_Allreduce( data->my_ext_press, data->ext_press,
3, MPI_DOUBLE, MPI_SUM, mpi_data->comm_mesh3D );
-#if defined(DEBUG)
- fprintf( stderr, "p%d: %10.5f %10.5f %10.5f\n",
- system->my_rank,
- data->int_press[0], data->int_press[1], data->int_press[2] );
- fprintf( stderr, "p%d: %10.5f %10.5f %10.5f\n",
- system->my_rank,
- data->ext_press[0], data->ext_press[1], data->ext_press[2] );
-#endif
/* kinetic contribution */
data->kin_press = 2.*(E_CONV*data->sys_en.e_kin) / (3.*big_box->V*P_CONV);
/* Calculate total pressure in each direction */
data->tot_press[0] = data->kin_press -
(( data->int_press[0] + data->ext_press[0] ) /
( big_box->box_norms[1] * big_box->box_norms[2] * P_CONV ));
data->tot_press[1] = data->kin_press -
(( data->int_press[1] + data->ext_press[1] ) /
( big_box->box_norms[0] * big_box->box_norms[2] * P_CONV ));
data->tot_press[2] = data->kin_press -
(( data->int_press[2] + data->ext_press[2] ) /
( big_box->box_norms[0] * big_box->box_norms[1] * P_CONV ));
- /* Average pressure for the whole box */
data->iso_bar.P =
( data->tot_press[0] + data->tot_press[1] + data->tot_press[2] ) / 3.;
}
-
-
-
-/*
-void Compute_Pressure_Isotropic_Klein( reax_system* system,
- simulation_data* data )
-{
- int i;
- reax_atom *p_atom;
- rvec dx;
-
- // IMPORTANT: This function assumes that current kinetic energy and
- // the center of mass of the system is already computed before.
- data->iso_bar.P = 2.0 * data->my_en.e_kin;
-
- for( i = 0; i < system->N; ++i ) {
- p_atom = &( system->my_atoms[i] );
- rvec_ScaledSum(dx,1.0,p_atom->x,-1.0,data->xcm);
- data->iso_bar.P += ( -F_CONV * rvec_Dot(p_atom->f, dx) );
- }
-
- data->iso_bar.P /= (3.0 * system->my_box.V);
-
- // IMPORTANT: In Klein's paper, it is stated that a dU/dV term needs
- // to be added when there are long-range interactions or long-range
- // corrections to short-range interactions present.
- // We may want to add that for more accuracy.
-}
-
-
-void Compute_Pressure( reax_system* system, simulation_data* data )
-{
- int i;
- reax_atom *p_atom;
- rtensor temp;
-
- rtensor_MakeZero( data->flex_bar.P );
-
- for( i = 0; i < system->N; ++i ) {
- p_atom = &( system->my_atoms[i] );
-
- // Distance_on_T3_Gen( data->rcm, p_atom->x, &(system->my_box), &dx );
-
- rvec_OuterProduct( temp, p_atom->v, p_atom->v );
- rtensor_ScaledAdd( data->flex_bar.P,
- system->reax_param.sbp[ p_atom->type ].mass, temp );
-
- // rvec_OuterProduct(temp,workspace->virial_forces[i],p_atom->x); //dx);
- rtensor_ScaledAdd( data->flex_bar.P, -F_CONV, temp );
- }
-
- rtensor_Scale( data->flex_bar.P, 1.0 / system->my_box.V, data->flex_bar.P );
-
- data->iso_bar.P = rtensor_Trace( data->flex_bar.P ) / 3.0;
-}
-*/
diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp
index ee5551909..7fccbb342 100644
--- a/src/USER-REAXC/reaxc_tool_box.cpp
+++ b/src/USER-REAXC/reaxc_tool_box.cpp
@@ -1,253 +1,240 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_tool_box.h"
-
-
-/************** taken from box.c **************/
void Transform( rvec x1, simulation_box *box, char flag, rvec x2 )
{
int i, j;
real tmp;
- // printf(">x1: (%lf, %lf, %lf)\n",x1[0],x1[1],x1[2]);
-
if (flag > 0) {
for (i=0; i < 3; i++) {
tmp = 0.0;
for (j=0; j < 3; j++)
tmp += box->trans[i][j]*x1[j];
x2[i] = tmp;
}
}
else {
for (i=0; i < 3; i++) {
tmp = 0.0;
for (j=0; j < 3; j++)
tmp += box->trans_inv[i][j]*x1[j];
x2[i] = tmp;
}
}
- // printf(">x2: (%lf, %lf, %lf)\n", x2[0], x2[1], x2[2]);
}
void Transform_to_UnitBox( rvec x1, simulation_box *box, char flag, rvec x2 )
{
Transform( x1, box, flag, x2 );
x2[0] /= box->box_norms[0];
x2[1] /= box->box_norms[1];
x2[2] /= box->box_norms[2];
}
-
-/* determine whether point p is inside the box */
void Fit_to_Periodic_Box( simulation_box *box, rvec *p )
{
int i;
for( i = 0; i < 3; ++i ) {
if( (*p)[i] < box->min[i] ) {
/* handle lower coords */
while( (*p)[i] < box->min[i] )
(*p)[i] += box->box_norms[i];
}
else if( (*p)[i] >= box->max[i] ) {
/* handle higher coords */
while( (*p)[i] >= box->max[i] )
(*p)[i] -= box->box_norms[i];
}
}
}
-/************ from system_props.c *************/
struct timeval tim;
real t_end;
real Get_Time( )
{
gettimeofday(&tim, NULL );
return( tim.tv_sec + (tim.tv_usec / 1000000.0) );
}
real Get_Timing_Info( real t_start )
{
gettimeofday(&tim, NULL );
t_end = tim.tv_sec + (tim.tv_usec / 1000000.0);
return (t_end - t_start);
}
void Update_Timing_Info( real *t_start, real *timing )
{
gettimeofday(&tim, NULL );
t_end = tim.tv_sec + (tim.tv_usec / 1000000.0);
*timing += (t_end - *t_start);
*t_start = t_end;
}
-
-/*********** from io_tools.c **************/
int Get_Atom_Type( reax_interaction *reax_param, char *s, MPI_Comm comm )
{
int i;
for( i = 0; i < reax_param->num_atom_types; ++i )
if( !strcmp( reax_param->sbp[i].name, s ) )
return i;
fprintf( stderr, "Unknown atom type %s. Terminating...\n", s );
MPI_Abort( comm, UNKNOWN_ATOM_TYPE );
return -1;
}
char *Get_Element( reax_system *system, int i )
{
return &( system->reax_param.sbp[system->my_atoms[i].type].name[0] );
}
char *Get_Atom_Name( reax_system *system, int i )
{
return &(system->my_atoms[i].name[0]);
}
int Allocate_Tokenizer_Space( char **line, char **backup, char ***tokens )
{
int i;
if( (*line = (char*) malloc( sizeof(char) * MAX_LINE )) == NULL )
return FAILURE;
if( (*backup = (char*) malloc( sizeof(char) * MAX_LINE )) == NULL )
return FAILURE;
if( (*tokens = (char**) malloc( sizeof(char*) * MAX_TOKENS )) == NULL )
return FAILURE;
for( i = 0; i < MAX_TOKENS; i++ )
if( ((*tokens)[i] = (char*) malloc(sizeof(char) * MAX_TOKEN_LEN)) == NULL )
return FAILURE;
return SUCCESS;
}
int Tokenize( char* s, char*** tok )
{
char test[MAX_LINE];
const char *sep = (const char *)"\t \n!=";
char *word;
int count=0;
strncpy( test, s, MAX_LINE );
for( word = strtok(test, sep); word; word = strtok(NULL, sep) ) {
strncpy( (*tok)[count], word, MAX_LINE );
count++;
}
return count;
}
-
-/***************** taken from lammps ************************/
/* safe malloc */
void *smalloc( long n, const char *name, MPI_Comm comm )
{
void *ptr;
if( n <= 0 ) {
fprintf( stderr, "WARNING: trying to allocate %ld bytes for array %s. ",
n, name );
fprintf( stderr, "returning NULL.\n" );
return NULL;
}
ptr = malloc( n );
if( ptr == NULL ) {
fprintf( stderr, "ERROR: failed to allocate %ld bytes for array %s",
n, name );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
return ptr;
}
/* safe calloc */
void *scalloc( int n, int size, const char *name, MPI_Comm comm )
{
void *ptr;
if( n <= 0 ) {
fprintf( stderr, "WARNING: trying to allocate %d elements for array %s. ",
n, name );
fprintf( stderr, "returning NULL.\n" );
return NULL;
}
if( size <= 0 ) {
fprintf( stderr, "WARNING: elements size for array %s is %d. ",
name, size );
fprintf( stderr, "returning NULL.\n" );
return NULL;
}
ptr = calloc( n, size );
if( ptr == NULL ) {
fprintf( stderr, "ERROR: failed to allocate %d bytes for array %s",
n*size, name );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
return ptr;
}
/* safe free */
void sfree( void *ptr, const char *name )
{
if( ptr == NULL ) {
fprintf( stderr, "WARNING: trying to free the already NULL pointer %s!\n",
name );
return;
}
free( ptr );
ptr = NULL;
}
diff --git a/src/USER-REAXC/reaxc_torsion_angles.cpp b/src/USER-REAXC/reaxc_torsion_angles.cpp
index b19598d97..16f6a4539 100644
--- a/src/USER-REAXC/reaxc_torsion_angles.cpp
+++ b/src/USER-REAXC/reaxc_torsion_angles.cpp
@@ -1,630 +1,471 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "torsion_angles.h"
-#include "bond_orders.h"
-#include "list.h"
-#include "tool_box.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_torsion_angles.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_tool_box.h"
#include "reaxc_vector.h"
-#endif
#define MIN_SINE 1e-10
real Calculate_Omega( rvec dvec_ij, real r_ij,
rvec dvec_jk, real r_jk,
rvec dvec_kl, real r_kl,
rvec dvec_li, real r_li,
three_body_interaction_data *p_ijk,
three_body_interaction_data *p_jkl,
rvec dcos_omega_di, rvec dcos_omega_dj,
rvec dcos_omega_dk, rvec dcos_omega_dl,
output_controls *out_control )
{
real unnorm_cos_omega, unnorm_sin_omega, omega;
real sin_ijk, cos_ijk, sin_jkl, cos_jkl;
real htra, htrb, htrc, hthd, hthe, hnra, hnrc, hnhd, hnhe;
real arg, poem, tel;
rvec cross_jk_kl;
sin_ijk = sin( p_ijk->theta );
cos_ijk = cos( p_ijk->theta );
sin_jkl = sin( p_jkl->theta );
cos_jkl = cos( p_jkl->theta );
/* omega */
unnorm_cos_omega = -rvec_Dot(dvec_ij, dvec_jk) * rvec_Dot(dvec_jk, dvec_kl) +
SQR( r_jk ) * rvec_Dot( dvec_ij, dvec_kl );
rvec_Cross( cross_jk_kl, dvec_jk, dvec_kl );
unnorm_sin_omega = -r_jk * rvec_Dot( dvec_ij, cross_jk_kl );
omega = atan2( unnorm_sin_omega, unnorm_cos_omega );
-
- /* derivatives */
- /* coef for adjusments to cos_theta's */
- /* rla = r_ij, rlb = r_jk, rlc = r_kl, r4 = r_li;
- coshd = cos_ijk, coshe = cos_jkl;
- sinhd = sin_ijk, sinhe = sin_jkl; */
htra = r_ij + cos_ijk * ( r_kl * cos_jkl - r_jk );
htrb = r_jk - r_ij * cos_ijk - r_kl * cos_jkl;
htrc = r_kl + cos_jkl * ( r_ij * cos_ijk - r_jk );
hthd = r_ij * sin_ijk * ( r_jk - r_kl * cos_jkl );
hthe = r_kl * sin_jkl * ( r_jk - r_ij * cos_ijk );
hnra = r_kl * sin_ijk * sin_jkl;
hnrc = r_ij * sin_ijk * sin_jkl;
hnhd = r_ij * r_kl * cos_ijk * sin_jkl;
hnhe = r_ij * r_kl * sin_ijk * cos_jkl;
-
poem = 2.0 * r_ij * r_kl * sin_ijk * sin_jkl;
if( poem < 1e-20 ) poem = 1e-20;
tel = SQR( r_ij ) + SQR( r_jk ) + SQR( r_kl ) - SQR( r_li ) -
2.0 * ( r_ij * r_jk * cos_ijk - r_ij * r_kl * cos_ijk * cos_jkl +
r_jk * r_kl * cos_jkl );
arg = tel / poem;
if( arg > 1.0 ) arg = 1.0;
if( arg < -1.0 ) arg = -1.0;
-
- /* fprintf( out_control->etor,
- "%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f%12.6f\n",
- htra, htrb, htrc, hthd, hthe, hnra, hnrc, hnhd, hnhe );
- fprintf( out_control->etor, "%12.6f%12.6f%12.6f\n",
- dvec_ij[0]/r_ij, dvec_ij[1]/r_ij, dvec_ij[2]/r_ij );
- fprintf( out_control->etor, "%12.6f%12.6f%12.6f\n",
- -dvec_jk[0]/r_jk, -dvec_jk[1]/r_jk, -dvec_jk[2]/r_jk );
- fprintf( out_control->etor, "%12.6f%12.6f%12.6f\n",
- -dvec_kl[0]/r_kl, -dvec_kl[1]/r_kl, -dvec_kl[2]/r_kl );
- fprintf( out_control->etor, "%12.6f%12.6f%12.6f%12.6f\n",
- r_li, dvec_li[0], dvec_li[1], dvec_li[2] );
- fprintf( out_control->etor, "%12.6f%12.6f%12.6f\n",
- poem, tel, arg ); */
- /* fprintf( out_control->etor, "%12.6f%12.6f%12.6f\n",
- -p_ijk->dcos_dk[0]/sin_ijk, -p_ijk->dcos_dk[1]/sin_ijk,
- -p_ijk->dcos_dk[2]/sin_ijk );
- fprintf( out_control->etor, "%12.6f%12.6f%12.6f\n",
- -p_jkl->dcos_dk[0]/sin_jkl, -p_jkl->dcos_dk[1]/sin_jkl,
- -p_jkl->dcos_dk[2]/sin_jkl );*/
-
if( sin_ijk >= 0 && sin_ijk <= MIN_SINE ) sin_ijk = MIN_SINE;
else if( sin_ijk <= 0 && sin_ijk >= -MIN_SINE ) sin_ijk = -MIN_SINE;
if( sin_jkl >= 0 && sin_jkl <= MIN_SINE ) sin_jkl = MIN_SINE;
else if( sin_jkl <= 0 && sin_jkl >= -MIN_SINE ) sin_jkl = -MIN_SINE;
// dcos_omega_di
rvec_ScaledSum( dcos_omega_di, (htra-arg*hnra)/r_ij, dvec_ij, -1., dvec_li );
rvec_ScaledAdd( dcos_omega_di,-(hthd-arg*hnhd)/sin_ijk, p_ijk->dcos_dk );
rvec_Scale( dcos_omega_di, 2.0 / poem, dcos_omega_di );
// dcos_omega_dj
rvec_ScaledSum( dcos_omega_dj,-(htra-arg*hnra)/r_ij, dvec_ij,
-htrb / r_jk, dvec_jk );
rvec_ScaledAdd( dcos_omega_dj,-(hthd-arg*hnhd)/sin_ijk, p_ijk->dcos_dj );
rvec_ScaledAdd( dcos_omega_dj,-(hthe-arg*hnhe)/sin_jkl, p_jkl->dcos_di );
rvec_Scale( dcos_omega_dj, 2.0 / poem, dcos_omega_dj );
// dcos_omega_dk
rvec_ScaledSum( dcos_omega_dk,-(htrc-arg*hnrc)/r_kl, dvec_kl,
htrb / r_jk, dvec_jk );
rvec_ScaledAdd( dcos_omega_dk,-(hthd-arg*hnhd)/sin_ijk, p_ijk->dcos_di );
rvec_ScaledAdd( dcos_omega_dk,-(hthe-arg*hnhe)/sin_jkl, p_jkl->dcos_dj );
rvec_Scale( dcos_omega_dk, 2.0 / poem, dcos_omega_dk );
// dcos_omega_dl
rvec_ScaledSum( dcos_omega_dl, (htrc-arg*hnrc)/r_kl, dvec_kl, 1., dvec_li );
rvec_ScaledAdd( dcos_omega_dl,-(hthe-arg*hnhe)/sin_jkl, p_jkl->dcos_dk );
rvec_Scale( dcos_omega_dl, 2.0 / poem, dcos_omega_dl );
return omega;
}
void Torsion_Angles( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control )
{
int i, j, k, l, pi, pj, pk, pl, pij, plk, natoms;
int type_i, type_j, type_k, type_l;
- int start_j, end_j;
+ int start_j, end_j, start_k, end_k;
int start_pj, end_pj, start_pk, end_pk;
int num_frb_intrs = 0;
real Delta_j, Delta_k;
real r_ij, r_jk, r_kl, r_li;
real BOA_ij, BOA_jk, BOA_kl;
real exp_tor2_ij, exp_tor2_jk, exp_tor2_kl;
real exp_tor1, exp_tor3_DjDk, exp_tor4_DjDk, exp_tor34_inv;
real exp_cot2_jk, exp_cot2_ij, exp_cot2_kl;
real fn10, f11_DjDk, dfn11, fn12;
real theta_ijk, theta_jkl;
real sin_ijk, sin_jkl;
real cos_ijk, cos_jkl;
real tan_ijk_i, tan_jkl_i;
real omega, cos_omega, cos2omega, cos3omega;
rvec dcos_omega_di, dcos_omega_dj, dcos_omega_dk, dcos_omega_dl;
real CV, cmn, CEtors1, CEtors2, CEtors3, CEtors4;
real CEtors5, CEtors6, CEtors7, CEtors8, CEtors9;
real Cconj, CEconj1, CEconj2, CEconj3;
real CEconj4, CEconj5, CEconj6;
real e_tor, e_con;
rvec dvec_li;
rvec force, ext_press;
ivec rel_box_jl;
// rtensor total_rtensor, temp_rtensor;
four_body_header *fbh;
four_body_parameters *fbp;
bond_data *pbond_ij, *pbond_jk, *pbond_kl;
bond_order_data *bo_ij, *bo_jk, *bo_kl;
three_body_interaction_data *p_ijk, *p_jkl;
real p_tor2 = system->reax_param.gp.l[23];
real p_tor3 = system->reax_param.gp.l[24];
real p_tor4 = system->reax_param.gp.l[25];
real p_cot2 = system->reax_param.gp.l[27];
reax_list *bonds = (*lists) + BONDS;
reax_list *thb_intrs = (*lists) + THREE_BODIES;
- // char fname[100];
- // FILE *ftor;
// Virial tallying variables
real delil[3], deljl[3], delkl[3];
- real eng_tmp, fi_tmp[3], fj_tmp[3], fk_tmp[3];
-
- // sprintf( fname, "tor%d.out", system->my_rank );
- // ftor = fopen( fname, "w" );
+ real eng_tmp, f_scaler, fi_tmp[3], fj_tmp[3], fk_tmp[3];
natoms = system->n;
for( j = 0; j < natoms; ++j ) {
type_j = system->my_atoms[j].type;
Delta_j = workspace->Delta_boc[j];
start_j = Start_Index(j, bonds);
end_j = End_Index(j, bonds);
for( pk = start_j; pk < end_j; ++pk ) {
pbond_jk = &( bonds->select.bond_list[pk] );
k = pbond_jk->nbr;
bo_jk = &( pbond_jk->bo_data );
BOA_jk = bo_jk->BO - control->thb_cut;
- /* see if there are any 3-body interactions involving j&k
- where j is the central atom. Otherwise there is no point in
- trying to form a 4-body interaction out of this neighborhood */
if( system->my_atoms[j].orig_id < system->my_atoms[k].orig_id &&
bo_jk->BO > control->thb_cut/*0*/ && Num_Entries(pk, thb_intrs) ) {
+ start_k = Start_Index(k, bonds);
+ end_k = End_Index(k, bonds);
pj = pbond_jk->sym_index; // pj points to j on k's list
- /* do the same check as above:
- are there any 3-body interactions involving k&j
- where k is the central atom */
if( Num_Entries(pj, thb_intrs) ) {
type_k = system->my_atoms[k].type;
Delta_k = workspace->Delta_boc[k];
r_jk = pbond_jk->d;
start_pk = Start_Index(pk, thb_intrs );
end_pk = End_Index(pk, thb_intrs );
start_pj = Start_Index(pj, thb_intrs );
end_pj = End_Index(pj, thb_intrs );
exp_tor2_jk = exp( -p_tor2 * BOA_jk );
exp_cot2_jk = exp( -p_cot2 * SQR(BOA_jk - 1.5) );
exp_tor3_DjDk = exp( -p_tor3 * (Delta_j + Delta_k) );
exp_tor4_DjDk = exp( p_tor4 * (Delta_j + Delta_k) );
exp_tor34_inv = 1.0 / (1.0 + exp_tor3_DjDk + exp_tor4_DjDk);
f11_DjDk = (2.0 + exp_tor3_DjDk) * exp_tor34_inv;
-
- /* pick i up from j-k interaction where j is the central atom */
for( pi = start_pk; pi < end_pk; ++pi ) {
p_ijk = &( thb_intrs->select.three_body_list[pi] );
pij = p_ijk->pthb; // pij is pointer to i on j's bond_list
pbond_ij = &( bonds->select.bond_list[pij] );
bo_ij = &( pbond_ij->bo_data );
-
if( bo_ij->BO > control->thb_cut/*0*/ ) {
i = p_ijk->thb;
type_i = system->my_atoms[i].type;
r_ij = pbond_ij->d;
BOA_ij = bo_ij->BO - control->thb_cut;
theta_ijk = p_ijk->theta;
sin_ijk = sin( theta_ijk );
cos_ijk = cos( theta_ijk );
//tan_ijk_i = 1. / tan( theta_ijk );
if( sin_ijk >= 0 && sin_ijk <= MIN_SINE )
tan_ijk_i = cos_ijk / MIN_SINE;
else if( sin_ijk <= 0 && sin_ijk >= -MIN_SINE )
tan_ijk_i = cos_ijk / -MIN_SINE;
else tan_ijk_i = cos_ijk / sin_ijk;
exp_tor2_ij = exp( -p_tor2 * BOA_ij );
exp_cot2_ij = exp( -p_cot2 * SQR(BOA_ij -1.5) );
-
- /* pick l up from j-k interaction where k is the central atom */
for( pl = start_pj; pl < end_pj; ++pl ) {
p_jkl = &( thb_intrs->select.three_body_list[pl] );
l = p_jkl->thb;
plk = p_jkl->pthb; //pointer to l on k's bond_list!
pbond_kl = &( bonds->select.bond_list[plk] );
bo_kl = &( pbond_kl->bo_data );
type_l = system->my_atoms[l].type;
fbh = &(system->reax_param.fbp[type_i][type_j]
[type_k][type_l]);
fbp = &(system->reax_param.fbp[type_i][type_j]
[type_k][type_l].prm[0]);
-
if( i != l && fbh->cnt &&
bo_kl->BO > control->thb_cut/*0*/ &&
bo_ij->BO * bo_jk->BO * bo_kl->BO > control->thb_cut/*0*/ ){
++num_frb_intrs;
r_kl = pbond_kl->d;
BOA_kl = bo_kl->BO - control->thb_cut;
theta_jkl = p_jkl->theta;
sin_jkl = sin( theta_jkl );
cos_jkl = cos( theta_jkl );
//tan_jkl_i = 1. / tan( theta_jkl );
if( sin_jkl >= 0 && sin_jkl <= MIN_SINE )
tan_jkl_i = cos_jkl / MIN_SINE;
else if( sin_jkl <= 0 && sin_jkl >= -MIN_SINE )
tan_jkl_i = cos_jkl / -MIN_SINE;
else tan_jkl_i = cos_jkl /sin_jkl;
rvec_ScaledSum( dvec_li, 1., system->my_atoms[i].x,
-1., system->my_atoms[l].x );
r_li = rvec_Norm( dvec_li );
/* omega and its derivative */
omega = Calculate_Omega( pbond_ij->dvec, r_ij,
pbond_jk->dvec, r_jk,
pbond_kl->dvec, r_kl,
dvec_li, r_li,
p_ijk, p_jkl,
dcos_omega_di, dcos_omega_dj,
dcos_omega_dk, dcos_omega_dl,
out_control );
cos_omega = cos( omega );
cos2omega = cos( 2. * omega );
cos3omega = cos( 3. * omega );
/* end omega calculations */
/* torsion energy */
exp_tor1 = exp( fbp->p_tor1 *
SQR(2.0 - bo_jk->BO_pi - f11_DjDk) );
exp_tor2_kl = exp( -p_tor2 * BOA_kl );
exp_cot2_kl = exp( -p_cot2 * SQR(BOA_kl - 1.5) );
fn10 = (1.0 - exp_tor2_ij) * (1.0 - exp_tor2_jk) *
(1.0 - exp_tor2_kl);
CV = 0.5 * ( fbp->V1 * (1.0 + cos_omega) +
fbp->V2 * exp_tor1 * (1.0 - cos2omega) +
fbp->V3 * (1.0 + cos3omega) );
data->my_en.e_tor += e_tor = fn10 * sin_ijk * sin_jkl * CV;
dfn11 = (-p_tor3 * exp_tor3_DjDk +
(p_tor3 * exp_tor3_DjDk - p_tor4 * exp_tor4_DjDk) *
(2.0 + exp_tor3_DjDk) * exp_tor34_inv) *
exp_tor34_inv;
CEtors1 = sin_ijk * sin_jkl * CV;
CEtors2 = -fn10 * 2.0 * fbp->p_tor1 * fbp->V2 * exp_tor1 *
(2.0 - bo_jk->BO_pi - f11_DjDk) * (1.0 - SQR(cos_omega)) *
sin_ijk * sin_jkl;
CEtors3 = CEtors2 * dfn11;
CEtors4 = CEtors1 * p_tor2 * exp_tor2_ij *
(1.0 - exp_tor2_jk) * (1.0 - exp_tor2_kl);
CEtors5 = CEtors1 * p_tor2 *
(1.0 - exp_tor2_ij) * exp_tor2_jk * (1.0 - exp_tor2_kl);
CEtors6 = CEtors1 * p_tor2 *
(1.0 - exp_tor2_ij) * (1.0 - exp_tor2_jk) * exp_tor2_kl;
cmn = -fn10 * CV;
CEtors7 = cmn * sin_jkl * tan_ijk_i;
CEtors8 = cmn * sin_ijk * tan_jkl_i;
CEtors9 = fn10 * sin_ijk * sin_jkl *
(0.5 * fbp->V1 - 2.0 * fbp->V2 * exp_tor1 * cos_omega +
1.5 * fbp->V3 * (cos2omega + 2.0 * SQR(cos_omega)));
/* end of torsion energy */
-
/* 4-body conjugation energy */
fn12 = exp_cot2_ij * exp_cot2_jk * exp_cot2_kl;
data->my_en.e_con += e_con =
fbp->p_cot1 * fn12 *
(1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jkl);
Cconj = -2.0 * fn12 * fbp->p_cot1 * p_cot2 *
(1.0 + (SQR(cos_omega) - 1.0) * sin_ijk * sin_jkl);
CEconj1 = Cconj * (BOA_ij - 1.5e0);
CEconj2 = Cconj * (BOA_jk - 1.5e0);
CEconj3 = Cconj * (BOA_kl - 1.5e0);
CEconj4 = -fbp->p_cot1 * fn12 *
(SQR(cos_omega) - 1.0) * sin_jkl * tan_ijk_i;
CEconj5 = -fbp->p_cot1 * fn12 *
(SQR(cos_omega) - 1.0) * sin_ijk * tan_jkl_i;
CEconj6 = 2.0 * fbp->p_cot1 * fn12 *
cos_omega * sin_ijk * sin_jkl;
/* end 4-body conjugation energy */
/* forces */
bo_jk->Cdbopi += CEtors2;
workspace->CdDelta[j] += CEtors3;
workspace->CdDelta[k] += CEtors3;
bo_ij->Cdbo += (CEtors4 + CEconj1);
bo_jk->Cdbo += (CEtors5 + CEconj2);
bo_kl->Cdbo += (CEtors6 + CEconj3);
if( control->virial == 0 ) {
/* dcos_theta_ijk */
rvec_ScaledAdd( workspace->f[i],
CEtors7 + CEconj4, p_ijk->dcos_dk );
rvec_ScaledAdd( workspace->f[j],
CEtors7 + CEconj4, p_ijk->dcos_dj );
rvec_ScaledAdd( workspace->f[k],
CEtors7 + CEconj4, p_ijk->dcos_di );
/* dcos_theta_jkl */
rvec_ScaledAdd( workspace->f[j],
CEtors8 + CEconj5, p_jkl->dcos_di );
rvec_ScaledAdd( workspace->f[k],
CEtors8 + CEconj5, p_jkl->dcos_dj );
rvec_ScaledAdd( workspace->f[l],
CEtors8 + CEconj5, p_jkl->dcos_dk );
/* dcos_omega */
rvec_ScaledAdd( workspace->f[i],
CEtors9 + CEconj6, dcos_omega_di );
rvec_ScaledAdd( workspace->f[j],
CEtors9 + CEconj6, dcos_omega_dj );
rvec_ScaledAdd( workspace->f[k],
CEtors9 + CEconj6, dcos_omega_dk );
rvec_ScaledAdd( workspace->f[l],
CEtors9 + CEconj6, dcos_omega_dl );
}
else {
ivec_Sum(rel_box_jl, pbond_jk->rel_box, pbond_kl->rel_box);
/* dcos_theta_ijk */
rvec_Scale( force, CEtors7 + CEconj4, p_ijk->dcos_dk );
rvec_Add( workspace->f[i], force );
rvec_iMultiply( ext_press, pbond_ij->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
rvec_ScaledAdd( workspace->f[j],
CEtors7 + CEconj4, p_ijk->dcos_dj );
rvec_Scale( force, CEtors7 + CEconj4, p_ijk->dcos_di );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, pbond_jk->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
/* dcos_theta_jkl */
rvec_ScaledAdd( workspace->f[j],
CEtors8 + CEconj5, p_jkl->dcos_di );
rvec_Scale( force, CEtors8 + CEconj5, p_jkl->dcos_dj );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, pbond_jk->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
rvec_Scale( force, CEtors8 + CEconj5, p_jkl->dcos_dk );
rvec_Add( workspace->f[l], force );
rvec_iMultiply( ext_press, rel_box_jl, force );
rvec_Add( data->my_ext_press, ext_press );
/* dcos_omega */
rvec_Scale( force, CEtors9 + CEconj6, dcos_omega_di );
rvec_Add( workspace->f[i], force );
rvec_iMultiply( ext_press, pbond_ij->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
rvec_ScaledAdd( workspace->f[j],
CEtors9 + CEconj6, dcos_omega_dj );
rvec_Scale( force, CEtors9 + CEconj6, dcos_omega_dk );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, pbond_jk->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
rvec_Scale( force, CEtors9 + CEconj6, dcos_omega_dl );
rvec_Add( workspace->f[l], force );
rvec_iMultiply( ext_press, rel_box_jl, force );
rvec_Add( data->my_ext_press, ext_press );
}
/* tally into per-atom virials */
if( system->pair_ptr->vflag_atom || system->pair_ptr->evflag) {
// acquire vectors
rvec_ScaledSum( delil, 1., system->my_atoms[l].x,
-1., system->my_atoms[i].x );
rvec_ScaledSum( deljl, 1., system->my_atoms[l].x,
-1., system->my_atoms[j].x );
rvec_ScaledSum( delkl, 1., system->my_atoms[l].x,
-1., system->my_atoms[k].x );
// dcos_theta_ijk
rvec_Scale( fi_tmp, CEtors7 + CEconj4, p_ijk->dcos_dk );
rvec_Scale( fj_tmp, CEtors7 + CEconj4, p_ijk->dcos_dj );
rvec_Scale( fk_tmp, CEtors7 + CEconj4, p_ijk->dcos_di );
// dcos_theta_jkl
rvec_ScaledAdd( fj_tmp, CEtors8 + CEconj5, p_jkl->dcos_di );
rvec_ScaledAdd( fk_tmp, CEtors8 + CEconj5, p_jkl->dcos_dj );
// dcos_omega
rvec_ScaledAdd( fi_tmp, CEtors9 + CEconj6, dcos_omega_di );
rvec_ScaledAdd( fj_tmp, CEtors9 + CEconj6, dcos_omega_dj );
rvec_ScaledAdd( fk_tmp, CEtors9 + CEconj6, dcos_omega_dk );
// tally
eng_tmp = e_tor + e_con;
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(j,k,natoms,1,eng_tmp,0.0,0.0,0.0,0.0,0.0);
if( system->pair_ptr->vflag_atom)
system->pair_ptr->v_tally4(i,j,k,l,fi_tmp,fj_tmp,fk_tmp,delil,deljl,delkl);
}
-
-
-#ifdef TEST_ENERGY
- /* fprintf( out_control->etor,
- "%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",
- r_ij, r_jk, r_kl, cos_ijk, cos_jkl, sin_ijk, sin_jkl );
- fprintf( out_control->etor, "%12.8f\n", dfn11 ); */
- /* fprintf( out_control->etor,
- "%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",
- CEtors2, CEtors3, CEtors4, CEtors5, CEtors6,
- CEtors7, CEtors8, CEtors9 ); */
- /* fprintf( out_control->etor,
- "%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",
- htra, htrb, htrc, hthd, hthe, hnra, hnrc, hnhd, hnhe ); */
- /* fprintf( out_control->etor,
- "%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",
- CEconj1, CEconj2, CEconj3, CEconj4, CEconj5, CEconj6 ); */
-
- /* fprintf( out_control->etor, "%12.6f%12.6f%12.6f%12.6f\n",
- fbp->V1, fbp->V2, fbp->V3, fbp->p_tor1 );*/
-
- fprintf(out_control->etor,
- //"%6d%6d%6d%6d%24.15e%24.15e%24.15e%24.15e\n",
- "%6d%6d%6d%6d%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,system->my_atoms[l].orig_id,
- RAD2DEG(omega), BOA_jk, e_tor, data->my_en.e_tor );
-
- fprintf(out_control->econ,
- //"%6d%6d%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- "%6d%6d%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,system->my_atoms[l].orig_id,
- RAD2DEG(omega), BOA_ij, BOA_jk, BOA_kl,
- e_con, data->my_en.e_con );
-#endif
-
-#ifdef TEST_FORCES
- /* Torsion Forces */
- Add_dBOpinpi2( system, lists, j, pk, CEtors2, 0.0,
- workspace->f_tor, workspace->f_tor );
- Add_dDelta( system, lists, j, CEtors3, workspace->f_tor );
- Add_dDelta( system, lists, k, CEtors3, workspace->f_tor );
- Add_dBO( system, lists, j, pij, CEtors4, workspace->f_tor );
- Add_dBO( system, lists, j, pk, CEtors5, workspace->f_tor );
- Add_dBO( system, lists, k, plk, CEtors6, workspace->f_tor );
-
- rvec_ScaledAdd( workspace->f_tor[i],
- CEtors7, p_ijk->dcos_dk );
- rvec_ScaledAdd( workspace->f_tor[j],
- CEtors7, p_ijk->dcos_dj );
- rvec_ScaledAdd( workspace->f_tor[k],
- CEtors7, p_ijk->dcos_di );
-
- rvec_ScaledAdd( workspace->f_tor[j],
- CEtors8, p_jkl->dcos_di );
- rvec_ScaledAdd( workspace->f_tor[k],
- CEtors8, p_jkl->dcos_dj );
- rvec_ScaledAdd( workspace->f_tor[l],
- CEtors8, p_jkl->dcos_dk );
-
- rvec_ScaledAdd( workspace->f_tor[i],
- CEtors9, dcos_omega_di );
- rvec_ScaledAdd( workspace->f_tor[j],
- CEtors9, dcos_omega_dj );
- rvec_ScaledAdd( workspace->f_tor[k],
- CEtors9, dcos_omega_dk );
- rvec_ScaledAdd( workspace->f_tor[l],
- CEtors9, dcos_omega_dl );
-
- /* Conjugation Forces */
- Add_dBO( system, lists, j, pij, CEconj1, workspace->f_con );
- Add_dBO( system, lists, j, pk, CEconj2, workspace->f_con );
- Add_dBO( system, lists, k, plk, CEconj3, workspace->f_con );
-
- rvec_ScaledAdd( workspace->f_con[i],
- CEconj4, p_ijk->dcos_dk );
- rvec_ScaledAdd( workspace->f_con[j],
- CEconj4, p_ijk->dcos_dj );
- rvec_ScaledAdd( workspace->f_con[k],
- CEconj4, p_ijk->dcos_di );
-
- rvec_ScaledAdd( workspace->f_con[j],
- CEconj5, p_jkl->dcos_di );
- rvec_ScaledAdd( workspace->f_con[k],
- CEconj5, p_jkl->dcos_dj );
- rvec_ScaledAdd( workspace->f_con[l],
- CEconj5, p_jkl->dcos_dk );
-
- rvec_ScaledAdd( workspace->f_con[i],
- CEconj6, dcos_omega_di );
- rvec_ScaledAdd( workspace->f_con[j],
- CEconj6, dcos_omega_dj );
- rvec_ScaledAdd( workspace->f_con[k],
- CEconj6, dcos_omega_dk );
- rvec_ScaledAdd( workspace->f_con[l],
- CEconj6, dcos_omega_dl );
-#endif
} // pl check ends
} // pl loop ends
} // pi check ends
} // pi loop ends
} // k-j neighbor check ends
} // j<k && j-k neighbor check ends
} // pk loop ends
} // j loop
-
-#if defined(DEBUG)
- fprintf( stderr, "Number of torsion angles: %d\n", num_frb_intrs );
- fprintf( stderr, "Torsion Energy: %g\t Conjugation Energy: %g\n",
- data->my_en.e_tor, data->my_en.e_con );
-
- fprintf( stderr, "4body: ext_press (%12.6f %12.6f %12.6f)\n",
- data->ext_press[0], data->ext_press[1], data->ext_press[2] );
-#endif
}
diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp
index f24c65c7c..05bf73a29 100644
--- a/src/USER-REAXC/reaxc_traj.cpp
+++ b/src/USER-REAXC/reaxc_traj.cpp
@@ -1,812 +1,778 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_traj.h"
#include "reaxc_list.h"
#include "reaxc_tool_box.h"
-
int Reallocate_Output_Buffer( output_controls *out_control, int req_space,
MPI_Comm comm )
{
if( out_control->buffer_len > 0 )
free( out_control->buffer );
out_control->buffer_len = (int)(req_space*SAFE_ZONE);
out_control->buffer = (char*) malloc(out_control->buffer_len*sizeof(char));
if( out_control->buffer == NULL ) {
fprintf( stderr,
"insufficient memory for required buffer size %d. terminating!\n",
(int) (req_space*SAFE_ZONE) );
MPI_Abort( comm, INSUFFICIENT_MEMORY );
}
return SUCCESS;
}
void Write_Skip_Line( output_controls *out_control, mpi_datatypes *mpi_data,
int my_rank, int skip, int num_section )
{
if( my_rank == MASTER_NODE )
fprintf( out_control->strj, INT2_LINE,
"chars_to_skip_section:", skip, num_section );
}
int Write_Header( reax_system *system, control_params *control,
output_controls *out_control, mpi_datatypes *mpi_data )
{
int num_hdr_lines, my_hdr_lines, buffer_req;
char ensembles[ens_N][25] = { "NVE", "NVT", "fully flexible NPT",
"semi isotropic NPT", "isotropic NPT" };
char reposition[3][25] = { "fit to periodic box", "CoM to center of box",
"CoM to origin" };
char t_regime[3][25] = { "T-coupling only", "step-wise", "constant slope" };
char traj_methods[TF_N][10] = { "custom", "xyz" };
char atom_formats[8][40] = { "none", "invalid", "invalid", "invalid",
"xyz_q",
"xyz_q_fxfyfz",
"xyz_q_vxvyvz",
"detailed_atom_info" };
char bond_formats[3][30] = { "none",
"basic_bond_info",
"detailed_bond_info" };
char angle_formats[2][30] = { "none", "basic_angle_info" };
/* set header lengths */
num_hdr_lines = NUM_HEADER_LINES;
my_hdr_lines = num_hdr_lines * ( system->my_rank == MASTER_NODE );
buffer_req = my_hdr_lines * HEADER_LINE_LEN;
if( buffer_req > out_control->buffer_len * DANGER_ZONE )
Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world );
/* only the master node writes into trajectory header */
if( system->my_rank == MASTER_NODE ) {
/* clear the contents of line & buffer */
out_control->line[0] = 0;
out_control->buffer[0] = 0;
/* to skip the header */
sprintf( out_control->line, INT_LINE, "chars_to_skip_header:",
(num_hdr_lines-1) * HEADER_LINE_LEN );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* general simulation info */
sprintf( out_control->line, STR_LINE, "simulation_name:",
out_control->traj_title );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "number_of_atoms:", system->bigN );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "ensemble_type:",
ensembles[ control->ensemble ] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "number_of_steps:",
control->nsteps );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "timestep_length_(in_fs):",
control->dt * 1000 );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* restart info */
sprintf( out_control->line, STR_LINE, "is_this_a_restart?:",
(control->restart ? "yes" : "no") );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
- //sprintf( out_control->line, STR_LINE, "restarted_from_file:",
- // (control->restart ? control->restart_from : "NA") );
- //strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
-
- //sprintf( out_control->line, STR_LINE, "kept_restart_velocities?:",
- // (control->restart ? (control->random_vel ? "no":"yes"):"NA") );
- //strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
-
sprintf( out_control->line, STR_LINE, "write_restart_files?:",
((out_control->restart_freq > 0) ? "yes" : "no") );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "frequency_to_write_restarts:",
out_control->restart_freq );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* preferences */
sprintf( out_control->line, STR_LINE, "tabulate_long_range_intrs?:",
(control->tabulate ? "yes" : "no") );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "table_size:", control->tabulate );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "restrict_bonds?:",
(control->restrict_bonds ? "yes" : "no") );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "bond_restriction_length:",
control->restrict_bonds );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "reposition_atoms?:",
reposition[control->reposition_atoms] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "remove_CoM_velocity?:",
(control->ensemble==NVE) ? 0 : control->remove_CoM_vel);
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* cut-off values */
sprintf( out_control->line, REAL_LINE, "bonded_intr_dist_cutoff:",
control->bond_cut );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "nonbonded_intr_dist_cutoff:",
control->nonb_cut );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "hbond_dist_cutoff:",
control->hbond_cut );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "reax_bond_threshold:",
control->bo_cut );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "physical_bond_threshold:",
control->bg_cut );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "valence_angle_threshold:",
control->thb_cut );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, SCI_LINE, "QEq_tolerance:", control->q_err );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* temperature controls */
sprintf( out_control->line, REAL_LINE, "initial_temperature:",
control->T_init );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "target_temperature:",
control->T_final );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "thermal_inertia:",
control->Tau_T );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "temperature_regime:",
t_regime[ control->T_mode ] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "temperature_change_rate_(K/ps):",
control->T_rate / control->T_freq );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* pressure controls */
sprintf( out_control->line, REAL3_LINE, "target_pressure_(GPa):",
control->P[0], control->P[1], control->P[2] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL3_LINE, "virial_inertia:",
control->Tau_P[0], control->Tau_P[1], control->Tau_P[2] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* trajectory */
sprintf( out_control->line, INT_LINE, "energy_dumping_freq:",
out_control->energy_update_freq );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "trajectory_dumping_freq:",
out_control->write_steps );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "compress_trajectory_output?:",
(out_control->traj_compress ? "yes" : "no") );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "trajectory_format:",
traj_methods[ out_control->traj_method ] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "atom_info:",
atom_formats[ out_control->atom_info ] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "bond_info:",
bond_formats[ out_control->bond_info ] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, STR_LINE, "angle_info:",
angle_formats[ out_control->angle_info ] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* analysis */
//sprintf( out_control->line, STR_LINE, "molecular_analysis:",
// (control->molec_anal ? "yes" : "no") );
//strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, INT_LINE, "molecular_analysis_frequency:",
control->molecular_analysis );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
}
/* dump out the buffer */
if( system->my_rank == MASTER_NODE )
fprintf( out_control->strj, "%s", out_control->buffer );
return SUCCESS;
}
int Write_Init_Desc( reax_system *system, control_params *control,
output_controls *out_control, mpi_datatypes *mpi_data )
{
int i, me, np, cnt, buffer_len, buffer_req;
reax_atom *p_atom;
//MPI_Request request;
MPI_Status status;
me = system->my_rank;
np = system->wsize;
/* skip info */
Write_Skip_Line( out_control, mpi_data, me,
system->bigN * INIT_DESC_LEN, system->bigN );
if( out_control->traj_method == REG_TRAJ && me == MASTER_NODE )
buffer_req = system->bigN * INIT_DESC_LEN + 1;
else buffer_req = system->n * INIT_DESC_LEN + 1;
if( buffer_req > out_control->buffer_len * DANGER_ZONE )
Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world );
out_control->line[0] = 0;
out_control->buffer[0] = 0;
for( i = 0; i < system->n; ++i ) {
p_atom = &( system->my_atoms[i] );
sprintf( out_control->line, INIT_DESC,
p_atom->orig_id, p_atom->type, p_atom->name,
system->reax_param.sbp[ p_atom->type ].mass );
strncpy( out_control->buffer + i*INIT_DESC_LEN,
out_control->line, INIT_DESC_LEN+1 );
}
if( me != MASTER_NODE )
MPI_Send( out_control->buffer, buffer_req-1, MPI_CHAR, MASTER_NODE,
np * INIT_DESCS + me, mpi_data->world );
else{
buffer_len = system->n * INIT_DESC_LEN;
for( i = 0; i < np; ++i )
if( i != MASTER_NODE ) {
MPI_Recv( out_control->buffer + buffer_len, buffer_req - buffer_len,
MPI_CHAR, i, np*INIT_DESCS+i, mpi_data->world, &status );
MPI_Get_count( &status, MPI_CHAR, &cnt );
buffer_len += cnt;
}
out_control->buffer[buffer_len] = 0;
fprintf( out_control->strj, "%s", out_control->buffer );
}
return SUCCESS;
}
int Init_Traj( reax_system *system, control_params *control,
output_controls *out_control, mpi_datatypes *mpi_data,
char *msg )
{
char fname[MAX_STR];
int atom_line_len[ NR_OPT_ATOM ] = { 0, 0, 0, 0,
ATOM_BASIC_LEN, ATOM_wV_LEN,
ATOM_wF_LEN, ATOM_FULL_LEN };
int bond_line_len[ NR_OPT_BOND ] = { 0, BOND_BASIC_LEN, BOND_FULL_LEN };
int angle_line_len[ NR_OPT_ANGLE ] = { 0, ANGLE_BASIC_LEN };
/* generate trajectory name */
sprintf( fname, "%s.trj", control->sim_name );
/* how should I write atoms? */
out_control->atom_line_len = atom_line_len[ out_control->atom_info ];
out_control->write_atoms = ( out_control->atom_line_len ? 1 : 0 );
/* bonds? */
out_control->bond_line_len = bond_line_len[ out_control->bond_info ];
out_control->write_bonds = ( out_control->bond_line_len ? 1 : 0 );
/* angles? */
out_control->angle_line_len = angle_line_len[ out_control->angle_info ];
out_control->write_angles = ( out_control->angle_line_len ? 1 : 0 );
/* allocate line & buffer space */
out_control->line = (char*) calloc( MAX_TRJ_LINE_LEN + 1, sizeof(char) );
out_control->buffer_len = 0;
out_control->buffer = NULL;
- /* fprintf( stderr, "p%d: init_traj: atom_line_len = %d " \
- "bond_line_len = %d, angle_line_len = %d\n" \
- "max_line = %d, max_buffer_size = %d\n",
- system->my_rank, out_control->atom_line_len,
- out_control->bond_line_len, out_control->angle_line_len,
- MAX_TRJ_LINE_LEN, MAX_TRJ_BUFFER_SIZE ); */
-
/* write trajectory header and atom info, if applicable */
if( out_control->traj_method == REG_TRAJ) {
if( system->my_rank == MASTER_NODE )
out_control->strj = fopen( fname, "w" );
}
else {
strcpy( msg, "init_traj: unknown trajectory option" );
return FAILURE;
}
-
-
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: initiated trajectory\n", system->my_rank );
-#endif
Write_Header( system, control, out_control, mpi_data );
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: header written\n", system->my_rank );
-#endif
Write_Init_Desc( system, control, out_control, mpi_data );
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: atom descriptions written\n", system->my_rank );
-#endif
return SUCCESS;
}
int Write_Frame_Header( reax_system *system, control_params *control,
simulation_data *data, output_controls *out_control,
mpi_datatypes *mpi_data )
{
int me, num_frm_hdr_lines, my_frm_hdr_lines, buffer_req;
me = system->my_rank;
/* frame header lengths */
num_frm_hdr_lines = 22;
my_frm_hdr_lines = num_frm_hdr_lines * ( me == MASTER_NODE );
buffer_req = my_frm_hdr_lines * HEADER_LINE_LEN;
if( buffer_req > out_control->buffer_len * DANGER_ZONE )
Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world );
/* only the master node writes into trajectory header */
if( me == MASTER_NODE ) {
/* clear the contents of line & buffer */
out_control->line[0] = 0;
out_control->buffer[0] = 0;
/* skip info */
sprintf( out_control->line, INT_LINE, "chars_to_skip_frame_header:",
(num_frm_hdr_lines - 1) * HEADER_LINE_LEN );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* step & time */
sprintf( out_control->line, INT_LINE, "step:", data->step );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "time_in_ps:",
data->step * control->dt );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* box info */
sprintf( out_control->line, REAL_LINE, "volume:", system->big_box.V );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL3_LINE, "box_dimensions:",
system->big_box.box_norms[0],
system->big_box.box_norms[1],
system->big_box.box_norms[2] );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL3_LINE,
"coordinate_angles:", 90.0, 90.0, 90.0 );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* system T and P */
sprintf( out_control->line, REAL_LINE, "temperature:", data->therm.T );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "pressure:",
(control->ensemble==iNPT) ?
data->iso_bar.P : data->flex_bar.P_scalar );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
/* energies */
sprintf( out_control->line, REAL_LINE, "total_energy:",
data->sys_en.e_tot );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "total_kinetic:",
data->sys_en.e_kin );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "total_potential:",
data->sys_en.e_pot );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "bond_energy:",
data->sys_en.e_bond );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "atom_energy:",
data->sys_en.e_ov + data->sys_en.e_un );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "lone_pair_energy:",
data->sys_en.e_lp );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "valence_angle_energy:",
data->sys_en.e_ang + data->sys_en.e_pen );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "3-body_conjugation:",
data->sys_en.e_coa );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "hydrogen_bond_energy:",
data->sys_en.e_hb );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "torsion_angle_energy:",
data->sys_en.e_tor );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "4-body_conjugation:",
data->sys_en.e_con );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "vdWaals_energy:",
data->sys_en.e_vdW );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "electrostatics_energy:",
data->sys_en.e_ele );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
sprintf( out_control->line, REAL_LINE, "polarization_energy:",
data->sys_en.e_pol );
strncat( out_control->buffer, out_control->line, HEADER_LINE_LEN+1 );
}
/* dump out the buffer */
if( system->my_rank == MASTER_NODE )
fprintf( out_control->strj, "%s", out_control->buffer );
return SUCCESS;
}
int Write_Atoms( reax_system *system, control_params *control,
output_controls *out_control, mpi_datatypes *mpi_data )
{
int i, me, np, line_len, buffer_len, buffer_req, cnt;
MPI_Status status;
reax_atom *p_atom;
me = system->my_rank;
np = system->wsize;
line_len = out_control->atom_line_len;
Write_Skip_Line( out_control, mpi_data, me,
system->bigN*line_len, system->bigN );
if( out_control->traj_method == REG_TRAJ && me == MASTER_NODE )
buffer_req = system->bigN * line_len + 1;
else buffer_req = system->n * line_len + 1;
if( buffer_req > out_control->buffer_len * DANGER_ZONE )
Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world );
/* fill in buffer */
out_control->line[0] = 0;
out_control->buffer[0] = 0;
for( i = 0; i < system->n; ++i ) {
p_atom = &( system->my_atoms[i] );
switch( out_control->atom_info ) {
case OPT_ATOM_BASIC:
sprintf( out_control->line, ATOM_BASIC,
p_atom->orig_id, p_atom->x[0], p_atom->x[1], p_atom->x[2],
p_atom->q );
break;
case OPT_ATOM_wF:
sprintf( out_control->line, ATOM_wF,
p_atom->orig_id, p_atom->x[0], p_atom->x[1], p_atom->x[2],
p_atom->f[0], p_atom->f[1], p_atom->f[2], p_atom->q );
break;
case OPT_ATOM_wV:
sprintf( out_control->line, ATOM_wV,
p_atom->orig_id, p_atom->x[0], p_atom->x[1], p_atom->x[2],
p_atom->v[0], p_atom->v[1], p_atom->v[2], p_atom->q );
break;
case OPT_ATOM_FULL:
sprintf( out_control->line, ATOM_FULL,
p_atom->orig_id, p_atom->x[0], p_atom->x[1], p_atom->x[2],
p_atom->v[0], p_atom->v[1], p_atom->v[2],
p_atom->f[0], p_atom->f[1], p_atom->f[2], p_atom->q );
break;
default:
fprintf( stderr,
"write_traj_atoms: unknown atom trajectroy format!\n");
MPI_Abort( mpi_data->world, UNKNOWN_OPTION );
}
strncpy( out_control->buffer + i*line_len, out_control->line, line_len+1 );
}
if( me != MASTER_NODE )
MPI_Send( out_control->buffer, buffer_req-1, MPI_CHAR, MASTER_NODE,
np*ATOM_LINES+me, mpi_data->world );
else{
buffer_len = system->n * line_len;
for( i = 0; i < np; ++i )
if( i != MASTER_NODE ) {
MPI_Recv( out_control->buffer + buffer_len, buffer_req - buffer_len,
MPI_CHAR, i, np*ATOM_LINES+i, mpi_data->world, &status );
MPI_Get_count( &status, MPI_CHAR, &cnt );
buffer_len += cnt;
}
out_control->buffer[buffer_len] = 0;
fprintf( out_control->strj, "%s", out_control->buffer );
}
return SUCCESS;
}
int Write_Bonds(reax_system *system, control_params *control, reax_list *bonds,
output_controls *out_control, mpi_datatypes *mpi_data)
{
int i, j, pj, me, np;
int my_bonds, num_bonds;
int line_len, buffer_len, buffer_req, cnt;
MPI_Status status;
bond_data *bo_ij;
me = system->my_rank;
np = system->wsize;
line_len = out_control->bond_line_len;
/* count the number of bonds I will write */
my_bonds = 0;
for( i=0; i < system->n; ++i )
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
j = bonds->select.bond_list[pj].nbr;
if( system->my_atoms[i].orig_id <= system->my_atoms[j].orig_id &&
bonds->select.bond_list[pj].bo_data.BO >= control->bg_cut )
++my_bonds;
}
/* allreduce - total number of bonds */
MPI_Allreduce( &my_bonds, &num_bonds, 1, MPI_INT, MPI_SUM, mpi_data->world );
Write_Skip_Line( out_control, mpi_data, me, num_bonds*line_len, num_bonds );
if( out_control->traj_method == REG_TRAJ && me == MASTER_NODE )
buffer_req = num_bonds * line_len + 1;
else buffer_req = my_bonds * line_len + 1;
if( buffer_req > out_control->buffer_len * DANGER_ZONE )
Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world );
/* fill in the buffer */
out_control->line[0] = 0;
out_control->buffer[0] = 0;
my_bonds = 0;
for( i=0; i < system->n; ++i ) {
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
bo_ij = &( bonds->select.bond_list[pj] );
j = bo_ij->nbr;
if( system->my_atoms[i].orig_id <= system->my_atoms[j].orig_id &&
bo_ij->bo_data.BO >= control->bg_cut ) {
switch( out_control->bond_info ) {
case OPT_BOND_BASIC:
sprintf( out_control->line, BOND_BASIC,
system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
bo_ij->d, bo_ij->bo_data.BO );
break;
case OPT_BOND_FULL:
sprintf( out_control->line, BOND_FULL,
system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
bo_ij->d, bo_ij->bo_data.BO, bo_ij->bo_data.BO_s,
bo_ij->bo_data.BO_pi, bo_ij->bo_data.BO_pi2 );
break;
default:
fprintf(stderr, "write_traj_bonds: FATAL! invalid bond_info option");
MPI_Abort( mpi_data->world, UNKNOWN_OPTION );
}
strncpy( out_control->buffer + my_bonds*line_len,
out_control->line, line_len+1 );
++my_bonds;
}
}
}
-
if( me != MASTER_NODE )
MPI_Send( out_control->buffer, buffer_req-1, MPI_CHAR, MASTER_NODE,
np*BOND_LINES+me, mpi_data->world );
else{
buffer_len = my_bonds * line_len;
for( i = 0; i < np; ++i )
if( i != MASTER_NODE ) {
MPI_Recv( out_control->buffer + buffer_len, buffer_req - buffer_len,
MPI_CHAR, i, np*BOND_LINES+i, mpi_data->world, &status );
MPI_Get_count( &status, MPI_CHAR, &cnt );
buffer_len += cnt;
}
out_control->buffer[buffer_len] = 0;
fprintf( out_control->strj, "%s", out_control->buffer );
}
return SUCCESS;
}
int Write_Angles( reax_system *system, control_params *control,
reax_list *bonds, reax_list *thb_intrs,
output_controls *out_control, mpi_datatypes *mpi_data )
{
int i, j, k, pi, pk, me, np;
int my_angles, num_angles;
int line_len, buffer_len, buffer_req, cnt;
bond_data *bo_ij, *bo_jk;
three_body_interaction_data *angle_ijk;
MPI_Status status;
me = system->my_rank;
np = system->wsize;
line_len = out_control->angle_line_len;
/* count the number of valence angles I will output */
my_angles = 0;
for( j = 0; j < system->n; ++j )
for( pi = Start_Index(j, bonds); pi < End_Index(j, bonds); ++pi ) {
bo_ij = &(bonds->select.bond_list[pi]);
i = bo_ij->nbr;
if( bo_ij->bo_data.BO >= control->bg_cut ) // physical j&i bond
for( pk = Start_Index( pi, thb_intrs );
pk < End_Index( pi, thb_intrs ); ++pk ) {
angle_ijk = &(thb_intrs->select.three_body_list[pk]);
k = angle_ijk->thb;
bo_jk = &(bonds->select.bond_list[ angle_ijk->pthb ]);
if( system->my_atoms[i].orig_id < system->my_atoms[k].orig_id &&
bo_jk->bo_data.BO >= control->bg_cut ) // physical j&k bond
++my_angles;
}
}
/* total number of valences */
MPI_Allreduce(&my_angles, &num_angles, 1, MPI_INT, MPI_SUM, mpi_data->world);
Write_Skip_Line( out_control, mpi_data, me, num_angles*line_len, num_angles );
if( out_control->traj_method == REG_TRAJ && me == MASTER_NODE )
buffer_req = num_angles * line_len + 1;
else buffer_req = my_angles * line_len + 1;
if( buffer_req > out_control->buffer_len * DANGER_ZONE )
Reallocate_Output_Buffer( out_control, buffer_req, mpi_data->world );
/* fill in the buffer */
my_angles = 0;
out_control->line[0] = 0;
out_control->buffer[0] = 0;
for( j = 0; j < system->n; ++j )
for( pi = Start_Index(j, bonds); pi < End_Index(j, bonds); ++pi ) {
bo_ij = &(bonds->select.bond_list[pi]);
i = bo_ij->nbr;
if( bo_ij->bo_data.BO >= control->bg_cut ) // physical j&i bond
for( pk = Start_Index( pi, thb_intrs );
pk < End_Index( pi, thb_intrs ); ++pk ) {
angle_ijk = &(thb_intrs->select.three_body_list[pk]);
k = angle_ijk->thb;
bo_jk = &(bonds->select.bond_list[ angle_ijk->pthb ]);
if( system->my_atoms[i].orig_id < system->my_atoms[k].orig_id &&
bo_jk->bo_data.BO >= control->bg_cut ) { // physical j&k bond
sprintf( out_control->line, ANGLE_BASIC,
system->my_atoms[i].orig_id, system->my_atoms[j].orig_id,
system->my_atoms[k].orig_id, RAD2DEG( angle_ijk->theta ) );
strncpy( out_control->buffer + my_angles*line_len,
out_control->line, line_len+1 );
++my_angles;
}
}
}
if( me != MASTER_NODE )
MPI_Send( out_control->buffer, buffer_req-1, MPI_CHAR, MASTER_NODE,
np*ANGLE_LINES+me, mpi_data->world );
else{
buffer_len = my_angles * line_len;
for( i = 0; i < np; ++i )
if( i != MASTER_NODE ) {
MPI_Recv( out_control->buffer + buffer_len, buffer_req - buffer_len,
MPI_CHAR, i, np*ANGLE_LINES+i, mpi_data->world, &status );
MPI_Get_count( &status, MPI_CHAR, &cnt );
buffer_len += cnt;
}
out_control->buffer[buffer_len] = 0;
fprintf( out_control->strj, "%s", out_control->buffer );
}
return SUCCESS;
}
int Append_Frame( reax_system *system, control_params *control,
simulation_data *data, reax_list **lists,
output_controls *out_control, mpi_datatypes *mpi_data )
{
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: appending frame %d\n", system->my_rank, data->step );
-#endif
Write_Frame_Header( system, control, data, out_control, mpi_data );
if( out_control->write_atoms )
Write_Atoms( system, control, out_control, mpi_data );
if( out_control->write_bonds )
Write_Bonds( system, control, (*lists + BONDS), out_control, mpi_data );
if( out_control->write_angles )
Write_Angles( system, control, (*lists + BONDS), (*lists + THREE_BODIES),
out_control, mpi_data );
-#if defined(DEBUG_FOCUS)
- fprintf( stderr, "p%d: appended frame %d\n", system->my_rank, data->step );
-#endif
return SUCCESS;
}
int End_Traj( int my_rank, output_controls *out_control )
{
if( my_rank == MASTER_NODE )
fclose( out_control->strj );
free( out_control->buffer );
free( out_control->line );
return SUCCESS;
}
diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h
index 26b728631..b05e86f16 100644
--- a/src/USER-REAXC/reaxc_types.h
+++ b/src/USER-REAXC/reaxc_types.h
@@ -1,964 +1,854 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#ifndef __REAX_TYPES_H_
#define __REAX_TYPES_H_
#include "lmptype.h"
#include "ctype.h"
#include "math.h"
#include "mpi.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/time.h"
#include "time.h"
/************* SOME DEFS - crucial for reax_types.h *********/
-// only LAMMPS is supported by this code
#define LAMMPS_REAX
//#define DEBUG
//#define DEBUG_FOCUS
//#define TEST_ENERGY
//#define TEST_FORCES
//#define CG_PERFORMANCE
-#define LOG_PERFORMANCE
-#define STANDARD_BOUNDARIES
+//#define LOG_PERFORMANCE
+//#define STANDARD_BOUNDARIES
//#define OLD_BOUNDARIES
//#define MIDPOINT_BOUNDARIES
#define REAX_MAX_STR 1024
#define REAX_MAX_NBRS 6
#define REAX_MAX_3BODY_PARAM 5
#define REAX_MAX_4BODY_PARAM 5
#define REAX_MAX_ATOM_TYPES 25
#define REAX_MAX_MOLECULE_SIZE 20
#define MAX_BOND 20 // same as reaxc_defs.h
/********************** TYPE DEFINITIONS ********************/
typedef int ivec[3];
typedef double real;
typedef real rvec[3];
typedef real rtensor[3][3];
typedef real rvec2[2];
typedef real rvec4[4];
// import LAMMPS' definition of tagint
typedef LAMMPS_NS::tagint rc_tagint;
typedef struct
{
- //int ncells;
- //int *cnt_by_gcell;
-
int cnt;
- //int *block;
int *index;
- //MPI_Datatype out_dtype;
void *out_atoms;
} mpi_out_data;
typedef struct
{
MPI_Comm world;
MPI_Comm comm_mesh3D;
MPI_Datatype sys_info;
MPI_Datatype mpi_atom_type;
MPI_Datatype boundary_atom_type;
MPI_Datatype mpi_rvec, mpi_rvec2;
MPI_Datatype restart_atom_type;
MPI_Datatype header_line;
MPI_Datatype header_view;
MPI_Datatype init_desc_line;
MPI_Datatype init_desc_view;
MPI_Datatype atom_line;
MPI_Datatype atom_view;
MPI_Datatype bond_line;
MPI_Datatype bond_view;
MPI_Datatype angle_line;
MPI_Datatype angle_view;
- //MPI_Request send_req1[REAX_MAX_NBRS];
- //MPI_Request send_req2[REAX_MAX_NBRS];
- //MPI_Status send_stat1[REAX_MAX_NBRS];
- //MPI_Status send_stat2[REAX_MAX_NBRS];
- //MPI_Status recv_stat1[REAX_MAX_NBRS];
- //MPI_Status recv_stat2[REAX_MAX_NBRS];
-
mpi_out_data out_buffers[REAX_MAX_NBRS];
void *in1_buffer;
void *in2_buffer;
} mpi_datatypes;
-/* Global params mapping */
-/*
-l[0] = p_boc1
-l[1] = p_boc2
-l[2] = p_coa2
-l[3] = N/A
-l[4] = N/A
-l[5] = N/A
-l[6] = p_ovun6
-l[7] = N/A
-l[8] = p_ovun7
-l[9] = p_ovun8
-l[10] = N/A
-l[11] = swa
-l[12] = swb
-l[13] = N/A
-l[14] = p_val6
-l[15] = p_lp1
-l[16] = p_val9
-l[17] = p_val10
-l[18] = N/A
-l[19] = p_pen2
-l[20] = p_pen3
-l[21] = p_pen4
-l[22] = N/A
-l[23] = p_tor2
-l[24] = p_tor3
-l[25] = p_tor4
-l[26] = N/A
-l[27] = p_cot2
-l[28] = p_vdW1
-l[29] = v_par30
-l[30] = p_coa4
-l[31] = p_ovun4
-l[32] = p_ovun3
-l[33] = p_val8
-l[34] = N/A
-l[35] = N/A
-l[36] = N/A
-l[37] = version number
-l[38] = p_coa3
-*/
-
typedef struct
{
int n_global;
real* l;
int vdw_type;
} global_parameters;
typedef struct
{
/* Line one in field file */
char name[15]; // Two character atom name
real r_s;
real valency; // Valency of the atom
real mass; // Mass of atom
real r_vdw;
real epsilon;
real gamma;
real r_pi;
real valency_e;
real nlp_opt;
/* Line two in field file */
real alpha;
real gamma_w;
real valency_boc;
real p_ovun5;
real chi;
real eta;
int p_hbond; // 1 for H, 2 for hbonding atoms (O,S,P,N), 0 for others
/* Line three in field file */
real r_pi_pi;
real p_lp2;
real b_o_131;
real b_o_132;
real b_o_133;
/* Line four in the field file */
real p_ovun2;
real p_val3;
real valency_val;
real p_val5;
real rcore2;
real ecore2;
real acore2;
/* Line five in the ffield file, only for lgvdw yes */
real lgcij;
real lgre;
} single_body_parameters;
/* Two Body Parameters */
typedef struct {
/* Bond Order parameters */
real p_bo1,p_bo2,p_bo3,p_bo4,p_bo5,p_bo6;
real r_s, r_p, r_pp; // r_o distances in BO formula
real p_boc3, p_boc4, p_boc5;
/* Bond Energy parameters */
real p_be1, p_be2;
real De_s, De_p, De_pp;
/* Over/Under coordination parameters */
real p_ovun1;
/* Van der Waal interaction parameters */
real D;
real alpha;
real r_vdW;
real gamma_w;
real rcore, ecore, acore;
real lgcij, lgre;
/* electrostatic parameters */
real gamma; // note: this parameter is gamma^-3 and not gamma.
real v13cor, ovc;
} two_body_parameters;
/* 3-body parameters */
typedef struct {
/* valence angle */
real theta_00;
real p_val1, p_val2, p_val4, p_val7;
/* penalty */
real p_pen1;
/* 3-body conjugation */
real p_coa1;
} three_body_parameters;
typedef struct{
int cnt;
three_body_parameters prm[REAX_MAX_3BODY_PARAM];
} three_body_header;
/* hydrogen-bond parameters */
typedef struct{
real r0_hb, p_hb1, p_hb2, p_hb3;
} hbond_parameters;
/* 4-body parameters */
typedef struct {
real V1, V2, V3;
/* torsion angle */
real p_tor1;
/* 4-body conjugation */
real p_cot1;
} four_body_parameters;
typedef struct
{
int cnt;
four_body_parameters prm[REAX_MAX_4BODY_PARAM];
} four_body_header;
typedef struct
{
int num_atom_types;
global_parameters gp;
single_body_parameters *sbp;
two_body_parameters **tbp;
three_body_header ***thbp;
hbond_parameters ***hbp;
four_body_header ****fbp;
} reax_interaction;
struct _reax_atom
{
rc_tagint orig_id;
int imprt_id;
int type;
char name[8];
rvec x; // position
rvec v; // velocity
rvec f; // force
rvec f_old;
real q; // charge
rvec4 s; // they take part in
rvec4 t; // computing q
int Hindex;
int num_bonds;
int num_hbonds;
int renumber;
int numbonds; // true number of bonds around atoms
int nbr_id[MAX_BOND]; // ids of neighbors around atoms
double nbr_bo[MAX_BOND]; // BO values of bond between i and nbr
double sum_bo, no_lp; // sum of BO values and no. of lone pairs
};
typedef _reax_atom reax_atom;
typedef struct
{
real V;
rvec min, max, box_norms;
rtensor box, box_inv;
rtensor trans, trans_inv;
rtensor g;
} simulation_box;
struct grid_cell
{
real cutoff;
rvec min, max;
ivec rel_box;
int mark;
int type;
int str;
int end;
int top;
int* atoms;
struct grid_cell** nbrs;
ivec* nbrs_x;
rvec* nbrs_cp;
};
typedef struct grid_cell grid_cell;
typedef struct
{
int total, max_atoms, max_nbrs;
ivec ncells;
rvec cell_len;
rvec inv_len;
ivec bond_span;
ivec nonb_span;
ivec vlist_span;
ivec native_cells;
ivec native_str;
ivec native_end;
real ghost_cut;
ivec ghost_span;
ivec ghost_nonb_span;
ivec ghost_hbond_span;
ivec ghost_bond_span;
grid_cell*** cells;
ivec *order;
} grid;
typedef struct
{
int rank;
int est_send, est_recv;
int atoms_str, atoms_cnt;
ivec rltv, prdc;
rvec bndry_min, bndry_max;
int send_type;
int recv_type;
ivec str_send;
ivec end_send;
ivec str_recv;
ivec end_recv;
} neighbor_proc;
typedef struct
{
int N;
int exc_gcells;
int exc_atoms;
} bound_estimate;
typedef struct
{
real ghost_nonb;
real ghost_hbond;
real ghost_bond;
real ghost_cutoff;
} boundary_cutoff;
using LAMMPS_NS::Pair;
struct _reax_system
{
reax_interaction reax_param;
int n, N, bigN, numH;
int local_cap, total_cap, gcell_cap, Hcap;
int est_recv, est_trans, max_recved;
int wsize, my_rank, num_nbrs;
ivec my_coords;
neighbor_proc my_nbrs[REAX_MAX_NBRS];
int *global_offset;
simulation_box big_box, my_box, my_ext_box;
grid my_grid;
boundary_cutoff bndry_cuts;
reax_atom *my_atoms;
class Pair *pair_ptr;
int my_bonds;
int mincap;
real safezone, saferzone;
};
typedef _reax_system reax_system;
/* system control parameters */
typedef struct
{
char sim_name[REAX_MAX_STR];
int nprocs;
ivec procs_by_dim;
/* ensemble values:
0 : NVE
1 : bNVT (Berendsen)
2 : nhNVT (Nose-Hoover)
3 : sNPT (Parrinello-Rehman-Nose-Hoover) semiisotropic
4 : iNPT (Parrinello-Rehman-Nose-Hoover) isotropic
5 : NPT (Parrinello-Rehman-Nose-Hoover) Anisotropic*/
int ensemble;
int nsteps;
real dt;
int geo_format;
int restart;
int restrict_bonds;
int remove_CoM_vel;
int random_vel;
int reposition_atoms;
int reneighbor;
real vlist_cut;
real bond_cut;
real nonb_cut, nonb_low;
real hbond_cut;
real user_ghost_cut;
real bg_cut;
real bo_cut;
real thb_cut;
real thb_cutsq;
int tabulate;
int qeq_freq;
real q_err;
int refactor;
real droptol;
real T_init, T_final, T;
real Tau_T;
int T_mode;
real T_rate, T_freq;
int virial;
rvec P, Tau_P, Tau_PT;
int press_mode;
real compressibility;
int molecular_analysis;
int num_ignored;
int ignore[REAX_MAX_ATOM_TYPES];
int dipole_anal;
int freq_dipole_anal;
int diffusion_coef;
int freq_diffusion_coef;
int restrict_type;
int lgflag;
} control_params;
typedef struct
{
real T;
real xi;
real v_xi;
real v_xi_old;
real G_xi;
} thermostat;
typedef struct
{
real P;
real eps;
real v_eps;
real v_eps_old;
real a_eps;
} isotropic_barostat;
typedef struct
{
rtensor P;
real P_scalar;
real eps;
real v_eps;
real v_eps_old;
real a_eps;
rtensor h0;
rtensor v_g0;
rtensor v_g0_old;
rtensor a_g0;
} flexible_barostat;
typedef struct
{
real start;
real end;
real elapsed;
real total;
real comm;
real nbrs;
real init_forces;
real bonded;
real nonb;
real qEq;
int s_matvecs;
int t_matvecs;
} reax_timing;
typedef struct
{
real e_tot;
real e_kin; // Total kinetic energy
real e_pot;
real e_bond; // Total bond energy
real e_ov; // Total over coordination
real e_un; // Total under coordination energy
real e_lp; // Total under coordination energy
real e_ang; // Total valance angle energy
real e_pen; // Total penalty energy
real e_coa; // Total three body conjgation energy
real e_hb; // Total Hydrogen bond energy
real e_tor; // Total torsional energy
real e_con; // Total four body conjugation energy
real e_vdW; // Total van der Waals energy
real e_ele; // Total electrostatics energy
real e_pol; // Polarization energy
} energy_data;
typedef struct
{
int step;
int prev_steps;
real time;
real M; // Total Mass
real inv_M; // 1 / Total Mass
rvec xcm; // Center of mass
rvec vcm; // Center of mass velocity
rvec fcm; // Center of mass force
rvec amcm; // Angular momentum of CoM
rvec avcm; // Angular velocity of CoM
real etran_cm; // Translational kinetic energy of CoM
real erot_cm; // Rotational kinetic energy of CoM
rtensor kinetic; // Kinetic energy tensor
rtensor virial; // Hydrodynamic virial
energy_data my_en;
energy_data sys_en;
real N_f; //Number of degrees of freedom
rvec t_scale;
rtensor p_scale;
thermostat therm; // Used in Nose_Hoover method
isotropic_barostat iso_bar;
flexible_barostat flex_bar;
real inv_W;
real kin_press;
rvec int_press;
rvec my_ext_press;
rvec ext_press;
rvec tot_press;
reax_timing timing;
} simulation_data;
typedef struct{
int thb;
int pthb; // pointer to the third body on the central atom's nbrlist
real theta, cos_theta;
rvec dcos_di, dcos_dj, dcos_dk;
} three_body_interaction_data;
typedef struct {
int nbr;
ivec rel_box;
real d;
rvec dvec;
} far_neighbor_data;
typedef struct {
int nbr;
int scl;
far_neighbor_data *ptr;
} hbond_data;
typedef struct{
int wrt;
rvec dVal;
} dDelta_data;
typedef struct{
int wrt;
rvec dBO, dBOpi, dBOpi2;
} dbond_data;
typedef struct{
real BO, BO_s, BO_pi, BO_pi2;
real Cdbo, Cdbopi, Cdbopi2;
real C1dbo, C2dbo, C3dbo;
real C1dbopi, C2dbopi, C3dbopi, C4dbopi;
real C1dbopi2, C2dbopi2, C3dbopi2, C4dbopi2;
rvec dBOp, dln_BOp_s, dln_BOp_pi, dln_BOp_pi2;
} bond_order_data;
typedef struct {
int nbr;
int sym_index;
int dbond_index;
ivec rel_box;
// rvec ext_factor;
real d;
rvec dvec;
bond_order_data bo_data;
} bond_data;
typedef struct {
int j;
real val;
} sparse_matrix_entry;
typedef struct {
int cap, n, m;
int *start, *end;
sparse_matrix_entry *entries;
} sparse_matrix;
typedef struct {
int num_far;
int H, Htop;
int hbonds, num_hbonds;
int bonds, num_bonds;
int num_3body;
int gcell_atoms;
} reallocate_data;
typedef struct
{
int allocated;
/* communication storage */
real *tmp_dbl[REAX_MAX_NBRS];
rvec *tmp_rvec[REAX_MAX_NBRS];
rvec2 *tmp_rvec2[REAX_MAX_NBRS];
int *within_bond_box;
/* bond order related storage */
real *total_bond_order;
real *Deltap, *Deltap_boc;
real *Delta, *Delta_lp, *Delta_lp_temp, *Delta_e, *Delta_boc, *Delta_val;
real *dDelta_lp, *dDelta_lp_temp;
real *nlp, *nlp_temp, *Clp, *vlpex;
rvec *dDeltap_self;
int *bond_mark, *done_after;
/* QEq storage */
sparse_matrix *H, *L, *U;
real *Hdia_inv, *b_s, *b_t, *b_prc, *b_prm, *s, *t;
real *droptol;
rvec2 *b, *x;
/* GMRES storage */
real *y, *z, *g;
real *hc, *hs;
real **h, **v;
/* CG storage */
real *r, *d, *q, *p;
rvec2 *r2, *d2, *q2, *p2;
/* Taper */
real Tap[8]; //Tap7, Tap6, Tap5, Tap4, Tap3, Tap2, Tap1, Tap0;
/* storage for analysis */
int *mark, *old_mark;
rvec *x_old;
/* storage space for bond restrictions */
int *restricted;
int **restricted_list;
/* integrator */
rvec *v_const;
/* force calculations */
real *CdDelta; // coefficient of dDelta
rvec *f;
-#ifdef TEST_FORCES
- rvec *f_ele;
- rvec *f_vdw;
- rvec *f_bo;
- rvec *f_be;
- rvec *f_lp;
- rvec *f_ov;
- rvec *f_un;
- rvec *f_ang;
- rvec *f_coa;
- rvec *f_pen;
- rvec *f_hb;
- rvec *f_tor;
- rvec *f_con;
- rvec *f_tot;
- rvec *dDelta; // calculated on the fly in bond_orders.c together with bo'
-
- int *rcounts;
- int *displs;
- int *id_all;
- rvec *f_all;
-#endif
reallocate_data realloc;
- //int *num_bonds;
- /* hydrogen bonds */
- //int num_H, Hcap;
- //int *Hindex;
- //int *num_hbonds;
- //int *hash;
- //int *rev_hash;
} storage;
typedef union
{
void *v;
three_body_interaction_data *three_body_list;
bond_data *bond_list;
dbond_data *dbo_list;
dDelta_data *dDelta_list;
far_neighbor_data *far_nbr_list;
hbond_data *hbond_list;
} list_type;
struct _reax_list
{
int allocated;
int n;
int num_intrs;
int *index;
int *end_index;
int type;
list_type select;
};
typedef _reax_list reax_list;
typedef struct
{
FILE *strj;
int trj_offset;
int atom_line_len;
int bond_line_len;
int angle_line_len;
int write_atoms;
int write_bonds;
int write_angles;
char *line;
int buffer_len;
char *buffer;
FILE *out;
FILE *pot;
FILE *log;
FILE *mol, *ign;
FILE *dpl;
FILE *drft;
FILE *pdb;
FILE *prs;
int write_steps;
int traj_compress;
int traj_method;
char traj_title[81];
int atom_info;
int bond_info;
int angle_info;
int restart_format;
int restart_freq;
int debug_level;
int energy_update_freq;
-#ifdef TEST_ENERGY
- FILE *ebond;
- FILE *elp, *eov, *eun;
- FILE *eval, *epen, *ecoa;
- FILE *ehb;
- FILE *etor, *econ;
- FILE *evdw, *ecou;
-#endif
-
-#ifdef TEST_FORCES
- FILE *fbo, *fdbo;
- FILE *fbond;
- FILE *flp, *fov, *fun;
- FILE *fang, *fcoa, *fpen;
- FILE *fhb;
- FILE *ftor, *fcon;
- FILE *fvdw, *fele;
- FILE *ftot, *fcomp;
-#endif
-
-#if defined(TEST_ENERGY) || defined(TEST_FORCES)
- FILE *flist; // far neighbor list
- FILE *blist; // bond list
- FILE *nlist; // near neighbor list
-#endif
} output_controls;
typedef struct
{
int atom_count;
int atom_list[REAX_MAX_MOLECULE_SIZE];
int mtypes[REAX_MAX_ATOM_TYPES];
} molecule;
typedef struct
{
real H;
real e_vdW, CEvd;
real e_ele, CEclmb;
} LR_data;
typedef struct
{
real a, b, c, d;
} cubic_spline_coef;
typedef struct
{
real xmin, xmax;
int n;
real dx, inv_dx;
real a;
real m;
real c;
LR_data *y;
cubic_spline_coef *H;
cubic_spline_coef *vdW, *CEvd;
cubic_spline_coef *ele, *CEclmb;
} LR_lookup_table;
extern LR_lookup_table **LR;
/* function pointer defs */
typedef void (*evolve_function)(reax_system*, control_params*,
simulation_data*, storage*, reax_list**,
output_controls*, mpi_datatypes* );
typedef void (*interaction_function) (reax_system*, control_params*,
simulation_data*, storage*,
reax_list**, output_controls*);
typedef void (*print_interaction)(reax_system*, control_params*,
simulation_data*, storage*,
reax_list**, output_controls*);
typedef real (*lookup_function)(real);
typedef void (*message_sorter) (reax_system*, int, int, int, mpi_out_data*);
typedef void (*unpacker) ( reax_system*, int, void*, int, neighbor_proc*, int );
typedef void (*dist_packer) (void*, mpi_out_data*);
typedef void (*coll_unpacker) (void*, void*, mpi_out_data*);
#endif
diff --git a/src/USER-REAXC/reaxc_valence_angles.cpp b/src/USER-REAXC/reaxc_valence_angles.cpp
index b4430cbf0..09221788a 100644
--- a/src/USER-REAXC/reaxc_valence_angles.cpp
+++ b/src/USER-REAXC/reaxc_valence_angles.cpp
@@ -1,563 +1,406 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
-#if defined(PURE_REAX)
-#include "valence_angles.h"
-#include "bond_orders.h"
-#include "list.h"
-#include "vector.h"
-#elif defined(LAMMPS_REAX)
#include "reaxc_valence_angles.h"
#include "reaxc_bond_orders.h"
#include "reaxc_list.h"
#include "reaxc_vector.h"
-#endif
-
-/* calculates the theta angle between i-j-k */
void Calculate_Theta( rvec dvec_ji, real d_ji, rvec dvec_jk, real d_jk,
real *theta, real *cos_theta )
{
(*cos_theta) = Dot( dvec_ji, dvec_jk, 3 ) / ( d_ji * d_jk );
if( *cos_theta > 1. ) *cos_theta = 1.0;
if( *cos_theta < -1. ) *cos_theta = -1.0;
(*theta) = acos( *cos_theta );
}
-
-/* calculates the derivative of the cosine of the angle between i-j-k */
void Calculate_dCos_Theta( rvec dvec_ji, real d_ji, rvec dvec_jk, real d_jk,
rvec* dcos_theta_di,
rvec* dcos_theta_dj,
rvec* dcos_theta_dk )
{
int t;
real sqr_d_ji = SQR(d_ji);
real sqr_d_jk = SQR(d_jk);
real inv_dists = 1.0 / (d_ji * d_jk);
real inv_dists3 = pow( inv_dists, 3.0 );
real dot_dvecs = Dot( dvec_ji, dvec_jk, 3 );
real Cdot_inv3 = dot_dvecs * inv_dists3;
for( t = 0; t < 3; ++t ) {
(*dcos_theta_di)[t] = dvec_jk[t] * inv_dists -
Cdot_inv3 * sqr_d_jk * dvec_ji[t];
(*dcos_theta_dj)[t] = -(dvec_jk[t] + dvec_ji[t]) * inv_dists +
Cdot_inv3 * ( sqr_d_jk * dvec_ji[t] + sqr_d_ji * dvec_jk[t] );
(*dcos_theta_dk)[t] = dvec_ji[t] * inv_dists -
Cdot_inv3 * sqr_d_ji * dvec_jk[t];
}
}
-/* this is a 3-body interaction in which the main role is
- played by j which sits in the middle of the other two. */
void Valence_Angles( reax_system *system, control_params *control,
simulation_data *data, storage *workspace,
reax_list **lists, output_controls *out_control )
{
int i, j, pi, k, pk, t;
int type_i, type_j, type_k;
int start_j, end_j, start_pk, end_pk;
int cnt, num_thb_intrs;
real temp, temp_bo_jt, pBOjt7;
real p_val1, p_val2, p_val3, p_val4, p_val5;
real p_val6, p_val7, p_val8, p_val9, p_val10;
real p_pen1, p_pen2, p_pen3, p_pen4;
real p_coa1, p_coa2, p_coa3, p_coa4;
real trm8, expval6, expval7, expval2theta, expval12theta, exp3ij, exp3jk;
real exp_pen2ij, exp_pen2jk, exp_pen3, exp_pen4, trm_pen34, exp_coa2;
real dSBO1, dSBO2, SBO, SBO2, CSBO2, SBOp, prod_SBO, vlpadj;
real CEval1, CEval2, CEval3, CEval4, CEval5, CEval6, CEval7, CEval8;
real CEpen1, CEpen2, CEpen3;
real e_ang, e_coa, e_pen;
real CEcoa1, CEcoa2, CEcoa3, CEcoa4, CEcoa5;
real Cf7ij, Cf7jk, Cf8j, Cf9j;
real f7_ij, f7_jk, f8_Dj, f9_Dj;
real Ctheta_0, theta_0, theta_00, theta, cos_theta, sin_theta;
real BOA_ij, BOA_jk;
rvec force, ext_press;
- // rtensor temp_rtensor, total_rtensor;
// Tallying variables
real eng_tmp, fi_tmp[3], fj_tmp[3], fk_tmp[3];
real delij[3], delkj[3];
three_body_header *thbh;
three_body_parameters *thbp;
three_body_interaction_data *p_ijk, *p_kji;
bond_data *pbond_ij, *pbond_jk, *pbond_jt;
bond_order_data *bo_ij, *bo_jk, *bo_jt;
reax_list *bonds = (*lists) + BONDS;
reax_list *thb_intrs = (*lists) + THREE_BODIES;
/* global parameters used in these calculations */
p_val6 = system->reax_param.gp.l[14];
p_val8 = system->reax_param.gp.l[33];
p_val9 = system->reax_param.gp.l[16];
p_val10 = system->reax_param.gp.l[17];
num_thb_intrs = 0;
for( j = 0; j < system->N; ++j ) { // Ray: the first one with system->N
- // fprintf( out_control->eval, "j: %d\n", j );
type_j = system->my_atoms[j].type;
+ if (type_j < 0) continue;
start_j = Start_Index(j, bonds);
end_j = End_Index(j, bonds);
p_val3 = system->reax_param.sbp[ type_j ].p_val3;
p_val5 = system->reax_param.sbp[ type_j ].p_val5;
SBOp = 0, prod_SBO = 1;
for( t = start_j; t < end_j; ++t ) {
bo_jt = &(bonds->select.bond_list[t].bo_data);
SBOp += (bo_jt->BO_pi + bo_jt->BO_pi2);
temp = SQR( bo_jt->BO );
temp *= temp;
temp *= temp;
prod_SBO *= exp( -temp );
}
- /* modifications to match Adri's code - 09/01/09 */
if( workspace->vlpex[j] >= 0 ){
vlpadj = 0;
dSBO2 = prod_SBO - 1;
}
else{
vlpadj = workspace->nlp[j];
dSBO2 = (prod_SBO - 1) * (1 - p_val8 * workspace->dDelta_lp[j]);
}
SBO = SBOp + (1 - prod_SBO) * (-workspace->Delta_boc[j] - p_val8 * vlpadj);
dSBO1 = -8 * prod_SBO * ( workspace->Delta_boc[j] + p_val8 * vlpadj );
if( SBO <= 0 )
SBO2 = 0, CSBO2 = 0;
else if( SBO > 0 && SBO <= 1 ) {
SBO2 = pow( SBO, p_val9 );
CSBO2 = p_val9 * pow( SBO, p_val9 - 1 );
}
else if( SBO > 1 && SBO < 2 ) {
SBO2 = 2 - pow( 2-SBO, p_val9 );
CSBO2 = p_val9 * pow( 2 - SBO, p_val9 - 1 );
}
else
SBO2 = 2, CSBO2 = 0;
expval6 = exp( p_val6 * workspace->Delta_boc[j] );
for( pi = start_j; pi < end_j; ++pi ) {
Set_Start_Index( pi, num_thb_intrs, thb_intrs );
pbond_ij = &(bonds->select.bond_list[pi]);
bo_ij = &(pbond_ij->bo_data);
BOA_ij = bo_ij->BO - control->thb_cut;
if( BOA_ij/*bo_ij->BO*/ > 0.0 &&
( j < system->n || pbond_ij->nbr < system->n ) ) {
i = pbond_ij->nbr;
type_i = system->my_atoms[i].type;
- // fprintf( out_control->eval, "i: %d\n", i );
-
- /* first copy 3-body intrs from previously computed ones where i>k.
- in the second for-loop below,
- we compute only new 3-body intrs where i < k */
for( pk = start_j; pk < pi; ++pk ) {
- // fprintf( out_control->eval, "pk: %d\n", pk );
start_pk = Start_Index( pk, thb_intrs );
end_pk = End_Index( pk, thb_intrs );
for( t = start_pk; t < end_pk; ++t )
if( thb_intrs->select.three_body_list[t].thb == i ) {
p_ijk = &(thb_intrs->select.three_body_list[num_thb_intrs] );
p_kji = &(thb_intrs->select.three_body_list[t]);
p_ijk->thb = bonds->select.bond_list[pk].nbr;
p_ijk->pthb = pk;
p_ijk->theta = p_kji->theta;
rvec_Copy( p_ijk->dcos_di, p_kji->dcos_dk );
rvec_Copy( p_ijk->dcos_dj, p_kji->dcos_dj );
rvec_Copy( p_ijk->dcos_dk, p_kji->dcos_di );
++num_thb_intrs;
break;
}
}
-
- /* and this is the second for loop mentioned above */
for( pk = pi+1; pk < end_j; ++pk ) {
pbond_jk = &(bonds->select.bond_list[pk]);
bo_jk = &(pbond_jk->bo_data);
BOA_jk = bo_jk->BO - control->thb_cut;
k = pbond_jk->nbr;
type_k = system->my_atoms[k].type;
p_ijk = &( thb_intrs->select.three_body_list[num_thb_intrs] );
Calculate_Theta( pbond_ij->dvec, pbond_ij->d,
pbond_jk->dvec, pbond_jk->d,
&theta, &cos_theta );
Calculate_dCos_Theta( pbond_ij->dvec, pbond_ij->d,
pbond_jk->dvec, pbond_jk->d,
&(p_ijk->dcos_di), &(p_ijk->dcos_dj),
&(p_ijk->dcos_dk) );
p_ijk->thb = k;
p_ijk->pthb = pk;
p_ijk->theta = theta;
sin_theta = sin( theta );
if( sin_theta < 1.0e-5 )
sin_theta = 1.0e-5;
++num_thb_intrs;
if( (j < system->n) && (BOA_jk > 0.0) &&
(bo_ij->BO > control->thb_cut) &&
(bo_jk->BO > control->thb_cut) &&
(bo_ij->BO * bo_jk->BO > control->thb_cutsq) ) {
thbh = &( system->reax_param.thbp[ type_i ][ type_j ][ type_k ] );
- /* if( system->my_atoms[i].orig_id < system->my_atoms[k].orig_id )
- fprintf( fval, "%6d %6d %6d %7.3f %7.3f %7.3f\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- bo_ij->BO, bo_jk->BO, p_ijk->theta );
- else
- fprintf( fval, "%6d %6d %6d %7.3f %7.3f %7.3f\n",
- system->my_atoms[k].orig_id,
- system->my_atoms[j].orig_id,
- system->my_atoms[i].orig_id,
- bo_jk->BO, bo_ij->BO, p_ijk->theta ); */
-
for( cnt = 0; cnt < thbh->cnt; ++cnt ) {
- // fprintf( out_control->eval, "%6d%6d%6d -- exists in thbp\n",
- // i+1, j+1, k+1 );
-
if( fabs(thbh->prm[cnt].p_val1) > 0.001 ) {
thbp = &( thbh->prm[cnt] );
/* ANGLE ENERGY */
p_val1 = thbp->p_val1;
p_val2 = thbp->p_val2;
p_val4 = thbp->p_val4;
p_val7 = thbp->p_val7;
theta_00 = thbp->theta_00;
exp3ij = exp( -p_val3 * pow( BOA_ij, p_val4 ) );
f7_ij = 1.0 - exp3ij;
Cf7ij = p_val3 * p_val4 * pow( BOA_ij, p_val4 - 1.0 ) * exp3ij;
exp3jk = exp( -p_val3 * pow( BOA_jk, p_val4 ) );
f7_jk = 1.0 - exp3jk;
Cf7jk = p_val3 * p_val4 * pow( BOA_jk, p_val4 - 1.0 ) * exp3jk;
expval7 = exp( -p_val7 * workspace->Delta_boc[j] );
trm8 = 1.0 + expval6 + expval7;
f8_Dj = p_val5 - ( (p_val5 - 1.0) * (2.0 + expval6) / trm8 );
Cf8j = ( (1.0 - p_val5) / SQR(trm8) ) *
( p_val6 * expval6 * trm8 -
(2.0 + expval6) * ( p_val6*expval6 - p_val7*expval7 ) );
theta_0 = 180.0 - theta_00 * (1.0 -
exp(-p_val10 * (2.0 - SBO2)));
theta_0 = DEG2RAD( theta_0 );
expval2theta = exp( -p_val2 * SQR(theta_0 - theta) );
if( p_val1 >= 0 )
expval12theta = p_val1 * (1.0 - expval2theta);
else // To avoid linear Me-H-Me angles (6/6/06)
expval12theta = p_val1 * -expval2theta;
CEval1 = Cf7ij * f7_jk * f8_Dj * expval12theta;
CEval2 = Cf7jk * f7_ij * f8_Dj * expval12theta;
CEval3 = Cf8j * f7_ij * f7_jk * expval12theta;
CEval4 = -2.0 * p_val1 * p_val2 * f7_ij * f7_jk * f8_Dj *
expval2theta * (theta_0 - theta);
Ctheta_0 = p_val10 * DEG2RAD(theta_00) *
exp( -p_val10 * (2.0 - SBO2) );
CEval5 = -CEval4 * Ctheta_0 * CSBO2;
CEval6 = CEval5 * dSBO1;
CEval7 = CEval5 * dSBO2;
CEval8 = -CEval4 / sin_theta;
data->my_en.e_ang += e_ang =
f7_ij * f7_jk * f8_Dj * expval12theta;
/* END ANGLE ENERGY*/
-
/* PENALTY ENERGY */
p_pen1 = thbp->p_pen1;
p_pen2 = system->reax_param.gp.l[19];
p_pen3 = system->reax_param.gp.l[20];
p_pen4 = system->reax_param.gp.l[21];
exp_pen2ij = exp( -p_pen2 * SQR( BOA_ij - 2.0 ) );
exp_pen2jk = exp( -p_pen2 * SQR( BOA_jk - 2.0 ) );
exp_pen3 = exp( -p_pen3 * workspace->Delta[j] );
exp_pen4 = exp( p_pen4 * workspace->Delta[j] );
trm_pen34 = 1.0 + exp_pen3 + exp_pen4;
f9_Dj = ( 2.0 + exp_pen3 ) / trm_pen34;
Cf9j = ( -p_pen3 * exp_pen3 * trm_pen34 -
(2.0 + exp_pen3) * ( -p_pen3 * exp_pen3 +
p_pen4 * exp_pen4 ) ) /
SQR( trm_pen34 );
data->my_en.e_pen += e_pen =
p_pen1 * f9_Dj * exp_pen2ij * exp_pen2jk;
CEpen1 = e_pen * Cf9j / f9_Dj;
temp = -2.0 * p_pen2 * e_pen;
CEpen2 = temp * (BOA_ij - 2.0);
CEpen3 = temp * (BOA_jk - 2.0);
/* END PENALTY ENERGY */
-
/* COALITION ENERGY */
p_coa1 = thbp->p_coa1;
p_coa2 = system->reax_param.gp.l[2];
p_coa3 = system->reax_param.gp.l[38];
p_coa4 = system->reax_param.gp.l[30];
exp_coa2 = exp( p_coa2 * workspace->Delta_val[j] );
data->my_en.e_coa += e_coa =
p_coa1 / (1. + exp_coa2) *
exp( -p_coa3 * SQR(workspace->total_bond_order[i]-BOA_ij) ) *
exp( -p_coa3 * SQR(workspace->total_bond_order[k]-BOA_jk) ) *
exp( -p_coa4 * SQR(BOA_ij - 1.5) ) *
exp( -p_coa4 * SQR(BOA_jk - 1.5) );
CEcoa1 = -2 * p_coa4 * (BOA_ij - 1.5) * e_coa;
CEcoa2 = -2 * p_coa4 * (BOA_jk - 1.5) * e_coa;
CEcoa3 = -p_coa2 * exp_coa2 * e_coa / (1 + exp_coa2);
CEcoa4 = -2 * p_coa3 *
(workspace->total_bond_order[i]-BOA_ij) * e_coa;
CEcoa5 = -2 * p_coa3 *
(workspace->total_bond_order[k]-BOA_jk) * e_coa;
/* END COALITION ENERGY */
-
/* FORCES */
bo_ij->Cdbo += (CEval1 + CEpen2 + (CEcoa1 - CEcoa4));
bo_jk->Cdbo += (CEval2 + CEpen3 + (CEcoa2 - CEcoa5));
workspace->CdDelta[j] += ((CEval3 + CEval7) + CEpen1 + CEcoa3);
workspace->CdDelta[i] += CEcoa4;
workspace->CdDelta[k] += CEcoa5;
for( t = start_j; t < end_j; ++t ) {
pbond_jt = &( bonds->select.bond_list[t] );
bo_jt = &(pbond_jt->bo_data);
temp_bo_jt = bo_jt->BO;
temp = CUBE( temp_bo_jt );
pBOjt7 = temp * temp * temp_bo_jt;
- // fprintf( out_control->eval, "%6d%12.8f\n",
- // workspace->reverse_map[bonds->select.bond_list[t].nbr],
- // (CEval6 * pBOjt7) );
-
bo_jt->Cdbo += (CEval6 * pBOjt7);
bo_jt->Cdbopi += CEval5;
bo_jt->Cdbopi2 += CEval5;
}
if( control->virial == 0 ) {
rvec_ScaledAdd( workspace->f[i], CEval8, p_ijk->dcos_di );
rvec_ScaledAdd( workspace->f[j], CEval8, p_ijk->dcos_dj );
rvec_ScaledAdd( workspace->f[k], CEval8, p_ijk->dcos_dk );
}
else {
- /* terms not related to bond order derivatives are
- added directly into forces and pressure vector/tensor */
rvec_Scale( force, CEval8, p_ijk->dcos_di );
rvec_Add( workspace->f[i], force );
rvec_iMultiply( ext_press, pbond_ij->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
rvec_ScaledAdd( workspace->f[j], CEval8, p_ijk->dcos_dj );
rvec_Scale( force, CEval8, p_ijk->dcos_dk );
rvec_Add( workspace->f[k], force );
rvec_iMultiply( ext_press, pbond_jk->rel_box, force );
rvec_Add( data->my_ext_press, ext_press );
}
/* tally into per-atom virials */
if( system->pair_ptr->vflag_atom || system->pair_ptr->evflag) {
/* Acquire vectors */
rvec_ScaledSum( delij, 1., system->my_atoms[i].x,
-1., system->my_atoms[j].x );
rvec_ScaledSum( delkj, 1., system->my_atoms[k].x,
-1., system->my_atoms[j].x );
rvec_Scale( fi_tmp, -CEval8, p_ijk->dcos_di );
rvec_Scale( fj_tmp, -CEval8, p_ijk->dcos_dj );
rvec_Scale( fk_tmp, -CEval8, p_ijk->dcos_dk );
eng_tmp = e_ang + e_pen + e_coa;
if( system->pair_ptr->evflag)
system->pair_ptr->ev_tally(j,j,system->N,1,eng_tmp,0.0,0.0,0.0,0.0,0.0);
if( system->pair_ptr->vflag_atom)
system->pair_ptr->v_tally3(i,j,k,fi_tmp,fk_tmp,delij,delkj);
}
-
-#ifdef TEST_ENERGY
- /*fprintf( out_control->eval, "%12.8f%12.8f%12.8f%12.8f\n",
- p_val3, p_val4, BOA_ij, BOA_jk );
- fprintf(out_control->eval, "%13.8f%13.8f%13.8f%13.8f%13.8f\n",
- workspace->Delta_e[j], workspace->vlpex[j],
- dSBO1, dSBO2, vlpadj );
- fprintf( out_control->eval, "%12.8f%12.8f%12.8f%12.8f\n",
- f7_ij, f7_jk, f8_Dj, expval12theta );
- fprintf( out_control->eval,
- "%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",
- CEval1, CEval2, CEval3, CEval4,
- CEval5, CEval6, CEval7, CEval8 );
-
- fprintf( out_control->eval,
- "%12.8f%12.8f%12.8f\n%12.8f%12.8f%12.8f\n%12.8f%12.8f%12.8f\n",
- p_ijk->dcos_di[0]/sin_theta, p_ijk->dcos_di[1]/sin_theta,
- p_ijk->dcos_di[2]/sin_theta,
- p_ijk->dcos_dj[0]/sin_theta, p_ijk->dcos_dj[1]/sin_theta,
- p_ijk->dcos_dj[2]/sin_theta,
- p_ijk->dcos_dk[0]/sin_theta, p_ijk->dcos_dk[1]/sin_theta,
- p_ijk->dcos_dk[2]/sin_theta);
-
- fprintf( out_control->eval,
- "%6d%6d%6d%15.8f%15.8f\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- RAD2DEG(theta), e_ang );*/
-
- fprintf( out_control->eval,
- //"%6d%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- "%6d%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- RAD2DEG(theta), theta_0, BOA_ij, BOA_jk,
- e_ang, data->my_en.e_ang );
-
- fprintf( out_control->epen,
- //"%6d%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- "%6d%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- RAD2DEG(theta), BOA_ij, BOA_jk, e_pen,
- data->my_en.e_pen );
-
- fprintf( out_control->ecoa,
- //"%6d%6d%6d%24.15e%24.15e%24.15e%24.15e%24.15e\n",
- "%6d%6d%6d%12.4f%12.4f%12.4f%12.4f%12.4f\n",
- system->my_atoms[i].orig_id,
- system->my_atoms[j].orig_id,
- system->my_atoms[k].orig_id,
- RAD2DEG(theta), BOA_ij, BOA_jk,
- e_coa, data->my_en.e_coa );
-#endif
-
-#ifdef TEST_FORCES /* angle forces */
- Add_dBO( system, lists, j, pi, CEval1, workspace->f_ang );
- Add_dBO( system, lists, j, pk, CEval2, workspace->f_ang );
- Add_dDelta( system, lists, j,
- CEval3 + CEval7, workspace->f_ang );
-
- for( t = start_j; t < end_j; ++t ) {
- pbond_jt = &( bonds->select.bond_list[t] );
- bo_jt = &(pbond_jt->bo_data);
- temp_bo_jt = bo_jt->BO;
- temp = CUBE( temp_bo_jt );
- pBOjt7 = temp * temp * temp_bo_jt;
-
- Add_dBO( system, lists, j, t, pBOjt7 * CEval6,
- workspace->f_ang );
- Add_dBOpinpi2( system, lists, j, t, CEval5, CEval5,
- workspace->f_ang, workspace->f_ang );
- }
-
- rvec_ScaledAdd( workspace->f_ang[i], CEval8, p_ijk->dcos_di );
- rvec_ScaledAdd( workspace->f_ang[j], CEval8, p_ijk->dcos_dj );
- rvec_ScaledAdd( workspace->f_ang[k], CEval8, p_ijk->dcos_dk );
- /* end angle forces */
-
- /* penalty forces */
- Add_dDelta( system, lists, j, CEpen1, workspace->f_pen );
- Add_dBO( system, lists, j, pi, CEpen2, workspace->f_pen );
- Add_dBO( system, lists, j, pk, CEpen3, workspace->f_pen );
- /* end penalty forces */
-
- /* coalition forces */
- Add_dBO( system, lists, j, pi, CEcoa1 - CEcoa4,
- workspace->f_coa );
- Add_dBO( system, lists, j, pk, CEcoa2 - CEcoa5,
- workspace->f_coa );
- Add_dDelta( system, lists, j, CEcoa3, workspace->f_coa );
- Add_dDelta( system, lists, i, CEcoa4, workspace->f_coa );
- Add_dDelta( system, lists, k, CEcoa5, workspace->f_coa );
- /* end coalition forces */
-#endif
}
}
}
}
}
Set_End_Index(pi, num_thb_intrs, thb_intrs );
}
}
if( num_thb_intrs >= thb_intrs->num_intrs * DANGER_ZONE ) {
workspace->realloc.num_3body = num_thb_intrs;
if( num_thb_intrs > thb_intrs->num_intrs ) {
fprintf( stderr, "step%d-ran out of space on angle_list: top=%d, max=%d",
data->step, num_thb_intrs, thb_intrs->num_intrs );
MPI_Abort( MPI_COMM_WORLD, INSUFFICIENT_MEMORY );
}
}
- //fprintf( stderr,"%d: Number of angle interactions: %d\n",
- // data->step, num_thb_intrs );
-
-#if defined(DEBUG)
- fprintf( stderr, "Number of angle interactions: %d\n", num_thb_intrs );
- fprintf( stderr,
- "Angle Energy: %g\t Penalty Energy: %g\t Coalition Energy: %g\t\n",
- data->my_en.e_ang, data->my_en.e_pen, data->my_en.e_coa );
-
- fprintf( stderr, "3body: ext_press (%12.6f %12.6f %12.6f)\n",
- data->ext_press[0], data->ext_press[1], data->ext_press[2] );
-#endif
+
}
diff --git a/src/USER-REAXC/reaxc_vector.cpp b/src/USER-REAXC/reaxc_vector.cpp
index 159570fdf..4d5644217 100644
--- a/src/USER-REAXC/reaxc_vector.cpp
+++ b/src/USER-REAXC/reaxc_vector.cpp
@@ -1,507 +1,500 @@
/*----------------------------------------------------------------------
PuReMD - Purdue ReaxFF Molecular Dynamics Program
Copyright (2010) Purdue University
Hasan Metin Aktulga, hmaktulga@lbl.gov
Joseph Fogarty, jcfogart@mail.usf.edu
Sagar Pandit, pandit@usf.edu
Ananth Y Grama, ayg@cs.purdue.edu
Please cite the related publication:
H. M. Aktulga, J. C. Fogarty, S. A. Pandit, A. Y. Grama,
"Parallel Reactive Molecular Dynamics: Numerical Methods and
Algorithmic Techniques", Parallel Computing, in press.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details:
<http://www.gnu.org/licenses/>.
----------------------------------------------------------------------*/
#include "pair_reax_c.h"
#include "reaxc_vector.h"
int Vector_isZero( real* v, int k )
{
for( --k; k>=0; --k )
if( fabs( v[k] ) > ALMOST_ZERO )
return 0;
return 1;
}
void Vector_MakeZero( real *v, int k )
{
for( --k; k>=0; --k )
v[k] = 0;
}
void Vector_Copy( real* dest, real* v, int k )
{
for( --k; k>=0; --k )
dest[k] = v[k];
}
void Vector_Scale( real* dest, real c, real* v, int k )
{
for( --k; k>=0; --k )
dest[k] = c * v[k];
}
void Vector_Sum( real* dest, real c, real* v, real d, real* y, int k )
{
for( --k; k>=0; --k )
dest[k] = c * v[k] + d * y[k];
}
void Vector_Add( real* dest, real c, real* v, int k )
{
for( --k; k>=0; --k )
dest[k] += c * v[k];
}
real Dot( real* v1, real* v2, int k )
{
real ret = 0;
for( --k; k>=0; --k )
ret += v1[k] * v2[k];
return ret;
}
real Norm( real* v1, int k )
{
real ret = 0;
for( --k; k>=0; --k )
ret += SQR( v1[k] );
return sqrt( ret );
}
void Vector_Print( FILE *fout, char *vname, real *v, int k )
{
int i;
fprintf( fout, "%s:", vname );
for( i = 0; i < k; ++i )
fprintf( fout, "%24.15e\n", v[i] );
fprintf( fout, "\n" );
}
void rvec_Copy( rvec dest, rvec src )
{
dest[0] = src[0], dest[1] = src[1], dest[2] = src[2];
}
void rvec_Scale( rvec ret, real c, rvec v )
{
ret[0] = c * v[0], ret[1] = c * v[1], ret[2] = c * v[2];
}
void rvec_Add( rvec ret, rvec v )
{
ret[0] += v[0], ret[1] += v[1], ret[2] += v[2];
}
void rvec_ScaledAdd( rvec ret, real c, rvec v )
{
ret[0] += c * v[0], ret[1] += c * v[1], ret[2] += c * v[2];
}
void rvec_Sum( rvec ret, rvec v1 ,rvec v2 )
{
ret[0] = v1[0] + v2[0];
ret[1] = v1[1] + v2[1];
ret[2] = v1[2] + v2[2];
}
void rvec_ScaledSum( rvec ret, real c1, rvec v1 ,real c2, rvec v2 )
{
ret[0] = c1 * v1[0] + c2 * v2[0];
ret[1] = c1 * v1[1] + c2 * v2[1];
ret[2] = c1 * v1[2] + c2 * v2[2];
}
real rvec_Dot( rvec v1, rvec v2 )
{
return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
}
real rvec_ScaledDot( real c1, rvec v1, real c2, rvec v2 )
{
return (c1*c2) * (v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]);
}
void rvec_Multiply( rvec r, rvec v1, rvec v2 )
{
r[0] = v1[0] * v2[0];
r[1] = v1[1] * v2[1];
r[2] = v1[2] * v2[2];
}
void rvec_iMultiply( rvec r, ivec v1, rvec v2 )
{
r[0] = v1[0] * v2[0];
r[1] = v1[1] * v2[1];
r[2] = v1[2] * v2[2];
}
void rvec_Divide( rvec r, rvec v1, rvec v2 )
{
r[0] = v1[0] / v2[0];
r[1] = v1[1] / v2[1];
r[2] = v1[2] / v2[2];
}
void rvec_iDivide( rvec r, rvec v1, ivec v2 )
{
r[0] = v1[0] / v2[0];
r[1] = v1[1] / v2[1];
r[2] = v1[2] / v2[2];
}
void rvec_Invert( rvec r, rvec v )
{
r[0] = 1. / v[0];
r[1] = 1. / v[1];
r[2] = 1. / v[2];
}
void rvec_Cross( rvec ret, rvec v1, rvec v2 )
{
ret[0] = v1[1] * v2[2] - v1[2] * v2[1];
ret[1] = v1[2] * v2[0] - v1[0] * v2[2];
ret[2] = v1[0] * v2[1] - v1[1] * v2[0];
}
void rvec_OuterProduct( rtensor r, rvec v1, rvec v2 )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
r[i][j] = v1[i] * v2[j];
}
real rvec_Norm_Sqr( rvec v )
{
return SQR(v[0]) + SQR(v[1]) + SQR(v[2]);
}
real rvec_Norm( rvec v )
{
return sqrt( SQR(v[0]) + SQR(v[1]) + SQR(v[2]) );
}
int rvec_isZero( rvec v )
{
if( fabs(v[0]) > ALMOST_ZERO ||
fabs(v[1]) > ALMOST_ZERO ||
fabs(v[2]) > ALMOST_ZERO )
return 0;
return 1;
}
void rvec_MakeZero( rvec v )
{
-// v[0] = v[1] = v[2] = 0.0000000000000;
v[0] = v[1] = v[2] = 0.000000000000000e+00;
}
-
void rtensor_Multiply( rtensor ret, rtensor m1, rtensor m2 )
{
int i, j, k;
rtensor temp;
- // check if the result matrix is the same as one of m1, m2.
- // if so, we cannot modify the contents of m1 or m2, so
- // we have to use a temp matrix.
if( ret == m1 || ret == m2 )
{
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
{
temp[i][j] = 0;
for( k = 0; k < 3; ++k )
temp[i][j] += m1[i][k] * m2[k][j];
}
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] = temp[i][j];
}
else
{
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
{
ret[i][j] = 0;
for( k = 0; k < 3; ++k )
ret[i][j] += m1[i][k] * m2[k][j];
}
}
}
void rtensor_MatVec( rvec ret, rtensor m, rvec v )
{
int i;
rvec temp;
- // if ret is the same vector as v, we cannot modify the
- // contents of v until all computation is finished.
if( ret == v )
{
for( i = 0; i < 3; ++i )
temp[i] = m[i][0] * v[0] + m[i][1] * v[1] + m[i][2] * v[2];
for( i = 0; i < 3; ++i )
ret[i] = temp[i];
}
else
{
for( i = 0; i < 3; ++i )
ret[i] = m[i][0] * v[0] + m[i][1] * v[1] + m[i][2] * v[2];
}
}
void rtensor_Scale( rtensor ret, real c, rtensor m )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] = c * m[i][j];
}
void rtensor_Add( rtensor ret, rtensor t )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] += t[i][j];
}
void rtensor_ScaledAdd( rtensor ret, real c, rtensor t )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] += c * t[i][j];
}
void rtensor_Sum( rtensor ret, rtensor t1, rtensor t2 )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] = t1[i][j] + t2[i][j];
}
void rtensor_ScaledSum( rtensor ret, real c1, rtensor t1,
real c2, rtensor t2 )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] = c1 * t1[i][j] + c2 * t2[i][j];
}
void rtensor_Copy( rtensor ret, rtensor t )
{
int i, j;
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
ret[i][j] = t[i][j];
}
void rtensor_Identity( rtensor t )
{
t[0][0] = t[1][1] = t[2][2] = 1;
t[0][1] = t[0][2] = t[1][0] = t[1][2] = t[2][0] = t[2][1] = 0;
}
void rtensor_MakeZero( rtensor t )
{
t[0][0] = t[0][1] = t[0][2] = 0;
t[1][0] = t[1][1] = t[1][2] = 0;
t[2][0] = t[2][1] = t[2][2] = 0;
}
void rtensor_Transpose( rtensor ret, rtensor t )
{
ret[0][0] = t[0][0], ret[1][1] = t[1][1], ret[2][2] = t[2][2];
ret[0][1] = t[1][0], ret[0][2] = t[2][0];
ret[1][0] = t[0][1], ret[1][2] = t[2][1];
ret[2][0] = t[0][2], ret[2][1] = t[1][2];
}
real rtensor_Det( rtensor t )
{
return ( t[0][0] * (t[1][1] * t[2][2] - t[1][2] * t[2][1] ) +
t[0][1] * (t[1][2] * t[2][0] - t[1][0] * t[2][2] ) +
t[0][2] * (t[1][0] * t[2][1] - t[1][1] * t[2][0] ) );
}
real rtensor_Trace( rtensor t )
{
return (t[0][0] + t[1][1] + t[2][2]);
}
void Print_rTensor(FILE* fp, rtensor t)
{
int i, j;
for (i=0; i < 3; i++)
{
fprintf(fp,"[");
for (j=0; j < 3; j++)
fprintf(fp,"%8.3f,\t",t[i][j]);
fprintf(fp,"]\n");
}
}
void ivec_MakeZero( ivec v )
{
v[0] = v[1] = v[2] = 0;
}
void ivec_Copy( ivec dest, ivec src )
{
dest[0] = src[0], dest[1] = src[1], dest[2] = src[2];
}
void ivec_Scale( ivec dest, real C, ivec src )
{
dest[0] = (int)(C * src[0]);
dest[1] = (int)(C * src[1]);
dest[2] = (int)(C * src[2]);
}
void ivec_rScale( ivec dest, real C, rvec src )
{
dest[0] = (int)(C * src[0]);
dest[1] = (int)(C * src[1]);
dest[2] = (int)(C * src[2]);
}
int ivec_isZero( ivec v )
{
if( v[0]==0 && v[1]==0 && v[2]==0 )
return 1;
return 0;
}
int ivec_isEqual( ivec v1, ivec v2 )
{
if( v1[0]==v2[0] && v1[1]==v2[1] && v1[2]==v2[2] )
return 1;
return 0;
}
void ivec_Sum( ivec dest, ivec v1, ivec v2 )
{
dest[0] = v1[0] + v2[0];
dest[1] = v1[1] + v2[1];
dest[2] = v1[2] + v2[2];
}
void ivec_ScaledSum( ivec dest, int k1, ivec v1, int k2, ivec v2 )
{
dest[0] = k1*v1[0] + k2*v2[0];
dest[1] = k1*v1[1] + k2*v2[1];
dest[2] = k1*v1[2] + k2*v2[2];
}
void ivec_Add( ivec dest, ivec v )
{
dest[0] += v[0];
dest[1] += v[1];
dest[2] += v[2];
}
void ivec_ScaledAdd( ivec dest, int k, ivec v )
{
dest[0] += k * v[0];
dest[1] += k * v[1];
dest[2] += k * v[2];
}
void ivec_Max( ivec res, ivec v1, ivec v2 )
{
res[0] = MAX( v1[0], v2[0] );
res[1] = MAX( v1[1], v2[1] );
res[2] = MAX( v1[2], v2[2] );
}
void ivec_Max3( ivec res, ivec v1, ivec v2, ivec v3 )
{
res[0] = MAX3( v1[0], v2[0], v3[0] );
res[1] = MAX3( v1[1], v2[1], v3[1] );
res[2] = MAX3( v1[2], v2[2], v3[2] );
}
diff --git a/src/compute.cpp b/src/compute.cpp
index f9a95e8d1..936798365 100644
--- a/src/compute.cpp
+++ b/src/compute.cpp
@@ -1,301 +1,302 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "lmptype.h"
#include "mpi.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#include "compute.h"
#include "atom.h"
#include "domain.h"
#include "comm.h"
#include "group.h"
#include "atom_masks.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 4
#define BIG MAXTAGINT
/* ---------------------------------------------------------------------- */
Compute::Compute(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
{
if (narg < 3) error->all(FLERR,"Illegal compute command");
// compute ID, group, and style
// ID must be all alphanumeric chars or underscores
int n = strlen(arg[0]) + 1;
id = new char[n];
strcpy(id,arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(id[i]) && id[i] != '_')
error->all(FLERR,
"Compute ID must be alphanumeric or underscore characters");
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find compute group ID");
groupbit = group->bitmask[igroup];
n = strlen(arg[2]) + 1;
style = new char[n];
strcpy(style,arg[2]);
// set child class defaults
scalar_flag = vector_flag = array_flag = 0;
peratom_flag = local_flag = 0;
tempflag = pressflag = peflag = 0;
pressatomflag = peatomflag = 0;
tempbias = 0;
timeflag = 0;
comm_forward = comm_reverse = 0;
+ dynamic_group_allow = 1;
cudable = 0;
invoked_scalar = invoked_vector = invoked_array = -1;
invoked_peratom = invoked_local = -1;
// set modify defaults
extra_dof = domain->dimension;
dynamic = 0;
// setup list of timesteps
ntime = maxtime = 0;
tlist = NULL;
// setup map for molecule IDs
molmap = NULL;
datamask = ALL_MASK;
datamask_ext = ALL_MASK;
}
/* ---------------------------------------------------------------------- */
Compute::~Compute()
{
delete [] id;
delete [] style;
memory->destroy(tlist);
memory->destroy(molmap);
}
/* ---------------------------------------------------------------------- */
void Compute::modify_params(int narg, char **arg)
{
if (narg == 0) error->all(FLERR,"Illegal compute_modify command");
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"extra") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute_modify command");
extra_dof = force->inumeric(FLERR,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"dynamic") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute_modify command");
if (strcmp(arg[iarg+1],"no") == 0) dynamic = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) dynamic = 1;
else error->all(FLERR,"Illegal compute_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"thermo") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal compute_modify command");
if (strcmp(arg[iarg+1],"no") == 0) thermoflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) thermoflag = 1;
else error->all(FLERR,"Illegal compute_modify command");
iarg += 2;
} else error->all(FLERR,"Illegal compute_modify command");
}
}
/* ----------------------------------------------------------------------
reset extra_dof to its default value
------------------------------------------------------------------------- */
void Compute::reset_extra_dof()
{
extra_dof = domain->dimension;
}
/* ---------------------------------------------------------------------- */
void Compute::reset_extra_compute_fix(const char *)
{
error->all(FLERR,
"Compute does not allow an extra compute or fix to be reset");
}
/* ----------------------------------------------------------------------
add ntimestep to list of timesteps the compute will be called on
do not add if already in list
search from top downward, since list of times is in decreasing order
------------------------------------------------------------------------- */
void Compute::addstep(bigint ntimestep)
{
// i = location in list to insert ntimestep
int i;
for (i = ntime-1; i >= 0; i--) {
if (ntimestep == tlist[i]) return;
if (ntimestep < tlist[i]) break;
}
i++;
// extend list as needed
if (ntime == maxtime) {
maxtime += DELTA;
memory->grow(tlist,maxtime,"compute:tlist");
}
// move remainder of list upward and insert ntimestep
for (int j = ntime-1; j >= i; j--) tlist[j+1] = tlist[j];
tlist[i] = ntimestep;
ntime++;
}
/* ----------------------------------------------------------------------
return 1/0 if ntimestep is or is not in list of calling timesteps
if value(s) on top of list are less than ntimestep, delete them
search from top downward, since list of times is in decreasing order
------------------------------------------------------------------------- */
int Compute::matchstep(bigint ntimestep)
{
for (int i = ntime-1; i >= 0; i--) {
if (ntimestep < tlist[i]) return 0;
if (ntimestep == tlist[i]) return 1;
if (ntimestep > tlist[i]) ntime--;
}
return 0;
}
/* ----------------------------------------------------------------------
clean out list of timesteps to call the compute on
------------------------------------------------------------------------- */
void Compute::clearstep()
{
ntime = 0;
}
/* ----------------------------------------------------------------------
identify molecule IDs with atoms in group
warn if any atom in group has molecule ID = 0
warn if any molecule has only some atoms in group
return Ncount = # of molecules with atoms in group
set molmap to NULL if molecule IDs include all in range from 1 to Ncount
else: molecule IDs range from idlo to idhi
set molmap to vector of length idhi-idlo+1
molmap[id-idlo] = index from 0 to Ncount-1
return idlo and idhi
------------------------------------------------------------------------- */
int Compute::molecules_in_group(tagint &idlo, tagint &idhi)
{
int i;
memory->destroy(molmap);
molmap = NULL;
// find lo/hi molecule ID for any atom in group
// warn if atom in group has ID = 0
tagint *molecule = atom->molecule;
int *mask = atom->mask;
int nlocal = atom->nlocal;
tagint lo = BIG;
tagint hi = -BIG;
int flag = 0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (molecule[i] == 0) flag = 1;
lo = MIN(lo,molecule[i]);
hi = MAX(hi,molecule[i]);
}
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->warning(FLERR,"Atom with molecule ID = 0 included in "
"compute molecule group");
MPI_Allreduce(&lo,&idlo,1,MPI_LMP_TAGINT,MPI_MIN,world);
MPI_Allreduce(&hi,&idhi,1,MPI_LMP_TAGINT,MPI_MAX,world);
if (idlo == BIG) return 0;
// molmap = vector of length nlen
// set to 1 for IDs that appear in group across all procs, else 0
tagint nlen_tag = idhi-idlo+1;
if (nlen_tag > MAXSMALLINT)
error->all(FLERR,"Too many molecules for compute");
int nlen = (int) nlen_tag;
memory->create(molmap,nlen,"compute:molmap");
for (i = 0; i < nlen; i++) molmap[i] = 0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
molmap[molecule[i]-idlo] = 1;
int *molmapall;
memory->create(molmapall,nlen,"compute:molmapall");
MPI_Allreduce(molmap,molmapall,nlen,MPI_INT,MPI_MAX,world);
// nmolecules = # of non-zero IDs in molmap
// molmap[i] = index of molecule, skipping molecules not in group with -1
int nmolecules = 0;
for (i = 0; i < nlen; i++)
if (molmapall[i]) molmap[i] = nmolecules++;
else molmap[i] = -1;
memory->destroy(molmapall);
// warn if any molecule has some atoms in group and some not in group
flag = 0;
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) continue;
if (molecule[i] < idlo || molecule[i] > idhi) continue;
if (molmap[molecule[i]-idlo] >= 0) flag = 1;
}
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall && comm->me == 0)
error->warning(FLERR,
"One or more compute molecules has atoms not in group");
// if molmap simply stores 1 to Nmolecules, then free it
if (idlo == 1 && idhi == nmolecules && nlen == nmolecules) {
memory->destroy(molmap);
molmap = NULL;
}
return nmolecules;
}
diff --git a/src/compute.h b/src/compute.h
index 5f043a881..6d4bd3c0e 100644
--- a/src/compute.h
+++ b/src/compute.h
@@ -1,183 +1,184 @@
/* -*- c++ -*- ----------------------------------------------------------
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.
------------------------------------------------------------------------- */
#ifndef LMP_COMPUTE_H
#define LMP_COMPUTE_H
#include "pointers.h"
namespace LAMMPS_NS {
class Compute : protected Pointers {
public:
-
char *id,*style;
int igroup,groupbit;
double scalar; // computed global scalar
double *vector; // computed global vector
double **array; // computed global array
double *vector_atom; // computed per-atom vector
double **array_atom; // computed per-atom array
double *vector_local; // computed local vector
double **array_local; // computed local array
int scalar_flag; // 0/1 if compute_scalar() function exists
int vector_flag; // 0/1 if compute_vector() function exists
int array_flag; // 0/1 if compute_array() function exists
int size_vector; // length of global vector
int size_array_rows; // rows in global array
int size_array_cols; // columns in global array
int peratom_flag; // 0/1 if compute_peratom() function exists
int size_peratom_cols; // 0 = vector, N = columns in peratom array
int local_flag; // 0/1 if compute_local() function exists
int size_local_rows; // rows in local vector or array
int size_local_cols; // 0 = vector, N = columns in local array
int extscalar; // 0/1 if global scalar is intensive/extensive
int extvector; // 0/1/-1 if global vector is all int/ext/extlist
int *extlist; // list of 0/1 int/ext for each vec component
int extarray; // 0/1 if global array is all intensive/extensive
int tempflag; // 1 if Compute can be used as temperature
// must have both compute_scalar, compute_vector
int pressflag; // 1 if Compute can be used as pressure (uses virial)
// must have both compute_scalar, compute_vector
int pressatomflag; // 1 if Compute calculates per-atom virial
int peflag; // 1 if Compute calculates PE (uses Force energies)
int peatomflag; // 1 if Compute calculates per-atom PE
int tempbias; // 0/1 if Compute temp includes self/extra bias
int timeflag; // 1 if Compute stores list of timesteps it's called on
int ntime; // # of entries in time list
int maxtime; // max # of entries time list can hold
bigint *tlist; // list of timesteps the Compute is called on
int invoked_flag; // non-zero if invoked or accessed this step, 0 if not
bigint invoked_scalar; // last timestep on which compute_scalar() was invoked
bigint invoked_vector; // ditto for compute_vector()
bigint invoked_array; // ditto for compute_array()
bigint invoked_peratom; // ditto for compute_peratom()
bigint invoked_local; // ditto for compute_local()
double dof; // degrees-of-freedom for temperature
- int comm_forward; // size of forward communication (0 if none)
- int comm_reverse; // size of reverse communication (0 if none)
+ int comm_forward; // size of forward communication (0 if none)
+ int comm_reverse; // size of reverse communication (0 if none)
+ int dynamic_group_allow; // 1 if can be used with dynamic group, else 0
unsigned int datamask;
unsigned int datamask_ext;
- int cudable; // 1 if compute is CUDA-enabled
+ int cudable; // 1 if compute is CUDA-enabled
Compute(class LAMMPS *, int, char **);
virtual ~Compute();
void modify_params(int, char **);
void reset_extra_dof();
virtual void init() = 0;
virtual void init_list(int, class NeighList *) {}
virtual void setup() {}
virtual double compute_scalar() {return 0.0;}
virtual void compute_vector() {}
virtual void compute_array() {}
virtual void compute_peratom() {}
virtual void compute_local() {}
virtual int pack_comm(int, int *, double *, int, int *) {return 0;}
virtual void unpack_comm(int, int, double *) {}
virtual int pack_reverse_comm(int, int, double *) {return 0;}
virtual void unpack_reverse_comm(int, int *, double *) {}
+ virtual void dof_remove_pre() {}
virtual int dof_remove(int) {return 0;}
virtual void remove_bias(int, double *) {}
virtual void remove_bias_thr(int, double *, double *) {}
virtual void remove_bias_all() {}
virtual void restore_bias(int, double *) {}
virtual void restore_bias_thr(int, double *, double *) {}
virtual void restore_bias_all() {}
virtual void reset_extra_compute_fix(const char *);
void addstep(bigint);
int matchstep(bigint);
void clearstep();
virtual double memory_usage() {return 0.0;}
virtual int unsigned data_mask() {return datamask;}
virtual int unsigned data_mask_ext() {return datamask_ext;}
protected:
int extra_dof; // extra DOF for temperature computes
int dynamic; // recount atoms for temperature computes
int thermoflag; // 1 if include fix PE for PE computes
double vbias[3]; // stored velocity bias for one atom
double **vbiasall; // stored velocity bias for all atoms
int maxbias; // size of vbiasall array
int *molmap; // convert molecule ID to local index
int molecules_in_group(tagint &, tagint &);
inline int sbmask(int j) {
return j >> SBBITS & 3;
}
};
}
#endif
/* ERROR/WARNING messages:
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: Compute ID must be alphanumeric or underscore characters
Self-explanatory.
E: Could not find compute group ID
Self-explanatory.
E: Compute does not allow an extra compute or fix to be reset
This is an internal LAMMPS error. Please report it to the
developers.
W: Atom with molecule ID = 0 included in compute molecule group
The group used in a compute command that operates on moleclues
includes atoms with no molecule ID. This is probably not what you
want.
E: Too many molecules for compute
The limit is 2^31 = ~2 billion molecules.
W: One or more compute molecules has atoms not in group
The group used in a compute command that operates on moleclues does
not include all the atoms in some molecules. This is probably not
what you want.
*/
diff --git a/src/compute_reduce_region.cpp b/src/compute_reduce_region.cpp
index 3f54dd5bb..fe33fc3c7 100644
--- a/src/compute_reduce_region.cpp
+++ b/src/compute_reduce_region.cpp
@@ -1,253 +1,255 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "string.h"
#include "stdlib.h"
#include "compute_reduce_region.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "group.h"
#include "region.h"
#include "fix.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{SUM,MINN,MAXX,AVE};
enum{X,V,F,COMPUTE,FIX,VARIABLE};
enum{PERATOM,LOCAL};
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
#define INVOKED_PERATOM 8
#define INVOKED_LOCAL 16
#define BIG 1.0e20
/* ---------------------------------------------------------------------- */
ComputeReduceRegion::ComputeReduceRegion(LAMMPS *lmp, int narg, char **arg) :
ComputeReduce(lmp, narg, arg) {}
/* ----------------------------------------------------------------------
calculate reduced value for one input M and return it
if flag = -1:
sum/min/max/ave all values in vector
for per-atom quantities, limit to atoms in group and region
if mode = MIN or MAX, also set index to which vector value wins
if flag >= 0: simply return vector[flag]
------------------------------------------------------------------------- */
double ComputeReduceRegion::compute_one(int m, int flag)
{
int i;
Region *region = domain->regions[iregion];
+ region->prematch();
// invoke the appropriate attribute,compute,fix,variable
// compute scalar quantity by summing over atom scalars
// only include atoms in group
index = -1;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = value2index[m];
int j = argindex[m];
double one;
if (mode == SUM) one = 0.0;
else if (mode == MINN) one = BIG;
else if (mode == MAXX) one = -BIG;
else if (mode == AVE) one = 0.0;
if (which[m] == X) {
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,x[i][j],i);
} else one = x[flag][j];
} else if (which[m] == V) {
double **v = atom->v;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,v[i][j],i);
} else one = v[flag][j];
} else if (which[m] == F) {
double **f = atom->f;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,f[i][j],i);
} else one = f[flag][j];
// invoke compute if not previously invoked
} else if (which[m] == COMPUTE) {
Compute *compute = modify->compute[n];
if (flavor[m] == PERATOM) {
if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (j == 0) {
double *compute_vector = compute->vector_atom;
int n = nlocal;
if (flag < 0) {
for (i = 0; i < n; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,compute_vector[i],i);
} else one = compute_vector[flag];
} else {
double **compute_array = compute->array_atom;
int n = nlocal;
int jm1 = j - 1;
if (flag < 0) {
for (i = 0; i < n; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,compute_array[i][jm1],i);
} else one = compute_array[flag][jm1];
}
} else if (flavor[m] == LOCAL) {
if (!(compute->invoked_flag & INVOKED_LOCAL)) {
compute->compute_local();
compute->invoked_flag |= INVOKED_LOCAL;
}
if (j == 0) {
double *compute_vector = compute->vector_local;
int n = compute->size_local_rows;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,compute_vector[i],i);
else one = compute_vector[flag];
} else {
double **compute_array = compute->array_local;
int n = compute->size_local_rows;
int jm1 = j - 1;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,compute_array[i][jm1],i);
else one = compute_array[flag][jm1];
}
}
// check if fix frequency is a match
} else if (which[m] == FIX) {
if (update->ntimestep % modify->fix[n]->peratom_freq)
- error->all(FLERR,"Fix used in compute reduce not computed at compatible time");
+ error->all(FLERR,"Fix used in compute reduce not computed at "
+ "compatible time");
Fix *fix = modify->fix[n];
if (flavor[m] == PERATOM) {
if (j == 0) {
double *fix_vector = fix->vector_atom;
int n = nlocal;
if (flag < 0) {
for (i = 0; i < n; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,fix_vector[i],i);
} else one = fix_vector[flag];
} else {
double **fix_array = fix->array_atom;
int jm1 = j - 1;
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,fix_array[i][jm1],i);
} else one = fix_array[flag][jm1];
}
} else if (flavor[m] == LOCAL) {
if (j == 0) {
double *fix_vector = fix->vector_local;
int n = fix->size_local_rows;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,fix_vector[i],i);
else one = fix_vector[flag];
} else {
double **fix_array = fix->array_local;
int n = fix->size_local_rows;
int jm1 = j - 1;
if (flag < 0)
for (i = 0; i < n; i++)
combine(one,fix_array[i][jm1],i);
else one = fix_array[flag][jm1];
}
}
// evaluate atom-style variable
} else if (which[m] == VARIABLE) {
if (nlocal > maxatom) {
maxatom = atom->nmax;
memory->destroy(varatom);
memory->create(varatom,maxatom,"reduce/region:varatom");
}
input->variable->compute_atom(n,igroup,varatom,1,0);
if (flag < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
combine(one,varatom[i],i);
} else one = varatom[flag];
}
return one;
}
/* ---------------------------------------------------------------------- */
bigint ComputeReduceRegion::count(int m)
{
int n = value2index[m];
if (which[m] == X || which[m] == V || which[m] == F)
return group->count(igroup,iregion);
else if (which[m] == COMPUTE) {
Compute *compute = modify->compute[n];
if (flavor[m] == PERATOM) {
return group->count(igroup,iregion);
} else if (flavor[m] == LOCAL) {
bigint ncount = compute->size_local_rows;
bigint ncountall;
MPI_Allreduce(&ncount,&ncountall,1,MPI_DOUBLE,MPI_SUM,world);
return ncountall;
}
} else if (which[m] == FIX) {
Fix *fix = modify->fix[n];
if (flavor[m] == PERATOM) {
return group->count(igroup,iregion);
} else if (flavor[m] == LOCAL) {
bigint ncount = fix->size_local_rows;
bigint ncountall;
MPI_Allreduce(&ncount,&ncountall,1,MPI_DOUBLE,MPI_SUM,world);
return ncountall;
}
} else if (which[m] == VARIABLE)
return group->count(igroup,iregion);
bigint dummy = 0;
return dummy;
}
diff --git a/src/compute_temp_region.cpp b/src/compute_temp_region.cpp
index 6d403e6f7..2777463a1 100644
--- a/src/compute_temp_region.cpp
+++ b/src/compute_temp_region.cpp
@@ -1,284 +1,295 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "mpi.h"
#include "string.h"
#include "compute_temp_region.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
ComputeTempRegion::ComputeTempRegion(LAMMPS *lmp, int narg, char **arg) :
Compute(lmp, narg, arg)
{
if (narg != 4) error->all(FLERR,"Illegal compute temp/region command");
iregion = domain->find_region(arg[3]);
if (iregion == -1)
error->all(FLERR,"Region ID for compute temp/region does not exist");
int n = strlen(arg[3]) + 1;
idregion = new char[n];
strcpy(idregion,arg[3]);
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
tempbias = 1;
maxbias = 0;
vbiasall = NULL;
vector = new double[6];
}
/* ---------------------------------------------------------------------- */
ComputeTempRegion::~ComputeTempRegion()
{
delete [] idregion;
memory->destroy(vbiasall);
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::init()
{
// set index and check validity of region
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for compute temp/region does not exist");
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::setup()
{
dof = 0.0;
}
/* ---------------------------------------------------------------------- */
+void ComputeTempRegion::dof_remove_pre()
+{
+ domain->regions[iregion]->prematch();
+}
+
+/* ---------------------------------------------------------------------- */
+
int ComputeTempRegion::dof_remove(int i)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2])) return 0;
return 1;
}
/* ---------------------------------------------------------------------- */
double ComputeTempRegion::compute_scalar()
{
invoked_scalar = update->ntimestep;
double **x = atom->x;
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
Region *region = domain->regions[iregion];
+ region->prematch();
+
int count = 0;
double t = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
count++;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
count++;
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
}
}
double tarray[2],tarray_all[2];
tarray[0] = count;
tarray[1] = t;
MPI_Allreduce(tarray,tarray_all,2,MPI_DOUBLE,MPI_SUM,world);
dof = domain->dimension * tarray_all[0] - extra_dof;
if (dof > 0) scalar = force->mvv2e * tarray_all[1] / (dof * force->boltz);
else scalar = 0.0;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempRegion::compute_vector()
{
int i;
invoked_vector = update->ntimestep;
double **x = atom->x;
double **v = atom->v;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
Region *region = domain->regions[iregion];
+ region->prematch();
+
double massone,t[6];
for (i = 0; i < 6; i++) t[i] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
}
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempRegion::remove_bias(int i, double *v)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2]))
vbias[0] = vbias[1] = vbias[2] = 0.0;
else {
vbias[0] = v[0];
vbias[1] = v[1];
vbias[2] = v[2];
v[0] = v[1] = v[2] = 0.0;
}
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempRegion::remove_bias_thr(int i, double *v, double *b)
{
double *x = atom->x[i];
if (domain->regions[iregion]->match(x[0],x[1],x[2]))
b[0] = b[1] = b[2] = 0.0;
else {
b[0] = v[0];
b[1] = v[1];
b[2] = v[2];
v[0] = v[1] = v[2] = 0.0;
}
}
/* ----------------------------------------------------------------------
remove velocity bias from all atoms to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempRegion::remove_bias_all()
{
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (nlocal > maxbias) {
memory->destroy(vbiasall);
maxbias = atom->nmax;
memory->create(vbiasall,maxbias,3,"temp/region:vbiasall");
}
Region *region = domain->regions[iregion];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (region->match(x[i][0],x[i][1],x[i][2]))
vbiasall[i][0] = vbiasall[i][1] = vbiasall[i][2] = 0.0;
else {
vbiasall[i][0] = v[i][0];
vbiasall[i][1] = v[i][1];
vbiasall[i][2] = v[i][2];
v[i][0] = v[i][1] = v[i][2] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempRegion::restore_bias(int i, double *v)
{
v[0] += vbias[0];
v[1] += vbias[1];
v[2] += vbias[2];
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias_thr()
assume remove_bias_thr() was previously called with the same buffer b
------------------------------------------------------------------------- */
void ComputeTempRegion::restore_bias_thr(int i, double *v, double *b)
{
v[0] += b[0];
v[1] += b[1];
v[2] += b[2];
}
/* ----------------------------------------------------------------------
add back in velocity bias to all atoms removed by remove_bias_all()
assume remove_bias_all() was previously called
------------------------------------------------------------------------- */
void ComputeTempRegion::restore_bias_all()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] += vbiasall[i][0];
v[i][1] += vbiasall[i][1];
v[i][2] += vbiasall[i][2];
}
}
/* ---------------------------------------------------------------------- */
double ComputeTempRegion::memory_usage()
{
double bytes = 3*maxbias * sizeof(double);
return bytes;
}
diff --git a/src/compute_temp_region.h b/src/compute_temp_region.h
index 4c03ff6ae..f5a32f844 100644
--- a/src/compute_temp_region.h
+++ b/src/compute_temp_region.h
@@ -1,68 +1,69 @@
/* -*- c++ -*- ----------------------------------------------------------
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 COMPUTE_CLASS
ComputeStyle(temp/region,ComputeTempRegion)
#else
#ifndef LMP_COMPUTE_TEMP_REGION_H
#define LMP_COMPUTE_TEMP_REGION_H
#include "compute.h"
namespace LAMMPS_NS {
class ComputeTempRegion : public Compute {
public:
ComputeTempRegion(class LAMMPS *, int, char **);
virtual ~ComputeTempRegion();
void init();
void setup();
virtual double compute_scalar();
virtual void compute_vector();
+ void dof_remove_pre();
int dof_remove(int);
void remove_bias(int, double *);
void remove_bias_thr(int, double *, double *);
void remove_bias_all();
void restore_bias(int, double *);
void restore_bias_all();
void restore_bias_thr(int, double *, double *);
double memory_usage();
protected:
int iregion;
char *idregion;
};
}
#endif
#endif
/* ERROR/WARNING messages:
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: Region ID for compute temp/region does not exist
Self-explanatory.
*/
diff --git a/src/compute_temp_sphere.cpp b/src/compute_temp_sphere.cpp
index 51016d3b5..0bae77b3a 100644
--- a/src/compute_temp_sphere.cpp
+++ b/src/compute_temp_sphere.cpp
@@ -1,349 +1,351 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "mpi.h"
#include "string.h"
#include "compute_temp_sphere.h"
#include "atom.h"
#include "atom_vec.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "modify.h"
#include "fix.h"
#include "group.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{ROTATE,ALL};
#define INERTIA 0.4 // moment of inertia prefactor for sphere
/* ---------------------------------------------------------------------- */
ComputeTempSphere::ComputeTempSphere(LAMMPS *lmp, int narg, char **arg) :
Compute(lmp, narg, arg)
{
if (narg < 3) error->all(FLERR,"Illegal compute temp/sphere command");
scalar_flag = vector_flag = 1;
size_vector = 6;
extscalar = 0;
extvector = 1;
tempflag = 1;
tempbias = 0;
id_bias = NULL;
mode = ALL;
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"bias") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/sphere command");
tempbias = 1;
int n = strlen(arg[iarg+1]) + 1;
id_bias = new char[n];
strcpy(id_bias,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"dof") == 0) {
if (iarg+2 > narg)
error->all(FLERR,"Illegal compute temp/sphere command");
if (strcmp(arg[iarg+1],"rotate") == 0) mode = ROTATE;
else if (strcmp(arg[iarg+1],"all") == 0) mode = ALL;
else error->all(FLERR,"Illegal compute temp/sphere command");
iarg += 2;
} else error->all(FLERR,"Illegal compute temp/sphere command");
}
vector = new double[6];
// error checks
if (!atom->sphere_flag)
error->all(FLERR,"Compute temp/sphere requires atom style sphere");
}
/* ---------------------------------------------------------------------- */
ComputeTempSphere::~ComputeTempSphere()
{
delete [] id_bias;
delete [] vector;
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::init()
{
if (tempbias) {
int i = modify->find_compute(id_bias);
if (i < 0)
error->all(FLERR,"Could not find compute ID for temperature bias");
tbias = modify->compute[i];
if (tbias->tempflag == 0)
error->all(FLERR,"Bias compute does not calculate temperature");
if (tbias->tempbias == 0)
error->all(FLERR,"Bias compute does not calculate a velocity bias");
if (tbias->igroup != igroup)
error->all(FLERR,"Bias compute group does not match compute group");
tbias->init();
tbias->setup();
if (strcmp(tbias->style,"temp/region") == 0) tempbias = 2;
else tempbias = 1;
}
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::setup()
{
fix_dof = 0;
for (int i = 0; i < modify->nfix; i++)
fix_dof += modify->fix[i]->dof(igroup);
dof_compute();
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::dof_compute()
{
int count,count_all;
// 6 or 3 dof for extended/point particles for 3d
// 3 or 2 dof for extended/point particles for 2d
// which dof are included also depends on mode
// assume full rotation of extended particles
// user should correct this via compute_modify if needed
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
count = 0;
if (domain->dimension == 3) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 3;
} else {
if (mode == ALL) count += 6;
else count += 3;
}
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 2;
} else {
if (mode == ALL) count += 3;
else count += 1;
}
}
}
MPI_Allreduce(&count,&count_all,1,MPI_INT,MPI_SUM,world);
dof = count_all;
// additional adjustments to dof
if (tempbias == 1) {
if (mode == ALL) {
double natoms = group->count(igroup);
dof -= tbias->dof_remove(-1) * natoms;
}
} else if (tempbias == 2) {
int *mask = atom->mask;
int nlocal = atom->nlocal;
+ tbias->dof_remove_pre();
+
count = 0;
if (domain->dimension == 3) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (tbias->dof_remove(i)) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 3;
} else {
if (mode == ALL) count += 6;
else count += 3;
}
}
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (tbias->dof_remove(i)) {
if (radius[i] == 0.0) {
if (mode == ALL) count += 2;
} else {
if (mode == ALL) count += 3;
else count += 1;
}
}
}
}
MPI_Allreduce(&count,&count_all,1,MPI_INT,MPI_SUM,world);
dof -= count_all;
}
dof -= extra_dof + fix_dof;
if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz);
else tfactor = 0.0;
}
/* ---------------------------------------------------------------------- */
double ComputeTempSphere::compute_scalar()
{
invoked_scalar = update->ntimestep;
if (tempbias) {
if (tbias->invoked_scalar != update->ntimestep) tbias->compute_scalar();
tbias->remove_bias_all();
}
double **v = atom->v;
double **omega = atom->omega;
double *radius = atom->radius;
double *rmass = atom->rmass;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// point particles will not contribute rotation due to radius = 0
double t = 0.0;
if (mode == ALL) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i];
t += (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] +
omega[i][2]*omega[i][2]) * INERTIA*rmass[i]*radius[i]*radius[i];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
t += (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] +
omega[i][2]*omega[i][2]) * INERTIA*rmass[i]*radius[i]*radius[i];
}
if (tempbias) tbias->restore_bias_all();
MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
if (dynamic || tempbias == 2) dof_compute();
scalar *= tfactor;
return scalar;
}
/* ---------------------------------------------------------------------- */
void ComputeTempSphere::compute_vector()
{
invoked_vector = update->ntimestep;
if (tempbias) {
if (tbias->invoked_vector != update->ntimestep) tbias->compute_vector();
tbias->remove_bias_all();
}
double **v = atom->v;
double **omega = atom->omega;
double *rmass = atom->rmass;
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
// point particles will not contribute rotation due to radius = 0
double massone,inertiaone,t[6];
for (int i = 0; i < 6; i++) t[i] = 0.0;
if (mode == ALL) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
t[0] += massone * v[i][0]*v[i][0];
t[1] += massone * v[i][1]*v[i][1];
t[2] += massone * v[i][2]*v[i][2];
t[3] += massone * v[i][0]*v[i][1];
t[4] += massone * v[i][0]*v[i][2];
t[5] += massone * v[i][1]*v[i][2];
inertiaone = INERTIA*rmass[i]*radius[i]*radius[i];
t[0] += inertiaone * omega[i][0]*omega[i][0];
t[1] += inertiaone * omega[i][1]*omega[i][1];
t[2] += inertiaone * omega[i][2]*omega[i][2];
t[3] += inertiaone * omega[i][0]*omega[i][1];
t[4] += inertiaone * omega[i][0]*omega[i][2];
t[5] += inertiaone * omega[i][1]*omega[i][2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
inertiaone = INERTIA*rmass[i]*radius[i]*radius[i];
t[0] += inertiaone * omega[i][0]*omega[i][0];
t[1] += inertiaone * omega[i][1]*omega[i][1];
t[2] += inertiaone * omega[i][2]*omega[i][2];
t[3] += inertiaone * omega[i][0]*omega[i][1];
t[4] += inertiaone * omega[i][0]*omega[i][2];
t[5] += inertiaone * omega[i][1]*omega[i][2];
}
}
if (tempbias) tbias->restore_bias_all();
MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world);
for (int i = 0; i < 6; i++) vector[i] *= force->mvv2e;
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempSphere::remove_bias(int i, double *v)
{
tbias->remove_bias(i,v);
}
/* ----------------------------------------------------------------------
remove velocity bias from atom I to leave thermal velocity
------------------------------------------------------------------------- */
void ComputeTempSphere::remove_bias_thr(int i, double *v, double *b)
{
tbias->remove_bias_thr(i,v,b);
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias()
assume remove_bias() was previously called
------------------------------------------------------------------------- */
void ComputeTempSphere::restore_bias(int i, double *v)
{
tbias->restore_bias(i,v);
}
/* ----------------------------------------------------------------------
add back in velocity bias to atom I removed by remove_bias_thr()
assume remove_bias_thr() was previously called with the same buffer b
------------------------------------------------------------------------- */
void ComputeTempSphere::restore_bias_thr(int i, double *v, double *b)
{
tbias->restore_bias_thr(i,v,b);
}
diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp
index 351d3656b..a9393729b 100644
--- a/src/create_atoms.cpp
+++ b/src/create_atoms.cpp
@@ -1,696 +1,698 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "create_atoms.h"
#include "atom.h"
#include "atom_vec.h"
#include "molecule.h"
#include "comm.h"
#include "irregular.h"
#include "modify.h"
#include "force.h"
#include "special.h"
#include "fix.h"
#include "domain.h"
#include "lattice.h"
#include "region.h"
#include "random_park.h"
#include "random_mars.h"
#include "math_extra.h"
#include "math_const.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define BIG 1.0e30
#define EPSILON 1.0e-6
enum{BOX,REGION,SINGLE,RANDOM};
enum{ATOM,MOLECULE};
/* ---------------------------------------------------------------------- */
CreateAtoms::CreateAtoms(LAMMPS *lmp) : Pointers(lmp) {}
/* ---------------------------------------------------------------------- */
void CreateAtoms::command(int narg, char **arg)
{
if (domain->box_exist == 0)
error->all(FLERR,"Create_atoms command before simulation box is defined");
if (modify->nfix_restart_peratom)
error->all(FLERR,"Cannot create_atoms after "
"reading restart file with per-atom info");
// parse arguments
if (narg < 2) error->all(FLERR,"Illegal create_atoms command");
ntype = force->inumeric(FLERR,arg[0]);
int iarg;
if (strcmp(arg[1],"box") == 0) {
style = BOX;
iarg = 2;
} else if (strcmp(arg[1],"region") == 0) {
style = REGION;
if (narg < 3) error->all(FLERR,"Illegal create_atoms command");
nregion = domain->find_region(arg[2]);
if (nregion == -1) error->all(FLERR,
"Create_atoms region ID does not exist");
domain->regions[nregion]->init();
+ domain->regions[nregion]->prematch();
iarg = 3;;
} else if (strcmp(arg[1],"single") == 0) {
style = SINGLE;
if (narg < 5) error->all(FLERR,"Illegal create_atoms command");
xone[0] = force->numeric(FLERR,arg[2]);
xone[1] = force->numeric(FLERR,arg[3]);
xone[2] = force->numeric(FLERR,arg[4]);
iarg = 5;
} else if (strcmp(arg[1],"random") == 0) {
style = RANDOM;
if (narg < 5) error->all(FLERR,"Illegal create_atoms command");
nrandom = force->inumeric(FLERR,arg[2]);
seed = force->inumeric(FLERR,arg[3]);
if (strcmp(arg[4],"NULL") == 0) nregion = -1;
else {
nregion = domain->find_region(arg[4]);
if (nregion == -1) error->all(FLERR,
"Create_atoms region ID does not exist");
domain->regions[nregion]->init();
+ domain->regions[nregion]->prematch();
}
iarg = 5;
} else error->all(FLERR,"Illegal create_atoms command");
// process optional keywords
int scaleflag = 1;
remapflag = 0;
mode = ATOM;
int molseed;
nbasis = domain->lattice->nbasis;
basistype = new int[nbasis];
for (int i = 0; i < nbasis; i++) basistype[i] = ntype;
while (iarg < narg) {
if (strcmp(arg[iarg],"basis") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal create_atoms command");
int ibasis = force->inumeric(FLERR,arg[iarg+1]);
int itype = force->inumeric(FLERR,arg[iarg+2]);
if (ibasis <= 0 || ibasis > nbasis || itype <= 0 || itype > atom->ntypes)
error->all(FLERR,"Invalid basis setting in create_atoms command");
basistype[ibasis-1] = itype;
iarg += 3;
} else if (strcmp(arg[iarg],"remap") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal create_atoms command");
if (strcmp(arg[iarg+1],"yes") == 0) remapflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) remapflag = 0;
else error->all(FLERR,"Illegal create_atoms command");
iarg += 2;
} else if (strcmp(arg[iarg],"mol") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal create_atoms command");
int imol = atom->find_molecule(arg[iarg+1]);
if (imol == -1) error->all(FLERR,"Molecule template ID for "
"create_atoms does not exist");
if (atom->molecules[imol]->nset > 1 && comm->me == 0)
error->warning(FLERR,"Molecule template for "
"create_atoms has multiple molecules");
mode = MOLECULE;
onemol = atom->molecules[imol];
molseed = force->inumeric(FLERR,arg[iarg+2]);
iarg += 3;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal create_atoms command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal create_atoms command");
iarg += 2;
} else error->all(FLERR,"Illegal create_atoms command");
}
// error checks
if (mode == ATOM && (ntype <= 0 || ntype > atom->ntypes))
error->all(FLERR,"Invalid atom type in create_atoms command");
if (style == RANDOM) {
if (nrandom < 0) error->all(FLERR,"Illegal create_atoms command");
if (seed <= 0) error->all(FLERR,"Illegal create_atoms command");
}
// error check and further setup for mode = MOLECULE
ranmol = NULL;
if (mode == MOLECULE) {
if (onemol->xflag == 0)
error->all(FLERR,"Create_atoms molecule must have coordinates");
if (onemol->typeflag == 0)
error->all(FLERR,"Create_atoms molecule must have atom types");
if (ntype+onemol->ntypes <= 0 || ntype+onemol->ntypes > atom->ntypes)
error->all(FLERR,"Invalid atom type in create_atoms mol command");
if (onemol->tag_require && !atom->tag_enable)
error->all(FLERR,
"Create_atoms molecule has atom IDs, but system does not");
onemol->check_attributes(0);
// create_atoms uses geoemetric center of molecule for insertion
onemol->compute_center();
// molecule random number generator, different for each proc
ranmol = new RanMars(lmp,molseed+comm->me);
}
// demand non-none lattice be defined for BOX and REGION
// else setup scaling for SINGLE and RANDOM
// could use domain->lattice->lattice2box() to do conversion of
// lattice to box, but not consistent with other uses of units=lattice
// triclinic remapping occurs in add_single()
if (style == BOX || style == REGION) {
if (nbasis == 0)
error->all(FLERR,"Cannot create atoms with undefined lattice");
} else if (scaleflag == 1) {
xone[0] *= domain->lattice->xlattice;
xone[1] *= domain->lattice->ylattice;
xone[2] *= domain->lattice->zlattice;
}
// set bounds for my proc in sublo[3] & subhi[3]
// if periodic and style = BOX or REGION, i.e. using lattice:
// should create exactly 1 atom when 2 images are both "on" the boundary
// either image may be slightly inside/outside true box due to round-off
// if I am lo proc, decrement lower bound by EPSILON
// this will insure lo image is created
// if I am hi proc, decrement upper bound by 2.0*EPSILON
// this will insure hi image is not created
// thus insertion box is EPSILON smaller than true box
// and is shifted away from true boundary
// which is where atoms are likely to be generated
triclinic = domain->triclinic;
double epsilon[3];
if (triclinic) epsilon[0] = epsilon[1] = epsilon[2] = EPSILON;
else {
epsilon[0] = domain->prd[0] * EPSILON;
epsilon[1] = domain->prd[1] * EPSILON;
epsilon[2] = domain->prd[2] * EPSILON;
}
if (triclinic == 0) {
sublo[0] = domain->sublo[0]; subhi[0] = domain->subhi[0];
sublo[1] = domain->sublo[1]; subhi[1] = domain->subhi[1];
sublo[2] = domain->sublo[2]; subhi[2] = domain->subhi[2];
} else {
sublo[0] = domain->sublo_lamda[0]; subhi[0] = domain->subhi_lamda[0];
sublo[1] = domain->sublo_lamda[1]; subhi[1] = domain->subhi_lamda[1];
sublo[2] = domain->sublo_lamda[2]; subhi[2] = domain->subhi_lamda[2];
}
if (style == BOX || style == REGION) {
if (domain->xperiodic) {
if (comm->myloc[0] == 0) sublo[0] -= epsilon[0];
if (comm->myloc[0] == comm->procgrid[0]-1) subhi[0] -= 2.0*epsilon[0];
}
if (domain->yperiodic) {
if (comm->myloc[1] == 0) sublo[1] -= epsilon[1];
if (comm->myloc[1] == comm->procgrid[1]-1) subhi[1] -= 2.0*epsilon[1];
}
if (domain->zperiodic) {
if (comm->myloc[2] == 0) sublo[2] -= epsilon[2];
if (comm->myloc[2] == comm->procgrid[2]-1) subhi[2] -= 2.0*epsilon[2];
}
}
// add atoms/molecules in one of 3 ways
bigint natoms_previous = atom->natoms;
int nlocal_previous = atom->nlocal;
if (style == SINGLE) add_single();
else if (style == RANDOM) add_random();
else add_lattice();
// invoke set_arrays() for fixes that need initialization of new atoms
int nlocal = atom->nlocal;
for (int m = 0; m < modify->nfix; m++) {
Fix *fix = modify->fix[m];
if (fix->create_attribute)
for (int i = nlocal_previous; i < nlocal; i++)
fix->set_arrays(i);
}
// set new total # of atoms and error check
bigint nblocal = atom->nlocal;
MPI_Allreduce(&nblocal,&atom->natoms,1,MPI_LMP_BIGINT,MPI_SUM,world);
if (atom->natoms < 0 || atom->natoms >= MAXBIGINT)
error->all(FLERR,"Too many total atoms");
// add IDs for newly created atoms
// check that atom IDs are valid
if (atom->tag_enable) atom->tag_extend();
atom->tag_check();
// create global mapping of atoms
// zero nghost in case are adding new atoms to existing atoms
if (atom->map_style) {
atom->nghost = 0;
atom->map_init();
atom->map_set();
}
// for MOLECULE mode:
// set molecule IDs for created atoms if used
// reset new molecule bond,angle,etc and special values
// send atoms to new owning procs via irregular comm
// since not all atoms I created will be within my sub-domain
// perform special list build if needed
if (mode == MOLECULE) {
// molcreate = # of molecules I created
int molcreate = (atom->nlocal - nlocal_previous) / onemol->natoms;
// for atom style template systems, increment total bonds,angles,etc
if (atom->molecular == 2) {
bigint nmolme = molcreate;
bigint nmoltotal;
MPI_Allreduce(&nmolme,&nmoltotal,1,MPI_LMP_BIGINT,MPI_SUM,world);
atom->nbonds += nmoltotal * onemol->nbonds;
atom->nangles += nmoltotal * onemol->nangles;
atom->ndihedrals += nmoltotal * onemol->ndihedrals;
atom->nimpropers += nmoltotal * onemol->nimpropers;
}
// if atom style template
// maxmol = max molecule ID across all procs, for previous atoms
// moloffset = max molecule ID for all molecules owned by previous procs
// including molecules existing before this creation
tagint moloffset;
tagint *molecule = atom->molecule;
if (molecule) {
tagint max = 0;
for (int i = 0; i < nlocal_previous; i++) max = MAX(max,molecule[i]);
tagint maxmol;
MPI_Allreduce(&max,&maxmol,1,MPI_LMP_TAGINT,MPI_MAX,world);
MPI_Scan(&molcreate,&moloffset,1,MPI_INT,MPI_SUM,world);
moloffset = moloffset - molcreate + maxmol;
}
// loop over molecules I created
// set their molecule ID
// reset their bond,angle,etc and special values
int natoms = onemol->natoms;
tagint offset = 0;
tagint *tag = atom->tag;
int *num_bond = atom->num_bond;
int *num_angle = atom->num_angle;
int *num_dihedral = atom->num_dihedral;
int *num_improper = atom->num_improper;
tagint **bond_atom = atom->bond_atom;
tagint **angle_atom1 = atom->angle_atom1;
tagint **angle_atom2 = atom->angle_atom2;
tagint **angle_atom3 = atom->angle_atom3;
tagint **dihedral_atom1 = atom->dihedral_atom1;
tagint **dihedral_atom2 = atom->dihedral_atom2;
tagint **dihedral_atom3 = atom->dihedral_atom3;
tagint **dihedral_atom4 = atom->dihedral_atom4;
tagint **improper_atom1 = atom->improper_atom1;
tagint **improper_atom2 = atom->improper_atom2;
tagint **improper_atom3 = atom->improper_atom3;
tagint **improper_atom4 = atom->improper_atom4;
int **nspecial = atom->nspecial;
tagint **special = atom->special;
int molecular = atom->molecular;
int ilocal = nlocal_previous;
for (int i = 0; i < molcreate; i++) {
if (tag) offset = tag[ilocal]-1;
for (int m = 0; m < natoms; m++) {
if (molecular) molecule[ilocal] = moloffset + i+1;
if (molecular == 2) {
atom->molindex[ilocal] = 0;
atom->molatom[ilocal] = m;
} else if (molecular) {
if (onemol->bondflag)
for (int j = 0; j < num_bond[ilocal]; j++)
bond_atom[ilocal][j] += offset;
if (onemol->angleflag)
for (int j = 0; j < num_angle[ilocal]; j++) {
angle_atom1[ilocal][j] += offset;
angle_atom2[ilocal][j] += offset;
angle_atom3[ilocal][j] += offset;
}
if (onemol->dihedralflag)
for (int j = 0; j < num_dihedral[ilocal]; j++) {
dihedral_atom1[ilocal][j] += offset;
dihedral_atom2[ilocal][j] += offset;
dihedral_atom3[ilocal][j] += offset;
dihedral_atom4[ilocal][j] += offset;
}
if (onemol->improperflag)
for (int j = 0; j < num_improper[ilocal]; j++) {
improper_atom1[ilocal][j] += offset;
improper_atom2[ilocal][j] += offset;
improper_atom3[ilocal][j] += offset;
improper_atom4[ilocal][j] += offset;
}
if (onemol->specialflag)
for (int j = 0; j < nspecial[ilocal][2]; j++)
special[ilocal][j] += offset;
}
ilocal++;
}
}
// perform irregular comm to migrate atoms to new owning procs
double **x = atom->x;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]);
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->reset_box();
Irregular *irregular = new Irregular(lmp);
irregular->migrate_atoms();
delete irregular;
if (domain->triclinic) domain->lamda2x(atom->nlocal);
}
// clean up
delete ranmol;
if (domain->lattice) delete [] basistype;
// print status
if (comm->me == 0) {
if (screen)
fprintf(screen,"Created " BIGINT_FORMAT " atoms\n",
atom->natoms-natoms_previous);
if (logfile)
fprintf(logfile,"Created " BIGINT_FORMAT " atoms\n",
atom->natoms-natoms_previous);
}
// for MOLECULE mode:
// create special bond lists for molecular systems,
// but not for atom style template
// only if onemol added bonds but not special info
if (mode == MOLECULE) {
if (atom->molecular == 1 && onemol->bondflag && !onemol->specialflag) {
Special special(lmp);
special.build();
}
}
}
/* ----------------------------------------------------------------------
add single atom with coords at xone if it's in my sub-box
if triclinic, xone is in lamda coords
------------------------------------------------------------------------- */
void CreateAtoms::add_single()
{
// remap atom if requested
if (remapflag) {
imageint imagetmp = ((imageint) IMGMAX << IMG2BITS) |
((imageint) IMGMAX << IMGBITS) | IMGMAX;
domain->remap(xone,imagetmp);
}
// if triclinic, convert to lamda coords (0-1)
double lamda[3],*coord;
if (triclinic) {
domain->x2lamda(xone,lamda);
coord = lamda;
} else coord = xone;
// if atom/molecule is in my subbox, create it
if (coord[0] >= sublo[0] && coord[0] < subhi[0] &&
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
coord[2] >= sublo[2] && coord[2] < subhi[2]) {
if (mode == ATOM) atom->avec->create_atom(ntype,xone);
else add_molecule(xone);
}
}
/* ----------------------------------------------------------------------
add Nrandom atoms at random locations
------------------------------------------------------------------------- */
void CreateAtoms::add_random()
{
double xlo,ylo,zlo,xhi,yhi,zhi,zmid;
double lamda[3],*coord;
double *boxlo,*boxhi;
// random number generator, same for all procs
RanPark *random = new RanPark(lmp,seed);
// bounding box for atom creation
// in real units, even if triclinic
// only limit bbox by region if its bboxflag is set (interior region)
if (triclinic == 0) {
xlo = domain->boxlo[0]; xhi = domain->boxhi[0];
ylo = domain->boxlo[1]; yhi = domain->boxhi[1];
zlo = domain->boxlo[2]; zhi = domain->boxhi[2];
zmid = zlo + 0.5*(zhi-zlo);
} else {
xlo = domain->boxlo_bound[0]; xhi = domain->boxhi_bound[0];
ylo = domain->boxlo_bound[1]; yhi = domain->boxhi_bound[1];
zlo = domain->boxlo_bound[2]; zhi = domain->boxhi_bound[2];
zmid = zlo + 0.5*(zhi-zlo);
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
}
if (nregion >= 0 && domain->regions[nregion]->bboxflag) {
xlo = MAX(xlo,domain->regions[nregion]->extent_xlo);
xhi = MIN(xhi,domain->regions[nregion]->extent_xhi);
ylo = MAX(ylo,domain->regions[nregion]->extent_ylo);
yhi = MIN(yhi,domain->regions[nregion]->extent_yhi);
zlo = MAX(zlo,domain->regions[nregion]->extent_zlo);
zhi = MIN(zhi,domain->regions[nregion]->extent_zhi);
}
// generate random positions for each new atom/molecule within bounding box
// iterate until atom is within region and triclinic simulation box
// if final atom position is in my subbox, create it
if (xlo > xhi || ylo > yhi || zlo > zhi)
error->all(FLERR,"No overlap of box and region for create_atoms");
int valid;
for (int i = 0; i < nrandom; i++) {
while (1) {
xone[0] = xlo + random->uniform() * (xhi-xlo);
xone[1] = ylo + random->uniform() * (yhi-ylo);
xone[2] = zlo + random->uniform() * (zhi-zlo);
if (domain->dimension == 2) xone[2] = zmid;
valid = 1;
if (nregion >= 0 &&
domain->regions[nregion]->match(xone[0],xone[1],xone[2]) == 0)
valid = 0;
if (triclinic) {
domain->x2lamda(xone,lamda);
coord = lamda;
if (coord[0] < boxlo[0] || coord[0] >= boxhi[0] ||
coord[1] < boxlo[1] || coord[1] >= boxhi[1] ||
coord[2] < boxlo[2] || coord[2] >= boxhi[2]) valid = 0;
} else coord = xone;
if (valid) break;
}
// if triclinic, coord is now in lamda units
if (coord[0] >= sublo[0] && coord[0] < subhi[0] &&
coord[1] >= sublo[1] && coord[1] < subhi[1] &&
coord[2] >= sublo[2] && coord[2] < subhi[2]) {
if (mode == ATOM) atom->avec->create_atom(ntype,xone);
else add_molecule(xone);
}
}
// clean-up
delete random;
}
/* ----------------------------------------------------------------------
add many atoms by looping over lattice
------------------------------------------------------------------------- */
void CreateAtoms::add_lattice()
{
// convert 8 corners of my subdomain from box coords to lattice coords
// for orthogonal, use corner pts of my subbox
// for triclinic, use bounding box of my subbox
// xyz min to max = bounding box around the domain corners in lattice space
double bboxlo[3],bboxhi[3];
if (triclinic == 0) {
bboxlo[0] = domain->sublo[0]; bboxhi[0] = domain->subhi[0];
bboxlo[1] = domain->sublo[1]; bboxhi[1] = domain->subhi[1];
bboxlo[2] = domain->sublo[2]; bboxhi[2] = domain->subhi[2];
} else domain->bbox(domain->sublo_lamda,domain->subhi_lamda,bboxlo,bboxhi);
double xmin,ymin,zmin,xmax,ymax,zmax;
xmin = ymin = zmin = BIG;
xmax = ymax = zmax = -BIG;
domain->lattice->bbox(1,bboxlo[0],bboxlo[1],bboxlo[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxhi[0],bboxlo[1],bboxlo[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxlo[0],bboxhi[1],bboxlo[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxhi[0],bboxhi[1],bboxlo[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxlo[0],bboxlo[1],bboxhi[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxhi[0],bboxlo[1],bboxhi[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxlo[0],bboxhi[1],bboxhi[2],
xmin,ymin,zmin,xmax,ymax,zmax);
domain->lattice->bbox(1,bboxhi[0],bboxhi[1],bboxhi[2],
xmin,ymin,zmin,xmax,ymax,zmax);
// ilo:ihi,jlo:jhi,klo:khi = loop bounds for lattice overlap of my subbox
// overlap = any part of a unit cell (face,edge,pt) in common with my subbox
// in lattice space, subbox is a tilted box
// but bbox of subbox is aligned with lattice axes
// so ilo:khi unit cells should completely tile bounding box
// decrement lo, increment hi to avoid round-off issues in lattice->bbox(),
// which can lead to missing atoms in rare cases
// extra decrement of lo if min < 0, since static_cast(-1.5) = -1
int ilo,ihi,jlo,jhi,klo,khi;
ilo = static_cast<int> (xmin) - 1;
jlo = static_cast<int> (ymin) - 1;
klo = static_cast<int> (zmin) - 1;
ihi = static_cast<int> (xmax) + 1;
jhi = static_cast<int> (ymax) + 1;
khi = static_cast<int> (zmax) + 1;
if (xmin < 0.0) ilo--;
if (ymin < 0.0) jlo--;
if (zmin < 0.0) klo--;
// iterate on 3d periodic lattice of unit cells using loop bounds
// iterate on nbasis atoms in each unit cell
// convert lattice coords to box coords
// add atom or molecule (on each basis point) if it meets all criteria
double **basis = domain->lattice->basis;
double x[3],lamda[3];
double *coord;
int i,j,k,m;
for (k = klo; k <= khi; k++)
for (j = jlo; j <= jhi; j++)
for (i = ilo; i <= ihi; i++)
for (m = 0; m < nbasis; m++) {
x[0] = i + basis[m][0];
x[1] = j + basis[m][1];
x[2] = k + basis[m][2];
// convert from lattice coords to box coords
domain->lattice->lattice2box(x[0],x[1],x[2]);
// if a region was specified, test if atom is in it
if (style == REGION)
if (!domain->regions[nregion]->match(x[0],x[1],x[2])) continue;
// test if atom/molecule position is in my subbox
if (triclinic) {
domain->x2lamda(x,lamda);
coord = lamda;
} else coord = x;
if (coord[0] < sublo[0] || coord[0] >= subhi[0] ||
coord[1] < sublo[1] || coord[1] >= subhi[1] ||
coord[2] < sublo[2] || coord[2] >= subhi[2]) continue;
// add the atom or entire molecule to my list of atoms
if (mode == ATOM) atom->avec->create_atom(basistype[m],x);
else add_molecule(x);
}
}
/* ----------------------------------------------------------------------
add a randomly rotated molecule with its center at center
------------------------------------------------------------------------- */
void CreateAtoms::add_molecule(double *center)
{
int n;
double r[3],rotmat[3][3],quat[4],xnew[3];
if (domain->dimension == 3) {
r[0] = ranmol->uniform() - 0.5;
r[1] = ranmol->uniform() - 0.5;
r[2] = ranmol->uniform() - 0.5;
} else {
r[0] = r[1] = 0.0;
r[2] = 1.0;
}
double theta = ranmol->uniform() * MY_2PI;
MathExtra::norm3(r);
MathExtra::axisangle_to_quat(r,theta,quat);
MathExtra::quat_to_mat(quat,rotmat);
// create atoms in molecule with atom ID = 0 and mol ID = 0
// reset in caller after all moleclues created by all procs
// pass add_molecule_atom an offset of 0 since don't know
// max tag of atoms in previous molecules at this point
int natoms = onemol->natoms;
for (int m = 0; m < natoms; m++) {
MathExtra::matvec(rotmat,onemol->dx[m],xnew);
MathExtra::add3(xnew,center,xnew);
atom->avec->create_atom(ntype+onemol->type[m],xnew);
n = atom->nlocal - 1;
atom->add_molecule_atom(onemol,m,n,0);
}
}
diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp
index e75e2e5ab..916fcadad 100644
--- a/src/delete_atoms.cpp
+++ b/src/delete_atoms.cpp
@@ -1,439 +1,442 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "stdlib.h"
#include "string.h"
#include "delete_atoms.h"
#include "atom.h"
#include "atom_vec.h"
#include "comm.h"
#include "domain.h"
#include "force.h"
#include "group.h"
#include "region.h"
#include "neighbor.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "random_mars.h"
#include "memory.h"
#include "error.h"
#include <map>
using namespace LAMMPS_NS;
// allocate space for static class variable
DeleteAtoms *DeleteAtoms::cptr;
/* ---------------------------------------------------------------------- */
DeleteAtoms::DeleteAtoms(LAMMPS *lmp) : Pointers(lmp) {}
/* ---------------------------------------------------------------------- */
void DeleteAtoms::command(int narg, char **arg)
{
if (domain->box_exist == 0)
error->all(FLERR,"Delete_atoms command before simulation box is defined");
if (narg < 1) error->all(FLERR,"Illegal delete_atoms command");
if (atom->tag_enable == 0)
error->all(FLERR,"Cannot use delete_atoms unless atoms have IDs");
// store state before delete
bigint natoms_previous = atom->natoms;
// delete the atoms
if (strcmp(arg[0],"group") == 0) delete_group(narg,arg);
else if (strcmp(arg[0],"region") == 0) delete_region(narg,arg);
else if (strcmp(arg[0],"overlap") == 0) delete_overlap(narg,arg);
else if (strcmp(arg[0],"porosity") == 0) delete_porosity(narg,arg);
else error->all(FLERR,"Illegal delete_atoms command");
// delete local atoms flagged in dlist
// reset nlocal
AtomVec *avec = atom->avec;
int nlocal = atom->nlocal;
int i = 0;
while (i < nlocal) {
if (dlist[i]) {
avec->copy(nlocal-1,i,1);
dlist[i] = dlist[nlocal-1];
nlocal--;
} else i++;
}
atom->nlocal = nlocal;
memory->destroy(dlist);
// if non-molecular system and compress flag set,
// reset atom tags to be contiguous
// set all atom IDs to 0, call tag_extend()
if (atom->molecular == 0 && compress_flag) {
tagint *tag = atom->tag;
for (i = 0; i < nlocal; i++) tag[i] = 0;
atom->tag_extend();
}
// reset atom->natoms
// reset atom->map if it exists
// set nghost to 0 so old ghosts of deleted atoms won't be mapped
bigint nblocal = atom->nlocal;
MPI_Allreduce(&nblocal,&atom->natoms,1,MPI_LMP_BIGINT,MPI_SUM,world);
if (atom->map_style) {
atom->nghost = 0;
atom->map_init();
atom->map_set();
}
// print before and after atom count
bigint ndelete = natoms_previous - atom->natoms;
if (comm->me == 0) {
if (screen) fprintf(screen,"Deleted " BIGINT_FORMAT
" atoms, new total = " BIGINT_FORMAT "\n",
ndelete,atom->natoms);
if (logfile) fprintf(logfile,"Deleted " BIGINT_FORMAT
" atoms, new total = " BIGINT_FORMAT "\n",
ndelete,atom->natoms);
}
}
/* ----------------------------------------------------------------------
delete all atoms in group, group will still exist
------------------------------------------------------------------------- */
void DeleteAtoms::delete_group(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal delete_atoms command");
int igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find delete_atoms group ID");
options(narg-2,&arg[2]);
// allocate and initialize deletion list
int nlocal = atom->nlocal;
memory->create(dlist,nlocal,"delete_atoms:dlist");
for (int i = 0; i < nlocal; i++) dlist[i] = 0;
int *mask = atom->mask;
int groupbit = group->bitmask[igroup];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) dlist[i] = 1;
if (mol_flag) delete_molecule();
}
/* ----------------------------------------------------------------------
delete all atoms in region
------------------------------------------------------------------------- */
void DeleteAtoms::delete_region(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal delete_atoms command");
int iregion = domain->find_region(arg[1]);
if (iregion == -1) error->all(FLERR,"Could not find delete_atoms region ID");
+ domain->regions[iregion]->prematch();
+
options(narg-2,&arg[2]);
// allocate and initialize deletion list
int nlocal = atom->nlocal;
memory->create(dlist,nlocal,"delete_atoms:dlist");
for (int i = 0; i < nlocal; i++) dlist[i] = 0;
double **x = atom->x;
for (int i = 0; i < nlocal; i++)
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2])) dlist[i] = 1;
if (mol_flag) delete_molecule();
}
/* ----------------------------------------------------------------------
delete atoms so there are no pairs within cutoff
which atoms are deleted depends on ordering of atoms within proc
deletions can vary with processor count
no guarantee that minimium number of atoms will be deleted
------------------------------------------------------------------------- */
void DeleteAtoms::delete_overlap(int narg, char **arg)
{
if (narg < 4) error->all(FLERR,"Illegal delete_atoms command");
// read args
double cut = force->numeric(FLERR,arg[1]);
double cutsq = cut*cut;
int igroup1 = group->find(arg[2]);
int igroup2 = group->find(arg[3]);
if (igroup1 < 0 || igroup2 < 0)
error->all(FLERR,"Could not find delete_atoms group ID");
options(narg-4,&arg[4]);
int group1bit = group->bitmask[igroup1];
int group2bit = group->bitmask[igroup2];
if (comm->me == 0 && screen)
fprintf(screen,"System init for delete_atoms ...\n");
// request a full neighbor list for use by this command
int irequest = neighbor->request((void *) this);
neighbor->requests[irequest]->pair = 0;
neighbor->requests[irequest]->command = 1;
neighbor->requests[irequest]->half = 0;
neighbor->requests[irequest]->full = 1;
neighbor->requests[irequest]->occasional = 1;
// init entire system since comm->borders and neighbor->build is done
// comm::init needs neighbor::init needs pair::init needs kspace::init, etc
lmp->init();
// error check on cutoff
// if no pair style, neighbor list will be empty
if (force->pair == NULL)
error->all(FLERR,"Delete_atoms requires a pair style be defined");
if (cut > neighbor->cutneighmax)
error->all(FLERR,"Delete_atoms cutoff > neighbor cutoff");
// setup domain, communication and neighboring
// acquire ghosts and build standard neighbor lists
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
domain->reset_box();
comm->setup();
if (neighbor->style) neighbor->setup_bins();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
neighbor->build();
// build neighbor list this command needs based on earlier request
NeighList *list = neighbor->lists[irequest];
neighbor->build_one(irequest);
// allocate and initialize deletion list
// must be after exchange potentially changes nlocal
int nlocal = atom->nlocal;
memory->create(dlist,nlocal,"delete_atoms:dlist");
for (int i = 0; i < nlocal; i++) dlist[i] = 0;
// double loop over owned atoms and their full neighbor list
// at end of loop, there are no more overlaps
// only ever delete owned atom I, never J even if owned
tagint *tag = atom->tag;
int *mask = atom->mask;
double **x = atom->x;
double *special_coul = force->special_coul;
double *special_lj = force->special_lj;
int i,j,ii,jj,inum,jnum;
double xtmp,ytmp,ztmp,delx,dely,delz,rsq;
int *ilist,*jlist,*numneigh,**firstneigh;
double factor_lj,factor_coul;
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
for (ii = 0; ii < inum; ii++) {
i = ilist[ii];
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
jlist = firstneigh[i];
jnum = numneigh[i];
for (jj = 0; jj < jnum; jj++) {
j = jlist[jj];
factor_lj = special_lj[sbmask(j)];
factor_coul = special_coul[sbmask(j)];
j &= NEIGHMASK;
// if both weighting factors are 0, skip this pair
// could be 0 and still be in neigh list for long-range Coulombics
// want consistency with non-charged pairs which wouldn't be in list
if (factor_lj == 0.0 && factor_coul == 0.0) continue;
// only consider deletion if I,J distance < cutoff
delx = xtmp - x[j][0];
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx*delx + dely*dely + delz*delz;
if (rsq >= cutsq) continue;
// only consider deletion if I,J are in groups 1,2 respectively
// true whether J is owned or ghost atom
if (!(mask[i] & group1bit)) continue;
if (!(mask[j] & group2bit)) continue;
// J is owned atom:
// delete atom I if atom J has not already been deleted
// J is ghost atom:
// delete atom I if J,I is not a candidate deletion pair
// due to being in groups 1,2 respectively
// if they are candidate pair, then either:
// another proc owns J and could delete J
// J is a ghost of another of my owned atoms, and I could delete J
// test on tags of I,J insures that only I or J is deleted
if (j < nlocal) {
if (dlist[j]) continue;
} else if ((mask[i] & group2bit) && (mask[j] & group1bit)) {
if (tag[i] > tag[j]) continue;
}
dlist[i] = 1;
break;
}
}
if (mol_flag) delete_molecule();
}
/* ----------------------------------------------------------------------
create porosity by deleting atoms in a specified region
------------------------------------------------------------------------- */
void DeleteAtoms::delete_porosity(int narg, char **arg)
{
if (narg < 4) error->all(FLERR,"Illegal delete_atoms command");
int iregion = domain->find_region(arg[1]);
if (iregion == -1) error->all(FLERR,"Could not find delete_atoms region ID");
+ domain->regions[iregion]->prematch();
double porosity_fraction = force->numeric(FLERR,arg[2]);
int seed = force->inumeric(FLERR,arg[3]);
options(narg-4,&arg[4]);
RanMars *random = new RanMars(lmp,seed + comm->me);
// allocate and initialize deletion list
int nlocal = atom->nlocal;
memory->create(dlist,nlocal,"delete_atoms:dlist");
for (int i = 0; i < nlocal; i++) dlist[i] = 0;
double **x = atom->x;
for (int i = 0; i < nlocal; i++)
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
if (random->uniform() <= porosity_fraction) dlist[i] = 1;
if (mol_flag) delete_molecule();
}
/* ----------------------------------------------------------------------
delete atoms in molecules with any deletions
use dlist marked with atom deletions, and mark additional atoms
------------------------------------------------------------------------- */
void DeleteAtoms::delete_molecule()
{
// hash = unique molecule IDs from which I deleted atoms
hash = new std::map<tagint,int>();
tagint *molecule = atom->molecule;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (dlist[i] && hash->find(molecule[i]) == hash->end())
(*hash)[molecule[i]] = 1;
// list = set of unique molecule IDs from which I deleted atoms
// pass list to all other procs via comm->ring()
int n = hash->size();
tagint *list;
memory->create(list,n,"delete_atoms:list");
n = 0;
std::map<tagint,int>::iterator pos;
for (pos = hash->begin(); pos != hash->end(); ++pos) list[n++] = pos->first;
cptr = this;
comm->ring(n,sizeof(tagint),list,1,molring,NULL);
delete hash;
memory->destroy(list);
}
/* ----------------------------------------------------------------------
callback from comm->ring()
cbuf = list of N molecule IDs, put them in hash
loop over my atoms, if matches molecule ID in hash, delete that atom
------------------------------------------------------------------------- */
void DeleteAtoms::molring(int n, char *cbuf)
{
tagint *list = (tagint *) cbuf;
int *dlist = cptr->dlist;
std::map<tagint,int> *hash = cptr->hash;
int nlocal = cptr->atom->nlocal;
tagint *molecule = cptr->atom->molecule;
hash->clear();
for (int i = 0; i < n; i++) (*hash)[list[i]] = 1;
for (int i = 0; i < nlocal; i++)
if (hash->find(molecule[i]) != hash->end()) dlist[i] = 1;
}
/* ----------------------------------------------------------------------
process command options
------------------------------------------------------------------------- */
void DeleteAtoms::options(int narg, char **arg)
{
compress_flag = 1;
mol_flag = 0;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"compress") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal delete_atoms command");
if (strcmp(arg[iarg+1],"yes") == 0) compress_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) compress_flag = 0;
else error->all(FLERR,"Illegal delete_atoms command");
iarg += 2;
} else if (strcmp(arg[iarg],"mol") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal delete_atoms command");
if (strcmp(arg[iarg+1],"yes") == 0) mol_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) mol_flag = 0;
else error->all(FLERR,"Illegal delete_atoms command");
iarg += 2;
} else error->all(FLERR,"Illegal delete_atoms command");
}
}
diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp
index 1c7bf6fcc..bafe82882 100644
--- a/src/dump_custom.cpp
+++ b/src/dump_custom.cpp
@@ -1,2467 +1,2468 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "dump_custom.h"
#include "atom.h"
#include "force.h"
#include "domain.h"
#include "region.h"
#include "group.h"
#include "input.h"
#include "variable.h"
#include "update.h"
#include "modify.h"
#include "compute.h"
#include "fix.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
// customize by adding keyword
// also customize compute_atom_property.cpp
enum{ID,MOL,TYPE,ELEMENT,MASS,
X,Y,Z,XS,YS,ZS,XSTRI,YSTRI,ZSTRI,XU,YU,ZU,XUTRI,YUTRI,ZUTRI,
XSU,YSU,ZSU,XSUTRI,YSUTRI,ZSUTRI,
IX,IY,IZ,
VX,VY,VZ,FX,FY,FZ,
Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER,
OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ,
TQX,TQY,TQZ,SPIN,ERADIUS,ERVEL,ERFORCE,
COMPUTE,FIX,VARIABLE};
enum{LT,LE,GT,GE,EQ,NEQ};
enum{INT,DOUBLE,STRING,BIGINT}; // same as in DumpCFG
#define INVOKED_PERATOM 8
#define ONEFIELD 32
#define DELTA 1048576
/* ---------------------------------------------------------------------- */
DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
Dump(lmp, narg, arg)
{
if (narg == 5) error->all(FLERR,"No dump custom arguments specified");
clearstep = 1;
nevery = force->inumeric(FLERR,arg[3]);
// size_one may be shrunk below if additional optional args exist
size_one = nfield = narg - 5;
pack_choice = new FnPtrPack[nfield];
vtype = new int[nfield];
buffer_allow = 1;
buffer_flag = 1;
iregion = -1;
idregion = NULL;
nthresh = 0;
thresh_array = NULL;
thresh_op = NULL;
thresh_value = NULL;
// computes, fixes, variables which the dump accesses
memory->create(field2index,nfield,"dump:field2index");
memory->create(argindex,nfield,"dump:argindex");
ncompute = 0;
id_compute = NULL;
compute = NULL;
nfix = 0;
id_fix = NULL;
fix = NULL;
nvariable = 0;
id_variable = NULL;
variable = NULL;
vbuf = NULL;
// process attributes
// ioptional = start of additional optional args
// only dump image and dump movie styles process optional args
ioptional = parse_fields(narg,arg);
if (ioptional < narg &&
strcmp(style,"image") != 0 && strcmp(style,"movie") != 0)
error->all(FLERR,"Invalid attribute in dump custom command");
size_one = nfield = ioptional - 5;
// atom selection arrays
maxlocal = 0;
choose = NULL;
dchoose = NULL;
clist = NULL;
// element names
ntypes = atom->ntypes;
typenames = NULL;
// setup format strings
vformat = new char*[size_one];
format_default = new char[3*size_one+1];
format_default[0] = '\0';
for (int i = 0; i < size_one; i++) {
if (vtype[i] == INT) strcat(format_default,"%d ");
else if (vtype[i] == DOUBLE) strcat(format_default,"%g ");
else if (vtype[i] == STRING) strcat(format_default,"%s ");
else if (vtype[i] == BIGINT) strcat(format_default,BIGINT_FORMAT " ");
vformat[i] = NULL;
}
// setup column string
int n = 0;
for (int iarg = 5; iarg < narg; iarg++) n += strlen(arg[iarg]) + 2;
columns = new char[n];
columns[0] = '\0';
for (int iarg = 5; iarg < narg; iarg++) {
strcat(columns,arg[iarg]);
strcat(columns," ");
}
}
/* ---------------------------------------------------------------------- */
DumpCustom::~DumpCustom()
{
delete [] pack_choice;
delete [] vtype;
memory->destroy(field2index);
memory->destroy(argindex);
delete [] idregion;
memory->destroy(thresh_array);
memory->destroy(thresh_op);
memory->destroy(thresh_value);
for (int i = 0; i < ncompute; i++) delete [] id_compute[i];
memory->sfree(id_compute);
delete [] compute;
for (int i = 0; i < nfix; i++) delete [] id_fix[i];
memory->sfree(id_fix);
delete [] fix;
for (int i = 0; i < nvariable; i++) delete [] id_variable[i];
memory->sfree(id_variable);
delete [] variable;
for (int i = 0; i < nvariable; i++) memory->destroy(vbuf[i]);
delete [] vbuf;
memory->destroy(choose);
memory->destroy(dchoose);
memory->destroy(clist);
if (typenames) {
for (int i = 1; i <= ntypes; i++) delete [] typenames[i];
delete [] typenames;
}
for (int i = 0; i < size_one; i++) delete [] vformat[i];
delete [] vformat;
delete [] columns;
}
/* ---------------------------------------------------------------------- */
void DumpCustom::init_style()
{
delete [] format;
char *str;
if (format_user) str = format_user;
else str = format_default;
int n = strlen(str) + 1;
format = new char[n];
strcpy(format,str);
// default for element names = C
if (typenames == NULL) {
typenames = new char*[ntypes+1];
for (int itype = 1; itype <= ntypes; itype++) {
typenames[itype] = new char[2];
strcpy(typenames[itype],"C");
}
}
// tokenize the format string and add space at end of each format element
char *ptr;
for (int i = 0; i < size_one; i++) {
if (i == 0) ptr = strtok(format," \0");
else ptr = strtok(NULL," \0");
if (ptr == NULL) error->all(FLERR,"Dump_modify format string is too short");
delete [] vformat[i];
vformat[i] = new char[strlen(ptr) + 2];
strcpy(vformat[i],ptr);
vformat[i] = strcat(vformat[i]," ");
}
// setup boundary string
domain->boundary_string(boundstr);
// setup function ptrs
if (binary && domain->triclinic == 0)
header_choice = &DumpCustom::header_binary;
else if (binary && domain->triclinic == 1)
header_choice = &DumpCustom::header_binary_triclinic;
else if (!binary && domain->triclinic == 0)
header_choice = &DumpCustom::header_item;
else if (!binary && domain->triclinic == 1)
header_choice = &DumpCustom::header_item_triclinic;
if (binary) write_choice = &DumpCustom::write_binary;
else if (buffer_flag == 1) write_choice = &DumpCustom::write_string;
else write_choice = &DumpCustom::write_lines;
// find current ptr for each compute,fix,variable
// check that fix frequency is acceptable
int icompute;
for (int i = 0; i < ncompute; i++) {
icompute = modify->find_compute(id_compute[i]);
if (icompute < 0) error->all(FLERR,"Could not find dump custom compute ID");
compute[i] = modify->compute[icompute];
}
int ifix;
for (int i = 0; i < nfix; i++) {
ifix = modify->find_fix(id_fix[i]);
if (ifix < 0) error->all(FLERR,"Could not find dump custom fix ID");
fix[i] = modify->fix[ifix];
if (nevery % modify->fix[ifix]->peratom_freq)
error->all(FLERR,"Dump custom and fix not computed at compatible times");
}
int ivariable;
for (int i = 0; i < nvariable; i++) {
ivariable = input->variable->find(id_variable[i]);
if (ivariable < 0)
error->all(FLERR,"Could not find dump custom variable name");
variable[i] = ivariable;
}
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for dump custom does not exist");
}
// open single file, one time only
if (multifile == 0) openfile();
}
/* ---------------------------------------------------------------------- */
void DumpCustom::write_header(bigint ndump)
{
if (multiproc) (this->*header_choice)(ndump);
else if (me == 0) (this->*header_choice)(ndump);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::header_binary(bigint ndump)
{
fwrite(&update->ntimestep,sizeof(bigint),1,fp);
fwrite(&ndump,sizeof(bigint),1,fp);
fwrite(&domain->triclinic,sizeof(int),1,fp);
fwrite(&domain->boundary[0][0],6*sizeof(int),1,fp);
fwrite(&boxxlo,sizeof(double),1,fp);
fwrite(&boxxhi,sizeof(double),1,fp);
fwrite(&boxylo,sizeof(double),1,fp);
fwrite(&boxyhi,sizeof(double),1,fp);
fwrite(&boxzlo,sizeof(double),1,fp);
fwrite(&boxzhi,sizeof(double),1,fp);
fwrite(&size_one,sizeof(int),1,fp);
if (multiproc) fwrite(&nclusterprocs,sizeof(int),1,fp);
else fwrite(&nprocs,sizeof(int),1,fp);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::header_binary_triclinic(bigint ndump)
{
fwrite(&update->ntimestep,sizeof(bigint),1,fp);
fwrite(&ndump,sizeof(bigint),1,fp);
fwrite(&domain->triclinic,sizeof(int),1,fp);
fwrite(&domain->boundary[0][0],6*sizeof(int),1,fp);
fwrite(&boxxlo,sizeof(double),1,fp);
fwrite(&boxxhi,sizeof(double),1,fp);
fwrite(&boxylo,sizeof(double),1,fp);
fwrite(&boxyhi,sizeof(double),1,fp);
fwrite(&boxzlo,sizeof(double),1,fp);
fwrite(&boxzhi,sizeof(double),1,fp);
fwrite(&boxxy,sizeof(double),1,fp);
fwrite(&boxxz,sizeof(double),1,fp);
fwrite(&boxyz,sizeof(double),1,fp);
fwrite(&size_one,sizeof(int),1,fp);
if (multiproc) fwrite(&nclusterprocs,sizeof(int),1,fp);
else fwrite(&nprocs,sizeof(int),1,fp);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::header_item(bigint ndump)
{
fprintf(fp,"ITEM: TIMESTEP\n");
fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep);
fprintf(fp,"ITEM: NUMBER OF ATOMS\n");
fprintf(fp,BIGINT_FORMAT "\n",ndump);
fprintf(fp,"ITEM: BOX BOUNDS %s\n",boundstr);
fprintf(fp,"%g %g\n",boxxlo,boxxhi);
fprintf(fp,"%g %g\n",boxylo,boxyhi);
fprintf(fp,"%g %g\n",boxzlo,boxzhi);
fprintf(fp,"ITEM: ATOMS %s\n",columns);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::header_item_triclinic(bigint ndump)
{
fprintf(fp,"ITEM: TIMESTEP\n");
fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep);
fprintf(fp,"ITEM: NUMBER OF ATOMS\n");
fprintf(fp,BIGINT_FORMAT "\n",ndump);
fprintf(fp,"ITEM: BOX BOUNDS xy xz yz %s\n",boundstr);
fprintf(fp,"%g %g %g\n",boxxlo,boxxhi,boxxy);
fprintf(fp,"%g %g %g\n",boxylo,boxyhi,boxxz);
fprintf(fp,"%g %g %g\n",boxzlo,boxzhi,boxyz);
fprintf(fp,"ITEM: ATOMS %s\n",columns);
}
/* ---------------------------------------------------------------------- */
int DumpCustom::count()
{
int i;
// grow choose and variable vbuf arrays if needed
int nlocal = atom->nlocal;
if (nlocal > maxlocal) {
maxlocal = atom->nmax;
memory->destroy(choose);
memory->destroy(dchoose);
memory->destroy(clist);
memory->create(choose,maxlocal,"dump:choose");
memory->create(dchoose,maxlocal,"dump:dchoose");
memory->create(clist,maxlocal,"dump:clist");
for (i = 0; i < nvariable; i++) {
memory->destroy(vbuf[i]);
memory->create(vbuf[i],maxlocal,"dump:vbuf");
}
}
// invoke Computes for per-atom quantities
if (ncompute) {
for (i = 0; i < ncompute; i++)
if (!(compute[i]->invoked_flag & INVOKED_PERATOM)) {
compute[i]->compute_peratom();
compute[i]->invoked_flag |= INVOKED_PERATOM;
}
}
// evaluate atom-style Variables for per-atom quantities
if (nvariable)
for (i = 0; i < nvariable; i++)
input->variable->compute_atom(variable[i],igroup,vbuf[i],1,0);
// choose all local atoms for output
for (i = 0; i < nlocal; i++) choose[i] = 1;
// un-choose if not in group
if (igroup) {
int *mask = atom->mask;
for (i = 0; i < nlocal; i++)
if (!(mask[i] & groupbit))
choose[i] = 0;
}
// un-choose if not in region
if (iregion >= 0) {
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
for (i = 0; i < nlocal; i++)
if (choose[i] && region->match(x[i][0],x[i][1],x[i][2]) == 0)
choose[i] = 0;
}
// un-choose if any threshhold criterion isn't met
if (nthresh) {
double *ptr;
double value;
int nstride;
int nlocal = atom->nlocal;
for (int ithresh = 0; ithresh < nthresh; ithresh++) {
// customize by adding to if statement
if (thresh_array[ithresh] == ID) {
tagint *tag = atom->tag;
for (i = 0; i < nlocal; i++) dchoose[i] = tag[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == MOL) {
if (!atom->molecule_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
tagint *molecule = atom->molecule;
for (i = 0; i < nlocal; i++) dchoose[i] = molecule[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == TYPE) {
int *type = atom->type;
for (i = 0; i < nlocal; i++) dchoose[i] = type[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ELEMENT) {
int *type = atom->type;
for (i = 0; i < nlocal; i++) dchoose[i] = type[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == MASS) {
if (atom->rmass) {
ptr = atom->rmass;
nstride = 1;
} else {
double *mass = atom->mass;
int *type = atom->type;
for (i = 0; i < nlocal; i++) dchoose[i] = mass[type[i]];
ptr = dchoose;
nstride = 1;
}
} else if (thresh_array[ithresh] == X) {
ptr = &atom->x[0][0];
nstride = 3;
} else if (thresh_array[ithresh] == Y) {
ptr = &atom->x[0][1];
nstride = 3;
} else if (thresh_array[ithresh] == Z) {
ptr = &atom->x[0][2];
nstride = 3;
} else if (thresh_array[ithresh] == XS) {
double **x = atom->x;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = (x[i][0] - boxxlo) * invxprd;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == YS) {
double **x = atom->x;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = (x[i][1] - boxylo) * invyprd;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ZS) {
double **x = atom->x;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = (x[i][2] - boxzlo) * invzprd;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == XSTRI) {
double **x = atom->x;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (i = 0; i < nlocal; i++)
dchoose[i] = h_inv[0]*(x[i][0]-boxlo[0]) +
h_inv[5]*(x[i][1]-boxlo[1]) + h_inv[4]*(x[i][2]-boxlo[2]);
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == YSTRI) {
double **x = atom->x;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (i = 0; i < nlocal; i++)
dchoose[i] = h_inv[1]*(x[i][1]-boxlo[1]) +
h_inv[3]*(x[i][2]-boxlo[2]);
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ZSTRI) {
double **x = atom->x;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (i = 0; i < nlocal; i++)
dchoose[i] = h_inv[2]*(x[i][2]-boxlo[2]);
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == XU) {
double **x = atom->x;
imageint *image = atom->image;
double xprd = domain->xprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = x[i][0] + ((image[i] & IMGMASK) - IMGMAX) * xprd;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == YU) {
double **x = atom->x;
imageint *image = atom->image;
double yprd = domain->yprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = x[i][1] +
((image[i] >> IMGBITS & IMGMASK) - IMGMAX) * yprd;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ZU) {
double **x = atom->x;
imageint *image = atom->image;
double zprd = domain->zprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = x[i][2] + ((image[i] >> IMG2BITS) - IMGMAX) * zprd;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == XUTRI) {
double **x = atom->x;
imageint *image = atom->image;
double *h = domain->h;
int xbox,ybox,zbox;
for (i = 0; i < nlocal; i++) {
xbox = (image[i] & IMGMASK) - IMGMAX;
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dchoose[i] = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox;
}
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == YUTRI) {
double **x = atom->x;
imageint *image = atom->image;
double *h = domain->h;
int ybox,zbox;
for (i = 0; i < nlocal; i++) {
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dchoose[i] = x[i][1] + h[1]*ybox + h[3]*zbox;
}
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ZUTRI) {
double **x = atom->x;
imageint *image = atom->image;
double *h = domain->h;
int zbox;
for (i = 0; i < nlocal; i++) {
zbox = (image[i] >> IMG2BITS) - IMGMAX;
dchoose[i] = x[i][2] + h[2]*zbox;
}
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == XSU) {
double **x = atom->x;
imageint *image = atom->image;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = (x[i][0] - boxxlo) * invxprd +
(image[i] & IMGMASK) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == YSU) {
double **x = atom->x;
imageint *image = atom->image;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (i = 0; i < nlocal; i++)
dchoose[i] =
(x[i][1] - boxylo) * invyprd +
(image[i] >> IMGBITS & IMGMASK) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ZSU) {
double **x = atom->x;
imageint *image = atom->image;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (i = 0; i < nlocal; i++)
dchoose[i] = (x[i][2] - boxzlo) * invzprd +
(image[i] >> IMG2BITS) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == XSUTRI) {
double **x = atom->x;
imageint *image = atom->image;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (i = 0; i < nlocal; i++)
dchoose[i] = h_inv[0]*(x[i][0]-boxlo[0]) +
h_inv[5]*(x[i][1]-boxlo[1]) +
h_inv[4]*(x[i][2]-boxlo[2]) +
(image[i] & IMGMASK) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == YSUTRI) {
double **x = atom->x;
imageint *image = atom->image;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (i = 0; i < nlocal; i++)
dchoose[i] = h_inv[1]*(x[i][1]-boxlo[1]) +
h_inv[3]*(x[i][2]-boxlo[2]) +
(image[i] >> IMGBITS & IMGMASK) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ZSUTRI) {
double **x = atom->x;
imageint *image = atom->image;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (i = 0; i < nlocal; i++)
dchoose[i] = h_inv[2]*(x[i][2]-boxlo[2]) +
(image[i] >> IMG2BITS) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == IX) {
imageint *image = atom->image;
for (i = 0; i < nlocal; i++)
dchoose[i] = (image[i] & IMGMASK) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == IY) {
imageint *image = atom->image;
for (i = 0; i < nlocal; i++)
dchoose[i] = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == IZ) {
imageint *image = atom->image;
for (i = 0; i < nlocal; i++)
dchoose[i] = (image[i] >> IMG2BITS) - IMGMAX;
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == VX) {
ptr = &atom->v[0][0];
nstride = 3;
} else if (thresh_array[ithresh] == VY) {
ptr = &atom->v[0][1];
nstride = 3;
} else if (thresh_array[ithresh] == VZ) {
ptr = &atom->v[0][2];
nstride = 3;
} else if (thresh_array[ithresh] == FX) {
ptr = &atom->f[0][0];
nstride = 3;
} else if (thresh_array[ithresh] == FY) {
ptr = &atom->f[0][1];
nstride = 3;
} else if (thresh_array[ithresh] == FZ) {
ptr = &atom->f[0][2];
nstride = 3;
} else if (thresh_array[ithresh] == Q) {
if (!atom->q_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->q;
nstride = 1;
} else if (thresh_array[ithresh] == MUX) {
if (!atom->mu_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->mu[0][0];
nstride = 4;
} else if (thresh_array[ithresh] == MUY) {
if (!atom->mu_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->mu[0][1];
nstride = 4;
} else if (thresh_array[ithresh] == MUZ) {
if (!atom->mu_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->mu[0][2];
nstride = 4;
} else if (thresh_array[ithresh] == MU) {
if (!atom->mu_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->mu[0][3];
nstride = 4;
} else if (thresh_array[ithresh] == RADIUS) {
if (!atom->radius_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->radius;
nstride = 1;
} else if (thresh_array[ithresh] == DIAMETER) {
if (!atom->radius_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
double *radius = atom->radius;
for (i = 0; i < nlocal; i++) dchoose[i] = 2.0*radius[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == OMEGAX) {
if (!atom->omega_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->omega[0][0];
nstride = 3;
} else if (thresh_array[ithresh] == OMEGAY) {
if (!atom->omega_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->omega[0][1];
nstride = 3;
} else if (thresh_array[ithresh] == OMEGAZ) {
if (!atom->omega_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->omega[0][2];
nstride = 3;
} else if (thresh_array[ithresh] == ANGMOMX) {
if (!atom->angmom_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->angmom[0][0];
nstride = 3;
} else if (thresh_array[ithresh] == ANGMOMY) {
if (!atom->angmom_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->angmom[0][1];
nstride = 3;
} else if (thresh_array[ithresh] == ANGMOMZ) {
if (!atom->angmom_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->angmom[0][2];
nstride = 3;
} else if (thresh_array[ithresh] == TQX) {
if (!atom->torque_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->torque[0][0];
nstride = 3;
} else if (thresh_array[ithresh] == TQY) {
if (!atom->torque_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->torque[0][1];
nstride = 3;
} else if (thresh_array[ithresh] == TQZ) {
if (!atom->torque_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = &atom->torque[0][2];
nstride = 3;
} else if (thresh_array[ithresh] == SPIN) {
if (!atom->spin_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
int *spin = atom->spin;
for (i = 0; i < nlocal; i++) dchoose[i] = spin[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ERADIUS) {
if (!atom->eradius_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->eradius;
nstride = 1;
} else if (thresh_array[ithresh] == ERVEL) {
if (!atom->ervel_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->ervel;
nstride = 1;
} else if (thresh_array[ithresh] == ERFORCE) {
if (!atom->erforce_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->erforce;
nstride = 1;
} else if (thresh_array[ithresh] == COMPUTE) {
i = nfield + ithresh;
if (argindex[i] == 0) {
ptr = compute[field2index[i]]->vector_atom;
nstride = 1;
} else {
ptr = &compute[field2index[i]]->array_atom[0][argindex[i]-1];
nstride = compute[field2index[i]]->size_peratom_cols;
}
} else if (thresh_array[ithresh] == FIX) {
i = nfield + ithresh;
if (argindex[i] == 0) {
ptr = fix[field2index[i]]->vector_atom;
nstride = 1;
} else {
ptr = &fix[field2index[i]]->array_atom[0][argindex[i]-1];
nstride = fix[field2index[i]]->size_peratom_cols;
}
} else if (thresh_array[ithresh] == VARIABLE) {
i = nfield + ithresh;
ptr = vbuf[field2index[i]];
nstride = 1;
}
// unselect atoms that don't meet threshhold criterion
value = thresh_value[ithresh];
if (thresh_op[ithresh] == LT) {
for (i = 0; i < nlocal; i++, ptr += nstride)
if (choose[i] && *ptr >= value) choose[i] = 0;
} else if (thresh_op[ithresh] == LE) {
for (i = 0; i < nlocal; i++, ptr += nstride)
if (choose[i] && *ptr > value) choose[i] = 0;
} else if (thresh_op[ithresh] == GT) {
for (i = 0; i < nlocal; i++, ptr += nstride)
if (choose[i] && *ptr <= value) choose[i] = 0;
} else if (thresh_op[ithresh] == GE) {
for (i = 0; i < nlocal; i++, ptr += nstride)
if (choose[i] && *ptr < value) choose[i] = 0;
} else if (thresh_op[ithresh] == EQ) {
for (i = 0; i < nlocal; i++, ptr += nstride)
if (choose[i] && *ptr != value) choose[i] = 0;
} else if (thresh_op[ithresh] == NEQ) {
for (i = 0; i < nlocal; i++, ptr += nstride)
if (choose[i] && *ptr == value) choose[i] = 0;
}
}
}
// compress choose flags into clist
// nchoose = # of selected atoms
// clist[i] = local index of each selected atom
nchoose = 0;
for (i = 0; i < nlocal; i++)
if (choose[i]) clist[nchoose++] = i;
return nchoose;
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack(tagint *ids)
{
for (int n = 0; n < size_one; n++) (this->*pack_choice[n])(n);
if (ids) {
tagint *tag = atom->tag;
for (int i = 0; i < nchoose; i++)
ids[i] = tag[clist[i]];
}
}
/* ----------------------------------------------------------------------
convert mybuf of doubles to one big formatted string in sbuf
return -1 if strlen exceeds an int, since used as arg in MPI calls in Dump
------------------------------------------------------------------------- */
int DumpCustom::convert_string(int n, double *mybuf)
{
int i,j;
int offset = 0;
int m = 0;
for (i = 0; i < n; i++) {
if (offset + size_one*ONEFIELD > maxsbuf) {
if ((bigint) maxsbuf + DELTA > MAXSMALLINT) return -1;
maxsbuf += DELTA;
memory->grow(sbuf,maxsbuf,"dump:sbuf");
}
for (j = 0; j < size_one; j++) {
if (vtype[j] == INT)
offset += sprintf(&sbuf[offset],vformat[j],static_cast<int> (mybuf[m]));
else if (vtype[j] == DOUBLE)
offset += sprintf(&sbuf[offset],vformat[j],mybuf[m]);
else if (vtype[j] == STRING)
offset += sprintf(&sbuf[offset],vformat[j],typenames[(int) mybuf[m]]);
else if (vtype[j] == BIGINT)
offset += sprintf(&sbuf[offset],vformat[j],
static_cast<bigint> (mybuf[m]));
m++;
}
offset += sprintf(&sbuf[offset],"\n");
}
return offset;
}
/* ---------------------------------------------------------------------- */
void DumpCustom::write_data(int n, double *mybuf)
{
(this->*write_choice)(n,mybuf);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::write_binary(int n, double *mybuf)
{
n *= size_one;
fwrite(&n,sizeof(int),1,fp);
fwrite(mybuf,sizeof(double),n,fp);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::write_string(int n, double *mybuf)
{
fwrite(mybuf,sizeof(char),n,fp);
}
/* ---------------------------------------------------------------------- */
void DumpCustom::write_lines(int n, double *mybuf)
{
int i,j;
int m = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < size_one; j++) {
if (vtype[j] == INT) fprintf(fp,vformat[j],static_cast<int> (mybuf[m]));
else if (vtype[j] == DOUBLE) fprintf(fp,vformat[j],mybuf[m]);
else if (vtype[j] == STRING)
fprintf(fp,vformat[j],typenames[(int) mybuf[m]]);
else if (vtype[j] == BIGINT)
fprintf(fp,vformat[j],static_cast<bigint> (mybuf[m]));
m++;
}
fprintf(fp,"\n");
}
}
/* ---------------------------------------------------------------------- */
int DumpCustom::parse_fields(int narg, char **arg)
{
// customize by adding to if statement
int i;
for (int iarg = 5; iarg < narg; iarg++) {
i = iarg-5;
if (strcmp(arg[iarg],"id") == 0) {
pack_choice[i] = &DumpCustom::pack_id;
if (sizeof(tagint) == sizeof(smallint)) vtype[i] = INT;
else vtype[i] = BIGINT;
} else if (strcmp(arg[iarg],"mol") == 0) {
if (!atom->molecule_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_molecule;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"type") == 0) {
pack_choice[i] = &DumpCustom::pack_type;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"element") == 0) {
pack_choice[i] = &DumpCustom::pack_type;
vtype[i] = STRING;
} else if (strcmp(arg[iarg],"mass") == 0) {
pack_choice[i] = &DumpCustom::pack_mass;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"x") == 0) {
pack_choice[i] = &DumpCustom::pack_x;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"y") == 0) {
pack_choice[i] = &DumpCustom::pack_y;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"z") == 0) {
pack_choice[i] = &DumpCustom::pack_z;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"xs") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_xs_triclinic;
else pack_choice[i] = &DumpCustom::pack_xs;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"ys") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_ys_triclinic;
else pack_choice[i] = &DumpCustom::pack_ys;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"zs") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_zs_triclinic;
else pack_choice[i] = &DumpCustom::pack_zs;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"xu") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_xu_triclinic;
else pack_choice[i] = &DumpCustom::pack_xu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"yu") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_yu_triclinic;
else pack_choice[i] = &DumpCustom::pack_yu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"zu") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_zu_triclinic;
else pack_choice[i] = &DumpCustom::pack_zu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"xsu") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_xsu_triclinic;
else pack_choice[i] = &DumpCustom::pack_xsu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"ysu") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_ysu_triclinic;
else pack_choice[i] = &DumpCustom::pack_ysu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"zsu") == 0) {
if (domain->triclinic) pack_choice[i] = &DumpCustom::pack_zsu_triclinic;
else pack_choice[i] = &DumpCustom::pack_zsu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"ix") == 0) {
pack_choice[i] = &DumpCustom::pack_ix;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"iy") == 0) {
pack_choice[i] = &DumpCustom::pack_iy;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"iz") == 0) {
pack_choice[i] = &DumpCustom::pack_iz;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"vx") == 0) {
pack_choice[i] = &DumpCustom::pack_vx;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"vy") == 0) {
pack_choice[i] = &DumpCustom::pack_vy;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"vz") == 0) {
pack_choice[i] = &DumpCustom::pack_vz;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"fx") == 0) {
pack_choice[i] = &DumpCustom::pack_fx;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"fy") == 0) {
pack_choice[i] = &DumpCustom::pack_fy;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"fz") == 0) {
pack_choice[i] = &DumpCustom::pack_fz;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"q") == 0) {
if (!atom->q_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_q;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"mux") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_mux;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"muy") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_muy;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"muz") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_muz;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"mu") == 0) {
if (!atom->mu_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_mu;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"radius") == 0) {
if (!atom->radius_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_radius;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"diameter") == 0) {
if (!atom->radius_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_diameter;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"omegax") == 0) {
if (!atom->omega_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_omegax;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"omegay") == 0) {
if (!atom->omega_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_omegay;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"omegaz") == 0) {
if (!atom->omega_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_omegaz;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"angmomx") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_angmomx;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"angmomy") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_angmomy;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"angmomz") == 0) {
if (!atom->angmom_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_angmomz;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"tqx") == 0) {
if (!atom->torque_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_tqx;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"tqy") == 0) {
if (!atom->torque_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_tqy;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"tqz") == 0) {
if (!atom->torque_flag)
error->all(FLERR,"Dumping an atom property that isn't allocated");
pack_choice[i] = &DumpCustom::pack_tqz;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"spin") == 0) {
if (!atom->spin_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_spin;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"eradius") == 0) {
if (!atom->eradius_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_eradius;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"ervel") == 0) {
if (!atom->ervel_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_ervel;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"erforce") == 0) {
if (!atom->erforce_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_erforce;
vtype[i] = DOUBLE;
// compute value = c_ID
// if no trailing [], then arg is set to 0, else arg is int between []
} else if (strncmp(arg[iarg],"c_",2) == 0) {
pack_choice[i] = &DumpCustom::pack_compute;
vtype[i] = DOUBLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Invalid attribute in dump custom command");
argindex[i] = atoi(ptr+1);
*ptr = '\0';
} else argindex[i] = 0;
n = modify->find_compute(suffix);
if (n < 0) error->all(FLERR,"Could not find dump custom compute ID");
if (modify->compute[n]->peratom_flag == 0)
error->all(FLERR,"Dump custom compute does not compute per-atom info");
if (argindex[i] == 0 && modify->compute[n]->size_peratom_cols > 0)
error->all(FLERR,
"Dump custom compute does not calculate per-atom vector");
if (argindex[i] > 0 && modify->compute[n]->size_peratom_cols == 0)
error->all(FLERR,
"Dump custom compute does not calculate per-atom array");
if (argindex[i] > 0 &&
argindex[i] > modify->compute[n]->size_peratom_cols)
error->all(FLERR,"Dump custom compute vector is accessed out-of-range");
field2index[i] = add_compute(suffix);
delete [] suffix;
// fix value = f_ID
// if no trailing [], then arg is set to 0, else arg is between []
} else if (strncmp(arg[iarg],"f_",2) == 0) {
pack_choice[i] = &DumpCustom::pack_fix;
vtype[i] = DOUBLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Invalid attribute in dump custom command");
argindex[i] = atoi(ptr+1);
*ptr = '\0';
} else argindex[i] = 0;
n = modify->find_fix(suffix);
if (n < 0) error->all(FLERR,"Could not find dump custom fix ID");
if (modify->fix[n]->peratom_flag == 0)
error->all(FLERR,"Dump custom fix does not compute per-atom info");
if (argindex[i] == 0 && modify->fix[n]->size_peratom_cols > 0)
error->all(FLERR,"Dump custom fix does not compute per-atom vector");
if (argindex[i] > 0 && modify->fix[n]->size_peratom_cols == 0)
error->all(FLERR,"Dump custom fix does not compute per-atom array");
if (argindex[i] > 0 &&
argindex[i] > modify->fix[n]->size_peratom_cols)
error->all(FLERR,"Dump custom fix vector is accessed out-of-range");
field2index[i] = add_fix(suffix);
delete [] suffix;
// variable value = v_name
} else if (strncmp(arg[iarg],"v_",2) == 0) {
pack_choice[i] = &DumpCustom::pack_variable;
vtype[i] = DOUBLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
argindex[i] = 0;
n = input->variable->find(suffix);
if (n < 0) error->all(FLERR,"Could not find dump custom variable name");
if (input->variable->atomstyle(n) == 0)
error->all(FLERR,"Dump custom variable is not atom-style variable");
field2index[i] = add_variable(suffix);
delete [] suffix;
} else return iarg;
}
return narg;
}
/* ----------------------------------------------------------------------
add Compute to list of Compute objects used by dump
return index of where this Compute is in list
if already in list, do not add, just return index, else add to list
------------------------------------------------------------------------- */
int DumpCustom::add_compute(char *id)
{
int icompute;
for (icompute = 0; icompute < ncompute; icompute++)
if (strcmp(id,id_compute[icompute]) == 0) break;
if (icompute < ncompute) return icompute;
id_compute = (char **)
memory->srealloc(id_compute,(ncompute+1)*sizeof(char *),"dump:id_compute");
delete [] compute;
compute = new Compute*[ncompute+1];
int n = strlen(id) + 1;
id_compute[ncompute] = new char[n];
strcpy(id_compute[ncompute],id);
ncompute++;
return ncompute-1;
}
/* ----------------------------------------------------------------------
add Fix to list of Fix objects used by dump
return index of where this Fix is in list
if already in list, do not add, just return index, else add to list
------------------------------------------------------------------------- */
int DumpCustom::add_fix(char *id)
{
int ifix;
for (ifix = 0; ifix < nfix; ifix++)
if (strcmp(id,id_fix[ifix]) == 0) break;
if (ifix < nfix) return ifix;
id_fix = (char **)
memory->srealloc(id_fix,(nfix+1)*sizeof(char *),"dump:id_fix");
delete [] fix;
fix = new Fix*[nfix+1];
int n = strlen(id) + 1;
id_fix[nfix] = new char[n];
strcpy(id_fix[nfix],id);
nfix++;
return nfix-1;
}
/* ----------------------------------------------------------------------
add Variable to list of Variables used by dump
return index of where this Variable is in list
if already in list, do not add, just return index, else add to list
------------------------------------------------------------------------- */
int DumpCustom::add_variable(char *id)
{
int ivariable;
for (ivariable = 0; ivariable < nvariable; ivariable++)
if (strcmp(id,id_variable[ivariable]) == 0) break;
if (ivariable < nvariable) return ivariable;
id_variable = (char **)
memory->srealloc(id_variable,(nvariable+1)*sizeof(char *),
"dump:id_variable");
delete [] variable;
variable = new int[nvariable+1];
delete [] vbuf;
vbuf = new double*[nvariable+1];
for (int i = 0; i <= nvariable; i++) vbuf[i] = NULL;
int n = strlen(id) + 1;
id_variable[nvariable] = new char[n];
strcpy(id_variable[nvariable],id);
nvariable++;
return nvariable-1;
}
/* ---------------------------------------------------------------------- */
int DumpCustom::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"region") == 0) {
if (narg < 2) error->all(FLERR,"Illegal dump_modify command");
if (strcmp(arg[1],"none") == 0) iregion = -1;
else {
iregion = domain->find_region(arg[1]);
if (iregion == -1)
error->all(FLERR,"Dump_modify region ID does not exist");
int n = strlen(arg[1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[1]);
}
return 2;
}
if (strcmp(arg[0],"element") == 0) {
if (narg < ntypes+1)
error->all(FLERR,"Dump modify element names do not match atom types");
if (typenames) {
for (int i = 1; i <= ntypes; i++) delete [] typenames[i];
delete [] typenames;
typenames = NULL;
}
typenames = new char*[ntypes+1];
for (int itype = 1; itype <= ntypes; itype++) {
int n = strlen(arg[itype]) + 1;
typenames[itype] = new char[n];
strcpy(typenames[itype],arg[itype]);
}
return ntypes+1;
}
if (strcmp(arg[0],"thresh") == 0) {
if (narg < 2) error->all(FLERR,"Illegal dump_modify command");
if (strcmp(arg[1],"none") == 0) {
if (nthresh) {
memory->destroy(thresh_array);
memory->destroy(thresh_op);
memory->destroy(thresh_value);
thresh_array = NULL;
thresh_op = NULL;
thresh_value = NULL;
}
nthresh = 0;
return 2;
}
if (narg < 4) error->all(FLERR,"Illegal dump_modify command");
// grow threshhold arrays
memory->grow(thresh_array,nthresh+1,"dump:thresh_array");
memory->grow(thresh_op,(nthresh+1),"dump:thresh_op");
memory->grow(thresh_value,(nthresh+1),"dump:thresh_value");
// set attribute type of threshhold
// customize by adding to if statement
if (strcmp(arg[1],"id") == 0) thresh_array[nthresh] = ID;
else if (strcmp(arg[1],"mol") == 0) thresh_array[nthresh] = MOL;
else if (strcmp(arg[1],"type") == 0) thresh_array[nthresh] = TYPE;
else if (strcmp(arg[1],"mass") == 0) thresh_array[nthresh] = MASS;
else if (strcmp(arg[1],"x") == 0) thresh_array[nthresh] = X;
else if (strcmp(arg[1],"y") == 0) thresh_array[nthresh] = Y;
else if (strcmp(arg[1],"z") == 0) thresh_array[nthresh] = Z;
else if (strcmp(arg[1],"xs") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = XS;
else if (strcmp(arg[1],"xs") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = XSTRI;
else if (strcmp(arg[1],"ys") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = YS;
else if (strcmp(arg[1],"ys") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = YSTRI;
else if (strcmp(arg[1],"zs") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = ZS;
else if (strcmp(arg[1],"zs") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = ZSTRI;
else if (strcmp(arg[1],"xu") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = XU;
else if (strcmp(arg[1],"xu") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = XUTRI;
else if (strcmp(arg[1],"yu") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = YU;
else if (strcmp(arg[1],"yu") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = YUTRI;
else if (strcmp(arg[1],"zu") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = ZU;
else if (strcmp(arg[1],"zu") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = ZUTRI;
else if (strcmp(arg[1],"xsu") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = XSU;
else if (strcmp(arg[1],"xsu") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = XSUTRI;
else if (strcmp(arg[1],"ysu") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = YSU;
else if (strcmp(arg[1],"ysu") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = YSUTRI;
else if (strcmp(arg[1],"zsu") == 0 && domain->triclinic == 0)
thresh_array[nthresh] = ZSU;
else if (strcmp(arg[1],"zsu") == 0 && domain->triclinic == 1)
thresh_array[nthresh] = ZSUTRI;
else if (strcmp(arg[1],"ix") == 0) thresh_array[nthresh] = IX;
else if (strcmp(arg[1],"iy") == 0) thresh_array[nthresh] = IY;
else if (strcmp(arg[1],"iz") == 0) thresh_array[nthresh] = IZ;
else if (strcmp(arg[1],"vx") == 0) thresh_array[nthresh] = VX;
else if (strcmp(arg[1],"vy") == 0) thresh_array[nthresh] = VY;
else if (strcmp(arg[1],"vz") == 0) thresh_array[nthresh] = VZ;
else if (strcmp(arg[1],"fx") == 0) thresh_array[nthresh] = FX;
else if (strcmp(arg[1],"fy") == 0) thresh_array[nthresh] = FY;
else if (strcmp(arg[1],"fz") == 0) thresh_array[nthresh] = FZ;
else if (strcmp(arg[1],"q") == 0) thresh_array[nthresh] = Q;
else if (strcmp(arg[1],"mux") == 0) thresh_array[nthresh] = MUX;
else if (strcmp(arg[1],"muy") == 0) thresh_array[nthresh] = MUY;
else if (strcmp(arg[1],"muz") == 0) thresh_array[nthresh] = MUZ;
else if (strcmp(arg[1],"mu") == 0) thresh_array[nthresh] = MU;
else if (strcmp(arg[1],"radius") == 0) thresh_array[nthresh] = RADIUS;
else if (strcmp(arg[1],"diameter") == 0) thresh_array[nthresh] = DIAMETER;
else if (strcmp(arg[1],"omegax") == 0) thresh_array[nthresh] = OMEGAX;
else if (strcmp(arg[1],"omegay") == 0) thresh_array[nthresh] = OMEGAY;
else if (strcmp(arg[1],"omegaz") == 0) thresh_array[nthresh] = OMEGAZ;
else if (strcmp(arg[1],"angmomx") == 0) thresh_array[nthresh] = ANGMOMX;
else if (strcmp(arg[1],"angmomy") == 0) thresh_array[nthresh] = ANGMOMY;
else if (strcmp(arg[1],"angmomz") == 0) thresh_array[nthresh] = ANGMOMZ;
else if (strcmp(arg[1],"tqx") == 0) thresh_array[nthresh] = TQX;
else if (strcmp(arg[1],"tqy") == 0) thresh_array[nthresh] = TQY;
else if (strcmp(arg[1],"tqz") == 0) thresh_array[nthresh] = TQZ;
else if (strcmp(arg[1],"spin") == 0) thresh_array[nthresh] = SPIN;
else if (strcmp(arg[1],"eradius") == 0) thresh_array[nthresh] = ERADIUS;
else if (strcmp(arg[1],"ervel") == 0) thresh_array[nthresh] = ERVEL;
else if (strcmp(arg[1],"erforce") == 0) thresh_array[nthresh] = ERFORCE;
// compute value = c_ID
// if no trailing [], then arg is set to 0, else arg is between []
// must grow field2index and argindex arrays, since access is beyond nfield
else if (strncmp(arg[1],"c_",2) == 0) {
thresh_array[nthresh] = COMPUTE;
memory->grow(field2index,nfield+nthresh+1,"dump:field2index");
memory->grow(argindex,nfield+nthresh+1,"dump:argindex");
int n = strlen(arg[1]);
char *suffix = new char[n];
strcpy(suffix,&arg[1][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Invalid attribute in dump modify command");
argindex[nfield+nthresh] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nfield+nthresh] = 0;
n = modify->find_compute(suffix);
if (n < 0) error->all(FLERR,"Could not find dump modify compute ID");
if (modify->compute[n]->peratom_flag == 0)
error->all(FLERR,
"Dump modify compute ID does not compute per-atom info");
if (argindex[nfield+nthresh] == 0 &&
modify->compute[n]->size_peratom_cols > 0)
error->all(FLERR,
"Dump modify compute ID does not compute per-atom vector");
if (argindex[nfield+nthresh] > 0 &&
modify->compute[n]->size_peratom_cols == 0)
error->all(FLERR,
"Dump modify compute ID does not compute per-atom array");
if (argindex[nfield+nthresh] > 0 &&
argindex[nfield+nthresh] > modify->compute[n]->size_peratom_cols)
error->all(FLERR,"Dump modify compute ID vector is not large enough");
field2index[nfield+nthresh] = add_compute(suffix);
delete [] suffix;
// fix value = f_ID
// if no trailing [], then arg is set to 0, else arg is between []
// must grow field2index and argindex arrays, since access is beyond nfield
} else if (strncmp(arg[1],"f_",2) == 0) {
thresh_array[nthresh] = FIX;
memory->grow(field2index,nfield+nthresh+1,"dump:field2index");
memory->grow(argindex,nfield+nthresh+1,"dump:argindex");
int n = strlen(arg[1]);
char *suffix = new char[n];
strcpy(suffix,&arg[1][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Invalid attribute in dump modify command");
argindex[nfield+nthresh] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nfield+nthresh] = 0;
n = modify->find_fix(suffix);
if (n < 0) error->all(FLERR,"Could not find dump modify fix ID");
if (modify->fix[n]->peratom_flag == 0)
error->all(FLERR,"Dump modify fix ID does not compute per-atom info");
if (argindex[nfield+nthresh] == 0 &&
modify->fix[n]->size_peratom_cols > 0)
error->all(FLERR,"Dump modify fix ID does not compute per-atom vector");
if (argindex[nfield+nthresh] > 0 &&
modify->fix[n]->size_peratom_cols == 0)
error->all(FLERR,"Dump modify fix ID does not compute per-atom array");
if (argindex[nfield+nthresh] > 0 &&
argindex[nfield+nthresh] > modify->fix[n]->size_peratom_cols)
error->all(FLERR,"Dump modify fix ID vector is not large enough");
field2index[nfield+nthresh] = add_fix(suffix);
delete [] suffix;
// variable value = v_ID
// must grow field2index and argindex arrays, since access is beyond nfield
} else if (strncmp(arg[1],"v_",2) == 0) {
thresh_array[nthresh] = VARIABLE;
memory->grow(field2index,nfield+nthresh+1,"dump:field2index");
memory->grow(argindex,nfield+nthresh+1,"dump:argindex");
int n = strlen(arg[1]);
char *suffix = new char[n];
strcpy(suffix,&arg[1][2]);
argindex[nfield+nthresh] = 0;
n = input->variable->find(suffix);
if (n < 0) error->all(FLERR,"Could not find dump modify variable name");
if (input->variable->atomstyle(n) == 0)
error->all(FLERR,"Dump modify variable is not atom-style variable");
field2index[nfield+nthresh] = add_variable(suffix);
delete [] suffix;
} else error->all(FLERR,"Invalid dump_modify threshhold operator");
// set operation type of threshhold
if (strcmp(arg[2],"<") == 0) thresh_op[nthresh] = LT;
else if (strcmp(arg[2],"<=") == 0) thresh_op[nthresh] = LE;
else if (strcmp(arg[2],">") == 0) thresh_op[nthresh] = GT;
else if (strcmp(arg[2],">=") == 0) thresh_op[nthresh] = GE;
else if (strcmp(arg[2],"==") == 0) thresh_op[nthresh] = EQ;
else if (strcmp(arg[2],"!=") == 0) thresh_op[nthresh] = NEQ;
else error->all(FLERR,"Invalid dump_modify threshhold operator");
// set threshhold value
thresh_value[nthresh] = force->numeric(FLERR,arg[3]);
nthresh++;
return 4;
}
return 0;
}
/* ----------------------------------------------------------------------
return # of bytes of allocated memory in buf, choose, variable arrays
------------------------------------------------------------------------- */
bigint DumpCustom::memory_usage()
{
bigint bytes = Dump::memory_usage();
bytes += memory->usage(choose,maxlocal);
bytes += memory->usage(dchoose,maxlocal);
bytes += memory->usage(clist,maxlocal);
bytes += memory->usage(vbuf,nvariable,maxlocal);
return bytes;
}
/* ----------------------------------------------------------------------
extraction of Compute, Fix, Variable results
------------------------------------------------------------------------- */
void DumpCustom::pack_compute(int n)
{
double *vector = compute[field2index[n]]->vector_atom;
double **array = compute[field2index[n]]->array_atom;
int index = argindex[n];
if (index == 0) {
for (int i = 0; i < nchoose; i++) {
buf[n] = vector[clist[i]];
n += size_one;
}
} else {
index--;
for (int i = 0; i < nchoose; i++) {
buf[n] = array[clist[i]][index];
n += size_one;
}
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_fix(int n)
{
double *vector = fix[field2index[n]]->vector_atom;
double **array = fix[field2index[n]]->array_atom;
int index = argindex[n];
if (index == 0) {
for (int i = 0; i < nchoose; i++) {
buf[n] = vector[clist[i]];
n += size_one;
}
} else {
index--;
for (int i = 0; i < nchoose; i++) {
buf[n] = array[clist[i]][index];
n += size_one;
}
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_variable(int n)
{
double *vector = vbuf[field2index[n]];
for (int i = 0; i < nchoose; i++) {
buf[n] = vector[clist[i]];
n += size_one;
}
}
/* ----------------------------------------------------------------------
one method for every attribute dump custom can output
the atom property is packed into buf starting at n with stride size_one
customize a new attribute by adding a method
------------------------------------------------------------------------- */
void DumpCustom::pack_id(int n)
{
tagint *tag = atom->tag;
for (int i = 0; i < nchoose; i++) {
buf[n] = tag[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_molecule(int n)
{
tagint *molecule = atom->molecule;
for (int i = 0; i < nchoose; i++) {
buf[n] = molecule[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_type(int n)
{
int *type = atom->type;
for (int i = 0; i < nchoose; i++) {
buf[n] = type[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_mass(int n)
{
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
if (rmass) {
for (int i = 0; i < nchoose; i++) {
buf[n] = rmass[clist[i]];
n += size_one;
}
} else {
for (int i = 0; i < nchoose; i++) {
buf[n] = mass[type[clist[i]]];
n += size_one;
}
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_x(int n)
{
double **x = atom->x;
for (int i = 0; i < nchoose; i++) {
buf[n] = x[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_y(int n)
{
double **x = atom->x;
for (int i = 0; i < nchoose; i++) {
buf[n] = x[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_z(int n)
{
double **x = atom->x;
for (int i = 0; i < nchoose; i++) {
buf[n] = x[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_xs(int n)
{
double **x = atom->x;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (int i = 0; i < nchoose; i++) {
buf[n] = (x[clist[i]][0] - boxxlo) * invxprd;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ys(int n)
{
double **x = atom->x;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (int i = 0; i < nchoose; i++) {
buf[n] = (x[clist[i]][1] - boxylo) * invyprd;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_zs(int n)
{
double **x = atom->x;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (int i = 0; i < nchoose; i++) {
buf[n] = (x[clist[i]][2] - boxzlo) * invzprd;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_xs_triclinic(int n)
{
int j;
double **x = atom->x;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = h_inv[0]*(x[j][0]-boxlo[0]) + h_inv[5]*(x[j][1]-boxlo[1]) +
h_inv[4]*(x[j][2]-boxlo[2]);
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ys_triclinic(int n)
{
int j;
double **x = atom->x;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = h_inv[1]*(x[j][1]-boxlo[1]) + h_inv[3]*(x[j][2]-boxlo[2]);
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_zs_triclinic(int n)
{
double **x = atom->x;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nchoose; i++) {
buf[n] = h_inv[2]*(x[clist[i]][2]-boxlo[2]);
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_xu(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double xprd = domain->xprd;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = x[j][0] + ((image[j] & IMGMASK) - IMGMAX) * xprd;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_yu(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double yprd = domain->yprd;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = x[j][1] + ((image[j] >> IMGBITS & IMGMASK) - IMGMAX) * yprd;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_zu(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double zprd = domain->zprd;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = x[j][2] + ((image[j] >> IMG2BITS) - IMGMAX) * zprd;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_xu_triclinic(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double *h = domain->h;
int xbox,ybox,zbox;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
xbox = (image[j] & IMGMASK) - IMGMAX;
ybox = (image[j] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[j] >> IMG2BITS) - IMGMAX;
buf[n] = x[j][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_yu_triclinic(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double *h = domain->h;
int ybox,zbox;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
ybox = (image[j] >> IMGBITS & IMGMASK) - IMGMAX;
zbox = (image[j] >> IMG2BITS) - IMGMAX;
buf[n] = x[j][1] + h[1]*ybox + h[3]*zbox;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_zu_triclinic(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double *h = domain->h;
int zbox;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
zbox = (image[j] >> IMG2BITS) - IMGMAX;
buf[n] = x[j][2] + h[2]*zbox;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_xsu(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double boxxlo = domain->boxlo[0];
double invxprd = 1.0/domain->xprd;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = (x[j][0] - boxxlo) * invxprd + (image[j] & IMGMASK) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ysu(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double boxylo = domain->boxlo[1];
double invyprd = 1.0/domain->yprd;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = (x[j][1] - boxylo) * invyprd + (image[j] >> IMGBITS & IMGMASK) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_zsu(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double boxzlo = domain->boxlo[2];
double invzprd = 1.0/domain->zprd;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = (x[j][2] - boxzlo) * invzprd + (image[j] >> IMG2BITS) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_xsu_triclinic(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = h_inv[0]*(x[j][0]-boxlo[0]) + h_inv[5]*(x[j][1]-boxlo[1]) +
h_inv[4]*(x[j][2]-boxlo[2]) + (image[j] & IMGMASK) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ysu_triclinic(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = h_inv[1]*(x[j][1]-boxlo[1]) + h_inv[3]*(x[j][2]-boxlo[2]) +
(image[j] >> IMGBITS & IMGMASK) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_zsu_triclinic(int n)
{
int j;
double **x = atom->x;
imageint *image = atom->image;
double *boxlo = domain->boxlo;
double *h_inv = domain->h_inv;
for (int i = 0; i < nchoose; i++) {
j = clist[i];
buf[n] = h_inv[2]*(x[j][2]-boxlo[2]) + (image[j] >> IMG2BITS) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ix(int n)
{
imageint *image = atom->image;
for (int i = 0; i < nchoose; i++) {
buf[n] = (image[clist[i]] & IMGMASK) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_iy(int n)
{
imageint *image = atom->image;
for (int i = 0; i < nchoose; i++) {
buf[n] = (image[clist[i]] >> IMGBITS & IMGMASK) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_iz(int n)
{
imageint *image = atom->image;
for (int i = 0; i < nchoose; i++) {
buf[n] = (image[clist[i]] >> IMG2BITS) - IMGMAX;
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_vx(int n)
{
double **v = atom->v;
for (int i = 0; i < nchoose; i++) {
buf[n] = v[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_vy(int n)
{
double **v = atom->v;
for (int i = 0; i < nchoose; i++) {
buf[n] = v[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_vz(int n)
{
double **v = atom->v;
for (int i = 0; i < nchoose; i++) {
buf[n] = v[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_fx(int n)
{
double **f = atom->f;
for (int i = 0; i < nchoose; i++) {
buf[n] = f[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_fy(int n)
{
double **f = atom->f;
for (int i = 0; i < nchoose; i++) {
buf[n] = f[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_fz(int n)
{
double **f = atom->f;
for (int i = 0; i < nchoose; i++) {
buf[n] = f[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_q(int n)
{
double *q = atom->q;
for (int i = 0; i < nchoose; i++) {
buf[n] = q[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_mux(int n)
{
double **mu = atom->mu;
for (int i = 0; i < nchoose; i++) {
buf[n] = mu[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_muy(int n)
{
double **mu = atom->mu;
for (int i = 0; i < nchoose; i++) {
buf[n] = mu[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_muz(int n)
{
double **mu = atom->mu;
for (int i = 0; i < nchoose; i++) {
buf[n] = mu[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_mu(int n)
{
double **mu = atom->mu;
for (int i = 0; i < nchoose; i++) {
buf[n] = mu[clist[i]][3];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_radius(int n)
{
double *radius = atom->radius;
for (int i = 0; i < nchoose; i++) {
buf[n] = radius[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_diameter(int n)
{
double *radius = atom->radius;
for (int i = 0; i < nchoose; i++) {
buf[n] = 2.0*radius[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_omegax(int n)
{
double **omega = atom->omega;
for (int i = 0; i < nchoose; i++) {
buf[n] = omega[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_omegay(int n)
{
double **omega = atom->omega;
for (int i = 0; i < nchoose; i++) {
buf[n] = omega[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_omegaz(int n)
{
double **omega = atom->omega;
for (int i = 0; i < nchoose; i++) {
buf[n] = omega[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_angmomx(int n)
{
double **angmom = atom->angmom;
for (int i = 0; i < nchoose; i++) {
buf[n] = angmom[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_angmomy(int n)
{
double **angmom = atom->angmom;
for (int i = 0; i < nchoose; i++) {
buf[n] = angmom[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_angmomz(int n)
{
double **angmom = atom->angmom;
for (int i = 0; i < nchoose; i++) {
buf[n] = angmom[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_tqx(int n)
{
double **torque = atom->torque;
for (int i = 0; i < nchoose; i++) {
buf[n] = torque[clist[i]][0];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_tqy(int n)
{
double **torque = atom->torque;
for (int i = 0; i < nchoose; i++) {
buf[n] = torque[clist[i]][1];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_tqz(int n)
{
double **torque = atom->torque;
for (int i = 0; i < nchoose; i++) {
buf[n] = torque[clist[i]][2];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_spin(int n)
{
int *spin = atom->spin;
for (int i = 0; i < nchoose; i++) {
buf[n] = spin[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_eradius(int n)
{
double *eradius = atom->eradius;
for (int i = 0; i < nchoose; i++) {
buf[n] = eradius[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ervel(int n)
{
double *ervel = atom->ervel;
for (int i = 0; i < nchoose; i++) {
buf[n] = ervel[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_erforce(int n)
{
double *erforce = atom->erforce;
for (int i = 0; i < nchoose; i++) {
buf[n] = erforce[clist[i]];
n += size_one;
}
}
diff --git a/src/fix.cpp b/src/fix.cpp
index e4b7e0d41..e904809a1 100644
--- a/src/fix.cpp
+++ b/src/fix.cpp
@@ -1,195 +1,196 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "string.h"
#include "ctype.h"
#include "fix.h"
#include "atom.h"
#include "group.h"
#include "atom_masks.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
Fix::Fix(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
{
// fix ID, group, and style
// ID must be all alphanumeric chars or underscores
int n = strlen(arg[0]) + 1;
id = new char[n];
strcpy(id,arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(id[i]) && id[i] != '_')
error->all(FLERR,"Fix ID must be alphanumeric or underscore characters");
igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find fix group ID");
groupbit = group->bitmask[igroup];
n = strlen(arg[2]) + 1;
style = new char[n];
strcpy(style,arg[2]);
restart_global = restart_peratom = restart_file = 0;
force_reneighbor = 0;
box_change_size = box_change_shape = box_change_domain = 0;
thermo_energy = 0;
rigid_flag = 0;
virial_flag = 0;
no_change_box = 0;
time_integrate = 0;
time_depend = 0;
create_attribute = 0;
restart_pbc = 0;
wd_header = wd_section = 0;
+ dynamic_group_allow = 0;
cudable_comm = 0;
scalar_flag = vector_flag = array_flag = 0;
peratom_flag = local_flag = 0;
comm_forward = comm_reverse = comm_border = 0;
restart_reset = 0;
// reasonable defaults
// however, each fix that uses these values should explicitly set them
nevery = 1;
global_freq = 1;
maxvatom = 0;
vatom = NULL;
// CUDA and KOKKOS per-fix data masks
datamask = ALL_MASK;
datamask_ext = ALL_MASK;
execution_space = Host;
datamask_read = ALL_MASK;
datamask_modify = ALL_MASK;
}
/* ---------------------------------------------------------------------- */
Fix::~Fix()
{
delete [] id;
delete [] style;
memory->destroy(vatom);
}
/* ----------------------------------------------------------------------
process params common to all fixes here
if unknown param, call modify_param specific to the fix
------------------------------------------------------------------------- */
void Fix::modify_params(int narg, char **arg)
{
if (narg == 0) error->all(FLERR,"Illegal fix_modify command");
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"energy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix_modify command");
if (strcmp(arg[iarg+1],"no") == 0) thermo_energy = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) thermo_energy = 1;
else error->all(FLERR,"Illegal fix_modify command");
iarg += 2;
} else {
int n = modify_param(narg-iarg,&arg[iarg]);
if (n == 0) error->all(FLERR,"Illegal fix_modify command");
iarg += n;
}
}
}
/* ----------------------------------------------------------------------
setup for virial computation
see integrate::ev_set() for values of vflag (0-6)
------------------------------------------------------------------------- */
void Fix::v_setup(int vflag)
{
int i,n;
evflag = 1;
vflag_global = vflag % 4;
vflag_atom = vflag / 4;
// reallocate per-atom array if necessary
if (vflag_atom && atom->nlocal > maxvatom) {
maxvatom = atom->nmax;
memory->destroy(vatom);
memory->create(vatom,maxvatom,6,"fix:vatom");
}
// zero accumulators
if (vflag_global) for (i = 0; i < 6; i++) virial[i] = 0.0;
if (vflag_atom) {
n = atom->nlocal;
for (i = 0; i < n; i++) {
vatom[i][0] = 0.0;
vatom[i][1] = 0.0;
vatom[i][2] = 0.0;
vatom[i][3] = 0.0;
vatom[i][4] = 0.0;
vatom[i][5] = 0.0;
}
}
}
/* ----------------------------------------------------------------------
tally virial into global and per-atom accumulators
v = total virial for the interaction involving total atoms
n = # of local atoms involved, with local indices in list
increment global virial by n/total fraction
increment per-atom virial of each atom in list by 1/total fraction
assumes other procs will tally left-over fractions
------------------------------------------------------------------------- */
void Fix::v_tally(int n, int *list, double total, double *v)
{
int m;
if (vflag_global) {
double fraction = n/total;
virial[0] += fraction*v[0];
virial[1] += fraction*v[1];
virial[2] += fraction*v[2];
virial[3] += fraction*v[3];
virial[4] += fraction*v[4];
virial[5] += fraction*v[5];
}
if (vflag_atom) {
double fraction = 1.0/total;
for (int i = 0; i < n; i++) {
m = list[i];
vatom[m][0] += fraction*v[0];
vatom[m][1] += fraction*v[1];
vatom[m][2] += fraction*v[2];
vatom[m][3] += fraction*v[3];
vatom[m][4] += fraction*v[4];
vatom[m][5] += fraction*v[5];
}
}
}
diff --git a/src/fix.h b/src/fix.h
index 92f377ff5..550d487ae 100644
--- a/src/fix.h
+++ b/src/fix.h
@@ -1,263 +1,264 @@
/* -*- c++ -*- ----------------------------------------------------------
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.
------------------------------------------------------------------------- */
#ifndef LMP_FIX_H
#define LMP_FIX_H
#include "pointers.h"
namespace LAMMPS_NS {
class Fix : protected Pointers {
public:
char *id,*style;
int igroup,groupbit;
int restart_global; // 1 if Fix saves global state, 0 if not
int restart_peratom; // 1 if Fix saves peratom state, 0 if not
int restart_file; // 1 if Fix writes own restart file, 0 if not
int force_reneighbor; // 1 if Fix forces reneighboring, 0 if not
int box_change_size; // 1 if Fix changes box size, 0 if not
int box_change_shape; // 1 if Fix changes box shape, 0 if not
int box_change_domain; // 1 if Fix changes proc sub-domains, 0 if not
bigint next_reneighbor; // next timestep to force a reneighboring
int thermo_energy; // 1 if fix_modify enabled ThEng, 0 if not
int nevery; // how often to call an end_of_step fix
int rigid_flag; // 1 if Fix integrates rigid bodies, 0 if not
int virial_flag; // 1 if Fix contributes to virial, 0 if not
int no_change_box; // 1 if cannot swap ortho <-> triclinic
int time_integrate; // 1 if fix performs time integration, 0 if no
int time_depend; // 1 if requires continuous timestepping
int create_attribute; // 1 if fix stores attributes that need
// setting when a new atom is created
int restart_pbc; // 1 if fix moves atoms (except integrate)
// so write_restart must remap to PBC
int wd_header; // # of header values fix writes to data file
int wd_section; // # of sections fix writes to data file
+ int dynamic_group_allow; // 1 if can be used with dynamic group, else 0
int cudable_comm; // 1 if fix has CUDA-enabled communication
int scalar_flag; // 0/1 if compute_scalar() function exists
int vector_flag; // 0/1 if compute_vector() function exists
int array_flag; // 0/1 if compute_array() function exists
int size_vector; // length of global vector
int size_array_rows; // rows in global array
int size_array_cols; // columns in global array
int global_freq; // frequency s/v data is available at
int peratom_flag; // 0/1 if per-atom data is stored
int size_peratom_cols; // 0 = vector, N = columns in peratom array
int peratom_freq; // frequency per-atom data is available at
int local_flag; // 0/1 if local data is stored
int size_local_rows; // rows in local vector or array
int size_local_cols; // 0 = vector, N = columns in local array
int local_freq; // frequency local data is available at
int extscalar; // 0/1 if global scalar is intensive/extensive
int extvector; // 0/1/-1 if global vector is all int/ext/extlist
int *extlist; // list of 0/1 int/ext for each vec component
int extarray; // 0/1 if global array is intensive/extensive
double *vector_atom; // computed per-atom vector
double **array_atom; // computed per-atom array
double *vector_local; // computed local vector
double **array_local; // computed local array
int comm_forward; // size of forward communication (0 if none)
int comm_reverse; // size of reverse communication (0 if none)
int comm_border; // size of border communication (0 if none)
double virial[6]; // accumlated virial
double **vatom; // accumulated per-atom virial
int restart_reset; // 1 if restart just re-initialized fix
// KOKKOS host/device flag and data masks
ExecutionSpace execution_space;
unsigned int datamask_read,datamask_modify;
// USER-CUDA per-fix data masks
unsigned int datamask;
unsigned int datamask_ext;
Fix(class LAMMPS *, int, char **);
virtual ~Fix();
void modify_params(int, char **);
virtual int setmask() = 0;
virtual void init() {}
virtual void init_list(int, class NeighList *) {}
virtual void setup(int) {}
virtual void setup_pre_exchange() {}
virtual void setup_pre_neighbor() {}
virtual void setup_pre_force(int) {}
virtual void min_setup(int) {}
virtual void initial_integrate(int) {}
virtual void post_integrate() {}
virtual void pre_exchange() {}
virtual void pre_neighbor() {}
virtual void pre_force(int) {}
virtual void post_force(int) {}
virtual void final_integrate() {}
virtual void end_of_step() {}
virtual void post_run() {}
virtual void write_restart(FILE *) {}
virtual void write_restart_file(char *) {}
virtual void restart(char *) {}
virtual void grow_arrays(int) {}
virtual void copy_arrays(int, int, int) {}
virtual void set_arrays(int) {}
virtual void update_arrays(int, int) {}
virtual void set_molecule(int, tagint, double *, double *, double *) {}
virtual int pack_border(int, int *, double *) {return 0;}
virtual int unpack_border(int, int, double *) {return 0;}
virtual int pack_exchange(int, double *) {return 0;}
virtual int unpack_exchange(int, double *) {return 0;}
virtual int pack_restart(int, double *) {return 0;}
virtual void unpack_restart(int, int) {}
virtual int size_restart(int) {return 0;}
virtual int maxsize_restart() {return 0;}
virtual void setup_pre_force_respa(int, int) {}
virtual void initial_integrate_respa(int, int, int) {}
virtual void post_integrate_respa(int, int) {}
virtual void pre_force_respa(int, int, int) {}
virtual void post_force_respa(int, int, int) {}
virtual void final_integrate_respa(int, int) {}
virtual void min_setup_pre_exchange() {}
virtual void min_setup_pre_neighbor() {}
virtual void min_setup_pre_force(int) {}
virtual void min_pre_exchange() {}
virtual void min_pre_neighbor() {}
virtual void min_pre_force(int) {}
virtual void min_post_force(int) {}
virtual double min_energy(double *) {return 0.0;}
virtual void min_store() {}
virtual void min_clearstore() {}
virtual void min_pushstore() {}
virtual void min_popstore() {}
virtual int min_reset_ref() {return 0;}
virtual void min_step(double, double *) {}
virtual double max_alpha(double *) {return 0.0;}
virtual int min_dof() {return 0;}
virtual int pack_comm(int, int *, double *, int, int *) {return 0;}
virtual void unpack_comm(int, int, double *) {}
virtual int pack_reverse_comm(int, int, double *) {return 0;}
virtual void unpack_reverse_comm(int, int *, double *) {}
virtual double compute_scalar() {return 0.0;}
virtual double compute_vector(int) {return 0.0;}
virtual double compute_array(int,int) {return 0.0;}
virtual int dof(int) {return 0;}
virtual void deform(int) {}
virtual void reset_target(double) {}
virtual void reset_dt() {}
virtual void reset_timestep(bigint) {}
virtual void read_data_header(char *) {}
virtual void read_data_section(char *, int, char *) {}
virtual bigint read_data_skip_lines(char *) {return 0;}
virtual void write_data_header(FILE *, int) {}
virtual void write_data_section_size(int, int &, int &) {}
virtual void write_data_section_pack(int, double **) {}
virtual void write_data_section_keyword(int, FILE *) {}
virtual void write_data_section(int, FILE *, int, double **, int) {}
virtual void zero_momentum() {}
virtual void zero_rotation() {}
virtual int modify_param(int, char **) {return 0;}
virtual void *extract(const char *, int &) {return NULL;}
virtual double memory_usage() {return 0.0;}
virtual unsigned int data_mask() {return datamask;}
virtual unsigned int data_mask_ext() {return datamask_ext;}
protected:
int evflag;
int vflag_global,vflag_atom;
int maxvatom;
void v_setup(int);
void v_tally(int, int *, double, double *);
// union data struct for packing 32-bit and 64-bit ints into double bufs
// see atom_vec.h for documentation
union ubuf {
double d;
int64_t i;
ubuf(double arg) : d(arg) {}
ubuf(int64_t arg) : i(arg) {}
ubuf(int arg) : i(arg) {}
};
};
namespace FixConst {
static const int INITIAL_INTEGRATE = 1<<0;
static const int POST_INTEGRATE = 1<<1;
static const int PRE_EXCHANGE = 1<<2;
static const int PRE_NEIGHBOR = 1<<3;
static const int PRE_FORCE = 1<<4;
static const int POST_FORCE = 1<<5;
static const int FINAL_INTEGRATE = 1<<6;
static const int END_OF_STEP = 1<<7;
static const int THERMO_ENERGY = 1<<8;
static const int INITIAL_INTEGRATE_RESPA = 1<<9;
static const int POST_INTEGRATE_RESPA = 1<<10;
static const int PRE_FORCE_RESPA = 1<<11;
static const int POST_FORCE_RESPA = 1<<12;
static const int FINAL_INTEGRATE_RESPA = 1<<13;
static const int MIN_PRE_EXCHANGE = 1<<14;
static const int MIN_PRE_NEIGHBOR = 1<<15;
static const int MIN_PRE_FORCE = 1<<16;
static const int MIN_POST_FORCE = 1<<17;
static const int MIN_ENERGY = 1<<18;
static const int POST_RUN = 1<<19;
static const int FIX_CONST_LAST = 1<<20;
}
}
#endif
/* ERROR/WARNING messages:
E: Fix ID must be alphanumeric or underscore characters
Self-explanatory.
E: Could not find fix group ID
A group ID used in the fix command does not exist.
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
*/
diff --git a/src/fix_addforce.cpp b/src/fix_addforce.cpp
index af8e9edd7..f530731ec 100644
--- a/src/fix_addforce.cpp
+++ b/src/fix_addforce.cpp
@@ -1,365 +1,368 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "string.h"
#include "stdlib.h"
#include "fix_addforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR,"Illegal fix addforce command");
+ dynamic_group_allow = 1;
scalar_flag = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extscalar = 1;
extvector = 1;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else {
xvalue = force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else {
yvalue = force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else {
zvalue = force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
estr = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix addforce command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix addforce does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"energy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix addforce command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) {
int n = strlen(&arg[iarg+1][2]) + 1;
estr = new char[n];
strcpy(estr,&arg[iarg+1][2]);
} else error->all(FLERR,"Illegal fix addforce command");
iarg += 2;
} else error->all(FLERR,"Illegal fix addforce command");
}
force_flag = 0;
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
maxatom = -1;
sforce = NULL;
}
/* ---------------------------------------------------------------------- */
FixAddForce::~FixAddForce()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] estr;
delete [] idregion;
memory->destroy(sforce);
}
/* ---------------------------------------------------------------------- */
int FixAddForce::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAddForce::init()
{
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xstyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else if (input->variable->atomstyle(yvar)) ystyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zstyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
}
if (estr) {
evar = input->variable->find(estr);
if (evar < 0)
error->all(FLERR,"Variable name for fix addforce does not exist");
if (input->variable->atomstyle(evar)) estyle = ATOM;
else error->all(FLERR,"Variable for fix addforce is invalid style");
} else estyle = NONE;
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix addforce does not exist");
}
if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM)
varflag = ATOM;
else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL)
varflag = EQUAL;
else varflag = CONSTANT;
if (varflag == CONSTANT && estyle != NONE)
error->all(FLERR,"Cannot use variable energy with "
"constant force in fix addforce");
if ((varflag == EQUAL || varflag == ATOM) &&
update->whichflag == 2 && estyle == NONE)
error->all(FLERR,"Must use variable energy with fix addforce");
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixAddForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
}
/* ---------------------------------------------------------------------- */
void FixAddForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAddForce::post_force(int vflag)
{
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
+ // update region if necessary
+
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
// reallocate sforce array if necessary
if ((varflag == ATOM || estyle == ATOM) && nlocal > maxatom) {
maxatom = atom->nmax;
memory->destroy(sforce);
memory->create(sforce,maxatom,4,"addforce:sforce");
}
// foriginal[0] = "potential energy" for added force
// foriginal[123] = force on atoms before extra force added
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
force_flag = 0;
// constant force
// potential energy = - x dot f in unwrapped coords
if (varflag == CONSTANT) {
double unwrap[3];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
domain->unmap(x[i],image[i],unwrap);
foriginal[0] -= xvalue*unwrap[0] + yvalue*unwrap[1] + zvalue*unwrap[2];
foriginal[1] += f[i][0];
foriginal[2] += f[i][1];
foriginal[3] += f[i][2];
f[i][0] += xvalue;
f[i][1] += yvalue;
f[i][2] += zvalue;
}
// variable force, wrap with clear/add
// potential energy = evar if defined, else 0.0
// wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
else if (xstyle == ATOM) {
if (sforce) input->variable->compute_atom(xvar,igroup,&sforce[0][0],4,0);
else input->variable->compute_atom(xvar,igroup,NULL,4,0);
}
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
else if (ystyle == ATOM) {
if (sforce) input->variable->compute_atom(yvar,igroup,&sforce[0][1],4,0);
else input->variable->compute_atom(yvar,igroup,NULL,4,0);
}
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
else if (zstyle == ATOM) {
if (sforce) input->variable->compute_atom(zvar,igroup,&sforce[0][2],4,0);
else input->variable->compute_atom(zvar,igroup,NULL,4,0);
}
if (estyle == ATOM) {
if (sforce) input->variable->compute_atom(evar,igroup,&sforce[0][3],4,0);
else input->variable->compute_atom(evar,igroup,NULL,4,0);
}
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (estyle == ATOM) foriginal[0] += sforce[i][3];
foriginal[1] += f[i][0];
foriginal[2] += f[i][1];
foriginal[3] += f[i][2];
if (xstyle == ATOM) f[i][0] += sforce[i][0];
else if (xstyle) f[i][0] += xvalue;
if (ystyle == ATOM) f[i][1] += sforce[i][1];
else if (ystyle) f[i][1] += yvalue;
if (zstyle == ATOM) f[i][2] += sforce[i][2];
else if (zstyle) f[i][2] += zvalue;
}
}
}
/* ---------------------------------------------------------------------- */
void FixAddForce::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAddForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
potential energy of added force
------------------------------------------------------------------------- */
double FixAddForce::compute_scalar()
{
// only sum across procs one time
if (force_flag == 0) {
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return foriginal_all[0];
}
/* ----------------------------------------------------------------------
return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
double FixAddForce::compute_vector(int n)
{
// only sum across procs one time
if (force_flag == 0) {
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return foriginal_all[n+1];
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixAddForce::memory_usage()
{
double bytes = 0.0;
if (varflag == ATOM) bytes = atom->nmax*4 * sizeof(double);
return bytes;
}
diff --git a/src/fix_ave_spatial.cpp b/src/fix_ave_spatial.cpp
index b863dc0bc..67e1b6a48 100644
--- a/src/fix_ave_spatial.cpp
+++ b/src/fix_ave_spatial.cpp
@@ -1,1304 +1,1308 @@
/* ----------------------------------------------------------------------
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 author: Pieter in 't Veld (SNL)
------------------------------------------------------------------------- */
#include "stdlib.h"
#include "string.h"
#include "unistd.h"
#include "fix_ave_spatial.h"
#include "atom.h"
#include "update.h"
#include "force.h"
#include "domain.h"
#include "region.h"
#include "lattice.h"
#include "modify.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{LOWER,CENTER,UPPER,COORD};
enum{V,F,DENSITY_NUMBER,DENSITY_MASS,COMPUTE,FIX,VARIABLE};
enum{SAMPLE,ALL};
enum{BOX,LATTICE,REDUCED};
enum{ONE,RUNNING,WINDOW};
#define INVOKED_PERATOM 8
#define BIG 1000000000
/* ---------------------------------------------------------------------- */
FixAveSpatial::FixAveSpatial(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR,"Illegal fix ave/spatial command");
MPI_Comm_rank(world,&me);
nevery = force->inumeric(FLERR,arg[3]);
nrepeat = force->inumeric(FLERR,arg[4]);
nfreq = force->inumeric(FLERR,arg[5]);
global_freq = nfreq;
no_change_box = 1;
ndim = 0;
int iarg = 6;
while (iarg < narg && ndim < 3) {
if (iarg+3 > narg) break;
if (strcmp(arg[iarg],"x") == 0) dim[ndim] = 0;
else if (strcmp(arg[iarg],"y") == 0) dim[ndim] = 1;
else if (strcmp(arg[iarg],"z") == 0) dim[ndim] = 2;
else break;
if (dim[ndim] == 2 && domain->dimension == 2)
error->all(FLERR,"Cannot use fix ave/spatial z for 2 dimensional model");
if (strcmp(arg[iarg+1],"lower") == 0) originflag[ndim] = LOWER;
else if (strcmp(arg[iarg+1],"center") == 0) originflag[ndim] = CENTER;
else if (strcmp(arg[iarg+1],"upper") == 0) originflag[ndim] = UPPER;
else originflag[ndim] = COORD;
if (originflag[ndim] == COORD)
origin[ndim] = force->numeric(FLERR,arg[iarg+1]);
delta[ndim] = force->numeric(FLERR,arg[iarg+2]);
ndim++;
iarg += 3;
}
if (!ndim) error->all(FLERR,"Illegal fix ave/spatial command");
if (ndim == 2 && dim[0] == dim[1])
error->all(FLERR,"Same dimension twice in fix ave/spatial");
if (ndim == 3 && (dim[0] == dim[1] || dim[1] == dim[2] || dim[0] == dim[2]))
error->all(FLERR,"Same dimension twice in fix ave/spatial");
// parse values until one isn't recognized
which = new int[narg-9];
argindex = new int[narg-9];
ids = new char*[narg-9];
value2index = new int[narg-9];
nvalues = 0;
while (iarg < narg) {
ids[nvalues] = NULL;
if (strcmp(arg[iarg],"vx") == 0) {
which[nvalues] = V;
argindex[nvalues++] = 0;
} else if (strcmp(arg[iarg],"vy") == 0) {
which[nvalues] = V;
argindex[nvalues++] = 1;
} else if (strcmp(arg[iarg],"vz") == 0) {
which[nvalues] = V;
argindex[nvalues++] = 2;
} else if (strcmp(arg[iarg],"fx") == 0) {
which[nvalues] = F;
argindex[nvalues++] = 0;
} else if (strcmp(arg[iarg],"fy") == 0) {
which[nvalues] = F;
argindex[nvalues++] = 1;
} else if (strcmp(arg[iarg],"fz") == 0) {
which[nvalues] = F;
argindex[nvalues++] = 2;
} else if (strcmp(arg[iarg],"density/number") == 0) {
which[nvalues] = DENSITY_NUMBER;
argindex[nvalues++] = 0;
} else if (strcmp(arg[iarg],"density/mass") == 0) {
which[nvalues] = DENSITY_MASS;
argindex[nvalues++] = 0;
} else if (strncmp(arg[iarg],"c_",2) == 0 ||
strncmp(arg[iarg],"f_",2) == 0 ||
strncmp(arg[iarg],"v_",2) == 0) {
if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE;
else if (arg[iarg][0] == 'f') which[nvalues] = FIX;
else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE;
int n = strlen(arg[iarg]);
char *suffix = new char[n];
strcpy(suffix,&arg[iarg][2]);
char *ptr = strchr(suffix,'[');
if (ptr) {
if (suffix[strlen(suffix)-1] != ']')
error->all(FLERR,"Illegal fix ave/spatial command");
argindex[nvalues] = atoi(ptr+1);
*ptr = '\0';
} else argindex[nvalues] = 0;
n = strlen(suffix) + 1;
ids[nvalues] = new char[n];
strcpy(ids[nvalues],suffix);
nvalues++;
delete [] suffix;
} else break;
iarg++;
}
// optional args
normflag = ALL;
scaleflag = LATTICE;
regionflag = 0;
idregion = NULL;
fp = NULL;
ave = ONE;
nwindow = 0;
overwrite = 0;
char *title1 = NULL;
char *title2 = NULL;
char *title3 = NULL;
while (iarg < narg) {
if (strcmp(arg[iarg],"norm") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
if (strcmp(arg[iarg+1],"all") == 0) normflag = ALL;
else if (strcmp(arg[iarg+1],"sample") == 0) normflag = SAMPLE;
else error->all(FLERR,"Illegal fix ave/spatial command");
iarg += 2;
} else if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = BOX;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = LATTICE;
else if (strcmp(arg[iarg+1],"reduced") == 0) scaleflag = REDUCED;
else error->all(FLERR,"Illegal fix ave/spatial command");
iarg += 2;
} else if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
int iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix ave/spatial does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
regionflag = 1;
iarg += 2;
} else if (strcmp(arg[iarg],"file") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
if (me == 0) {
fp = fopen(arg[iarg+1],"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open fix ave/spatial file %s",arg[iarg+1]);
error->one(FLERR,str);
}
}
iarg += 2;
} else if (strcmp(arg[iarg],"ave") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;
else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING;
else if (strcmp(arg[iarg+1],"window") == 0) ave = WINDOW;
else error->all(FLERR,"Illegal fix ave/spatial command");
if (ave == WINDOW) {
if (iarg+3 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
nwindow = force->inumeric(FLERR,arg[iarg+2]);
if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/spatial command");
}
iarg += 2;
if (ave == WINDOW) iarg++;
} else if (strcmp(arg[iarg],"overwrite") == 0) {
overwrite = 1;
iarg += 1;
} else if (strcmp(arg[iarg],"title1") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
delete [] title1;
int n = strlen(arg[iarg+1]) + 1;
title1 = new char[n];
strcpy(title1,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title2") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
delete [] title2;
int n = strlen(arg[iarg+1]) + 1;
title2 = new char[n];
strcpy(title2,arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"title3") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/spatial command");
delete [] title3;
int n = strlen(arg[iarg+1]) + 1;
title3 = new char[n];
strcpy(title3,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix ave/spatial command");
}
// setup and error check
if (nevery <= 0 || nrepeat <= 0 || nfreq <= 0)
error->all(FLERR,"Illegal fix ave/spatial command");
if (nfreq % nevery || (nrepeat-1)*nevery >= nfreq)
error->all(FLERR,"Illegal fix ave/spatial command");
if (delta[0] <= 0.0) error->all(FLERR,"Illegal fix ave/spatial command");
if (ndim >= 2 && delta[1] <= 0.0)
error->all(FLERR,"Illegal fix ave/spatial command");
if (ndim == 3 && delta[2] <= 0.0)
error->all(FLERR,"Illegal fix ave/spatial command");
if (ave != RUNNING && overwrite)
error->all(FLERR,"Illegal fix ave/spatial command");
for (int i = 0; i < nvalues; i++) {
if (which[i] == COMPUTE) {
int icompute = modify->find_compute(ids[i]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/spatial does not exist");
if (modify->compute[icompute]->peratom_flag == 0)
error->all(FLERR,"Fix ave/spatial compute does not "
"calculate per-atom values");
if (argindex[i] == 0 &&
modify->compute[icompute]->size_peratom_cols != 0)
error->all(FLERR,"Fix ave/spatial compute does not "
"calculate a per-atom vector");
if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0)
error->all(FLERR,"Fix ave/spatial compute does not "
"calculate a per-atom array");
if (argindex[i] &&
argindex[i] > modify->compute[icompute]->size_peratom_cols)
error->all(FLERR,
"Fix ave/spatial compute vector is accessed out-of-range");
} else if (which[i] == FIX) {
int ifix = modify->find_fix(ids[i]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/spatial does not exist");
if (modify->fix[ifix]->peratom_flag == 0)
error->all(FLERR,
"Fix ave/spatial fix does not calculate per-atom values");
if (argindex[i] && modify->fix[ifix]->size_peratom_cols != 0)
error->all(FLERR,
"Fix ave/spatial fix does not calculate a per-atom vector");
if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0)
error->all(FLERR,
"Fix ave/spatial fix does not calculate a per-atom array");
if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols)
error->all(FLERR,"Fix ave/spatial fix vector is accessed out-of-range");
} else if (which[i] == VARIABLE) {
int ivariable = input->variable->find(ids[i]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/spatial does not exist");
if (input->variable->atomstyle(ivariable) == 0)
error->all(FLERR,"Fix ave/spatial variable is not atom-style variable");
}
}
// print file comment lines
if (fp && me == 0) {
if (title1) fprintf(fp,"%s\n",title1);
else fprintf(fp,"# Spatial-averaged data for fix %s and group %s\n",
id,arg[1]);
if (title2) fprintf(fp,"%s\n",title2);
else fprintf(fp,"# Timestep Number-of-bins\n");
if (title3) fprintf(fp,"%s\n",title3);
else {
if (ndim == 1) fprintf(fp,"# Bin Coord Ncount");
else if (ndim == 2) fprintf(fp,"# Bin Coord1 Coord2 Ncount");
else if (ndim == 3) fprintf(fp,"# Bin Coord1 Coord2 Coord3 Ncount");
for (int i = 0; i < nvalues; i++) fprintf(fp," %s",arg[6+3*ndim+i]);
fprintf(fp,"\n");
}
filepos = ftell(fp);
}
delete [] title1;
delete [] title2;
delete [] title3;
// this fix produces a global array
array_flag = 1;
size_array_rows = BIG;
size_array_cols = 1 + ndim + nvalues;
extarray = 0;
// setup scaling
int triclinic = domain->triclinic;
if (triclinic == 1 && scaleflag != REDUCED)
error->all(FLERR,
"Fix ave/spatial for triclinic boxes requires units reduced");
if (scaleflag == LATTICE) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
// apply scaling factors
double scale;
for (int idim = 0; idim < ndim; idim++) {
if (dim[idim] == 0) scale = xscale;
else if (dim[idim] == 1) scale = yscale;
else if (dim[idim] == 2) scale = zscale;
delta[idim] *= scale;
if (originflag[idim] == COORD) origin[idim] *= scale;
invdelta[idim] = 1.0/delta[idim];
}
// initializations
irepeat = 0;
iwindow = window_limit = 0;
norm = 0;
maxvar = 0;
varatom = NULL;
maxatom = -1;
bin = NULL;
nbins = maxbin = 0;
count_one = count_many = count_sum = count_total = NULL;
coord = NULL;
count_list = NULL;
values_one = values_many = values_sum = values_total = NULL;
values_list = NULL;
// nvalid = next step on which end_of_step does something
// add nvalid to all computes that store invocation times
// since don't know a priori which are invoked by this fix
// once in end_of_step() can set timestep for ones actually invoked
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
/* ---------------------------------------------------------------------- */
FixAveSpatial::~FixAveSpatial()
{
delete [] which;
delete [] argindex;
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
delete [] value2index;
delete [] idregion;
if (fp && me == 0) fclose(fp);
memory->destroy(varatom);
memory->destroy(bin);
memory->destroy(count_one);
memory->destroy(count_many);
memory->destroy(count_sum);
memory->destroy(count_total);
memory->destroy(coord);
memory->destroy(count_list);
memory->destroy(values_one);
memory->destroy(values_many);
memory->destroy(values_sum);
memory->destroy(values_total);
memory->destroy(values_list);
}
/* ---------------------------------------------------------------------- */
int FixAveSpatial::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveSpatial::init()
{
// set and check validity of region
if (regionflag) {
int iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix ave/spatial does not exist");
region = domain->regions[iregion];
}
// # of bins cannot vary for ave = RUNNING or WINDOW
if (ave == RUNNING || ave == WINDOW) {
if (scaleflag != REDUCED && domain->box_change_size)
error->all(FLERR,
"Fix ave/spatial settings invalid with changing box size");
}
// set indices and check validity of all computes,fixes,variables
// check that fix frequency is acceptable
for (int m = 0; m < nvalues; m++) {
if (which[m] == COMPUTE) {
int icompute = modify->find_compute(ids[m]);
if (icompute < 0)
error->all(FLERR,"Compute ID for fix ave/spatial does not exist");
value2index[m] = icompute;
} else if (which[m] == FIX) {
int ifix = modify->find_fix(ids[m]);
if (ifix < 0)
error->all(FLERR,"Fix ID for fix ave/spatial does not exist");
value2index[m] = ifix;
if (nevery % modify->fix[ifix]->peratom_freq)
error->all(FLERR,
"Fix for fix ave/spatial not computed at compatible time");
} else if (which[m] == VARIABLE) {
int ivariable = input->variable->find(ids[m]);
if (ivariable < 0)
error->all(FLERR,"Variable name for fix ave/spatial does not exist");
value2index[m] = ivariable;
} else value2index[m] = -1;
}
// need to reset nvalid if nvalid < ntimestep b/c minimize was performed
if (nvalid < update->ntimestep) {
irepeat = 0;
nvalid = nextvalid();
modify->addstep_compute_all(nvalid);
}
}
/* ----------------------------------------------------------------------
setup initial bins
only does averaging if nvalid = current timestep
------------------------------------------------------------------------- */
void FixAveSpatial::setup(int vflag)
{
setup_bins();
end_of_step();
}
/* ---------------------------------------------------------------------- */
void FixAveSpatial::end_of_step()
{
int i,j,m,n;
// skip if not step which requires doing something
bigint ntimestep = update->ntimestep;
if (ntimestep != nvalid) return;
+ // update region if necessary
+
+ if (regionflag) region->prematch();
+
// zero out arrays that accumulate over many samples
// if box changes, first re-setup bins
if (irepeat == 0) {
if (domain->box_change) setup_bins();
for (m = 0; m < nbins; m++) {
count_many[m] = count_sum[m] = 0.0;
for (i = 0; i < nvalues; i++) values_many[m][i] = 0.0;
}
}
// zero out arrays for one sample
for (m = 0; m < nbins; m++) {
count_one[m] = 0.0;
for (i = 0; i < nvalues; i++) values_one[m][i] = 0.0;
}
// assign each atom to a bin
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (nlocal > maxatom) {
maxatom = atom->nmax;
memory->destroy(bin);
memory->create(bin,maxatom,"ave/spatial:bin");
}
if (ndim == 1) atom2bin1d();
else if (ndim == 2) atom2bin2d();
else atom2bin3d();
// perform the computation for one sample
// accumulate results of attributes,computes,fixes,variables to local copy
// sum within each bin, only include atoms in fix group
// compute/fix/variable may invoke computes so wrap with clear/add
modify->clearstep_compute();
for (m = 0; m < nvalues; m++) {
n = value2index[m];
j = argindex[m];
// V,F adds velocities,forces to values
if (which[m] == V || which[m] == F) {
double **attribute;
if (which[m] == V) attribute = atom->v;
else attribute = atom->f;
if (!regionflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
values_one[bin[i]][m] += attribute[i][j];
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
values_one[bin[i]][m] += attribute[i][j];
}
// DENSITY_NUMBER adds 1 to values
} else if (which[m] == DENSITY_NUMBER) {
if (!regionflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
values_one[bin[i]][m] += 1.0;
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
values_one[bin[i]][m] += 1.0;
}
// DENSITY_MASS adds mass to values
} else if (which[m] == DENSITY_MASS) {
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
if (!regionflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (rmass) values_one[bin[i]][m] += rmass[i];
else values_one[bin[i]][m] += mass[type[i]];
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (rmass) values_one[bin[i]][m] += rmass[i];
else values_one[bin[i]][m] += mass[type[i]];
}
}
// COMPUTE adds its scalar or vector component to values
// invoke compute if not previously invoked
} else if (which[m] == COMPUTE) {
Compute *compute = modify->compute[n];
if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
double *vector = compute->vector_atom;
double **array = compute->array_atom;
int jm1 = j - 1;
if (!regionflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (j == 0) values_one[bin[i]][m] += vector[i];
else values_one[bin[i]][m] += array[i][jm1];
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (j == 0) values_one[bin[i]][m] += vector[i];
else values_one[bin[i]][m] += array[i][jm1];
}
}
// FIX adds its scalar or vector component to values
// access fix fields, guaranteed to be ready
} else if (which[m] == FIX) {
double *vector = modify->fix[n]->vector_atom;
double **array = modify->fix[n]->array_atom;
int jm1 = j - 1;
if (!regionflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (j == 0) values_one[bin[i]][m] += vector[i];
else values_one[bin[i]][m] += array[i][jm1];
}
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (j == 0) values_one[bin[i]][m] += vector[i];
else values_one[bin[i]][m] += array[i][jm1];
}
}
// VARIABLE adds its per-atom quantities to values
// evaluate atom-style variable
} else if (which[m] == VARIABLE) {
if (nlocal > maxvar) {
maxvar = atom->nmax;
memory->destroy(varatom);
memory->create(varatom,maxvar,"ave/spatial:varatom");
}
input->variable->compute_atom(n,igroup,varatom,1,0);
if (!regionflag) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
values_one[bin[i]][m] += varatom[i];
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
values_one[bin[i]][m] += varatom[i];
}
}
}
// process a single sample
// if normflag = ALL, accumulate values,count separately to many
// if normflag = SAMPLE, one = value/count, accumulate one to many
// exception is SAMPLE density: no normalization by atom count
if (normflag == ALL) {
for (m = 0; m < nbins; m++) {
count_many[m] += count_one[m];
for (j = 0; j < nvalues; j++)
values_many[m][j] += values_one[m][j];
}
} else {
MPI_Allreduce(count_one,count_many,nbins,MPI_DOUBLE,MPI_SUM,world);
for (m = 0; m < nbins; m++) {
if (count_many[m] > 0.0)
for (j = 0; j < nvalues; j++) {
if (which[j] == DENSITY_NUMBER || which[j] == DENSITY_MASS)
values_many[m][j] += values_one[m][j];
else values_many[m][j] += values_one[m][j]/count_many[m];
}
count_sum[m] += count_many[m];
}
}
// done if irepeat < nrepeat
// else reset irepeat and nvalid
irepeat++;
if (irepeat < nrepeat) {
nvalid += nevery;
modify->addstep_compute(nvalid);
return;
}
irepeat = 0;
nvalid = ntimestep+nfreq - (nrepeat-1)*nevery;
modify->addstep_compute(nvalid);
// time average across samples
// if normflag = ALL, final is total value / total count
// if normflag = SAMPLE, final is sum of ave / repeat
// exception is densities: normalized by repeat, not total count
double repeat = nrepeat;
double mv2d = force->mv2d;
if (normflag == ALL) {
MPI_Allreduce(count_many,count_sum,nbins,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&values_many[0][0],&values_sum[0][0],nbins*nvalues,
MPI_DOUBLE,MPI_SUM,world);
for (m = 0; m < nbins; m++) {
if (count_sum[m] > 0.0)
for (j = 0; j < nvalues; j++) {
if (which[j] == DENSITY_NUMBER) values_sum[m][j] /= repeat;
else if (which[j] == DENSITY_MASS) {
values_sum[m][j] *= mv2d/repeat;
} else values_sum[m][j] /= count_sum[m];
}
count_sum[m] /= repeat;
}
} else {
MPI_Allreduce(&values_many[0][0],&values_sum[0][0],nbins*nvalues,
MPI_DOUBLE,MPI_SUM,world);
for (m = 0; m < nbins; m++) {
for (j = 0; j < nvalues; j++)
values_sum[m][j] /= repeat;
count_sum[m] /= repeat;
}
}
// density is additionally normalized by bin volume
for (j = 0; j < nvalues; j++)
if (which[j] == DENSITY_NUMBER || which[j] == DENSITY_MASS)
for (m = 0; m < nbins; m++)
values_sum[m][j] /= bin_volume;
// if ave = ONE, only single Nfreq timestep value is needed
// if ave = RUNNING, combine with all previous Nfreq timestep values
// if ave = WINDOW, comine with nwindow most recent Nfreq timestep values
if (ave == ONE) {
for (m = 0; m < nbins; m++) {
for (i = 0; i < nvalues; i++)
values_total[m][i] = values_sum[m][i];
count_total[m] = count_sum[m];
}
norm = 1;
} else if (ave == RUNNING) {
for (m = 0; m < nbins; m++) {
for (i = 0; i < nvalues; i++)
values_total[m][i] += values_sum[m][i];
count_total[m] += count_sum[m];
}
norm++;
} else if (ave == WINDOW) {
for (m = 0; m < nbins; m++) {
for (i = 0; i < nvalues; i++) {
values_total[m][i] += values_sum[m][i];
if (window_limit) values_total[m][i] -= values_list[iwindow][m][i];
values_list[iwindow][m][i] = values_sum[m][i];
}
count_total[m] += count_sum[m];
if (window_limit) count_total[m] -= count_list[iwindow][m];
count_list[iwindow][m] = count_sum[m];
}
iwindow++;
if (iwindow == nwindow) {
iwindow = 0;
window_limit = 1;
}
if (window_limit) norm = nwindow;
else norm = iwindow;
}
// output result to file
if (fp && me == 0) {
if (overwrite) fseek(fp,filepos,SEEK_SET);
fprintf(fp,BIGINT_FORMAT " %d\n",ntimestep,nbins);
if (ndim == 1)
for (m = 0; m < nbins; m++) {
fprintf(fp," %d %g %g",m+1,coord[m][0],
count_total[m]/norm);
for (i = 0; i < nvalues; i++)
fprintf(fp," %g",values_total[m][i]/norm);
fprintf(fp,"\n");
}
else if (ndim == 2)
for (m = 0; m < nbins; m++) {
fprintf(fp," %d %g %g %g",m+1,coord[m][0],coord[m][1],
count_total[m]/norm);
for (i = 0; i < nvalues; i++)
fprintf(fp," %g",values_total[m][i]/norm);
fprintf(fp,"\n");
}
else
for (m = 0; m < nbins; m++) {
fprintf(fp," %d %g %g %g %g",m+1,coord[m][0],coord[m][1],coord[m][2],
count_total[m]/norm);
for (i = 0; i < nvalues; i++)
fprintf(fp," %g",values_total[m][i]/norm);
fprintf(fp,"\n");
}
fflush(fp);
if (overwrite) {
long fileend = ftell(fp);
ftruncate(fileno(fp),fileend);
}
}
}
/* ----------------------------------------------------------------------
setup 1d, 2d, or 3d bins and their extent and coordinates
called at setup() and when averaging occurs if box size changes
------------------------------------------------------------------------- */
void FixAveSpatial::setup_bins()
{
int i,j,k,m,n;
double lo,hi,coord1,coord2;
// lo = bin boundary immediately below boxlo
// hi = bin boundary immediately above boxhi
// allocate and initialize arrays based on new bin count
double *boxlo,*boxhi,*prd;
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
if (domain->dimension == 3)
bin_volume = domain->xprd * domain->yprd * domain->zprd;
else bin_volume = domain->xprd * domain->yprd;
nbins = 1;
for (m = 0; m < ndim; m++) {
if (originflag[m] == LOWER) origin[m] = boxlo[dim[m]];
else if (originflag[m] == UPPER) origin[m] = boxhi[dim[m]];
else if (originflag[m] == CENTER)
origin[m] = 0.5 * (boxlo[dim[m]] + boxhi[dim[m]]);
if (origin[m] < boxlo[dim[m]]) {
n = static_cast<int> ((boxlo[dim[m]] - origin[m]) * invdelta[m]);
lo = origin[m] + n*delta[m];
} else {
n = static_cast<int> ((origin[m] - boxlo[dim[m]]) * invdelta[m]);
lo = origin[m] - n*delta[m];
if (lo > boxlo[dim[m]]) lo -= delta[m];
}
if (origin[m] < boxhi[dim[m]]) {
n = static_cast<int> ((boxhi[dim[m]] - origin[m]) * invdelta[m]);
hi = origin[m] + n*delta[m];
if (hi < boxhi[dim[m]]) hi += delta[m];
} else {
n = static_cast<int> ((origin[m] - boxhi[dim[m]]) * invdelta[m]);
hi = origin[m] - n*delta[m];
}
offset[m] = lo;
nlayers[m] = static_cast<int> ((hi-lo) * invdelta[m] + 0.5);
nbins *= nlayers[m];
bin_volume *= delta[m]/prd[dim[m]];
}
// reallocate bin arrays if needed
if (nbins > maxbin) {
maxbin = nbins;
memory->grow(count_one,nbins,"ave/spatial:count_one");
memory->grow(count_many,nbins,"ave/spatial:count_many");
memory->grow(count_sum,nbins,"ave/spatial:count_sum");
memory->grow(count_total,nbins,"ave/spatial:count_total");
memory->grow(coord,nbins,ndim,"ave/spatial:coord");
memory->grow(values_one,nbins,nvalues,"ave/spatial:values_one");
memory->grow(values_many,nbins,nvalues,"ave/spatial:values_many");
memory->grow(values_sum,nbins,nvalues,"ave/spatial:values_sum");
memory->grow(values_total,nbins,nvalues,"ave/spatial:values_total");
// only allocate count and values list for ave = WINDOW
if (ave == WINDOW) {
memory->create(count_list,nwindow,nbins,"ave/spatial:count_list");
memory->create(values_list,nwindow,nbins,nvalues,
"ave/spatial:values_list");
}
// reinitialize regrown count/values total since they accumulate
for (m = 0; m < nbins; m++) {
for (i = 0; i < nvalues; i++) values_total[m][i] = 0.0;
count_total[m] = 0.0;
}
}
// set bin coordinates
if (ndim == 1) {
for (i = 0; i < nlayers[0]; i++)
coord[i][0] = offset[0] + (i+0.5)*delta[0];
} else if (ndim == 2) {
m = 0;
for (i = 0; i < nlayers[0]; i++) {
coord1 = offset[0] + (i+0.5)*delta[0];
for (j = 0; j < nlayers[1]; j++) {
coord[m][0] = coord1;
coord[m][1] = offset[1] + (j+0.5)*delta[1];
m++;
}
}
} else if (ndim == 3) {
m = 0;
for (i = 0; i < nlayers[0]; i++) {
coord1 = offset[0] + (i+0.5)*delta[0];
for (j = 0; j < nlayers[1]; j++) {
coord2 = offset[1] + (j+0.5)*delta[1];
for (k = 0; k < nlayers[2]; k++) {
coord[m][0] = coord1;
coord[m][1] = coord2;
coord[m][2] = offset[2] + (k+0.5)*delta[2];
m++;
}
}
}
}
}
/* ----------------------------------------------------------------------
assign each atom to a 1d bin
------------------------------------------------------------------------- */
void FixAveSpatial::atom2bin1d()
{
int i,ibin;
double *boxlo,*boxhi,*prd;
double xremap;
double lamda[3];
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int idim = dim[0];
int nlayerm1 = nlayers[0] - 1;
int periodicity = domain->periodicity[idim];
if (periodicity) {
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
}
// remap each atom's relevant coord back into box via PBC if necessary
// if scaleflag = REDUCED, box coords -> lamda coords
if (!regionflag) {
if (scaleflag == REDUCED) domain->x2lamda(nlocal);
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xremap = x[i][idim];
if (periodicity) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
ibin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
ibin = MAX(ibin,0);
ibin = MIN(ibin,nlayerm1);
bin[i] = ibin;
count_one[ibin] += 1.0;
}
if (scaleflag == REDUCED) domain->lamda2x(nlocal);
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (scaleflag == REDUCED) {
domain->x2lamda(x[i],lamda);
xremap = lamda[idim];
} else xremap = x[i][idim];
if (periodicity) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
ibin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
ibin = MAX(ibin,0);
ibin = MIN(ibin,nlayerm1);
bin[i] = ibin;
count_one[ibin] += 1.0;
}
}
}
/* ----------------------------------------------------------------------
assign each atom to a 2d bin
------------------------------------------------------------------------- */
void FixAveSpatial::atom2bin2d()
{
int i,ibin,i1bin,i2bin;
double *boxlo,*boxhi,*prd;
double xremap,yremap;
double lamda[3];
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int idim = dim[0];
int jdim = dim[1];
int nlayer1m1 = nlayers[0] - 1;
int nlayer2m1 = nlayers[1] - 1;
int* periodicity = domain->periodicity;
if (periodicity[idim] || periodicity[jdim]) {
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
}
// remap each atom's relevant coord back into box via PBC if necessary
// if scaleflag = REDUCED, box coords -> lamda coords
if (!regionflag) {
if (scaleflag == REDUCED) domain->x2lamda(nlocal);
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xremap = x[i][idim];
if (periodicity[idim]) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
i1bin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
i1bin = MAX(i1bin,0);
i1bin = MIN(i1bin,nlayer1m1);
yremap = x[i][jdim];
if (periodicity[jdim]) {
if (yremap < boxlo[jdim]) yremap += prd[jdim];
if (yremap >= boxhi[jdim]) yremap -= prd[jdim];
}
i2bin = static_cast<int> ((yremap - offset[1]) * invdelta[1]);
i2bin = MAX(i2bin,0);
i2bin = MIN(i2bin,nlayer2m1);
ibin = i1bin*nlayers[1] + i2bin;
bin[i] = ibin;
count_one[ibin] += 1.0;
}
if (scaleflag == REDUCED) domain->lamda2x(nlocal);
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (scaleflag == REDUCED) {
domain->x2lamda(x[i],lamda);
xremap = lamda[idim];
yremap = lamda[jdim];
} else {
xremap = x[i][idim];
yremap = x[i][jdim];
}
if (periodicity[idim]) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
i1bin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
i1bin = MAX(i1bin,0);
i1bin = MIN(i1bin,nlayer1m1-1);
if (periodicity[jdim]) {
if (yremap < boxlo[jdim]) yremap += prd[jdim];
if (yremap >= boxhi[jdim]) yremap -= prd[jdim];
}
i2bin = static_cast<int> ((yremap - offset[1]) * invdelta[1]);
i2bin = MAX(i2bin,0);
i2bin = MIN(i2bin,nlayer2m1-1);
ibin = i1bin*nlayers[1] + i2bin;
bin[i] = ibin;
count_one[ibin] += 1.0;
}
}
}
/* ----------------------------------------------------------------------
assign each atom to a 3d bin
------------------------------------------------------------------------- */
void FixAveSpatial::atom2bin3d()
{
int i,ibin,i1bin,i2bin,i3bin;
double *boxlo,*boxhi,*prd;
double xremap,yremap,zremap;
double lamda[3];
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int idim = dim[0];
int jdim = dim[1];
int kdim = dim[2];
int nlayer1m1 = nlayers[0] - 1;
int nlayer2m1 = nlayers[1] - 1;
int nlayer3m1 = nlayers[2] - 1;
int* periodicity = domain->periodicity;
if (periodicity[idim] || periodicity[jdim] || periodicity[kdim]) {
if (scaleflag == REDUCED) {
boxlo = domain->boxlo_lamda;
boxhi = domain->boxhi_lamda;
prd = domain->prd_lamda;
} else {
boxlo = domain->boxlo;
boxhi = domain->boxhi;
prd = domain->prd;
}
}
// remap each atom's relevant coord back into box via PBC if necessary
// if scaleflag = REDUCED, box coords -> lamda coords
if (!regionflag) {
if (scaleflag == REDUCED) domain->x2lamda(nlocal);
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
xremap = x[i][idim];
if (periodicity[idim]) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
i1bin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
i1bin = MAX(i1bin,0);
i1bin = MIN(i1bin,nlayer1m1);
yremap = x[i][jdim];
if (periodicity[jdim]) {
if (yremap < boxlo[jdim]) yremap += prd[jdim];
if (yremap >= boxhi[jdim]) yremap -= prd[jdim];
}
i2bin = static_cast<int> ((yremap - offset[1]) * invdelta[1]);
i2bin = MAX(i2bin,0);
i2bin = MIN(i2bin,nlayer2m1);
zremap = x[i][kdim];
if (periodicity[kdim]) {
if (zremap < boxlo[kdim]) zremap += prd[kdim];
if (zremap >= boxhi[kdim]) zremap -= prd[kdim];
}
i3bin = static_cast<int> ((zremap - offset[2]) * invdelta[2]);
i3bin = MAX(i3bin,0);
i3bin = MIN(i3bin,nlayer3m1);
ibin = i1bin*nlayers[1]*nlayers[2] + i2bin*nlayers[2] + i3bin;
bin[i] = ibin;
count_one[ibin] += 1.0;
}
if (scaleflag == REDUCED) domain->lamda2x(nlocal);
} else {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
if (scaleflag == REDUCED) {
domain->x2lamda(x[i],lamda);
xremap = lamda[idim];
yremap = lamda[jdim];
zremap = lamda[kdim];
} else {
xremap = x[i][idim];
yremap = x[i][jdim];
zremap = x[i][kdim];
}
if (periodicity[idim]) {
if (xremap < boxlo[idim]) xremap += prd[idim];
if (xremap >= boxhi[idim]) xremap -= prd[idim];
}
i1bin = static_cast<int> ((xremap - offset[0]) * invdelta[0]);
i1bin = MAX(i1bin,0);
i1bin = MIN(i1bin,nlayer1m1);
if (periodicity[jdim]) {
if (yremap < boxlo[jdim]) yremap += prd[jdim];
if (yremap >= boxhi[jdim]) yremap -= prd[jdim];
}
i2bin = static_cast<int> ((yremap - offset[1]) * invdelta[1]);
i2bin = MAX(i2bin,0);
i2bin = MIN(i2bin,nlayer2m1);
if (periodicity[kdim]) {
if (zremap < boxlo[kdim]) zremap += prd[kdim];
if (zremap >= boxhi[kdim]) zremap -= prd[kdim];
}
i3bin = static_cast<int> ((zremap - offset[2]) * invdelta[2]);
i3bin = MAX(i3bin,0);
i3bin = MIN(i3bin,nlayer3m1);
ibin = i1bin*nlayers[1]*nlayers[2] + i2bin*nlayers[2] + i3bin;
bin[i] = ibin;
count_one[ibin] += 1.0;
}
}
}
/* ----------------------------------------------------------------------
return I,J array value
if I exceeds current bins, return 0.0 instead of generating an error
column 1,2,3 = bin coords, next column = count, remaining columns = Nvalues
------------------------------------------------------------------------- */
double FixAveSpatial::compute_array(int i, int j)
{
if (values_total == NULL) return 0.0;
if (i >= nbins) return 0.0;
if (j < ndim) return coord[i][j];
j -= ndim+1;
if (!norm) return 0.0;
if (j < 0) return count_total[i]/norm;
return values_total[i][j]/norm;
}
/* ----------------------------------------------------------------------
calculate nvalid = next step on which end_of_step does something
can be this timestep if multiple of nfreq and nrepeat = 1
else backup from next multiple of nfreq
------------------------------------------------------------------------- */
bigint FixAveSpatial::nextvalid()
{
bigint nvalid = (update->ntimestep/nfreq)*nfreq + nfreq;
if (nvalid-nfreq == update->ntimestep && nrepeat == 1)
nvalid = update->ntimestep;
else
nvalid -= (nrepeat-1)*nevery;
if (nvalid < update->ntimestep) nvalid += nfreq;
return nvalid;
}
/* ----------------------------------------------------------------------
memory usage of varatom and bins
------------------------------------------------------------------------- */
double FixAveSpatial::memory_usage()
{
double bytes = maxvar * sizeof(double); // varatom
bytes += maxatom * sizeof(int); // bin
bytes += 4*nbins * sizeof(double); // count one,many,sum,total
bytes += ndim*nbins * sizeof(double); // coord
bytes += nvalues*nbins * sizeof(double); // values one,many,sum,total
bytes += nwindow*nbins * sizeof(double); // count_list
bytes += nwindow*nbins*nvalues * sizeof(double); // values_list
return bytes;
}
/* ---------------------------------------------------------------------- */
void FixAveSpatial::reset_timestep(bigint ntimestep)
{
if (ntimestep > nvalid) error->all(FLERR,"Fix ave/spatial missed timestep");
}
diff --git a/src/fix_aveforce.cpp b/src/fix_aveforce.cpp
index 6b4bf40bc..9b9380130 100644
--- a/src/fix_aveforce.cpp
+++ b/src/fix_aveforce.cpp
@@ -1,317 +1,320 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "mpi.h"
#include "string.h"
#include "stdlib.h"
#include "fix_aveforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL};
/* ---------------------------------------------------------------------- */
FixAveForce::FixAveForce(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR,"Illegal fix aveforce command");
+ dynamic_group_allow = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extvector = 1;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else if (strcmp(arg[3],"NULL") == 0) {
xstyle = NONE;
} else {
xvalue = force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else if (strcmp(arg[4],"NULL") == 0) {
ystyle = NONE;
} else {
yvalue = force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else if (strcmp(arg[5],"NULL") == 0) {
zstyle = NONE;
} else {
zvalue = force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix aveforce command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix aveforce does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix aveforce command");
}
foriginal_all[0] = foriginal_all[1] =
foriginal_all[2] = foriginal_all[3] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixAveForce::~FixAveForce()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] idregion;
}
/* ---------------------------------------------------------------------- */
int FixAveForce::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixAveForce::init()
{
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix aveforce does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else error->all(FLERR,"Variable for fix aveforce is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix aveforce does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else error->all(FLERR,"Variable for fix aveforce is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix aveforce does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else error->all(FLERR,"Variable for fix aveforce is invalid style");
}
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix aveforce does not exist");
}
if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL) varflag = EQUAL;
else varflag = CONSTANT;
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixAveForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else
for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) {
((Respa *) update->integrate)->copy_flevel_f(ilevel);
post_force_respa(vflag,ilevel,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel);
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixAveForce::post_force(int vflag)
{
+ // update region if necessary
+
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
// sum forces on participating atoms
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double foriginal[4];
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
foriginal[3] += 1.0;
}
// average the force on participating atoms
// add in requested amount, computed via variable evaluation if necessary
// wrap variable evaluation with clear/add
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
int ncount = static_cast<int> (foriginal_all[3]);
if (ncount == 0) return;
if (varflag == EQUAL) {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
modify->addstep_compute(update->ntimestep + 1);
}
double fave[3];
fave[0] = foriginal_all[0]/ncount + xvalue;
fave[1] = foriginal_all[1]/ncount + yvalue;
fave[2] = foriginal_all[2]/ncount + zvalue;
// set force of all participating atoms to same value
// only for active dimensions
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle) f[i][0] = fave[0];
if (ystyle) f[i][1] = fave[1];
if (zstyle) f[i][2] = fave[2];
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::post_force_respa(int vflag, int ilevel, int iloop)
{
// ave + extra force on outermost level
// just ave on inner levels
if (ilevel == nlevels_respa-1) post_force(vflag);
else {
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double foriginal[4];
foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
foriginal[3] += 1.0;
}
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
int ncount = static_cast<int> (foriginal_all[3]);
if (ncount == 0) return;
double fave[3];
fave[0] = foriginal_all[0]/ncount;
fave[1] = foriginal_all[1]/ncount;
fave[2] = foriginal_all[2]/ncount;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle) f[i][0] = fave[0];
if (ystyle) f[i][1] = fave[1];
if (zstyle) f[i][2] = fave[2];
}
}
}
/* ---------------------------------------------------------------------- */
void FixAveForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
double FixAveForce::compute_vector(int n)
{
return foriginal_all[n];
}
diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp
index f6735d2b5..746801f84 100644
--- a/src/fix_heat.cpp
+++ b/src/fix_heat.cpp
@@ -1,337 +1,340 @@
/* ----------------------------------------------------------------------
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 author: Paul Crozier (SNL)
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "fix_heat.h"
#include "atom.h"
#include "domain.h"
#include "region.h"
#include "group.h"
#include "force.h"
#include "update.h"
#include "modify.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
{
if (narg < 4) error->all(FLERR,"Illegal fix heat command");
scalar_flag = 1;
global_freq = 1;
extscalar = 0;
nevery = force->inumeric(FLERR,arg[3]);
if (nevery <= 0) error->all(FLERR,"Illegal fix heat command");
hstr = NULL;
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
hstr = new char[n];
strcpy(hstr,&arg[4][2]);
} else {
heat_input = force->numeric(FLERR,arg[4]);
hstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
int iarg = 5;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix heat command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix heat does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix heat command");
}
scale = 1.0;
maxatom = -1;
vheat = NULL;
vscale = NULL;
}
/* ---------------------------------------------------------------------- */
FixHeat::~FixHeat()
{
delete [] hstr;
delete [] idregion;
memory->destroy(vheat);
memory->destroy(vscale);
}
/* ---------------------------------------------------------------------- */
int FixHeat::setmask()
{
int mask = 0;
mask |= END_OF_STEP;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixHeat::init()
{
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix heat does not exist");
}
// check variable
if (hstr) {
hvar = input->variable->find(hstr);
if (hvar < 0)
error->all(FLERR,"Variable name for fix heat does not exist");
if (input->variable->equalstyle(hvar)) hstyle = EQUAL;
else if (input->variable->atomstyle(hvar)) hstyle = ATOM;
else error->all(FLERR,"Variable for fix heat is invalid style");
}
// cannot have 0 atoms in group
if (group->count(igroup) == 0)
error->all(FLERR,"Fix heat group has no atoms");
masstotal = group->mass(igroup);
}
/* ---------------------------------------------------------------------- */
void FixHeat::end_of_step()
{
int i;
double heat,ke,massone;
double vsub[3],vcm[3];
- Region *region;
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
// reallocate per-atom arrays if necessary
if (hstyle == ATOM && atom->nlocal > maxatom) {
maxatom = atom->nmax;
memory->destroy(vheat);
memory->destroy(vscale);
memory->create(vheat,maxatom,"heat:vheat");
memory->create(vscale,maxatom,"heat:vscale");
}
// evaluate variable
if (hstyle != CONSTANT) {
modify->clearstep_compute();
if (hstyle == EQUAL) heat_input = input->variable->compute_equal(hvar);
else input->variable->compute_atom(hvar,igroup,vheat,1,0);
modify->addstep_compute(update->ntimestep + nevery);
}
// vcm = center-of-mass velocity of scaled atoms
if (iregion < 0) {
ke = group->ke(igroup)*force->ftm2v;
group->vcm(igroup,masstotal,vcm);
} else {
masstotal = group->mass(igroup,iregion);
if (masstotal == 0.0) error->all(FLERR,"Fix heat group has no atoms");
ke = group->ke(igroup,iregion)*force->ftm2v;
group->vcm(igroup,masstotal,vcm,iregion);
}
double vcmsq = vcm[0]*vcm[0] + vcm[1]*vcm[1] + vcm[2]*vcm[2];
// add heat via scale factor on velocities for CONSTANT and EQUAL cases
// scale = velocity scale factor to accomplish eflux change in energy
// vsub = velocity subtracted from each atom to preserve momentum
// overall KE cannot go negative
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
if (hstyle != ATOM) {
heat = heat_input*nevery*update->dt*force->ftm2v;
double escale =
(ke + heat - 0.5*vcmsq*masstotal)/(ke - 0.5*vcmsq*masstotal);
if (escale < 0.0) error->all(FLERR,"Fix heat kinetic energy went negative");
scale = sqrt(escale);
vsub[0] = (scale-1.0) * vcm[0];
vsub[1] = (scale-1.0) * vcm[1];
vsub[2] = (scale-1.0) * vcm[2];
if (iregion < 0) {
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
} else {
- region = domain->regions[iregion];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
}
// add heat via per-atom scale factor on velocities for ATOM case
// vscale = velocity scale factor to accomplish eflux change in energy
// vsub = velocity subtracted from each atom to preserve momentum
// KE of an atom cannot go negative
} else {
vsub[0] = vsub[1] = vsub[2] = 0.0;
if (iregion < 0) {
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
heat = vheat[i]*nevery*update->dt*force->ftm2v;
vscale[i] =
(ke + heat - 0.5*vcmsq*masstotal)/(ke - 0.5*vcmsq*masstotal);
if (vscale[i] < 0.0)
error->all(FLERR,
"Fix heat kinetic energy of an atom went negative");
scale = sqrt(vscale[i]);
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vsub[0] += (scale-1.0) * v[i][0]*massone;
vsub[1] += (scale-1.0) * v[i][1]*massone;
vsub[2] += (scale-1.0) * v[i][2]*massone;
}
}
vsub[0] /= masstotal;
vsub[1] /= masstotal;
vsub[2] /= masstotal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
scale = sqrt(vscale[i]);
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
} else {
- region = domain->regions[iregion];
for (i = 0; i < nlocal; i++) {
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
heat = vheat[i]*nevery*update->dt*force->ftm2v;
vscale[i] =
(ke + heat - 0.5*vcmsq*masstotal)/(ke - 0.5*vcmsq*masstotal);
if (vscale[i] < 0.0)
error->all(FLERR,
"Fix heat kinetic energy of an atom went negative");
scale = sqrt(vscale[i]);
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
vsub[0] += (scale-1.0) * v[i][0]*massone;
vsub[1] += (scale-1.0) * v[i][1]*massone;
vsub[2] += (scale-1.0) * v[i][2]*massone;
}
}
vsub[0] /= masstotal;
vsub[1] /= masstotal;
vsub[2] /= masstotal;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
scale = sqrt(vscale[i]);
v[i][0] = scale*v[i][0] - vsub[0];
v[i][1] = scale*v[i][1] - vsub[1];
v[i][2] = scale*v[i][2] - vsub[2];
}
}
}
}
/* ---------------------------------------------------------------------- */
double FixHeat::compute_scalar()
{
double average_scale = scale;
if (hstyle == ATOM) {
double scale_sum = 0.0;
int ncount = 0;
int *mask = atom->mask;
double **x = atom->x;
int nlocal = atom->nlocal;
if (iregion < 0) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
scale_sum += sqrt(vscale[i]);
ncount++;
}
}
} else {
- Region *region;
- region = domain->regions[iregion];
+ Region *region = domain->regions[iregion];
+ region->prematch();
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
scale_sum += sqrt(vscale[i]);
ncount++;
}
}
}
double scale_sum_all = 0.0;
int ncount_all = 0;
MPI_Allreduce(&scale_sum,&scale_sum_all,1,MPI_DOUBLE,MPI_SUM,world);
MPI_Allreduce(&ncount,&ncount_all,1,MPI_INT,MPI_SUM,world);
if (ncount_all == 0) average_scale = 0.0;
else average_scale = scale_sum_all/static_cast<double>(ncount_all);
}
return average_scale;
}
/* ----------------------------------------------------------------------
memory usage of local atom-based arrays
------------------------------------------------------------------------- */
double FixHeat::memory_usage()
{
double bytes = 0.0;
if (hstyle == ATOM) bytes = atom->nmax*2 * sizeof(double);
return bytes;
}
diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp
index a2cff5cde..1abc05c73 100644
--- a/src/fix_nh.cpp
+++ b/src/fix_nh.cpp
@@ -1,2272 +1,2273 @@
/* ----------------------------------------------------------------------
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: Mark Stevens (SNL), Aidan Thompson (SNL)
------------------------------------------------------------------------- */
#include "string.h"
#include "stdlib.h"
#include "math.h"
#include "fix_nh.h"
#include "math_extra.h"
#include "atom.h"
#include "force.h"
#include "group.h"
#include "comm.h"
#include "irregular.h"
#include "modify.h"
#include "fix_deform.h"
#include "compute.h"
#include "kspace.h"
#include "update.h"
#include "respa.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTAFLIP 0.1
#define TILTMAX 1.5
enum{NOBIAS,BIAS};
enum{NONE,XYZ,XY,YZ,XZ};
enum{ISO,ANISO,TRICLINIC};
/* ----------------------------------------------------------------------
NVT,NPH,NPT integrators for improved Nose-Hoover equations of motion
---------------------------------------------------------------------- */
FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
{
if (narg < 4) error->all(FLERR,"Illegal fix nvt/npt/nph command");
restart_global = 1;
+ dynamic_group_allow = 1;
time_integrate = 1;
scalar_flag = 1;
vector_flag = 1;
global_freq = 1;
extscalar = 1;
extvector = 0;
// default values
pcouple = NONE;
drag = 0.0;
allremap = 1;
id_dilate = NULL;
mtchain = mpchain = 3;
nc_tchain = nc_pchain = 1;
mtk_flag = 1;
deviatoric_flag = 0;
nreset_h0 = 0;
eta_mass_flag = 1;
omega_mass_flag = 0;
etap_mass_flag = 0;
flipflag = 1;
// turn on tilt factor scaling, whenever applicable
dimension = domain->dimension;
scaleyz = scalexz = scalexy = 0;
if (domain->yperiodic && domain->xy != 0.0) scalexy = 1;
if (domain->zperiodic && dimension == 3) {
if (domain->yz != 0.0) scaleyz = 1;
if (domain->xz != 0.0) scalexz = 1;
}
// set fixed-point to default = center of cell
fixedpoint[0] = 0.5*(domain->boxlo[0]+domain->boxhi[0]);
fixedpoint[1] = 0.5*(domain->boxlo[1]+domain->boxhi[1]);
fixedpoint[2] = 0.5*(domain->boxlo[2]+domain->boxhi[2]);
// used by FixNVTSllod to preserve non-default value
mtchain_default_flag = 1;
tstat_flag = 0;
double t_period = 0.0;
double p_period[6];
for (int i = 0; i < 6; i++) {
p_start[i] = p_stop[i] = p_period[i] = p_target[i] = 0.0;
p_flag[i] = 0;
}
// process keywords
int iarg = 3;
while (iarg < narg) {
if (strcmp(arg[iarg],"temp") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
tstat_flag = 1;
t_start = force->numeric(FLERR,arg[iarg+1]);
t_target = t_start;
t_stop = force->numeric(FLERR,arg[iarg+2]);
t_period = force->numeric(FLERR,arg[iarg+3]);
if (t_start < 0.0 || t_stop <= 0.0)
error->all(FLERR,
"Target temperature for fix nvt/npt/nph cannot be 0.0");
iarg += 4;
} else if (strcmp(arg[iarg],"iso") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
pcouple = XYZ;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"aniso") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
pcouple = NONE;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"tri") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
pcouple = NONE;
scalexy = scalexz = scaleyz = 0;
p_start[0] = p_start[1] = p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = p_stop[1] = p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = p_period[1] = p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = p_flag[1] = p_flag[2] = 1;
p_start[3] = p_start[4] = p_start[5] = 0.0;
p_stop[3] = p_stop[4] = p_stop[5] = 0.0;
p_period[3] = p_period[4] = p_period[5] = force->numeric(FLERR,arg[iarg+3]);
p_flag[3] = p_flag[4] = p_flag[5] = 1;
if (dimension == 2) {
p_start[2] = p_stop[2] = p_period[2] = 0.0;
p_flag[2] = 0;
p_start[3] = p_stop[3] = p_period[3] = 0.0;
p_flag[3] = 0;
p_start[4] = p_stop[4] = p_period[4] = 0.0;
p_flag[4] = 0;
}
iarg += 4;
} else if (strcmp(arg[iarg],"x") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[0] = force->numeric(FLERR,arg[iarg+1]);
p_stop[0] = force->numeric(FLERR,arg[iarg+2]);
p_period[0] = force->numeric(FLERR,arg[iarg+3]);
p_flag[0] = 1;
deviatoric_flag = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"y") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[1] = force->numeric(FLERR,arg[iarg+1]);
p_stop[1] = force->numeric(FLERR,arg[iarg+2]);
p_period[1] = force->numeric(FLERR,arg[iarg+3]);
p_flag[1] = 1;
deviatoric_flag = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"z") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[2] = force->numeric(FLERR,arg[iarg+1]);
p_stop[2] = force->numeric(FLERR,arg[iarg+2]);
p_period[2] = force->numeric(FLERR,arg[iarg+3]);
p_flag[2] = 1;
deviatoric_flag = 1;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
} else if (strcmp(arg[iarg],"yz") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[3] = force->numeric(FLERR,arg[iarg+1]);
p_stop[3] = force->numeric(FLERR,arg[iarg+2]);
p_period[3] = force->numeric(FLERR,arg[iarg+3]);
p_flag[3] = 1;
deviatoric_flag = 1;
scaleyz = 0;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
} else if (strcmp(arg[iarg],"xz") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[4] = force->numeric(FLERR,arg[iarg+1]);
p_stop[4] = force->numeric(FLERR,arg[iarg+2]);
p_period[4] = force->numeric(FLERR,arg[iarg+3]);
p_flag[4] = 1;
deviatoric_flag = 1;
scalexz = 0;
iarg += 4;
if (dimension == 2)
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
} else if (strcmp(arg[iarg],"xy") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
p_start[5] = force->numeric(FLERR,arg[iarg+1]);
p_stop[5] = force->numeric(FLERR,arg[iarg+2]);
p_period[5] = force->numeric(FLERR,arg[iarg+3]);
p_flag[5] = 1;
deviatoric_flag = 1;
scalexy = 0;
iarg += 4;
} else if (strcmp(arg[iarg],"couple") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ;
else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY;
else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ;
else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ;
else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"drag") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
drag = force->numeric(FLERR,arg[iarg+1]);
if (drag < 0.0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"dilate") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"all") == 0) allremap = 1;
else {
allremap = 0;
delete [] id_dilate;
int n = strlen(arg[iarg+1]) + 1;
id_dilate = new char[n];
strcpy(id_dilate,arg[iarg+1]);
int idilate = group->find(id_dilate);
if (idilate == -1)
error->all(FLERR,"Fix nvt/npt/nph dilate group ID does not exist");
}
iarg += 2;
} else if (strcmp(arg[iarg],"tchain") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
mtchain = force->inumeric(FLERR,arg[iarg+1]);
// used by FixNVTSllod to preserve non-default value
mtchain_default_flag = 0;
if (mtchain < 1) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"pchain") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
mpchain = force->inumeric(FLERR,arg[iarg+1]);
if (mpchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"mtk") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) mtk_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) mtk_flag = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"tloop") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
nc_tchain = force->inumeric(FLERR,arg[iarg+1]);
if (nc_tchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"ploop") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
nc_pchain = force->inumeric(FLERR,arg[iarg+1]);
if (nc_pchain < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"nreset") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
nreset_h0 = force->inumeric(FLERR,arg[iarg+1]);
if (nreset_h0 < 0) error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"scalexy") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) scalexy = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scalexy = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"scalexz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) scalexz = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scalexz = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"scaleyz") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) scaleyz = 1;
else if (strcmp(arg[iarg+1],"no") == 0) scaleyz = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"flip") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
if (strcmp(arg[iarg+1],"yes") == 0) flipflag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) flipflag = 0;
else error->all(FLERR,"Illegal fix nvt/npt/nph command");
iarg += 2;
} else if (strcmp(arg[iarg],"fixedpoint") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix nvt/npt/nph command");
fixedpoint[0] = force->numeric(FLERR,arg[iarg+1]);
fixedpoint[1] = force->numeric(FLERR,arg[iarg+2]);
fixedpoint[2] = force->numeric(FLERR,arg[iarg+3]);
iarg += 4;
} else error->all(FLERR,"Illegal fix nvt/npt/nph command");
}
// error checks
if (dimension == 2 && (p_flag[2] || p_flag[3] || p_flag[4]))
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
if (dimension == 2 && (pcouple == YZ || pcouple == XZ))
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
if (dimension == 2 && (scalexz == 1 || scaleyz == 1 ))
error->all(FLERR,"Invalid fix nvt/npt/nph command for a 2d simulation");
if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0)
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0))
error->all(FLERR,"Invalid fix nvt/npt/nph command pressure settings");
// require periodicity in tensile dimension
if (p_flag[0] && domain->xperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension");
if (p_flag[1] && domain->yperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension");
if (p_flag[2] && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph on a non-periodic dimension");
// require periodicity in 2nd dim of off-diagonal tilt component
if (p_flag[3] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension");
if (p_flag[4] && domain->zperiodic == 0)
error->all(FLERR,
"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension");
if (p_flag[5] && domain->yperiodic == 0)
error->all(FLERR,
"Cannot use fix nvt/npt/nph on a 2nd non-periodic dimension");
if (scaleyz == 1 && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph "
"with yz scaling when z is non-periodic dimension");
if (scalexz == 1 && domain->zperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph "
"with xz scaling when z is non-periodic dimension");
if (scalexy == 1 && domain->yperiodic == 0)
error->all(FLERR,"Cannot use fix nvt/npt/nph "
"with xy scaling when y is non-periodic dimension");
if (p_flag[3] && scaleyz == 1)
error->all(FLERR,"Cannot use fix nvt/npt/nph with "
"both yz dynamics and yz scaling");
if (p_flag[4] && scalexz == 1)
error->all(FLERR,"Cannot use fix nvt/npt/nph with "
"both xz dynamics and xz scaling");
if (p_flag[5] && scalexy == 1)
error->all(FLERR,"Cannot use fix nvt/npt/nph with "
"both xy dynamics and xy scaling");
if (!domain->triclinic && (p_flag[3] || p_flag[4] || p_flag[5]))
error->all(FLERR,"Can not specify Pxy/Pxz/Pyz in "
"fix nvt/npt/nph with non-triclinic box");
if (pcouple == XYZ && dimension == 3 &&
(p_start[0] != p_start[1] || p_start[0] != p_start[2] ||
p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] ||
p_period[0] != p_period[1] || p_period[0] != p_period[2]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == XYZ && dimension == 2 &&
(p_start[0] != p_start[1] || p_stop[0] != p_stop[1] ||
p_period[0] != p_period[1]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == XY &&
(p_start[0] != p_start[1] || p_stop[0] != p_stop[1] ||
p_period[0] != p_period[1]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == YZ &&
(p_start[1] != p_start[2] || p_stop[1] != p_stop[2] ||
p_period[1] != p_period[2]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if (pcouple == XZ &&
(p_start[0] != p_start[2] || p_stop[0] != p_stop[2] ||
p_period[0] != p_period[2]))
error->all(FLERR,"Invalid fix nvt/npt/nph pressure settings");
if ((tstat_flag && t_period <= 0.0) ||
(p_flag[0] && p_period[0] <= 0.0) ||
(p_flag[1] && p_period[1] <= 0.0) ||
(p_flag[2] && p_period[2] <= 0.0) ||
(p_flag[3] && p_period[3] <= 0.0) ||
(p_flag[4] && p_period[4] <= 0.0) ||
(p_flag[5] && p_period[5] <= 0.0))
error->all(FLERR,"Fix nvt/npt/nph damping parameters must be > 0.0");
// set pstat_flag and box change and restart_pbc variables
pstat_flag = 0;
for (int i = 0; i < 6; i++)
if (p_flag[i]) pstat_flag = 1;
if (pstat_flag) {
if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1;
if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1;
no_change_box = 1;
if (allremap == 0) restart_pbc = 1;
}
// pstyle = TRICLINIC if any off-diagonal term is controlled -> 6 dof
// else pstyle = ISO if XYZ coupling or XY coupling in 2d -> 1 dof
// else pstyle = ANISO -> 3 dof
if (p_flag[3] || p_flag[4] || p_flag[5]) pstyle = TRICLINIC;
else if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO;
else pstyle = ANISO;
// pre_exchange only required if flips can occur due to shape changes
pre_exchange_flag = 0;
if (flipflag && (p_flag[3] || p_flag[4] || p_flag[5])) pre_exchange_flag = 1;
if (flipflag && (domain->yz != 0.0 || domain->xz != 0.0 || domain->xy != 0.0))
pre_exchange_flag = 1;
// convert input periods to frequencies
t_freq = 0.0;
p_freq[0] = p_freq[1] = p_freq[2] = p_freq[3] = p_freq[4] = p_freq[5] = 0.0;
if (tstat_flag) t_freq = 1.0 / t_period;
if (p_flag[0]) p_freq[0] = 1.0 / p_period[0];
if (p_flag[1]) p_freq[1] = 1.0 / p_period[1];
if (p_flag[2]) p_freq[2] = 1.0 / p_period[2];
if (p_flag[3]) p_freq[3] = 1.0 / p_period[3];
if (p_flag[4]) p_freq[4] = 1.0 / p_period[4];
if (p_flag[5]) p_freq[5] = 1.0 / p_period[5];
// Nose/Hoover temp and pressure init
size_vector = 0;
if (tstat_flag) {
int ich;
eta = new double[mtchain];
// add one extra dummy thermostat, set to zero
eta_dot = new double[mtchain+1];
eta_dot[mtchain] = 0.0;
eta_dotdot = new double[mtchain];
for (ich = 0; ich < mtchain; ich++) {
eta[ich] = eta_dot[ich] = eta_dotdot[ich] = 0.0;
}
eta_mass = new double[mtchain];
size_vector += 2*2*mtchain;
}
if (pstat_flag) {
omega[0] = omega[1] = omega[2] = 0.0;
omega_dot[0] = omega_dot[1] = omega_dot[2] = 0.0;
omega_mass[0] = omega_mass[1] = omega_mass[2] = 0.0;
omega[3] = omega[4] = omega[5] = 0.0;
omega_dot[3] = omega_dot[4] = omega_dot[5] = 0.0;
omega_mass[3] = omega_mass[4] = omega_mass[5] = 0.0;
if (pstyle == ISO) size_vector += 2*2*1;
else if (pstyle == ANISO) size_vector += 2*2*3;
else if (pstyle == TRICLINIC) size_vector += 2*2*6;
if (mpchain) {
int ich;
etap = new double[mpchain];
// add one extra dummy thermostat, set to zero
etap_dot = new double[mpchain+1];
etap_dot[mpchain] = 0.0;
etap_dotdot = new double[mpchain];
for (ich = 0; ich < mpchain; ich++) {
etap[ich] = etap_dot[ich] =
etap_dotdot[ich] = 0.0;
}
etap_mass = new double[mpchain];
size_vector += 2*2*mpchain;
}
if (deviatoric_flag) size_vector += 1;
}
nrigid = 0;
rfix = NULL;
if (pre_exchange_flag) irregular = new Irregular(lmp);
else irregular = NULL;
// initialize vol0,t0 to zero to signal uninitialized
// values then assigned in init(), if necessary
vol0 = t0 = 0.0;
}
/* ---------------------------------------------------------------------- */
FixNH::~FixNH()
{
delete [] id_dilate;
delete [] rfix;
delete irregular;
// delete temperature and pressure if fix created them
if (tflag) modify->delete_compute(id_temp);
delete [] id_temp;
if (tstat_flag) {
delete [] eta;
delete [] eta_dot;
delete [] eta_dotdot;
delete [] eta_mass;
}
if (pstat_flag) {
if (pflag) modify->delete_compute(id_press);
delete [] id_press;
if (mpchain) {
delete [] etap;
delete [] etap_dot;
delete [] etap_dotdot;
delete [] etap_mass;
}
}
}
/* ---------------------------------------------------------------------- */
int FixNH::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= FINAL_INTEGRATE;
mask |= THERMO_ENERGY;
mask |= INITIAL_INTEGRATE_RESPA;
mask |= FINAL_INTEGRATE_RESPA;
if (pre_exchange_flag) mask |= PRE_EXCHANGE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixNH::init()
{
// recheck that dilate group has not been deleted
if (allremap == 0) {
int idilate = group->find(id_dilate);
if (idilate == -1)
error->all(FLERR,"Fix nvt/npt/nph dilate group ID does not exist");
dilate_group_bit = group->bitmask[idilate];
}
// ensure no conflict with fix deform
if (pstat_flag)
for (int i = 0; i < modify->nfix; i++)
if (strcmp(modify->fix[i]->style,"deform") == 0) {
int *dimflag = ((FixDeform *) modify->fix[i])->dimflag;
if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) ||
(p_flag[2] && dimflag[2]) || (p_flag[3] && dimflag[3]) ||
(p_flag[4] && dimflag[4]) || (p_flag[5] && dimflag[5]))
error->all(FLERR,"Cannot use fix npt and fix deform on "
"same component of stress tensor");
}
// set temperature and pressure ptrs
int icompute = modify->find_compute(id_temp);
if (icompute < 0)
error->all(FLERR,"Temperature ID for fix nvt/npt does not exist");
temperature = modify->compute[icompute];
if (temperature->tempbias) which = BIAS;
else which = NOBIAS;
if (pstat_flag) {
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix npt/nph does not exist");
pressure = modify->compute[icompute];
}
// set timesteps and frequencies
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
dthalf = 0.5 * update->dt;
dt4 = 0.25 * update->dt;
dt8 = 0.125 * update->dt;
dto = dthalf;
p_freq_max = 0.0;
if (pstat_flag) {
p_freq_max = MAX(p_freq[0],p_freq[1]);
p_freq_max = MAX(p_freq_max,p_freq[2]);
if (pstyle == TRICLINIC) {
p_freq_max = MAX(p_freq_max,p_freq[3]);
p_freq_max = MAX(p_freq_max,p_freq[4]);
p_freq_max = MAX(p_freq_max,p_freq[5]);
}
pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain);
}
if (tstat_flag)
tdrag_factor = 1.0 - (update->dt * t_freq * drag / nc_tchain);
// tally the number of dimensions that are barostatted
// set initial volume and reference cell, if not already done
if (pstat_flag) {
pdim = p_flag[0] + p_flag[1] + p_flag[2];
if (vol0 == 0.0) {
if (dimension == 3) vol0 = domain->xprd * domain->yprd * domain->zprd;
else vol0 = domain->xprd * domain->yprd;
h0_inv[0] = domain->h_inv[0];
h0_inv[1] = domain->h_inv[1];
h0_inv[2] = domain->h_inv[2];
h0_inv[3] = domain->h_inv[3];
h0_inv[4] = domain->h_inv[4];
h0_inv[5] = domain->h_inv[5];
}
}
boltz = force->boltz;
nktv2p = force->nktv2p;
if (force->kspace) kspace_flag = 1;
else kspace_flag = 0;
if (strstr(update->integrate_style,"respa")) {
nlevels_respa = ((Respa *) update->integrate)->nlevels;
step_respa = ((Respa *) update->integrate)->step;
dto = 0.5*step_respa[0];
}
// detect if any rigid fixes exist so rigid bodies move when box is remapped
// rfix[] = indices to each fix rigid
delete [] rfix;
nrigid = 0;
rfix = NULL;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) nrigid++;
if (nrigid) {
rfix = new int[nrigid];
nrigid = 0;
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i;
}
}
/* ----------------------------------------------------------------------
compute T,P before integrator starts
------------------------------------------------------------------------- */
void FixNH::setup(int vflag)
{
// initialize some quantities that were not available earlier
tdof = temperature->dof;
// t_target is needed by NPH and NPT in compute_scalar()
// If no thermostat or using fix nphug,
// t_target must be defined by other means.
if (tstat_flag && strcmp(style,"nphug") != 0) {
compute_temp_target();
} else if (pstat_flag) {
// t0 = reference temperature for masses
// cannot be done in init() b/c temperature cannot be called there
// is b/c Modify::init() inits computes after fixes due to dof dependence
// guesstimate a unit-dependent t0 if actual T = 0.0
// if it was read in from a restart file, leave it be
if (t0 == 0.0) {
t0 = temperature->compute_scalar();
if (t0 == 0.0) {
if (strcmp(update->unit_style,"lj") == 0) t0 = 1.0;
else t0 = 300.0;
}
}
t_target = t0;
}
if (pstat_flag) compute_press_target();
t_current = temperature->compute_scalar();
if (pstat_flag) {
if (pstyle == ISO) pressure->compute_scalar();
else pressure->compute_vector();
couple();
pressure->addstep(update->ntimestep+1);
}
// masses and initial forces on thermostat variables
if (tstat_flag) {
eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq);
for (int ich = 1; ich < mtchain; ich++)
eta_mass[ich] = boltz * t_target / (t_freq*t_freq);
for (int ich = 1; ich < mtchain; ich++) {
eta_dotdot[ich] = (eta_mass[ich-1]*eta_dot[ich-1]*eta_dot[ich-1] -
boltz * t_target) / eta_mass[ich];
}
}
// masses and initial forces on barostat variables
if (pstat_flag) {
double kt = boltz * t_target;
double nkt = atom->natoms * kt;
for (int i = 0; i < 3; i++)
if (p_flag[i])
omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++)
if (p_flag[i]) omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
}
// masses and initial forces on barostat thermostat variables
if (mpchain) {
etap_mass[0] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_mass[ich] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_dotdot[ich] =
(etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] -
boltz * t_target) / etap_mass[ich];
}
}
}
/* ----------------------------------------------------------------------
1st half of Verlet update
------------------------------------------------------------------------- */
void FixNH::initial_integrate(int vflag)
{
// update eta_press_dot
if (pstat_flag && mpchain) nhc_press_integrate();
// update eta_dot
if (tstat_flag) {
compute_temp_target();
nhc_temp_integrate();
}
// need to recompute pressure to account for change in KE
// t_current is up-to-date, but compute_temperature is not
// compute appropriately coupled elements of mvv_current
if (pstat_flag) {
if (pstyle == ISO) {
temperature->compute_scalar();
pressure->compute_scalar();
} else {
temperature->compute_vector();
pressure->compute_vector();
}
couple();
pressure->addstep(update->ntimestep+1);
}
if (pstat_flag) {
compute_press_target();
nh_omega_dot();
nh_v_press();
}
nve_v();
// remap simulation box by 1/2 step
if (pstat_flag) remap();
nve_x();
// remap simulation box by 1/2 step
// redo KSpace coeffs since volume has changed
if (pstat_flag) {
remap();
if (kspace_flag) force->kspace->setup();
}
}
/* ----------------------------------------------------------------------
2nd half of Verlet update
------------------------------------------------------------------------- */
void FixNH::final_integrate()
{
nve_v();
if (pstat_flag) nh_v_press();
// compute new T,P
// compute appropriately coupled elements of mvv_current
t_current = temperature->compute_scalar();
if (pstat_flag) {
if (pstyle == ISO) pressure->compute_scalar();
else pressure->compute_vector();
couple();
pressure->addstep(update->ntimestep+1);
}
if (pstat_flag) nh_omega_dot();
// update eta_dot
// update eta_press_dot
if (tstat_flag) nhc_temp_integrate();
if (pstat_flag && mpchain) nhc_press_integrate();
}
/* ---------------------------------------------------------------------- */
void FixNH::initial_integrate_respa(int vflag, int ilevel, int iloop)
{
// set timesteps by level
dtv = step_respa[ilevel];
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
dthalf = 0.5 * step_respa[ilevel];
// outermost level - update eta_dot and omega_dot, apply to v
// all other levels - NVE update of v
// x,v updates only performed for atoms in group
if (ilevel == nlevels_respa-1) {
// update eta_press_dot
if (pstat_flag && mpchain) nhc_press_integrate();
// update eta_dot
if (tstat_flag) {
compute_temp_target();
nhc_temp_integrate();
}
// recompute pressure to account for change in KE
// t_current is up-to-date, but compute_temperature is not
// compute appropriately coupled elements of mvv_current
if (pstat_flag) {
if (pstyle == ISO) {
temperature->compute_scalar();
pressure->compute_scalar();
} else {
temperature->compute_vector();
pressure->compute_vector();
}
couple();
pressure->addstep(update->ntimestep+1);
}
if (pstat_flag) {
compute_press_target();
nh_omega_dot();
nh_v_press();
}
nve_v();
} else nve_v();
// innermost level - also update x only for atoms in group
// if barostat, perform 1/2 step remap before and after
if (ilevel == 0) {
if (pstat_flag) remap();
nve_x();
if (pstat_flag) remap();
}
// if barostat, redo KSpace coeffs at outermost level,
// since volume has changed
if (ilevel == nlevels_respa-1 && kspace_flag && pstat_flag)
force->kspace->setup();
}
/* ---------------------------------------------------------------------- */
void FixNH::final_integrate_respa(int ilevel, int iloop)
{
// set timesteps by level
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
dthalf = 0.5 * step_respa[ilevel];
// outermost level - update eta_dot and omega_dot, apply via final_integrate
// all other levels - NVE update of v
if (ilevel == nlevels_respa-1) final_integrate();
else nve_v();
}
/* ---------------------------------------------------------------------- */
void FixNH::couple()
{
double *tensor = pressure->vector;
if (pstyle == ISO)
p_current[0] = p_current[1] = p_current[2] = pressure->scalar;
else if (pcouple == XYZ) {
double ave = 1.0/3.0 * (tensor[0] + tensor[1] + tensor[2]);
p_current[0] = p_current[1] = p_current[2] = ave;
} else if (pcouple == XY) {
double ave = 0.5 * (tensor[0] + tensor[1]);
p_current[0] = p_current[1] = ave;
p_current[2] = tensor[2];
} else if (pcouple == YZ) {
double ave = 0.5 * (tensor[1] + tensor[2]);
p_current[1] = p_current[2] = ave;
p_current[0] = tensor[0];
} else if (pcouple == XZ) {
double ave = 0.5 * (tensor[0] + tensor[2]);
p_current[0] = p_current[2] = ave;
p_current[1] = tensor[1];
} else {
p_current[0] = tensor[0];
p_current[1] = tensor[1];
p_current[2] = tensor[2];
}
// switch order from xy-xz-yz to Voigt
if (pstyle == TRICLINIC) {
p_current[3] = tensor[5];
p_current[4] = tensor[4];
p_current[5] = tensor[3];
}
}
/* ----------------------------------------------------------------------
change box size
remap all atoms or dilate group atoms depending on allremap flag
if rigid bodies exist, scale rigid body centers-of-mass
------------------------------------------------------------------------- */
void FixNH::remap()
{
int i;
double oldlo,oldhi;
double expfac;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double *h = domain->h;
// omega is not used, except for book-keeping
for (int i = 0; i < 6; i++) omega[i] += dto*omega_dot[i];
// convert pertinent atoms and rigid bodies to lamda coords
if (allremap) domain->x2lamda(nlocal);
else {
for (i = 0; i < nlocal; i++)
if (mask[i] & dilate_group_bit)
domain->x2lamda(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(0);
// reset global and local box to new size/shape
// this operation corresponds to applying the
// translate and scale operations
// corresponding to the solution of the following ODE:
//
// h_dot = omega_dot * h
//
// where h_dot, omega_dot and h are all upper-triangular
// 3x3 tensors. In Voigt notation, the elements of the
// RHS product tensor are:
// h_dot = [0*0, 1*1, 2*2, 1*3+3*2, 0*4+5*3+4*2, 0*5+5*1]
//
// Ordering of operations preserves time symmetry.
double dto2 = dto/2.0;
double dto4 = dto/4.0;
double dto8 = dto/8.0;
// off-diagonal components, first half
if (pstyle == TRICLINIC) {
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
if (p_flag[3]) {
expfac = exp(dto4*omega_dot[1]);
h[3] *= expfac;
h[3] += dto2*(omega_dot[3]*h[2]);
h[3] *= expfac;
}
if (p_flag[5]) {
expfac = exp(dto4*omega_dot[0]);
h[5] *= expfac;
h[5] += dto2*(omega_dot[5]*h[1]);
h[5] *= expfac;
}
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
}
// scale diagonal components
// scale tilt factors with cell, if set
if (p_flag[0]) {
oldlo = domain->boxlo[0];
oldhi = domain->boxhi[0];
expfac = exp(dto*omega_dot[0]);
domain->boxlo[0] = (oldlo-fixedpoint[0])*expfac + fixedpoint[0];
domain->boxhi[0] = (oldhi-fixedpoint[0])*expfac + fixedpoint[0];
}
if (p_flag[1]) {
oldlo = domain->boxlo[1];
oldhi = domain->boxhi[1];
expfac = exp(dto*omega_dot[1]);
domain->boxlo[1] = (oldlo-fixedpoint[1])*expfac + fixedpoint[1];
domain->boxhi[1] = (oldhi-fixedpoint[1])*expfac + fixedpoint[1];
if (scalexy) h[5] *= expfac;
}
if (p_flag[2]) {
oldlo = domain->boxlo[2];
oldhi = domain->boxhi[2];
expfac = exp(dto*omega_dot[2]);
domain->boxlo[2] = (oldlo-fixedpoint[2])*expfac + fixedpoint[2];
domain->boxhi[2] = (oldhi-fixedpoint[2])*expfac + fixedpoint[2];
if (scalexz) h[4] *= expfac;
if (scaleyz) h[3] *= expfac;
}
// off-diagonal components, second half
if (pstyle == TRICLINIC) {
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
if (p_flag[3]) {
expfac = exp(dto4*omega_dot[1]);
h[3] *= expfac;
h[3] += dto2*(omega_dot[3]*h[2]);
h[3] *= expfac;
}
if (p_flag[5]) {
expfac = exp(dto4*omega_dot[0]);
h[5] *= expfac;
h[5] += dto2*(omega_dot[5]*h[1]);
h[5] *= expfac;
}
if (p_flag[4]) {
expfac = exp(dto8*omega_dot[0]);
h[4] *= expfac;
h[4] += dto4*(omega_dot[5]*h[3]+omega_dot[4]*h[2]);
h[4] *= expfac;
}
}
domain->yz = h[3];
domain->xz = h[4];
domain->xy = h[5];
// tilt factor to cell length ratio can not exceed TILTMAX in one step
if (domain->yz < -TILTMAX*domain->yprd ||
domain->yz > TILTMAX*domain->yprd ||
domain->xz < -TILTMAX*domain->xprd ||
domain->xz > TILTMAX*domain->xprd ||
domain->xy < -TILTMAX*domain->xprd ||
domain->xy > TILTMAX*domain->xprd)
error->all(FLERR,"Fix npt/nph has tilted box too far in one step - "
"periodic cell is too far from equilibrium state");
domain->set_global_box();
domain->set_local_box();
// convert pertinent atoms and rigid bodies back to box coords
if (allremap) domain->lamda2x(nlocal);
else {
for (i = 0; i < nlocal; i++)
if (mask[i] & dilate_group_bit)
domain->lamda2x(x[i],x[i]);
}
if (nrigid)
for (i = 0; i < nrigid; i++)
modify->fix[rfix[i]]->deform(1);
}
/* ----------------------------------------------------------------------
pack entire state of Fix into one write
------------------------------------------------------------------------- */
void FixNH::write_restart(FILE *fp)
{
int nsize = size_restart_global();
double *list;
memory->create(list,nsize,"nh:list");
pack_restart_data(list);
if (comm->me == 0) {
int size = nsize * sizeof(double);
fwrite(&size,sizeof(int),1,fp);
fwrite(list,sizeof(double),nsize,fp);
}
memory->destroy(list);
}
/* ----------------------------------------------------------------------
calculate the number of data to be packed
------------------------------------------------------------------------- */
int FixNH::size_restart_global()
{
int nsize = 2;
if (tstat_flag) nsize += 1 + 2*mtchain;
if (pstat_flag) {
nsize += 16 + 2*mpchain;
if (deviatoric_flag) nsize += 6;
}
return nsize;
}
/* ----------------------------------------------------------------------
pack restart data
------------------------------------------------------------------------- */
int FixNH::pack_restart_data(double *list)
{
int n = 0;
list[n++] = tstat_flag;
if (tstat_flag) {
list[n++] = mtchain;
for (int ich = 0; ich < mtchain; ich++)
list[n++] = eta[ich];
for (int ich = 0; ich < mtchain; ich++)
list[n++] = eta_dot[ich];
}
list[n++] = pstat_flag;
if (pstat_flag) {
list[n++] = omega[0];
list[n++] = omega[1];
list[n++] = omega[2];
list[n++] = omega[3];
list[n++] = omega[4];
list[n++] = omega[5];
list[n++] = omega_dot[0];
list[n++] = omega_dot[1];
list[n++] = omega_dot[2];
list[n++] = omega_dot[3];
list[n++] = omega_dot[4];
list[n++] = omega_dot[5];
list[n++] = vol0;
list[n++] = t0;
list[n++] = mpchain;
if (mpchain) {
for (int ich = 0; ich < mpchain; ich++)
list[n++] = etap[ich];
for (int ich = 0; ich < mpchain; ich++)
list[n++] = etap_dot[ich];
}
list[n++] = deviatoric_flag;
if (deviatoric_flag) {
list[n++] = h0_inv[0];
list[n++] = h0_inv[1];
list[n++] = h0_inv[2];
list[n++] = h0_inv[3];
list[n++] = h0_inv[4];
list[n++] = h0_inv[5];
}
}
return n;
}
/* ----------------------------------------------------------------------
use state info from restart file to restart the Fix
------------------------------------------------------------------------- */
void FixNH::restart(char *buf)
{
int n = 0;
double *list = (double *) buf;
int flag = static_cast<int> (list[n++]);
if (flag) {
int m = static_cast<int> (list[n++]);
if (tstat_flag && m == mtchain) {
for (int ich = 0; ich < mtchain; ich++)
eta[ich] = list[n++];
for (int ich = 0; ich < mtchain; ich++)
eta_dot[ich] = list[n++];
} else n += 2*m;
}
flag = static_cast<int> (list[n++]);
if (flag) {
omega[0] = list[n++];
omega[1] = list[n++];
omega[2] = list[n++];
omega[3] = list[n++];
omega[4] = list[n++];
omega[5] = list[n++];
omega_dot[0] = list[n++];
omega_dot[1] = list[n++];
omega_dot[2] = list[n++];
omega_dot[3] = list[n++];
omega_dot[4] = list[n++];
omega_dot[5] = list[n++];
vol0 = list[n++];
t0 = list[n++];
int m = static_cast<int> (list[n++]);
if (pstat_flag && m == mpchain) {
for (int ich = 0; ich < mpchain; ich++)
etap[ich] = list[n++];
for (int ich = 0; ich < mpchain; ich++)
etap_dot[ich] = list[n++];
} else n+=2*m;
flag = static_cast<int> (list[n++]);
if (flag) {
h0_inv[0] = list[n++];
h0_inv[1] = list[n++];
h0_inv[2] = list[n++];
h0_inv[3] = list[n++];
h0_inv[4] = list[n++];
h0_inv[5] = list[n++];
}
}
}
/* ---------------------------------------------------------------------- */
int FixNH::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"temp") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (tflag) {
modify->delete_compute(id_temp);
tflag = 0;
}
delete [] id_temp;
int n = strlen(arg[1]) + 1;
id_temp = new char[n];
strcpy(id_temp,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0)
error->all(FLERR,"Could not find fix_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,
"Fix_modify temperature ID does not compute temperature");
if (temperature->igroup != 0 && comm->me == 0)
error->warning(FLERR,"Temperature for fix modify is not for group all");
// reset id_temp of pressure to new temperature ID
if (pstat_flag) {
icompute = modify->find_compute(id_press);
if (icompute < 0)
error->all(FLERR,"Pressure ID for fix modify does not exist");
modify->compute[icompute]->reset_extra_compute_fix(id_temp);
}
return 2;
} else if (strcmp(arg[0],"press") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (!pstat_flag) error->all(FLERR,"Illegal fix_modify command");
if (pflag) {
modify->delete_compute(id_press);
pflag = 0;
}
delete [] id_press;
int n = strlen(arg[1]) + 1;
id_press = new char[n];
strcpy(id_press,arg[1]);
int icompute = modify->find_compute(arg[1]);
if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID");
pressure = modify->compute[icompute];
if (pressure->pressflag == 0)
error->all(FLERR,"Fix_modify pressure ID does not compute pressure");
return 2;
}
return 0;
}
/* ---------------------------------------------------------------------- */
double FixNH::compute_scalar()
{
int i;
double volume;
double energy;
double kt = boltz * t_target;
double lkt_press = kt;
int ich;
if (dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd;
else volume = domain->xprd * domain->yprd;
energy = 0.0;
// thermostat chain energy is equivalent to Eq. (2) in
// Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117
// Sum(0.5*p_eta_k^2/Q_k,k=1,M) + L*k*T*eta_1 + Sum(k*T*eta_k,k=2,M),
// where L = tdof
// M = mtchain
// p_eta_k = Q_k*eta_dot[k-1]
// Q_1 = L*k*T/t_freq^2
// Q_k = k*T/t_freq^2, k > 1
if (tstat_flag) {
energy += ke_target * eta[0] + 0.5*eta_mass[0]*eta_dot[0]*eta_dot[0];
for (ich = 1; ich < mtchain; ich++)
energy += kt * eta[ich] + 0.5*eta_mass[ich]*eta_dot[ich]*eta_dot[ich];
}
// barostat energy is equivalent to Eq. (8) in
// Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117
// Sum(0.5*p_omega^2/W + P*V),
// where N = natoms
// p_omega = W*omega_dot
// W = N*k*T/p_freq^2
// sum is over barostatted dimensions
if (pstat_flag) {
for (i = 0; i < 3; i++)
if (p_flag[i])
energy += 0.5*omega_dot[i]*omega_dot[i]*omega_mass[i] +
p_hydro*(volume-vol0) / (pdim*nktv2p);
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i])
energy += 0.5*omega_dot[i]*omega_dot[i]*omega_mass[i];
}
// extra contributions from thermostat chain for barostat
if (mpchain) {
energy += lkt_press * etap[0] + 0.5*etap_mass[0]*etap_dot[0]*etap_dot[0];
for (ich = 1; ich < mpchain; ich++)
energy += kt * etap[ich] +
0.5*etap_mass[ich]*etap_dot[ich]*etap_dot[ich];
}
// extra contribution from strain energy
if (deviatoric_flag) energy += compute_strain_energy();
}
return energy;
}
/* ----------------------------------------------------------------------
return a single element of the following vectors, in this order:
eta[tchain], eta_dot[tchain], omega[ndof], omega_dot[ndof]
etap[pchain], etap_dot[pchain], PE_eta[tchain], KE_eta_dot[tchain]
PE_omega[ndof], KE_omega_dot[ndof], PE_etap[pchain], KE_etap_dot[pchain]
PE_strain[1]
if no thermostat exists, related quantities are omitted from the list
if no barostat exists, related quantities are omitted from the list
ndof = 1,3,6 degrees of freedom for pstyle = ISO,ANISO,TRI
------------------------------------------------------------------------- */
double FixNH::compute_vector(int n)
{
int ilen;
if (tstat_flag) {
ilen = mtchain;
if (n < ilen) return eta[n];
n -= ilen;
ilen = mtchain;
if (n < ilen) return eta_dot[n];
n -= ilen;
}
if (pstat_flag) {
if (pstyle == ISO) {
ilen = 1;
if (n < ilen) return omega[n];
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) return omega[n];
n -= ilen;
} else {
ilen = 6;
if (n < ilen) return omega[n];
n -= ilen;
}
if (pstyle == ISO) {
ilen = 1;
if (n < ilen) return omega_dot[n];
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) return omega_dot[n];
n -= ilen;
} else {
ilen = 6;
if (n < ilen) return omega_dot[n];
n -= ilen;
}
if (mpchain) {
ilen = mpchain;
if (n < ilen) return etap[n];
n -= ilen;
ilen = mpchain;
if (n < ilen) return etap_dot[n];
n -= ilen;
}
}
double volume;
double kt = boltz * t_target;
double lkt_press = kt;
int ich;
if (dimension == 3) volume = domain->xprd * domain->yprd * domain->zprd;
else volume = domain->xprd * domain->yprd;
if (tstat_flag) {
ilen = mtchain;
if (n < ilen) {
ich = n;
if (ich == 0)
return ke_target * eta[0];
else
return kt * eta[ich];
}
n -= ilen;
ilen = mtchain;
if (n < ilen) {
ich = n;
if (ich == 0)
return 0.5*eta_mass[0]*eta_dot[0]*eta_dot[0];
else
return 0.5*eta_mass[ich]*eta_dot[ich]*eta_dot[ich];
}
n -= ilen;
}
if (pstat_flag) {
if (pstyle == ISO) {
ilen = 1;
if (n < ilen)
return p_hydro*(volume-vol0) / nktv2p;
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) {
if (p_flag[n])
return p_hydro*(volume-vol0) / (pdim*nktv2p);
else
return 0.0;
}
n -= ilen;
} else {
ilen = 6;
if (n < ilen) {
if (n > 2) return 0.0;
else if (p_flag[n])
return p_hydro*(volume-vol0) / (pdim*nktv2p);
else
return 0.0;
}
n -= ilen;
}
if (pstyle == ISO) {
ilen = 1;
if (n < ilen)
return pdim*0.5*omega_dot[n]*omega_dot[n]*omega_mass[n];
n -= ilen;
} else if (pstyle == ANISO) {
ilen = 3;
if (n < ilen) {
if (p_flag[n])
return 0.5*omega_dot[n]*omega_dot[n]*omega_mass[n];
else return 0.0;
}
n -= ilen;
} else {
ilen = 6;
if (n < ilen) {
if (p_flag[n])
return 0.5*omega_dot[n]*omega_dot[n]*omega_mass[n];
else return 0.0;
}
n -= ilen;
}
if (mpchain) {
ilen = mpchain;
if (n < ilen) {
ich = n;
if (ich == 0) return lkt_press * etap[0];
else return kt * etap[ich];
}
n -= ilen;
ilen = mpchain;
if (n < ilen) {
ich = n;
if (ich == 0)
return 0.5*etap_mass[0]*etap_dot[0]*etap_dot[0];
else
return 0.5*etap_mass[ich]*etap_dot[ich]*etap_dot[ich];
}
n -= ilen;
}
if (deviatoric_flag) {
ilen = 1;
if (n < ilen)
return compute_strain_energy();
n -= ilen;
}
}
return 0.0;
}
/* ---------------------------------------------------------------------- */
void FixNH::reset_target(double t_new)
{
t_target = t_start = t_stop = t_new;
}
/* ---------------------------------------------------------------------- */
void FixNH::reset_dt()
{
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
dthalf = 0.5 * update->dt;
dt4 = 0.25 * update->dt;
dt8 = 0.125 * update->dt;
dto = dthalf;
// If using respa, then remap is performed in innermost level
if (strstr(update->integrate_style,"respa"))
dto = 0.5*step_respa[0];
if (pstat_flag)
pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain);
if (tstat_flag)
tdrag_factor = 1.0 - (update->dt * t_freq * drag / nc_tchain);
}
/* ----------------------------------------------------------------------
extract thermostat properties
------------------------------------------------------------------------- */
void *FixNH::extract(const char *str, int &dim)
{
dim=0;
if (strcmp(str,"t_target") == 0) {
return &t_target;
} else if (strcmp(str,"mtchain") == 0) {
return &mtchain;
}
dim=1;
if (strcmp(str,"eta") == 0) {
return &eta;
}
return NULL;
}
/* ----------------------------------------------------------------------
perform half-step update of chain thermostat variables
------------------------------------------------------------------------- */
void FixNH::nhc_temp_integrate()
{
int ich;
double expfac;
double kecurrent = tdof * boltz * t_current;
// Update masses, to preserve initial freq, if flag set
if (eta_mass_flag) {
eta_mass[0] = tdof * boltz * t_target / (t_freq*t_freq);
for (int ich = 1; ich < mtchain; ich++)
eta_mass[ich] = boltz * t_target / (t_freq*t_freq);
}
if (eta_mass[0] > 0.0)
eta_dotdot[0] = (kecurrent - ke_target)/eta_mass[0];
else eta_dotdot[0] = 0.0;
double ncfac = 1.0/nc_tchain;
for (int iloop = 0; iloop < nc_tchain; iloop++) {
for (ich = mtchain-1; ich > 0; ich--) {
expfac = exp(-ncfac*dt8*eta_dot[ich+1]);
eta_dot[ich] *= expfac;
eta_dot[ich] += eta_dotdot[ich] * ncfac*dt4;
eta_dot[ich] *= tdrag_factor;
eta_dot[ich] *= expfac;
}
expfac = exp(-ncfac*dt8*eta_dot[1]);
eta_dot[0] *= expfac;
eta_dot[0] += eta_dotdot[0] * ncfac*dt4;
eta_dot[0] *= tdrag_factor;
eta_dot[0] *= expfac;
factor_eta = exp(-ncfac*dthalf*eta_dot[0]);
nh_v_temp();
// rescale temperature due to velocity scaling
// should not be necessary to explicitly recompute the temperature
t_current *= factor_eta*factor_eta;
kecurrent = tdof * boltz * t_current;
if (eta_mass[0] > 0.0)
eta_dotdot[0] = (kecurrent - ke_target)/eta_mass[0];
else eta_dotdot[0] = 0.0;
for (ich = 0; ich < mtchain; ich++)
eta[ich] += ncfac*dthalf*eta_dot[ich];
eta_dot[0] *= expfac;
eta_dot[0] += eta_dotdot[0] * ncfac*dt4;
eta_dot[0] *= expfac;
for (ich = 1; ich < mtchain; ich++) {
expfac = exp(-ncfac*dt8*eta_dot[ich+1]);
eta_dot[ich] *= expfac;
eta_dotdot[ich] = (eta_mass[ich-1]*eta_dot[ich-1]*eta_dot[ich-1]
- boltz * t_target)/eta_mass[ich];
eta_dot[ich] += eta_dotdot[ich] * ncfac*dt4;
eta_dot[ich] *= expfac;
}
}
}
/* ----------------------------------------------------------------------
perform half-step update of chain thermostat variables for barostat
scale barostat velocities
------------------------------------------------------------------------- */
void FixNH::nhc_press_integrate()
{
int ich,i;
double expfac,factor_etap,kecurrent;
double kt = boltz * t_target;
double lkt_press = kt;
// Update masses, to preserve initial freq, if flag set
if (omega_mass_flag) {
double nkt = atom->natoms * kt;
for (int i = 0; i < 3; i++)
if (p_flag[i])
omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++)
if (p_flag[i]) omega_mass[i] = nkt/(p_freq[i]*p_freq[i]);
}
}
if (etap_mass_flag) {
if (mpchain) {
etap_mass[0] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_mass[ich] = boltz * t_target / (p_freq_max*p_freq_max);
for (int ich = 1; ich < mpchain; ich++)
etap_dotdot[ich] =
(etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] -
boltz * t_target) / etap_mass[ich];
}
}
kecurrent = 0.0;
for (i = 0; i < 3; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
}
etap_dotdot[0] = (kecurrent - lkt_press)/etap_mass[0];
double ncfac = 1.0/nc_pchain;
for (int iloop = 0; iloop < nc_pchain; iloop++) {
for (ich = mpchain-1; ich > 0; ich--) {
expfac = exp(-ncfac*dt8*etap_dot[ich+1]);
etap_dot[ich] *= expfac;
etap_dot[ich] += etap_dotdot[ich] * ncfac*dt4;
etap_dot[ich] *= pdrag_factor;
etap_dot[ich] *= expfac;
}
expfac = exp(-ncfac*dt8*etap_dot[1]);
etap_dot[0] *= expfac;
etap_dot[0] += etap_dotdot[0] * ncfac*dt4;
etap_dot[0] *= pdrag_factor;
etap_dot[0] *= expfac;
for (ich = 0; ich < mpchain; ich++)
etap[ich] += ncfac*dthalf*etap_dot[ich];
factor_etap = exp(-ncfac*dthalf*etap_dot[0]);
for (i = 0; i < 3; i++)
if (p_flag[i]) omega_dot[i] *= factor_etap;
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i]) omega_dot[i] *= factor_etap;
}
kecurrent = 0.0;
for (i = 0; i < 3; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
if (pstyle == TRICLINIC) {
for (i = 3; i < 6; i++)
if (p_flag[i]) kecurrent += omega_mass[i]*omega_dot[i]*omega_dot[i];
}
etap_dotdot[0] = (kecurrent - lkt_press)/etap_mass[0];
etap_dot[0] *= expfac;
etap_dot[0] += etap_dotdot[0] * ncfac*dt4;
etap_dot[0] *= expfac;
for (ich = 1; ich < mpchain; ich++) {
expfac = exp(-ncfac*dt8*etap_dot[ich+1]);
etap_dot[ich] *= expfac;
etap_dotdot[ich] =
(etap_mass[ich-1]*etap_dot[ich-1]*etap_dot[ich-1] - boltz*t_target) /
etap_mass[ich];
etap_dot[ich] += etap_dotdot[ich] * ncfac*dt4;
etap_dot[ich] *= expfac;
}
}
}
/* ----------------------------------------------------------------------
perform half-step barostat scaling of velocities
-----------------------------------------------------------------------*/
void FixNH::nh_v_press()
{
double factor[3];
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
factor[0] = exp(-dt4*(omega_dot[0]+mtk_term2));
factor[1] = exp(-dt4*(omega_dot[1]+mtk_term2));
factor[2] = exp(-dt4*(omega_dot[2]+mtk_term2));
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
if (pstyle == TRICLINIC) {
v[i][0] += -dthalf*(v[i][1]*omega_dot[5] + v[i][2]*omega_dot[4]);
v[i][1] += -dthalf*v[i][2]*omega_dot[3];
}
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
}
}
} else if (which == BIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
if (pstyle == TRICLINIC) {
v[i][0] += -dthalf*(v[i][1]*omega_dot[5] + v[i][2]*omega_dot[4]);
v[i][1] += -dthalf*v[i][2]*omega_dot[3];
}
v[i][0] *= factor[0];
v[i][1] *= factor[1];
v[i][2] *= factor[2];
temperature->restore_bias(i,v[i]);
}
}
}
}
/* ----------------------------------------------------------------------
perform half-step update of velocities
-----------------------------------------------------------------------*/
void FixNH::nve_v()
{
double dtfm;
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (rmass) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm*f[i][0];
v[i][1] += dtfm*f[i][1];
v[i][2] += dtfm*f[i][2];
}
}
} else {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm*f[i][0];
v[i][1] += dtfm*f[i][1];
v[i][2] += dtfm*f[i][2];
}
}
}
}
/* ----------------------------------------------------------------------
perform full-step update of positions
-----------------------------------------------------------------------*/
void FixNH::nve_x()
{
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
// x update by full step only for atoms in group
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
}
}
/* ----------------------------------------------------------------------
perform half-step thermostat scaling of velocities
-----------------------------------------------------------------------*/
void FixNH::nh_v_temp()
{
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (which == NOBIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
v[i][0] *= factor_eta;
v[i][1] *= factor_eta;
v[i][2] *= factor_eta;
}
}
} else if (which == BIAS) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
temperature->remove_bias(i,v[i]);
v[i][0] *= factor_eta;
v[i][1] *= factor_eta;
v[i][2] *= factor_eta;
temperature->restore_bias(i,v[i]);
}
}
}
}
/* ----------------------------------------------------------------------
compute sigma tensor
needed whenever p_target or h0_inv changes
-----------------------------------------------------------------------*/
void FixNH::compute_sigma()
{
// if nreset_h0 > 0, reset vol0 and h0_inv
// every nreset_h0 timesteps
if (nreset_h0 > 0) {
int delta = update->ntimestep - update->beginstep;
if (delta % nreset_h0 == 0) {
if (dimension == 3) vol0 = domain->xprd * domain->yprd * domain->zprd;
else vol0 = domain->xprd * domain->yprd;
h0_inv[0] = domain->h_inv[0];
h0_inv[1] = domain->h_inv[1];
h0_inv[2] = domain->h_inv[2];
h0_inv[3] = domain->h_inv[3];
h0_inv[4] = domain->h_inv[4];
h0_inv[5] = domain->h_inv[5];
}
}
// generate upper-triangular half of
// sigma = vol0*h0inv*(p_target-p_hydro)*h0inv^t
// units of sigma are are PV/L^2 e.g. atm.A
//
// [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ] [ 0 - - ]
// [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ] [ 5 1 - ]
// [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ] [ 4 3 2 ]
sigma[0] =
vol0*(h0_inv[0]*((p_target[0]-p_hydro)*h0_inv[0] +
p_target[5]*h0_inv[5]+p_target[4]*h0_inv[4]) +
h0_inv[5]*(p_target[5]*h0_inv[0] +
(p_target[1]-p_hydro)*h0_inv[5]+p_target[3]*h0_inv[4]) +
h0_inv[4]*(p_target[4]*h0_inv[0]+p_target[3]*h0_inv[5] +
(p_target[2]-p_hydro)*h0_inv[4]));
sigma[1] =
vol0*(h0_inv[1]*((p_target[1]-p_hydro)*h0_inv[1] +
p_target[3]*h0_inv[3]) +
h0_inv[3]*(p_target[3]*h0_inv[1] +
(p_target[2]-p_hydro)*h0_inv[3]));
sigma[2] =
vol0*(h0_inv[2]*((p_target[2]-p_hydro)*h0_inv[2]));
sigma[3] =
vol0*(h0_inv[1]*(p_target[3]*h0_inv[2]) +
h0_inv[3]*((p_target[2]-p_hydro)*h0_inv[2]));
sigma[4] =
vol0*(h0_inv[0]*(p_target[4]*h0_inv[2]) +
h0_inv[5]*(p_target[3]*h0_inv[2]) +
h0_inv[4]*((p_target[2]-p_hydro)*h0_inv[2]));
sigma[5] =
vol0*(h0_inv[0]*(p_target[5]*h0_inv[1]+p_target[4]*h0_inv[3]) +
h0_inv[5]*((p_target[1]-p_hydro)*h0_inv[1]+p_target[3]*h0_inv[3]) +
h0_inv[4]*(p_target[3]*h0_inv[1]+(p_target[2]-p_hydro)*h0_inv[3]));
}
/* ----------------------------------------------------------------------
compute strain energy
-----------------------------------------------------------------------*/
double FixNH::compute_strain_energy()
{
// compute strain energy = 0.5*Tr(sigma*h*h^t) in energy units
double* h = domain->h;
double d0,d1,d2;
d0 =
sigma[0]*(h[0]*h[0]+h[5]*h[5]+h[4]*h[4]) +
sigma[5]*( h[1]*h[5]+h[3]*h[4]) +
sigma[4]*( h[2]*h[4]);
d1 =
sigma[5]*( h[5]*h[1]+h[4]*h[3]) +
sigma[1]*( h[1]*h[1]+h[3]*h[3]) +
sigma[3]*( h[2]*h[3]);
d2 =
sigma[4]*( h[4]*h[2]) +
sigma[3]*( h[3]*h[2]) +
sigma[2]*( h[2]*h[2]);
double energy = 0.5*(d0+d1+d2)/nktv2p;
return energy;
}
/* ----------------------------------------------------------------------
compute deviatoric barostat force = h*sigma*h^t
-----------------------------------------------------------------------*/
void FixNH::compute_deviatoric()
{
// generate upper-triangular part of h*sigma*h^t
// units of fdev are are PV, e.g. atm*A^3
// [ 0 5 4 ] [ 0 5 4 ] [ 0 5 4 ] [ 0 - - ]
// [ 5 1 3 ] = [ - 1 3 ] [ 5 1 3 ] [ 5 1 - ]
// [ 4 3 2 ] [ - - 2 ] [ 4 3 2 ] [ 4 3 2 ]
double* h = domain->h;
fdev[0] =
h[0]*(sigma[0]*h[0]+sigma[5]*h[5]+sigma[4]*h[4]) +
h[5]*(sigma[5]*h[0]+sigma[1]*h[5]+sigma[3]*h[4]) +
h[4]*(sigma[4]*h[0]+sigma[3]*h[5]+sigma[2]*h[4]);
fdev[1] =
h[1]*( sigma[1]*h[1]+sigma[3]*h[3]) +
h[3]*( sigma[3]*h[1]+sigma[2]*h[3]);
fdev[2] =
h[2]*( sigma[2]*h[2]);
fdev[3] =
h[1]*( sigma[3]*h[2]) +
h[3]*( sigma[2]*h[2]);
fdev[4] =
h[0]*( sigma[4]*h[2]) +
h[5]*( sigma[3]*h[2]) +
h[4]*( sigma[2]*h[2]);
fdev[5] =
h[0]*( sigma[5]*h[1]+sigma[4]*h[3]) +
h[5]*( sigma[1]*h[1]+sigma[3]*h[3]) +
h[4]*( sigma[3]*h[1]+sigma[2]*h[3]);
}
/* ----------------------------------------------------------------------
compute target temperature and kinetic energy
-----------------------------------------------------------------------*/
void FixNH::compute_temp_target()
{
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
t_target = t_start + delta * (t_stop-t_start);
ke_target = tdof * boltz * t_target;
}
/* ----------------------------------------------------------------------
compute hydrostatic target pressure
-----------------------------------------------------------------------*/
void FixNH::compute_press_target()
{
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
p_hydro = 0.0;
for (int i = 0; i < 3; i++)
if (p_flag[i]) {
p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]);
p_hydro += p_target[i];
}
p_hydro /= pdim;
if (pstyle == TRICLINIC)
for (int i = 3; i < 6; i++)
p_target[i] = p_start[i] + delta * (p_stop[i]-p_start[i]);
// if deviatoric, recompute sigma each time p_target changes
if (deviatoric_flag) compute_sigma();
}
/* ----------------------------------------------------------------------
update omega_dot, omega
-----------------------------------------------------------------------*/
void FixNH::nh_omega_dot()
{
double f_omega,volume;
if (dimension == 3) volume = domain->xprd*domain->yprd*domain->zprd;
else volume = domain->xprd*domain->yprd;
if (deviatoric_flag) compute_deviatoric();
mtk_term1 = 0.0;
if (mtk_flag) {
if (pstyle == ISO) {
mtk_term1 = tdof * boltz * t_current;
mtk_term1 /= pdim * atom->natoms;
} else {
double *mvv_current = temperature->vector;
for (int i = 0; i < 3; i++)
if (p_flag[i])
mtk_term1 += mvv_current[i];
mtk_term1 /= pdim * atom->natoms;
}
}
for (int i = 0; i < 3; i++)
if (p_flag[i]) {
f_omega = (p_current[i]-p_hydro)*volume /
(omega_mass[i] * nktv2p) + mtk_term1 / omega_mass[i];
if (deviatoric_flag) f_omega -= fdev[i]/(omega_mass[i] * nktv2p);
omega_dot[i] += f_omega*dthalf;
omega_dot[i] *= pdrag_factor;
}
mtk_term2 = 0.0;
if (mtk_flag) {
for (int i = 0; i < 3; i++)
if (p_flag[i])
mtk_term2 += omega_dot[i];
mtk_term2 /= pdim * atom->natoms;
}
if (pstyle == TRICLINIC) {
for (int i = 3; i < 6; i++) {
if (p_flag[i]) {
f_omega = p_current[i]*volume/(omega_mass[i] * nktv2p);
if (deviatoric_flag)
f_omega -= fdev[i]/(omega_mass[i] * nktv2p);
omega_dot[i] += f_omega*dthalf;
omega_dot[i] *= pdrag_factor;
}
}
}
}
/* ----------------------------------------------------------------------
if any tilt ratios exceed limits, set flip = 1 and compute new tilt values
do not flip in x or y if non-periodic (can tilt but not flip)
this is b/c the box length would be changed (dramatically) by flip
if yz tilt exceeded, adjust C vector by one B vector
if xz tilt exceeded, adjust C vector by one A vector
if xy tilt exceeded, adjust B vector by one A vector
check yz first since it may change xz, then xz check comes after
if any flip occurs, create new box in domain
image_flip() adjusts image flags due to box shape change induced by flip
remap() puts atoms outside the new box back into the new box
perform irregular on atoms in lamda coords to migrate atoms to new procs
important that image_flip comes before remap, since remap may change
image flags to new values, making eqs in doc of Domain:image_flip incorrect
------------------------------------------------------------------------- */
void FixNH::pre_exchange()
{
double xprd = domain->xprd;
double yprd = domain->yprd;
// flip is only triggered when tilt exceeds 0.5 by DELTAFLIP
// this avoids immediate re-flipping due to tilt oscillations
double xtiltmax = (0.5+DELTAFLIP)*xprd;
double ytiltmax = (0.5+DELTAFLIP)*yprd;
int flipxy,flipxz,flipyz;
flipxy = flipxz = flipyz = 0;
if (domain->yperiodic) {
if (domain->yz < -ytiltmax) {
domain->yz += yprd;
domain->xz += domain->xy;
flipyz = 1;
} else if (domain->yz >= ytiltmax) {
domain->yz -= yprd;
domain->xz -= domain->xy;
flipyz = -1;
}
}
if (domain->xperiodic) {
if (domain->xz < -xtiltmax) {
domain->xz += xprd;
flipxz = 1;
} else if (domain->xz >= xtiltmax) {
domain->xz -= xprd;
flipxz = -1;
}
if (domain->xy < -xtiltmax) {
domain->xy += xprd;
flipxy = 1;
} else if (domain->xy >= xtiltmax) {
domain->xy -= xprd;
flipxy = -1;
}
}
int flip = 0;
if (flipxy || flipxz || flipyz) flip = 1;
if (flip) {
domain->set_global_box();
domain->set_local_box();
domain->image_flip(flipxy,flipxz,flipyz);
double **x = atom->x;
imageint *image = atom->image;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]);
domain->x2lamda(atom->nlocal);
irregular->migrate_atoms();
domain->lamda2x(atom->nlocal);
}
}
diff --git a/src/fix_nve.cpp b/src/fix_nve.cpp
index d1431a4e8..8914a18f4 100644
--- a/src/fix_nve.cpp
+++ b/src/fix_nve.cpp
@@ -1,171 +1,172 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "stdio.h"
#include "string.h"
#include "fix_nve.h"
#include "atom.h"
#include "force.h"
#include "update.h"
#include "respa.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixNVE::FixNVE(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (strcmp(style,"nve/sphere") != 0 && narg < 3)
error->all(FLERR,"Illegal fix nve command");
+ dynamic_group_allow = 1;
time_integrate = 1;
}
/* ---------------------------------------------------------------------- */
int FixNVE::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= FINAL_INTEGRATE;
mask |= INITIAL_INTEGRATE_RESPA;
mask |= FINAL_INTEGRATE_RESPA;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixNVE::init()
{
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
if (strstr(update->integrate_style,"respa"))
step_respa = ((Respa *) update->integrate)->step;
}
/* ----------------------------------------------------------------------
allow for both per-type and per-atom mass
------------------------------------------------------------------------- */
void FixNVE::initial_integrate(int vflag)
{
double dtfm;
// update v and x of atoms in group
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
x[i][0] += dtv * v[i][0];
x[i][1] += dtv * v[i][1];
x[i][2] += dtv * v[i][2];
}
}
}
/* ---------------------------------------------------------------------- */
void FixNVE::final_integrate()
{
double dtfm;
// update v of atoms in group
double **v = atom->v;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / rmass[i];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
dtfm = dtf / mass[type[i]];
v[i][0] += dtfm * f[i][0];
v[i][1] += dtfm * f[i][1];
v[i][2] += dtfm * f[i][2];
}
}
}
/* ---------------------------------------------------------------------- */
void FixNVE::initial_integrate_respa(int vflag, int ilevel, int iloop)
{
dtv = step_respa[ilevel];
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
// innermost level - NVE update of v and x
// all other levels - NVE update of v
if (ilevel == 0) initial_integrate(vflag);
else final_integrate();
}
/* ---------------------------------------------------------------------- */
void FixNVE::final_integrate_respa(int ilevel, int iloop)
{
dtf = 0.5 * step_respa[ilevel] * force->ftm2v;
final_integrate();
}
/* ---------------------------------------------------------------------- */
void FixNVE::reset_dt()
{
dtv = update->dt;
dtf = 0.5 * update->dt * force->ftm2v;
}
diff --git a/src/fix_setforce.cpp b/src/fix_setforce.cpp
index 6711e396b..0d504f3b7 100644
--- a/src/fix_setforce.cpp
+++ b/src/fix_setforce.cpp
@@ -1,342 +1,353 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "string.h"
#include "stdlib.h"
#include "fix_setforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
#include "input.h"
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{NONE,CONSTANT,EQUAL,ATOM};
/* ---------------------------------------------------------------------- */
FixSetForce::FixSetForce(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR,"Illegal fix setforce command");
+ dynamic_group_allow = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extvector = 1;
xstr = ystr = zstr = NULL;
if (strstr(arg[3],"v_") == arg[3]) {
int n = strlen(&arg[3][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[3][2]);
} else if (strcmp(arg[3],"NULL") == 0) {
xstyle = NONE;
} else {
xvalue = force->numeric(FLERR,arg[3]);
xstyle = CONSTANT;
}
if (strstr(arg[4],"v_") == arg[4]) {
int n = strlen(&arg[4][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[4][2]);
} else if (strcmp(arg[4],"NULL") == 0) {
ystyle = NONE;
} else {
yvalue = force->numeric(FLERR,arg[4]);
ystyle = CONSTANT;
}
if (strstr(arg[5],"v_") == arg[5]) {
int n = strlen(&arg[5][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[5][2]);
} else if (strcmp(arg[5],"NULL") == 0) {
zstyle = NONE;
} else {
zvalue = force->numeric(FLERR,arg[5]);
zstyle = CONSTANT;
}
// optional args
iregion = -1;
idregion = NULL;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg],"region") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix setforce command");
iregion = domain->find_region(arg[iarg+1]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix setforce does not exist");
int n = strlen(arg[iarg+1]) + 1;
idregion = new char[n];
strcpy(idregion,arg[iarg+1]);
iarg += 2;
} else error->all(FLERR,"Illegal fix setforce command");
}
force_flag = 0;
foriginal[0] = foriginal[1] = foriginal[2] = 0.0;
maxatom = -1;
sforce = NULL;
}
/* ---------------------------------------------------------------------- */
FixSetForce::~FixSetForce()
{
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] idregion;
memory->destroy(sforce);
}
/* ---------------------------------------------------------------------- */
int FixSetForce::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixSetForce::init()
{
// check variables
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0)
error->all(FLERR,"Variable name for fix setforce does not exist");
if (input->variable->equalstyle(xvar)) xstyle = EQUAL;
else if (input->variable->atomstyle(xvar)) xstyle = ATOM;
else error->all(FLERR,"Variable for fix setforce is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0)
error->all(FLERR,"Variable name for fix setforce does not exist");
if (input->variable->equalstyle(yvar)) ystyle = EQUAL;
else if (input->variable->atomstyle(yvar)) ystyle = ATOM;
else error->all(FLERR,"Variable for fix setforce is invalid style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0)
error->all(FLERR,"Variable name for fix setforce does not exist");
if (input->variable->equalstyle(zvar)) zstyle = EQUAL;
else if (input->variable->atomstyle(zvar)) zstyle = ATOM;
else error->all(FLERR,"Variable for fix setforce is invalid style");
}
// set index and check validity of region
if (iregion >= 0) {
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix setforce does not exist");
}
if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM)
varflag = ATOM;
else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL)
varflag = EQUAL;
else varflag = CONSTANT;
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
// cannot use non-zero forces for a minimization since no energy is integrated
// use fix addforce instead
int flag = 0;
if (update->whichflag == 2) {
if (xstyle == EQUAL || xstyle == ATOM) flag = 1;
if (ystyle == EQUAL || ystyle == ATOM) flag = 1;
if (zstyle == EQUAL || zstyle == ATOM) flag = 1;
if (xstyle == CONSTANT && xvalue != 0.0) flag = 1;
if (ystyle == CONSTANT && yvalue != 0.0) flag = 1;
if (zstyle == CONSTANT && zvalue != 0.0) flag = 1;
}
if (flag)
error->all(FLERR,"Cannot use non-zero forces in an energy minimization");
}
/* ---------------------------------------------------------------------- */
void FixSetForce::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else
for (int ilevel = 0; ilevel < nlevels_respa; ilevel++) {
((Respa *) update->integrate)->copy_flevel_f(ilevel);
post_force_respa(vflag,ilevel,0);
((Respa *) update->integrate)->copy_f_flevel(ilevel);
}
}
/* ---------------------------------------------------------------------- */
void FixSetForce::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixSetForce::post_force(int vflag)
{
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
+ // update region if necessary
+
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
// reallocate sforce array if necessary
if (varflag == ATOM && nlocal > maxatom) {
maxatom = atom->nmax;
memory->destroy(sforce);
memory->create(sforce,maxatom,3,"setforce:sforce");
}
foriginal[0] = foriginal[1] = foriginal[2] = 0.0;
force_flag = 0;
if (varflag == CONSTANT) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
if (xstyle) f[i][0] = xvalue;
if (ystyle) f[i][1] = yvalue;
if (zstyle) f[i][2] = zvalue;
}
// variable force, wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
else if (xstyle == ATOM) {
if (sforce) input->variable->compute_atom(xvar,igroup,&sforce[0][0],3,0);
else input->variable->compute_atom(xvar,igroup,NULL,3,0);
}
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
else if (ystyle == ATOM) {
if (sforce) input->variable->compute_atom(yvar,igroup,&sforce[0][1],3,0);
else input->variable->compute_atom(yvar,igroup,NULL,3,0);
}
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
else if (zstyle == ATOM) {
if (sforce) input->variable->compute_atom(zvar,igroup,&sforce[0][2],3,0);
else input->variable->compute_atom(zvar,igroup,NULL,3,0);
}
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
- if (iregion >= 0 &&
- !domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
- continue;
-
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
foriginal[0] += f[i][0];
foriginal[1] += f[i][1];
foriginal[2] += f[i][2];
if (xstyle == ATOM) f[i][0] = sforce[i][0];
else if (xstyle) f[i][0] = xvalue;
if (ystyle == ATOM) f[i][1] = sforce[i][1];
else if (ystyle) f[i][1] = yvalue;
if (zstyle == ATOM) f[i][2] = sforce[i][2];
else if (zstyle) f[i][2] = zvalue;
}
}
}
/* ---------------------------------------------------------------------- */
void FixSetForce::post_force_respa(int vflag, int ilevel, int iloop)
{
// set force to desired value on outermost level, 0.0 on other levels
if (ilevel == nlevels_respa-1) post_force(vflag);
else {
+ Region *region = NULL;
+ if (iregion >= 0) {
+ region = domain->regions[iregion];
+ region->prematch();
+ }
+
+ double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
+ if (region && !region->match(x[i][0],x[i][1],x[i][2])) continue;
if (xstyle) f[i][0] = 0.0;
if (ystyle) f[i][1] = 0.0;
if (zstyle) f[i][2] = 0.0;
}
}
}
/* ---------------------------------------------------------------------- */
void FixSetForce::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
double FixSetForce::compute_vector(int n)
{
// only sum across procs one time
if (force_flag == 0) {
MPI_Allreduce(foriginal,foriginal_all,3,MPI_DOUBLE,MPI_SUM,world);
force_flag = 1;
}
return foriginal_all[n];
}
/* ----------------------------------------------------------------------
memory usage of local atom-based array
------------------------------------------------------------------------- */
double FixSetForce::memory_usage()
{
double bytes = 0.0;
if (varflag == ATOM) bytes = atom->nmax*3 * sizeof(double);
return bytes;
}
diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp
index 315c2a092..de8e894c4 100644
--- a/src/fix_wall_region.cpp
+++ b/src/fix_wall_region.cpp
@@ -1,359 +1,361 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "fix_wall_region.h"
#include "atom.h"
#include "atom_vec.h"
#include "domain.h"
#include "region.h"
#include "force.h"
#include "lattice.h"
#include "update.h"
#include "output.h"
#include "respa.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
enum{LJ93,LJ126,COLLOID,HARMONIC};
/* ---------------------------------------------------------------------- */
FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg != 8) error->all(FLERR,"Illegal fix wall/region command");
scalar_flag = 1;
vector_flag = 1;
size_vector = 3;
global_freq = 1;
extscalar = 1;
extvector = 1;
// parse args
iregion = domain->find_region(arg[3]);
if (iregion == -1)
error->all(FLERR,"Region ID for fix wall/region does not exist");
int n = strlen(arg[3]) + 1;
idregion = new char[n];
strcpy(idregion,arg[3]);
if (strcmp(arg[4],"lj93") == 0) style = LJ93;
else if (strcmp(arg[4],"lj126") == 0) style = LJ126;
else if (strcmp(arg[4],"colloid") == 0) style = COLLOID;
else if (strcmp(arg[4],"harmonic") == 0) style = HARMONIC;
else error->all(FLERR,"Illegal fix wall/region command");
epsilon = force->numeric(FLERR,arg[5]);
sigma = force->numeric(FLERR,arg[6]);
cutoff = force->numeric(FLERR,arg[7]);
if (cutoff <= 0.0) error->all(FLERR,"Fix wall/region cutoff <= 0.0");
eflag = 0;
ewall[0] = ewall[1] = ewall[2] = ewall[3] = 0.0;
}
/* ---------------------------------------------------------------------- */
FixWallRegion::~FixWallRegion()
{
delete [] idregion;
}
/* ---------------------------------------------------------------------- */
int FixWallRegion::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
mask |= MIN_POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::init()
{
// set index and check validity of region
iregion = domain->find_region(idregion);
if (iregion == -1)
error->all(FLERR,"Region ID for fix wall/region does not exist");
// error checks for style COLLOID
// insure all particles in group are extended particles
if (style == COLLOID) {
if (!atom->sphere_flag)
error->all(FLERR,"Fix wall/region colloid requires atom style sphere");
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int flag = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
if (radius[i] == 0.0) flag = 1;
int flagall;
MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world);
if (flagall)
error->all(FLERR,"Fix wall/region colloid requires extended particles");
}
// setup coefficients for each style
if (style == LJ93) {
coeff1 = 6.0/5.0 * epsilon * pow(sigma,9.0);
coeff2 = 3.0 * epsilon * pow(sigma,3.0);
coeff3 = 2.0/15.0 * epsilon * pow(sigma,9.0);
coeff4 = epsilon * pow(sigma,3.0);
double rinv = 1.0/cutoff;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
offset = coeff3*r4inv*r4inv*rinv - coeff4*r2inv*rinv;
} else if (style == LJ126) {
coeff1 = 48.0 * epsilon * pow(sigma,12.0);
coeff2 = 24.0 * epsilon * pow(sigma,6.0);
coeff3 = 4.0 * epsilon * pow(sigma,12.0);
coeff4 = 4.0 * epsilon * pow(sigma,6.0);
double r2inv = 1.0/(cutoff*cutoff);
double r6inv = r2inv*r2inv*r2inv;
offset = r6inv*(coeff3*r6inv - coeff4);
} else if (style == COLLOID) {
coeff1 = -4.0/315.0 * epsilon * pow(sigma,6.0);
coeff2 = -2.0/3.0 * epsilon;
coeff3 = epsilon * pow(sigma,6.0)/7560.0;
coeff4 = epsilon/6.0;
double rinv = 1.0/cutoff;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
offset = coeff3*r4inv*r4inv*rinv - coeff4*r2inv*rinv;
}
if (strstr(update->integrate_style,"respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::setup(int vflag)
{
if (strstr(update->integrate_style,"verlet"))
post_force(vflag);
else {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::min_setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::post_force(int vflag)
{
int i,m,n;
double rinv,fx,fy,fz,tooclose;
eflag = 0;
ewall[0] = ewall[1] = ewall[2] = ewall[3] = 0.0;
double **x = atom->x;
double **f = atom->f;
double *radius = atom->radius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
Region *region = domain->regions[iregion];
+ region->prematch();
+
int onflag = 0;
// region->match() insures particle is in region or on surface, else error
// if returned contact dist r = 0, is on surface, also an error
// in COLLOID case, r <= radius is an error
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (!region->match(x[i][0],x[i][1],x[i][2])) {
onflag = 1;
continue;
}
if (style == COLLOID) tooclose = radius[i];
else tooclose = 0.0;
n = region->surface(x[i][0],x[i][1],x[i][2],cutoff);
for (m = 0; m < n; m++) {
if (region->contact[m].r <= tooclose) {
onflag = 1;
continue;
} else rinv = 1.0/region->contact[m].r;
if (style == LJ93) lj93(region->contact[m].r);
else if (style == LJ126) lj126(region->contact[m].r);
else if (style == COLLOID) colloid(region->contact[m].r,radius[i]);
else harmonic(region->contact[m].r);
ewall[0] += eng;
fx = fwall * region->contact[m].delx * rinv;
fy = fwall * region->contact[m].dely * rinv;
fz = fwall * region->contact[m].delz * rinv;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
ewall[1] -= fx;
ewall[2] -= fy;
ewall[3] -= fz;
}
}
if (onflag) error->one(FLERR,"Particle on or inside surface of region "
"used in fix wall/region");
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixWallRegion::min_post_force(int vflag)
{
post_force(vflag);
}
/* ----------------------------------------------------------------------
energy of wall interaction
------------------------------------------------------------------------- */
double FixWallRegion::compute_scalar()
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,4,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return ewall_all[0];
}
/* ----------------------------------------------------------------------
components of force on wall
------------------------------------------------------------------------- */
double FixWallRegion::compute_vector(int n)
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(ewall,ewall_all,4,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return ewall_all[n+1];
}
/* ----------------------------------------------------------------------
LJ 9/3 interaction for particle with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::lj93(double r)
{
double rinv = 1.0/r;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
double r10inv = r4inv*r4inv*r2inv;
fwall = coeff1*r10inv - coeff2*r4inv;
eng = coeff3*r4inv*r4inv*rinv - coeff4*r2inv*rinv - offset;
}
/* ----------------------------------------------------------------------
LJ 12/6 interaction for particle with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::lj126(double r)
{
double rinv = 1.0/r;
double r2inv = rinv*rinv;
double r6inv = r2inv*r2inv*r2inv;
fwall = r6inv*(coeff1*r6inv - coeff2) * rinv;
eng = r6inv*(coeff3*r6inv - coeff4) - offset;
}
/* ----------------------------------------------------------------------
colloid interaction for finite-size particle of rad with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::colloid(double r, double rad)
{
double new_coeff2 = coeff2*rad*rad*rad;
double diam = 2.0*rad;
double rad2 = rad*rad;
double rad4 = rad2*rad2;
double rad8 = rad4*rad4;
double delta2 = rad2 - r*r;
double rinv = 1.0/delta2;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
double r8inv = r4inv*r4inv;
fwall = coeff1*(rad8*rad + 27.0*rad4*rad2*rad*pow(r,2.0)
+ 63.0*rad4*rad*pow(r,4.0)
+ 21.0*rad2*rad*pow(r,6.0))*r8inv - new_coeff2*r2inv;
double r2 = 0.5*diam - r;
double rinv2 = 1.0/r2;
double r2inv2 = rinv2*rinv2;
double r4inv2 = r2inv2*r2inv2;
double r3 = r + 0.5*diam;
double rinv3 = 1.0/r3;
double r2inv3 = rinv3*rinv3;
double r4inv3 = r2inv3*r2inv3;
eng = coeff3*((-3.5*diam+r)*r4inv2*r2inv2*rinv2
+ (3.5*diam+r)*r4inv3*r2inv3*rinv3) -
coeff4*((-diam*r+r2*r3*(log(-r2)-log(r3)))*
(-rinv2)*rinv3) - offset;
}
/* ----------------------------------------------------------------------
harmonic interaction for particle with wall
compute eng and fwall = magnitude of wall force
------------------------------------------------------------------------- */
void FixWallRegion::harmonic(double r)
{
double dr = cutoff - r;
fwall = 2.0*epsilon*dr;
eng = epsilon*dr*dr;
}
diff --git a/src/group.cpp b/src/group.cpp
index 3b494a0b4..080b5c23a 100644
--- a/src/group.cpp
+++ b/src/group.cpp
@@ -1,1573 +1,1586 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "mpi.h"
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "group.h"
#include "domain.h"
#include "atom.h"
#include "force.h"
#include "region.h"
#include "modify.h"
#include "fix.h"
#include "compute.h"
#include "output.h"
#include "input.h"
#include "variable.h"
#include "dump.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
#define MAX_GROUP 32
enum{TYPE,MOLECULE,ID};
enum{LT,LE,GT,GE,EQ,NEQ,BETWEEN};
#define BIG 1.0e20
/* ----------------------------------------------------------------------
initialize group memory
------------------------------------------------------------------------- */
Group::Group(LAMMPS *lmp) : Pointers(lmp)
{
MPI_Comm_rank(world,&me);
names = new char*[MAX_GROUP];
bitmask = new int[MAX_GROUP];
inversemask = new int[MAX_GROUP];
dynamic = new int[MAX_GROUP];
for (int i = 0; i < MAX_GROUP; i++) names[i] = NULL;
for (int i = 0; i < MAX_GROUP; i++) bitmask[i] = 1 << i;
for (int i = 0; i < MAX_GROUP; i++) inversemask[i] = bitmask[i] ^ ~0;
for (int i = 0; i < MAX_GROUP; i++) dynamic[i] = 0;
// create "all" group
char *str = (char *) "all";
int n = strlen(str) + 1;
names[0] = new char[n];
strcpy(names[0],str);
ngroup = 1;
}
/* ----------------------------------------------------------------------
free all memory
------------------------------------------------------------------------- */
Group::~Group()
{
for (int i = 0; i < MAX_GROUP; i++) delete [] names[i];
delete [] names;
delete [] bitmask;
delete [] inversemask;
delete [] dynamic;
}
/* ----------------------------------------------------------------------
assign atoms to a new or existing group
------------------------------------------------------------------------- */
void Group::assign(int narg, char **arg)
{
int i;
if (domain->box_exist == 0)
error->all(FLERR,"Group command before simulation box is defined");
if (narg < 2) error->all(FLERR,"Illegal group command");
// delete the group if not being used elsewhere
// clear mask of each atom assigned to this group
if (strcmp(arg[1],"delete") == 0) {
int igroup = find(arg[0]);
if (igroup == -1) error->all(FLERR,"Could not find group delete group ID");
if (igroup == 0) error->all(FLERR,"Cannot delete group all");
for (i = 0; i < modify->nfix; i++)
if (modify->fix[i]->igroup == igroup)
error->all(FLERR,"Cannot delete group currently used by a fix");
for (i = 0; i < modify->ncompute; i++)
if (modify->compute[i]->igroup == igroup)
error->all(FLERR,"Cannot delete group currently used by a compute");
for (i = 0; i < output->ndump; i++)
if (output->dump[i]->igroup == igroup)
error->all(FLERR,"Cannot delete group currently used by a dump");
if (atom->firstgroupname && strcmp(arg[0],atom->firstgroupname) == 0)
error->all(FLERR,
"Cannot delete group currently used by atom_modify first");
int *mask = atom->mask;
int nlocal = atom->nlocal;
int bits = inversemask[igroup];
for (i = 0; i < nlocal; i++) mask[i] &= bits;
if (dynamic[igroup]) {
int n = strlen("GROUP_") + strlen(names[igroup]) + 1;
char *fixID = new char[n];
sprintf(fixID,"GROUP_%s",names[igroup]);
modify->delete_fix(fixID);
delete [] fixID;
}
delete [] names[igroup];
names[igroup] = NULL;
dynamic[igroup] = 0;
ngroup--;
return;
}
// find group in existing list
// add a new group if igroup = -1
int igroup = find(arg[0]);
if (igroup == -1) {
if (ngroup == MAX_GROUP) error->all(FLERR,"Too many groups");
igroup = find_unused();
int n = strlen(arg[0]) + 1;
names[igroup] = new char[n];
strcpy(names[igroup],arg[0]);
ngroup++;
}
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int bit = bitmask[igroup];
// style = region
// add to group if atom is in region
if (strcmp(arg[1],"region") == 0) {
if (narg != 3) error->all(FLERR,"Illegal group command");
int iregion = domain->find_region(arg[2]);
if (iregion == -1) error->all(FLERR,"Group region ID does not exist");
domain->regions[iregion]->init();
+ domain->regions[iregion]->prematch();
for (i = 0; i < nlocal; i++)
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
mask[i] |= bit;
// style = type, molecule, id
// add to group if atom matches type/molecule/id or condition
} else if (strcmp(arg[1],"type") == 0 || strcmp(arg[1],"molecule") == 0 ||
strcmp(arg[1],"id") == 0) {
if (narg < 3) error->all(FLERR,"Illegal group command");
int category;
if (strcmp(arg[1],"type") == 0) category = TYPE;
else if (strcmp(arg[1],"molecule") == 0) category = MOLECULE;
else if (strcmp(arg[1],"id") == 0) category = ID;
// args = logical condition
if (narg > 3 &&
(strcmp(arg[2],"<") == 0 || strcmp(arg[2],">") == 0 ||
strcmp(arg[2],"<=") == 0 || strcmp(arg[2],">=") == 0 ||
strcmp(arg[2],"<>") == 0)) {
int condition = -1;
if (strcmp(arg[2],"<") == 0) condition = LT;
else if (strcmp(arg[2],"<=") == 0) condition = LE;
else if (strcmp(arg[2],">") == 0) condition = GT;
else if (strcmp(arg[2],">=") == 0) condition = GE;
else if (strcmp(arg[2],"==") == 0) condition = EQ;
else if (strcmp(arg[2],"!=") == 0) condition = NEQ;
else if (strcmp(arg[2],"<>") == 0) condition = BETWEEN;
else error->all(FLERR,"Illegal group command");
tagint bound1,bound2;
bound1 = force->tnumeric(FLERR,arg[3]);
bound2 = -1;
if (condition == BETWEEN) {
if (narg != 5) error->all(FLERR,"Illegal group command");
bound2 = force->tnumeric(FLERR,arg[4]);
} else if (narg != 4) error->all(FLERR,"Illegal group command");
int *attribute = NULL;
tagint *tattribute = NULL;
if (category == TYPE) attribute = atom->type;
else if (category == MOLECULE) tattribute = atom->molecule;
else if (category == ID) tattribute = atom->tag;
// add to group if meets condition
if (attribute) {
if (condition == LT) {
for (i = 0; i < nlocal; i++)
if (attribute[i] < bound1) mask[i] |= bit;
} else if (condition == LE) {
for (i = 0; i < nlocal; i++)
if (attribute[i] <= bound1) mask[i] |= bit;
} else if (condition == GT) {
for (i = 0; i < nlocal; i++)
if (attribute[i] > bound1) mask[i] |= bit;
} else if (condition == GE) {
for (i = 0; i < nlocal; i++)
if (attribute[i] >= bound1) mask[i] |= bit;
} else if (condition == EQ) {
for (i = 0; i < nlocal; i++)
if (attribute[i] == bound1) mask[i] |= bit;
} else if (condition == NEQ) {
for (i = 0; i < nlocal; i++)
if (attribute[i] != bound1) mask[i] |= bit;
} else if (condition == BETWEEN) {
for (i = 0; i < nlocal; i++)
if (attribute[i] >= bound1 && attribute[i] <= bound2)
mask[i] |= bit;
}
} else {
if (condition == LT) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] < bound1) mask[i] |= bit;
} else if (condition == LE) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] <= bound1) mask[i] |= bit;
} else if (condition == GT) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] > bound1) mask[i] |= bit;
} else if (condition == GE) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] >= bound1) mask[i] |= bit;
} else if (condition == EQ) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] == bound1) mask[i] |= bit;
} else if (condition == NEQ) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] != bound1) mask[i] |= bit;
} else if (condition == BETWEEN) {
for (i = 0; i < nlocal; i++)
if (tattribute[i] >= bound1 && tattribute[i] <= bound2)
mask[i] |= bit;
}
}
// args = list of values
} else {
int *attribute = NULL;
tagint *tattribute = NULL;
if (category == TYPE) attribute = atom->type;
else if (category == MOLECULE) tattribute = atom->molecule;
else if (category == ID) tattribute = atom->tag;
char *ptr;
tagint start,stop,delta;
for (int iarg = 2; iarg < narg; iarg++) {
if (strchr(arg[iarg],':')) {
ptr = strtok(arg[iarg],":");
start = force->tnumeric(FLERR,ptr);
ptr = strtok(NULL,":");
stop = force->tnumeric(FLERR,ptr);
ptr = strtok(NULL,":");
if (ptr) delta = force->tnumeric(FLERR,ptr);
else delta = 1;
} else {
start = stop = force->tnumeric(FLERR,arg[iarg]);
delta = 1;
}
// add to group if attribute matches value or sequence
if (attribute) {
for (i = 0; i < nlocal; i++)
if (attribute[i] >= start && attribute[i] <= stop &&
(attribute[i]-start) % delta == 0) mask[i] |= bit;
} else {
for (i = 0; i < nlocal; i++)
if (tattribute[i] >= start && tattribute[i] <= stop &&
(tattribute[i]-start) % delta == 0) mask[i] |= bit;
}
}
}
// style = variable
// add to group if atom-atyle variable is non-zero
} else if (strcmp(arg[1],"variable") == 0) {
int ivar = input->variable->find(arg[2]);
if (ivar < 0) error->all(FLERR,"Variable name for group does not exist");
if (!input->variable->atomstyle(ivar))
error->all(FLERR,"Variable for group is invalid style");
double *aflag;
// aflag = evaluation of per-atom variable
memory->create(aflag,nlocal,"group:aflag");
input->variable->compute_atom(ivar,0,aflag,1,0);
// add to group if per-atom variable evaluated to non-zero
for (i = 0; i < nlocal; i++)
if (aflag[i] != 0.0) mask[i] |= bit;
memory->destroy(aflag);
// style = subtract
} else if (strcmp(arg[1],"subtract") == 0) {
if (narg < 4) error->all(FLERR,"Illegal group command");
int length = narg-2;
int *list = new int[length];
int jgroup;
for (int iarg = 2; iarg < narg; iarg++) {
jgroup = find(arg[iarg]);
if (jgroup == -1) error->all(FLERR,"Group ID does not exist");
if (dynamic[jgroup])
error->all(FLERR,"Cannot subtract groups using a dynamic group");
list[iarg-2] = jgroup;
}
// add to group if in 1st group in list
int otherbit = bitmask[list[0]];
for (i = 0; i < nlocal; i++)
if (mask[i] & otherbit) mask[i] |= bit;
// remove atoms if they are in any of the other groups
// AND with inverse mask removes the atom from group
int inverse = inversemask[igroup];
for (int ilist = 1; ilist < length; ilist++) {
otherbit = bitmask[list[ilist]];
for (i = 0; i < nlocal; i++)
if (mask[i] & otherbit) mask[i] &= inverse;
}
delete [] list;
// style = union
} else if (strcmp(arg[1],"union") == 0) {
if (narg < 3) error->all(FLERR,"Illegal group command");
int length = narg-2;
int *list = new int[length];
int jgroup;
for (int iarg = 2; iarg < narg; iarg++) {
jgroup = find(arg[iarg]);
if (jgroup == -1) error->all(FLERR,"Group ID does not exist");
if (dynamic[jgroup])
error->all(FLERR,"Cannot union groups using a dynamic group");
list[iarg-2] = jgroup;
}
// add to group if in any other group in list
int otherbit;
for (int ilist = 0; ilist < length; ilist++) {
otherbit = bitmask[list[ilist]];
for (i = 0; i < nlocal; i++)
if (mask[i] & otherbit) mask[i] |= bit;
}
delete [] list;
// style = intersect
} else if (strcmp(arg[1],"intersect") == 0) {
if (narg < 4) error->all(FLERR,"Illegal group command");
int length = narg-2;
int *list = new int[length];
int jgroup;
for (int iarg = 2; iarg < narg; iarg++) {
jgroup = find(arg[iarg]);
if (jgroup == -1) error->all(FLERR,"Group ID does not exist");
if (dynamic[jgroup])
error->all(FLERR,"Cannot intersect groups using a dynamic group");
list[iarg-2] = jgroup;
}
// add to group if in all groups in list
int otherbit,ok,ilist;
for (i = 0; i < nlocal; i++) {
ok = 1;
for (ilist = 0; ilist < length; ilist++) {
otherbit = bitmask[list[ilist]];
if ((mask[i] & otherbit) == 0) ok = 0;
}
if (ok) mask[i] |= bit;
}
delete [] list;
// style = dynamic
// create a new FixGroup to dynamically determine atoms in group
} else if (strcmp(arg[1],"dynamic") == 0) {
if (narg < 4) error->all(FLERR,"Illegal group command");
if (strcmp(arg[0],arg[2]) == 0)
error->all(FLERR,"Group dynamic cannot reference itself");
if (find(arg[2]) < 0)
error->all(FLERR,"Group dynamic parent group does not exist");
if (igroup == 0) error->all(FLERR,"Group all cannot be made dynamic");
// if group is already dynamic, delete existing FixGroup
if (dynamic[igroup]) {
int n = strlen("GROUP_") + strlen(names[igroup]) + 1;
char *fixID = new char[n];
sprintf(fixID,"GROUP_%s",names[igroup]);
modify->delete_fix(fixID);
delete [] fixID;
}
dynamic[igroup] = 1;
int n = strlen("GROUP_") + strlen(names[igroup]) + 1;
char *fixID = new char[n];
sprintf(fixID,"GROUP_%s",names[igroup]);
char **newarg = new char*[narg];
newarg[0] = fixID;
newarg[1] = arg[2];
newarg[2] = (char *) "GROUP";
for (int i = 3; i < narg; i++) newarg[i] = arg[i];
modify->add_fix(narg,newarg);
delete [] newarg;
delete [] fixID;
// style = static
// remove dynamic FixGroup if necessary
} else if (strcmp(arg[1],"static") == 0) {
if (narg != 2) error->all(FLERR,"Illegal group command");
if (dynamic[igroup]) {
int n = strlen("GROUP_") + strlen(names[igroup]) + 1;
char *fixID = new char[n];
sprintf(fixID,"GROUP_%s",names[igroup]);
modify->delete_fix(fixID);
delete [] fixID;
}
dynamic[igroup] = 0;
// not a valid group style
} else error->all(FLERR,"Illegal group command");
// print stats for changed group
int n;
n = 0;
for (i = 0; i < nlocal; i++) if (mask[i] & bit) n++;
double rlocal = n;
double all;
MPI_Allreduce(&rlocal,&all,1,MPI_DOUBLE,MPI_SUM,world);
if (me == 0) {
if (dynamic[igroup]) {
- if (screen) fprintf(screen,"dynamic group %s\n",names[igroup]);
- if (logfile) fprintf(logfile,"dynamic group %s\n",names[igroup]);
+ if (screen) fprintf(screen,"dynamic group %s defined\n",names[igroup]);
+ if (logfile) fprintf(logfile,"dynamic group %s defined\n",names[igroup]);
} else {
if (screen)
fprintf(screen,"%.15g atoms in group %s\n",all,names[igroup]);
if (logfile)
fprintf(logfile,"%.15g atoms in group %s\n",all,names[igroup]);
}
}
}
/* ----------------------------------------------------------------------
add flagged atoms to a new or existing group
------------------------------------------------------------------------- */
void Group::create(char *name, int *flag)
{
int i;
// find group in existing list
// add a new group if igroup = -1
int igroup = find(name);
if (igroup == -1) {
if (ngroup == MAX_GROUP) error->all(FLERR,"Too many groups");
igroup = find_unused();
int n = strlen(name) + 1;
names[igroup] = new char[n];
strcpy(names[igroup],name);
ngroup++;
}
// add atoms to group whose flags are set
int *mask = atom->mask;
int nlocal = atom->nlocal;
int bit = bitmask[igroup];
for (i = 0; i < nlocal; i++)
if (flag[i]) mask[i] |= bit;
}
/* ----------------------------------------------------------------------
return group index if name matches existing group, -1 if no such group
------------------------------------------------------------------------- */
int Group::find(const char *name)
{
for (int igroup = 0; igroup < MAX_GROUP; igroup++)
if (names[igroup] && strcmp(name,names[igroup]) == 0) return igroup;
return -1;
}
/* ----------------------------------------------------------------------
return index of first available group
should never be called when group limit has been reached
------------------------------------------------------------------------- */
int Group::find_unused()
{
for (int igroup = 0; igroup < MAX_GROUP; igroup++)
if (names[igroup] == NULL) return igroup;
return -1;
}
/* ----------------------------------------------------------------------
write group info to a restart file
only called by proc 0
------------------------------------------------------------------------- */
void Group::write_restart(FILE *fp)
{
fwrite(&ngroup,sizeof(int),1,fp);
// use count to not change restart format with deleted groups
// remove this on next major release
int n;
int count = 0;
for (int i = 0; i < MAX_GROUP; i++) {
if (names[i]) n = strlen(names[i]) + 1;
else n = 0;
fwrite(&n,sizeof(int),1,fp);
if (n) {
fwrite(names[i],sizeof(char),n,fp);
count++;
}
if (count == ngroup) break;
}
}
/* ----------------------------------------------------------------------
read group info from a restart file
proc 0 reads, bcast to all procs
------------------------------------------------------------------------- */
void Group::read_restart(FILE *fp)
{
int i,n;
// delete existing group names
// atom masks will be overwritten by reading of restart file
for (i = 0; i < MAX_GROUP; i++) delete [] names[i];
if (me == 0) fread(&ngroup,sizeof(int),1,fp);
MPI_Bcast(&ngroup,1,MPI_INT,0,world);
// use count to not change restart format with deleted groups
// remove this on next major release
int count = 0;
for (i = 0; i < MAX_GROUP; i++) {
if (count == ngroup) {
names[i] = NULL;
continue;
}
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
if (n) {
names[i] = new char[n];
if (me == 0) fread(names[i],sizeof(char),n,fp);
MPI_Bcast(names[i],n,MPI_CHAR,0,world);
count++;
} else names[i] = NULL;
}
}
// ----------------------------------------------------------------------
// computations on a group of atoms
// ----------------------------------------------------------------------
/* ----------------------------------------------------------------------
count atoms in group
------------------------------------------------------------------------- */
bigint Group::count(int igroup)
{
int groupbit = bitmask[igroup];
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) n++;
bigint nsingle = n;
bigint nall;
MPI_Allreduce(&nsingle,&nall,1,MPI_LMP_BIGINT,MPI_SUM,world);
return nall;
}
/* ----------------------------------------------------------------------
count atoms in group and region
------------------------------------------------------------------------- */
bigint Group::count(int igroup, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = 0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) n++;
bigint nsingle = n;
bigint nall;
MPI_Allreduce(&nsingle,&nall,1,MPI_LMP_BIGINT,MPI_SUM,world);
return nall;
}
/* ----------------------------------------------------------------------
compute the total mass of group of atoms
use either per-type mass or per-atom rmass
------------------------------------------------------------------------- */
double Group::mass(int igroup)
{
int groupbit = bitmask[igroup];
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
double one = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) one += rmass[i];
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) one += mass[type[i]];
}
double all;
MPI_Allreduce(&one,&all,1,MPI_DOUBLE,MPI_SUM,world);
return all;
}
/* ----------------------------------------------------------------------
compute the total mass of group of atoms in region
use either per-type mass or per-atom rmass
------------------------------------------------------------------------- */
double Group::mass(int igroup, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double *mass = atom->mass;
double *rmass = atom->rmass;
int *mask = atom->mask;
int *type = atom->type;
int nlocal = atom->nlocal;
double one = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
one += rmass[i];
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
one += mass[type[i]];
}
double all;
MPI_Allreduce(&one,&all,1,MPI_DOUBLE,MPI_SUM,world);
return all;
}
/* ----------------------------------------------------------------------
compute the total charge of group of atoms
------------------------------------------------------------------------- */
double Group::charge(int igroup)
{
int groupbit = bitmask[igroup];
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double qone = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) qone += q[i];
double qall;
MPI_Allreduce(&qone,&qall,1,MPI_DOUBLE,MPI_SUM,world);
return qall;
}
/* ----------------------------------------------------------------------
compute the total charge of group of atoms in region
------------------------------------------------------------------------- */
double Group::charge(int igroup, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double *q = atom->q;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double qone = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
qone += q[i];
double qall;
MPI_Allreduce(&qone,&qall,1,MPI_DOUBLE,MPI_SUM,world);
return qall;
}
/* ----------------------------------------------------------------------
compute the coordinate bounds of the group of atoms
periodic images are not considered, so atoms are NOT unwrapped
------------------------------------------------------------------------- */
void Group::bounds(int igroup, double *minmax)
{
int groupbit = bitmask[igroup];
double extent[6];
extent[0] = extent[2] = extent[4] = BIG;
extent[1] = extent[3] = extent[5] = -BIG;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
extent[0] = MIN(extent[0],x[i][0]);
extent[1] = MAX(extent[1],x[i][0]);
extent[2] = MIN(extent[2],x[i][1]);
extent[3] = MAX(extent[3],x[i][1]);
extent[4] = MIN(extent[4],x[i][2]);
extent[5] = MAX(extent[5],x[i][2]);
}
}
// compute extent across all procs
// flip sign of MIN to do it in one Allreduce MAX
// set box by extent in shrink-wrapped dims
extent[0] = -extent[0];
extent[2] = -extent[2];
extent[4] = -extent[4];
MPI_Allreduce(extent,minmax,6,MPI_DOUBLE,MPI_MAX,world);
minmax[0] = -minmax[0];
minmax[2] = -minmax[2];
minmax[4] = -minmax[4];
}
/* ----------------------------------------------------------------------
compute the coordinate bounds of the group of atoms in region
periodic images are not considered, so atoms are NOT unwrapped
------------------------------------------------------------------------- */
void Group::bounds(int igroup, double *minmax, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double extent[6];
extent[0] = extent[2] = extent[4] = BIG;
extent[1] = extent[3] = extent[5] = -BIG;
double **x = atom->x;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
extent[0] = MIN(extent[0],x[i][0]);
extent[1] = MAX(extent[1],x[i][0]);
extent[2] = MIN(extent[2],x[i][1]);
extent[3] = MAX(extent[3],x[i][1]);
extent[4] = MIN(extent[4],x[i][2]);
extent[5] = MAX(extent[5],x[i][2]);
}
}
// compute extent across all procs
// flip sign of MIN to do it in one Allreduce MAX
// set box by extent in shrink-wrapped dims
extent[0] = -extent[0];
extent[2] = -extent[2];
extent[4] = -extent[4];
MPI_Allreduce(extent,minmax,6,MPI_DOUBLE,MPI_MAX,world);
minmax[0] = -minmax[0];
minmax[2] = -minmax[2];
minmax[4] = -minmax[4];
}
/* ----------------------------------------------------------------------
compute the center-of-mass coords of group of atoms
masstotal = total mass
return center-of-mass coords in cm[]
must unwrap atoms to compute center-of-mass correctly
------------------------------------------------------------------------- */
void Group::xcm(int igroup, double masstotal, double *cm)
{
int groupbit = bitmask[igroup];
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double cmone[3];
cmone[0] = cmone[1] = cmone[2] = 0.0;
double massone;
double unwrap[3];
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
domain->unmap(x[i],image[i],unwrap);
cmone[0] += unwrap[0] * massone;
cmone[1] += unwrap[1] * massone;
cmone[2] += unwrap[2] * massone;
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
cmone[0] += unwrap[0] * massone;
cmone[1] += unwrap[1] * massone;
cmone[2] += unwrap[2] * massone;
}
}
MPI_Allreduce(cmone,cm,3,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) {
cm[0] /= masstotal;
cm[1] /= masstotal;
cm[2] /= masstotal;
}
}
/* ----------------------------------------------------------------------
compute the center-of-mass coords of group of atoms in region
mastotal = total mass
return center-of-mass coords in cm[]
must unwrap atoms to compute center-of-mass correctly
------------------------------------------------------------------------- */
void Group::xcm(int igroup, double masstotal, double *cm, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double cmone[3];
cmone[0] = cmone[1] = cmone[2] = 0.0;
double massone;
double unwrap[3];
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
massone = rmass[i];
domain->unmap(x[i],image[i],unwrap);
cmone[0] += unwrap[0] * massone;
cmone[1] += unwrap[1] * massone;
cmone[2] += unwrap[2] * massone;
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
massone = mass[type[i]];
domain->unmap(x[i],image[i],unwrap);
cmone[0] += unwrap[0] * massone;
cmone[1] += unwrap[1] * massone;
cmone[2] += unwrap[2] * massone;
}
}
MPI_Allreduce(cmone,cm,3,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) {
cm[0] /= masstotal;
cm[1] /= masstotal;
cm[2] /= masstotal;
}
}
/* ----------------------------------------------------------------------
compute the center-of-mass velocity of group of atoms
masstotal = total mass
return center-of-mass velocity in cm[]
------------------------------------------------------------------------- */
void Group::vcm(int igroup, double masstotal, double *cm)
{
int groupbit = bitmask[igroup];
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double p[3],massone;
p[0] = p[1] = p[2] = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = rmass[i];
p[0] += v[i][0]*massone;
p[1] += v[i][1]*massone;
p[2] += v[i][2]*massone;
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
massone = mass[type[i]];
p[0] += v[i][0]*massone;
p[1] += v[i][1]*massone;
p[2] += v[i][2]*massone;
}
}
MPI_Allreduce(p,cm,3,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) {
cm[0] /= masstotal;
cm[1] /= masstotal;
cm[2] /= masstotal;
}
}
/* ----------------------------------------------------------------------
compute the center-of-mass velocity of group of atoms in region
masstotal = total mass
return center-of-mass velocity in cm[]
------------------------------------------------------------------------- */
void Group::vcm(int igroup, double masstotal, double *cm, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double p[3],massone;
p[0] = p[1] = p[2] = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
massone = rmass[i];
p[0] += v[i][0]*massone;
p[1] += v[i][1]*massone;
p[2] += v[i][2]*massone;
}
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
massone = mass[type[i]];
p[0] += v[i][0]*massone;
p[1] += v[i][1]*massone;
p[2] += v[i][2]*massone;
}
}
MPI_Allreduce(p,cm,3,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) {
cm[0] /= masstotal;
cm[1] /= masstotal;
cm[2] /= masstotal;
}
}
/* ----------------------------------------------------------------------
compute the total force on group of atoms
------------------------------------------------------------------------- */
void Group::fcm(int igroup, double *cm)
{
int groupbit = bitmask[igroup];
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double flocal[3];
flocal[0] = flocal[1] = flocal[2] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
flocal[0] += f[i][0];
flocal[1] += f[i][1];
flocal[2] += f[i][2];
}
MPI_Allreduce(flocal,cm,3,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute the total force on group of atoms in region
------------------------------------------------------------------------- */
void Group::fcm(int igroup, double *cm, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double flocal[3];
flocal[0] = flocal[1] = flocal[2] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
flocal[0] += f[i][0];
flocal[1] += f[i][1];
flocal[2] += f[i][2];
}
MPI_Allreduce(flocal,cm,3,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute the total kinetic energy of group of atoms and return it
------------------------------------------------------------------------- */
double Group::ke(int igroup)
{
int groupbit = bitmask[igroup];
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double one = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
one += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
rmass[i];
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit)
one += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
}
double all;
MPI_Allreduce(&one,&all,1,MPI_DOUBLE,MPI_SUM,world);
all *= 0.5 * force->mvv2e;
return all;
}
/* ----------------------------------------------------------------------
compute the total kinetic energy of group of atoms in region and return it
------------------------------------------------------------------------- */
double Group::ke(int igroup, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double one = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
one += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
rmass[i];
} else {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2]))
one += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) *
mass[type[i]];
}
double all;
MPI_Allreduce(&one,&all,1,MPI_DOUBLE,MPI_SUM,world);
all *= 0.5 * force->mvv2e;
return all;
}
/* ----------------------------------------------------------------------
compute the radius-of-gyration of group of atoms
around center-of-mass cm
must unwrap atoms to compute Rg correctly
------------------------------------------------------------------------- */
double Group::gyration(int igroup, double masstotal, double *cm)
{
int groupbit = bitmask[igroup];
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double dx,dy,dz,massone;
double unwrap[3];
double rg = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
rg += (dx*dx + dy*dy + dz*dz) * massone;
}
double rg_all;
MPI_Allreduce(&rg,&rg_all,1,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) return sqrt(rg_all/masstotal);
return 0.0;
}
/* ----------------------------------------------------------------------
compute the radius-of-gyration of group of atoms in region
around center-of-mass cm
must unwrap atoms to compute Rg correctly
------------------------------------------------------------------------- */
double Group::gyration(int igroup, double masstotal, double *cm, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double dx,dy,dz,massone;
double unwrap[3];
double rg = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
rg += (dx*dx + dy*dy + dz*dz) * massone;
}
double rg_all;
MPI_Allreduce(&rg,&rg_all,1,MPI_DOUBLE,MPI_SUM,world);
if (masstotal > 0.0) return sqrt(rg_all/masstotal);
return 0.0;
}
/* ----------------------------------------------------------------------
compute the angular momentum L (lmom) of group
around center-of-mass cm
must unwrap atoms to compute L correctly
------------------------------------------------------------------------- */
void Group::angmom(int igroup, double *cm, double *lmom)
{
int groupbit = bitmask[igroup];
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double dx,dy,dz,massone;
double unwrap[3];
double p[3];
p[0] = p[1] = p[2] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
p[0] += massone * (dy*v[i][2] - dz*v[i][1]);
p[1] += massone * (dz*v[i][0] - dx*v[i][2]);
p[2] += massone * (dx*v[i][1] - dy*v[i][0]);
}
MPI_Allreduce(p,lmom,3,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute the angular momentum L (lmom) of group of atoms in region
around center-of-mass cm
must unwrap atoms to compute L correctly
------------------------------------------------------------------------- */
void Group::angmom(int igroup, double *cm, double *lmom, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double dx,dy,dz,massone;
double unwrap[3];
double p[3];
p[0] = p[1] = p[2] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
p[0] += massone * (dy*v[i][2] - dz*v[i][1]);
p[1] += massone * (dz*v[i][0] - dx*v[i][2]);
p[2] += massone * (dx*v[i][1] - dy*v[i][0]);
}
MPI_Allreduce(p,lmom,3,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute the torque T (tq) on group
around center-of-mass cm
must unwrap atoms to compute T correctly
------------------------------------------------------------------------- */
void Group::torque(int igroup, double *cm, double *tq)
{
int groupbit = bitmask[igroup];
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double dx,dy,dz;
double unwrap[3];
double tlocal[3];
tlocal[0] = tlocal[1] = tlocal[2] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
tlocal[0] += dy*f[i][2] - dz*f[i][1];
tlocal[1] += dz*f[i][0] - dx*f[i][2];
tlocal[2] += dx*f[i][1] - dy*f[i][0];
}
MPI_Allreduce(tlocal,tq,3,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute the torque T (tq) on group of atoms in region
around center-of-mass cm
must unwrap atoms to compute T correctly
------------------------------------------------------------------------- */
void Group::torque(int igroup, double *cm, double *tq, int iregion)
{
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
double **f = atom->f;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double dx,dy,dz;
double unwrap[3];
double tlocal[3];
tlocal[0] = tlocal[1] = tlocal[2] = 0.0;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
tlocal[0] += dy*f[i][2] - dz*f[i][1];
tlocal[1] += dz*f[i][0] - dx*f[i][2];
tlocal[2] += dx*f[i][1] - dy*f[i][0];
}
MPI_Allreduce(tlocal,tq,3,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute moment of inertia tensor around center-of-mass cm of group
must unwrap atoms to compute itensor correctly
------------------------------------------------------------------------- */
void Group::inertia(int igroup, double *cm, double itensor[3][3])
{
int i,j;
int groupbit = bitmask[igroup];
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double dx,dy,dz,massone;
double unwrap[3];
double ione[3][3];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
ione[i][j] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
ione[0][0] += massone * (dy*dy + dz*dz);
ione[1][1] += massone * (dx*dx + dz*dz);
ione[2][2] += massone * (dx*dx + dy*dy);
ione[0][1] -= massone * dx*dy;
ione[1][2] -= massone * dy*dz;
ione[0][2] -= massone * dx*dz;
}
ione[1][0] = ione[0][1];
ione[2][1] = ione[1][2];
ione[2][0] = ione[0][2];
MPI_Allreduce(&ione[0][0],&itensor[0][0],9,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute moment of inertia tensor around cm of group of atoms in region
must unwrap atoms to compute itensor correctly
------------------------------------------------------------------------- */
void Group::inertia(int igroup, double *cm, double itensor[3][3], int iregion)
{
int i,j;
int groupbit = bitmask[igroup];
Region *region = domain->regions[iregion];
+ region->prematch();
double **x = atom->x;
int *mask = atom->mask;
int *type = atom->type;
imageint *image = atom->image;
double *mass = atom->mass;
double *rmass = atom->rmass;
int nlocal = atom->nlocal;
double dx,dy,dz,massone;
double unwrap[3];
double ione[3][3];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
ione[i][j] = 0.0;
for (i = 0; i < nlocal; i++)
if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) {
domain->unmap(x[i],image[i],unwrap);
dx = unwrap[0] - cm[0];
dy = unwrap[1] - cm[1];
dz = unwrap[2] - cm[2];
if (rmass) massone = rmass[i];
else massone = mass[type[i]];
ione[0][0] += massone * (dy*dy + dz*dz);
ione[1][1] += massone * (dx*dx + dz*dz);
ione[2][2] += massone * (dx*dx + dy*dy);
ione[0][1] -= massone * dx*dy;
ione[1][2] -= massone * dy*dz;
ione[0][2] -= massone * dx*dz;
}
ione[1][0] = ione[0][1];
ione[2][1] = ione[1][2];
ione[2][0] = ione[0][2];
MPI_Allreduce(&ione[0][0],&itensor[0][0],9,MPI_DOUBLE,MPI_SUM,world);
}
/* ----------------------------------------------------------------------
compute angular velocity omega from L = Iw, inverting I to solve for w
- really not a group operation, but L and I were computed for a group
+ really not a group/region operation, but L,I were computed for a group/region
------------------------------------------------------------------------- */
void Group::omega(double *angmom, double inertia[3][3], double *w)
{
double inverse[3][3];
inverse[0][0] = inertia[1][1]*inertia[2][2] - inertia[1][2]*inertia[2][1];
inverse[0][1] = -(inertia[0][1]*inertia[2][2] - inertia[0][2]*inertia[2][1]);
inverse[0][2] = inertia[0][1]*inertia[1][2] - inertia[0][2]*inertia[1][1];
inverse[1][0] = -(inertia[1][0]*inertia[2][2] - inertia[1][2]*inertia[2][0]);
inverse[1][1] = inertia[0][0]*inertia[2][2] - inertia[0][2]*inertia[2][0];
inverse[1][2] = -(inertia[0][0]*inertia[1][2] - inertia[0][2]*inertia[1][0]);
inverse[2][0] = inertia[1][0]*inertia[2][1] - inertia[1][1]*inertia[2][0];
inverse[2][1] = -(inertia[0][0]*inertia[2][1] - inertia[0][1]*inertia[2][0]);
inverse[2][2] = inertia[0][0]*inertia[1][1] - inertia[0][1]*inertia[1][0];
double determinant = inertia[0][0]*inertia[1][1]*inertia[2][2] +
inertia[0][1]*inertia[1][2]*inertia[2][0] +
inertia[0][2]*inertia[1][0]*inertia[2][1] -
inertia[0][0]*inertia[1][2]*inertia[2][1] -
inertia[0][1]*inertia[1][0]*inertia[2][2] -
inertia[2][0]*inertia[1][1]*inertia[0][2];
if (determinant > 0.0)
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
inverse[i][j] /= determinant;
w[0] = inverse[0][0]*angmom[0] + inverse[0][1]*angmom[1] +
inverse[0][2]*angmom[2];
w[1] = inverse[1][0]*angmom[0] + inverse[1][1]*angmom[1] +
inverse[1][2]*angmom[2];
w[2] = inverse[2][0]*angmom[0] + inverse[2][1]*angmom[1] +
inverse[2][2]*angmom[2];
}
diff --git a/src/modify.cpp b/src/modify.cpp
index 75f23f89b..c454ff928 100644
--- a/src/modify.cpp
+++ b/src/modify.cpp
@@ -1,1219 +1,1236 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "stdio.h"
#include "string.h"
#include "modify.h"
#include "style_compute.h"
#include "style_fix.h"
#include "atom.h"
#include "comm.h"
#include "fix.h"
#include "compute.h"
#include "group.h"
#include "update.h"
#include "domain.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
#define DELTA 4
#define BIG 1.0e20
#define NEXCEPT 4 // change when add to exceptions in add_fix()
/* ---------------------------------------------------------------------- */
Modify::Modify(LAMMPS *lmp) : Pointers(lmp)
{
nfix = maxfix = 0;
n_initial_integrate = n_post_integrate = 0;
n_pre_exchange = n_pre_neighbor = 0;
n_pre_force = n_post_force = 0;
n_final_integrate = n_end_of_step = n_thermo_energy = 0;
n_initial_integrate_respa = n_post_integrate_respa = 0;
n_pre_force_respa = n_post_force_respa = n_final_integrate_respa = 0;
n_min_pre_exchange = n_min_pre_force = n_min_post_force = n_min_energy = 0;
fix = NULL;
fmask = NULL;
list_initial_integrate = list_post_integrate = NULL;
list_pre_exchange = list_pre_neighbor = NULL;
list_pre_force = list_post_force = NULL;
list_final_integrate = list_end_of_step = NULL;
list_thermo_energy = NULL;
list_initial_integrate_respa = list_post_integrate_respa = NULL;
list_pre_force_respa = list_post_force_respa = NULL;
list_final_integrate_respa = NULL;
list_min_pre_exchange = list_min_pre_neighbor = NULL;
list_min_pre_force = list_min_post_force = NULL;
list_min_energy = NULL;
end_of_step_every = NULL;
list_timeflag = NULL;
nfix_restart_global = 0;
id_restart_global = style_restart_global = state_restart_global = NULL;
nfix_restart_peratom = 0;
id_restart_peratom = style_restart_peratom = NULL;
index_restart_peratom = NULL;
ncompute = maxcompute = 0;
compute = NULL;
// fill map with fixes listed in style_fix.h
fix_map = new std::map<std::string,FixCreator>();
#define FIX_CLASS
#define FixStyle(key,Class) \
(*fix_map)[#key] = &fix_creator<Class>;
#include "style_fix.h"
#undef FixStyle
#undef FIX_CLASS
// fill map with computes listed in style_compute.h
compute_map = new std::map<std::string,ComputeCreator>();
#define COMPUTE_CLASS
#define ComputeStyle(key,Class) \
(*compute_map)[#key] = &compute_creator<Class>;
#include "style_compute.h"
#undef ComputeStyle
#undef COMPUTE_CLASS
}
/* ---------------------------------------------------------------------- */
Modify::~Modify()
{
// delete all fixes
// do it via delete_fix() so callbacks in Atom are also updated correctly
while (nfix) delete_fix(fix[0]->id);
memory->sfree(fix);
memory->destroy(fmask);
// delete all computes
for (int i = 0; i < ncompute; i++) delete compute[i];
memory->sfree(compute);
delete [] list_initial_integrate;
delete [] list_post_integrate;
delete [] list_pre_exchange;
delete [] list_pre_neighbor;
delete [] list_pre_force;
delete [] list_post_force;
delete [] list_final_integrate;
delete [] list_end_of_step;
delete [] list_thermo_energy;
delete [] list_initial_integrate_respa;
delete [] list_post_integrate_respa;
delete [] list_pre_force_respa;
delete [] list_post_force_respa;
delete [] list_final_integrate_respa;
delete [] list_min_pre_exchange;
delete [] list_min_pre_neighbor;
delete [] list_min_pre_force;
delete [] list_min_post_force;
delete [] list_min_energy;
delete [] end_of_step_every;
delete [] list_timeflag;
restart_deallocate();
delete compute_map;
delete fix_map;
}
/* ----------------------------------------------------------------------
initialize all fixes and computes
------------------------------------------------------------------------- */
void Modify::init()
{
int i,j;
// delete storage of restart info since it is not valid after 1st run
restart_deallocate();
// create lists of fixes to call at each stage of run
list_init(INITIAL_INTEGRATE,n_initial_integrate,list_initial_integrate);
list_init(POST_INTEGRATE,n_post_integrate,list_post_integrate);
list_init(PRE_EXCHANGE,n_pre_exchange,list_pre_exchange);
list_init(PRE_NEIGHBOR,n_pre_neighbor,list_pre_neighbor);
list_init(PRE_FORCE,n_pre_force,list_pre_force);
list_init(POST_FORCE,n_post_force,list_post_force);
list_init(FINAL_INTEGRATE,n_final_integrate,list_final_integrate);
list_init_end_of_step(END_OF_STEP,n_end_of_step,list_end_of_step);
list_init_thermo_energy(THERMO_ENERGY,n_thermo_energy,list_thermo_energy);
list_init(INITIAL_INTEGRATE_RESPA,
n_initial_integrate_respa,list_initial_integrate_respa);
list_init(POST_INTEGRATE_RESPA,
n_post_integrate_respa,list_post_integrate_respa);
list_init(POST_FORCE_RESPA,
n_post_force_respa,list_post_force_respa);
list_init(PRE_FORCE_RESPA,
n_pre_force_respa,list_pre_force_respa);
list_init(FINAL_INTEGRATE_RESPA,
n_final_integrate_respa,list_final_integrate_respa);
list_init(MIN_PRE_EXCHANGE,n_min_pre_exchange,list_min_pre_exchange);
list_init(MIN_PRE_NEIGHBOR,n_min_pre_neighbor,list_min_pre_neighbor);
list_init(MIN_PRE_FORCE,n_min_pre_force,list_min_pre_force);
list_init(MIN_POST_FORCE,n_min_post_force,list_min_post_force);
list_init(MIN_ENERGY,n_min_energy,list_min_energy);
// init each fix
// not sure if now needs to come before compute init
// used to b/c temperature computes called fix->dof() in their init,
// and fix rigid required its own init before its dof() could be called,
// but computes now do their DOF in setup()
for (i = 0; i < nfix; i++) fix[i]->init();
// set global flag if any fix has its restart_pbc flag set
restart_pbc_any = 0;
for (i = 0; i < nfix; i++)
if (fix[i]->restart_pbc) restart_pbc_any = 1;
// create list of computes that store invocation times
list_init_compute();
// init each compute
// set invoked_scalar,vector,etc to -1 to force new run to re-compute them
// add initial timestep to all computes that store invocation times
// since any of them may be invoked by initial thermo
// do not clear out invocation times stored within a compute,
// b/c some may be holdovers from previous run, like for ave fixes
for (i = 0; i < ncompute; i++) {
compute[i]->init();
compute[i]->invoked_scalar = -1;
compute[i]->invoked_vector = -1;
compute[i]->invoked_array = -1;
compute[i]->invoked_peratom = -1;
compute[i]->invoked_local = -1;
}
addstep_compute_all(update->ntimestep);
+ // error if any fix or compute is using a dynamic group when not allowed
+
+ for (i = 0; i < nfix; i++)
+ if (!fix[i]->dynamic_group_allow && group->dynamic[fix[i]->igroup]) {
+ char str[128];
+ sprintf(str,"Fix %s does not allow use of dynamic group",fix[i]->id);
+ error->all(FLERR,str);
+ }
+
+ for (i = 0; i < ncompute; i++)
+ if (!compute[i]->dynamic_group_allow &&
+ group->dynamic[compute[i]->igroup]) {
+ char str[128];
+ sprintf(str,"Compute %s does not allow use of dynamic group",fix[i]->id);
+ error->all(FLERR,str);
+ }
+
// warn if any particle is time integrated more than once
int nlocal = atom->nlocal;
int *mask = atom->mask;
int *flag = new int[nlocal];
for (i = 0; i < nlocal; i++) flag[i] = 0;
int groupbit;
for (i = 0; i < nfix; i++) {
if (fix[i]->time_integrate == 0) continue;
groupbit = fix[i]->groupbit;
for (j = 0; j < nlocal; j++)
if (mask[j] & groupbit) flag[j]++;
}
int check = 0;
for (i = 0; i < nlocal; i++)
if (flag[i] > 1) check = 1;
delete [] flag;
int checkall;
MPI_Allreduce(&check,&checkall,1,MPI_INT,MPI_SUM,world);
if (comm->me == 0 && checkall)
error->warning(FLERR,
"One or more atoms are time integrated more than once");
}
/* ----------------------------------------------------------------------
setup for run, calls setup() of all fixes and computes
called from Verlet, RESPA, Min
------------------------------------------------------------------------- */
void Modify::setup(int vflag)
{
// compute setup needs to come before fix setup
// b/c NH fixes need use DOF of temperature computes
for (int i = 0; i < ncompute; i++) compute[i]->setup();
if (update->whichflag == 1)
for (int i = 0; i < nfix; i++) fix[i]->setup(vflag);
else if (update->whichflag == 2)
for (int i = 0; i < nfix; i++) fix[i]->min_setup(vflag);
}
/* ----------------------------------------------------------------------
setup pre_exchange call, only for fixes that define pre_exchange
called from Verlet, RESPA, Min, and WriteRestart with whichflag = 0
------------------------------------------------------------------------- */
void Modify::setup_pre_exchange()
{
if (update->whichflag <= 1)
for (int i = 0; i < n_pre_exchange; i++)
fix[list_pre_exchange[i]]->setup_pre_exchange();
else if (update->whichflag == 2)
for (int i = 0; i < n_min_pre_exchange; i++)
fix[list_min_pre_exchange[i]]->min_setup_pre_exchange();
}
/* ----------------------------------------------------------------------
setup pre_neighbor call, only for fixes that define pre_neighbor
called from Verlet, RESPA
------------------------------------------------------------------------- */
void Modify::setup_pre_neighbor()
{
if (update->whichflag == 1)
for (int i = 0; i < n_pre_neighbor; i++)
fix[list_pre_neighbor[i]]->setup_pre_neighbor();
else if (update->whichflag == 2)
for (int i = 0; i < n_min_pre_neighbor; i++)
fix[list_min_pre_neighbor[i]]->min_setup_pre_neighbor();
}
/* ----------------------------------------------------------------------
setup pre_force call, only for fixes that define pre_force
called from Verlet, RESPA, Min
------------------------------------------------------------------------- */
void Modify::setup_pre_force(int vflag)
{
if (update->whichflag == 1)
for (int i = 0; i < n_pre_force; i++)
fix[list_pre_force[i]]->setup_pre_force(vflag);
else if (update->whichflag == 2)
for (int i = 0; i < n_min_pre_force; i++)
fix[list_min_pre_force[i]]->min_setup_pre_force(vflag);
}
/* ----------------------------------------------------------------------
1st half of integrate call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::initial_integrate(int vflag)
{
for (int i = 0; i < n_initial_integrate; i++)
fix[list_initial_integrate[i]]->initial_integrate(vflag);
}
/* ----------------------------------------------------------------------
post_integrate call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::post_integrate()
{
for (int i = 0; i < n_post_integrate; i++)
fix[list_post_integrate[i]]->post_integrate();
}
/* ----------------------------------------------------------------------
pre_exchange call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::pre_exchange()
{
for (int i = 0; i < n_pre_exchange; i++)
fix[list_pre_exchange[i]]->pre_exchange();
}
/* ----------------------------------------------------------------------
pre_neighbor call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::pre_neighbor()
{
for (int i = 0; i < n_pre_neighbor; i++)
fix[list_pre_neighbor[i]]->pre_neighbor();
}
/* ----------------------------------------------------------------------
pre_force call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::pre_force(int vflag)
{
for (int i = 0; i < n_pre_force; i++)
fix[list_pre_force[i]]->pre_force(vflag);
}
/* ----------------------------------------------------------------------
post_force call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::post_force(int vflag)
{
for (int i = 0; i < n_post_force; i++)
fix[list_post_force[i]]->post_force(vflag);
}
/* ----------------------------------------------------------------------
2nd half of integrate call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::final_integrate()
{
for (int i = 0; i < n_final_integrate; i++)
fix[list_final_integrate[i]]->final_integrate();
}
/* ----------------------------------------------------------------------
end-of-timestep call, only for relevant fixes
only call fix->end_of_step() on timesteps that are multiples of nevery
------------------------------------------------------------------------- */
void Modify::end_of_step()
{
for (int i = 0; i < n_end_of_step; i++)
if (update->ntimestep % end_of_step_every[i] == 0)
fix[list_end_of_step[i]]->end_of_step();
}
/* ----------------------------------------------------------------------
thermo energy call, only for relevant fixes
called by Thermo class
compute_scalar() is fix call to return energy
------------------------------------------------------------------------- */
double Modify::thermo_energy()
{
double energy = 0.0;
for (int i = 0; i < n_thermo_energy; i++)
energy += fix[list_thermo_energy[i]]->compute_scalar();
return energy;
}
/* ----------------------------------------------------------------------
post_run call
------------------------------------------------------------------------- */
void Modify::post_run()
{
for (int i = 0; i < nfix; i++) fix[i]->post_run();
}
/* ----------------------------------------------------------------------
setup rRESPA pre_force call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::setup_pre_force_respa(int vflag, int ilevel)
{
for (int i = 0; i < n_pre_force; i++)
fix[list_pre_force[i]]->setup_pre_force_respa(vflag,ilevel);
}
/* ----------------------------------------------------------------------
1st half of rRESPA integrate call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::initial_integrate_respa(int vflag, int ilevel, int iloop)
{
for (int i = 0; i < n_initial_integrate_respa; i++)
fix[list_initial_integrate_respa[i]]->
initial_integrate_respa(vflag,ilevel,iloop);
}
/* ----------------------------------------------------------------------
rRESPA post_integrate call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::post_integrate_respa(int ilevel, int iloop)
{
for (int i = 0; i < n_post_integrate_respa; i++)
fix[list_post_integrate_respa[i]]->post_integrate_respa(ilevel,iloop);
}
/* ----------------------------------------------------------------------
rRESPA pre_force call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::pre_force_respa(int vflag, int ilevel, int iloop)
{
for (int i = 0; i < n_pre_force_respa; i++)
fix[list_pre_force_respa[i]]->pre_force_respa(vflag,ilevel,iloop);
}
/* ----------------------------------------------------------------------
rRESPA post_force call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::post_force_respa(int vflag, int ilevel, int iloop)
{
for (int i = 0; i < n_post_force_respa; i++)
fix[list_post_force_respa[i]]->post_force_respa(vflag,ilevel,iloop);
}
/* ----------------------------------------------------------------------
2nd half of rRESPA integrate call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::final_integrate_respa(int ilevel, int iloop)
{
for (int i = 0; i < n_final_integrate_respa; i++)
fix[list_final_integrate_respa[i]]->final_integrate_respa(ilevel,iloop);
}
/* ----------------------------------------------------------------------
minimizer pre-exchange call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_pre_exchange()
{
for (int i = 0; i < n_min_pre_exchange; i++)
fix[list_min_pre_exchange[i]]->min_pre_exchange();
}
/* ----------------------------------------------------------------------
minimizer pre-neighbor call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_pre_neighbor()
{
for (int i = 0; i < n_min_pre_neighbor; i++)
fix[list_min_pre_neighbor[i]]->min_pre_neighbor();
}
/* ----------------------------------------------------------------------
minimizer pre-force call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_pre_force(int vflag)
{
for (int i = 0; i < n_min_pre_force; i++)
fix[list_min_pre_force[i]]->min_pre_force(vflag);
}
/* ----------------------------------------------------------------------
minimizer force adjustment call, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_post_force(int vflag)
{
for (int i = 0; i < n_min_post_force; i++)
fix[list_min_post_force[i]]->min_post_force(vflag);
}
/* ----------------------------------------------------------------------
minimizer energy/force evaluation, only for relevant fixes
return energy and forces on extra degrees of freedom
------------------------------------------------------------------------- */
double Modify::min_energy(double *fextra)
{
int ifix,index;
index = 0;
double eng = 0.0;
for (int i = 0; i < n_min_energy; i++) {
ifix = list_min_energy[i];
eng += fix[ifix]->min_energy(&fextra[index]);
index += fix[ifix]->min_dof();
}
return eng;
}
/* ----------------------------------------------------------------------
store current state of extra minimizer dof, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_store()
{
for (int i = 0; i < n_min_energy; i++)
fix[list_min_energy[i]]->min_store();
}
/* ----------------------------------------------------------------------
manage state of extra minimizer dof on a stack, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_clearstore()
{
for (int i = 0; i < n_min_energy; i++)
fix[list_min_energy[i]]->min_clearstore();
}
void Modify::min_pushstore()
{
for (int i = 0; i < n_min_energy; i++)
fix[list_min_energy[i]]->min_pushstore();
}
void Modify::min_popstore()
{
for (int i = 0; i < n_min_energy; i++)
fix[list_min_energy[i]]->min_popstore();
}
/* ----------------------------------------------------------------------
displace extra minimizer dof along vector hextra, only for relevant fixes
------------------------------------------------------------------------- */
void Modify::min_step(double alpha, double *hextra)
{
int ifix,index;
index = 0;
for (int i = 0; i < n_min_energy; i++) {
ifix = list_min_energy[i];
fix[ifix]->min_step(alpha,&hextra[index]);
index += fix[ifix]->min_dof();
}
}
/* ----------------------------------------------------------------------
compute max allowed step size along vector hextra, only for relevant fixes
------------------------------------------------------------------------- */
double Modify::max_alpha(double *hextra)
{
int ifix,index;
double alpha = BIG;
index = 0;
for (int i = 0; i < n_min_energy; i++) {
ifix = list_min_energy[i];
double alpha_one = fix[ifix]->max_alpha(&hextra[index]);
alpha = MIN(alpha,alpha_one);
index += fix[ifix]->min_dof();
}
return alpha;
}
/* ----------------------------------------------------------------------
extract extra minimizer dof, only for relevant fixes
------------------------------------------------------------------------- */
int Modify::min_dof()
{
int ndof = 0;
for (int i = 0; i < n_min_energy; i++)
ndof += fix[list_min_energy[i]]->min_dof();
return ndof;
}
/* ----------------------------------------------------------------------
reset minimizer reference state of fix, only for relevant fixes
------------------------------------------------------------------------- */
int Modify::min_reset_ref()
{
int itmp,itmpall;
itmpall = 0;
for (int i = 0; i < n_min_energy; i++) {
itmp = fix[list_min_energy[i]]->min_reset_ref();
if (itmp) itmpall = 1;
}
return itmpall;
}
/* ----------------------------------------------------------------------
add a new fix or replace one with same ID
------------------------------------------------------------------------- */
void Modify::add_fix(int narg, char **arg, char *suffix)
{
if (narg < 3) error->all(FLERR,"Illegal fix command");
// cannot define fix before box exists unless style is in exception list
// don't like this way of checking for exceptions by adding fixes to list,
// but can't think of better way
// too late if instantiate fix, then check flag set in fix constructor,
// since some fixes access domain settings in their constructor
// change NEXCEPT above when add new fix to this list
const char *exceptions[NEXCEPT] = {"GPU","OMP","property/atom","cmap"};
if (domain->box_exist == 0) {
int m;
for (m = 0; m < NEXCEPT; m++)
if (strcmp(arg[2],exceptions[m]) == 0) break;
if (m == NEXCEPT)
error->all(FLERR,"Fix command before simulation box is defined");
}
// check group ID
int igroup = group->find(arg[1]);
if (igroup == -1) error->all(FLERR,"Could not find fix group ID");
// if fix ID exists:
// set newflag = 0 so create new fix in same location in fix list
// error if new style does not match old style
// since can't replace it (all when-to-invoke ptrs would be invalid)
// warn if new group != old group
// delete old fix, but do not call update_callback(),
// since will replace this fix and thus other fix locs will not change
// set ptr to NULL in case new fix scans list of fixes,
// e.g. scan will occur in add_callback() if called by new fix
// if fix ID does not exist:
// set newflag = 1 so create new fix
// extend fix and fmask lists as necessary
int ifix,newflag;
for (ifix = 0; ifix < nfix; ifix++)
if (strcmp(arg[0],fix[ifix]->id) == 0) break;
if (ifix < nfix) {
newflag = 0;
if (strcmp(arg[2],fix[ifix]->style) != 0)
error->all(FLERR,"Replacing a fix, but new style != old style");
if (fix[ifix]->igroup != igroup && comm->me == 0)
error->warning(FLERR,"Replacing a fix, but new group != old group");
delete fix[ifix];
fix[ifix] = NULL;
} else {
newflag = 1;
if (nfix == maxfix) {
maxfix += DELTA;
fix = (Fix **) memory->srealloc(fix,maxfix*sizeof(Fix *),"modify:fix");
memory->grow(fmask,maxfix,"modify:fmask");
}
}
// create the Fix
// try first with suffix appended
fix[ifix] = NULL;
if (suffix && lmp->suffix_enable) {
char estyle[256];
sprintf(estyle,"%s/%s",arg[2],suffix);
if (fix_map->find(estyle) != fix_map->end()) {
FixCreator fix_creator = (*fix_map)[estyle];
fix[ifix] = fix_creator(lmp,narg,arg);
}
}
if (fix[ifix] == NULL && fix_map->find(arg[2]) != fix_map->end()) {
FixCreator fix_creator = (*fix_map)[arg[2]];
fix[ifix] = fix_creator(lmp,narg,arg);
}
if (fix[ifix] == NULL) error->all(FLERR,"Invalid fix style");
// set fix mask values and increment nfix (if new)
fmask[ifix] = fix[ifix]->setmask();
if (newflag) nfix++;
// check if Fix is in restart_global list
// if yes, pass state info to the Fix so it can reset itself
for (int i = 0; i < nfix_restart_global; i++)
if (strcmp(id_restart_global[i],fix[ifix]->id) == 0 &&
strcmp(style_restart_global[i],fix[ifix]->style) == 0) {
fix[ifix]->restart(state_restart_global[i]);
if (comm->me == 0) {
char *str = (char *) ("Resetting global state of Fix %s Style %s "
"from restart file info\n");
if (screen) fprintf(screen,str,fix[ifix]->id,fix[ifix]->style);
if (logfile) fprintf(logfile,str,fix[ifix]->id,fix[ifix]->style);
}
}
// check if Fix is in restart_peratom list
// if yes, loop over atoms so they can extract info from atom->extra array
for (int i = 0; i < nfix_restart_peratom; i++)
if (strcmp(id_restart_peratom[i],fix[ifix]->id) == 0 &&
strcmp(style_restart_peratom[i],fix[ifix]->style) == 0) {
for (int j = 0; j < atom->nlocal; j++)
fix[ifix]->unpack_restart(j,index_restart_peratom[i]);
fix[ifix]->restart_reset = 1;
if (comm->me == 0) {
char *str = (char *) ("Resetting per-atom state of Fix %s Style %s "
"from restart file info\n");
if (screen) fprintf(screen,str,fix[ifix]->id,fix[ifix]->style);
if (logfile) fprintf(logfile,str,fix[ifix]->id,fix[ifix]->style);
}
}
}
/* ----------------------------------------------------------------------
one instance per fix in style_fix.h
------------------------------------------------------------------------- */
template <typename T>
Fix *Modify::fix_creator(LAMMPS *lmp, int narg, char **arg)
{
return new T(lmp,narg,arg);
}
/* ----------------------------------------------------------------------
modify a Fix's parameters
------------------------------------------------------------------------- */
void Modify::modify_fix(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
// lookup Fix ID
int ifix;
for (ifix = 0; ifix < nfix; ifix++)
if (strcmp(arg[0],fix[ifix]->id) == 0) break;
if (ifix == nfix) error->all(FLERR,"Could not find fix_modify ID");
fix[ifix]->modify_params(narg-1,&arg[1]);
}
/* ----------------------------------------------------------------------
delete a Fix from list of Fixes
Atom class must update indices in its list of callbacks to fixes
------------------------------------------------------------------------- */
void Modify::delete_fix(const char *id)
{
int ifix = find_fix(id);
if (ifix < 0) error->all(FLERR,"Could not find fix ID to delete");
delete fix[ifix];
atom->update_callback(ifix);
// move other Fixes and fmask down in list one slot
for (int i = ifix+1; i < nfix; i++) fix[i-1] = fix[i];
for (int i = ifix+1; i < nfix; i++) fmask[i-1] = fmask[i];
nfix--;
}
/* ----------------------------------------------------------------------
find a fix by ID
return index of fix or -1 if not found
------------------------------------------------------------------------- */
int Modify::find_fix(const char *id)
{
int ifix;
for (ifix = 0; ifix < nfix; ifix++)
if (strcmp(id,fix[ifix]->id) == 0) break;
if (ifix == nfix) return -1;
return ifix;
}
/* ----------------------------------------------------------------------
add a new compute
------------------------------------------------------------------------- */
void Modify::add_compute(int narg, char **arg, char *suffix)
{
if (narg < 3) error->all(FLERR,"Illegal compute command");
// error check
for (int icompute = 0; icompute < ncompute; icompute++)
if (strcmp(arg[0],compute[icompute]->id) == 0)
error->all(FLERR,"Reuse of compute ID");
// extend Compute list if necessary
if (ncompute == maxcompute) {
maxcompute += DELTA;
compute = (Compute **)
memory->srealloc(compute,maxcompute*sizeof(Compute *),"modify:compute");
}
// create the Compute
// try first with suffix appended
compute[ncompute] = NULL;
if (suffix && lmp->suffix_enable) {
char estyle[256];
sprintf(estyle,"%s/%s",arg[2],suffix);
if (compute_map->find(estyle) != compute_map->end()) {
ComputeCreator compute_creator = (*compute_map)[estyle];
compute[ncompute] = compute_creator(lmp,narg,arg);
}
}
if (compute[ncompute] == NULL &&
compute_map->find(arg[2]) != compute_map->end()) {
ComputeCreator compute_creator = (*compute_map)[arg[2]];
compute[ncompute] = compute_creator(lmp,narg,arg);
}
if (compute[ncompute] == NULL) error->all(FLERR,"Invalid compute style");
ncompute++;
}
/* ----------------------------------------------------------------------
one instance per compute in style_compute.h
------------------------------------------------------------------------- */
template <typename T>
Compute *Modify::compute_creator(LAMMPS *lmp, int narg, char **arg)
{
return new T(lmp,narg,arg);
}
/* ----------------------------------------------------------------------
modify a Compute's parameters
------------------------------------------------------------------------- */
void Modify::modify_compute(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal compute_modify command");
// lookup Compute ID
int icompute;
for (icompute = 0; icompute < ncompute; icompute++)
if (strcmp(arg[0],compute[icompute]->id) == 0) break;
if (icompute == ncompute)
error->all(FLERR,"Could not find compute_modify ID");
compute[icompute]->modify_params(narg-1,&arg[1]);
}
/* ----------------------------------------------------------------------
delete a Compute from list of Computes
------------------------------------------------------------------------- */
void Modify::delete_compute(const char *id)
{
int icompute = find_compute(id);
if (icompute < 0) error->all(FLERR,"Could not find compute ID to delete");
delete compute[icompute];
// move other Computes down in list one slot
for (int i = icompute+1; i < ncompute; i++) compute[i-1] = compute[i];
ncompute--;
}
/* ----------------------------------------------------------------------
find a compute by ID
return index of compute or -1 if not found
------------------------------------------------------------------------- */
int Modify::find_compute(const char *id)
{
int icompute;
for (icompute = 0; icompute < ncompute; icompute++)
if (strcmp(id,compute[icompute]->id) == 0) break;
if (icompute == ncompute) return -1;
return icompute;
}
/* ----------------------------------------------------------------------
clear invoked flag of all computes
called everywhere that computes are used, before computes are invoked
invoked flag used to avoid re-invoking same compute multiple times
and to flag computes that store invocation times as having been invoked
------------------------------------------------------------------------- */
void Modify::clearstep_compute()
{
for (int icompute = 0; icompute < ncompute; icompute++)
compute[icompute]->invoked_flag = 0;
}
/* ----------------------------------------------------------------------
loop over computes that store invocation times
if its invoked flag set on this timestep, schedule next invocation
called everywhere that computes are used, after computes are invoked
------------------------------------------------------------------------- */
void Modify::addstep_compute(bigint newstep)
{
for (int icompute = 0; icompute < n_timeflag; icompute++)
if (compute[list_timeflag[icompute]]->invoked_flag)
compute[list_timeflag[icompute]]->addstep(newstep);
}
/* ----------------------------------------------------------------------
loop over all computes
schedule next invocation for those that store invocation times
called when not sure what computes will be needed on newstep
do not loop only over n_timeflag, since may not be set yet
------------------------------------------------------------------------- */
void Modify::addstep_compute_all(bigint newstep)
{
for (int icompute = 0; icompute < ncompute; icompute++)
if (compute[icompute]->timeflag) compute[icompute]->addstep(newstep);
}
/* ----------------------------------------------------------------------
write to restart file for all Fixes with restart info
(1) fixes that have global state
(2) fixes that store per-atom quantities
------------------------------------------------------------------------- */
void Modify::write_restart(FILE *fp)
{
int me = comm->me;
int count = 0;
for (int i = 0; i < nfix; i++)
if (fix[i]->restart_global) count++;
if (me == 0) fwrite(&count,sizeof(int),1,fp);
int n;
for (int i = 0; i < nfix; i++)
if (fix[i]->restart_global) {
if (me == 0) {
n = strlen(fix[i]->id) + 1;
fwrite(&n,sizeof(int),1,fp);
fwrite(fix[i]->id,sizeof(char),n,fp);
n = strlen(fix[i]->style) + 1;
fwrite(&n,sizeof(int),1,fp);
fwrite(fix[i]->style,sizeof(char),n,fp);
}
fix[i]->write_restart(fp);
}
count = 0;
for (int i = 0; i < nfix; i++)
if (fix[i]->restart_peratom) count++;
if (me == 0) fwrite(&count,sizeof(int),1,fp);
for (int i = 0; i < nfix; i++)
if (fix[i]->restart_peratom) {
int maxsize_restart = fix[i]->maxsize_restart();
if (me == 0) {
n = strlen(fix[i]->id) + 1;
fwrite(&n,sizeof(int),1,fp);
fwrite(fix[i]->id,sizeof(char),n,fp);
n = strlen(fix[i]->style) + 1;
fwrite(&n,sizeof(int),1,fp);
fwrite(fix[i]->style,sizeof(char),n,fp);
fwrite(&maxsize_restart,sizeof(int),1,fp);
}
}
}
/* ----------------------------------------------------------------------
read in restart file data on all previously defined Fixes with restart info
(1) fixes that have global state
(2) fixes that store per-atom quantities
return maxsize of extra info that will be stored with any atom
------------------------------------------------------------------------- */
int Modify::read_restart(FILE *fp)
{
// nfix_restart_global = # of restart entries with global state info
int me = comm->me;
if (me == 0) fread(&nfix_restart_global,sizeof(int),1,fp);
MPI_Bcast(&nfix_restart_global,1,MPI_INT,0,world);
// allocate space for each entry
if (nfix_restart_global) {
id_restart_global = new char*[nfix_restart_global];
style_restart_global = new char*[nfix_restart_global];
state_restart_global = new char*[nfix_restart_global];
}
// read each entry and Bcast to all procs
// each entry has id string, style string, chunk of state data
int n;
for (int i = 0; i < nfix_restart_global; i++) {
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
id_restart_global[i] = new char[n];
if (me == 0) fread(id_restart_global[i],sizeof(char),n,fp);
MPI_Bcast(id_restart_global[i],n,MPI_CHAR,0,world);
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
style_restart_global[i] = new char[n];
if (me == 0) fread(style_restart_global[i],sizeof(char),n,fp);
MPI_Bcast(style_restart_global[i],n,MPI_CHAR,0,world);
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
state_restart_global[i] = new char[n];
if (me == 0) fread(state_restart_global[i],sizeof(char),n,fp);
MPI_Bcast(state_restart_global[i],n,MPI_CHAR,0,world);
}
// nfix_restart_peratom = # of restart entries with peratom info
int maxsize = 0;
if (me == 0) fread(&nfix_restart_peratom,sizeof(int),1,fp);
MPI_Bcast(&nfix_restart_peratom,1,MPI_INT,0,world);
// allocate space for each entry
if (nfix_restart_peratom) {
id_restart_peratom = new char*[nfix_restart_peratom];
style_restart_peratom = new char*[nfix_restart_peratom];
index_restart_peratom = new int[nfix_restart_peratom];
}
// read each entry and Bcast to all procs
// each entry has id string, style string, maxsize of one atom's data
// set index = which set of extra data this fix represents
for (int i = 0; i < nfix_restart_peratom; i++) {
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
id_restart_peratom[i] = new char[n];
if (me == 0) fread(id_restart_peratom[i],sizeof(char),n,fp);
MPI_Bcast(id_restart_peratom[i],n,MPI_CHAR,0,world);
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
style_restart_peratom[i] = new char[n];
if (me == 0) fread(style_restart_peratom[i],sizeof(char),n,fp);
MPI_Bcast(style_restart_peratom[i],n,MPI_CHAR,0,world);
if (me == 0) fread(&n,sizeof(int),1,fp);
MPI_Bcast(&n,1,MPI_INT,0,world);
maxsize += n;
index_restart_peratom[i] = i;
}
return maxsize;
}
/* ----------------------------------------------------------------------
delete all lists of restart file Fix info
------------------------------------------------------------------------- */
void Modify::restart_deallocate()
{
if (nfix_restart_global) {
for (int i = 0; i < nfix_restart_global; i++) {
delete [] id_restart_global[i];
delete [] style_restart_global[i];
delete [] state_restart_global[i];
}
delete [] id_restart_global;
delete [] style_restart_global;
delete [] state_restart_global;
}
if (nfix_restart_peratom) {
for (int i = 0; i < nfix_restart_peratom; i++) {
delete [] id_restart_peratom[i];
delete [] style_restart_peratom[i];
}
delete [] id_restart_peratom;
delete [] style_restart_peratom;
delete [] index_restart_peratom;
}
nfix_restart_global = nfix_restart_peratom = 0;
}
/* ----------------------------------------------------------------------
create list of fix indices for fixes which match mask
------------------------------------------------------------------------- */
void Modify::list_init(int mask, int &n, int *&list)
{
delete [] list;
n = 0;
for (int i = 0; i < nfix; i++) if (fmask[i] & mask) n++;
list = new int[n];
n = 0;
for (int i = 0; i < nfix; i++) if (fmask[i] & mask) list[n++] = i;
}
/* ----------------------------------------------------------------------
create list of fix indices for end_of_step fixes
also create end_of_step_every[]
------------------------------------------------------------------------- */
void Modify::list_init_end_of_step(int mask, int &n, int *&list)
{
delete [] list;
delete [] end_of_step_every;
n = 0;
for (int i = 0; i < nfix; i++) if (fmask[i] & mask) n++;
list = new int[n];
end_of_step_every = new int[n];
n = 0;
for (int i = 0; i < nfix; i++)
if (fmask[i] & mask) {
list[n] = i;
end_of_step_every[n++] = fix[i]->nevery;
}
}
/* ----------------------------------------------------------------------
create list of fix indices for thermo energy fixes
only added to list if fix has THERMO_ENERGY mask
and its thermo_energy flag was set via fix_modify
------------------------------------------------------------------------- */
void Modify::list_init_thermo_energy(int mask, int &n, int *&list)
{
delete [] list;
n = 0;
for (int i = 0; i < nfix; i++)
if (fmask[i] & mask && fix[i]->thermo_energy) n++;
list = new int[n];
n = 0;
for (int i = 0; i < nfix; i++)
if (fmask[i] & mask && fix[i]->thermo_energy) list[n++] = i;
}
/* ----------------------------------------------------------------------
create list of compute indices for computes which store invocation times
------------------------------------------------------------------------- */
void Modify::list_init_compute()
{
delete [] list_timeflag;
n_timeflag = 0;
for (int i = 0; i < ncompute; i++)
if (compute[i]->timeflag) n_timeflag++;
list_timeflag = new int[n_timeflag];
n_timeflag = 0;
for (int i = 0; i < ncompute; i++)
if (compute[i]->timeflag) list_timeflag[n_timeflag++] = i;
}
/* ----------------------------------------------------------------------
return # of bytes of allocated memory from all fixes
------------------------------------------------------------------------- */
bigint Modify::memory_usage()
{
bigint bytes = 0;
for (int i = 0; i < nfix; i++)
bytes += static_cast<bigint> (fix[i]->memory_usage());
for (int i = 0; i < ncompute; i++)
bytes += static_cast<bigint> (compute[i]->memory_usage());
return bytes;
}
diff --git a/src/region.cpp b/src/region.cpp
index 2d2636998..3b836d0cf 100644
--- a/src/region.cpp
+++ b/src/region.cpp
@@ -1,398 +1,393 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "region.h"
#include "update.h"
#include "domain.h"
#include "lattice.h"
#include "input.h"
#include "variable.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
/* ---------------------------------------------------------------------- */
Region::Region(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
{
int n = strlen(arg[0]) + 1;
id = new char[n];
strcpy(id,arg[0]);
n = strlen(arg[1]) + 1;
style = new char[n];
strcpy(style,arg[1]);
varshape = 0;
xstr = ystr = zstr = tstr = NULL;
dx = dy = dz = 0.0;
- lastshape = lastdynamic = -1;
}
/* ---------------------------------------------------------------------- */
Region::~Region()
{
delete [] id;
delete [] style;
delete [] xstr;
delete [] ystr;
delete [] zstr;
delete [] tstr;
}
/* ---------------------------------------------------------------------- */
void Region::init()
{
if (xstr) {
xvar = input->variable->find(xstr);
if (xvar < 0) error->all(FLERR,"Variable name for region does not exist");
if (!input->variable->equalstyle(xvar))
error->all(FLERR,"Variable for region is invalid style");
}
if (ystr) {
yvar = input->variable->find(ystr);
if (yvar < 0) error->all(FLERR,"Variable name for region does not exist");
if (!input->variable->equalstyle(yvar))
error->all(FLERR,"Variable for region is not equal style");
}
if (zstr) {
zvar = input->variable->find(zstr);
if (zvar < 0) error->all(FLERR,"Variable name for region does not exist");
if (!input->variable->equalstyle(zvar))
error->all(FLERR,"Variable for region is not equal style");
}
if (tstr) {
tvar = input->variable->find(tstr);
if (tvar < 0) error->all(FLERR,"Variable name for region does not exist");
if (!input->variable->equalstyle(tvar))
error->all(FLERR,"Variable for region is not equal style");
}
}
/* ----------------------------------------------------------------------
- return 1 if region is dynamic, 0 if static
+ return 1 if region is dynamic (moves/rotates) or has variable shape
+ else return 0 if static
only primitive regions define it here
union/intersect regions have their own dynamic_check()
------------------------------------------------------------------------- */
int Region::dynamic_check()
{
- return dynamic;
+ if (dynamic || varshape) return 1;
+ return 0;
+}
+
+/* ----------------------------------------------------------------------
+ called before looping over atoms with match() or surface()
+ this insures any variables used by region are invoked once per timestep
+ also insures variables are invoked by all procs even those w/out atoms
+ necessary if equal-style variable invokes global operation
+ with MPI_Allreduce, e.g. xcm() or count()
+------------------------------------------------------------------------- */
+
+void Region::prematch()
+{
+ if (varshape) shape_update();
+ if (dynamic) pretransform();
}
/* ----------------------------------------------------------------------
determine if point x,y,z is a match to region volume
XOR computes 0 if 2 args are the same, 1 if different
note that inside() returns 1 for points on surface of region
thus point on surface of exterior region will not match
if region has variable shape, invoke shape_update() once per timestep
if region is dynamic, apply inverse transform to x,y,z
unmove first, then unrotate, so don't have to change rotation point
caller is responsible for wrapping this call with
modify->clearstep_compute() and modify->addstep_compute() if needed
------------------------------------------------------------------------- */
int Region::match(double x, double y, double z)
{
- if (varshape && update->ntimestep != lastshape) {
- shape_update();
- lastshape = update->ntimestep;
- }
-
if (dynamic) inverse_transform(x,y,z);
-
return !(inside(x,y,z) ^ interior);
}
/* ----------------------------------------------------------------------
generate list of contact points for interior or exterior regions
if region has variable shape, invoke shape_update() once per timestep
if region is dynamic:
before: inverse transform x,y,z (unmove, then unrotate)
after: forward transform contact point xs,yx,zs (rotate, then move),
then reset contact delx,dely,delz based on new contact point
no need to do this if no rotation since delxyz doesn't change
caller is responsible for wrapping this call with
modify->clearstep_compute() and modify->addstep_compute() if needed
------------------------------------------------------------------------- */
int Region::surface(double x, double y, double z, double cutoff)
{
int ncontact;
double xs,ys,zs;
double xnear[3],xorig[3];
- if (varshape && update->ntimestep != lastshape) {
- shape_update();
- lastshape = update->ntimestep;
- }
-
if (dynamic) {
xorig[0] = x;
xorig[1] = y;
xorig[2] = z;
inverse_transform(x,y,z);
}
xnear[0] = x;
xnear[1] = y;
xnear[2] = z;
if (interior) ncontact = surface_interior(xnear,cutoff);
else ncontact = surface_exterior(xnear,cutoff);
if (rotateflag && ncontact) {
for (int i = 0; i < ncontact; i++) {
xs = xnear[0] - contact[i].delx;
ys = xnear[1] - contact[i].dely;
zs = xnear[2] - contact[i].delz;
forward_transform(xs,ys,zs);
contact[i].delx = xorig[0] - xs;
contact[i].dely = xorig[1] - ys;
contact[i].delz = xorig[2] - zs;
}
}
return ncontact;
}
/* ----------------------------------------------------------------------
add a single contact at Nth location in contact array
x = particle position
xp,yp,zp = region surface point
------------------------------------------------------------------------- */
void Region::add_contact(int n, double *x, double xp, double yp, double zp)
{
double delx = x[0] - xp;
double dely = x[1] - yp;
double delz = x[2] - zp;
contact[n].r = sqrt(delx*delx + dely*dely + delz*delz);
contact[n].delx = delx;
contact[n].dely = dely;
contact[n].delz = delz;
}
+/* ----------------------------------------------------------------------
+ pre-compute dx,dy,dz and theta for a moving/rotating region
+ called once for the region before per-atom loop, via prematch()
+------------------------------------------------------------------------- */
+
+void Region::pretransform()
+{
+ if (moveflag) {
+ if (xstr) dx = input->variable->compute_equal(xvar);
+ if (ystr) dy = input->variable->compute_equal(yvar);
+ if (zstr) dz = input->variable->compute_equal(zvar);
+ }
+ if (rotateflag) theta = input->variable->compute_equal(tvar);
+}
+
/* ----------------------------------------------------------------------
transform a point x,y,z in region space to moved space
rotate first (around original P), then displace
------------------------------------------------------------------------- */
void Region::forward_transform(double &x, double &y, double &z)
{
- if (rotateflag) {
- if (update->ntimestep != lastdynamic)
- theta = input->variable->compute_equal(tvar);
- rotate(x,y,z,theta);
- }
-
+ if (rotateflag) rotate(x,y,z,theta);
if (moveflag) {
- if (update->ntimestep != lastdynamic) {
- if (xstr) dx = input->variable->compute_equal(xvar);
- if (ystr) dy = input->variable->compute_equal(yvar);
- if (zstr) dz = input->variable->compute_equal(zvar);
- }
x += dx;
y += dy;
z += dz;
}
-
- lastdynamic = update->ntimestep;
}
/* ----------------------------------------------------------------------
transform a point x,y,z in moved space back to region space
undisplace first, then unrotate (around original P)
------------------------------------------------------------------------- */
void Region::inverse_transform(double &x, double &y, double &z)
{
if (moveflag) {
- if (update->ntimestep != lastdynamic) {
- if (xstr) dx = input->variable->compute_equal(xvar);
- if (ystr) dy = input->variable->compute_equal(yvar);
- if (zstr) dz = input->variable->compute_equal(zvar);
- }
x -= dx;
y -= dy;
z -= dz;
}
-
- if (rotateflag) {
- if (update->ntimestep != lastdynamic)
- theta = input->variable->compute_equal(tvar);
- rotate(x,y,z,-theta);
- }
-
- lastdynamic = update->ntimestep;
+ if (rotateflag) rotate(x,y,z,-theta);
}
/* ----------------------------------------------------------------------
rotate x,y,z by angle via right-hand rule around point and runit normal
sign of angle determines whether rotating forward/backward in time
return updated x,y,z
P = point = vector = point of rotation
R = vector = axis of rotation
w = omega of rotation (from period)
X0 = x,y,z = initial coord of atom
R0 = runit = unit vector for R
C = (X0 dot R0) R0 = projection of atom coord onto R
D = X0 - P = vector from P to X0
A = D - C = vector from R line to X0
B = R0 cross A = vector perp to A in plane of rotation
A,B define plane of circular rotation around R line
x,y,z = P + C + A cos(w*dt) + B sin(w*dt)
------------------------------------------------------------------------- */
void Region::rotate(double &x, double &y, double &z, double angle)
{
double a[3],b[3],c[3],d[3],disp[3];
double sine = sin(angle);
double cosine = cos(angle);
double x0dotr = x*runit[0] + y*runit[1] + z*runit[2];
c[0] = x0dotr * runit[0];
c[1] = x0dotr * runit[1];
c[2] = x0dotr * runit[2];
d[0] = x - point[0];
d[1] = y - point[1];
d[2] = z - point[2];
a[0] = d[0] - c[0];
a[1] = d[1] - c[1];
a[2] = d[2] - c[2];
b[0] = runit[1]*a[2] - runit[2]*a[1];
b[1] = runit[2]*a[0] - runit[0]*a[2];
b[2] = runit[0]*a[1] - runit[1]*a[0];
disp[0] = a[0]*cosine + b[0]*sine;
disp[1] = a[1]*cosine + b[1]*sine;
disp[2] = a[2]*cosine + b[2]*sine;
x = point[0] + c[0] + disp[0];
y = point[1] + c[1] + disp[1];
z = point[2] + c[2] + disp[2];
}
/* ----------------------------------------------------------------------
parse optional parameters at end of region input line
------------------------------------------------------------------------- */
void Region::options(int narg, char **arg)
{
if (narg < 0) error->all(FLERR,"Illegal region command");
// option defaults
interior = 1;
scaleflag = 1;
moveflag = rotateflag = 0;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"units") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal region command");
if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0;
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal region command");
iarg += 2;
} else if (strcmp(arg[iarg],"side") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal region command");
if (strcmp(arg[iarg+1],"in") == 0) interior = 1;
else if (strcmp(arg[iarg+1],"out") == 0) interior = 0;
else error->all(FLERR,"Illegal region command");
iarg += 2;
} else if (strcmp(arg[iarg],"move") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal region command");
if (strcmp(arg[iarg+1],"NULL") != 0) {
if (strstr(arg[iarg+1],"v_") != arg[iarg+1])
error->all(FLERR,"Illegal region command");
int n = strlen(&arg[iarg+1][2]) + 1;
xstr = new char[n];
strcpy(xstr,&arg[iarg+1][2]);
}
if (strcmp(arg[iarg+2],"NULL") != 0) {
if (strstr(arg[iarg+2],"v_") != arg[iarg+2])
error->all(FLERR,"Illegal region command");
int n = strlen(&arg[iarg+2][2]) + 1;
ystr = new char[n];
strcpy(ystr,&arg[iarg+2][2]);
}
if (strcmp(arg[iarg+3],"NULL") != 0) {
if (strstr(arg[iarg+3],"v_") != arg[iarg+3])
error->all(FLERR,"Illegal region command");
int n = strlen(&arg[iarg+3][2]) + 1;
zstr = new char[n];
strcpy(zstr,&arg[iarg+3][2]);
}
moveflag = 1;
iarg += 4;
} else if (strcmp(arg[iarg],"rotate") == 0) {
if (iarg+8 > narg) error->all(FLERR,"Illegal region command");
if (strstr(arg[iarg+1],"v_") != arg[iarg+1])
error->all(FLERR,"Illegal region command");
int n = strlen(&arg[iarg+1][2]) + 1;
tstr = new char[n];
strcpy(tstr,&arg[iarg+1][2]);
point[0] = force->numeric(FLERR,arg[iarg+2]);
point[1] = force->numeric(FLERR,arg[iarg+3]);
point[2] = force->numeric(FLERR,arg[iarg+4]);
axis[0] = force->numeric(FLERR,arg[iarg+5]);
axis[1] = force->numeric(FLERR,arg[iarg+6]);
axis[2] = force->numeric(FLERR,arg[iarg+7]);
rotateflag = 1;
iarg += 8;
} else error->all(FLERR,"Illegal region command");
}
// error check
if ((moveflag || rotateflag) &&
(strcmp(style,"union") == 0 || strcmp(style,"intersect") == 0))
error->all(FLERR,"Region union or intersect cannot be dynamic");
// setup scaling
if (scaleflag) {
xscale = domain->lattice->xlattice;
yscale = domain->lattice->ylattice;
zscale = domain->lattice->zlattice;
}
else xscale = yscale = zscale = 1.0;
if (rotateflag) {
point[0] *= xscale;
point[1] *= yscale;
point[2] *= zscale;
}
// runit = unit vector along rotation axis
if (rotateflag) {
double len = sqrt(axis[0]*axis[0] + axis[1]*axis[1] + axis[2]*axis[2]);
if (len == 0.0)
error->all(FLERR,"Region cannot have 0 length rotation vector");
runit[0] = axis[0]/len;
runit[1] = axis[1]/len;
runit[2] = axis[2]/len;
}
if (moveflag || rotateflag) dynamic = 1;
else dynamic = 0;
}
diff --git a/src/region.h b/src/region.h
index 6f29eed69..b68cb74cd 100644
--- a/src/region.h
+++ b/src/region.h
@@ -1,110 +1,111 @@
/* -*- c++ -*- ----------------------------------------------------------
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.
------------------------------------------------------------------------- */
#ifndef LMP_REGION_H
#define LMP_REGION_H
#include "pointers.h"
namespace LAMMPS_NS {
class Region : protected Pointers {
public:
char *id,*style;
int interior; // 1 for interior, 0 for exterior
int scaleflag; // 1 for lattice, 0 for box
double xscale,yscale,zscale; // scale factors for box/lattice units
double extent_xlo,extent_xhi; // bounding box on region
double extent_ylo,extent_yhi;
double extent_zlo,extent_zhi;
int bboxflag; // 1 if bounding box is computable
int varshape; // 1 if region shape changes over time
// contact = particle near region surface
struct Contact {
double r; // distance between particle & surf, r > 0.0
double delx,dely,delz; // vector from surface pt to particle
};
Contact *contact; // list of contacts
int cmax; // max # of contacts possible with region
Region(class LAMMPS *, int, char **);
virtual ~Region();
virtual void init();
virtual int dynamic_check();
// called by other classes to check point versus region
+ void prematch();
int match(double, double, double);
int surface(double, double, double, double);
// implemented by each region, not called by other classes
virtual int inside(double, double, double) = 0;
virtual int surface_interior(double *, double) = 0;
virtual int surface_exterior(double *, double) = 0;
virtual void shape_update() {}
protected:
void add_contact(int, double *, double, double, double);
void options(int, char **);
private:
int dynamic; // 1 if region position/orientation changes over time
int moveflag,rotateflag; // 1 if position/orientation changes
double point[3],axis[3],runit[3];
char *xstr,*ystr,*zstr,*tstr;
int xvar,yvar,zvar,tvar;
double dx,dy,dz,theta;
- bigint lastshape,lastdynamic;
+ void pretransform();
void forward_transform(double &, double &, double &);
void inverse_transform(double &, double &, double &);
void rotate(double &, double &, double &, double);
};
}
#endif
/* ERROR/WARNING messages:
E: Variable name for region does not exist
Self-explanatory.
E: Variable for region is invalid style
Only equal-style variables can be used.
E: Variable for region is not equal style
Self-explanatory.
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: Region union or intersect cannot be dynamic
The sub-regions can be dynamic, but not the combined region.
E: Region cannot have 0 length rotation vector
Self-explanatory.
*/
diff --git a/src/set.cpp b/src/set.cpp
index 23a654af6..5f3af8212 100644
--- a/src/set.cpp
+++ b/src/set.cpp
@@ -1,970 +1,971 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "mpi.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "set.h"
#include "atom.h"
#include "atom_vec.h"
#include "atom_vec_ellipsoid.h"
#include "atom_vec_line.h"
#include "atom_vec_tri.h"
#include "domain.h"
#include "region.h"
#include "group.h"
#include "comm.h"
#include "neighbor.h"
#include "force.h"
#include "pair.h"
#include "input.h"
#include "variable.h"
#include "random_park.h"
#include "math_extra.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace MathConst;
enum{ATOM_SELECT,MOL_SELECT,TYPE_SELECT,GROUP_SELECT,REGION_SELECT};
enum{TYPE,TYPE_FRACTION,MOLECULE,X,Y,Z,CHARGE,MASS,SHAPE,LENGTH,TRI,
DIPOLE,DIPOLE_RANDOM,QUAT,QUAT_RANDOM,THETA,ANGMOM,
DIAMETER,DENSITY,VOLUME,IMAGE,BOND,ANGLE,DIHEDRAL,IMPROPER,
MESO_E,MESO_CV,MESO_RHO,INAME,DNAME};
#define BIG INT_MAX
/* ---------------------------------------------------------------------- */
void Set::command(int narg, char **arg)
{
if (domain->box_exist == 0)
error->all(FLERR,"Set command before simulation box is defined");
if (atom->natoms == 0)
error->all(FLERR,"Set command with no atoms existing");
if (narg < 3) error->all(FLERR,"Illegal set command");
// style and ID info
if (strcmp(arg[0],"atom") == 0) style = ATOM_SELECT;
else if (strcmp(arg[0],"mol") == 0) style = MOL_SELECT;
else if (strcmp(arg[0],"type") == 0) style = TYPE_SELECT;
else if (strcmp(arg[0],"group") == 0) style = GROUP_SELECT;
else if (strcmp(arg[0],"region") == 0) style = REGION_SELECT;
else error->all(FLERR,"Illegal set command");
int n = strlen(arg[1]) + 1;
id = new char[n];
strcpy(id,arg[1]);
select = NULL;
selection(atom->nlocal);
// loop over keyword/value pairs
// call appropriate routine to reset attributes
if (comm->me == 0 && screen) fprintf(screen,"Setting atom values ...\n");
int allcount,origarg;
int iarg = 2;
while (iarg < narg) {
varflag = varflag1 = varflag2 = varflag3 = varflag4 = 0;
count = 0;
origarg = iarg;
if (strcmp(arg[iarg],"type") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else ivalue = force->inumeric(FLERR,arg[iarg+1]);
set(TYPE);
iarg += 2;
} else if (strcmp(arg[iarg],"type/fraction") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal set command");
newtype = force->inumeric(FLERR,arg[iarg+1]);
fraction = force->numeric(FLERR,arg[iarg+2]);
ivalue = force->inumeric(FLERR,arg[iarg+3]);
if (newtype <= 0 || newtype > atom->ntypes)
error->all(FLERR,"Invalid value in set command");
if (fraction < 0.0 || fraction > 1.0)
error->all(FLERR,"Invalid value in set command");
if (ivalue <= 0)
error->all(FLERR,"Invalid random number seed in set command");
setrandom(TYPE_FRACTION);
iarg += 4;
} else if (strcmp(arg[iarg],"mol") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else ivalue = force->inumeric(FLERR,arg[iarg+1]);
if (!atom->molecule_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(MOLECULE);
iarg += 2;
} else if (strcmp(arg[iarg],"x") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
set(X);
iarg += 2;
} else if (strcmp(arg[iarg],"y") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
set(Y);
iarg += 2;
} else if (strcmp(arg[iarg],"z") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
set(Z);
iarg += 2;
} else if (strcmp(arg[iarg],"charge") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->q_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(CHARGE);
iarg += 2;
} else if (strcmp(arg[iarg],"mass") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->rmass_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(MASS);
iarg += 2;
} else if (strcmp(arg[iarg],"shape") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else xvalue = force->numeric(FLERR,arg[iarg+1]);
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) varparse(arg[iarg+2],2);
else yvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) varparse(arg[iarg+3],3);
else zvalue = force->numeric(FLERR,arg[iarg+3]);
if (!atom->ellipsoid_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(SHAPE);
iarg += 4;
} else if (strcmp(arg[iarg],"length") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->line_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(LENGTH);
iarg += 2;
} else if (strcmp(arg[iarg],"tri") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->tri_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(TRI);
iarg += 2;
} else if (strcmp(arg[iarg],"dipole") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else xvalue = force->numeric(FLERR,arg[iarg+1]);
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) varparse(arg[iarg+2],2);
else yvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) varparse(arg[iarg+3],3);
else zvalue = force->numeric(FLERR,arg[iarg+3]);
if (!atom->mu_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(DIPOLE);
iarg += 4;
} else if (strcmp(arg[iarg],"dipole/random") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal set command");
ivalue = force->inumeric(FLERR,arg[iarg+1]);
dvalue = force->numeric(FLERR,arg[iarg+2]);
if (!atom->mu_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (ivalue <= 0)
error->all(FLERR,"Invalid random number seed in set command");
if (dvalue <= 0.0)
error->all(FLERR,"Invalid dipole length in set command");
setrandom(DIPOLE_RANDOM);
iarg += 3;
} else if (strcmp(arg[iarg],"quat") == 0) {
if (iarg+5 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else xvalue = force->numeric(FLERR,arg[iarg+1]);
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) varparse(arg[iarg+2],2);
else yvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) varparse(arg[iarg+3],3);
else zvalue = force->numeric(FLERR,arg[iarg+3]);
if (strstr(arg[iarg+4],"v_") == arg[iarg+4]) varparse(arg[iarg+4],4);
else wvalue = force->numeric(FLERR,arg[iarg+4]);
if (!atom->ellipsoid_flag && !atom->tri_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(QUAT);
iarg += 5;
} else if (strcmp(arg[iarg],"quat/random") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
ivalue = force->inumeric(FLERR,arg[iarg+1]);
if (!atom->ellipsoid_flag && !atom->tri_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (ivalue <= 0)
error->all(FLERR,"Invalid random number seed in set command");
setrandom(QUAT_RANDOM);
iarg += 2;
} else if (strcmp(arg[iarg],"theta") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else {
dvalue = force->numeric(FLERR,arg[iarg+1]);
dvalue *= MY_PI/180.0;
}
if (!atom->line_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(THETA);
iarg += 2;
} else if (strcmp(arg[iarg],"angmom") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else xvalue = force->numeric(FLERR,arg[iarg+1]);
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) varparse(arg[iarg+2],2);
else yvalue = force->numeric(FLERR,arg[iarg+2]);
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) varparse(arg[iarg+3],3);
else zvalue = force->numeric(FLERR,arg[iarg+3]);
if (!atom->ellipsoid_flag && !atom->tri_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(ANGMOM);
iarg += 4;
} else if (strcmp(arg[iarg],"diameter") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->radius_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(DIAMETER);
iarg += 2;
} else if (strcmp(arg[iarg],"density") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->rmass_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (dvalue <= 0.0) error->all(FLERR,"Invalid density in set command");
set(DENSITY);
iarg += 2;
} else if (strcmp(arg[iarg],"volume") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->vfrac_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (dvalue <= 0.0) error->all(FLERR,"Invalid volume in set command");
set(VOLUME);
iarg += 2;
} else if (strcmp(arg[iarg],"image") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal set command");
ximageflag = yimageflag = zimageflag = 0;
if (strcmp(arg[iarg+1],"NULL") != 0) {
ximageflag = 1;
ximage = force->inumeric(FLERR,arg[iarg+1]);
}
if (strcmp(arg[iarg+2],"NULL") != 0) {
yimageflag = 1;
yimage = force->inumeric(FLERR,arg[iarg+2]);
}
if (strcmp(arg[iarg+3],"NULL") != 0) {
zimageflag = 1;
zimage = force->inumeric(FLERR,arg[iarg+3]);
}
if (ximageflag && ximage && !domain->xperiodic)
error->all(FLERR,
"Cannot set non-zero image flag for non-periodic dimension");
if (yimageflag && yimage && !domain->yperiodic)
error->all(FLERR,
"Cannot set non-zero image flag for non-periodic dimension");
if (zimageflag && zimage && !domain->zperiodic)
error->all(FLERR,
"Cannot set non-zero image flag for non-periodic dimension");
set(IMAGE);
iarg += 4;
} else if (strcmp(arg[iarg],"bond") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
ivalue = force->inumeric(FLERR,arg[iarg+1]);
if (atom->avec->bonds_allow == 0)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (ivalue <= 0 || ivalue > atom->nbondtypes)
error->all(FLERR,"Invalid value in set command");
topology(BOND);
iarg += 2;
} else if (strcmp(arg[iarg],"angle") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
ivalue = force->inumeric(FLERR,arg[iarg+1]);
if (atom->avec->angles_allow == 0)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (ivalue <= 0 || ivalue > atom->nangletypes)
error->all(FLERR,"Invalid value in set command");
topology(ANGLE);
iarg += 2;
} else if (strcmp(arg[iarg],"dihedral") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
ivalue = force->inumeric(FLERR,arg[iarg+1]);
if (atom->avec->dihedrals_allow == 0)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (ivalue <= 0 || ivalue > atom->ndihedraltypes)
error->all(FLERR,"Invalid value in set command");
topology(DIHEDRAL);
iarg += 2;
} else if (strcmp(arg[iarg],"improper") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
ivalue = force->inumeric(FLERR,arg[iarg+1]);
if (atom->avec->impropers_allow == 0)
error->all(FLERR,"Cannot set this attribute for this atom style");
if (ivalue <= 0 || ivalue > atom->nimpropertypes)
error->all(FLERR,"Invalid value in set command");
topology(IMPROPER);
iarg += 2;
} else if (strcmp(arg[iarg],"meso_e") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->e_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(MESO_E);
iarg += 2;
} else if (strcmp(arg[iarg],"meso_cv") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->cv_flag)
error->all(FLERR,"Cannot set this attribute for this atom style");
set(MESO_CV);
iarg += 2;
} else if (strcmp(arg[iarg],"meso_rho") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
if (!atom->rho_flag)
error->all(FLERR,"Cannot set meso_rho for this atom style");
set(MESO_RHO);
iarg += 2;
} else if (strstr(arg[iarg],"i_") == arg[iarg]) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else ivalue = force->inumeric(FLERR,arg[iarg+1]);
int flag;
index_custom = atom->find_custom(&arg[iarg][2],flag);
if (index_custom < 0 || flag != 0)
error->all(FLERR,"Set command integer vector does not exist");
set(INAME);
iarg += 2;
} else if (strstr(arg[iarg],"d_") == arg[iarg]) {
if (iarg+2 > narg) error->all(FLERR,"Illegal set command");
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
else dvalue = force->numeric(FLERR,arg[iarg+1]);
int flag;
index_custom = atom->find_custom(&arg[iarg][2],flag);
if (index_custom < 0 || flag != 1)
error->all(FLERR,"Set command floating point vector does not exist");
set(DNAME);
iarg += 2;
} else error->all(FLERR,"Illegal set command");
// statistics
MPI_Allreduce(&count,&allcount,1,MPI_INT,MPI_SUM,world);
if (comm->me == 0) {
if (screen) fprintf(screen," %d settings made for %s\n",
allcount,arg[origarg]);
if (logfile) fprintf(logfile," %d settings made for %s\n",
allcount,arg[origarg]);
}
}
// free local memory
delete [] id;
delete [] select;
}
/* ----------------------------------------------------------------------
select atoms according to ATOM, MOLECULE, TYPE, GROUP, REGION style
n = nlocal or nlocal+nghost depending on keyword
------------------------------------------------------------------------- */
void Set::selection(int n)
{
delete [] select;
select = new int[n];
int nlo,nhi;
if (style == ATOM_SELECT) {
if (atom->tag_enable == 0)
error->all(FLERR,"Cannot use set atom with no atom IDs defined");
bigint nlobig,nhibig;
force->boundsbig(id,MAXTAGINT,nlobig,nhibig);
tagint *tag = atom->tag;
for (int i = 0; i < n; i++)
if (tag[i] >= nlobig && tag[i] <= nhibig) select[i] = 1;
else select[i] = 0;
} else if (style == MOL_SELECT) {
if (atom->molecule_flag == 0)
error->all(FLERR,"Cannot use set mol with no molecule IDs defined");
bigint nlobig,nhibig;
force->boundsbig(id,MAXTAGINT,nlobig,nhibig);
tagint *molecule = atom->molecule;
for (int i = 0; i < n; i++)
if (molecule[i] >= nlobig && molecule[i] <= nhibig) select[i] = 1;
else select[i] = 0;
} else if (style == TYPE_SELECT) {
force->bounds(id,atom->ntypes,nlo,nhi);
int *type = atom->type;
for (int i = 0; i < n; i++)
if (type[i] >= nlo && type[i] <= nhi) select[i] = 1;
else select[i] = 0;
} else if (style == GROUP_SELECT) {
int igroup = group->find(id);
if (igroup == -1) error->all(FLERR,"Could not find set group ID");
int groupbit = group->bitmask[igroup];
int *mask = atom->mask;
for (int i = 0; i < n; i++)
if (mask[i] & groupbit) select[i] = 1;
else select[i] = 0;
} else if (style == REGION_SELECT) {
int iregion = domain->find_region(id);
if (iregion == -1) error->all(FLERR,"Set region ID does not exist");
+ domain->regions[iregion]->prematch();
double **x = atom->x;
for (int i = 0; i < n; i++)
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]))
select[i] = 1;
else select[i] = 0;
}
}
/* ----------------------------------------------------------------------
set owned atom properties directly
either scalar or per-atom values from atom-style variable(s)
------------------------------------------------------------------------- */
void Set::set(int keyword)
{
// evaluate atom-style variable(s) if necessary
vec1 = vec2 = vec3 = vec4 = NULL;
if (varflag) {
int nlocal = atom->nlocal;
if (varflag1) {
memory->create(vec1,nlocal,"set:vec1");
input->variable->compute_atom(ivar1,0,vec1,1,0);
}
if (varflag2) {
memory->create(vec2,nlocal,"set:vec2");
input->variable->compute_atom(ivar2,0,vec2,1,0);
}
if (varflag3) {
memory->create(vec3,nlocal,"set:vec3");
input->variable->compute_atom(ivar3,0,vec3,1,0);
}
if (varflag4) {
memory->create(vec4,nlocal,"set:vec4");
input->variable->compute_atom(ivar4,0,vec4,1,0);
}
}
// loop over selected atoms
AtomVecEllipsoid *avec_ellipsoid =
(AtomVecEllipsoid *) atom->style_match("ellipsoid");
AtomVecLine *avec_line = (AtomVecLine *) atom->style_match("line");
AtomVecTri *avec_tri = (AtomVecTri *) atom->style_match("tri");
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (!select[i]) continue;
// overwrite dvalue, ivalue, xyzw value if variables defined
// else the input script scalar value remains in place
if (varflag1) {
dvalue = xvalue = vec1[i];
ivalue = static_cast<int> (dvalue);
}
if (varflag2) yvalue = vec2[i];
if (varflag3) zvalue = vec3[i];
if (varflag4) wvalue = vec4[i];
// set values in per-atom arrays
// error check here in case atom-style variables generated bogus value
if (keyword == TYPE) {
if (ivalue <= 0 || ivalue > atom->ntypes)
error->one(FLERR,"Invalid value in set command");
atom->type[i] = ivalue;
}
else if (keyword == MOLECULE) atom->molecule[i] = ivalue;
else if (keyword == X) atom->x[i][0] = dvalue;
else if (keyword == Y) atom->x[i][1] = dvalue;
else if (keyword == Z) atom->x[i][2] = dvalue;
else if (keyword == CHARGE) atom->q[i] = dvalue;
else if (keyword == MASS) {
if (dvalue <= 0.0) error->one(FLERR,"Invalid mass in set command");
atom->rmass[i] = dvalue;
}
else if (keyword == DIAMETER) {
if (dvalue < 0.0) error->one(FLERR,"Invalid diameter in set command");
atom->radius[i] = 0.5 * dvalue;
}
else if (keyword == VOLUME) {
if (dvalue <= 0.0) error->one(FLERR,"Invalid volume in set command");
atom->vfrac[i] = dvalue;
}
else if (keyword == MESO_E) atom->e[i] = dvalue;
else if (keyword == MESO_CV) atom->cv[i] = dvalue;
else if (keyword == MESO_RHO) atom->rho[i] = dvalue;
// set shape of ellipsoidal particle
else if (keyword == SHAPE) {
if (xvalue < 0.0 || yvalue < 0.0 || zvalue < 0.0)
error->one(FLERR,"Invalid shape in set command");
if (xvalue > 0.0 || yvalue > 0.0 || zvalue > 0.0) {
if (xvalue == 0.0 || yvalue == 0.0 || zvalue == 0.0)
error->one(FLERR,"Invalid shape in set command");
}
avec_ellipsoid->set_shape(i,0.5*xvalue,0.5*yvalue,0.5*zvalue);
}
// set length of line particle
else if (keyword == LENGTH) {
if (dvalue < 0.0) error->one(FLERR,"Invalid length in set command");
avec_line->set_length(i,dvalue);
}
// set corners of tri particle
else if (keyword == TRI) {
if (dvalue < 0.0) error->one(FLERR,"Invalid length in set command");
avec_tri->set_equilateral(i,dvalue);
}
// set rmass via density
// if radius > 0.0, treat as sphere
// if shape > 0.0, treat as ellipsoid
// if length > 0.0, treat as line
// if area > 0.0, treat as tri
// else set rmass to density directly
else if (keyword == DENSITY) {
if (dvalue <= 0.0) error->one(FLERR,"Invalid density in set command");
if (atom->radius_flag && atom->radius[i] > 0.0)
atom->rmass[i] = 4.0*MY_PI/3.0 *
atom->radius[i]*atom->radius[i]*atom->radius[i] * dvalue;
else if (atom->ellipsoid_flag && atom->ellipsoid[i] >= 0) {
double *shape = avec_ellipsoid->bonus[atom->ellipsoid[i]].shape;
atom->rmass[i] = 4.0*MY_PI/3.0 * shape[0]*shape[1]*shape[2] * dvalue;
} else if (atom->line_flag && atom->line[i] >= 0) {
double length = avec_line->bonus[atom->line[i]].length;
atom->rmass[i] = length * dvalue;
} else if (atom->tri_flag && atom->tri[i] >= 0) {
double *c1 = avec_tri->bonus[atom->tri[i]].c1;
double *c2 = avec_tri->bonus[atom->tri[i]].c2;
double *c3 = avec_tri->bonus[atom->tri[i]].c3;
double c2mc1[2],c3mc1[3];
MathExtra::sub3(c2,c1,c2mc1);
MathExtra::sub3(c3,c1,c3mc1);
double norm[3];
MathExtra::cross3(c2mc1,c3mc1,norm);
double area = 0.5 * MathExtra::len3(norm);
atom->rmass[i] = area * dvalue;
} else atom->rmass[i] = dvalue;
}
// set dipole moment
else if (keyword == DIPOLE) {
double **mu = atom->mu;
mu[i][0] = xvalue;
mu[i][1] = yvalue;
mu[i][2] = zvalue;
mu[i][3] = sqrt(mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] +
mu[i][2]*mu[i][2]);
}
// set quaternion orientation of ellipsoid or tri particle
else if (keyword == QUAT) {
double *quat;
if (avec_ellipsoid && atom->ellipsoid[i] >= 0)
quat = avec_ellipsoid->bonus[atom->ellipsoid[i]].quat;
else if (avec_tri && atom->tri[i] >= 0)
quat = avec_tri->bonus[atom->tri[i]].quat;
else
error->one(FLERR,"Cannot set quaternion for atom that has none");
double theta2 = MY_PI2 * wvalue/180.0;
double sintheta2 = sin(theta2);
quat[0] = cos(theta2);
quat[1] = xvalue * sintheta2;
quat[2] = yvalue * sintheta2;
quat[3] = zvalue * sintheta2;
MathExtra::qnormalize(quat);
}
// set theta of line particle
else if (keyword == THETA) {
if (atom->line[i] < 0)
error->one(FLERR,"Cannot set theta for atom that is not a line");
avec_line->bonus[atom->line[i]].theta = dvalue;
}
// set angmom of ellipsoidal or tri particle
else if (keyword == ANGMOM) {
atom->angmom[i][0] = xvalue;
atom->angmom[i][1] = yvalue;
atom->angmom[i][2] = zvalue;
}
// reset any or all of 3 image flags
else if (keyword == IMAGE) {
int xbox = (atom->image[i] & IMGMASK) - IMGMAX;
int ybox = (atom->image[i] >> IMGBITS & IMGMASK) - IMGMAX;
int zbox = (atom->image[i] >> IMG2BITS) - IMGMAX;
if (ximageflag) xbox = ximage;
if (yimageflag) ybox = yimage;
if (zimageflag) zbox = zimage;
atom->image[i] = ((imageint) (xbox + IMGMAX) & IMGMASK) |
(((imageint) (ybox + IMGMAX) & IMGMASK) << IMGBITS) |
(((imageint) (zbox + IMGMAX) & IMGMASK) << IMG2BITS);
}
// set value for custom integer or double vector
else if (keyword == INAME) {
atom->ivector[index_custom][i] = ivalue;
}
else if (keyword == DNAME) {
atom->dvector[index_custom][i] = dvalue;
}
count++;
}
// clear up per-atom memory if allocated
memory->destroy(vec1);
memory->destroy(vec2);
memory->destroy(vec3);
memory->destroy(vec4);
}
/* ----------------------------------------------------------------------
set an owned atom property randomly
set seed based on atom coordinates
make atom result independent of what proc owns it
------------------------------------------------------------------------- */
void Set::setrandom(int keyword)
{
int i;
AtomVecEllipsoid *avec_ellipsoid =
(AtomVecEllipsoid *) atom->style_match("ellipsoid");
AtomVecTri *avec_tri = (AtomVecTri *) atom->style_match("tri");
RanPark *random = new RanPark(lmp,1);
double **x = atom->x;
int seed = ivalue;
// set fraction of atom types to newtype
if (keyword == TYPE_FRACTION) {
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++)
if (select[i]) {
random->reset(seed,x[i]);
if (random->uniform() > fraction) continue;
atom->type[i] = newtype;
count++;
}
// set dipole moments to random orientations in 3d or 2d
// dipole length is determined by dipole type array
} else if (keyword == DIPOLE_RANDOM) {
double **mu = atom->mu;
int nlocal = atom->nlocal;
double msq,scale;
if (domain->dimension == 3) {
for (i = 0; i < nlocal; i++)
if (select[i]) {
random->reset(seed,x[i]);
mu[i][0] = random->uniform() - 0.5;
mu[i][1] = random->uniform() - 0.5;
mu[i][2] = random->uniform() - 0.5;
msq = mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2];
scale = dvalue/sqrt(msq);
mu[i][0] *= scale;
mu[i][1] *= scale;
mu[i][2] *= scale;
mu[i][3] = dvalue;
count++;
}
} else {
for (i = 0; i < nlocal; i++)
if (select[i]) {
random->reset(seed,x[i]);
mu[i][0] = random->uniform() - 0.5;
mu[i][1] = random->uniform() - 0.5;
mu[i][2] = 0.0;
msq = mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1];
scale = dvalue/sqrt(msq);
mu[i][0] *= scale;
mu[i][1] *= scale;
mu[i][3] = dvalue;
count++;
}
}
// set quaternions to random orientations in 3d or 2d
} else if (keyword == QUAT_RANDOM) {
int nlocal = atom->nlocal;
double *quat;
if (domain->dimension == 3) {
double s,t1,t2,theta1,theta2;
for (i = 0; i < nlocal; i++)
if (select[i]) {
if (avec_ellipsoid && atom->ellipsoid[i] >= 0)
quat = avec_ellipsoid->bonus[atom->ellipsoid[i]].quat;
else if (avec_tri && atom->tri[i] >= 0)
quat = avec_tri->bonus[atom->tri[i]].quat;
else
error->one(FLERR,"Cannot set quaternion for atom that has none");
random->reset(seed,x[i]);
s = random->uniform();
t1 = sqrt(1.0-s);
t2 = sqrt(s);
theta1 = 2.0*MY_PI*random->uniform();
theta2 = 2.0*MY_PI*random->uniform();
quat[0] = cos(theta2)*t2;
quat[1] = sin(theta1)*t1;
quat[2] = cos(theta1)*t1;
quat[3] = sin(theta2)*t2;
count++;
}
} else {
double theta2;
for (i = 0; i < nlocal; i++)
if (select[i]) {
if (avec_ellipsoid && atom->ellipsoid[i] >= 0)
quat = avec_ellipsoid->bonus[atom->ellipsoid[i]].quat;
else
error->one(FLERR,"Cannot set quaternion for atom that has none");
random->reset(seed,x[i]);
theta2 = MY_PI*random->uniform();
quat[0] = cos(theta2);
quat[1] = 0.0;
quat[2] = 0.0;
quat[3] = sin(theta2);
count++;
}
}
}
delete random;
}
/* ---------------------------------------------------------------------- */
void Set::topology(int keyword)
{
int m,atom1,atom2,atom3,atom4;
// error check
if (atom->molecular == 2)
error->all(FLERR,"Cannot set bond topology types for atom style template");
// border swap to acquire ghost atom info
// enforce PBC before in case atoms are outside box
// init entire system since comm->exchange is done
// comm::init needs neighbor::init needs pair::init needs kspace::init, etc
if (comm->me == 0 && screen) fprintf(screen," system init for set ...\n");
lmp->init();
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
domain->reset_box();
comm->setup();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
// select both owned and ghost atoms
selection(atom->nlocal + atom->nghost);
// for BOND, each of 2 atoms must be in group
if (keyword == BOND) {
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
for (m = 0; m < atom->num_bond[i]; m++) {
atom1 = atom->map(atom->bond_atom[i][m]);
if (atom1 == -1) error->one(FLERR,"Bond atom missing in set command");
if (select[i] && select[atom1]) {
atom->bond_type[i][m] = ivalue;
count++;
}
}
}
// for ANGLE, each of 3 atoms must be in group
if (keyword == ANGLE) {
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
for (m = 0; m < atom->num_angle[i]; m++) {
atom1 = atom->map(atom->angle_atom1[i][m]);
atom2 = atom->map(atom->angle_atom2[i][m]);
atom3 = atom->map(atom->angle_atom3[i][m]);
if (atom1 == -1 || atom2 == -1 || atom3 == -1)
error->one(FLERR,"Angle atom missing in set command");
if (select[atom1] && select[atom2] && select[atom3]) {
atom->angle_type[i][m] = ivalue;
count++;
}
}
}
// for DIHEDRAL, each of 4 atoms must be in group
if (keyword == DIHEDRAL) {
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
for (m = 0; m < atom->num_dihedral[i]; m++) {
atom1 = atom->map(atom->dihedral_atom1[i][m]);
atom2 = atom->map(atom->dihedral_atom2[i][m]);
atom3 = atom->map(atom->dihedral_atom3[i][m]);
atom4 = atom->map(atom->dihedral_atom4[i][m]);
if (atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1)
error->one(FLERR,"Dihedral atom missing in set command");
if (select[atom1] && select[atom2] && select[atom3] && select[atom4]) {
atom->dihedral_type[i][m] = ivalue;
count++;
}
}
}
// for IMPROPER, each of 4 atoms must be in group
if (keyword == IMPROPER) {
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++)
for (m = 0; m < atom->num_improper[i]; m++) {
atom1 = atom->map(atom->improper_atom1[i][m]);
atom2 = atom->map(atom->improper_atom2[i][m]);
atom3 = atom->map(atom->improper_atom3[i][m]);
atom4 = atom->map(atom->improper_atom4[i][m]);
if (atom1 == -1 || atom2 == -1 || atom3 == -1 || atom4 == -1)
error->one(FLERR,"Improper atom missing in set command");
if (select[atom1] && select[atom2] && select[atom3] && select[atom4]) {
atom->improper_type[i][m] = ivalue;
count++;
}
}
}
}
/* ---------------------------------------------------------------------- */
void Set::varparse(char *name, int m)
{
varflag = 1;
name = &name[2];
int n = strlen(name) + 1;
char *str = new char[n];
strcpy(str,name);
int ivar = input->variable->find(str);
delete [] str;
if (ivar < 0)
error->all(FLERR,"Variable name for set command does not exist");
if (!input->variable->atomstyle(ivar))
error->all(FLERR,"Variable for set command is invalid style");
if (m == 1) {
varflag1 = 1; ivar1 = ivar;
} else if (m == 2) {
varflag2 = 1; ivar2 = ivar;
} else if (m == 3) {
varflag3 = 1; ivar3 = ivar;
} else if (m == 4) {
varflag4 = 1; ivar4 = ivar;
}
}
diff --git a/src/thermo.cpp b/src/thermo.cpp
index 6708758b8..38f7927f5 100644
--- a/src/thermo.cpp
+++ b/src/thermo.cpp
@@ -1,2055 +1,2055 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "lmptype.h"
#include "mpi.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "thermo.h"
#include "atom.h"
#include "update.h"
#include "comm.h"
#include "domain.h"
#include "universe.h"
#include "lattice.h"
#include "group.h"
#include "modify.h"
#include "fix.h"
#include "compute.h"
#include "input.h"
#include "variable.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "kspace.h"
#include "output.h"
#include "timer.h"
#include "math_const.h"
#include "memory.h"
#include "error.h"
#include "universe.h"
#include "math_const.h"
using namespace LAMMPS_NS;
using namespace MathConst;
// customize a new keyword by adding to this list:
// step, elapsed, elaplong, dt, time, cpu, tpcpu, spcpu, cpuremain, part
// atoms, temp, press, pe, ke, etotal, enthalpy
// evdwl, ecoul, epair, ebond, eangle, edihed, eimp, emol, elong, etail
// vol, density, lx, ly, lz, xlo, xhi, ylo, yhi, zlo, zhi, xy, xz, yz,
// xlat, ylat, zlat
// bonds, angles, dihedrals, impropers,
// pxx, pyy, pzz, pxy, pxz, pyz
// fmax, fnorm
// cella, cellb, cellc, cellalpha, cellbeta, cellgamma
// customize a new thermo style by adding a DEFINE to this list
// also insure allocation of line string is correct in constructor
#define ONE "step temp epair emol etotal press"
#define MULTI "etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press"
enum{IGNORE,WARN,ERROR}; // same as several files
enum{ONELINE,MULTILINE};
enum{INT,FLOAT,BIGINT};
enum{SCALAR,VECTOR,ARRAY};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
#define DELTA 8
/* ---------------------------------------------------------------------- */
Thermo::Thermo(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
{
MPI_Comm_rank(world,&me);
int n = strlen(arg[0]) + 1;
style = new char[n];
strcpy(style,arg[0]);
// set thermo_modify defaults
modified = 0;
normuserflag = 0;
lineflag = ONELINE;
lostflag = lostbond = ERROR;
lostbefore = 0;
flushflag = 0;
// set style and corresponding lineflag
// custom style builds its own line of keywords
// customize a new thermo style by adding to if statement
// allocate line string used for 3 tasks
// concat of custom style args
// one-time thermo output of header line
// each line of numeric thermo output
// 256 = extra for ONE or MULTI string or multi formatting
// 64 = max per-arg chars in header or numeric output
if (strcmp(style,"one") == 0) {
line = new char[256+6*64];
strcpy(line,ONE);
} else if (strcmp(style,"multi") == 0) {
line = new char[256+12*64];
strcpy(line,MULTI);
lineflag = MULTILINE;
} else if (strcmp(style,"custom") == 0) {
if (narg == 1) error->all(FLERR,"Illegal thermo style custom command");
line = new char[256+narg*64];
line[0] = '\0';
for (int iarg = 1; iarg < narg; iarg++) {
strcat(line,arg[iarg]);
strcat(line," ");
}
line[strlen(line)-1] = '\0';
} else error->all(FLERR,"Illegal thermo style command");
// ptrs, flags, IDs for compute objects thermo may use or create
temperature = NULL;
pressure = NULL;
pe = NULL;
index_temp = index_press_scalar = index_press_vector = index_pe = -1;
id_temp = (char *) "thermo_temp";
id_press = (char *) "thermo_press";
id_pe = (char *) "thermo_pe";
// count fields in line
// allocate per-field memory
// process line of keywords
nfield_initial = atom->count_words(line);
allocate();
parse_fields(line);
// format strings
char *bigint_format = (char *) BIGINT_FORMAT;
char *fformat_multi = (char *) "---------------- Step %%8%s ----- "
"CPU = %%11.4f (sec) ----------------";
sprintf(format_multi,fformat_multi,&bigint_format[1]);
format_float_one_def = (char *) "%12.8g";
format_float_multi_def = (char *) "%14.4f";
format_int_one_def = (char *) "%8d";
format_int_multi_def = (char *) "%14d";
sprintf(format_bigint_one_def,"%%8%s",&bigint_format[1]);
sprintf(format_bigint_multi_def,"%%14%s",&bigint_format[1]);
format_float_user = NULL;
format_int_user = NULL;
format_bigint_user = NULL;
}
/* ---------------------------------------------------------------------- */
Thermo::~Thermo()
{
delete [] style;
delete [] line;
deallocate();
// format strings
delete [] format_float_user;
delete [] format_int_user;
delete [] format_bigint_user;
}
/* ---------------------------------------------------------------------- */
void Thermo::init()
{
int i,n;
// set normvalue to default setting unless user has specified it
if (normuserflag) normvalue = normuser;
else if (strcmp(update->unit_style,"lj") == 0) normvalue = 1;
else normvalue = 0;
// add Volume field if volume changes and not style = custom
// this check must come after domain init, so box_change is set
nfield = nfield_initial;
if (domain->box_change && strcmp(style,"custom") != 0)
addfield("Volume",&Thermo::compute_vol,FLOAT);
// set format string for each field
// include keyword if lineflag = MULTILINE
// add '/n' every 3 values if lineflag = MULTILINE
// add trailing '/n' to last value
char *ptr;
for (i = 0; i < nfield; i++) {
format[i][0] = '\0';
if (lineflag == MULTILINE && i % 3 == 0) strcat(format[i],"\n");
if (format_user[i]) ptr = format_user[i];
else if (vtype[i] == FLOAT) {
if (format_float_user) ptr = format_float_user;
else if (lineflag == ONELINE) ptr = format_float_one_def;
else if (lineflag == MULTILINE) ptr = format_float_multi_def;
} else if (vtype[i] == INT) {
if (format_int_user) ptr = format_int_user;
else if (lineflag == ONELINE) ptr = format_int_one_def;
else if (lineflag == MULTILINE) ptr = format_int_multi_def;
} else if (vtype[i] == BIGINT) {
if (format_bigint_user) ptr = format_bigint_user;
else if (lineflag == ONELINE) ptr = format_bigint_one_def;
else if (lineflag == MULTILINE) ptr = format_bigint_multi_def;
}
n = strlen(format[i]);
if (lineflag == ONELINE) sprintf(&format[i][n],"%s ",ptr);
else sprintf(&format[i][n],"%-8s = %s ",keyword[i],ptr);
if (i == nfield-1) strcat(format[i],"\n");
}
// find current ptr for each Compute ID
// cudable = 0 if any compute used by Thermo is non-CUDA
cudable = 1;
int icompute;
for (i = 0; i < ncompute; i++) {
icompute = modify->find_compute(id_compute[i]);
if (icompute < 0) error->all(FLERR,"Could not find thermo compute ID");
computes[i] = modify->compute[icompute];
cudable = cudable && computes[i]->cudable;
}
// find current ptr for each Fix ID
// check that fix frequency is acceptable with thermo output frequency
int ifix;
for (i = 0; i < nfix; i++) {
ifix = modify->find_fix(id_fix[i]);
if (ifix < 0) error->all(FLERR,"Could not find thermo fix ID");
fixes[i] = modify->fix[ifix];
if (output->thermo_every % fixes[i]->global_freq)
error->all(FLERR,"Thermo and fix not computed at compatible times");
}
// find current ptr for each Variable ID
int ivariable;
for (i = 0; i < nvariable; i++) {
ivariable = input->variable->find(id_variable[i]);
if (ivariable < 0)
error->all(FLERR,"Could not find thermo variable name");
variables[i] = ivariable;
}
// set ptrs to keyword-specific Compute objects
if (index_temp >= 0) temperature = computes[index_temp];
if (index_press_scalar >= 0) pressure = computes[index_press_scalar];
if (index_press_vector >= 0) pressure = computes[index_press_vector];
if (index_pe >= 0) pe = computes[index_pe];
}
/* ---------------------------------------------------------------------- */
void Thermo::header()
{
if (lineflag == MULTILINE) return;
int loc = 0;
for (int i = 0; i < nfield; i++)
loc += sprintf(&line[loc],"%s ",keyword[i]);
sprintf(&line[loc],"\n");
if (me == 0) {
if (screen) fprintf(screen,"%s",line);
if (logfile) fprintf(logfile,"%s",line);
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute(int flag)
{
int i;
firststep = flag;
bigint ntimestep = update->ntimestep;
// check for lost atoms
// turn off normflag if natoms = 0 to avoid divide by 0
natoms = lost_check();
if (natoms == 0) normflag = 0;
else normflag = normvalue;
// invoke Compute methods needed for thermo keywords
for (i = 0; i < ncompute; i++)
if (compute_which[i] == SCALAR) {
if (!(computes[i]->invoked_flag & INVOKED_SCALAR)) {
computes[i]->compute_scalar();
computes[i]->invoked_flag |= INVOKED_SCALAR;
}
} else if (compute_which[i] == VECTOR) {
if (!(computes[i]->invoked_flag & INVOKED_VECTOR)) {
computes[i]->compute_vector();
computes[i]->invoked_flag |= INVOKED_VECTOR;
}
} else if (compute_which[i] == ARRAY) {
if (!(computes[i]->invoked_flag & INVOKED_ARRAY)) {
computes[i]->compute_array();
computes[i]->invoked_flag |= INVOKED_ARRAY;
}
}
// if lineflag = MULTILINE, prepend step/cpu header line
int loc = 0;
if (lineflag == MULTILINE) {
double cpu;
if (flag) cpu = timer->elapsed(Timer::TOTAL);
else cpu = 0.0;
loc = sprintf(&line[loc],format_multi,ntimestep,cpu);
}
// add each thermo value to line with its specific format
for (ifield = 0; ifield < nfield; ifield++) {
(this->*vfunc[ifield])();
if (vtype[ifield] == FLOAT)
loc += sprintf(&line[loc],format[ifield],dvalue);
else if (vtype[ifield] == INT)
loc += sprintf(&line[loc],format[ifield],ivalue);
else if (vtype[ifield] == BIGINT) {
loc += sprintf(&line[loc],format[ifield],bivalue);
}
}
// print line to screen and logfile
if (me == 0) {
if (screen) fprintf(screen,"%s",line);
if (logfile) {
fprintf(logfile,"%s",line);
if (flushflag) fflush(logfile);
}
}
}
/* ----------------------------------------------------------------------
check for lost atoms, return current number of atoms
------------------------------------------------------------------------- */
bigint Thermo::lost_check()
{
// ntotal = current # of atoms
bigint ntotal;
bigint nblocal = atom->nlocal;
MPI_Allreduce(&nblocal,&ntotal,1,MPI_LMP_BIGINT,MPI_SUM,world);
if (ntotal < 0 || ntotal > MAXBIGINT)
error->all(FLERR,"Too many total atoms");
if (ntotal == atom->natoms) return ntotal;
// if not checking or already warned, just return
// reset total atom count
if (lostflag == IGNORE) return ntotal;
if (lostflag == WARN && lostbefore == 1) {
atom->natoms = ntotal;
return ntotal;
}
// error message
if (lostflag == ERROR) {
char str[64];
sprintf(str,
"Lost atoms: original " BIGINT_FORMAT " current " BIGINT_FORMAT,
atom->natoms,ntotal);
error->all(FLERR,str);
}
// warning message
char str[64];
sprintf(str,
"Lost atoms: original " BIGINT_FORMAT " current " BIGINT_FORMAT,
atom->natoms,ntotal);
if (me == 0) error->warning(FLERR,str,0);
// reset total atom count
atom->natoms = ntotal;
lostbefore = 1;
return ntotal;
}
/* ----------------------------------------------------------------------
modify thermo parameters
------------------------------------------------------------------------- */
void Thermo::modify_params(int narg, char **arg)
{
if (narg == 0) error->all(FLERR,"Illegal thermo_modify command");
modified = 1;
int iarg = 0;
while (iarg < narg) {
if (strcmp(arg[iarg],"temp") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (index_temp < 0) error->all(FLERR,"Thermo style does not use temp");
delete [] id_compute[index_temp];
int n = strlen(arg[iarg+1]) + 1;
id_compute[index_temp] = new char[n];
strcpy(id_compute[index_temp],arg[iarg+1]);
int icompute = modify->find_compute(arg[iarg+1]);
if (icompute < 0)
error->all(FLERR,"Could not find thermo_modify temperature ID");
temperature = modify->compute[icompute];
if (temperature->tempflag == 0)
error->all(FLERR,"Thermo_modify temperature ID does not "
"compute temperature");
if (temperature->igroup != 0 && comm->me == 0)
error->warning(FLERR,
"Temperature for thermo pressure is not for group all");
// reset id_temp of pressure to new temperature ID
// either pressure currently being used by thermo or "thermo_press"
if (index_press_scalar >= 0) {
icompute = modify->find_compute(id_compute[index_press_scalar]);
if (icompute < 0) error->all(FLERR,
"Pressure ID for thermo does not exist");
} else if (index_press_vector >= 0) {
icompute = modify->find_compute(id_compute[index_press_vector]);
if (icompute < 0) error->all(FLERR,
"Pressure ID for thermo does not exist");
} else icompute = modify->find_compute((char *) "thermo_press");
modify->compute[icompute]->reset_extra_compute_fix(arg[iarg+1]);
iarg += 2;
} else if (strcmp(arg[iarg],"press") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (index_press_scalar < 0 && index_press_vector < 0)
error->all(FLERR,"Thermo style does not use press");
if (index_press_scalar >= 0) {
delete [] id_compute[index_press_scalar];
int n = strlen(arg[iarg+1]) + 1;
id_compute[index_press_scalar] = new char[n];
strcpy(id_compute[index_press_scalar],arg[iarg+1]);
}
if (index_press_vector >= 0) {
delete [] id_compute[index_press_vector];
int n = strlen(arg[iarg+1]) + 1;
id_compute[index_press_vector] = new char[n];
strcpy(id_compute[index_press_vector],arg[iarg+1]);
}
int icompute = modify->find_compute(arg[iarg+1]);
if (icompute < 0) error->all(FLERR,
"Could not find thermo_modify pressure ID");
pressure = modify->compute[icompute];
if (pressure->pressflag == 0)
error->all(FLERR,"Thermo_modify pressure ID does not compute pressure");
iarg += 2;
} else if (strcmp(arg[iarg],"lost") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (strcmp(arg[iarg+1],"ignore") == 0) lostflag = IGNORE;
else if (strcmp(arg[iarg+1],"warn") == 0) lostflag = WARN;
else if (strcmp(arg[iarg+1],"error") == 0) lostflag = ERROR;
else error->all(FLERR,"Illegal thermo_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"lost/bond") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (strcmp(arg[iarg+1],"ignore") == 0) lostbond = IGNORE;
else if (strcmp(arg[iarg+1],"warn") == 0) lostbond = WARN;
else if (strcmp(arg[iarg+1],"error") == 0) lostbond = ERROR;
else error->all(FLERR,"Illegal thermo_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"norm") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
normuserflag = 1;
if (strcmp(arg[iarg+1],"no") == 0) normuser = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) normuser = 1;
else error->all(FLERR,"Illegal thermo_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"flush") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (strcmp(arg[iarg+1],"no") == 0) flushflag = 0;
else if (strcmp(arg[iarg+1],"yes") == 0) flushflag = 1;
else error->all(FLERR,"Illegal thermo_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"line") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (strcmp(arg[iarg+1],"one") == 0) lineflag = ONELINE;
else if (strcmp(arg[iarg+1],"multi") == 0) lineflag = MULTILINE;
else error->all(FLERR,"Illegal thermo_modify command");
iarg += 2;
} else if (strcmp(arg[iarg],"format") == 0) {
if (iarg+3 > narg) error->all(FLERR,"Illegal thermo_modify command");
if (strcmp(arg[iarg+1],"int") == 0) {
if (format_int_user) delete [] format_int_user;
int n = strlen(arg[iarg+2]) + 1;
format_int_user = new char[n];
strcpy(format_int_user,arg[iarg+2]);
if (format_bigint_user) delete [] format_bigint_user;
n = strlen(format_int_user) + 3;
format_bigint_user = new char[n];
char *ptr = strchr(format_int_user,'d');
if (ptr == NULL)
error->all(FLERR,
"Thermo_modify int format does not contain d character");
*ptr = '\0';
sprintf(format_bigint_user,"%s%s%s",format_int_user,
BIGINT_FORMAT,ptr+1);
*ptr = 'd';
} else if (strcmp(arg[iarg+1],"float") == 0) {
if (format_float_user) delete [] format_float_user;
int n = strlen(arg[iarg+2]) + 1;
format_float_user = new char[n];
strcpy(format_float_user,arg[iarg+2]);
} else {
int i = force->inumeric(FLERR,arg[iarg+1]) - 1;
if (i < 0 || i >= nfield_initial)
error->all(FLERR,"Illegal thermo_modify command");
if (format_user[i]) delete [] format_user[i];
int n = strlen(arg[iarg+2]) + 1;
format_user[i] = new char[n];
strcpy(format_user[i],arg[iarg+2]);
}
iarg += 3;
} else error->all(FLERR,"Illegal thermo_modify command");
}
}
/* ----------------------------------------------------------------------
allocate all per-field memory
------------------------------------------------------------------------- */
void Thermo::allocate()
{
// n = specified fields + Volume field (added at run time)
int n = nfield_initial + 1;
keyword = new char*[n];
for (int i = 0; i < n; i++) keyword[i] = new char[32];
vfunc = new FnPtr[n];
vtype = new int[n];
format = new char*[n];
for (int i = 0; i < n; i++) format[i] = new char[32];
format_user = new char*[n];
for (int i = 0; i < n; i++) format_user[i] = NULL;
field2index = new int[n];
argindex1 = new int[n];
argindex2 = new int[n];
// factor of 3 is max number of computes a single field can add
ncompute = 0;
id_compute = new char*[3*n];
compute_which = new int[3*n];
computes = new Compute*[3*n];
nfix = 0;
id_fix = new char*[n];
fixes = new Fix*[n];
nvariable = 0;
id_variable = new char*[n];
variables = new int[n];
}
/* ----------------------------------------------------------------------
deallocate all per-field memory
------------------------------------------------------------------------- */
void Thermo::deallocate()
{
int n = nfield_initial + 1;
for (int i = 0; i < n; i++) delete [] keyword[i];
delete [] keyword;
delete [] vfunc;
delete [] vtype;
for (int i = 0; i < n; i++) delete [] format[i];
delete [] format;
for (int i = 0; i < n; i++) delete [] format_user[i];
delete [] format_user;
delete [] field2index;
delete [] argindex1;
delete [] argindex2;
for (int i = 0; i < ncompute; i++) delete [] id_compute[i];
delete [] id_compute;
delete [] compute_which;
delete [] computes;
for (int i = 0; i < nfix; i++) delete [] id_fix[i];
delete [] id_fix;
delete [] fixes;
for (int i = 0; i < nvariable; i++) delete [] id_variable[i];
delete [] id_variable;
delete [] variables;
}
/* ----------------------------------------------------------------------
parse list of thermo keywords from str
set compute flags (temp, press, pe, etc)
------------------------------------------------------------------------- */
void Thermo::parse_fields(char *str)
{
nfield = 0;
// customize a new keyword by adding to if statement
char *word = strtok(str," \0");
while (word) {
if (strcmp(word,"step") == 0) {
addfield("Step",&Thermo::compute_step,BIGINT);
} else if (strcmp(word,"elapsed") == 0) {
addfield("Elapsed",&Thermo::compute_elapsed,BIGINT);
} else if (strcmp(word,"elaplong") == 0) {
addfield("Elaplong",&Thermo::compute_elapsed_long,BIGINT);
} else if (strcmp(word,"dt") == 0) {
addfield("Dt",&Thermo::compute_dt,FLOAT);
} else if (strcmp(word,"time") == 0) {
addfield("Time",&Thermo::compute_time,FLOAT);
} else if (strcmp(word,"cpu") == 0) {
addfield("CPU",&Thermo::compute_cpu,FLOAT);
} else if (strcmp(word,"tpcpu") == 0) {
addfield("T/CPU",&Thermo::compute_tpcpu,FLOAT);
} else if (strcmp(word,"spcpu") == 0) {
addfield("S/CPU",&Thermo::compute_spcpu,FLOAT);
} else if (strcmp(word,"cpuremain") == 0) {
addfield("CPULeft",&Thermo::compute_cpuremain,FLOAT);
} else if (strcmp(word,"part") == 0) {
addfield("Part",&Thermo::compute_part,INT);
} else if (strcmp(word,"atoms") == 0) {
addfield("Atoms",&Thermo::compute_atoms,BIGINT);
} else if (strcmp(word,"temp") == 0) {
addfield("Temp",&Thermo::compute_temp,FLOAT);
index_temp = add_compute(id_temp,SCALAR);
} else if (strcmp(word,"press") == 0) {
addfield("Press",&Thermo::compute_press,FLOAT);
index_press_scalar = add_compute(id_press,SCALAR);
} else if (strcmp(word,"pe") == 0) {
addfield("PotEng",&Thermo::compute_pe,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"ke") == 0) {
addfield("KinEng",&Thermo::compute_ke,FLOAT);
index_temp = add_compute(id_temp,SCALAR);
} else if (strcmp(word,"etotal") == 0) {
addfield("TotEng",&Thermo::compute_etotal,FLOAT);
index_temp = add_compute(id_temp,SCALAR);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"enthalpy") == 0) {
addfield("Enthalpy",&Thermo::compute_enthalpy,FLOAT);
index_temp = add_compute(id_temp,SCALAR);
index_press_scalar = add_compute(id_press,SCALAR);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"evdwl") == 0) {
addfield("E_vdwl",&Thermo::compute_evdwl,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"ecoul") == 0) {
addfield("E_coul",&Thermo::compute_ecoul,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"epair") == 0) {
addfield("E_pair",&Thermo::compute_epair,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"ebond") == 0) {
addfield("E_bond",&Thermo::compute_ebond,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"eangle") == 0) {
addfield("E_angle",&Thermo::compute_eangle,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"edihed") == 0) {
addfield("E_dihed",&Thermo::compute_edihed,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"eimp") == 0) {
addfield("E_impro",&Thermo::compute_eimp,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"emol") == 0) {
addfield("E_mol",&Thermo::compute_emol,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"elong") == 0) {
addfield("E_long",&Thermo::compute_elong,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"etail") == 0) {
addfield("E_tail",&Thermo::compute_etail,FLOAT);
index_pe = add_compute(id_pe,SCALAR);
} else if (strcmp(word,"vol") == 0) {
addfield("Volume",&Thermo::compute_vol,FLOAT);
} else if (strcmp(word,"density") == 0) {
addfield("Density",&Thermo::compute_density,FLOAT);
} else if (strcmp(word,"lx") == 0) {
addfield("Lx",&Thermo::compute_lx,FLOAT);
} else if (strcmp(word,"ly") == 0) {
addfield("Ly",&Thermo::compute_ly,FLOAT);
} else if (strcmp(word,"lz") == 0) {
addfield("Lz",&Thermo::compute_lz,FLOAT);
} else if (strcmp(word,"xlo") == 0) {
addfield("Xlo",&Thermo::compute_xlo,FLOAT);
} else if (strcmp(word,"xhi") == 0) {
addfield("Xhi",&Thermo::compute_xhi,FLOAT);
} else if (strcmp(word,"ylo") == 0) {
addfield("Ylo",&Thermo::compute_ylo,FLOAT);
} else if (strcmp(word,"yhi") == 0) {
addfield("Yhi",&Thermo::compute_yhi,FLOAT);
} else if (strcmp(word,"zlo") == 0) {
addfield("Zlo",&Thermo::compute_zlo,FLOAT);
} else if (strcmp(word,"zhi") == 0) {
addfield("Zhi",&Thermo::compute_zhi,FLOAT);
} else if (strcmp(word,"xy") == 0) {
addfield("Xy",&Thermo::compute_xy,FLOAT);
} else if (strcmp(word,"xz") == 0) {
addfield("Xz",&Thermo::compute_xz,FLOAT);
} else if (strcmp(word,"yz") == 0) {
addfield("Yz",&Thermo::compute_yz,FLOAT);
} else if (strcmp(word,"xlat") == 0) {
addfield("Xlat",&Thermo::compute_xlat,FLOAT);
} else if (strcmp(word,"ylat") == 0) {
addfield("Ylat",&Thermo::compute_ylat,FLOAT);
} else if (strcmp(word,"zlat") == 0) {
addfield("Zlat",&Thermo::compute_zlat,FLOAT);
} else if (strcmp(word,"bonds") == 0) {
addfield("Bonds",&Thermo::compute_bonds,BIGINT);
} else if (strcmp(word,"angles") == 0) {
addfield("Angles",&Thermo::compute_angles,BIGINT);
} else if (strcmp(word,"dihedrals") == 0) {
addfield("Diheds",&Thermo::compute_dihedrals,BIGINT);
} else if (strcmp(word,"impropers") == 0) {
addfield("Impros",&Thermo::compute_impropers,BIGINT);
} else if (strcmp(word,"pxx") == 0) {
addfield("Pxx",&Thermo::compute_pxx,FLOAT);
index_press_vector = add_compute(id_press,VECTOR);
} else if (strcmp(word,"pyy") == 0) {
addfield("Pyy",&Thermo::compute_pyy,FLOAT);
index_press_vector = add_compute(id_press,VECTOR);
} else if (strcmp(word,"pzz") == 0) {
addfield("Pzz",&Thermo::compute_pzz,FLOAT);
index_press_vector = add_compute(id_press,VECTOR);
} else if (strcmp(word,"pxy") == 0) {
addfield("Pxy",&Thermo::compute_pxy,FLOAT);
index_press_vector = add_compute(id_press,VECTOR);
} else if (strcmp(word,"pxz") == 0) {
addfield("Pxz",&Thermo::compute_pxz,FLOAT);
index_press_vector = add_compute(id_press,VECTOR);
} else if (strcmp(word,"pyz") == 0) {
addfield("Pyz",&Thermo::compute_pyz,FLOAT);
index_press_vector = add_compute(id_press,VECTOR);
} else if (strcmp(word,"fmax") == 0) {
addfield("Fmax",&Thermo::compute_fmax,FLOAT);
} else if (strcmp(word,"fnorm") == 0) {
addfield("Fnorm",&Thermo::compute_fnorm,FLOAT);
} else if (strcmp(word,"cella") == 0) {
addfield("Cella",&Thermo::compute_cella,FLOAT);
} else if (strcmp(word,"cellb") == 0) {
addfield("Cellb",&Thermo::compute_cellb,FLOAT);
} else if (strcmp(word,"cellc") == 0) {
addfield("Cellc",&Thermo::compute_cellc,FLOAT);
} else if (strcmp(word,"cellalpha") == 0) {
addfield("CellAlpha",&Thermo::compute_cellalpha,FLOAT);
} else if (strcmp(word,"cellbeta") == 0) {
addfield("CellBeta",&Thermo::compute_cellbeta,FLOAT);
} else if (strcmp(word,"cellgamma") == 0) {
addfield("CellGamma",&Thermo::compute_cellgamma,FLOAT);
// compute value = c_ID, fix value = f_ID, variable value = v_ID
// count trailing [] and store int arguments
// copy = at most 8 chars of ID to pass to addfield
} else if ((strncmp(word,"c_",2) == 0) || (strncmp(word,"f_",2) == 0) ||
(strncmp(word,"v_",2) == 0)) {
int n = strlen(word);
char *id = new char[n];
strcpy(id,&word[2]);
char copy[9];
strncpy(copy,id,8);
copy[8] = '\0';
// parse zero or one or two trailing brackets from ID
// argindex1,argindex2 = int inside each bracket pair, 0 if no bracket
char *ptr = strchr(id,'[');
if (ptr == NULL) argindex1[nfield] = 0;
else {
*ptr = '\0';
- argindex1[nfield] = input->variable->int_between_brackets(ptr);
+ argindex1[nfield] = input->variable->int_between_brackets(ptr,0);
ptr++;
if (*ptr == '[') {
- argindex2[nfield] = input->variable->int_between_brackets(ptr);
+ argindex2[nfield] = input->variable->int_between_brackets(ptr,0);
ptr++;
} else argindex2[nfield] = 0;
}
if (word[0] == 'c') {
n = modify->find_compute(id);
if (n < 0) error->all(FLERR,"Could not find thermo custom compute ID");
if (argindex1[nfield] == 0 && modify->compute[n]->scalar_flag == 0)
error->all(FLERR,"Thermo compute does not compute scalar");
if (argindex1[nfield] > 0 && argindex2[nfield] == 0) {
if (modify->compute[n]->vector_flag == 0)
error->all(FLERR,"Thermo compute does not compute vector");
if (argindex1[nfield] > modify->compute[n]->size_vector)
error->all(FLERR,"Thermo compute vector is accessed out-of-range");
}
if (argindex1[nfield] > 0 && argindex2[nfield] > 0) {
if (modify->compute[n]->array_flag == 0)
error->all(FLERR,"Thermo compute does not compute array");
if (argindex1[nfield] > modify->compute[n]->size_array_rows ||
argindex2[nfield] > modify->compute[n]->size_array_cols)
error->all(FLERR,"Thermo compute array is accessed out-of-range");
}
if (argindex1[nfield] == 0)
field2index[nfield] = add_compute(id,SCALAR);
else if (argindex2[nfield] == 0)
field2index[nfield] = add_compute(id,VECTOR);
else
field2index[nfield] = add_compute(id,ARRAY);
addfield(copy,&Thermo::compute_compute,FLOAT);
} else if (word[0] == 'f') {
n = modify->find_fix(id);
if (n < 0) error->all(FLERR,"Could not find thermo custom fix ID");
if (argindex1[nfield] == 0 && modify->fix[n]->scalar_flag == 0)
error->all(FLERR,"Thermo fix does not compute scalar");
if (argindex1[nfield] > 0 && argindex2[nfield] == 0) {
if (modify->fix[n]->vector_flag == 0)
error->all(FLERR,"Thermo fix does not compute vector");
if (argindex1[nfield] > modify->fix[n]->size_vector)
error->all(FLERR,"Thermo fix vector is accessed out-of-range");
}
if (argindex1[nfield] > 0 && argindex2[nfield] > 0) {
if (modify->fix[n]->array_flag == 0)
error->all(FLERR,"Thermo fix does not compute array");
if (argindex1[nfield] > modify->fix[n]->size_array_rows ||
argindex2[nfield] > modify->fix[n]->size_array_cols)
error->all(FLERR,"Thermo fix array is accessed out-of-range");
}
field2index[nfield] = add_fix(id);
addfield(copy,&Thermo::compute_fix,FLOAT);
} else if (word[0] == 'v') {
n = input->variable->find(id);
if (n < 0)
error->all(FLERR,"Could not find thermo custom variable name");
if (input->variable->equalstyle(n) == 0)
error->all(FLERR,
"Thermo custom variable is not equal-style variable");
if (argindex1[nfield])
error->all(FLERR,"Thermo custom variable cannot be indexed");
field2index[nfield] = add_variable(id);
addfield(copy,&Thermo::compute_variable,FLOAT);
}
delete [] id;
} else error->all(FLERR,"Invalid keyword in thermo_style custom command");
word = strtok(NULL," \0");
}
}
/* ----------------------------------------------------------------------
add field to list of quantities to print
------------------------------------------------------------------------- */
void Thermo::addfield(const char *key, FnPtr func, int typeflag)
{
strcpy(keyword[nfield],key);
vfunc[nfield] = func;
vtype[nfield] = typeflag;
nfield++;
}
/* ----------------------------------------------------------------------
add compute ID to list of Compute objects to call
return location of where this Compute is in list
if already in list with same which, do not add, just return index
------------------------------------------------------------------------- */
int Thermo::add_compute(const char *id, int which)
{
int icompute;
for (icompute = 0; icompute < ncompute; icompute++)
if ((strcmp(id,id_compute[icompute]) == 0) &&
which == compute_which[icompute]) break;
if (icompute < ncompute) return icompute;
int n = strlen(id) + 1;
id_compute[ncompute] = new char[n];
strcpy(id_compute[ncompute],id);
compute_which[ncompute] = which;
ncompute++;
return ncompute-1;
}
/* ----------------------------------------------------------------------
add fix ID to list of Fix objects to call
------------------------------------------------------------------------- */
int Thermo::add_fix(const char *id)
{
int n = strlen(id) + 1;
id_fix[nfix] = new char[n];
strcpy(id_fix[nfix],id);
nfix++;
return nfix-1;
}
/* ----------------------------------------------------------------------
add variable ID to list of Variables to evaluate
------------------------------------------------------------------------- */
int Thermo::add_variable(const char *id)
{
int n = strlen(id) + 1;
id_variable[nvariable] = new char[n];
strcpy(id_variable[nvariable],id);
nvariable++;
return nvariable-1;
}
/* ----------------------------------------------------------------------
compute a single thermodyanmic value, word is any keyword in custom list
called when a variable is evaluated by Variable class
return value as double in answer
return 0 if str is recoginzed keyword, 1 if unrecognized
customize a new keyword by adding to if statement
------------------------------------------------------------------------- */
int Thermo::evaluate_keyword(char *word, double *answer)
{
// turn off normflag if natoms = 0 to avoid divide by 0
// normflag must be set for lo-level thermo routines that may be invoked
natoms = atom->natoms;
if (natoms == 0) normflag = 0;
else normflag = normvalue;
// invoke a lo-level thermo routine to compute the variable value
// if keyword requires a compute, error if thermo doesn't use the compute
// if inbetween runs and needed compute is not current, error
// if in middle of run and needed compute is not current, invoke it
// for keywords that use pe indirectly (evdwl, ebond, etc):
// check if energy was tallied on this timestep and set pe->invoked_flag
// this will trigger next timestep for energy tallying via addstep()
if (strcmp(word,"step") == 0) {
compute_step();
dvalue = bivalue;
} else if (strcmp(word,"elapsed") == 0) {
if (update->whichflag == 0)
error->all(FLERR,
"This variable thermo keyword cannot be used between runs");
compute_elapsed();
dvalue = bivalue;
} else if (strcmp(word,"elaplong") == 0) {
if (update->whichflag == 0)
error->all(FLERR,
"This variable thermo keyword cannot be used between runs");
compute_elapsed_long();
dvalue = bivalue;
} else if (strcmp(word,"dt") == 0) {
compute_dt();
} else if (strcmp(word,"time") == 0) {
compute_time();
} else if (strcmp(word,"cpu") == 0) {
if (update->whichflag == 0)
error->all(FLERR,
"This variable thermo keyword cannot be used between runs");
compute_cpu();
} else if (strcmp(word,"tpcpu") == 0) {
if (update->whichflag == 0)
error->all(FLERR,
"This variable thermo keyword cannot be used between runs");
compute_tpcpu();
} else if (strcmp(word,"spcpu") == 0) {
if (update->whichflag == 0)
error->all(FLERR,
"This variable thermo keyword cannot be used between runs");
compute_spcpu();
} else if (strcmp(word,"cpuremain") == 0) {
if (update->whichflag == 0)
error->all(FLERR,
"This variable thermo keyword cannot be used between runs");
compute_cpuremain();
} else if (strcmp(word,"part") == 0) {
compute_part();
dvalue = ivalue;
} else if (strcmp(word,"atoms") == 0) {
compute_atoms();
dvalue = bivalue;
} else if (strcmp(word,"temp") == 0) {
if (!temperature)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init temp");
if (update->whichflag == 0) {
if (temperature->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(temperature->invoked_flag & INVOKED_SCALAR)) {
temperature->compute_scalar();
temperature->invoked_flag |= INVOKED_SCALAR;
}
compute_temp();
} else if (strcmp(word,"press") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_SCALAR)) {
pressure->compute_scalar();
pressure->invoked_flag |= INVOKED_SCALAR;
}
compute_press();
} else if (strcmp(word,"pe") == 0) {
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
if (update->whichflag == 0) {
if (pe->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pe->invoked_flag & INVOKED_SCALAR)) {
pe->compute_scalar();
pe->invoked_flag |= INVOKED_SCALAR;
}
compute_pe();
} else if (strcmp(word,"ke") == 0) {
if (!temperature)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init temp");
if (update->whichflag == 0) {
if (temperature->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(temperature->invoked_flag & INVOKED_SCALAR)) {
temperature->compute_scalar();
temperature->invoked_flag |= INVOKED_SCALAR;
}
compute_ke();
} else if (strcmp(word,"etotal") == 0) {
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
if (update->whichflag == 0) {
if (pe->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pe->invoked_flag & INVOKED_SCALAR)) {
pe->compute_scalar();
pe->invoked_flag |= INVOKED_SCALAR;
}
if (!temperature)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init temp");
if (update->whichflag == 0) {
if (temperature->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(temperature->invoked_flag & INVOKED_SCALAR)) {
temperature->compute_scalar();
temperature->invoked_flag |= INVOKED_SCALAR;
}
compute_etotal();
} else if (strcmp(word,"enthalpy") == 0) {
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
if (update->whichflag == 0) {
if (pe->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pe->invoked_flag & INVOKED_SCALAR)) {
pe->compute_scalar();
pe->invoked_flag |= INVOKED_SCALAR;
}
if (!temperature)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init temp");
if (update->whichflag == 0) {
if (temperature->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(temperature->invoked_flag & INVOKED_SCALAR)) {
temperature->compute_scalar();
temperature->invoked_flag |= INVOKED_SCALAR;
}
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_SCALAR)) {
pressure->compute_scalar();
pressure->invoked_flag |= INVOKED_SCALAR;
}
compute_enthalpy();
} else if (strcmp(word,"evdwl") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_evdwl();
} else if (strcmp(word,"ecoul") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_ecoul();
} else if (strcmp(word,"epair") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_epair();
} else if (strcmp(word,"ebond") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_ebond();
} else if (strcmp(word,"eangle") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_eangle();
} else if (strcmp(word,"edihed") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_edihed();
} else if (strcmp(word,"eimp") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_eimp();
} else if (strcmp(word,"emol") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_emol();
} else if (strcmp(word,"elong") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_elong();
} else if (strcmp(word,"etail") == 0) {
if (update->eflag_global != update->ntimestep)
error->all(FLERR,"Energy was not tallied on needed timestep");
if (!pe)
error->all(FLERR,
"Thermo keyword in variable requires thermo to use/init pe");
pe->invoked_flag |= INVOKED_SCALAR;
compute_etail();
} else if (strcmp(word,"vol") == 0) compute_vol();
else if (strcmp(word,"density") == 0) compute_density();
else if (strcmp(word,"lx") == 0) compute_lx();
else if (strcmp(word,"ly") == 0) compute_ly();
else if (strcmp(word,"lz") == 0) compute_lz();
else if (strcmp(word,"xlo") == 0) compute_xlo();
else if (strcmp(word,"xhi") == 0) compute_xhi();
else if (strcmp(word,"ylo") == 0) compute_ylo();
else if (strcmp(word,"yhi") == 0) compute_yhi();
else if (strcmp(word,"zlo") == 0) compute_zlo();
else if (strcmp(word,"zhi") == 0) compute_zhi();
else if (strcmp(word,"xy") == 0) compute_xy();
else if (strcmp(word,"xz") == 0) compute_xz();
else if (strcmp(word,"yz") == 0) compute_yz();
else if (strcmp(word,"xlat") == 0) compute_xlat();
else if (strcmp(word,"ylat") == 0) compute_ylat();
else if (strcmp(word,"zlat") == 0) compute_zlat();
else if (strcmp(word,"bonds") == 0) compute_bonds();
else if (strcmp(word,"angles") == 0) compute_angles();
else if (strcmp(word,"dihedrals") == 0) compute_dihedrals();
else if (strcmp(word,"impropers") == 0) compute_impropers();
else if (strcmp(word,"pxx") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_VECTOR)) {
pressure->compute_vector();
pressure->invoked_flag |= INVOKED_VECTOR;
}
compute_pxx();
} else if (strcmp(word,"pyy") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_VECTOR)) {
pressure->compute_vector();
pressure->invoked_flag |= INVOKED_VECTOR;
}
compute_pyy();
} else if (strcmp(word,"pzz") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_VECTOR)) {
pressure->compute_vector();
pressure->invoked_flag |= INVOKED_VECTOR;
}
compute_pzz();
} else if (strcmp(word,"pxy") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_VECTOR)) {
pressure->compute_vector();
pressure->invoked_flag |= INVOKED_VECTOR;
}
compute_pxy();
} else if (strcmp(word,"pxz") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_VECTOR)) {
pressure->compute_vector();
pressure->invoked_flag |= INVOKED_VECTOR;
}
compute_pxz();
} else if (strcmp(word,"pyz") == 0) {
if (!pressure)
error->all(FLERR,"Thermo keyword in variable requires "
"thermo to use/init press");
if (update->whichflag == 0) {
if (pressure->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable thermo keyword between runs "
"is not current");
} else if (!(pressure->invoked_flag & INVOKED_VECTOR)) {
pressure->compute_vector();
pressure->invoked_flag |= INVOKED_VECTOR;
}
compute_pyz();
} else if (strcmp(word,"fmax") == 0) compute_fmax();
else if (strcmp(word,"fnorm") == 0) compute_fnorm();
else if (strcmp(word,"cella") == 0) compute_cella();
else if (strcmp(word,"cellb") == 0) compute_cellb();
else if (strcmp(word,"cellc") == 0) compute_cellc();
else if (strcmp(word,"cellalpha") == 0) compute_cellalpha();
else if (strcmp(word,"cellbeta") == 0) compute_cellbeta();
else if (strcmp(word,"cellgamma") == 0) compute_cellgamma();
else return 1;
*answer = dvalue;
return 0;
}
/* ----------------------------------------------------------------------
extraction of Compute, Fix, Variable results
compute/fix are normalized by atoms if returning extensive value
variable value is not normalized (formula should normalize if desired)
------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
void Thermo::compute_compute()
{
int m = field2index[ifield];
Compute *compute = computes[m];
if (compute_which[m] == SCALAR) {
dvalue = compute->scalar;
if (normflag && compute->extscalar) dvalue /= natoms;
} else if (compute_which[m] == VECTOR) {
dvalue = compute->vector[argindex1[ifield]-1];
if (normflag) {
if (compute->extvector == 0) return;
else if (compute->extvector == 1) dvalue /= natoms;
else if (compute->extlist[argindex1[ifield]-1]) dvalue /= natoms;
}
} else {
dvalue = compute->array[argindex1[ifield]-1][argindex2[ifield]-1];
if (normflag && compute->extarray) dvalue /= natoms;
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_fix()
{
int m = field2index[ifield];
Fix *fix = fixes[m];
if (argindex1[ifield] == 0) {
dvalue = fix->compute_scalar();
if (normflag && fix->extscalar) dvalue /= natoms;
} else if (argindex2[ifield] == 0) {
dvalue = fix->compute_vector(argindex1[ifield]-1);
if (normflag) {
if (fix->extvector == 0) return;
else if (fix->extvector == 1) dvalue /= natoms;
else if (fix->extlist[argindex1[ifield]-1]) dvalue /= natoms;
}
} else {
dvalue = fix->compute_array(argindex1[ifield]-1,argindex2[ifield]-1);
if (normflag && fix->extarray) dvalue /= natoms;
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_variable()
{
dvalue = input->variable->compute_equal(variables[field2index[ifield]]);
}
/* ----------------------------------------------------------------------
one method for every keyword thermo can output
called by compute() or evaluate_keyword()
compute will have already been called
set ivalue/dvalue/bivalue if value is int/double/bigint
customize a new keyword by adding a method
------------------------------------------------------------------------- */
void Thermo::compute_step()
{
bivalue = update->ntimestep;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_elapsed()
{
bivalue = update->ntimestep - update->firststep;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_elapsed_long()
{
bivalue = update->ntimestep - update->beginstep;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_dt()
{
dvalue = update->dt;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_time()
{
dvalue = update->atime + (update->ntimestep-update->atimestep)*update->dt;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cpu()
{
if (firststep == 0) dvalue = 0.0;
else dvalue = timer->elapsed(Timer::TOTAL);
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_tpcpu()
{
double new_cpu;
double new_time = update->ntimestep * update->dt;
if (firststep == 0) {
new_cpu = 0.0;
dvalue = 0.0;
} else {
new_cpu = timer->elapsed(Timer::TOTAL);
double cpu_diff = new_cpu - last_tpcpu;
double time_diff = new_time - last_time;
if (time_diff > 0.0 && cpu_diff > 0.0) dvalue = time_diff/cpu_diff;
else dvalue = 0.0;
}
last_time = new_time;
last_tpcpu = new_cpu;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_spcpu()
{
double new_cpu;
int new_step = update->ntimestep;
if (firststep == 0) {
new_cpu = 0.0;
dvalue = 0.0;
} else {
new_cpu = timer->elapsed(Timer::TOTAL);
double cpu_diff = new_cpu - last_spcpu;
int step_diff = new_step - last_step;
if (cpu_diff > 0.0) dvalue = step_diff/cpu_diff;
else dvalue = 0.0;
}
last_step = new_step;
last_spcpu = new_cpu;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cpuremain()
{
if (firststep == 0) dvalue = 0.0;
else dvalue = timer->elapsed(Timer::TOTAL) *
(update->laststep - update->ntimestep) /
(update->ntimestep - update->firststep);
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_part()
{
ivalue = universe->iworld;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_atoms()
{
bivalue = atom->natoms;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_temp()
{
dvalue = temperature->scalar;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_press()
{
dvalue = pressure->scalar;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pe()
{
dvalue = pe->scalar;
if (normflag) dvalue /= natoms;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ke()
{
dvalue = temperature->scalar;
dvalue *= 0.5 * temperature->dof * force->boltz;
if (normflag) dvalue /= natoms;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_etotal()
{
compute_pe();
double ke = temperature->scalar;
ke *= 0.5 * temperature->dof * force->boltz;
if (normflag) ke /= natoms;
dvalue += ke;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_enthalpy()
{
compute_etotal();
double etmp = dvalue;
compute_vol();
double vtmp = dvalue;
if (normflag) vtmp /= natoms;
compute_press();
double ptmp = dvalue;
dvalue = etmp + ptmp*vtmp/(force->nktv2p);
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_evdwl()
{
double tmp = 0.0;
if (force->pair) tmp += force->pair->eng_vdwl;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (force->pair && force->pair->tail_flag) {
double volume = domain->xprd * domain->yprd * domain->zprd;
dvalue += force->pair->etail / volume;
}
if (normflag) dvalue /= natoms;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ecoul()
{
double tmp = 0.0;
if (force->pair) tmp += force->pair->eng_coul;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (normflag) dvalue /= natoms;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_epair()
{
double tmp = 0.0;
if (force->pair) tmp += force->pair->eng_vdwl + force->pair->eng_coul;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (force->kspace) dvalue += force->kspace->energy;
if (force->pair && force->pair->tail_flag) {
double volume = domain->xprd * domain->yprd * domain->zprd;
dvalue += force->pair->etail / volume;
}
if (normflag) dvalue /= natoms;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ebond()
{
if (force->bond) {
double tmp = force->bond->energy;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_eangle()
{
if (force->angle) {
double tmp = force->angle->energy;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_edihed()
{
if (force->dihedral) {
double tmp = force->dihedral->energy;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_eimp()
{
if (force->improper) {
double tmp = force->improper->energy;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_emol()
{
double tmp = 0.0;
if (atom->molecular) {
if (force->bond) tmp += force->bond->energy;
if (force->angle) tmp += force->angle->energy;
if (force->dihedral) tmp += force->dihedral->energy;
if (force->improper) tmp += force->improper->energy;
MPI_Allreduce(&tmp,&dvalue,1,MPI_DOUBLE,MPI_SUM,world);
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_elong()
{
if (force->kspace) {
dvalue = force->kspace->energy;
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_etail()
{
if (force->pair && force->pair->tail_flag) {
double volume = domain->xprd * domain->yprd * domain->zprd;
dvalue = force->pair->etail / volume;
if (normflag) dvalue /= natoms;
} else dvalue = 0.0;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_vol()
{
if (domain->dimension == 3)
dvalue = domain->xprd * domain->yprd * domain->zprd;
else
dvalue = domain->xprd * domain->yprd;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_density()
{
double mass = group->mass(0);
compute_vol();
dvalue = force->mv2d * mass/dvalue;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_lx()
{
dvalue = domain->xprd;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ly()
{
dvalue = domain->yprd;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_lz()
{
dvalue = domain->zprd;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_xlo()
{
dvalue = domain->boxlo[0];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_xhi()
{
dvalue = domain->boxhi[0];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ylo()
{
dvalue = domain->boxlo[1];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_yhi()
{
dvalue = domain->boxhi[1];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_zlo()
{
dvalue = domain->boxlo[2];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_zhi()
{
dvalue = domain->boxhi[2];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_xy()
{
dvalue = domain->xy;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_xz()
{
dvalue = domain->xz;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_yz()
{
dvalue = domain->yz;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_xlat()
{
dvalue = domain->lattice->xlattice;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ylat()
{
dvalue = domain->lattice->ylattice;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_zlat()
{
dvalue = domain->lattice->zlattice;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_bonds()
{
bivalue = atom->nbonds;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_angles()
{
bivalue = atom->nangles;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_dihedrals()
{
bivalue = atom->ndihedrals;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_impropers()
{
bivalue = atom->nimpropers;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pxx()
{
dvalue = pressure->vector[0];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pyy()
{
dvalue = pressure->vector[1];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pzz()
{
dvalue = pressure->vector[2];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pxy()
{
dvalue = pressure->vector[3];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pxz()
{
dvalue = pressure->vector[4];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_pyz()
{
dvalue = pressure->vector[5];
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_fmax()
{
double **f = atom->f;
int nlocal = atom->nlocal;
double max = 0.0;
for (int i = 0; i < nlocal; i++) {
max = MAX(max,fabs(f[i][0]));
max = MAX(max,fabs(f[i][1]));
max = MAX(max,fabs(f[i][2]));
}
double maxall;
MPI_Allreduce(&max,&maxall,1,MPI_DOUBLE,MPI_MAX,world);
dvalue = maxall;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_fnorm()
{
double **f = atom->f;
int nlocal = atom->nlocal;
double dot = 0.0;
for (int i = 0; i < nlocal; i++)
dot += f[i][0]*f[i][0] + f[i][1]*f[i][1] + f[i][2]*f[i][2];
double dotall;
MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world);
dvalue = sqrt(dotall);
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cella()
{
dvalue = domain->xprd;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cellb()
{
if (!domain->triclinic)
dvalue = domain->yprd;
else {
double* h = domain->h;
dvalue = sqrt(h[1]*h[1]+h[5]*h[5]);
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cellc()
{
if (!domain->triclinic)
dvalue = domain->zprd;
else {
double* h = domain->h;
dvalue = sqrt(h[2]*h[2]+h[3]*h[3]+h[4]*h[4]);
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cellalpha()
{
if (!domain->triclinic)
dvalue = 90.0;
else {
// Cos(alpha) = (xy.xz + ly.yz)/(b.c)
double* h = domain->h;
double cosalpha = (h[5]*h[4]+h[1]*h[3])/
sqrt((h[1]*h[1]+h[5]*h[5])*(h[2]*h[2]+h[3]*h[3]+h[4]*h[4]));
dvalue = acos(cosalpha)*180.0/MY_PI;
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cellbeta()
{
if (!domain->triclinic)
dvalue = 90.0;
else {
// Cos(beta) = xz/c
double* h = domain->h;
double cosbeta = h[4]/sqrt(h[2]*h[2]+h[3]*h[3]+h[4]*h[4]);
dvalue = acos(cosbeta)*180.0/MY_PI;
}
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cellgamma()
{
if (!domain->triclinic)
dvalue = 90.0;
else {
// Cos(gamma) = xy/b
double* h = domain->h;
double cosgamma = h[5]/sqrt(h[1]*h[1]+h[5]*h[5]);
dvalue = acos(cosgamma)*180.0/MY_PI;
}
}
diff --git a/src/variable.cpp b/src/variable.cpp
index b0a9a48a9..acd265da1 100644
--- a/src/variable.cpp
+++ b/src/variable.cpp
@@ -1,4181 +1,4224 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#include "unistd.h"
#include "variable.h"
#include "universe.h"
#include "atom.h"
#include "update.h"
#include "group.h"
#include "domain.h"
#include "comm.h"
#include "region.h"
#include "modify.h"
#include "compute.h"
#include "fix.h"
#include "fix_store.h"
#include "output.h"
#include "thermo.h"
#include "random_mars.h"
#include "math_const.h"
#include "atom_masks.h"
#include "memory.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
using namespace MathConst;
#define VARDELTA 4
#define MAXLEVEL 4
#define MAXLINE 256
#define CHUNK 1024
#define MYROUND(a) (( a-floor(a) ) >= .5) ? ceil(a) : floor(a)
enum{INDEX,LOOP,WORLD,UNIVERSE,ULOOP,STRING,GETENV,
SCALARFILE,ATOMFILE,FORMAT,EQUAL,ATOM};
enum{ARG,OP};
// customize by adding a function
// if add before OR,
// also set precedence level in constructor and precedence length in *.h
enum{DONE,ADD,SUBTRACT,MULTIPLY,DIVIDE,CARAT,MODULO,UNARY,
NOT,EQ,NE,LT,LE,GT,GE,AND,OR,
SQRT,EXP,LN,LOG,ABS,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,
RANDOM,NORMAL,CEIL,FLOOR,ROUND,RAMP,STAGGER,LOGFREQ,STRIDE,
VDISPLACE,SWIGGLE,CWIGGLE,GMASK,RMASK,GRMASK,
VALUE,ATOMARRAY,TYPEARRAY,INTARRAY,BIGINTARRAY};
// customize by adding a special function
enum{SUM,XMIN,XMAX,AVE,TRAP,SLOPE,ISDEF};
#define INVOKED_SCALAR 1
#define INVOKED_VECTOR 2
#define INVOKED_ARRAY 4
#define INVOKED_PERATOM 8
#define BIG 1.0e20
/* ---------------------------------------------------------------------- */
Variable::Variable(LAMMPS *lmp) : Pointers(lmp)
{
MPI_Comm_rank(world,&me);
nvar = maxvar = 0;
names = NULL;
style = NULL;
num = NULL;
which = NULL;
pad = NULL;
reader = NULL;
data = NULL;
eval_in_progress = NULL;
randomequal = NULL;
randomatom = NULL;
// customize by assigning a precedence level
precedence[DONE] = 0;
precedence[OR] = 1;
precedence[AND] = 2;
precedence[EQ] = precedence[NE] = 3;
precedence[LT] = precedence[LE] = precedence[GT] = precedence[GE] = 4;
precedence[ADD] = precedence[SUBTRACT] = 5;
precedence[MULTIPLY] = precedence[DIVIDE] = precedence[MODULO] = 6;
precedence[CARAT] = 7;
precedence[UNARY] = precedence[NOT] = 8;
}
/* ---------------------------------------------------------------------- */
Variable::~Variable()
{
for (int i = 0; i < nvar; i++) {
delete [] names[i];
delete reader[i];
if (style[i] == LOOP || style[i] == ULOOP) delete [] data[i][0];
else for (int j = 0; j < num[i]; j++) delete [] data[i][j];
delete [] data[i];
}
memory->sfree(names);
memory->destroy(style);
memory->destroy(num);
memory->destroy(which);
memory->destroy(pad);
memory->sfree(reader);
memory->sfree(data);
memory->destroy(eval_in_progress);
delete randomequal;
delete randomatom;
}
/* ----------------------------------------------------------------------
called by variable command in input script
------------------------------------------------------------------------- */
void Variable::set(int narg, char **arg)
{
if (narg < 2) error->all(FLERR,"Illegal variable command");
// DELETE
// doesn't matter if variable no longer exists
if (strcmp(arg[1],"delete") == 0) {
if (narg != 2) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) remove(find(arg[0]));
return;
// INDEX
// num = listed args, which = 1st value, data = copied args
} else if (strcmp(arg[1],"index") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = INDEX;
num[nvar] = narg - 2;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
// LOOP
// 1 arg + pad: num = N, which = 1st value, data = single string
// 2 args + pad: num = N2, which = N1, data = single string
} else if (strcmp(arg[1],"loop") == 0) {
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = LOOP;
int nfirst,nlast;
if (narg == 3 || (narg == 4 && strcmp(arg[3],"pad") == 0)) {
nfirst = 1;
nlast = force->inumeric(FLERR,arg[2]);
if (nlast <= 0) error->all(FLERR,"Illegal variable command");
if (narg == 4 && strcmp(arg[3],"pad") == 0) {
char digits[12];
sprintf(digits,"%d",nlast);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
} else if (narg == 4 || (narg == 5 && strcmp(arg[4],"pad") == 0)) {
nfirst = force->inumeric(FLERR,arg[2]);
nlast = force->inumeric(FLERR,arg[3]);
if (nfirst > nlast || nlast < 0)
error->all(FLERR,"Illegal variable command");
if (narg == 5 && strcmp(arg[4],"pad") == 0) {
char digits[12];
sprintf(digits,"%d",nlast);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
} else error->all(FLERR,"Illegal variable command");
num[nvar] = nlast;
which[nvar] = nfirst-1;
data[nvar] = new char*[1];
data[nvar][0] = NULL;
// WORLD
// num = listed args, which = partition this proc is in, data = copied args
// error check that num = # of worlds in universe
} else if (strcmp(arg[1],"world") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = WORLD;
num[nvar] = narg - 2;
if (num[nvar] != universe->nworlds)
error->all(FLERR,"World variable count doesn't match # of partitions");
which[nvar] = universe->iworld;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
// UNIVERSE and ULOOP
// for UNIVERSE: num = listed args, data = copied args
// for ULOOP: num = N, data = single string
// which = partition this proc is in
// universe proc 0 creates lock file
// error check that all other universe/uloop variables are same length
} else if (strcmp(arg[1],"universe") == 0 || strcmp(arg[1],"uloop") == 0) {
if (strcmp(arg[1],"universe") == 0) {
if (narg < 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = UNIVERSE;
num[nvar] = narg - 2;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(num[nvar],&arg[2],data[nvar]);
} else if (strcmp(arg[1],"uloop") == 0) {
if (narg < 3 || narg > 4 || (narg == 4 && strcmp(arg[3],"pad") != 0))
error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = ULOOP;
num[nvar] = force->inumeric(FLERR,arg[2]);
data[nvar] = new char*[1];
data[nvar][0] = NULL;
if (narg == 4) {
char digits[12];
sprintf(digits,"%d",num[nvar]);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
}
if (num[nvar] < universe->nworlds)
error->all(FLERR,"Universe/uloop variable count < # of partitions");
which[nvar] = universe->iworld;
if (universe->me == 0) {
FILE *fp = fopen("tmp.lammps.variable","w");
fprintf(fp,"%d\n",universe->nworlds);
fclose(fp);
}
for (int jvar = 0; jvar < nvar; jvar++)
if (num[jvar] && (style[jvar] == UNIVERSE || style[jvar] == ULOOP) &&
num[nvar] != num[jvar])
error->all(FLERR,
"All universe/uloop variables must have same # of values");
// STRING
// remove pre-existing var if also style STRING (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"string") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) {
if (style[find(arg[0])] != STRING)
error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0]));
}
if (nvar == maxvar) grow();
style[nvar] = STRING;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
// GETENV
// remove pre-existing var if also style GETENV (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"getenv") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) {
if (style[find(arg[0])] != GETENV)
error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0]));
}
if (nvar == maxvar) grow();
style[nvar] = GETENV;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = NULL;
// SCALARFILE for strings or numbers
// which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"file") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = SCALARFILE;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
data[nvar][0] = new char[MAXLINE];
reader[nvar] = new VarReader(lmp,arg[0],arg[2],SCALARFILE);
int flag = reader[nvar]->read_scalar(data[nvar][0]);
if (flag) error->all(FLERR,"File variable could not read value");
// ATOMFILE for numbers
// which = 1st value
// data = NULL
} else if (strcmp(arg[1],"atomfile") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = ATOMFILE;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
data[nvar][0] = NULL;
reader[nvar] = new VarReader(lmp,arg[0],arg[2],ATOMFILE);
int flag = reader[nvar]->read_peratom();
if (flag) error->all(FLERR,"Atomfile variable could not read values");
// FORMAT
// num = 3, which = 1st value
// data = 3 values
// 1st is name of variable to eval, 2nd is format string,
// 3rd is filled on retrieval
} else if (strcmp(arg[1],"format") == 0) {
if (narg != 4) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) return;
if (nvar == maxvar) grow();
style[nvar] = FORMAT;
num[nvar] = 3;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(2,&arg[2],data[nvar]);
data[nvar][2] = NULL;
// EQUAL
// remove pre-existing var if also style EQUAL (allows it to be reset)
// num = 2, which = 1st value
// data = 2 values, 1st is string to eval, 2nd is filled on retrieval
} else if (strcmp(arg[1],"equal") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) {
if (style[find(arg[0])] != EQUAL)
error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0]));
}
if (nvar == maxvar) grow();
style[nvar] = EQUAL;
num[nvar] = 2;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = NULL;
// ATOM
// remove pre-existing var if also style ATOM (allows it to be reset)
// num = 1, which = 1st value
// data = 1 value, string to eval
} else if (strcmp(arg[1],"atom") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) {
if (style[find(arg[0])] != ATOM)
error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0]));
}
if (nvar == maxvar) grow();
style[nvar] = ATOM;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
} else error->all(FLERR,"Illegal variable command");
// set name of variable
// must come at end, since STRING/EQUAL/ATOM reset may have removed name
// name must be all alphanumeric chars or underscores
int n = strlen(arg[0]) + 1;
names[nvar] = new char[n];
strcpy(names[nvar],arg[0]);
for (int i = 0; i < n-1; i++)
if (!isalnum(names[nvar][i]) && names[nvar][i] != '_')
error->all(FLERR,"Variable name must be alphanumeric or "
"underscore characters");
nvar++;
}
/* ----------------------------------------------------------------------
INDEX variable created by command-line argument
make it INDEX rather than STRING so cannot be re-defined in input script
------------------------------------------------------------------------- */
void Variable::set(char *name, int narg, char **arg)
{
char **newarg = new char*[2+narg];
newarg[0] = name;
newarg[1] = (char *) "index";
for (int i = 0; i < narg; i++) newarg[2+i] = arg[i];
set(2+narg,newarg);
delete [] newarg;
}
/* ----------------------------------------------------------------------
increment variable(s)
return 0 if OK if successfully incremented
return 1 if any variable is exhausted, free the variable to allow re-use
------------------------------------------------------------------------- */
int Variable::next(int narg, char **arg)
{
int ivar;
if (narg == 0) error->all(FLERR,"Illegal next command");
// check that variables exist and are all the same style
// exception: UNIVERSE and ULOOP variables can be mixed in same next command
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
if (ivar == -1) error->all(FLERR,"Invalid variable in next command");
if (style[ivar] == ULOOP && style[find(arg[0])] == UNIVERSE) continue;
else if (style[ivar] == UNIVERSE && style[find(arg[0])] == ULOOP) continue;
else if (style[ivar] != style[find(arg[0])])
error->all(FLERR,"All variables in next command must be same style");
}
// invalid styles STRING or EQUAL or WORLD or ATOM or GETENV or FORMAT
int istyle = style[find(arg[0])];
if (istyle == STRING || istyle == EQUAL || istyle == WORLD
|| istyle == GETENV || istyle == ATOM || istyle == FORMAT)
error->all(FLERR,"Invalid variable style with next command");
// if istyle = UNIVERSE or ULOOP, insure all such variables are incremented
if (istyle == UNIVERSE || istyle == ULOOP)
for (int i = 0; i < nvar; i++) {
if (style[i] != UNIVERSE && style[i] != ULOOP) continue;
int iarg = 0;
for (iarg = 0; iarg < narg; iarg++)
if (strcmp(arg[iarg],names[i]) == 0) break;
if (iarg == narg)
error->universe_one(FLERR,"Next command must list all "
"universe and uloop variables");
}
// increment all variables in list
// if any variable is exhausted, set flag = 1 and remove var to allow re-use
int flag = 0;
if (istyle == INDEX || istyle == LOOP) {
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
which[ivar]++;
if (which[ivar] >= num[ivar]) {
flag = 1;
remove(ivar);
}
}
} else if (istyle == SCALARFILE) {
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
int done = reader[ivar]->read_scalar(data[ivar][0]);
if (done) {
flag = 1;
remove(ivar);
}
}
} else if (istyle == ATOMFILE) {
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
int done = reader[ivar]->read_peratom();
if (done) {
flag = 1;
remove(ivar);
}
}
} else if (istyle == UNIVERSE || istyle == ULOOP) {
// wait until lock file can be created and owned by proc 0 of this world
// rename() is not atomic in practice, but no known simple fix
// means multiple procs can read/write file at the same time (bad!)
// random delays help
// delay for random fraction of 1 second before first rename() call
// delay for random fraction of 1 second before subsequent tries
// when successful, read next available index and Bcast it within my world
int nextindex;
if (me == 0) {
int seed = 12345 + universe->me + which[find(arg[0])];
RanMars *random = new RanMars(lmp,seed);
int delay = (int) (1000000*random->uniform());
usleep(delay);
while (1) {
if (!rename("tmp.lammps.variable","tmp.lammps.variable.lock")) break;
delay = (int) (1000000*random->uniform());
usleep(delay);
}
delete random;
FILE *fp = fopen("tmp.lammps.variable.lock","r");
fscanf(fp,"%d",&nextindex);
//printf("READ %d %d\n",universe->me,nextindex);
fclose(fp);
fp = fopen("tmp.lammps.variable.lock","w");
fprintf(fp,"%d\n",nextindex+1);
//printf("WRITE %d %d\n",universe->me,nextindex+1);
fclose(fp);
rename("tmp.lammps.variable.lock","tmp.lammps.variable");
if (universe->uscreen)
fprintf(universe->uscreen,
"Increment via next: value %d on partition %d\n",
nextindex+1,universe->iworld);
if (universe->ulogfile)
fprintf(universe->ulogfile,
"Increment via next: value %d on partition %d\n",
nextindex+1,universe->iworld);
}
MPI_Bcast(&nextindex,1,MPI_INT,0,world);
// set all variables in list to nextindex
// must increment all UNIVERSE and ULOOP variables here
// error check above tested for this
for (int iarg = 0; iarg < narg; iarg++) {
ivar = find(arg[iarg]);
which[ivar] = nextindex;
if (which[ivar] >= num[ivar]) {
flag = 1;
remove(ivar);
}
}
}
return flag;
}
/* ----------------------------------------------------------------------
return ptr to the data text associated with a variable
if INDEX or WORLD or UNIVERSE or STRING or SCALARFILE var,
return ptr to stored string
if LOOP or ULOOP var, write int to data[0] and return ptr to string
if EQUAL var, evaluate variable and put result in str
if FORMAT var, evaluate its variable and put formatted result in str
if GETENV var, query environment and put result in str
if ATOM or ATOMFILE var, return NULL
return NULL if no variable with name or which value is bad,
caller must respond
------------------------------------------------------------------------- */
char *Variable::retrieve(char *name)
{
int ivar = find(name);
if (ivar == -1) return NULL;
if (which[ivar] >= num[ivar]) return NULL;
char *str;
if (style[ivar] == INDEX || style[ivar] == WORLD ||
style[ivar] == UNIVERSE || style[ivar] == STRING ||
style[ivar] == SCALARFILE) {
str = data[ivar][which[ivar]];
} else if (style[ivar] == LOOP || style[ivar] == ULOOP) {
char result[16];
if (pad[ivar] == 0) sprintf(result,"%d",which[ivar]+1);
else {
char padstr[16];
sprintf(padstr,"%%0%dd",pad[ivar]);
sprintf(result,padstr,which[ivar]+1);
}
int n = strlen(result) + 1;
delete [] data[ivar][0];
data[ivar][0] = new char[n];
strcpy(data[ivar][0],result);
str = data[ivar][0];
} else if (style[ivar] == EQUAL) {
char result[64];
double answer = evaluate(data[ivar][0],NULL);
sprintf(result,"%.15g",answer);
int n = strlen(result) + 1;
if (data[ivar][1]) delete [] data[ivar][1];
data[ivar][1] = new char[n];
strcpy(data[ivar][1],result);
str = data[ivar][1];
} else if (style[ivar] == FORMAT) {
char result[64];
int jvar = find(data[ivar][0]);
if (jvar == -1) return NULL;
if (!equalstyle(jvar)) return NULL;
double answer = evaluate(data[jvar][0],NULL);
sprintf(result,data[ivar][1],answer);
int n = strlen(result) + 1;
if (data[ivar][2]) delete [] data[ivar][2];
data[ivar][2] = new char[n];
strcpy(data[ivar][2],result);
str = data[ivar][2];
} else if (style[ivar] == GETENV) {
const char *result = getenv(data[ivar][0]);
if (data[ivar][1]) delete [] data[ivar][1];
if (result == NULL) result = (const char *)"";
int n = strlen(result) + 1;
data[ivar][1] = new char[n];
strcpy(data[ivar][1],result);
str = data[ivar][1];
} else if (style[ivar] == ATOM || style[ivar] == ATOMFILE) return NULL;
return str;
}
/* ----------------------------------------------------------------------
return result of equal-style variable evaluation
------------------------------------------------------------------------- */
double Variable::compute_equal(int ivar)
{
- // eval_in_progress used to detect circle dependencies
- // could extend this later to check v_a = c_b + v_a constructs?
-
+ if (eval_in_progress[ivar])
+ error->all(FLERR,"Variable has circular dependency");
eval_in_progress[ivar] = 1;
+
double value = evaluate(data[ivar][0],NULL);
+
eval_in_progress[ivar] = 0;
return value;
}
/* ----------------------------------------------------------------------
return result of immediate equal-style variable evaluation
called from Input::substitute()
------------------------------------------------------------------------- */
double Variable::compute_equal(char *str)
{
return evaluate(str,NULL);
}
/* ----------------------------------------------------------------------
compute result of atom-style and atomfile-style variable evaluation
only computed for atoms in igroup, else result is 0.0
answers are placed every stride locations into result
if sumflag, add variable values to existing result
------------------------------------------------------------------------- */
void Variable::compute_atom(int ivar, int igroup,
double *result, int stride, int sumflag)
{
Tree *tree;
double *vstore;
+ if (eval_in_progress[ivar])
+ error->all(FLERR,"Variable has circular dependency");
+ eval_in_progress[ivar] = 1;
+
if (style[ivar] == ATOM) {
evaluate(data[ivar][0],&tree);
collapse_tree(tree);
} else vstore = reader[ivar]->fix->vstore;
int groupbit = group->bitmask[igroup];
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (style[ivar] == ATOM) {
if (sumflag == 0) {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] = eval_tree(tree,i);
else result[m] = 0.0;
m += stride;
}
} else {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] += eval_tree(tree,i);
m += stride;
}
}
} else {
if (sumflag == 0) {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] = vstore[i];
else result[m] = 0.0;
m += stride;
}
} else {
int m = 0;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) result[m] += vstore[i];
m += stride;
}
}
}
if (style[ivar] == ATOM) free_tree(tree);
+
+ eval_in_progress[ivar] = 0;
}
/* ----------------------------------------------------------------------
search for name in list of variables names
return index or -1 if not found
------------------------------------------------------------------------- */
int Variable::find(char *name)
{
for (int i = 0; i < nvar; i++)
if (strcmp(name,names[i]) == 0) return i;
return -1;
}
/* ----------------------------------------------------------------------
return 1 if variable is EQUAL style, 0 if not
------------------------------------------------------------------------- */
int Variable::equalstyle(int ivar)
{
if (style[ivar] == EQUAL) return 1;
return 0;
}
/* ----------------------------------------------------------------------
return 1 if variable is ATOM or ATOMFILE style, 0 if not
------------------------------------------------------------------------- */
int Variable::atomstyle(int ivar)
{
if (style[ivar] == ATOM || style[ivar] == ATOMFILE) return 1;
return 0;
}
/* ----------------------------------------------------------------------
remove Nth variable from list and compact list
delete reader explicitly if it exists
------------------------------------------------------------------------- */
void Variable::remove(int n)
{
delete [] names[n];
if (style[n] == LOOP || style[n] == ULOOP) delete [] data[n][0];
else for (int i = 0; i < num[n]; i++) delete [] data[n][i];
delete [] data[n];
delete reader[n];
for (int i = n+1; i < nvar; i++) {
names[i-1] = names[i];
style[i-1] = style[i];
num[i-1] = num[i];
which[i-1] = which[i];
pad[i-1] = pad[i];
reader[i-1] = reader[i];
data[i-1] = data[i];
}
nvar--;
}
/* ----------------------------------------------------------------------
make space in arrays for new variable
------------------------------------------------------------------------- */
void Variable::grow()
{
int old = maxvar;
maxvar += VARDELTA;
names = (char **) memory->srealloc(names,maxvar*sizeof(char *),"var:names");
memory->grow(style,maxvar,"var:style");
memory->grow(num,maxvar,"var:num");
memory->grow(which,maxvar,"var:which");
memory->grow(pad,maxvar,"var:pad");
reader = (VarReader **)
memory->srealloc(reader,maxvar*sizeof(VarReader *),"var:reader");
for (int i = old; i < maxvar; i++) reader[i] = NULL;
data = (char ***) memory->srealloc(data,maxvar*sizeof(char **),"var:data");
memory->grow(eval_in_progress,maxvar,"var:eval_in_progress");
for (int i = 0; i < maxvar; i++) eval_in_progress[i] = 0;
}
/* ----------------------------------------------------------------------
copy narg strings from **from to **to, and allocate space for them
------------------------------------------------------------------------- */
void Variable::copy(int narg, char **from, char **to)
{
int n;
for (int i = 0; i < narg; i++) {
n = strlen(from[i]) + 1;
to[i] = new char[n];
strcpy(to[i],from[i]);
}
}
/* ----------------------------------------------------------------------
recursive evaluation of a string str
str is an equal-style or atom-style formula containing one or more items:
number = 0.0, -5.45, 2.8e-4, ...
constant = PI
thermo keyword = ke, vol, atoms, ...
math operation = (),-x,x+y,x-y,x*y,x/y,x^y,
x==y,x!=y,x<y,x<=y,x>y,x>=y,x&&y,x||y,
sqrt(x),exp(x),ln(x),log(x),abs(x),
sin(x),cos(x),tan(x),asin(x),atan2(y,x),...
group function = count(group), mass(group), xcm(group,x), ...
special function = sum(x),min(x), ...
atom value = x[i], y[i], vx[i], ...
atom vector = x, y, vx, ...
compute = c_ID, c_ID[i], c_ID[i][j]
fix = f_ID, f_ID[i], f_ID[i][j]
variable = v_name, v_name[i]
equal-style variables passes in tree = NULL:
evaluate the formula, return result as a double
atom-style variable passes in tree = non-NULL:
parse the formula but do not evaluate it
create a parse tree and return it
------------------------------------------------------------------------- */
double Variable::evaluate(char *str, Tree **tree)
{
int op,opprevious;
double value1,value2;
char onechar;
char *ptr;
double argstack[MAXLEVEL];
Tree *treestack[MAXLEVEL];
int opstack[MAXLEVEL];
int nargstack = 0;
int ntreestack = 0;
int nopstack = 0;
int i = 0;
int expect = ARG;
while (1) {
onechar = str[i];
// whitespace: just skip
if (isspace(onechar)) i++;
// ----------------
// parentheses: recursively evaluate contents of parens
// ----------------
else if (onechar == '(') {
if (expect == OP) error->all(FLERR,"Invalid syntax in variable formula");
expect = OP;
char *contents;
i = find_matching_paren(str,i,contents);
i++;
// evaluate contents and push on stack
if (tree) {
Tree *newtree;
evaluate(contents,&newtree);
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = evaluate(contents,NULL);
delete [] contents;
// ----------------
// number: push value onto stack
// ----------------
} else if (isdigit(onechar) || onechar == '.') {
if (expect == OP) error->all(FLERR,"Invalid syntax in variable formula");
expect = OP;
// istop = end of number, including scientific notation
int istart = i;
while (isdigit(str[i]) || str[i] == '.') i++;
if (str[i] == 'e' || str[i] == 'E') {
i++;
if (str[i] == '+' || str[i] == '-') i++;
while (isdigit(str[i])) i++;
}
int istop = i - 1;
int n = istop - istart + 1;
char *number = new char[n+1];
strncpy(number,&str[istart],n);
number[n] = '\0';
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = atof(number);
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = atof(number);
delete [] number;
// ----------------
// letter: c_ID, c_ID[], c_ID[][], f_ID, f_ID[], f_ID[][],
// v_name, v_name[], exp(), xcm(,), x, x[], PI, vol
// ----------------
} else if (isalpha(onechar)) {
if (expect == OP) error->all(FLERR,"Invalid syntax in variable formula");
expect = OP;
// istop = end of word
// word = all alphanumeric or underscore
int istart = i;
while (isalnum(str[i]) || str[i] == '_') i++;
int istop = i-1;
int n = istop - istart + 1;
char *word = new char[n+1];
strncpy(word,&str[istart],n);
word[n] = '\0';
// ----------------
// compute
// ----------------
if (strncmp(word,"c_",2) == 0) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
n = strlen(word) - 2 + 1;
char *id = new char[n];
strcpy(id,&word[2]);
int icompute = modify->find_compute(id);
if (icompute < 0)
error->all(FLERR,"Invalid compute ID in variable formula");
Compute *compute = modify->compute[icompute];
delete [] id;
// parse zero or one or two trailing brackets
// point i beyond last bracket
// nbracket = # of bracket pairs
// index1,index2 = int inside each bracket pair
int nbracket,index1,index2;
if (str[i] != '[') nbracket = 0;
else {
nbracket = 1;
ptr = &str[i];
- index1 = int_between_brackets(ptr);
+ index1 = int_between_brackets(ptr,1);
i = ptr-str+1;
if (str[i] == '[') {
nbracket = 2;
ptr = &str[i];
- index2 = int_between_brackets(ptr);
+ index2 = int_between_brackets(ptr,1);
i = ptr-str+1;
}
}
// c_ID = scalar from global scalar
if (nbracket == 0 && compute->scalar_flag) {
if (update->whichflag == 0) {
if (compute->invoked_scalar != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_SCALAR)) {
compute->compute_scalar();
compute->invoked_flag |= INVOKED_SCALAR;
}
value1 = compute->scalar;
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// c_ID[i] = scalar from global vector
} else if (nbracket == 1 && compute->vector_flag) {
if (index1 > compute->size_vector)
error->all(FLERR,"Variable formula compute vector "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_vector != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
value1 = compute->vector[index1-1];
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// c_ID[i][j] = scalar from global array
} else if (nbracket == 2 && compute->array_flag) {
if (index1 > compute->size_array_rows)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (index2 > compute->size_array_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_array != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
value1 = compute->array[index1-1][index2-1];
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// c_ID[i] = scalar from per-atom vector
} else if (nbracket == 1 && compute->peratom_flag &&
compute->size_peratom_cols == 0) {
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
peratom2global(1,NULL,compute->vector_atom,1,index1,
tree,treestack,ntreestack,argstack,nargstack);
// c_ID[i][j] = scalar from per-atom array
} else if (nbracket == 2 && compute->peratom_flag &&
compute->size_peratom_cols > 0) {
if (index2 > compute->size_peratom_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
if (compute->array_atom)
peratom2global(1,NULL,&compute->array_atom[0][index2-1],
compute->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
else
peratom2global(1,NULL,NULL,
compute->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
// c_ID = vector from per-atom vector
} else if (nbracket == 0 && compute->peratom_flag &&
compute->size_peratom_cols == 0) {
if (tree == NULL)
error->all(FLERR,
"Per-atom compute in equal-style variable formula");
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = compute->vector_atom;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
// c_ID[i] = vector from per-atom array
} else if (nbracket == 1 && compute->peratom_flag &&
compute->size_peratom_cols > 0) {
if (tree == NULL)
error->all(FLERR,
"Per-atom compute in equal-style variable formula");
if (index1 > compute->size_peratom_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_peratom != update->ntimestep)
error->all(FLERR,"Compute used in variable between runs "
"is not current");
} else if (!(compute->invoked_flag & INVOKED_PERATOM)) {
compute->compute_peratom();
compute->invoked_flag |= INVOKED_PERATOM;
}
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
if (compute->array_atom)
newtree->array = &compute->array_atom[0][index1-1];
else
newtree->array = NULL;
newtree->nstride = compute->size_peratom_cols;
newtree->selfalloc = 0;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else error->all(FLERR,"Mismatched compute in variable formula");
// ----------------
// fix
// ----------------
} else if (strncmp(word,"f_",2) == 0) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
n = strlen(word) - 2 + 1;
char *id = new char[n];
strcpy(id,&word[2]);
int ifix = modify->find_fix(id);
if (ifix < 0) error->all(FLERR,"Invalid fix ID in variable formula");
Fix *fix = modify->fix[ifix];
delete [] id;
// parse zero or one or two trailing brackets
// point i beyond last bracket
// nbracket = # of bracket pairs
// index1,index2 = int inside each bracket pair
int nbracket,index1,index2;
if (str[i] != '[') nbracket = 0;
else {
nbracket = 1;
ptr = &str[i];
- index1 = int_between_brackets(ptr);
+ index1 = int_between_brackets(ptr,1);
i = ptr-str+1;
if (str[i] == '[') {
nbracket = 2;
ptr = &str[i];
- index2 = int_between_brackets(ptr);
+ index2 = int_between_brackets(ptr,1);
i = ptr-str+1;
}
}
// f_ID = scalar from global scalar
if (nbracket == 0 && fix->scalar_flag) {
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
value1 = fix->compute_scalar();
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// f_ID[i] = scalar from global vector
} else if (nbracket == 1 && fix->vector_flag) {
if (index1 > fix->size_vector)
error->all(FLERR,
"Variable formula fix vector is accessed out-of-range");
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
value1 = fix->compute_vector(index1-1);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// f_ID[i][j] = scalar from global array
} else if (nbracket == 2 && fix->array_flag) {
if (index1 > fix->size_array_rows)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (index2 > fix->size_array_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
value1 = fix->compute_array(index1-1,index2-1);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// f_ID[i] = scalar from per-atom vector
} else if (nbracket == 1 && fix->peratom_flag &&
fix->size_peratom_cols == 0) {
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,
"Fix in variable not computed at compatible time");
peratom2global(1,NULL,fix->vector_atom,1,index1,
tree,treestack,ntreestack,argstack,nargstack);
// f_ID[i][j] = scalar from per-atom array
} else if (nbracket == 2 && fix->peratom_flag &&
fix->size_peratom_cols > 0) {
if (index2 > fix->size_peratom_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
if (fix->array_atom)
peratom2global(1,NULL,&fix->array_atom[0][index2-1],
fix->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
else
peratom2global(1,NULL,NULL,
fix->size_peratom_cols,index1,
tree,treestack,ntreestack,argstack,nargstack);
// f_ID = vector from per-atom vector
} else if (nbracket == 0 && fix->peratom_flag &&
fix->size_peratom_cols == 0) {
if (tree == NULL)
error->all(FLERR,"Per-atom fix in equal-style variable formula");
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = fix->vector_atom;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
// f_ID[i] = vector from per-atom array
} else if (nbracket == 1 && fix->peratom_flag &&
fix->size_peratom_cols > 0) {
if (tree == NULL)
error->all(FLERR,"Per-atom fix in equal-style variable formula");
if (index1 > fix->size_peratom_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 &&
update->ntimestep % fix->peratom_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
if (fix->array_atom)
newtree->array = &fix->array_atom[0][index1-1];
else
newtree->array = NULL;
newtree->nstride = fix->size_peratom_cols;
newtree->selfalloc = 0;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else error->all(FLERR,"Mismatched fix in variable formula");
// ----------------
// variable
// ----------------
} else if (strncmp(word,"v_",2) == 0) {
n = strlen(word) - 2 + 1;
char *id = new char[n];
strcpy(id,&word[2]);
int ivar = find(id);
if (ivar < 0)
error->all(FLERR,"Invalid variable name in variable formula");
if (eval_in_progress[ivar])
error->all(FLERR,"Variable has circular dependency");
// parse zero or one trailing brackets
// point i beyond last bracket
// nbracket = # of bracket pairs
// index = int inside bracket
int nbracket,index;
if (str[i] != '[') nbracket = 0;
else {
nbracket = 1;
ptr = &str[i];
- index = int_between_brackets(ptr);
+ index = int_between_brackets(ptr,1);
i = ptr-str+1;
}
// v_name = scalar from non atom/atomfile variable
if (nbracket == 0 && style[ivar] != ATOM && style[ivar] != ATOMFILE) {
char *var = retrieve(id);
if (var == NULL)
error->all(FLERR,"Invalid variable evaluation in variable formula");
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = atof(var);
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = atof(var);
// v_name = per-atom vector from atom-style variable
// evaluate the atom-style variable as newtree
} else if (nbracket == 0 && style[ivar] == ATOM) {
if (tree == NULL)
error->all(FLERR,
"Atom-style variable in equal-style variable formula");
Tree *newtree;
evaluate(data[ivar][0],&newtree);
treestack[ntreestack++] = newtree;
// v_name = per-atom vector from atomfile-style variable
} else if (nbracket == 0 && style[ivar] == ATOMFILE) {
if (tree == NULL)
error->all(FLERR,"Atomfile-style variable in "
"equal-style variable formula");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = reader[ivar]->fix->vstore;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
// v_name[N] = scalar from atom-style variable
// compute the per-atom variable in result
// use peratom2global to extract single value from result
} else if (nbracket && style[ivar] == ATOM) {
double *result;
memory->create(result,atom->nlocal,"variable:result");
compute_atom(ivar,0,result,1,0);
peratom2global(1,NULL,result,1,index,
tree,treestack,ntreestack,argstack,nargstack);
memory->destroy(result);
// v_name[N] = scalar from atomfile-style variable
} else if (nbracket && style[ivar] == ATOMFILE) {
peratom2global(1,NULL,reader[ivar]->fix->vstore,1,index,
tree,treestack,ntreestack,argstack,nargstack);
} else error->all(FLERR,"Mismatched variable in variable formula");
delete [] id;
// ----------------
// math/group/special function or atom value/vector or
// constant or thermo keyword
// ----------------
} else {
// ----------------
// math or group or special function
// ----------------
if (str[i] == '(') {
char *contents;
i = find_matching_paren(str,i,contents);
i++;
if (math_function(word,contents,tree,
treestack,ntreestack,argstack,nargstack));
else if (group_function(word,contents,tree,
treestack,ntreestack,argstack,nargstack));
else if (special_function(word,contents,tree,
treestack,ntreestack,argstack,nargstack));
else error->all(FLERR,"Invalid math/group/special function "
"in variable formula");
delete [] contents;
// ----------------
// atom value
// ----------------
} else if (str[i] == '[') {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
ptr = &str[i];
- int id = int_between_brackets(ptr);
+ int id = int_between_brackets(ptr,1);
i = ptr-str+1;
peratom2global(0,word,NULL,0,id,
tree,treestack,ntreestack,argstack,nargstack);
// ----------------
// atom vector
// ----------------
} else if (is_atom_vector(word)) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
atom_vector(word,tree,treestack,ntreestack);
// ----------------
// constant
// ----------------
} else if (is_constant(word)) {
value1 = constant(word);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
// ----------------
// thermo keyword
// ----------------
} else {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
int flag = output->thermo->evaluate_keyword(word,&value1);
if (flag)
error->all(FLERR,"Invalid thermo keyword in variable formula");
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value1;
}
}
delete [] word;
// ----------------
// math operator, including end-of-string
// ----------------
} else if (strchr("+-*/^<>=!&|%\0",onechar)) {
if (onechar == '+') op = ADD;
else if (onechar == '-') op = SUBTRACT;
else if (onechar == '*') op = MULTIPLY;
else if (onechar == '/') op = DIVIDE;
else if (onechar == '%') op = MODULO;
else if (onechar == '^') op = CARAT;
else if (onechar == '=') {
if (str[i+1] != '=')
error->all(FLERR,"Invalid syntax in variable formula");
op = EQ;
i++;
} else if (onechar == '!') {
if (str[i+1] == '=') {
op = NE;
i++;
} else op = NOT;
} else if (onechar == '<') {
if (str[i+1] != '=') op = LT;
else {
op = LE;
i++;
}
} else if (onechar == '>') {
if (str[i+1] != '=') op = GT;
else {
op = GE;
i++;
}
} else if (onechar == '&') {
if (str[i+1] != '&')
error->all(FLERR,"Invalid syntax in variable formula");
op = AND;
i++;
} else if (onechar == '|') {
if (str[i+1] != '|')
error->all(FLERR,"Invalid syntax in variable formula");
op = OR;
i++;
} else op = DONE;
i++;
if (op == SUBTRACT && expect == ARG) {
opstack[nopstack++] = UNARY;
continue;
}
if (op == NOT && expect == ARG) {
opstack[nopstack++] = op;
continue;
}
if (expect == ARG) error->all(FLERR,"Invalid syntax in variable formula");
expect = ARG;
// evaluate stack as deep as possible while respecting precedence
// before pushing current op onto stack
while (nopstack && precedence[opstack[nopstack-1]] >= precedence[op]) {
opprevious = opstack[--nopstack];
if (tree) {
Tree *newtree = new Tree();
newtree->type = opprevious;
if (opprevious == UNARY) {
newtree->left = treestack[--ntreestack];
newtree->middle = newtree->right = NULL;
} else {
newtree->right = treestack[--ntreestack];
newtree->middle = NULL;
newtree->left = treestack[--ntreestack];
}
treestack[ntreestack++] = newtree;
} else {
value2 = argstack[--nargstack];
if (opprevious != UNARY && opprevious != NOT)
value1 = argstack[--nargstack];
if (opprevious == ADD)
argstack[nargstack++] = value1 + value2;
else if (opprevious == SUBTRACT)
argstack[nargstack++] = value1 - value2;
else if (opprevious == MULTIPLY)
argstack[nargstack++] = value1 * value2;
else if (opprevious == DIVIDE) {
if (value2 == 0.0)
error->all(FLERR,"Divide by 0 in variable formula");
argstack[nargstack++] = value1 / value2;
} else if (opprevious == MODULO) {
if (value2 == 0.0)
error->all(FLERR,"Modulo 0 in variable formula");
argstack[nargstack++] = fmod(value1,value2);
} else if (opprevious == CARAT) {
if (value2 == 0.0)
error->all(FLERR,"Power by 0 in variable formula");
argstack[nargstack++] = pow(value1,value2);
} else if (opprevious == UNARY) {
argstack[nargstack++] = -value2;
} else if (opprevious == NOT) {
if (value2 == 0.0) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == EQ) {
if (value1 == value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == NE) {
if (value1 != value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == LT) {
if (value1 < value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == LE) {
if (value1 <= value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == GT) {
if (value1 > value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == GE) {
if (value1 >= value2) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == AND) {
if (value1 != 0.0 && value2 != 0.0) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
} else if (opprevious == OR) {
if (value1 != 0.0 || value2 != 0.0) argstack[nargstack++] = 1.0;
else argstack[nargstack++] = 0.0;
}
}
}
// if end-of-string, break out of entire formula evaluation loop
if (op == DONE) break;
// push current operation onto stack
opstack[nopstack++] = op;
} else error->all(FLERR,"Invalid syntax in variable formula");
}
if (nopstack) error->all(FLERR,"Invalid syntax in variable formula");
// for atom-style variable, return remaining tree
// for equal-style variable, return remaining arg
if (tree) {
if (ntreestack != 1) error->all(FLERR,"Invalid syntax in variable formula");
*tree = treestack[0];
return 0.0;
} else {
if (nargstack != 1) error->all(FLERR,"Invalid syntax in variable formula");
return argstack[0];
}
}
/* ----------------------------------------------------------------------
one-time collapse of an atom-style variable parse tree
tree was created by one-time parsing of formula string via evaulate()
only keep tree nodes that depend on
ATOMARRAY, TYPEARRAY, INTARRAY, BIGINTARRAY
remainder is converted to single VALUE
this enables optimal eval_tree loop over atoms
customize by adding a function:
sqrt(),exp(),ln(),log(),abs(),sin(),cos(),tan(),asin(),acos(),atan(),
atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(),
ramp(x,y),stagger(x,y),logfreq(x,y,z),stride(x,y,z),
vdisplace(x,y),swiggle(x,y,z),cwiggle(x,y,z),
gmask(x),rmask(x),grmask(x,y)
---------------------------------------------------------------------- */
double Variable::collapse_tree(Tree *tree)
{
double arg1,arg2;
if (tree->type == VALUE) return tree->value;
if (tree->type == ATOMARRAY) return 0.0;
if (tree->type == TYPEARRAY) return 0.0;
if (tree->type == INTARRAY) return 0.0;
if (tree->type == BIGINTARRAY) return 0.0;
if (tree->type == ADD) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = arg1 + arg2;
return tree->value;
}
if (tree->type == SUBTRACT) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = arg1 - arg2;
return tree->value;
}
if (tree->type == MULTIPLY) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = arg1 * arg2;
return tree->value;
}
if (tree->type == DIVIDE) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg2 == 0.0) error->one(FLERR,"Divide by 0 in variable formula");
tree->value = arg1 / arg2;
return tree->value;
}
if (tree->type == MODULO) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg2 == 0.0) error->one(FLERR,"Modulo 0 in variable formula");
tree->value = fmod(arg1,arg2);
return tree->value;
}
if (tree->type == CARAT) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg2 == 0.0) error->one(FLERR,"Power by 0 in variable formula");
tree->value = pow(arg1,arg2);
return tree->value;
}
if (tree->type == UNARY) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = -arg1;
return tree->value;
}
if (tree->type == NOT) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 == 0.0) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == EQ) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 == arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == NE) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 != arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == LT) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == LE) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 <= arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == GT) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 > arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == GE) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 >= arg2) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == AND) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 != 0.0 && arg2 != 0.0) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == OR) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 != 0.0 || arg2 != 0.0) tree->value = 1.0;
else tree->value = 0.0;
return tree->value;
}
if (tree->type == SQRT) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < 0.0)
error->one(FLERR,"Sqrt of negative value in variable formula");
tree->value = sqrt(arg1);
return tree->value;
}
if (tree->type == EXP) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = exp(arg1);
return tree->value;
}
if (tree->type == LN) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
tree->value = log(arg1);
return tree->value;
}
if (tree->type == LOG) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
tree->value = log10(arg1);
return tree->value;
}
if (tree->type == ABS) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = fabs(arg1);
return tree->value;
}
if (tree->type == SIN) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = sin(arg1);
return tree->value;
}
if (tree->type == COS) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = cos(arg1);
return tree->value;
}
if (tree->type == TAN) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = tan(arg1);
return tree->value;
}
if (tree->type == ASIN) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arcsin of invalid value in variable formula");
tree->value = asin(arg1);
return tree->value;
}
if (tree->type == ACOS) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arccos of invalid value in variable formula");
tree->value = acos(arg1);
return tree->value;
}
if (tree->type == ATAN) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = atan(arg1);
return tree->value;
}
if (tree->type == ATAN2) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = atan2(arg1,arg2);
return tree->value;
}
// random() or normal() do not become a single collapsed value
if (tree->type == RANDOM) {
collapse_tree(tree->left);
collapse_tree(tree->middle);
if (randomatom == NULL) {
int seed = static_cast<int> (collapse_tree(tree->right));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return 0.0;
}
if (tree->type == NORMAL) {
collapse_tree(tree->left);
double sigma = collapse_tree(tree->middle);
if (sigma < 0.0)
error->one(FLERR,"Invalid math function in variable formula");
if (randomatom == NULL) {
int seed = static_cast<int> (collapse_tree(tree->right));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return 0.0;
}
if (tree->type == CEIL) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = ceil(arg1);
return tree->value;
}
if (tree->type == FLOOR) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = floor(arg1);
return tree->value;
}
if (tree->type == ROUND) {
arg1 = collapse_tree(tree->left);
if (tree->left->type != VALUE) return 0.0;
tree->type = VALUE;
tree->value = MYROUND(arg1);
return tree->value;
}
if (tree->type == RAMP) {
arg1 = collapse_tree(tree->left);
arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
tree->value = arg1 + delta*(arg2-arg1);
return tree->value;
}
if (tree->type == STAGGER) {
int ivalue1 = static_cast<int> (collapse_tree(tree->left));
int ivalue2 = static_cast<int> (collapse_tree(tree->right));
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
int lower = update->ntimestep/ivalue1 * ivalue1;
int delta = update->ntimestep - lower;
if (delta < ivalue2) tree->value = lower+ivalue2;
else tree->value = lower+ivalue1;
return tree->value;
}
if (tree->type == LOGFREQ) {
int ivalue1 = static_cast<int> (collapse_tree(tree->left));
int ivalue2 = static_cast<int> (collapse_tree(tree->middle));
int ivalue3 = static_cast<int> (collapse_tree(tree->right));
if (tree->left->type != VALUE || tree->middle->type != VALUE ||
tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 || ivalue2 >= ivalue3)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) tree->value = ivalue1;
else {
int lower = ivalue1;
while (update->ntimestep >= ivalue3*lower) lower *= ivalue3;
int multiple = update->ntimestep/lower;
if (multiple < ivalue2) tree->value = (multiple+1)*lower;
else tree->value = lower*ivalue3;
}
return tree->value;
}
if (tree->type == STRIDE) {
int ivalue1 = static_cast<int> (collapse_tree(tree->left));
int ivalue2 = static_cast<int> (collapse_tree(tree->middle));
int ivalue3 = static_cast<int> (collapse_tree(tree->right));
if (tree->left->type != VALUE || tree->middle->type != VALUE ||
tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) tree->value = ivalue1;
else if (update->ntimestep < ivalue2) {
int offset = update->ntimestep - ivalue1;
tree->value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (tree->value > ivalue2) tree->value = 9.0e18;
} else tree->value = 9.0e18;
return tree->value;
}
if (tree->type == VDISPLACE) {
double arg1 = collapse_tree(tree->left);
double arg2 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
double delta = update->ntimestep - update->beginstep;
tree->value = arg1 + arg2*delta*update->dt;
return tree->value;
}
if (tree->type == SWIGGLE) {
double arg1 = collapse_tree(tree->left);
double arg2 = collapse_tree(tree->middle);
double arg3 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->middle->type != VALUE ||
tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
tree->value = arg1 + arg2*sin(omega*delta*update->dt);
return tree->value;
}
if (tree->type == CWIGGLE) {
double arg1 = collapse_tree(tree->left);
double arg2 = collapse_tree(tree->middle);
double arg3 = collapse_tree(tree->right);
if (tree->left->type != VALUE || tree->middle->type != VALUE ||
tree->right->type != VALUE) return 0.0;
tree->type = VALUE;
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
tree->value = arg1 + arg2*(1.0-cos(omega*delta*update->dt));
return tree->value;
}
// mask functions do not become a single collapsed value
if (tree->type == GMASK) return 0.0;
if (tree->type == RMASK) return 0.0;
if (tree->type == GRMASK) return 0.0;
return 0.0;
}
/* ----------------------------------------------------------------------
evaluate an atom-style variable parse tree for atom I
tree was created by one-time parsing of formula string via evaulate()
customize by adding a function:
sqrt(),exp(),ln(),log(),sin(),cos(),tan(),asin(),acos(),atan(),
atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(),
ramp(x,y),stagger(x,y),logfreq(x,y,z),stride(x,y,z),
vdisplace(x,y),swiggle(x,y,z),cwiggle(x,y,z),
gmask(x),rmask(x),grmask(x,y)
---------------------------------------------------------------------- */
double Variable::eval_tree(Tree *tree, int i)
{
double arg,arg1,arg2,arg3;
if (tree->type == VALUE) return tree->value;
if (tree->type == ATOMARRAY) return tree->array[i*tree->nstride];
if (tree->type == TYPEARRAY) return tree->array[atom->type[i]];
if (tree->type == INTARRAY) return (double) tree->iarray[i*tree->nstride];
if (tree->type == BIGINTARRAY) return (double) tree->barray[i*tree->nstride];
if (tree->type == ADD)
return eval_tree(tree->left,i) + eval_tree(tree->right,i);
if (tree->type == SUBTRACT)
return eval_tree(tree->left,i) - eval_tree(tree->right,i);
if (tree->type == MULTIPLY)
return eval_tree(tree->left,i) * eval_tree(tree->right,i);
if (tree->type == DIVIDE) {
double denom = eval_tree(tree->right,i);
if (denom == 0.0) error->one(FLERR,"Divide by 0 in variable formula");
return eval_tree(tree->left,i) / denom;
}
if (tree->type == MODULO) {
double denom = eval_tree(tree->right,i);
if (denom == 0.0) error->one(FLERR,"Modulo 0 in variable formula");
return fmod(eval_tree(tree->left,i),denom);
}
if (tree->type == CARAT) {
double exponent = eval_tree(tree->right,i);
if (exponent == 0.0) error->one(FLERR,"Power by 0 in variable formula");
return pow(eval_tree(tree->left,i),exponent);
}
if (tree->type == UNARY) return -eval_tree(tree->left,i);
if (tree->type == NOT) {
if (eval_tree(tree->left,i) == 0.0) return 1.0;
else return 0.0;
}
if (tree->type == EQ) {
if (eval_tree(tree->left,i) == eval_tree(tree->right,i)) return 1.0;
else return 0.0;
}
if (tree->type == NE) {
if (eval_tree(tree->left,i) != eval_tree(tree->right,i)) return 1.0;
else return 0.0;
}
if (tree->type == LT) {
if (eval_tree(tree->left,i) < eval_tree(tree->right,i)) return 1.0;
else return 0.0;
}
if (tree->type == LE) {
if (eval_tree(tree->left,i) <= eval_tree(tree->right,i)) return 1.0;
else return 0.0;
}
if (tree->type == GT) {
if (eval_tree(tree->left,i) > eval_tree(tree->right,i)) return 1.0;
else return 0.0;
}
if (tree->type == GE) {
if (eval_tree(tree->left,i) >= eval_tree(tree->right,i)) return 1.0;
else return 0.0;
}
if (tree->type == AND) {
if (eval_tree(tree->left,i) != 0.0 && eval_tree(tree->right,i) != 0.0)
return 1.0;
else return 0.0;
}
if (tree->type == OR) {
if (eval_tree(tree->left,i) != 0.0 || eval_tree(tree->right,i) != 0.0)
return 1.0;
else return 0.0;
}
if (tree->type == SQRT) {
arg1 = eval_tree(tree->left,i);
if (arg1 < 0.0)
error->one(FLERR,"Sqrt of negative value in variable formula");
return sqrt(arg1);
}
if (tree->type == EXP)
return exp(eval_tree(tree->left,i));
if (tree->type == LN) {
arg1 = eval_tree(tree->left,i);
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
return log(arg1);
}
if (tree->type == LOG) {
arg1 = eval_tree(tree->left,i);
if (arg1 <= 0.0)
error->one(FLERR,"Log of zero/negative value in variable formula");
return log10(arg1);
}
if (tree->type == ABS)
return fabs(eval_tree(tree->left,i));
if (tree->type == SIN)
return sin(eval_tree(tree->left,i));
if (tree->type == COS)
return cos(eval_tree(tree->left,i));
if (tree->type == TAN)
return tan(eval_tree(tree->left,i));
if (tree->type == ASIN) {
arg1 = eval_tree(tree->left,i);
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arcsin of invalid value in variable formula");
return asin(arg1);
}
if (tree->type == ACOS) {
arg1 = eval_tree(tree->left,i);
if (arg1 < -1.0 || arg1 > 1.0)
error->one(FLERR,"Arccos of invalid value in variable formula");
return acos(arg1);
}
if (tree->type == ATAN)
return atan(eval_tree(tree->left,i));
if (tree->type == ATAN2)
return atan2(eval_tree(tree->left,i),eval_tree(tree->right,i));
if (tree->type == RANDOM) {
double lower = eval_tree(tree->left,i);
double upper = eval_tree(tree->middle,i);
if (randomatom == NULL) {
int seed = static_cast<int> (eval_tree(tree->right,i));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return randomatom->uniform()*(upper-lower)+lower;
}
if (tree->type == NORMAL) {
double mu = eval_tree(tree->left,i);
double sigma = eval_tree(tree->middle,i);
if (sigma < 0.0)
error->one(FLERR,"Invalid math function in variable formula");
if (randomatom == NULL) {
int seed = static_cast<int> (eval_tree(tree->right,i));
if (seed <= 0)
error->one(FLERR,"Invalid math function in variable formula");
randomatom = new RanMars(lmp,seed+me);
}
return mu + sigma*randomatom->gaussian();
}
if (tree->type == CEIL)
return ceil(eval_tree(tree->left,i));
if (tree->type == FLOOR)
return floor(eval_tree(tree->left,i));
if (tree->type == ROUND)
return MYROUND(eval_tree(tree->left,i));
if (tree->type == RAMP) {
arg1 = eval_tree(tree->left,i);
arg2 = eval_tree(tree->right,i);
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
arg = arg1 + delta*(arg2-arg1);
return arg;
}
if (tree->type == STAGGER) {
int ivalue1 = static_cast<int> (eval_tree(tree->left,i));
int ivalue2 = static_cast<int> (eval_tree(tree->right,i));
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
int lower = update->ntimestep/ivalue1 * ivalue1;
int delta = update->ntimestep - lower;
if (delta < ivalue2) arg = lower+ivalue2;
else arg = lower+ivalue1;
return arg;
}
if (tree->type == LOGFREQ) {
int ivalue1 = static_cast<int> (eval_tree(tree->left,i));
int ivalue2 = static_cast<int> (eval_tree(tree->middle,i));
int ivalue3 = static_cast<int> (eval_tree(tree->right,i));
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 || ivalue2 >= ivalue3)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) arg = ivalue1;
else {
int lower = ivalue1;
while (update->ntimestep >= ivalue3*lower) lower *= ivalue3;
int multiple = update->ntimestep/lower;
if (multiple < ivalue2) arg = (multiple+1)*lower;
else arg = lower*ivalue3;
}
return arg;
}
if (tree->type == STRIDE) {
int ivalue1 = static_cast<int> (eval_tree(tree->left,i));
int ivalue2 = static_cast<int> (eval_tree(tree->middle,i));
int ivalue3 = static_cast<int> (eval_tree(tree->right,i));
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
if (update->ntimestep < ivalue1) arg = ivalue1;
else if (update->ntimestep < ivalue2) {
int offset = update->ntimestep - ivalue1;
arg = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (arg > ivalue2) arg = 9.0e18;
} else arg = 9.0e18;
return arg;
}
if (tree->type == VDISPLACE) {
arg1 = eval_tree(tree->left,i);
arg2 = eval_tree(tree->right,i);
double delta = update->ntimestep - update->beginstep;
arg = arg1 + arg2*delta*update->dt;
return arg;
}
if (tree->type == SWIGGLE) {
arg1 = eval_tree(tree->left,i);
arg2 = eval_tree(tree->middle,i);
arg3 = eval_tree(tree->right,i);
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
arg = arg1 + arg2*sin(omega*delta*update->dt);
return arg;
}
if (tree->type == CWIGGLE) {
arg1 = eval_tree(tree->left,i);
arg2 = eval_tree(tree->middle,i);
arg3 = eval_tree(tree->right,i);
if (arg3 == 0.0)
error->one(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/arg3;
arg = arg1 + arg2*(1.0-cos(omega*delta*update->dt));
return arg;
}
if (tree->type == GMASK) {
if (atom->mask[i] & tree->ivalue1) return 1.0;
else return 0.0;
}
if (tree->type == RMASK) {
if (domain->regions[tree->ivalue1]->match(atom->x[i][0],
atom->x[i][1],
atom->x[i][2])) return 1.0;
else return 0.0;
}
if (tree->type == GRMASK) {
if ((atom->mask[i] & tree->ivalue1) &&
(domain->regions[tree->ivalue2]->match(atom->x[i][0],
atom->x[i][1],
atom->x[i][2]))) return 1.0;
else return 0.0;
}
return 0.0;
}
/* ---------------------------------------------------------------------- */
void Variable::free_tree(Tree *tree)
{
if (tree->left) free_tree(tree->left);
if (tree->middle) free_tree(tree->middle);
if (tree->right) free_tree(tree->right);
if (tree->type == ATOMARRAY && tree->selfalloc)
memory->destroy(tree->array);
delete tree;
}
/* ----------------------------------------------------------------------
find matching parenthesis in str, allocate contents = str between parens
i = left paren
return loc or right paren
------------------------------------------------------------------------- */
int Variable::find_matching_paren(char *str, int i,char *&contents)
{
// istop = matching ')' at same level, allowing for nested parens
int istart = i;
int ilevel = 0;
while (1) {
i++;
if (!str[i]) break;
if (str[i] == '(') ilevel++;
else if (str[i] == ')' && ilevel) ilevel--;
else if (str[i] == ')') break;
}
if (!str[i]) error->all(FLERR,"Invalid syntax in variable formula");
int istop = i;
int n = istop - istart - 1;
contents = new char[n+1];
strncpy(contents,&str[istart+1],n);
contents[n] = '\0';
return istop;
}
/* ----------------------------------------------------------------------
find int between brackets and return it
ptr initially points to left bracket
return it pointing to right bracket
- error if no right bracket or brackets are empty
- error if any between-bracket chars are non-digits or value == 0
+ error if no right bracket or brackets are empty or index = 0
+ if varallow = 0: error if any between-bracket chars are non-digits
+ if varallow = 1: also allow for v_name, where name is variable name
------------------------------------------------------------------------- */
-int Variable::int_between_brackets(char *&ptr)
+int Variable::int_between_brackets(char *&ptr, int varallow)
{
+ int varflag,index;
+
char *start = ++ptr;
- while (*ptr && *ptr != ']') {
- if (!isdigit(*ptr))
- error->all(FLERR,"Non digit character between brackets in variable");
- ptr++;
+ if (varallow && strstr(ptr,"v_") == ptr) {
+ varflag = 1;
+ while (*ptr && *ptr != ']') {
+ if (!isalnum(*ptr) && *ptr != '_')
+ error->all(FLERR,"Variable name between brackets must be "
+ "alphanumeric or underscore characters");
+ ptr++;
+ }
+
+ } else {
+ varflag = 0;
+ while (*ptr && *ptr != ']') {
+ if (!isdigit(*ptr))
+ error->all(FLERR,"Non digit character between brackets in variable");
+ ptr++;
+ }
}
if (*ptr != ']') error->all(FLERR,"Mismatched brackets in variable");
if (ptr == start) error->all(FLERR,"Empty brackets in variable");
*ptr = '\0';
- int index = atoi(start);
+
+ // evaluate index as variable or as simple integer via atoi()
+
+ if (varflag) {
+ char *id = start+2;
+ int ivar = find(id);
+ if (ivar < 0)
+ error->all(FLERR,"Invalid variable name in variable formula");
+ if (eval_in_progress[ivar])
+ error->all(FLERR,"Variable has circular dependency");
+
+ char *var = retrieve(id);
+ if (var == NULL)
+ error->all(FLERR,"Invalid variable evaluation in variable formula");
+ index = static_cast<int> (atof(var));
+
+ } else {
+ index = atoi(start);
+ }
+
*ptr = ']';
if (index == 0)
error->all(FLERR,"Index between variable brackets must be positive");
return index;
}
/* ----------------------------------------------------------------------
process a math function in formula
push result onto tree or arg stack
word = math function
contents = str between parentheses with one,two,three args
return 0 if not a match, 1 if successfully processed
customize by adding a math function:
sqrt(),exp(),ln(),log(),abs(),sin(),cos(),tan(),asin(),acos(),atan(),
atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(),
ramp(x,y),stagger(x,y),logfreq(x,y,z),stride(x,y,z),
vdisplace(x,y),swiggle(x,y,z),cwiggle(x,y,z)
------------------------------------------------------------------------- */
int Variable::math_function(char *word, char *contents, Tree **tree,
Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
// word not a match to any math function
if (strcmp(word,"sqrt") && strcmp(word,"exp") &&
strcmp(word,"ln") && strcmp(word,"log") &&
strcmp(word,"abs") &&
strcmp(word,"sin") && strcmp(word,"cos") &&
strcmp(word,"tan") && strcmp(word,"asin") &&
strcmp(word,"acos") && strcmp(word,"atan") &&
strcmp(word,"atan2") && strcmp(word,"random") &&
strcmp(word,"normal") && strcmp(word,"ceil") &&
strcmp(word,"floor") && strcmp(word,"round") &&
strcmp(word,"ramp") && strcmp(word,"stagger") &&
strcmp(word,"logfreq") && strcmp(word,"stride") &&
strcmp(word,"vdisplace") &&
strcmp(word,"swiggle") && strcmp(word,"cwiggle"))
return 0;
// parse contents for arg1,arg2,arg3 separated by commas
// ptr1,ptr2 = location of 1st and 2nd comma, NULL if none
char *arg1,*arg2,*arg3;
char *ptr1,*ptr2;
ptr1 = find_next_comma(contents);
if (ptr1) {
*ptr1 = '\0';
ptr2 = find_next_comma(ptr1+1);
if (ptr2) *ptr2 = '\0';
} else ptr2 = NULL;
int n = strlen(contents) + 1;
arg1 = new char[n];
strcpy(arg1,contents);
int narg = 1;
if (ptr1) {
n = strlen(ptr1+1) + 1;
arg2 = new char[n];
strcpy(arg2,ptr1+1);
narg = 2;
} else arg2 = NULL;
if (ptr2) {
n = strlen(ptr2+1) + 1;
arg3 = new char[n];
strcpy(arg3,ptr2+1);
narg = 3;
} else arg3 = NULL;
// evaluate args
Tree *newtree;
double value1,value2,value3;
if (tree) {
newtree = new Tree();
Tree *argtree;
if (narg == 1) {
evaluate(arg1,&argtree);
newtree->left = argtree;
newtree->middle = newtree->right = NULL;
} else if (narg == 2) {
evaluate(arg1,&argtree);
newtree->left = argtree;
newtree->middle = NULL;
evaluate(arg2,&argtree);
newtree->right = argtree;
} else if (narg == 3) {
evaluate(arg1,&argtree);
newtree->left = argtree;
evaluate(arg2,&argtree);
newtree->middle = argtree;
evaluate(arg3,&argtree);
newtree->right = argtree;
}
treestack[ntreestack++] = newtree;
} else {
if (narg == 1) {
value1 = evaluate(arg1,NULL);
} else if (narg == 2) {
value1 = evaluate(arg1,NULL);
value2 = evaluate(arg2,NULL);
} else if (narg == 3) {
value1 = evaluate(arg1,NULL);
value2 = evaluate(arg2,NULL);
value3 = evaluate(arg3,NULL);
}
}
if (strcmp(word,"sqrt") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = SQRT;
else {
if (value1 < 0.0)
error->all(FLERR,"Sqrt of negative value in variable formula");
argstack[nargstack++] = sqrt(value1);
}
} else if (strcmp(word,"exp") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = EXP;
else argstack[nargstack++] = exp(value1);
} else if (strcmp(word,"ln") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LN;
else {
if (value1 <= 0.0)
error->all(FLERR,"Log of zero/negative value in variable formula");
argstack[nargstack++] = log(value1);
}
} else if (strcmp(word,"log") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LOG;
else {
if (value1 <= 0.0)
error->all(FLERR,"Log of zero/negative value in variable formula");
argstack[nargstack++] = log10(value1);
}
} else if (strcmp(word,"abs") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ABS;
else argstack[nargstack++] = fabs(value1);
} else if (strcmp(word,"sin") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = SIN;
else argstack[nargstack++] = sin(value1);
} else if (strcmp(word,"cos") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = COS;
else argstack[nargstack++] = cos(value1);
} else if (strcmp(word,"tan") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = TAN;
else argstack[nargstack++] = tan(value1);
} else if (strcmp(word,"asin") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ASIN;
else {
if (value1 < -1.0 || value1 > 1.0)
error->all(FLERR,"Arcsin of invalid value in variable formula");
argstack[nargstack++] = asin(value1);
}
} else if (strcmp(word,"acos") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ACOS;
else {
if (value1 < -1.0 || value1 > 1.0)
error->all(FLERR,"Arccos of invalid value in variable formula");
argstack[nargstack++] = acos(value1);
}
} else if (strcmp(word,"atan") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ATAN;
else argstack[nargstack++] = atan(value1);
} else if (strcmp(word,"atan2") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ATAN2;
else argstack[nargstack++] = atan2(value1,value2);
} else if (strcmp(word,"random") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = RANDOM;
else {
if (randomequal == NULL) {
int seed = static_cast<int> (value3);
if (seed <= 0)
error->all(FLERR,"Invalid math function in variable formula");
randomequal = new RanMars(lmp,seed);
}
argstack[nargstack++] = randomequal->uniform()*(value2-value1) + value1;
}
} else if (strcmp(word,"normal") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = NORMAL;
else {
if (value2 < 0.0)
error->all(FLERR,"Invalid math function in variable formula");
if (randomequal == NULL) {
int seed = static_cast<int> (value3);
if (seed <= 0)
error->all(FLERR,"Invalid math function in variable formula");
randomequal = new RanMars(lmp,seed);
}
argstack[nargstack++] = value1 + value2*randomequal->gaussian();
}
} else if (strcmp(word,"ceil") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = CEIL;
else argstack[nargstack++] = ceil(value1);
} else if (strcmp(word,"floor") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = FLOOR;
else argstack[nargstack++] = floor(value1);
} else if (strcmp(word,"round") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = ROUND;
else argstack[nargstack++] = MYROUND(value1);
} else if (strcmp(word,"ramp") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use ramp in variable formula between runs");
if (tree) newtree->type = RAMP;
else {
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
double value = value1 + delta*(value2-value1);
argstack[nargstack++] = value;
}
} else if (strcmp(word,"stagger") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = STAGGER;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2)
error->all(FLERR,"Invalid math function in variable formula");
int lower = update->ntimestep/ivalue1 * ivalue1;
int delta = update->ntimestep - lower;
double value;
if (delta < ivalue2) value = lower+ivalue2;
else value = lower+ivalue1;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"logfreq") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = LOGFREQ;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
int ivalue3 = static_cast<int> (value3);
if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue3 <= 0 || ivalue2 >= ivalue3)
error->all(FLERR,"Invalid math function in variable formula");
double value;
if (update->ntimestep < ivalue1) value = ivalue1;
else {
int lower = ivalue1;
while (update->ntimestep >= ivalue3*lower) lower *= ivalue3;
int multiple = update->ntimestep/lower;
if (multiple < ivalue2) value = (multiple+1)*lower;
else value = lower*ivalue3;
}
argstack[nargstack++] = value;
}
} else if (strcmp(word,"stride") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (tree) newtree->type = STRIDE;
else {
int ivalue1 = static_cast<int> (value1);
int ivalue2 = static_cast<int> (value2);
int ivalue3 = static_cast<int> (value3);
if (ivalue1 < 0 || ivalue2 < 0 || ivalue3 <= 0 || ivalue1 > ivalue2)
error->one(FLERR,"Invalid math function in variable formula");
double value;
if (update->ntimestep < ivalue1) value = ivalue1;
else if (update->ntimestep < ivalue2) {
int offset = update->ntimestep - ivalue1;
value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3;
if (value > ivalue2) value = 9.0e18;
} else value = 9.0e18;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"vdisplace") == 0) {
if (narg != 2)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use vdisplace in variable formula between runs");
if (tree) newtree->type = VDISPLACE;
else {
double delta = update->ntimestep - update->beginstep;
double value = value1 + value2*delta*update->dt;
argstack[nargstack++] = value;
}
} else if (strcmp(word,"swiggle") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use swiggle in variable formula between runs");
if (tree) newtree->type = CWIGGLE;
else {
if (value3 == 0.0)
error->all(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/value3;
double value = value1 + value2*sin(omega*delta*update->dt);
argstack[nargstack++] = value;
}
} else if (strcmp(word,"cwiggle") == 0) {
if (narg != 3)
error->all(FLERR,"Invalid math function in variable formula");
if (update->whichflag == 0)
error->all(FLERR,"Cannot use cwiggle in variable formula between runs");
if (tree) newtree->type = CWIGGLE;
else {
if (value3 == 0.0)
error->all(FLERR,"Invalid math function in variable formula");
double delta = update->ntimestep - update->beginstep;
double omega = 2.0*MY_PI/value3;
double value = value1 + value2*(1.0-cos(omega*delta*update->dt));
argstack[nargstack++] = value;
}
}
delete [] arg1;
delete [] arg2;
delete [] arg3;
return 1;
}
/* ----------------------------------------------------------------------
process a group function in formula with optional region arg
push result onto tree or arg stack
word = group function
contents = str between parentheses with one,two,three args
return 0 if not a match, 1 if successfully processed
customize by adding a group function with optional region arg:
count(group),mass(group),charge(group),
xcm(group,dim),vcm(group,dim),fcm(group,dim),
bound(group,xmin),gyration(group),ke(group),angmom(group,dim),
torque(group,dim),inertia(group,dim),omega(group,dim)
------------------------------------------------------------------------- */
int Variable::group_function(char *word, char *contents, Tree **tree,
Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
// word not a match to any group function
if (strcmp(word,"count") && strcmp(word,"mass") &&
strcmp(word,"charge") && strcmp(word,"xcm") &&
strcmp(word,"vcm") && strcmp(word,"fcm") &&
strcmp(word,"bound") && strcmp(word,"gyration") &&
strcmp(word,"ke") && strcmp(word,"angmom") &&
strcmp(word,"torque") && strcmp(word,"inertia") &&
strcmp(word,"omega"))
return 0;
// parse contents for arg1,arg2,arg3 separated by commas
// ptr1,ptr2 = location of 1st and 2nd comma, NULL if none
char *arg1,*arg2,*arg3;
char *ptr1,*ptr2;
ptr1 = find_next_comma(contents);
if (ptr1) {
*ptr1 = '\0';
ptr2 = find_next_comma(ptr1+1);
if (ptr2) *ptr2 = '\0';
} else ptr2 = NULL;
int n = strlen(contents) + 1;
arg1 = new char[n];
strcpy(arg1,contents);
int narg = 1;
if (ptr1) {
n = strlen(ptr1+1) + 1;
arg2 = new char[n];
strcpy(arg2,ptr1+1);
narg = 2;
} else arg2 = NULL;
if (ptr2) {
n = strlen(ptr2+1) + 1;
arg3 = new char[n];
strcpy(arg3,ptr2+1);
narg = 3;
} else arg3 = NULL;
// group to operate on
int igroup = group->find(arg1);
if (igroup == -1)
error->all(FLERR,"Group ID in variable formula does not exist");
// match word to group function
double value;
if (strcmp(word,"count") == 0) {
if (narg == 1) value = group->count(igroup);
else if (narg == 2) value = group->count(igroup,region_function(arg2));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"mass") == 0) {
if (narg == 1) value = group->mass(igroup);
else if (narg == 2) value = group->mass(igroup,region_function(arg2));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"charge") == 0) {
if (narg == 1) value = group->charge(igroup);
else if (narg == 2) value = group->charge(igroup,region_function(arg2));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"xcm") == 0) {
atom->check_mass();
double xcm[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
} else if (narg == 3) {
int iregion = region_function(arg3);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"x") == 0) value = xcm[0];
else if (strcmp(arg2,"y") == 0) value = xcm[1];
else if (strcmp(arg2,"z") == 0) value = xcm[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"vcm") == 0) {
atom->check_mass();
double vcm[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->vcm(igroup,masstotal,vcm);
} else if (narg == 3) {
int iregion = region_function(arg3);
double masstotal = group->mass(igroup,iregion);
group->vcm(igroup,masstotal,vcm,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"x") == 0) value = vcm[0];
else if (strcmp(arg2,"y") == 0) value = vcm[1];
else if (strcmp(arg2,"z") == 0) value = vcm[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"fcm") == 0) {
double fcm[3];
if (narg == 2) group->fcm(igroup,fcm);
else if (narg == 3) group->fcm(igroup,fcm,region_function(arg3));
else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"x") == 0) value = fcm[0];
else if (strcmp(arg2,"y") == 0) value = fcm[1];
else if (strcmp(arg2,"z") == 0) value = fcm[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"bound") == 0) {
double minmax[6];
if (narg == 2) group->bounds(igroup,minmax);
else if (narg == 3) group->bounds(igroup,minmax,region_function(arg3));
else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"xmin") == 0) value = minmax[0];
else if (strcmp(arg2,"xmax") == 0) value = minmax[1];
else if (strcmp(arg2,"ymin") == 0) value = minmax[2];
else if (strcmp(arg2,"ymax") == 0) value = minmax[3];
else if (strcmp(arg2,"zmin") == 0) value = minmax[4];
else if (strcmp(arg2,"zmax") == 0) value = minmax[5];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"gyration") == 0) {
atom->check_mass();
double xcm[3];
if (narg == 1) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
value = group->gyration(igroup,masstotal,xcm);
} else if (narg == 2) {
int iregion = region_function(arg2);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
value = group->gyration(igroup,masstotal,xcm,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"ke") == 0) {
if (narg == 1) value = group->ke(igroup);
else if (narg == 2) value = group->ke(igroup,region_function(arg2));
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"angmom") == 0) {
atom->check_mass();
double xcm[3],lmom[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->angmom(igroup,xcm,lmom);
} else if (narg == 3) {
int iregion = region_function(arg3);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->angmom(igroup,xcm,lmom,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"x") == 0) value = lmom[0];
else if (strcmp(arg2,"y") == 0) value = lmom[1];
else if (strcmp(arg2,"z") == 0) value = lmom[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"torque") == 0) {
atom->check_mass();
double xcm[3],tq[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->torque(igroup,xcm,tq);
} else if (narg == 3) {
int iregion = region_function(arg3);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->torque(igroup,xcm,tq,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"x") == 0) value = tq[0];
else if (strcmp(arg2,"y") == 0) value = tq[1];
else if (strcmp(arg2,"z") == 0) value = tq[2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"inertia") == 0) {
atom->check_mass();
double xcm[3],inertia[3][3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->inertia(igroup,xcm,inertia);
} else if (narg == 3) {
int iregion = region_function(arg3);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->inertia(igroup,xcm,inertia,iregion);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"xx") == 0) value = inertia[0][0];
else if (strcmp(arg2,"yy") == 0) value = inertia[1][1];
else if (strcmp(arg2,"zz") == 0) value = inertia[2][2];
else if (strcmp(arg2,"xy") == 0) value = inertia[0][1];
else if (strcmp(arg2,"yz") == 0) value = inertia[1][2];
else if (strcmp(arg2,"xz") == 0) value = inertia[0][2];
else error->all(FLERR,"Invalid group function in variable formula");
} else if (strcmp(word,"omega") == 0) {
atom->check_mass();
double xcm[3],angmom[3],inertia[3][3],omega[3];
if (narg == 2) {
double masstotal = group->mass(igroup);
group->xcm(igroup,masstotal,xcm);
group->angmom(igroup,xcm,angmom);
group->inertia(igroup,xcm,inertia);
group->omega(angmom,inertia,omega);
} else if (narg == 3) {
int iregion = region_function(arg3);
double masstotal = group->mass(igroup,iregion);
group->xcm(igroup,masstotal,xcm,iregion);
group->angmom(igroup,xcm,angmom,iregion);
group->inertia(igroup,xcm,inertia,iregion);
group->omega(angmom,inertia,omega);
} else error->all(FLERR,"Invalid group function in variable formula");
if (strcmp(arg2,"x") == 0) value = omega[0];
else if (strcmp(arg2,"y") == 0) value = omega[1];
else if (strcmp(arg2,"z") == 0) value = omega[2];
else error->all(FLERR,"Invalid group function in variable formula");
}
delete [] arg1;
delete [] arg2;
delete [] arg3;
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
return 1;
}
/* ---------------------------------------------------------------------- */
int Variable::region_function(char *id)
{
int iregion = domain->find_region(id);
if (iregion == -1)
error->all(FLERR,"Region ID in variable formula does not exist");
// init region in case sub-regions have been deleted
domain->regions[iregion]->init();
return iregion;
}
/* ----------------------------------------------------------------------
process a special function in formula
push result onto tree or arg stack
word = special function
contents = str between parentheses with one,two,three args
return 0 if not a match, 1 if successfully processed
customize by adding a special function:
sum(x),min(x),max(x),ave(x),trap(x),slope(x),
gmask(x),rmask(x),grmask(x,y),next(x)
------------------------------------------------------------------------- */
int Variable::special_function(char *word, char *contents, Tree **tree,
Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
double value,xvalue,sx,sy,sxx,sxy;
// word not a match to any special function
if (strcmp(word,"sum") && strcmp(word,"min") && strcmp(word,"max") &&
strcmp(word,"ave") && strcmp(word,"trap") && strcmp(word,"slope") &&
strcmp(word,"isdef") && strcmp(word,"gmask") && strcmp(word,"rmask") &&
strcmp(word,"grmask") && strcmp(word,"next"))
return 0;
// parse contents for arg1,arg2,arg3 separated by commas
// ptr1,ptr2 = location of 1st and 2nd comma, NULL if none
char *arg1,*arg2,*arg3;
char *ptr1,*ptr2;
ptr1 = find_next_comma(contents);
if (ptr1) {
*ptr1 = '\0';
ptr2 = find_next_comma(ptr1+1);
if (ptr2) *ptr2 = '\0';
} else ptr2 = NULL;
int n = strlen(contents) + 1;
arg1 = new char[n];
strcpy(arg1,contents);
int narg = 1;
if (ptr1) {
n = strlen(ptr1+1) + 1;
arg2 = new char[n];
strcpy(arg2,ptr1+1);
narg = 2;
} else arg2 = NULL;
if (ptr2) {
n = strlen(ptr2+1) + 1;
arg3 = new char[n];
strcpy(arg3,ptr2+1);
narg = 3;
} else arg3 = NULL;
// special functions that operate on global vectors
if (strcmp(word,"sum") == 0 || strcmp(word,"min") == 0 ||
strcmp(word,"max") == 0 || strcmp(word,"ave") == 0 ||
strcmp(word,"trap") == 0 || strcmp(word,"slope") == 0) {
int method;
if (strcmp(word,"sum") == 0) method = SUM;
else if (strcmp(word,"min") == 0) method = XMIN;
else if (strcmp(word,"max") == 0) method = XMAX;
else if (strcmp(word,"ave") == 0) method = AVE;
else if (strcmp(word,"trap") == 0) method = TRAP;
else if (strcmp(word,"slope") == 0) method = SLOPE;
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
Compute *compute = NULL;
Fix *fix = NULL;
int index,nvec,nstride;
if (strstr(arg1,"c_") == arg1) {
ptr1 = strchr(arg1,'[');
if (ptr1) {
ptr2 = ptr1;
- index = int_between_brackets(ptr2);
+ index = int_between_brackets(ptr2,0);
*ptr1 = '\0';
} else index = 0;
int icompute = modify->find_compute(&arg1[2]);
if (icompute < 0)
error->all(FLERR,"Invalid compute ID in variable formula");
compute = modify->compute[icompute];
if (index == 0 && compute->vector_flag) {
if (update->whichflag == 0) {
if (compute->invoked_vector != update->ntimestep)
error->all(FLERR,
"Compute used in variable between runs is not current");
} else if (!(compute->invoked_flag & INVOKED_VECTOR)) {
compute->compute_vector();
compute->invoked_flag |= INVOKED_VECTOR;
}
nvec = compute->size_vector;
nstride = 1;
} else if (index && compute->array_flag) {
if (index > compute->size_array_cols)
error->all(FLERR,"Variable formula compute array "
"is accessed out-of-range");
if (update->whichflag == 0) {
if (compute->invoked_array != update->ntimestep)
error->all(FLERR,
"Compute used in variable between runs is not current");
} else if (!(compute->invoked_flag & INVOKED_ARRAY)) {
compute->compute_array();
compute->invoked_flag |= INVOKED_ARRAY;
}
nvec = compute->size_array_rows;
nstride = compute->size_array_cols;
} else error->all(FLERR,"Mismatched compute in variable formula");
} else if (strstr(arg1,"f_") == arg1) {
ptr1 = strchr(arg1,'[');
if (ptr1) {
ptr2 = ptr1;
- index = int_between_brackets(ptr2);
+ index = int_between_brackets(ptr2,0);
*ptr1 = '\0';
} else index = 0;
int ifix = modify->find_fix(&arg1[2]);
if (ifix < 0) error->all(FLERR,"Invalid fix ID in variable formula");
fix = modify->fix[ifix];
if (index == 0 && fix->vector_flag) {
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
nvec = fix->size_vector;
nstride = 1;
} else if (index && fix->array_flag) {
if (index > fix->size_array_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (update->whichflag > 0 && update->ntimestep % fix->global_freq)
error->all(FLERR,"Fix in variable not computed at compatible time");
nvec = fix->size_array_rows;
nstride = fix->size_array_cols;
} else error->all(FLERR,"Mismatched fix in variable formula");
} else error->all(FLERR,"Invalid special function in variable formula");
value = 0.0;
if (method == SLOPE) sx = sy = sxx = sxy = 0.0;
if (method == XMIN) value = BIG;
if (method == XMAX) value = -BIG;
if (compute) {
double *vec;
if (index) {
if (compute->array) vec = &compute->array[0][index-1];
else vec = NULL;
} else vec = compute->vector;
int j = 0;
for (int i = 0; i < nvec; i++) {
if (method == SUM) value += vec[j];
else if (method == XMIN) value = MIN(value,vec[j]);
else if (method == XMAX) value = MAX(value,vec[j]);
else if (method == AVE) value += vec[j];
else if (method == TRAP) value += vec[j];
else if (method == SLOPE) {
if (nvec > 1) xvalue = (double) i / (nvec-1);
else xvalue = 0.0;
sx += xvalue;
sy += vec[j];
sxx += xvalue*xvalue;
sxy += xvalue*vec[j];
}
j += nstride;
}
if (method == TRAP) value -= 0.5*vec[0] + 0.5*vec[nvec-1];
}
if (fix) {
double one;
for (int i = 0; i < nvec; i++) {
if (index) one = fix->compute_array(i,index-1);
else one = fix->compute_vector(i);
if (method == SUM) value += one;
else if (method == XMIN) value = MIN(value,one);
else if (method == XMAX) value = MAX(value,one);
else if (method == AVE) value += one;
else if (method == TRAP) value += one;
else if (method == SLOPE) {
if (nvec > 1) xvalue = (double) i / (nvec-1);
else xvalue = 0.0;
sx += xvalue;
sy += one;
sxx += xvalue*xvalue;
sxy += xvalue*one;
}
}
if (method == TRAP) {
if (index) value -= 0.5*fix->compute_array(0,index-1) +
0.5*fix->compute_array(nvec-1,index-1);
else value -= 0.5*fix->compute_vector(0) +
0.5*fix->compute_vector(nvec-1);
}
}
if (method == AVE) value /= nvec;
if (method == SLOPE) {
double numerator = sxy - sx*sy;
double denominator = sxx - sx*sx;
if (denominator != 0.0) value = numerator/denominator / nvec;
else value = BIG;
}
// save value in tree or on argstack
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
// mask special functions
} else if (strcmp(word,"gmask") == 0) {
if (tree == NULL)
error->all(FLERR,"Gmask function in equal-style variable formula");
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
int igroup = group->find(arg1);
if (igroup == -1)
error->all(FLERR,"Group ID in variable formula does not exist");
Tree *newtree = new Tree();
newtree->type = GMASK;
newtree->ivalue1 = group->bitmask[igroup];
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else if (strcmp(word,"rmask") == 0) {
if (tree == NULL)
error->all(FLERR,"Rmask function in equal-style variable formula");
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
int iregion = region_function(arg1);
+ domain->regions[iregion]->prematch();
Tree *newtree = new Tree();
newtree->type = RMASK;
newtree->ivalue1 = iregion;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else if (strcmp(word,"grmask") == 0) {
if (tree == NULL)
error->all(FLERR,"Grmask function in equal-style variable formula");
if (narg != 2)
error->all(FLERR,"Invalid special function in variable formula");
int igroup = group->find(arg1);
if (igroup == -1)
error->all(FLERR,"Group ID in variable formula does not exist");
int iregion = region_function(arg2);
+ domain->regions[iregion]->prematch();
Tree *newtree = new Tree();
newtree->type = GRMASK;
newtree->ivalue1 = group->bitmask[igroup];
newtree->ivalue2 = iregion;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
// check if a variable is defined
} else if (strcmp(word,"isdef") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid special function isdef in variable formula");
if (find(arg1) == -1)
argstack[nargstack++] = 0.0;
else
argstack[nargstack++] = 1.0;
// special function for file-style or atomfile-style variables
} else if (strcmp(word,"next") == 0) {
if (narg != 1)
error->all(FLERR,"Invalid special function in variable formula");
int ivar = find(arg1);
if (ivar == -1)
error->all(FLERR,"Variable ID in variable formula does not exist");
// SCALARFILE has single current value, read next one
// save value in tree or on argstack
if (style[ivar] == SCALARFILE) {
double value = atof(data[ivar][0]);
int done = reader[ivar]->read_scalar(data[ivar][0]);
if (done) remove(ivar);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
// ATOMFILE has per-atom values, save values in tree
// copy current per-atom values into result so can read next ones
// set selfalloc = 1 so result will be deleted by free_tree() after eval
} else if (style[ivar] == ATOMFILE) {
if (tree == NULL)
error->all(FLERR,"Atomfile variable in equal-style variable formula");
double *result;
memory->create(result,atom->nlocal,"variable:result");
memcpy(result,reader[ivar]->fix->vstore,atom->nlocal*sizeof(double));
int done = reader[ivar]->read_peratom();
if (done) remove(ivar);
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = result;
newtree->nstride = 1;
newtree->selfalloc = 1;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else error->all(FLERR,"Invalid variable style in special function next");
}
delete [] arg1;
delete [] arg2;
delete [] arg3;
return 1;
}
/* ----------------------------------------------------------------------
extract a global value from a per-atom quantity in a formula
flag = 0 -> word is an atom vector
flag = 1 -> vector is a per-atom compute or fix quantity with nstride
id = positive global ID of atom, converted to local index
push result onto tree or arg stack
customize by adding an atom vector:
id,mass,type,mol,x,y,z,vx,vy,vz,fx,fy,fz
------------------------------------------------------------------------- */
void Variable::peratom2global(int flag, char *word,
double *vector, int nstride, int id,
Tree **tree, Tree **treestack, int &ntreestack,
double *argstack, int &nargstack)
{
if (atom->map_style == 0)
error->all(FLERR,
"Indexed per-atom vector in variable formula without atom map");
int index = atom->map(id);
double mine;
if (index >= 0 && index < atom->nlocal) {
if (flag == 0) {
if (strcmp(word,"id") == 0) mine = atom->tag[index];
else if (strcmp(word,"mass") == 0) {
if (atom->rmass) mine = atom->rmass[index];
else mine = atom->mass[atom->type[index]];
}
else if (strcmp(word,"type") == 0) mine = atom->type[index];
else if (strcmp(word,"mol") == 0) {
if (!atom->molecule_flag)
error->one(FLERR,"Variable uses atom property that isn't allocated");
mine = atom->molecule[index];
}
else if (strcmp(word,"x") == 0) mine = atom->x[index][0];
else if (strcmp(word,"y") == 0) mine = atom->x[index][1];
else if (strcmp(word,"z") == 0) mine = atom->x[index][2];
else if (strcmp(word,"vx") == 0) mine = atom->v[index][0];
else if (strcmp(word,"vy") == 0) mine = atom->v[index][1];
else if (strcmp(word,"vz") == 0) mine = atom->v[index][2];
else if (strcmp(word,"fx") == 0) mine = atom->f[index][0];
else if (strcmp(word,"fy") == 0) mine = atom->f[index][1];
else if (strcmp(word,"fz") == 0) mine = atom->f[index][2];
else error->one(FLERR,"Invalid atom vector in variable formula");
} else mine = vector[index*nstride];
} else mine = 0.0;
double value;
MPI_Allreduce(&mine,&value,1,MPI_DOUBLE,MPI_SUM,world);
if (tree) {
Tree *newtree = new Tree();
newtree->type = VALUE;
newtree->value = value;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
} else argstack[nargstack++] = value;
}
/* ----------------------------------------------------------------------
check if word matches an atom vector
return 1 if yes, else 0
customize by adding an atom vector:
id,mass,type,mol,x,y,z,vx,vy,vz,fx,fy,fz
------------------------------------------------------------------------- */
int Variable::is_atom_vector(char *word)
{
if (strcmp(word,"id") == 0) return 1;
if (strcmp(word,"mass") == 0) return 1;
if (strcmp(word,"type") == 0) return 1;
if (strcmp(word,"mol") == 0) return 1;
if (strcmp(word,"x") == 0) return 1;
if (strcmp(word,"y") == 0) return 1;
if (strcmp(word,"z") == 0) return 1;
if (strcmp(word,"vx") == 0) return 1;
if (strcmp(word,"vy") == 0) return 1;
if (strcmp(word,"vz") == 0) return 1;
if (strcmp(word,"fx") == 0) return 1;
if (strcmp(word,"fy") == 0) return 1;
if (strcmp(word,"fz") == 0) return 1;
return 0;
}
/* ----------------------------------------------------------------------
process an atom vector in formula
push result onto tree
word = atom vector
customize by adding an atom vector:
id,mass,type,mol,x,y,z,vx,vy,vz,fx,fy,fz
------------------------------------------------------------------------- */
void Variable::atom_vector(char *word, Tree **tree,
Tree **treestack, int &ntreestack)
{
if (tree == NULL)
error->all(FLERR,"Atom vector in equal-style variable formula");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->nstride = 3;
newtree->selfalloc = 0;
newtree->left = newtree->middle = newtree->right = NULL;
treestack[ntreestack++] = newtree;
if (strcmp(word,"id") == 0) {
if (sizeof(tagint) == sizeof(smallint)) {
newtree->type = INTARRAY;
newtree->iarray = (int *) atom->tag;
} else {
newtree->type = BIGINTARRAY;
newtree->barray = (bigint *) atom->tag;
}
newtree->nstride = 1;
} else if (strcmp(word,"mass") == 0) {
if (atom->rmass) {
newtree->nstride = 1;
newtree->array = atom->rmass;
} else {
newtree->type = TYPEARRAY;
newtree->array = atom->mass;
}
} else if (strcmp(word,"type") == 0) {
newtree->type = INTARRAY;
newtree->nstride = 1;
newtree->iarray = atom->type;
} else if (strcmp(word,"mol") == 0) {
if (!atom->molecule_flag)
error->one(FLERR,"Variable uses atom property that isn't allocated");
if (sizeof(tagint) == sizeof(smallint)) {
newtree->type = INTARRAY;
newtree->iarray = (int *) atom->molecule;
} else {
newtree->type = BIGINTARRAY;
newtree->barray = (bigint *) atom->molecule;
}
newtree->nstride = 1;
}
else if (strcmp(word,"x") == 0) newtree->array = &atom->x[0][0];
else if (strcmp(word,"y") == 0) newtree->array = &atom->x[0][1];
else if (strcmp(word,"z") == 0) newtree->array = &atom->x[0][2];
else if (strcmp(word,"vx") == 0) newtree->array = &atom->v[0][0];
else if (strcmp(word,"vy") == 0) newtree->array = &atom->v[0][1];
else if (strcmp(word,"vz") == 0) newtree->array = &atom->v[0][2];
else if (strcmp(word,"fx") == 0) newtree->array = &atom->f[0][0];
else if (strcmp(word,"fy") == 0) newtree->array = &atom->f[0][1];
else if (strcmp(word,"fz") == 0) newtree->array = &atom->f[0][2];
}
/* ----------------------------------------------------------------------
check if word matches a constant
return 1 if yes, else 0
customize by adding a constant: PI
------------------------------------------------------------------------- */
int Variable::is_constant(char *word)
{
if (strcmp(word,"PI") == 0) return 1;
return 0;
}
/* ----------------------------------------------------------------------
process a constant in formula
customize by adding a constant: PI
------------------------------------------------------------------------- */
double Variable::constant(char *word)
{
if (strcmp(word,"PI") == 0) return MY_PI;
return 0.0;
}
/* ----------------------------------------------------------------------
read a floating point value from a string
generate an error if not a legitimate floating point value
------------------------------------------------------------------------- */
double Variable::numeric(char *str)
{
int n = strlen(str);
for (int i = 0; i < n; i++) {
if (isdigit(str[i])) continue;
if (str[i] == '-' || str[i] == '+' || str[i] == '.') continue;
if (str[i] == 'e' || str[i] == 'E') continue;
error->all(FLERR,
"Expected floating point parameter in variable definition");
}
return atof(str);
}
/* ----------------------------------------------------------------------
read an integer value from a string
generate an error if not a legitimate integer value
------------------------------------------------------------------------- */
int Variable::inumeric(char *str)
{
int n = strlen(str);
for (int i = 0; i < n; i++) {
if (isdigit(str[i]) || str[i] == '-' || str[i] == '+') continue;
error->all(FLERR,"Expected integer parameter in variable definition");
}
return atoi(str);
}
/* ----------------------------------------------------------------------
find next comma in str
skip commas inside one or more nested parenthesis
only return ptr to comma at level 0, else NULL if not found
------------------------------------------------------------------------- */
char *Variable::find_next_comma(char *str)
{
int level = 0;
for (char *p = str; *p; ++p) {
if ('(' == *p) level++;
else if (')' == *p) level--;
else if (',' == *p && !level) return p;
}
return NULL;
}
/* ----------------------------------------------------------------------
debug routine for printing formula tree recursively
------------------------------------------------------------------------- */
void Variable::print_tree(Tree *tree, int level)
{
printf("TREE %d: %d %g\n",level,tree->type,tree->value);
if (tree->left) print_tree(tree->left,level+1);
if (tree->middle) print_tree(tree->middle,level+1);
if (tree->right) print_tree(tree->right,level+1);
return;
}
/* ----------------------------------------------------------------------
recursive evaluation of string str
called from "if" command in input script
str is a boolean expression containing one or more items:
number = 0.0, -5.45, 2.8e-4, ...
math operation = (),x==y,x!=y,x<y,x<=y,x>y,x>=y,x&&y,x||y
------------------------------------------------------------------------- */
double Variable::evaluate_boolean(char *str)
{
int op,opprevious,flag1,flag2;
double value1,value2;
char onechar;
char *str1,*str2;
struct Arg {
int flag; // 0 for numeric value, 1 for string
double value; // stored numeric value
char *str; // stored string
};
Arg argstack[MAXLEVEL];
int opstack[MAXLEVEL];
int nargstack = 0;
int nopstack = 0;
int i = 0;
int expect = ARG;
while (1) {
onechar = str[i];
// whitespace: just skip
if (isspace(onechar)) i++;
// ----------------
// parentheses: recursively evaluate contents of parens
// ----------------
else if (onechar == '(') {
if (expect == OP)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = OP;
char *contents;
i = find_matching_paren(str,i,contents);
i++;
// evaluate contents and push on stack
argstack[nargstack].value = evaluate_boolean(contents);
argstack[nargstack].flag = 0;
nargstack++;
delete [] contents;
// ----------------
// number: push value onto stack
// ----------------
} else if (isdigit(onechar) || onechar == '.' || onechar == '-') {
if (expect == OP)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = OP;
// set I to end of number, including scientific notation
int istart = i++;
while (isdigit(str[i]) || str[i] == '.') i++;
if (str[i] == 'e' || str[i] == 'E') {
i++;
if (str[i] == '+' || str[i] == '-') i++;
while (isdigit(str[i])) i++;
}
onechar = str[i];
str[i] = '\0';
argstack[nargstack].value = atof(&str[istart]);
str[i] = onechar;
argstack[nargstack++].flag = 0;
// ----------------
// string: push string onto stack
// ----------------
} else if (isalpha(onechar)) {
if (expect == OP)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = OP;
// set I to end of string
int istart = i++;
while (isalnum(str[i]) || str[i] == '_') i++;
int n = i - istart + 1;
argstack[nargstack].str = new char[n];
onechar = str[i];
str[i] = '\0';
strcpy(argstack[nargstack].str,&str[istart]);
str[i] = onechar;
argstack[nargstack++].flag = 1;
// ----------------
// Boolean operator, including end-of-string
// ----------------
} else if (strchr("<>=!&|\0",onechar)) {
if (onechar == '=') {
if (str[i+1] != '=')
error->all(FLERR,"Invalid Boolean syntax in if command");
op = EQ;
i++;
} else if (onechar == '!') {
if (str[i+1] == '=') {
op = NE;
i++;
} else op = NOT;
} else if (onechar == '<') {
if (str[i+1] != '=') op = LT;
else {
op = LE;
i++;
}
} else if (onechar == '>') {
if (str[i+1] != '=') op = GT;
else {
op = GE;
i++;
}
} else if (onechar == '&') {
if (str[i+1] != '&')
error->all(FLERR,"Invalid Boolean syntax in if command");
op = AND;
i++;
} else if (onechar == '|') {
if (str[i+1] != '|')
error->all(FLERR,"Invalid Boolean syntax in if command");
op = OR;
i++;
} else op = DONE;
i++;
if (op == NOT && expect == ARG) {
opstack[nopstack++] = op;
continue;
}
if (expect == ARG)
error->all(FLERR,"Invalid Boolean syntax in if command");
expect = ARG;
// evaluate stack as deep as possible while respecting precedence
// before pushing current op onto stack
while (nopstack && precedence[opstack[nopstack-1]] >= precedence[op]) {
opprevious = opstack[--nopstack];
nargstack--;
flag2 = argstack[nargstack].flag;
value2 = argstack[nargstack].value;
str2 = argstack[nargstack].str;
if (opprevious != NOT) {
nargstack--;
flag1 = argstack[nargstack].flag;
value1 = argstack[nargstack].value;
str1 = argstack[nargstack].str;
}
if (opprevious == NOT) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value2 == 0.0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == EQ) {
if (flag1 != flag2)
error->all(FLERR,"Invalid Boolean syntax in if command");
if (flag2 == 0) {
if (value1 == value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else {
if (strcmp(str1,str2) == 0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
delete [] str1;
delete [] str2;
}
} else if (opprevious == NE) {
if (flag1 != flag2)
error->all(FLERR,"Invalid Boolean syntax in if command");
if (flag2 == 0) {
if (value1 != value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else {
if (strcmp(str1,str2) != 0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
delete [] str1;
delete [] str2;
}
} else if (opprevious == LT) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 < value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == LE) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 <= value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == GT) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 > value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == GE) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 >= value2) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == AND) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 != 0.0 && value2 != 0.0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
} else if (opprevious == OR) {
if (flag2) error->all(FLERR,"Invalid Boolean syntax in if command");
if (value1 != 0.0 || value2 != 0.0) argstack[nargstack].value = 1.0;
else argstack[nargstack].value = 0.0;
}
argstack[nargstack++].flag = 0;
}
// if end-of-string, break out of entire formula evaluation loop
if (op == DONE) break;
// push current operation onto stack
opstack[nopstack++] = op;
} else error->all(FLERR,"Invalid Boolean syntax in if command");
}
if (nopstack) error->all(FLERR,"Invalid Boolean syntax in if command");
if (nargstack != 1) error->all(FLERR,"Invalid Boolean syntax in if command");
return argstack[0].value;
}
/* ---------------------------------------------------------------------- */
unsigned int Variable::data_mask(int ivar)
{
if (eval_in_progress[ivar]) return EMPTY_MASK;
eval_in_progress[ivar] = 1;
unsigned int datamask = data_mask(data[ivar][0]);
eval_in_progress[ivar] = 0;
return datamask;
}
/* ---------------------------------------------------------------------- */
unsigned int Variable::data_mask(char *str)
{
unsigned int datamask = EMPTY_MASK;
for (unsigned int i = 0; i < strlen(str)-2; i++) {
int istart = i;
while (isalnum(str[i]) || str[i] == '_') i++;
int istop = i-1;
int n = istop - istart + 1;
char *word = new char[n+1];
strncpy(word,&str[istart],n);
word[n] = '\0';
// ----------------
// compute
// ----------------
if ((strncmp(word,"c_",2) == 0) && (i>0) && (!isalnum(str[i-1]))) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
n = strlen(word) - 2 + 1;
char *id = new char[n];
strcpy(id,&word[2]);
int icompute = modify->find_compute(id);
if (icompute < 0)
error->all(FLERR,"Invalid compute ID in variable formula");
datamask &= modify->compute[icompute]->data_mask();
delete [] id;
}
if ((strncmp(word,"f_",2) == 0) && (i>0) && (!isalnum(str[i-1]))) {
if (domain->box_exist == 0)
error->all(FLERR,
"Variable evaluation before simulation box is defined");
n = strlen(word) - 2 + 1;
char *id = new char[n];
strcpy(id,&word[2]);
int ifix = modify->find_fix(id);
if (ifix < 0) error->all(FLERR,"Invalid fix ID in variable formula");
datamask &= modify->fix[ifix]->data_mask();
delete [] id;
}
if ((strncmp(word,"v_",2) == 0) && (i>0) && (!isalnum(str[i-1]))) {
int ivar = find(word);
datamask &= data_mask(ivar);
}
delete [] word;
}
return datamask;
}
/* ----------------------------------------------------------------------
class to read variable values from a file
for flag = SCALARFILE, reads one value per line
for flag = ATOMFILE, reads set of one value per atom
------------------------------------------------------------------------- */
VarReader::VarReader(LAMMPS *lmp, char *name, char *file, int flag) :
Pointers(lmp)
{
me = comm->me;
style = flag;
if (me == 0) {
fp = fopen(file,"r");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open file variable file %s",file);
error->one(FLERR,str);
}
} else fp = NULL;
// if atomfile-style variable, must store per-atom values read from file
// allocate a new fix STORE, so they persist
// id = variable-ID + VARIABLE_STORE, fix group = all
fix = NULL;
id_fix = NULL;
buffer = NULL;
if (style == ATOMFILE) {
if (atom->map_style == 0)
error->all(FLERR,
"Cannot use atomfile-style variable unless atom map exists");
int n = strlen(name) + strlen("_VARIABLE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,name);
strcat(id_fix,"_VARIABLE_STORE");
char **newarg = new char*[5];
newarg[0] = id_fix;
newarg[1] = (char *) "all";
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "0";
newarg[4] = (char *) "1";
modify->add_fix(5,newarg);
fix = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
buffer = new char[CHUNK*MAXLINE];
}
}
/* ---------------------------------------------------------------------- */
VarReader::~VarReader()
{
if (me == 0) fclose(fp);
// check modify in case all fixes have already been deleted
if (fix) {
if (modify) modify->delete_fix(id_fix);
delete [] id_fix;
delete [] buffer;
}
}
/* ----------------------------------------------------------------------
read for SCALARFILE style
read next value from file into str for file-style variable
strip comments, skip blank lines
return 0 if successful, 1 if end-of-file
------------------------------------------------------------------------- */
int VarReader::read_scalar(char *str)
{
int n;
char *ptr;
// read one string from file
if (me == 0) {
while (1) {
if (fgets(str,MAXLINE,fp) == NULL) n = 0;
else n = strlen(str);
if (n == 0) break; // end of file
str[n-1] = '\0'; // strip newline
if ((ptr = strchr(str,'#'))) *ptr = '\0'; // strip comment
if (strtok(str," \t\n\r\f") == NULL) continue; // skip if blank
n = strlen(str) + 1;
break;
}
}
MPI_Bcast(&n,1,MPI_INT,0,world);
if (n == 0) return 1;
MPI_Bcast(str,n,MPI_CHAR,0,world);
return 0;
}
/* ----------------------------------------------------------------------
read snapshot of per-atom values from file
into str for atomfile-style variable
return 0 if successful, 1 if end-of-file
------------------------------------------------------------------------- */
int VarReader::read_peratom()
{
int i,m,n,nchunk,eof;
tagint tag;
char *ptr,*next;
double value;
// set all per-atom values to 0.0
// values that appear in file will overwrite this
double *vstore = fix->vstore;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) vstore[i] = 0.0;
// read one string from file, convert to Nlines
char str[MAXLINE];
if (me == 0) {
while (1) {
if (fgets(str,MAXLINE,fp) == NULL) n = 0;
else n = strlen(str);
if (n == 0) break; // end of file
str[n-1] = '\0'; // strip newline
if ((ptr = strchr(str,'#'))) *ptr = '\0'; // strip comment
if (strtok(str," \t\n\r\f") == NULL) continue; // skip if blank
n = strlen(str) + 1;
break;
}
}
MPI_Bcast(&n,1,MPI_INT,0,world);
if (n == 0) return 1;
MPI_Bcast(str,n,MPI_CHAR,0,world);
bigint nlines = ATOBIGINT(str);
tagint map_tag_max = atom->map_tag_max;
bigint nread = 0;
while (nread < nlines) {
nchunk = MIN(nlines-nread,CHUNK);
eof = comm->read_lines_from_file(fp,nchunk,MAXLINE,buffer);
if (eof) return 1;
char *buf = buffer;
for (i = 0; i < nchunk; i++) {
next = strchr(buf,'\n');
*next = '\0';
sscanf(buf,TAGINT_FORMAT " %lg",&tag,&value);
if (tag <= 0 || tag > map_tag_max)
error->one(FLERR,"Invalid atom ID in variable file");
if ((m = atom->map(tag)) >= 0) vstore[m] = value;
buf = next + 1;
}
nread += nchunk;
}
return 0;
}
diff --git a/src/variable.h b/src/variable.h
index 1346d335f..54d0cfed7 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -1,425 +1,425 @@
/* -*- c++ -*- ----------------------------------------------------------
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.
------------------------------------------------------------------------- */
#ifndef LMP_VARIABLE_H
#define LMP_VARIABLE_H
#include "stdlib.h"
#include "pointers.h"
namespace LAMMPS_NS {
class Variable : protected Pointers {
public:
Variable(class LAMMPS *);
~Variable();
void set(int, char **);
void set(char *, int, char **);
int next(int, char **);
int find(char *);
int equalstyle(int);
int atomstyle(int);
char *retrieve(char *);
double compute_equal(int);
double compute_equal(char *);
void compute_atom(int, int, double *, int, int);
- int int_between_brackets(char *&);
+ int int_between_brackets(char *&, int);
double evaluate_boolean(char *);
unsigned int data_mask(int ivar);
unsigned int data_mask(char *str);
private:
int nvar; // # of defined variables
int maxvar; // max # of variables following lists can hold
char **names; // name of each variable
int *style; // style of each variable
int *num; // # of values for each variable
int *which; // next available value for each variable
int *pad; // 1 = pad loop/uloop variables with 0s, 0 = no pad
class VarReader **reader; // variable that reads from file
char ***data; // str value of each variable's values
int *eval_in_progress; // flag if evaluation of variable is in progress
class RanMars *randomequal; // random number generator for equal-style vars
class RanMars *randomatom; // random number generator for atom-style vars
int precedence[17]; // precedence level of math operators
// set length to include up to OR in enum
int me;
struct Tree { // parse tree for atom-style variables
double value; // single scalar
double *array; // per-atom or per-type list of doubles
int *iarray; // per-atom list of ints
bigint *barray; // per-atom list of bigints
int type; // operation, see enum{} in variable.cpp
int nstride; // stride between atoms if array is a 2d array
int selfalloc; // 1 if array is allocated here, else 0
int ivalue1,ivalue2; // extra values for needed for gmask,rmask,grmask
Tree *left,*middle,*right; // ptrs further down tree
};
void remove(int);
void grow();
void copy(int, char **, char **);
double evaluate(char *, Tree **);
double collapse_tree(Tree *);
double eval_tree(Tree *, int);
void free_tree(Tree *);
int find_matching_paren(char *, int, char *&);
int math_function(char *, char *, Tree **, Tree **, int &, double *, int &);
int group_function(char *, char *, Tree **, Tree **, int &, double *, int &);
int region_function(char *);
int special_function(char *, char *, Tree **, Tree **,
int &, double *, int &);
void peratom2global(int, char *, double *, int, int,
Tree **, Tree **, int &, double *, int &);
int is_atom_vector(char *);
void atom_vector(char *, Tree **, Tree **, int &);
int is_constant(char *);
double constant(char *);
double numeric(char *);
int inumeric(char *);
char *find_next_comma(char *);
void print_tree(Tree *, int);
};
class VarReader : protected Pointers {
public:
class FixStore *fix;
char *id_fix;
VarReader(class LAMMPS *, char *, char *, int);
~VarReader();
int read_scalar(char *);
int read_peratom();
private:
int me,style;
FILE *fp;
char *buffer;
};
}
#endif
/* ERROR/WARNING messages:
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: World variable count doesn't match # of partitions
A world-style variable must specify a number of values equal to the
number of processor partitions.
E: Universe/uloop variable count < # of partitions
A universe or uloop style variable must specify a number of values >= to the
number of processor partitions.
E: All universe/uloop variables must have same # of values
Self-explanatory.
E: Cannot redefine variable as a different style
An equal-style variable can be re-defined but only if it was
originally an equal-style variable.
E: File variable could not read value
Check the file assigned to the variable.
E: Atomfile variable could not read values
Check the file assigned to the variable.
E: Variable name must be alphanumeric or underscore characters
Self-explanatory.
E: Invalid variable in next command
Self-explanatory.
E: All variables in next command must be same style
Self-explanatory.
E: Invalid variable style with next command
Variable styles {equal} and {world} cannot be used in a next
command.
E: Next command must list all universe and uloop variables
This is to insure they stay in sync.
E: Invalid syntax in variable formula
Self-explanatory.
E: Variable evaluation before simulation box is defined
Cannot evaluate a compute or fix or atom-based value in a variable
before the simulation has been setup.
E: Invalid compute ID in variable formula
The compute is not recognized.
E: Compute used in variable between runs is not current
Computes cannot be invoked by a variable in between runs. Thus they
must have been evaluated on the last timestep of the previous run in
order for their value(s) to be accessed. See the doc page for the
variable command for more info.
E: Variable formula compute vector is accessed out-of-range
Self-explanatory.
E: Variable formula compute array is accessed out-of-range
Self-explanatory.
E: Per-atom compute in equal-style variable formula
Equal-style variables cannot use per-atom quantities.
E: Mismatched compute in variable formula
A compute is referenced incorrectly or a compute that produces per-atom
values is used in an equal-style variable formula.
E: Invalid fix ID in variable formula
The fix is not recognized.
E: Fix in variable not computed at compatible time
Fixes generate their values on specific timesteps. The variable is
requesting the values on a non-allowed timestep.
E: Variable formula fix vector is accessed out-of-range
Self-explanatory.
E: Variable formula fix array is accessed out-of-range
Self-explanatory.
E: Per-atom fix in equal-style variable formula
Equal-style variables cannot use per-atom quantities.
E: Mismatched fix in variable formula
A fix is referenced incorrectly or a fix that produces per-atom
values is used in an equal-style variable formula.
E: Invalid variable name in variable formula
Variable name is not recognized.
E: Variable has circular dependency
A circular dependency is when variable "a" in used by variable "b" and
variable "b" is also used by varaible "a". Circular dependencies with
longer chains of dependence are also not allowed.
E: Invalid variable evaluation in variable formula
A variable used in a formula could not be evaluated.
E: Atom-style variable in equal-style variable formula
Atom-style variables generate one value per atom which is not allowed
in an equal-style variable.
E: Atomfile-style variable in equal-style variable formula
Self-explanatory.
E: Mismatched variable in variable formula
A variable is referenced incorrectly or an atom-style variable that
produces per-atom values is used in an equal-style variable
formula.
E: Invalid math/group/special function in variable formula
Self-explanatory.
E: Invalid thermo keyword in variable formula
The keyword is not recognized.
E: Divide by 0 in variable formula
Self-explanatory.
E: Modulo 0 in variable formula
Self-explanatory.
E: Power by 0 in variable formula
Self-explanatory.
E: Sqrt of negative value in variable formula
Self-explanatory.
E: Log of zero/negative value in variable formula
Self-explanatory.
E: Arcsin of invalid value in variable formula
Argument of arcsin() must be between -1 and 1.
E: Arccos of invalid value in variable formula
Argument of arccos() must be between -1 and 1.
E: Invalid math function in variable formula
Self-explanatory.
E: Non digit character between brackets in variable
Self-explantory.
E: Mismatched brackets in variable
Self-explanatory.
E: Empty brackets in variable
There is no variable syntax that uses empty brackets. Check
the variable doc page.
E: Index between variable brackets must be positive
Self-explanatory.
E: Cannot use ramp in variable formula between runs
This is because the ramp() function is time dependent.
E: Cannot use vdisplace in variable formula between runs
This is a function of elapsed time.
E: Cannot use swiggle in variable formula between runs
This is a function of elapsed time.
E: Cannot use cwiggle in variable formula between runs
This is a function of elapsed time.
E: Group ID in variable formula does not exist
Self-explanatory.
E: Invalid group function in variable formula
Group function is not recognized.
E: Region ID in variable formula does not exist
Self-explanatory.
E: Invalid special function in variable formula
Self-explanatory.
E: Gmask function in equal-style variable formula
Gmask is per-atom operation.
E: Rmask function in equal-style variable formula
Rmask is per-atom operation.
E: Grmask function in equal-style variable formula
Grmask is per-atom operation.
E: Variable ID in variable formula does not exist
Self-explanatory.
E: Atomfile variable in equal-style variable formula
Self-explanatory.
E: Invalid variable style in special function next
Only file-style or atomfile-style variables can be used with next().
E: Indexed per-atom vector in variable formula without atom map
Accessing a value from an atom vector requires the ability to lookup
an atom index, which is provided by an atom map. An atom map does not
exist (by default) for non-molecular problems. Using the atom_modify
map command will force an atom map to be created.
E: Variable uses atom property that isn't allocated
Self-explanatory.
E: Invalid atom vector in variable formula
The atom vector is not recognized.
E: Atom vector in equal-style variable formula
Atom vectors generate one value per atom which is not allowed
in an equal-style variable.
E: Expected floating point parameter in variable definition
The quantity being read is a non-numeric value.
E: Expected integer parameter in variable definition
The quantity being read is a floating point or non-numeric value.
E: Invalid Boolean syntax in if command
Self-explanatory.
E: Cannot open file variable file %s
The specified file cannot be opened. Check that the path and name are
correct.
E: Cannot use atomfile-style variable unless atom map exists
Self-explanatory. See the atom_modify command to create a map.
E: Invalid atom ID in variable file
Self-explanatory.
*/
diff --git a/src/version.h b/src/version.h
index 03553b36b..b90bb39b6 100644
--- a/src/version.h
+++ b/src/version.h
@@ -1 +1 @@
-#define LAMMPS_VERSION "30 Apr 2014"
+#define LAMMPS_VERSION "4 May 2014"
diff --git a/src/write_data.cpp b/src/write_data.cpp
index 8c4d24e2e..6fd239461 100644
--- a/src/write_data.cpp
+++ b/src/write_data.cpp
@@ -1,707 +1,709 @@
/* ----------------------------------------------------------------------
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.
------------------------------------------------------------------------- */
#include "lmptype.h"
#include "mpi.h"
#include "string.h"
#include "write_data.h"
#include "atom.h"
#include "atom_vec.h"
#include "group.h"
#include "force.h"
#include "pair.h"
#include "bond.h"
#include "angle.h"
#include "dihedral.h"
#include "improper.h"
#include "update.h"
#include "modify.h"
#include "fix.h"
#include "domain.h"
#include "universe.h"
#include "comm.h"
#include "output.h"
#include "thermo.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
enum{IGNORE,WARN,ERROR}; // same as thermo.cpp
enum{II,IJ};
/* ---------------------------------------------------------------------- */
WriteData::WriteData(LAMMPS *lmp) : Pointers(lmp)
{
MPI_Comm_rank(world,&me);
MPI_Comm_size(world,&nprocs);
}
/* ----------------------------------------------------------------------
called as write_data command in input script
------------------------------------------------------------------------- */
void WriteData::command(int narg, char **arg)
{
if (domain->box_exist == 0)
error->all(FLERR,"Write_data command before simulation box is defined");
if (narg < 1) error->all(FLERR,"Illegal write_data command");
// if filename contains a "*", replace with current timestep
char *ptr;
int n = strlen(arg[0]) + 16;
char *file = new char[n];
if ((ptr = strchr(arg[0],'*'))) {
*ptr = '\0';
sprintf(file,"%s" BIGINT_FORMAT "%s",arg[0],update->ntimestep,ptr+1);
} else strcpy(file,arg[0]);
// read optional args
// noinit is a hidden arg, only used by -r command-line switch
pairflag = II;
int noinit = 0;
int iarg = 1;
while (iarg < narg) {
if (strcmp(arg[iarg],"pair") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal write_data command");
if (strcmp(arg[iarg+1],"ii") == 0) pairflag = II;
else if (strcmp(arg[iarg+1],"ij") == 0) pairflag = IJ;
else error->all(FLERR,"Illegal write_data command");
iarg += 2;
} else if (strcmp(arg[iarg],"noinit") == 0) {
noinit = 1;
iarg++;
} else error->all(FLERR,"Illegal write_data command");
}
// init entire system since comm->exchange is done
// comm::init needs neighbor::init needs pair::init needs kspace::init, etc
// exception is when called by -r command-line switch
// then write_data immediately follows reading of restart file
// assume that read_restart initialized necessary values
// if don't make exception:
// pair->init() can fail due to various unset values:
// e.g. pair hybrid coeffs, dpd ghost-atom velocity setting
if (noinit == 0) {
if (comm->me == 0 && screen)
fprintf(screen,"System init for write_data ...\n");
lmp->init();
// move atoms to new processors before writing file
// do setup_pre_exchange to force update of per-atom info if needed
// enforce PBC in case atoms are outside box
// call borders() to rebuild atom map since exchange() destroys map
modify->setup_pre_exchange();
if (domain->triclinic) domain->x2lamda(atom->nlocal);
domain->pbc();
domain->reset_box();
comm->setup();
comm->exchange();
comm->borders();
if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost);
}
write(file);
delete [] file;
}
/* ----------------------------------------------------------------------
called from command()
might later let it be directly called within run/minimize loop
------------------------------------------------------------------------- */
void WriteData::write(char *file)
{
// special case where reneighboring is not done in integrator
// on timestep data file is written (due to build_once being set)
// if box is changing, must be reset, else data file will have
// wrong box size and atoms will be lost when data file is read
// other calls to pbc and domain and comm are not made,
// b/c they only make sense if reneighboring is actually performed
//if (neighbor->build_once) domain->reset_box();
// natoms = sum of nlocal = value to write into data file
// if unequal and thermo lostflag is "error", don't write data file
bigint nblocal = atom->nlocal;
bigint natoms;
MPI_Allreduce(&nblocal,&natoms,1,MPI_LMP_BIGINT,MPI_SUM,world);
if (natoms != atom->natoms && output->thermo->lostflag == ERROR)
error->all(FLERR,"Atom count is inconsistent, cannot write data file");
// sum up bond,angle counts
// may be different than atom->nbonds,nangles if broken/turned-off
if (atom->molecular == 1 && (atom->nbonds || atom->nbondtypes)) {
nbonds_local = atom->avec->pack_bond(NULL);
MPI_Allreduce(&nbonds_local,&nbonds,1,MPI_LMP_BIGINT,MPI_SUM,world);
}
if (atom->molecular == 1 && (atom->nangles || atom->nangletypes)) {
nangles_local = atom->avec->pack_angle(NULL);
MPI_Allreduce(&nangles_local,&nangles,1,MPI_LMP_BIGINT,MPI_SUM,world);
}
// open data file
if (me == 0) {
fp = fopen(file,"w");
if (fp == NULL) {
char str[128];
sprintf(str,"Cannot open data file %s",file);
error->one(FLERR,str);
}
}
// proc 0 writes header, ntype-length arrays, force fields
if (me == 0) {
header();
type_arrays();
force_fields();
}
// per atom info
// do not write molecular topology for atom_style template
if (natoms) atoms();
if (natoms) velocities();
if (atom->molecular == 1) {
if (atom->nbonds && nbonds) bonds();
if (atom->nangles && nangles) angles();
if (atom->ndihedrals) dihedrals();
if (atom->nimpropers) impropers();
}
// extra sections managed by fixes
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->wd_section)
for (int m = 0; m < modify->fix[i]->wd_section; m++) fix(i,m);
// close data file
if (me == 0) fclose(fp);
}
/* ----------------------------------------------------------------------
proc 0 writes out data file header
------------------------------------------------------------------------- */
void WriteData::header()
{
fprintf(fp,"LAMMPS data file via write_data, version %s, "
"timestep = " BIGINT_FORMAT "\n",
universe->version,update->ntimestep);
fprintf(fp,"\n");
fprintf(fp,BIGINT_FORMAT " atoms\n",atom->natoms);
fprintf(fp,"%d atom types\n",atom->ntypes);
- // do not write molecular topology for atom_style template
+ // do not write molecular topology info for atom_style template
+
if (atom->molecular == 1) {
if (atom->nbonds || atom->nbondtypes) {
fprintf(fp,BIGINT_FORMAT " bonds\n",nbonds);
fprintf(fp,"%d bond types\n",atom->nbondtypes);
}
if (atom->nangles || atom->nangletypes) {
fprintf(fp,BIGINT_FORMAT " angles\n",nangles);
fprintf(fp,"%d angle types\n",atom->nangletypes);
}
if (atom->ndihedrals || atom->ndihedraltypes) {
fprintf(fp,BIGINT_FORMAT " dihedrals\n",atom->ndihedrals);
fprintf(fp,"%d dihedral types\n",atom->ndihedraltypes);
}
if (atom->nimpropers || atom->nimpropertypes) {
fprintf(fp,BIGINT_FORMAT " impropers\n",atom->nimpropers);
fprintf(fp,"%d improper types\n",atom->nimpropertypes);
}
}
+
for (int i = 0; i < modify->nfix; i++)
if (modify->fix[i]->wd_header)
for (int m = 0; m < modify->fix[i]->wd_header; m++)
modify->fix[i]->write_data_header(fp,m);
fprintf(fp,"\n");
fprintf(fp,"%-1.16e %-1.16e xlo xhi\n",domain->boxlo[0],domain->boxhi[0]);
fprintf(fp,"%-1.16e %-1.16e ylo yhi\n",domain->boxlo[1],domain->boxhi[1]);
fprintf(fp,"%-1.16e %-1.16e zlo zhi\n",domain->boxlo[2],domain->boxhi[2]);
if (domain->triclinic)
fprintf(fp,"%-1.16e %-1.16e %-1.16e xy xz yz\n",
domain->xy,domain->xz,domain->yz);
}
/* ----------------------------------------------------------------------
proc 0 writes out any type-based arrays that are defined
------------------------------------------------------------------------- */
void WriteData::type_arrays()
{
if (atom->mass) {
double *mass = atom->mass;
fprintf(fp,"\nMasses\n\n");
for (int i = 1; i <= atom->ntypes; i++) fprintf(fp,"%d %g\n",i,mass[i]);
}
}
/* ----------------------------------------------------------------------
proc 0 writes out force field info
------------------------------------------------------------------------- */
void WriteData::force_fields()
{
if (force->pair && force->pair->writedata) {
if (pairflag == II) {
fprintf(fp,"\nPair Coeffs # %s\n\n", force->pair_style);
force->pair->write_data(fp);
} else if (pairflag == IJ) {
fprintf(fp,"\nPairIJ Coeffs # %s\n\n", force->pair_style);
force->pair->write_data_all(fp);
}
}
if (force->bond && force->bond->writedata) {
fprintf(fp,"\nBond Coeffs # %s\n\n", force->bond_style);
force->bond->write_data(fp);
}
if (force->angle && force->angle->writedata) {
fprintf(fp,"\nAngle Coeffs # %s\n\n", force->angle_style);
force->angle->write_data(fp);
}
if (force->dihedral && force->dihedral->writedata) {
fprintf(fp,"\nDihedral Coeffs # %s\n\n", force->dihedral_style);
force->dihedral->write_data(fp);
}
if (force->improper && force->improper->writedata) {
fprintf(fp,"\nImproper Coeffs # %s\n\n", force->improper_style);
force->improper->write_data(fp);
}
}
/* ----------------------------------------------------------------------
write out Atoms section of data file
------------------------------------------------------------------------- */
void WriteData::atoms()
{
// communication buffer for all my Atom info
// max_size = largest buffer needed by any proc
int ncol = atom->avec->size_data_atom + 3;
int sendrow = atom->nlocal;
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
double **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my atom data into buf
atom->avec->pack_data(buf);
// write one chunk of atoms per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
if (me == 0) {
fprintf(fp,"\nAtoms # %s\n\n",atom->atom_style);
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_DOUBLE,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_DOUBLE,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
atom->avec->write_data(fp,recvrow,buf);
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_DOUBLE,0,0,world);
}
memory->destroy(buf);
}
/* ----------------------------------------------------------------------
write out Velocities section of data file
------------------------------------------------------------------------- */
void WriteData::velocities()
{
// communication buffer for all my Atom info
// max_size = largest buffer needed by any proc
int ncol = atom->avec->size_velocity + 1;
int sendrow = atom->nlocal;
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
double **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my velocity data into buf
atom->avec->pack_vel(buf);
// write one chunk of velocities per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
if (me == 0) {
fprintf(fp,"\nVelocities\n\n");
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_DOUBLE,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_DOUBLE,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
atom->avec->write_vel(fp,recvrow,buf);
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_DOUBLE,0,0,world);
}
memory->destroy(buf);
}
/* ----------------------------------------------------------------------
write out Bonds section of data file
------------------------------------------------------------------------- */
void WriteData::bonds()
{
// communication buffer for all my Bond info
int ncol = 3;
int sendrow = static_cast<int> (nbonds_local);
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
tagint **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my bond data into buf
atom->avec->pack_bond(buf);
// write one chunk of info per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
int index = 1;
if (me == 0) {
fprintf(fp,"\nBonds\n\n");
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_LMP_TAGINT,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_LMP_TAGINT,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
atom->avec->write_bond(fp,recvrow,buf,index);
index += recvrow;
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_LMP_TAGINT,0,0,world);
}
memory->destroy(buf);
}
/* ----------------------------------------------------------------------
write out Angles section of data file
------------------------------------------------------------------------- */
void WriteData::angles()
{
// communication buffer for all my Angle info
int ncol = 4;
int sendrow = static_cast<int> (nangles_local);
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
tagint **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my angle data into buf
atom->avec->pack_angle(buf);
// write one chunk of info per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
int index = 1;
if (me == 0) {
fprintf(fp,"\nAngles\n\n");
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_LMP_TAGINT,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_LMP_TAGINT,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
atom->avec->write_angle(fp,recvrow,buf,index);
index += recvrow;
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_LMP_TAGINT,0,0,world);
}
memory->destroy(buf);
}
/* ----------------------------------------------------------------------
write out Dihedrals section of data file
------------------------------------------------------------------------- */
void WriteData::dihedrals()
{
// communication buffer for all my Dihedral info
// max_size = largest buffer needed by any proc
int ncol = 5;
tagint *tag = atom->tag;
int *num_dihedral = atom->num_dihedral;
tagint **dihedral_atom2 = atom->dihedral_atom2;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
int i,j;
int sendrow = 0;
if (newton_bond) {
for (i = 0; i < nlocal; i++)
sendrow += num_dihedral[i];
} else {
for (i = 0; i < nlocal; i++)
for (j = 0; j < num_dihedral[i]; j++)
if (tag[i] == dihedral_atom2[i][j]) sendrow++;
}
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
tagint **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my dihedral data into buf
atom->avec->pack_dihedral(buf);
// write one chunk of info per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
int index = 1;
if (me == 0) {
fprintf(fp,"\nDihedrals\n\n");
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_LMP_TAGINT,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_LMP_TAGINT,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
atom->avec->write_dihedral(fp,recvrow,buf,index);
index += recvrow;
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_LMP_TAGINT,0,0,world);
}
memory->destroy(buf);
}
/* ----------------------------------------------------------------------
write out Impropers section of data file
------------------------------------------------------------------------- */
void WriteData::impropers()
{
// communication buffer for all my Improper info
// max_size = largest buffer needed by any proc
int ncol = 5;
tagint *tag = atom->tag;
int *num_improper = atom->num_improper;
tagint **improper_atom2 = atom->improper_atom2;
int nlocal = atom->nlocal;
int newton_bond = force->newton_bond;
int i,j;
int sendrow = 0;
if (newton_bond) {
for (i = 0; i < nlocal; i++)
sendrow += num_improper[i];
} else {
for (i = 0; i < nlocal; i++)
for (j = 0; j < num_improper[i]; j++)
if (tag[i] == improper_atom2[i][j]) sendrow++;
}
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
tagint **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my improper data into buf
atom->avec->pack_improper(buf);
// write one chunk of info per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
int index = 1;
if (me == 0) {
fprintf(fp,"\nImpropers\n\n");
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_LMP_TAGINT,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_LMP_TAGINT,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
atom->avec->write_improper(fp,recvrow,buf,index);
index += recvrow;
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_LMP_TAGINT,0,0,world);
}
memory->destroy(buf);
}
/* ----------------------------------------------------------------------
write out Mth section of data file owned by Fix ifix
------------------------------------------------------------------------- */
void WriteData::fix(int ifix, int mth)
{
// communication buffer for Fix info
int sendrow,ncol;
modify->fix[ifix]->write_data_section_size(mth,sendrow,ncol);
int maxrow;
MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world);
double **buf;
if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"write_data:buf");
else memory->create(buf,MAX(1,sendrow),ncol,"write_data:buf");
// pack my fix data into buf
modify->fix[ifix]->write_data_section_pack(mth,buf);
// write one chunk of info per proc to file
// proc 0 pings each proc, receives its chunk, writes to file
// all other procs wait for ping, send their chunk to proc 0
int tmp,recvrow;
MPI_Status status;
MPI_Request request;
int index = 1;
if (me == 0) {
modify->fix[ifix]->write_data_section_keyword(mth,fp);
for (int iproc = 0; iproc < nprocs; iproc++) {
if (iproc) {
MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_DOUBLE,iproc,0,world,&request);
MPI_Send(&tmp,0,MPI_INT,iproc,0,world);
MPI_Wait(&request,&status);
MPI_Get_count(&status,MPI_DOUBLE,&recvrow);
recvrow /= ncol;
} else recvrow = sendrow;
modify->fix[ifix]->write_data_section(mth,fp,recvrow,buf,index);
index += recvrow;
}
} else {
MPI_Recv(&tmp,0,MPI_INT,0,0,world,&status);
MPI_Rsend(&buf[0][0],sendrow*ncol,MPI_DOUBLE,0,0,world);
}
memory->destroy(buf);
}
diff --git a/tools/moltemplate/common/amber/README.TXT b/tools/moltemplate/common/amber/README.TXT
index 3d1739801..20b4d7ed2 100644
--- a/tools/moltemplate/common/amber/README.TXT
+++ b/tools/moltemplate/common/amber/README.TXT
@@ -1,27 +1,74 @@
This directory contains scripts used for converting AMBER parameter files
into moltemplate (.LT) format. When a newer version of the AMBER parameters
is eventually published, you can use these scripts to convert the new files
again. (Some tinkering may be necessary.)
The main bash script is a wrapper which simply splits up the parameter (".dat")
file into fragments which (it thinks) correspond to the mass, pair, bond,
angle, dihedral, and improper section of the original .dat file.
(However sometimes it gets this wrong and you have to split it up manually!)
Then this bash script invokes the relevant python script to convert
each section into .LT format:
amberparm_to_mass.py
amberparm_to_pair.py
amberparm_to_bond.py
amberparm_to_angle.py
amberparm_to_dihedral.py
amberparm_to_improper.py
In case this goes wrong, you may have to run these scripts manaully.
Find out how to run this bash script by invoking it without any arguments:
./amberparm2lt.sh
+------------ IMPORTANT ------------
+
+BEFORE YOU RUN THIS SCRIPT, BE SURE TO CHANGE THE ORDER OF THE IMPROPER DIHEDRAL
+PARAMETERS SO THAT THE "SPECIFIC" IMPROPER DIHEDRALS APPEAR LAST, AND THE
+"GENERIC" IMPROPER DIHEDRALS APPEAR FIRST.
+
+For example replace these two lines:
+
+X -o -c -o 1.1 180. 2. JCC,7,(1986),230
+X -X -c -o 10.5 180. 2. JCC,7,(1986),230
+
+with these two lines:
+
+X -X -c -o 10.5 180. 2. JCC,7,(1986),230
+X -o -c -o 1.1 180. 2. JCC,7,(1986),230
+
+Why:
+This is the order that moltemplate expects: generic first. specific last.
+So far only the improper dihedral parameters in the gaff.dat file seem
+to violate this order. The bonds, angles and dihedrals seem to obey this,
+but check to make sure.
+
+
+There is a discussion of these parameters here:
+http://structbio.vanderbilt.edu/archives/amber-archive/2005/3444.php
+
+excerpt:
+
+> > In the parm99 file (for example), sometimes the wild-card is used, as it
+> > is done in the following example:
+> >
+> > X -X -C -O 10.5 180. 2. JCC,7,(1986),230
+> >
+> > The first example is the specific case while the second one is the generic
+> > case. In page # 257 of the AMBER Manual, it is talking about Dihedral
+> > Angle, and how these dihedral parameters are used to calculate the
+> > energies. I am wondering what the difference between generic and specific
+> > case is for improper torsions.
+>
+> "specific" torsions are search for first, and used if a match is found. If
+> no match is found, then a search is made to see if a "generic" (aka wild-card)
+> torsion with match.
+> ...good luck...dac
+
+Good luck
+
-Andrew
-2013-8-04
+2014-4-19
+
diff --git a/tools/moltemplate/common/amber/amberparm2lt.sh b/tools/moltemplate/common/amber/amberparm2lt.sh
index d27897a7b..7ef489d5f 100755
--- a/tools/moltemplate/common/amber/amberparm2lt.sh
+++ b/tools/moltemplate/common/amber/amberparm2lt.sh
@@ -1,203 +1,203 @@
#!/bin/sh
-if ! which amberparm_mass_to_lt.py > /dev/null; then
- echo "\nError: \"amberparm_mass_to_lt.py\" not found. (Update your PATH?)\n" >&2
- exit 2
-fi
-if ! which amberparm_pair_to_lt.py > /dev/null; then
- echo "\nError: \"amberparm_pair_to_lt.py\" not found. (Update your PATH?)\n" >&2
- exit 2
-fi
-if ! which amberparm_bond_to_lt.py > /dev/null; then
- echo "\nError: \"amberparm_bond_to_lt.py\" not found. (Update your PATH?)\n" >&2
- exit 2
-fi
-if ! which amberparm_angle_to_lt.py > /dev/null; then
- echo "\nError: \"amberparm_angle_to_lt.py\" not found. (Update your PATH?)\n" >&2
- exit 2
-fi
-if ! which amberparm_dihedral_to_lt.py > /dev/null; then
- echo "\nError: \"amberparm_dihedral_to_lt.py\" not found. (Update your PATH?)\n" >&2
- exit 2
-fi
-if ! which amberparm_improper_to_lt.py > /dev/null; then
- echo "\nError: \"amberparm_improper_to_lt.py\" not found. (Update your PATH?)\n" >&2
- exit 2
-fi
-
SYNTAX_MSG=$(cat <<EOF
Typical Usage:
amberparm2lt.sh gaff.dat GAFF > gaff.lt
You can also try:
amberparm2lt.sh parm94.dat "AMBERFF94 inherits GAFF" > amberff94.lt
(However, this later usage may not work.
You may need to manually split the .dat file and run these scripts instead:
amberparm_pair_to_lt.py, amberparm_bond_to_lt.py, amberparm_angle_to_lt.py...)
Be sure that all of these .py files are in your PATH as well.)
EOF
)
if [ "$#" != "2" ]; then
echo "${SYNTAX_MSG}" >&2
echo "" >&2
echo "Error: This script requires two arguments," >&2
echo " 1) the name of the amber parm file to be converted (eg \"gaff.dat\")" >&2
echo " 2) the name of the moltemplate object to be created (eg \"GAFF\")" >&2
echo " (This may include the \"inherits\" keyword and parent classes.)" >&2
exit 1
fi
MOLTEMPLATE_USAGE_MSG=$(cat <<EOF
# Background information and usage explanation:
# This file contanis a list of atom types and rules for generating bonded
# interactions between these atoms (hopefully) according to AMBER conventions.
# By using the atom types shown below in your own molecules, bonds and angular
# interactions will be automatically generated.
# AMBER (GAFF) force-field parameters will also be assigned to each angle
# interaction (according to these atom types).
# One way to apply the GAFF force field to a particular type of molecule, is
# to use the "inherits" keyword when you define that molecule. For example:
# import("gaff.lt")
# MoleculeType inherits GAFF {
# write_once("Data Atoms") {
# \$atom:C1 \$mol:... @atom:cx 0.0 4.183 3.194 13.285
# \$atom:C2 \$mol:... @atom:cx 0.0 4.291 4.618 13.382
# : : :
# }
# }
#(See "Inheritance" and "short names vs. full names" in the moltemplate manual.)
EOF
)
# (Note that the full name of the atom type in this example is "@atom:/GAFF/cx"
# You can always refer to atom types this way as well. Using "inherits GAFF"
# allows you to use more conventient "@atom:cx" shorthand notation instead.)
echo "####################################################################"
echo "# To use this, LAMMPS currently must be compiled with the USER-MISC package."
echo "# (Type \"make yes-user-misc\" into the shell before compiling LAMMPS.)"
echo "####################################################################"
echo "# This moltemplate (LT) file was generated automatically using"
echo "# amberparm2lt.sh $1 $2"
echo "####################################################################"
echo "$MOLTEMPLATE_USAGE_MSG"
echo "####################################################################"
echo "# Moltemplate can not assign atom charge. You must assign atomic"
echo "# charges yourself. (Moltemplate is only a simple text manipulation tool.)"
echo "####################################################################"
echo ""
echo ""
+if ! which ./amberparm_mass_to_lt.py > /dev/null; then
+ echo "\nError: \"amberparm_mass_to_lt.py\" not found.\n" >&2
+ echo " (Try running this script from the directory containing amberparm2lt.sh)" >&2
+ exit 2
+fi
+if ! which ./amberparm_pair_to_lt.py > /dev/null; then
+ echo "\nError: \"amberparm_pair_to_lt.py\" not found.\n" >&2
+ echo " (Try running this script from the directory containing amberparm2lt.sh)" >&2
+ exit 2
+fi
+if ! which ./amberparm_bond_to_lt.py > /dev/null; then
+ echo "\nError: \"amberparm_bond_to_lt.py\" not found.\n" >&2
+ echo " (Try running this script from the directory containing amberparm2lt.sh)" >&2
+ exit 2
+fi
+if ! which ./amberparm_angle_to_lt.py > /dev/null; then
+ echo "\nError: \"amberparm_angle_to_lt.py\" not found.\n" >&2
+ echo " (Try running this script from the directory containing amberparm2lt.sh)" >&2
+ exit 2
+fi
+if ! which ./amberparm_dihedral_to_lt.py > /dev/null; then
+ echo "\nError: \"amberparm_dihedral_to_lt.py\" not found.\n" >&2
+ echo " (Try running this script from the directory containing amberparm2lt.sh)" >&2
+ exit 2
+fi
+if ! which ./amberparm_improper_to_lt.py > /dev/null; then
+ echo "\nError: \"amberparm_improper_to_lt.py\" not found. (Update your PATH?)\n" >&2
+ echo " (Try running this script from the directory containing amberparm2lt.sh)" >&2
+ exit 2
+fi
+
+
#PARM_FILE='gaff.dat'
PARM_FILE=$1
# sections are separated by blank lines
# some sections have comment lines at the beginning
# The 1st section is the mass (note: skip the first line)
tail -n +2 < "$PARM_FILE" | \
awk -v n=1 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
> "${PARM_FILE}.mass"
# The 2nd section has the list of 2-body bond force-field params
awk -v n=2 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
< "$PARM_FILE" \
| tail -n +2 \
> "${PARM_FILE}.bond"
# The 3rd section has the list of 3-body angle force-field params
awk -v n=3 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
< "$PARM_FILE" \
> "${PARM_FILE}.angle"
# The 4th section has the list of 4-body dihedral force-field params
awk -v n=4 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
< "$PARM_FILE" \
> "${PARM_FILE}.dihedral"
# The 5th section has the list of 4-body improper force-field params
awk -v n=5 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
< "$PARM_FILE" \
> "${PARM_FILE}.improper"
# The 6th section has the hbond-parameters (no-longer used. ignore)
awk -v n=6 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
< "$PARM_FILE" \
> "${PARM_FILE}.hbond"
# The 7th "section" is just a blank line. (skip that)
# The 8th section has the list of non-bonded ("pair") force-field parameters
awk -v n=8 '{if (NF==0) nblanks++; else {if (nblanks+1==n) print $0}}' \
< "$PARM_FILE" \
| tail -n +2 \
> "${PARM_FILE}.pair"
-amberparm_mass_to_lt.py < "${PARM_FILE}.mass" > "${PARM_FILE}.mass.lt"
-amberparm_pair_to_lt.py < "${PARM_FILE}.pair" > "${PARM_FILE}.pair.lt"
-amberparm_bond_to_lt.py < "${PARM_FILE}.bond" > "${PARM_FILE}.bond.lt"
-amberparm_angle_to_lt.py < "${PARM_FILE}.angle" > "${PARM_FILE}.angle.lt"
-amberparm_dihedral_to_lt.py \
+./amberparm_mass_to_lt.py < "${PARM_FILE}.mass" > "${PARM_FILE}.mass.lt"
+./amberparm_pair_to_lt.py < "${PARM_FILE}.pair" > "${PARM_FILE}.pair.lt"
+./amberparm_bond_to_lt.py < "${PARM_FILE}.bond" > "${PARM_FILE}.bond.lt"
+./amberparm_angle_to_lt.py < "${PARM_FILE}.angle" > "${PARM_FILE}.angle.lt"
+./amberparm_dihedral_to_lt.py \
< "${PARM_FILE}.dihedral" > "${PARM_FILE}.dihedral.lt"
-amberparm_improper_to_lt.py \
+./amberparm_improper_to_lt.py \
< "${PARM_FILE}.improper" > "${PARM_FILE}.improper.lt"
echo "$2 {"
echo ""
echo " # ----------------------------------------------------------------------"
#echo " # This file was automatically generated by \"common/amber/amberparm2lt.sh\""
echo " # The basic atom nomenclature and conventions are explained here:"
echo " # http://ambermd.org/antechamber/gaff.pdf"
echo " # For reference, the original gaff.dat file and format documenation are here:"
echo " # http://ambermd.org/AmberTools-get.html"
echo " # http://ambermd.org/formats.html#parm.dat"
echo " # ----------------------------------------------------------------------"
echo ""
cat "$PARM_FILE.mass.lt" \
"$PARM_FILE.pair.lt" \
"$PARM_FILE.bond.lt" \
"$PARM_FILE.angle.lt" \
"$PARM_FILE.dihedral.lt" \
"$PARM_FILE.improper.lt"
AMBER_STYLES_INIT=$(cat <<EOF
write_once("In Init") {
# Default styles and settings for AMBER based force-fields:
units real
atom_style full
bond_style hybrid harmonic
angle_style hybrid harmonic
dihedral_style hybrid fourier
improper_style hybrid cvff
- pair_style hybrid lj/charmm/coul/charmm 9.0 10.0
-
- # NOTE: Long-range coulombic forces were disabled intentionally. (See below)
- # If you want to use long-range electrostatics, uncomment these lines:
- #
- #pair_style hybrid lj/charmm/coul/long 9.0 10.0 10.0
- #kspace_style pppm 0.0001
- #
- # Instead I use hybrid lj/charmm/coul/charmm by default, because
- # LAMMPS complains if you attempt to use lj/charmm/coul/long on a
- # system if it does not contain any charged particles.
- # Currently, moltemplate does not assign atomic charge,
- # so this problem occurs frequently.
+ pair_style hybrid lj/charmm/coul/long 9.0 10.0 10.0
+ kspace_style pppm 0.0001
+
+ # NOTE: If you do not want to use long-range coulombic forces,
+ # comment out the two lines above and uncomment this line:
+ # pair_style hybrid lj/charmm/coul/charmm 9.0 10.0
pair_modify mix arithmetic
special_bonds amber
}
EOF
)
echo "$AMBER_STYLES_INIT"
echo ""
echo "}"
echo ""
echo ""
diff --git a/tools/moltemplate/common/amber/amberparm_improper_to_lt.py b/tools/moltemplate/common/amber/amberparm_improper_to_lt.py
index 0bf36697f..7123d03be 100755
--- a/tools/moltemplate/common/amber/amberparm_improper_to_lt.py
+++ b/tools/moltemplate/common/amber/amberparm_improper_to_lt.py
@@ -1,62 +1,90 @@
#!/usr/bin/env python
import sys
lines_gaff = sys.stdin.readlines()
improper_style_name = 'cvff'
sys.stdout.write(' write_once("In Settings") {\n')
for i in range(0, len(lines_gaff)):
line = lines_gaff[i]
atypes = line[:11].split('-')
atype1 = atypes[0].strip()
atype2 = atypes[1].strip()
atype3 = atypes[2].strip()
atype4 = atypes[3].strip()
at1 = atype1.replace('X','*')
at2 = atype2.replace('X','*')
at3 = atype3.replace('X','*')
at4 = atype4.replace('X','*')
- impropertype = '@improper:'+atype1+'-'+atype2+'-'+atype3+'-'+atype4
+ #impropertype = '@improper:'+atype1+'-'+atype2+'-'+atype3+'-'+atype4
+ #sys.stdout.write(' '+impropertype+' @atom:'+at1+' @atom:'+at2+' @atom:'+at3+' @atom:'+at4+'\n')
+ # Oops. This is incorrect.
+ # In moltemplate, the central atom is the first atom,
+ # In "gaff.dat", the central atom is the third atom
+ # http://archive.ambermd.org/201307/0519.html
+ impropertype = '@improper:'+atype3+'-'+atype1+'-'+atype2+'-'+atype4
tokens= line[11:].split()
Kn = float(tokens[0])
dn = float(tokens[1])
n = int(float(tokens[2]))
comments=' '.join(tokens[3:])
if (dn < 0.001):
sys.stdout.write(' improper_coeff '+impropertype+' '+improper_style_name+' '+str(Kn)+' 1 '+str(n)+' # '+comments+'\n')
elif (179.999 < abs(dn) < 180.001):
sys.stdout.write(' improper_coeff '+impropertype+' '+improper_style_name+' '+str(Kn)+' -1 '+str(n)+' # '+comments+'\n')
else:
sys.stderr.write('Error: Illegal bondImproper parameters:\n'
' As of 2013-8-03, LAMMPS doens hot have an improper style\n'
' which can handle impropers with gamma != 0 or 180\n')
exit(-1)
sys.stdout.write(' } # (end of improper_coeffs)\n')
sys.stdout.write('\n')
sys.stdout.write(' write_once("Data Impropers By Type") {\n')
for i in range(0, len(lines_gaff)):
line = lines_gaff[i]
atypes = line[:11].split('-')
atype1 = atypes[0].strip()
atype2 = atypes[1].strip()
atype3 = atypes[2].strip()
atype4 = atypes[3].strip()
at1 = atype1.replace('X','*')
at2 = atype2.replace('X','*')
at3 = atype3.replace('X','*')
at4 = atype4.replace('X','*')
- impropertype = '@improper:'+atype1+'-'+atype2+'-'+atype3+'-'+atype4
- sys.stdout.write(' '+impropertype+' @atom:'+at1+' @atom:'+at2+' @atom:'+at3+' @atom:'+at4+'\n')
+ #impropertype = '@improper:'+atype1+'-'+atype2+'-'+atype3+'-'+atype4
+ #sys.stdout.write(' '+impropertype+' @atom:'+at1+' @atom:'+at2+' @atom:'+at3+' @atom:'+at4+'\n')
+ # Oops. This is incorrect.
+ # In moltemplate, the central atom is the first atom,
+ # In "gaff.dat", the central atom is the third atom
+ # http://archive.ambermd.org/201307/0519.html
+ impropertype = '@improper:'+atype3+'-'+atype1+'-'+atype2+'-'+atype4
+ sys.stdout.write(' '+impropertype+' @atom:'+at3+' @atom:'+at1+' @atom:'+at2+' @atom:'+at4+'\n')
+
sys.stdout.write(' } # (end of Impropers By Type)\n')
sys.stdout.write('\n')
+# NOTE: AMBER documentation is not clear how the improper angle is defined.
+# It's not clear if we should be using the dihedral angle between
+# planes I-J-K and J-K-L. As of 2014-4, improper_style cvff does this.
+# Even if we create improper interactions with the angle defined between
+# the wrong planes, at least the minima should be the same
+# (0 degrees or 180 degrees).
+# So I'm not too worried we are getting this detail wrong long as
+# we generate new impropers realizing that the 3rd atom (K) is the
+# central atom (according to AMBER conventions).
+#
+# http://structbio.vanderbilt.edu/archives/amber-archive/2007/0408.php
+#
+# Currently, we only apply improper torsional angles for atoms
+# in a planar conformations. Is it clear?
+# Junmei
diff --git a/tools/moltemplate/common/amber/amberparm_pair_to_lt.py b/tools/moltemplate/common/amber/amberparm_pair_to_lt.py
index 3bb9ddea5..587e9b047 100755
--- a/tools/moltemplate/common/amber/amberparm_pair_to_lt.py
+++ b/tools/moltemplate/common/amber/amberparm_pair_to_lt.py
@@ -1,31 +1,32 @@
#!/usr/bin/env python
import sys
lines_gaff = sys.stdin.readlines()
#pair_style = 'lj/charmm/coul/long'
# NOTE: Long-range coulombic forces were disabled intentionally. (See below)
# If you want to use long-range electrostatics, uncomment these lines:
# Instead I use hybrid lj/charmm/coul/charmm by default, because
# LAMMPS complains if you attempt to use lj/charmm/coul/long on a
# system if it does not contain any charged particles.
# Currently, moltemplate does not assign atomic charge,
# so this problem occurs frequently.
-pair_style = 'lj/charmm/coul/charmm'
+#pair_style = 'lj/charmm/coul/charmm'
+pair_style = 'lj/charmm/coul/long'
sys.stdout.write(' write_once(\"In Settings\") {\n')
for i in range(0, len(lines_gaff)):
line = lines_gaff[i]
tokens= line.split()
atype = tokens[0]
sig=tokens[1]
eps=tokens[2]
comments=' '.join(tokens[3:])
sys.stdout.write(' pair_coeff @atom:'+atype+' @atom:'+atype+' '+pair_style+' '+eps+' '+sig+' # '+comments+'\n')
sys.stdout.write(' } # (end of pair_coeffs)\n')
sys.stdout.write('\n')
diff --git a/tools/moltemplate/common/gaff.lt b/tools/moltemplate/common/gaff.lt
index 16d002081..a83824e27 100644
--- a/tools/moltemplate/common/gaff.lt
+++ b/tools/moltemplate/common/gaff.lt
@@ -1,11393 +1,11780 @@
-# This is the January 2013 version of GAFF (from AmberTools13).
+# This is the April 2014 version of GAFF (from AmberTools14).
####################################################################
# To use this, LAMMPS currently must be compiled with the USER-MISC package.
# (Type "make yes-user-misc" into the shell before compiling LAMMPS.)
####################################################################
# This moltemplate (LT) file was generated automatically using
# amberparm2lt.sh gaff.dat GAFF
####################################################################
# Background information and usage explanation:
# This file contanis a list of atom types and rules for generating bonded
# interactions between these atoms (hopefully) according to AMBER conventions.
# By using the atom types shown below in your own molecules, bonds and angular
# interactions will be automatically generated.
# AMBER (GAFF) force-field parameters will also be assigned to each angle
# interaction (according to these atom types).
# One way to apply the GAFF force field to a particular type of molecule, is
# to use the "inherits" keyword when you define that molecule. For example:
# import("gaff.lt")
# MoleculeType inherits GAFF {
# write_once("Data Atoms") {
# $atom:C1 $mol:... @atom:cx 0.0 4.183 3.194 13.285
# $atom:C2 $mol:... @atom:cx 0.0 4.291 4.618 13.382
# : : :
# }
# }
#(See "Inheritance" and "short names vs. full names" in the moltemplate manual.)
####################################################################
# Moltemplate can not assign atom charge. You must assign atomic
# charges yourself. (Moltemplate is only a simple text manipulation tool.)
####################################################################
GAFF {
# ----------------------------------------------------------------------
# The basic atom nomenclature and conventions are explained here:
# http://ambermd.org/antechamber/gaff.pdf
# For reference, the original gaff.dat file and format documenation are here:
# http://ambermd.org/AmberTools-get.html
# http://ambermd.org/formats.html#parm.dat
# ----------------------------------------------------------------------
write_once("Data Masses") {
@atom:c 12.01 # Sp2 C carbonyl group
@atom:c1 12.01 # Sp C
@atom:c2 12.01 # Sp2 C
@atom:c3 12.01 # Sp3 C
@atom:ca 12.01 # Sp2 C in pure aromatic systems
@atom:cp 12.01 # Head Sp2 C that connect two rings in biphenyl sys.
@atom:cq 12.01 # Head Sp2 C that connect two rings in biphenyl sys. identical to cp
@atom:cc 12.01 # Sp2 carbons in non-pure aromatic systems
@atom:cd 12.01 # Sp2 carbons in non-pure aromatic systems, identical to cc
@atom:ce 12.01 # Inner Sp2 carbons in conjugated systems
@atom:cf 12.01 # Inner Sp2 carbons in conjugated systems, identical to ce
@atom:cg 12.01 # Inner Sp carbons in conjugated systems
@atom:ch 12.01 # Inner Sp carbons in conjugated systems, identical to cg
@atom:cx 12.01 # Sp3 carbons in triangle systems
@atom:cy 12.01 # Sp3 carbons in square systems
@atom:cu 12.01 # Sp2 carbons in triangle systems
@atom:cv 12.01 # Sp2 carbons in square systems
@atom:cz 12.01 # Sp2 carbon in guanidine group
@atom:h1 1.008 # H bonded to aliphatic carbon with 1 electrwd. group
@atom:h2 1.008 # H bonded to aliphatic carbon with 2 electrwd. group
@atom:h3 1.008 # H bonded to aliphatic carbon with 3 electrwd. group
@atom:h4 1.008 # H bonded to non-sp3 carbon with 1 electrwd. group
@atom:h5 1.008 # H bonded to non-sp3 carbon with 2 electrwd. group
@atom:ha 1.008 # H bonded to aromatic carbon
@atom:hc 1.008 # H bonded to aliphatic carbon without electrwd. group
@atom:hn 1.008 # H bonded to nitrogen atoms
@atom:ho 1.008 # Hydroxyl group
@atom:hp 1.008 # H bonded to phosphate
@atom:hs 1.008 # Hydrogen bonded to sulphur
@atom:hw 1.008 # Hydrogen in water
@atom:hx 1.008 # H bonded to C next to positively charged group
@atom:f 19.00 # Fluorine
@atom:cl 35.45 # Chlorine
@atom:br 79.90 # Bromine
@atom:i 126.9 # Iodine
@atom:n 14.01 # Sp2 nitrogen in amide groups
@atom:n1 14.01 # Sp N
@atom:n2 14.01 # aliphatic Sp2 N with two connected atoms
@atom:n3 14.01 # Sp3 N with three connected atoms
@atom:n4 14.01 # Sp3 N with four connected atoms
@atom:na 14.01 # Sp2 N with three connected atoms
@atom:nb 14.01 # Sp2 N in pure aromatic systems
@atom:nc 14.01 # Sp2 N in non-pure aromatic systems
@atom:nd 14.01 # Sp2 N in non-pure aromatic systems, identical to nc
@atom:ne 14.01 # Inner Sp2 N in conjugated systems
@atom:nf 14.01 # Inner Sp2 N in conjugated systems, identical to ne
@atom:nh 14.01 # Amine N connected one or more aromatic rings
@atom:no 14.01 # Nitro N
@atom:o 16.00 # Oxygen with one connected atom
@atom:oh 16.00 # Oxygen in hydroxyl group
@atom:os 16.00 # Ether and ester oxygen
@atom:ow 16.00 # Oxygen in water
@atom:p2 30.97 # Phosphate with two connected atoms
@atom:p3 30.97 # Phosphate with three connected atoms, such as PH3
@atom:p4 30.97 # Phosphate with three connected atoms, such as O=P(CH3)2
@atom:p5 30.97 # Phosphate with four connected atoms, such as O=P(OH)3
@atom:pb 30.97 # Sp2 P in pure aromatic systems
@atom:pc 30.97 # Sp2 P in non-pure aromatic systems
@atom:pd 30.97 # Sp2 P in non-pure aromatic systems, identical to pc
@atom:pe 30.97 # Inner Sp2 P in conjugated systems
@atom:pf 30.97 # Inner Sp2 P in conjugated systems, identical to pe
@atom:px 30.97 # Special p4 in conjugated systems
@atom:py 30.97 # Special p5 in conjugated systems
@atom:s 32.06 # S with one connected atom
@atom:s2 32.06 # S with two connected atom, involved at least one double bond
@atom:s4 32.06 # S with three connected atoms
@atom:s6 32.06 # S with four connected atoms
@atom:sh 32.06 # Sp3 S connected with hydrogen
@atom:ss 32.06 # Sp3 S in thio-ester and thio-ether
@atom:sx 32.06 # Special s4 in conjugated systems
@atom:sy 32.06 # Special s6 in conjugated systems
} # (end of masses)
write_once("In Settings") {
- pair_coeff @atom:h1 @atom:h1 lj/charmm/coul/charmm 0.0157 1.3870 # Veenstra et al JCC,8,(1992),963
- pair_coeff @atom:h2 @atom:h2 lj/charmm/coul/charmm 0.0157 1.2870 # Veenstra et al JCC,8,(1992),963
- pair_coeff @atom:h3 @atom:h3 lj/charmm/coul/charmm 0.0157 1.1870 # Veenstra et al JCC,8,(1992),963
- pair_coeff @atom:h4 @atom:h4 lj/charmm/coul/charmm 0.0150 1.4090 # Spellmeyer, one electrowithdr. neighbor
- pair_coeff @atom:h5 @atom:h5 lj/charmm/coul/charmm 0.0150 1.3590 # Spellmeyer, two electrowithdr. neighbor
- pair_coeff @atom:ha @atom:ha lj/charmm/coul/charmm 0.0150 1.4590 # Spellmeyer
- pair_coeff @atom:hc @atom:hc lj/charmm/coul/charmm 0.0157 1.4870 # OPLS
- pair_coeff @atom:hn @atom:hn lj/charmm/coul/charmm 0.0157 0.6000 # !Ferguson base pair geom.
- pair_coeff @atom:ho @atom:ho lj/charmm/coul/charmm 0.0000 0.0000 # OPLS Jorgensen, JACS,110,(1988),1657
- pair_coeff @atom:hp @atom:hp lj/charmm/coul/charmm 0.0157 0.6000 # same to hs (be careful !)
- pair_coeff @atom:hs @atom:hs lj/charmm/coul/charmm 0.0157 0.6000 # W. Cornell CH3SH --> CH3OH FEP
- pair_coeff @atom:hw @atom:hw lj/charmm/coul/charmm 0.0000 0.0000 # OPLS Jorgensen, JACS,110,(1988),1657
- pair_coeff @atom:hx @atom:hx lj/charmm/coul/charmm 0.0157 1.1000 # Veenstra et al JCC,8,(1992),963
- pair_coeff @atom:o @atom:o lj/charmm/coul/charmm 0.2100 1.6612 # OPLS
- pair_coeff @atom:oh @atom:oh lj/charmm/coul/charmm 0.2104 1.7210 # OPLS
- pair_coeff @atom:os @atom:os lj/charmm/coul/charmm 0.1700 1.6837 # OPLS ether
- pair_coeff @atom:ow @atom:ow lj/charmm/coul/charmm 0.1520 1.7683 # TIP3P water model
- pair_coeff @atom:c @atom:c lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:c1 @atom:c1 lj/charmm/coul/charmm 0.2100 1.9080 # cp C DLM 11/2007 well depth from OPLS replacing 0.0860
- pair_coeff @atom:c2 @atom:c2 lj/charmm/coul/charmm 0.0860 1.9080 # sp2 atom in the middle of C=CD-CD=C
- pair_coeff @atom:c3 @atom:c3 lj/charmm/coul/charmm 0.1094 1.9080 # OPLS
- pair_coeff @atom:ca @atom:ca lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cc @atom:cc lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cd @atom:cd lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:ce @atom:ce lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cf @atom:cf lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cg @atom:cg lj/charmm/coul/charmm 0.2100 1.9080 # DLM 12/2007 as c1
- pair_coeff @atom:ch @atom:ch lj/charmm/coul/charmm 0.2100 1.9080 # DLM 12/2007 as c1
- pair_coeff @atom:cp @atom:cp lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cq @atom:cq lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cu @atom:cu lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cv @atom:cv lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cx @atom:cx lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cy @atom:cy lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:cz @atom:cz lj/charmm/coul/charmm 0.0860 1.9080 # OPLS
- pair_coeff @atom:n @atom:n lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:n1 @atom:n1 lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:n2 @atom:n2 lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:n3 @atom:n3 lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:n4 @atom:n4 lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:na @atom:na lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:nb @atom:nb lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:nc @atom:nc lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:nd @atom:nd lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:ne @atom:ne lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:nf @atom:nf lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:nh @atom:nh lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:no @atom:no lj/charmm/coul/charmm 0.1700 1.8240 # OPLS
- pair_coeff @atom:s @atom:s lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:s2 @atom:s2 lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:s4 @atom:s4 lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:s6 @atom:s6 lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:sx @atom:sx lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:sy @atom:sy lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:sh @atom:sh lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:ss @atom:ss lj/charmm/coul/charmm 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
- pair_coeff @atom:p2 @atom:p2 lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:p3 @atom:p3 lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:p4 @atom:p4 lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:p5 @atom:p5 lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:pb @atom:pb lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:pc @atom:pc lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:pd @atom:pd lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:pe @atom:pe lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:pf @atom:pf lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:px @atom:px lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:py @atom:py lj/charmm/coul/charmm 0.2000 2.1000 # JCC,7,(1986),230;
- pair_coeff @atom:f @atom:f lj/charmm/coul/charmm 0.061 1.75 # Gough et al. JCC 13,(1992),963.
- pair_coeff @atom:cl @atom:cl lj/charmm/coul/charmm 0.265 1.948 # Fox, JPCB,102,8070,(98),flex.mdl CHCl3
- pair_coeff @atom:br @atom:br lj/charmm/coul/charmm 0.420 2.02 # Junmei, 2010
- pair_coeff @atom:i @atom:i lj/charmm/coul/charmm 0.50 2.15 # Junmei, 2010
+ pair_coeff @atom:h1 @atom:h1 lj/charmm/coul/long 0.0157 1.3870 # Veenstra et al JCC,8,(1992),963
+ pair_coeff @atom:h2 @atom:h2 lj/charmm/coul/long 0.0157 1.2870 # Veenstra et al JCC,8,(1992),963
+ pair_coeff @atom:h3 @atom:h3 lj/charmm/coul/long 0.0157 1.1870 # Veenstra et al JCC,8,(1992),963
+ pair_coeff @atom:h4 @atom:h4 lj/charmm/coul/long 0.0150 1.4090 # Spellmeyer, one electrowithdr. neighbor
+ pair_coeff @atom:h5 @atom:h5 lj/charmm/coul/long 0.0150 1.3590 # Spellmeyer, two electrowithdr. neighbor
+ pair_coeff @atom:ha @atom:ha lj/charmm/coul/long 0.0150 1.4590 # Spellmeyer
+ pair_coeff @atom:hc @atom:hc lj/charmm/coul/long 0.0157 1.4870 # OPLS
+ pair_coeff @atom:hn @atom:hn lj/charmm/coul/long 0.0157 0.6000 # !Ferguson base pair geom.
+ pair_coeff @atom:ho @atom:ho lj/charmm/coul/long 0.0000 0.0000 # OPLS Jorgensen, JACS,110,(1988),1657
+ pair_coeff @atom:hp @atom:hp lj/charmm/coul/long 0.0157 0.6000 # same to hs (be careful !)
+ pair_coeff @atom:hs @atom:hs lj/charmm/coul/long 0.0157 0.6000 # W. Cornell CH3SH --> CH3OH FEP
+ pair_coeff @atom:hw @atom:hw lj/charmm/coul/long 0.0000 0.0000 # OPLS Jorgensen, JACS,110,(1988),1657
+ pair_coeff @atom:hx @atom:hx lj/charmm/coul/long 0.0157 1.1000 # Veenstra et al JCC,8,(1992),963
+ pair_coeff @atom:o @atom:o lj/charmm/coul/long 0.2100 1.6612 # OPLS
+ pair_coeff @atom:oh @atom:oh lj/charmm/coul/long 0.2104 1.7210 # OPLS
+ pair_coeff @atom:os @atom:os lj/charmm/coul/long 0.1700 1.6837 # OPLS ether
+ pair_coeff @atom:ow @atom:ow lj/charmm/coul/long 0.1520 1.7683 # TIP3P water model
+ pair_coeff @atom:c @atom:c lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:c1 @atom:c1 lj/charmm/coul/long 0.2100 1.9080 # cp C DLM 11/2007 well depth from OPLS replacing 0.0860
+ pair_coeff @atom:c2 @atom:c2 lj/charmm/coul/long 0.0860 1.9080 # sp2 atom in the middle of C=CD-CD=C
+ pair_coeff @atom:c3 @atom:c3 lj/charmm/coul/long 0.1094 1.9080 # OPLS
+ pair_coeff @atom:ca @atom:ca lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cc @atom:cc lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cd @atom:cd lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:ce @atom:ce lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cf @atom:cf lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cg @atom:cg lj/charmm/coul/long 0.2100 1.9080 # DLM 12/2007 as c1
+ pair_coeff @atom:ch @atom:ch lj/charmm/coul/long 0.2100 1.9080 # DLM 12/2007 as c1
+ pair_coeff @atom:cp @atom:cp lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cq @atom:cq lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cu @atom:cu lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cv @atom:cv lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cx @atom:cx lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cy @atom:cy lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:cz @atom:cz lj/charmm/coul/long 0.0860 1.9080 # OPLS
+ pair_coeff @atom:n @atom:n lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:n1 @atom:n1 lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:n2 @atom:n2 lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:n3 @atom:n3 lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:n4 @atom:n4 lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:na @atom:na lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:nb @atom:nb lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:nc @atom:nc lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:nd @atom:nd lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:ne @atom:ne lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:nf @atom:nf lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:nh @atom:nh lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:no @atom:no lj/charmm/coul/long 0.1700 1.8240 # OPLS
+ pair_coeff @atom:s @atom:s lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:s2 @atom:s2 lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:s4 @atom:s4 lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:s6 @atom:s6 lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:sx @atom:sx lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:sy @atom:sy lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:sh @atom:sh lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:ss @atom:ss lj/charmm/coul/long 0.2500 2.0000 # W. Cornell CH3SH and CH3SCH3 FEP's
+ pair_coeff @atom:p2 @atom:p2 lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:p3 @atom:p3 lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:p4 @atom:p4 lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:p5 @atom:p5 lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:pb @atom:pb lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:pc @atom:pc lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:pd @atom:pd lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:pe @atom:pe lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:pf @atom:pf lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:px @atom:px lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:py @atom:py lj/charmm/coul/long 0.2000 2.1000 # JCC,7,(1986),230;
+ pair_coeff @atom:f @atom:f lj/charmm/coul/long 0.061 1.75 # Gough et al. JCC 13,(1992),963.
+ pair_coeff @atom:cl @atom:cl lj/charmm/coul/long 0.265 1.948 # Fox, JPCB,102,8070,(98),flex.mdl CHCl3
+ pair_coeff @atom:br @atom:br lj/charmm/coul/long 0.420 2.02 # Junmei, 2010
+ pair_coeff @atom:i @atom:i lj/charmm/coul/long 0.50 2.15 # Junmei, 2010
} # (end of pair_coeffs)
write_once("In Settings") {
bond_coeff @bond:ow-hw harmonic 553.0 0.9572 # TIP3P_Water 1
+ bond_coeff @bond:hw-hw harmonic 553.0 1.5136 # TIP3P_Water 1
bond_coeff @bond:br-br harmonic 123.2 2.5420 # SOURCE1 4 0.0000
bond_coeff @bond:br-c1 harmonic 352.7 1.7870 # SOURCE2 4 0.0024
bond_coeff @bond:br-c2 harmonic 278.7 1.8830 # SOURCE1 31 0.0000
bond_coeff @bond:br-c harmonic 240.3 1.9460 # SOURCE2 2 0.0285
bond_coeff @bond:br-c3 harmonic 229.5 1.9660 # SOURCE1 100 0.0000
bond_coeff @bond:br-ca harmonic 269.6 1.8970 # SOURCE1 127 0.0058
bond_coeff @bond:br-cc harmonic 277.6 1.8847 # SOURCE4 39 0.0068
bond_coeff @bond:br-cx harmonic 261.4 1.9100 # SOURCE1 8 0.0000
bond_coeff @bond:br-i harmonic 142.4 2.6710 # SOURCE1 2 0.0245
bond_coeff @bond:br-n1 harmonic 330.4 1.8600 # SOUECE3 1
bond_coeff @bond:br-n2 harmonic 219.0 2.0380 # SOURCE3 5 0.1082
bond_coeff @bond:br-n harmonic 320.2 1.8730 # SOURCE3 4 0.0046
bond_coeff @bond:br-n3 harmonic 265.9 1.9520 # SOURCE3 2 0.0000
bond_coeff @bond:br-n4 harmonic 282.4 1.9260 # SOURCE3 3 0.0013
bond_coeff @bond:br-na harmonic 237.3 2.0020 # SOURCE3 7 0.2156
bond_coeff @bond:br-nh harmonic 270.9 1.9440 # SOURCE3 1 0.0000
bond_coeff @bond:br-no harmonic 191.0 2.1010 # SOURCE3 1 0.0000
bond_coeff @bond:br-o harmonic 278.9 1.8000 # SOUECE3 1
bond_coeff @bond:br-oh harmonic 237.2 1.8660 # SOURCE3 1 0.0000
bond_coeff @bond:br-os harmonic 225.6 1.8870 # SOURCE3 2 0.0000
bond_coeff @bond:br-p2 harmonic 174.3 2.2100 # SOURCE3 9 0.0510
bond_coeff @bond:br-p3 harmonic 167.0 2.2310 # SOURCE3 3 0.0101
bond_coeff @bond:br-p4 harmonic 188.8 2.1710 # SOUECE3 1
bond_coeff @bond:br-p5 harmonic 179.3 2.1960 # SOURCE3 3 0.0099
bond_coeff @bond:br-s harmonic 170.6 2.2200 # SOUECE3 1
bond_coeff @bond:br-s4 harmonic 134.3 2.3410 # SOURCE3 1 0.0000
bond_coeff @bond:br-s6 harmonic 172.7 2.2140 # SOURCE3 3 0.0443
bond_coeff @bond:br-sh harmonic 174.4 2.2090 # SOURCE3 1 0.0000
bond_coeff @bond:br-ss harmonic 176.6 2.2030 # SOURCE3 3 0.0035
bond_coeff @bond:c1-c1 harmonic 986.2 1.1810 # SOURCE1 265 0.0031
bond_coeff @bond:c1-c2 harmonic 625.0 1.3070 # SOURCE1 18 0.0000
bond_coeff @bond:c1-c3 harmonic 368.3 1.4700 # SOURCE1 215 0.0017
bond_coeff @bond:c1-ca harmonic 404.1 1.4400 # SOUECE3 1
bond_coeff @bond:c1-ce harmonic 607.4 1.3153 # SOURCE4 6 0.0086
bond_coeff @bond:c1-cg harmonic 845.8 1.2220 # SOURCE3 22 0.0101
bond_coeff @bond:c1-ch harmonic 845.8 1.2220 # SOURCE3 22 same_as_c1-cg
bond_coeff @bond:c1-cl harmonic 419.7 1.6310 # SOURCE2 6 0.0050
bond_coeff @bond:c1-cx harmonic 399.1 1.4440 # SOURCE1 38 0.0000
bond_coeff @bond:c1-f harmonic 469.4 1.2700 # SOURCE2 2 0.0085
bond_coeff @bond:c1-ha harmonic 375.9 1.0660 # SOURCE3 63 0.0035
bond_coeff @bond:c1-hc harmonic 385.6 1.0600 # SOUECE3 1
bond_coeff @bond:c1-i harmonic 318.8 1.9890 # SOURCE2 4 0.0032
bond_coeff @bond:c1-n1 harmonic 1014.5 1.1380 # SOURCE1 170 0.0055
bond_coeff @bond:c1-n2 harmonic 769.8 1.2100 # SOURCE3 5 0.0115
bond_coeff @bond:c1-n3 harmonic 409.8 1.3920 # SOURCE2 1 0.0000
bond_coeff @bond:c1-n4 harmonic 378.2 1.4170 # SOURCE3 3 0.0032
bond_coeff @bond:c1-n harmonic 503.0 1.3300 # SOUECE3 1
bond_coeff @bond:c1-na harmonic 452.0 1.3620 # SOURCE3 8 0.0034
bond_coeff @bond:c1-ne harmonic 803.3 1.1986 # SOURCE4 10 0.0088
bond_coeff @bond:c1-nf harmonic 803.3 1.1986 # SOURCE4 10 same_as_c1-ne
bond_coeff @bond:c1-nh harmonic 485.0 1.3408 # SOURCE4 11 0.0037
bond_coeff @bond:c1-no harmonic 393.0 1.4050 # SOURCE3 3 0.0005
bond_coeff @bond:c1-o harmonic 777.0 1.1660 # SOURCE2 9 0.0052
bond_coeff @bond:c1-oh harmonic 435.6 1.3260 # SOURCE3 1 0.0000
bond_coeff @bond:c1-os harmonic 437.1 1.3250 # SOURCE3 3 0.0148
bond_coeff @bond:c1-p2 harmonic 289.3 1.7700 # SOUECE3 1
bond_coeff @bond:c1-p3 harmonic 275.1 1.7900 # SOUECE3 1
bond_coeff @bond:c1-p4 harmonic 275.1 1.7900 # SOUECE3 1
bond_coeff @bond:c1-p5 harmonic 302.2 1.7530 # SOURCE3 2 0.0000
bond_coeff @bond:c1-s2 harmonic 410.0 1.5950 # SOURCE3 1 0.0000
bond_coeff @bond:c1-s harmonic 371.8 1.6300 # SOURCE1 14 0.0000
bond_coeff @bond:c1-s4 harmonic 272.9 1.7460 # SOURCE3 2 0.0000
bond_coeff @bond:c1-s6 harmonic 290.4 1.7220 # SOURCE3 2 0.0000
bond_coeff @bond:c1-sh harmonic 324.5 1.6800 # SOUECE3 1
bond_coeff @bond:c1-ss harmonic 325.4 1.6790 # SOURCE1 10 0.0000
bond_coeff @bond:c2-c2 harmonic 589.7 1.3240 # SOURCE1 974 0.0096
bond_coeff @bond:c2-c3 harmonic 328.3 1.5080 # SOURCE1 2536 0.0021
bond_coeff @bond:c2-ca harmonic 357.2 1.4800 # SOUECE3 1
bond_coeff @bond:c2-cc harmonic 522.6 1.3600 # SOURCE1 771 0.0185
bond_coeff @bond:c2-cd harmonic 522.6 1.3600 # SOURCE1 771 0.0185
bond_coeff @bond:c2-ce harmonic 560.5 1.3390 # SOURCE3 62 0.0128
bond_coeff @bond:c2-cf harmonic 560.5 1.3390 # SOURCE3 62 same_as_c2-ce
bond_coeff @bond:c2-cl harmonic 328.8 1.7220 # SOURCE1 163 0.0098
bond_coeff @bond:c2-cu harmonic 573.9 1.3320 # SOURCE2 1 0.0000
bond_coeff @bond:c2-cx harmonic 353.3 1.4836 # SOURCE4 26 0.0064
bond_coeff @bond:c2-cy harmonic 331.7 1.5046 # SOURCE4 9 0.0053
bond_coeff @bond:c2-f harmonic 368.7 1.3400 # SOURCE1 34 0.0000
bond_coeff @bond:c2-h4 harmonic 348.6 1.0840 # SOURCE3 40 0.0058
bond_coeff @bond:c2-h5 harmonic 338.0 1.0915 # SOURCE4 42 0.0017
bond_coeff @bond:c2-ha harmonic 344.3 1.0870 # SOURCE3 797 0.0046
bond_coeff @bond:c2-hc harmonic 344.3 1.0870 # SOURCE3 789 0.0046
bond_coeff @bond:c2-hx harmonic 350.1 1.0830 # SOURCE3 3 0.0008
bond_coeff @bond:c2-i harmonic 223.2 2.1530 # SOURCE3 2 0.0000
bond_coeff @bond:c2-n1 harmonic 546.0 1.3060 # SOURCE3 4 0.0161
bond_coeff @bond:c2-n2 harmonic 581.1 1.2880 # SOURCE1 103 0.0100
bond_coeff @bond:c2-n3 harmonic 486.3 1.3400 # SOUECE3 1
bond_coeff @bond:c2-n harmonic 390.5 1.4070 # SOURCE3 9 0.0124
bond_coeff @bond:c2-n4 harmonic 309.1 1.4820 # SOURCE3 5 0.0064
bond_coeff @bond:c2-na harmonic 411.1 1.3910 # SOURCE3 31 0.0289
bond_coeff @bond:c2-nc harmonic 533.0 1.3130 # SOURCE1 99 0.0095
bond_coeff @bond:c2-nd harmonic 533.0 1.3130 # SOURCE1 99 same_as_c2-nc
bond_coeff @bond:c2-ne harmonic 597.7 1.2800 # SOURCE3 37 0.0110
bond_coeff @bond:c2-nf harmonic 597.7 1.2800 # SOURCE3 37 same_as_c2-ne
bond_coeff @bond:c2-nh harmonic 462.6 1.3550 # SOURCE3 38 0.0413
bond_coeff @bond:c2-no harmonic 345.6 1.4457 # SOURCE4 7 0.0087
bond_coeff @bond:c2-o harmonic 623.6 1.2244 # SOURCE4 15 0.0036
bond_coeff @bond:c2-oh harmonic 425.4 1.3330 # SOURCE1 53 0.0000
bond_coeff @bond:c2-os harmonic 392.6 1.3570 # SOURCE1 315 0.0097
bond_coeff @bond:c2-p2 harmonic 375.9 1.6700 # SOURCE3 62 0.0147
bond_coeff @bond:c2-p3 harmonic 246.6 1.8340 # SOURCE3 5 0.0042
bond_coeff @bond:c2-p4 harmonic 254.0 1.8220 # SOUECE3 1
bond_coeff @bond:c2-p5 harmonic 228.2 1.8658 # SOURCE4 5 0.0025
bond_coeff @bond:c2-pe harmonic 355.3 1.6910 # SOURCE3 52 0.0542
bond_coeff @bond:c2-pf harmonic 355.3 1.6910 # SOURCE3 52 same_as_c2-pe
bond_coeff @bond:c2-s2 harmonic 393.1 1.6100 # SOURCE2 1 0.0000
bond_coeff @bond:c2-s harmonic 281.5 1.7340 # SOURCE3 4 0.0034
bond_coeff @bond:c2-s4 harmonic 263.2 1.7600 # SOUECE3 1
bond_coeff @bond:c2-s6 harmonic 263.2 1.7600 # SOUECE3 1
bond_coeff @bond:c2-sh harmonic 252.0 1.7771 # SOURCE4 5 0.0037
bond_coeff @bond:c2-ss harmonic 280.0 1.7360 # SOURCE1 209 0.0155
bond_coeff @bond:c3-c3 harmonic 303.1 1.5350 # SOURCE1 14664 0.0048
bond_coeff @bond:c3-ca harmonic 323.5 1.5130 # SOURCE1 1813 0.0000
bond_coeff @bond:c3-cc harmonic 337.3 1.4990 # SOURCE3 50 0.0096
bond_coeff @bond:c3-cd harmonic 337.3 1.4990 # SOURCE3 50 0.0096
bond_coeff @bond:c3-ce harmonic 331.3 1.5050 # SOURCE3 9 0.0024
bond_coeff @bond:c3-cf harmonic 331.3 1.5050 # SOURCE3 9 same_as_c3-ce
bond_coeff @bond:c3-cl harmonic 279.0 1.7860 # SOURCE1 267 0.0194
bond_coeff @bond:c3-cu harmonic 359.4 1.4780 # SOURCE1 7 0.0000
bond_coeff @bond:c3-cv harmonic 347.6 1.4890 # SOURCE1 11 0.0000
bond_coeff @bond:c3-cx harmonic 322.5 1.5140 # SOURCE1 712 0.0045
bond_coeff @bond:c3-cy harmonic 308.5 1.5290 # SOURCE1 376 0.0000
bond_coeff @bond:c3-f harmonic 363.8 1.3440 # SOURCE1 617 0.0281
bond_coeff @bond:c3-h1 harmonic 335.9 1.0930 # SOURCE3 2175 0.0082
bond_coeff @bond:c3-h2 harmonic 326.4 1.1000 # SOURCE3 66 0.0280
bond_coeff @bond:c3-h3 harmonic 333.4 1.0948 # SOURCE4 25 0.0026
bond_coeff @bond:c3-hc harmonic 337.3 1.0920 # SOURCE3 2815 0.0059
bond_coeff @bond:c3-hx harmonic 338.7 1.0910 # SOURCE3 146 0.0066
bond_coeff @bond:c3-i harmonic 219.1 2.1620 # SOURCE1 15 0.0000
bond_coeff @bond:c3-n1 harmonic 325.1 1.4700 # SOURCE3 0
bond_coeff @bond:c3-n2 harmonic 313.8 1.4770 # SOURCE1 129 0.0138
bond_coeff @bond:c3-n harmonic 330.6 1.4600 # SOURCE1 187 0.0079
bond_coeff @bond:c3-n3 harmonic 320.6 1.4700 # SOURCE1 1678 0.0017
bond_coeff @bond:c3-n4 harmonic 293.6 1.4990 # SOURCE1 1370 0.0000
bond_coeff @bond:c3-na harmonic 334.7 1.4560 # SOURCE3 23 0.0119
bond_coeff @bond:c3-nc harmonic 334.7 1.4560 # SOURCE3 9 0.0109
bond_coeff @bond:c3-nd harmonic 334.7 1.4560 # SOURCE3 9 same_as_c3-nc
bond_coeff @bond:c3-nh harmonic 332.7 1.4580 # SOURCE3 27 0.0085
bond_coeff @bond:c3-no harmonic 265.4 1.5330 # SOURCE1 83 0.0212
bond_coeff @bond:c3-o harmonic 449.9 1.3165 # SOURCE4 8 0.0193
bond_coeff @bond:c3-oh harmonic 314.1 1.4260 # SOURCE1 914 0.0129
bond_coeff @bond:c3-os harmonic 301.5 1.4390 # SOURCE1 3123 0.0126
bond_coeff @bond:c3-p2 harmonic 234.3 1.8550 # SOURCE3 9 0.0125
bond_coeff @bond:c3-p3 harmonic 240.6 1.8440 # SOURCE3 109 0.0107
bond_coeff @bond:c3-p4 harmonic 247.2 1.8330 # SOURCE3 29 0.0138
bond_coeff @bond:c3-p5 harmonic 259.7 1.8130 # SOURCE1 84 0.0000
bond_coeff @bond:c3-px harmonic 252.7 1.8240 # SOURCE3 28 0.0098
bond_coeff @bond:c3-py harmonic 259.7 1.8130 # SOURCE3 13 0.0163
bond_coeff @bond:c3-s harmonic 212.9 1.8450 # SOURCE3 4 0.0185
bond_coeff @bond:c3-s4 harmonic 233.8 1.8070 # SOURCE1 139 0.0023
bond_coeff @bond:c3-s6 harmonic 254.0 1.7740 # SOURCE1 118 0.0103
bond_coeff @bond:c3-sh harmonic 225.3 1.8220 # SOURCE3 12 0.0051
bond_coeff @bond:c3-ss harmonic 225.8 1.8210 # SOURCE1 358 0.0075
bond_coeff @bond:c3-sx harmonic 232.6 1.8090 # SOURCE3 30 0.0067
bond_coeff @bond:c3-sy harmonic 248.9 1.7820 # SOURCE3 31 0.0039
bond_coeff @bond:ca-ca harmonic 478.4 1.3870 # SOURCE1 6228 0.0147
bond_coeff @bond:ca-cc harmonic 411.7 1.4340 # SOURCE1 80 0.0000
bond_coeff @bond:ca-cd harmonic 411.7 1.4340 # SOURCE1 80 0.0000
bond_coeff @bond:ca-ce harmonic 366.0 1.4720 # SOURCE1 71 0.0030
bond_coeff @bond:ca-cf harmonic 366.0 1.4720 # SOURCE1 71 0.0030
bond_coeff @bond:ca-cg harmonic 406.6 1.4380 # SOURCE1 71 0.0045
bond_coeff @bond:ca-ch harmonic 406.6 1.4380 # SOURCE1 71 0.0045
bond_coeff @bond:ca-cl harmonic 322.8 1.7290 # SOURCE1 704 0.0095
- bond_coeff @bond:ca-cp harmonic 466.1 1.3950 # SOURCE3 14 0.0110
- bond_coeff @bond:ca-cq harmonic 457.4 1.4009 # SOURCE4 14 0.0058
+ bond_coeff @bond:ca-cp harmonic 461.8 1.3980 # CORR 28
+ bond_coeff @bond:ca-cq harmonic 461.8 1.3980 # CORR 28
bond_coeff @bond:ca-cx harmonic 350.8 1.4860 # SOURCE1 98 0.0118
bond_coeff @bond:ca-cy harmonic 323.0 1.5135 # SOURCE4 8 0.0043
bond_coeff @bond:ca-f harmonic 363.8 1.3440 # SOURCE1 205 0.0089
bond_coeff @bond:ca-h4 harmonic 342.9 1.0880 # SOURCE3 57 0.0026
bond_coeff @bond:ca-h5 harmonic 347.2 1.0850 # SOURCE3 15 0.0048
bond_coeff @bond:ca-ha harmonic 344.3 1.0870 # SOURCE3 1496 0.0045
bond_coeff @bond:ca-i harmonic 252.4 2.0950 # SOURCE1 51 0.0000
bond_coeff @bond:ca-n1 harmonic 398.1 1.4000 # SOURCE3 0
bond_coeff @bond:ca-n2 harmonic 551.6 1.3030 # SOURCE4 7 0.0058
bond_coeff @bond:ca-n harmonic 372.3 1.4220 # SOURCE3 9 0.0098
bond_coeff @bond:ca-n4 harmonic 325.6 1.4650 # SOURCE1 23 0.0000
bond_coeff @bond:ca-na harmonic 470.3 1.3500 # SOURCE1 150 0.0103
bond_coeff @bond:ca-nb harmonic 483.1 1.3420 # SOURCE3 104 0.0076
bond_coeff @bond:ca-nc harmonic 492.9 1.3360 # SOURCE1 1826 0.0020
bond_coeff @bond:ca-nd harmonic 492.9 1.3360 # SOURCE1 1826 0.0020
bond_coeff @bond:ca-ne harmonic 361.8 1.4310 # SOURCE1 52 0.0000
bond_coeff @bond:ca-nf harmonic 361.8 1.4310 # SOURCE1 52 0.0000
bond_coeff @bond:ca-nh harmonic 449.0 1.3640 # SOURCE1 137 0.0085
bond_coeff @bond:ca-no harmonic 322.6 1.4680 # SOURCE1 556 0.0000
bond_coeff @bond:ca-o harmonic 610.0 1.2304 # SOURCE4 5 0.0026
bond_coeff @bond:ca-oh harmonic 386.1 1.3620 # SOURCE1 551 0.0000
bond_coeff @bond:ca-os harmonic 372.4 1.3730 # SOURCE1 1092 0.0071
bond_coeff @bond:ca-p2 harmonic 243.0 1.8400 # SOUECE3 1
bond_coeff @bond:ca-p3 harmonic 252.7 1.8240 # SOURCE1 145 0.0187
bond_coeff @bond:ca-p4 harmonic 264.3 1.8060 # SOUECE3 1
bond_coeff @bond:ca-p5 harmonic 271.6 1.7950 # SOURCE1 571 0.0028
bond_coeff @bond:ca-pe harmonic 249.6 1.8290 # SOURCE3 10 0.0042
bond_coeff @bond:ca-pf harmonic 249.6 1.8290 # SOURCE3 10 0.0042
bond_coeff @bond:ca-px harmonic 252.1 1.8250 # SOURCE3 5 0.0168
bond_coeff @bond:ca-py harmonic 268.3 1.7999 # SOURCE4 5 0.0072
bond_coeff @bond:ca-s harmonic 277.9 1.7390 # SOURCE3 2 0.0000
bond_coeff @bond:ca-s4 harmonic 245.2 1.7880 # SOURCE1 51 0.0048
bond_coeff @bond:ca-s6 harmonic 263.9 1.7590 # SOURCE1 229 0.0036
bond_coeff @bond:ca-sh harmonic 251.3 1.7783 # SOURCE4 12 0.0041
bond_coeff @bond:ca-ss harmonic 256.6 1.7700 # SOURCE1 297 0.0041
bond_coeff @bond:ca-sx harmonic 223.5 1.8252 # SOURCE4 24 0.0032
bond_coeff @bond:ca-sy harmonic 247.7 1.7840 # SOURCE3 13 0.0094
bond_coeff @bond:c-c1 harmonic 379.8 1.4600 # SOUECE3 1
bond_coeff @bond:c-c2 harmonic 449.9 1.4060 # SOURCE3 2 0.0370
bond_coeff @bond:c-c harmonic 290.1 1.5500 # SOURCE1 31 0.0100
bond_coeff @bond:c-c3 harmonic 328.3 1.5080 # SOURCE1 2949 0.0060
bond_coeff @bond:c-ca harmonic 349.7 1.4870 # SOURCE1 480 0.0055
bond_coeff @bond:c-cc harmonic 377.4 1.4620 # SOURCE3 132 0.0210
bond_coeff @bond:cc-cc harmonic 418.3 1.4290 # SOURCE1 740 0.0069
bond_coeff @bond:cc-cd harmonic 504.0 1.3710 # SOURCE3 523 0.0217
- bond_coeff @bond:cc-ce harmonic 391.4 1.4502 # SOURCE4 157 0.0098
- bond_coeff @bond:cc-cf harmonic 521.7 1.3605 # SOURCE4 27 0.0086
+ bond_coeff @bond:cc-ce harmonic 387.9 1.4532 # CORR 249
+ bond_coeff @bond:cc-cf harmonic 511.3 1.3666 # CORR 70
bond_coeff @bond:cc-cg harmonic 420.9 1.4270 # SOURCE1 560 0.0000
bond_coeff @bond:cc-ch harmonic 420.9 1.4270 # SOURCE1 560 0.0000
- bond_coeff @bond:cc-cl harmonic 317.1 1.7359 # SOURCE4 55 0.0078
- bond_coeff @bond:cc-cx harmonic 369.3 1.4691 # SOURCE4 18 0.0037
+ bond_coeff @bond:cc-cl harmonic 317.1 1.7359 # CORR 66
+ bond_coeff @bond:cc-cx harmonic 366.6 1.4715 # CORR 24
bond_coeff @bond:c-cd harmonic 377.4 1.4620 # SOURCE3 132 0.0210
bond_coeff @bond:c-ce harmonic 363.8 1.4740 # SOURCE1 601 0.0105
bond_coeff @bond:c-cf harmonic 363.8 1.4740 # SOURCE1 601 0.0105
bond_coeff @bond:cc-f harmonic 368.6 1.3401 # SOURCE4 24 0.0034
bond_coeff @bond:c-cg harmonic 389.3 1.4520 # SOURCE3 2 0.0000
bond_coeff @bond:c-ch harmonic 389.3 1.4520 # SOURCE3 2 same_as_c-cg
bond_coeff @bond:cc-h4 harmonic 350.1 1.0830 # SOURCE3 599 0.0037
bond_coeff @bond:cc-h5 harmonic 356.0 1.0790 # SOURCE3 40 0.0051
bond_coeff @bond:cc-ha harmonic 347.2 1.0850 # SOURCE3 740 0.0039
bond_coeff @bond:c-cl harmonic 293.5 1.7660 # SOURCE3 6 0.0250
- bond_coeff @bond:cc-n2 harmonic 572.5 1.2923 # SOURCE4 61 0.0067
+ bond_coeff @bond:cc-n2 harmonic 573.8 1.2917 # CORR 81
bond_coeff @bond:cc-n harmonic 426.0 1.3800 # SOURCE3 56 0.0109
bond_coeff @bond:cc-n4 harmonic 299.0 1.4930 # SOURCE4 7 0.0148
bond_coeff @bond:cc-na harmonic 438.8 1.3710 # SOURCE3 440 0.0144
bond_coeff @bond:cc-nc harmonic 431.6 1.3760 # SOURCE1 88 0.0000
bond_coeff @bond:cc-nd harmonic 494.6 1.3350 # SOURCE3 203 0.0239
bond_coeff @bond:cc-ne harmonic 427.4 1.3790 # SOURCE4 30 0.0126
- bond_coeff @bond:cc-nf harmonic 580.1 1.2885 # SOURCE4 10 0.0112
+ bond_coeff @bond:cc-nf harmonic 565.4 1.2960 # CORR 23
bond_coeff @bond:cc-nh harmonic 449.0 1.3640 # SOURCE3 6 0.0040
bond_coeff @bond:cc-no harmonic 367.4 1.4262 # SOURCE4 133 0.0061
- bond_coeff @bond:cc-oh harmonic 411.8 1.3427 # SOURCE4 64 0.0073
+ bond_coeff @bond:cc-oh harmonic 408.5 1.3451 # CORR 121
bond_coeff @bond:cc-os harmonic 376.1 1.3700 # SOURCE3 86 0.0192
bond_coeff @bond:cc-pd harmonic 318.2 1.7330 # SOURCE3 84 0.0161
bond_coeff @bond:cc-sh harmonic 257.9 1.7681 # SOURCE4 8 0.0027
bond_coeff @bond:cc-ss harmonic 279.3 1.7370 # SOURCE3 52 0.0194
bond_coeff @bond:cc-sx harmonic 231.3 1.8113 # SOURCE4 16 0.0050
- bond_coeff @bond:cc-sy harmonic 245.7 1.7872 # SOURCE4 33 0.0105
+ bond_coeff @bond:cc-sy harmonic 248.1 1.7834 # CORR 55
bond_coeff @bond:c-cu harmonic 441.4 1.4120 # SOURCE2 1 0.0000
bond_coeff @bond:c-cx harmonic 350.8 1.4860 # SOURCE1 105 0.0000
bond_coeff @bond:c-cy harmonic 308.5 1.5290 # SOURCE1 18 0.0000
bond_coeff @bond:cd-cd harmonic 418.3 1.4290 # SOURCE1 740 0.0069
- bond_coeff @bond:cd-ce harmonic 504.8 1.3705 # SOURCE4 43 0.0138
- bond_coeff @bond:cd-cf harmonic 381.8 1.4583 # SOURCE4 92 0.0079
+ bond_coeff @bond:cd-ce harmonic 511.3 1.3666 # CORR 70
+ bond_coeff @bond:cd-cf harmonic 387.9 1.4532 # CORR 249
bond_coeff @bond:cd-cg harmonic 420.9 1.4270 # SOURCE1 560 0.0000
bond_coeff @bond:cd-ch harmonic 420.9 1.4270 # SOURCE1 560 0.0000
- bond_coeff @bond:cd-cl harmonic 317.3 1.7356 # SOURCE4 11 0.0080
- bond_coeff @bond:cd-cx harmonic 358.6 1.4787 # SOURCE4 6 0.0029
+ bond_coeff @bond:cd-cl harmonic 317.1 1.7359 # CORR 66
+ bond_coeff @bond:cd-cx harmonic 366.6 1.4715 # CORR 24
bond_coeff @bond:cd-cy harmonic 330.9 1.5054 # SOURCE4 10 0.0008
bond_coeff @bond:cd-h4 harmonic 350.1 1.0830 # SOURCE3 599 0.0037
bond_coeff @bond:cd-h5 harmonic 356.0 1.0790 # SOURCE3 40 0.0051
bond_coeff @bond:cd-ha harmonic 347.2 1.0850 # SOURCE3 740 0.0039
- bond_coeff @bond:cd-n2 harmonic 577.7 1.2897 # SOURCE4 20 0.0086
+ bond_coeff @bond:cd-n2 harmonic 573.8 1.2917 # CORR 81
bond_coeff @bond:cd-n harmonic 426.0 1.3800 # SOURCE3 56 0.0109
bond_coeff @bond:cd-na harmonic 438.8 1.3710 # SOURCE3 440 0.0144
bond_coeff @bond:cd-nc harmonic 494.6 1.3350 # SOURCE3 203 0.0239
bond_coeff @bond:cd-nd harmonic 431.6 1.3760 # SOURCE1 88 0.0000
- bond_coeff @bond:cd-ne harmonic 554.1 1.3017 # SOURCE4 13 0.0118
+ bond_coeff @bond:cd-ne harmonic 565.4 1.2960 # CORR 23
bond_coeff @bond:cd-nh harmonic 449.0 1.3640 # SOURCE3 6 0.0040
- bond_coeff @bond:cd-oh harmonic 404.7 1.3479 # SOURCE4 57 0.0063
+ bond_coeff @bond:cd-oh harmonic 408.5 1.3451 # CORR 121
bond_coeff @bond:cd-os harmonic 376.1 1.3700 # SOURCE3 86 0.0192
bond_coeff @bond:cd-pc harmonic 318.2 1.7330 # SOURCE3 84 same_as_cc-pd
bond_coeff @bond:cd-ss harmonic 279.3 1.7370 # SOURCE3 52 0.0194
- bond_coeff @bond:cd-sy harmonic 251.7 1.7777 # SOURCE4 22 0.0034
+ bond_coeff @bond:cd-sy harmonic 248.1 1.7834 # CORR 55
bond_coeff @bond:ce-ce harmonic 390.5 1.4510 # SOURCE1 66 0.0060
bond_coeff @bond:ce-cf harmonic 562.4 1.3380 # SOURCE1 543 0.0045
bond_coeff @bond:ce-cg harmonic 415.6 1.4310 # SOURCE1 22 0.0000
bond_coeff @bond:ce-ch harmonic 415.6 1.4310 # SOURCE1 22 0.0000
bond_coeff @bond:ce-cl harmonic 292.6 1.7671 # SOURCE4 24 0.0062
bond_coeff @bond:ce-cx harmonic 337.0 1.4993 # SOURCE4 5 0.0066
bond_coeff @bond:ce-cy harmonic 323.0 1.5135 # SOURCE4 17 0.0024
- bond_coeff @bond:ce-h4 harmonic 337.8 1.0916 # SOURCE4 125 0.0033
+ bond_coeff @bond:ce-h4 harmonic 337.4 1.0919 # CORR 144
bond_coeff @bond:ce-ha harmonic 341.5 1.0890 # SOURCE3 55 0.0056
- bond_coeff @bond:ce-n1 harmonic 540.3 1.3090 # SOURCE4 10 0.0027
+ bond_coeff @bond:ce-n1 harmonic 536.1 1.3113 # CORR 13
bond_coeff @bond:ce-n2 harmonic 599.8 1.2790 # SOURCE1 75 0.0000
- bond_coeff @bond:ce-n harmonic 369.2 1.4246 # SOURCE4 130 0.0066
+ bond_coeff @bond:ce-n harmonic 368.9 1.4249 # CORR 136
bond_coeff @bond:ce-na harmonic 373.8 1.4207 # SOURCE4 5 0.0051
bond_coeff @bond:ce-ne harmonic 381.8 1.4140 # SOURCE3 7 0.0103
- bond_coeff @bond:ce-nf harmonic 571.9 1.2926 # SOURCE4 15 0.0042
- bond_coeff @bond:ce-nh harmonic 410.8 1.3912 # SOURCE4 148 0.0104
- bond_coeff @bond:ce-oh harmonic 395.9 1.3545 # SOURCE4 23 0.0100
- bond_coeff @bond:ce-os harmonic 370.6 1.3745 # SOURCE4 39 0.0077
+ bond_coeff @bond:ce-nf harmonic 574.0 1.2916 # CORR 42
+ bond_coeff @bond:ce-nh harmonic 412.3 1.3901 # CORR 168
+ bond_coeff @bond:ce-oh harmonic 402.9 1.3493 # CORR 37
+ bond_coeff @bond:ce-os harmonic 372.8 1.3727 # CORR 45
bond_coeff @bond:ce-p2 harmonic 259.1 1.8140 # SOUECE3 1
bond_coeff @bond:ce-pe harmonic 256.5 1.8180 # SOURCE3 8 0.0108
bond_coeff @bond:ce-px harmonic 254.6 1.8210 # SOURCE3 6 0.0046
bond_coeff @bond:ce-py harmonic 272.3 1.7940 # SOURCE3 5 0.0045
bond_coeff @bond:ce-s harmonic 324.5 1.6800 # SOUECE3 1
bond_coeff @bond:ce-ss harmonic 243.6 1.7906 # SOURCE4 10 0.0064
bond_coeff @bond:ce-sx harmonic 239.7 1.7970 # SOURCE3 5 0.0082
bond_coeff @bond:ce-sy harmonic 248.9 1.7820 # SOURCE3 5 0.0114
bond_coeff @bond:c-f harmonic 387.9 1.3250 # SOURCE2 6 0.0147
bond_coeff @bond:cf-cf harmonic 390.5 1.4510 # SOURCE1 66 0.0060
bond_coeff @bond:cf-cg harmonic 415.6 1.4310 # SOURCE1 22 0.0000
bond_coeff @bond:cf-ch harmonic 415.6 1.4310 # SOURCE1 22 0.0000
- bond_coeff @bond:cf-h4 harmonic 334.5 1.0940 # SOURCE4 19 0.0019
+ bond_coeff @bond:cf-h4 harmonic 337.4 1.0919 # CORR 144
bond_coeff @bond:cf-ha harmonic 341.5 1.0890 # SOURCE3 55 0.0056
- bond_coeff @bond:cf-n1 harmonic 522.2 1.3190 # SOURCE3 3 0.0121
+ bond_coeff @bond:cf-n1 harmonic 536.1 1.3113 # CORR 13
bond_coeff @bond:cf-n2 harmonic 599.8 1.2790 # SOURCE1 75 same_as_ce-n2
- bond_coeff @bond:cf-n harmonic 362.6 1.4303 # SOURCE4 6 0.0082
- bond_coeff @bond:cf-ne harmonic 575.1 1.2910 # SOURCE4 27 0.0083
+ bond_coeff @bond:cf-n harmonic 368.9 1.4249 # CORR 136
+ bond_coeff @bond:cf-ne harmonic 574.0 1.2916 # CORR 42
bond_coeff @bond:cf-nf harmonic 381.8 1.4140 # SOURCE3 7 same_as_ce-ne
- bond_coeff @bond:cf-nh harmonic 423.0 1.3822 # SOURCE4 20 0.0102
- bond_coeff @bond:cf-oh harmonic 414.4 1.3408 # SOURCE4 14 0.0084
- bond_coeff @bond:cf-os harmonic 387.2 1.3612 # SOURCE4 6 0.0111
+ bond_coeff @bond:cf-nh harmonic 412.3 1.3901 # CORR 168
+ bond_coeff @bond:cf-oh harmonic 402.9 1.3493 # CORR 37
+ bond_coeff @bond:cf-os harmonic 372.8 1.3727 # CORR 45
bond_coeff @bond:cf-p2 harmonic 259.1 1.8140 # SOUECE3 1 same_as_ce-p2
bond_coeff @bond:cf-pf harmonic 256.5 1.8180 # SOURCE3 8 same_as_ce-pe
bond_coeff @bond:cf-px harmonic 254.6 1.8210 # SOURCE3 6 same_as_ce-px
bond_coeff @bond:cf-py harmonic 272.3 1.7940 # SOURCE3 5 same_as_ce-py
bond_coeff @bond:cf-s harmonic 324.5 1.6800 # SOUECE3 1 same_as_ce-s
bond_coeff @bond:cf-sx harmonic 239.7 1.7970 # SOURCE3 5 same_as_ce-sx
bond_coeff @bond:cf-sy harmonic 248.9 1.7820 # SOURCE3 5 same_as_ce-sy
bond_coeff @bond:cg-cg harmonic 494.2 1.3770 # SOURCE1 42 0.0000
bond_coeff @bond:cg-ch harmonic 949.5 1.1910 # SOURCE1 80 0.0015
bond_coeff @bond:cg-n1 harmonic 994.7 1.1430 # SOURCE1 316 0.0018
bond_coeff @bond:cg-ne harmonic 509.5 1.3262 # SOURCE4 17 0.0009
bond_coeff @bond:cg-pe harmonic 429.8 1.6210 # SOURCE3 11 0.2008
bond_coeff @bond:c-h4 harmonic 310.5 1.1123 # SOURCE4 125 0.0023
bond_coeff @bond:c-h5 harmonic 319.4 1.1053 # SOURCE4 42 0.0028
bond_coeff @bond:c-ha harmonic 325.1 1.1010 # SOURCE3 53 0.0102
bond_coeff @bond:ch-ch harmonic 494.2 1.3770 # SOURCE1 42 0.0000
bond_coeff @bond:ch-n1 harmonic 994.7 1.1430 # SOURCE1 316 0.0018
bond_coeff @bond:ch-nf harmonic 509.5 1.3262 # SOURCE4 17 same_as_cg-ne
bond_coeff @bond:ch-pf harmonic 429.8 1.6210 # SOURCE3 11 same_as_cg-pe
bond_coeff @bond:c-i harmonic 198.9 2.2090 # SOURCE3 4 0.0365
bond_coeff @bond:cl-cl harmonic 143.3 2.2670 # SOURCE1 2 0.0395
bond_coeff @bond:cl-cx harmonic 301.8 1.7550 # SOURCE1 64 0.0000
bond_coeff @bond:cl-cy harmonic 292.0 1.7680 # SOURCE2 2 0.0070
bond_coeff @bond:cl-f harmonic 298.6 1.6480 # SOURCE2 2 0.0500
bond_coeff @bond:cl-i harmonic 163.5 2.5500 # SOURCE1 6 0.0893
bond_coeff @bond:cl-n1 harmonic 431.6 1.6300 # SOUECE3 1
bond_coeff @bond:cl-n2 harmonic 263.4 1.8190 # SOURCE3 6 0.1020
bond_coeff @bond:cl-n3 harmonic 290.4 1.7800 # SOURCE4 5 0.0021
bond_coeff @bond:cl-n harmonic 344.2 1.7140 # SOURCE4 5 0.0005
bond_coeff @bond:cl-n4 harmonic 311.1 1.7530 # SOURCE3 4 0.0098
bond_coeff @bond:cl-na harmonic 253.2 1.8350 # SOURCE3 7 0.2083
bond_coeff @bond:cl-nh harmonic 303.2 1.7630 # SOURCE3 1 0.0000
bond_coeff @bond:cl-no harmonic 250.1 1.8400 # SOURCE2 1 0.0000
bond_coeff @bond:cl-o harmonic 557.6 1.4830 # SOURCE3 4 0.0000
bond_coeff @bond:cl-oh harmonic 309.7 1.6900 # SOURCE2 1 0.0000
bond_coeff @bond:cl-os harmonic 278.8 1.7300 # SOURCE3 4 0.0000
bond_coeff @bond:cl-p2 harmonic 217.5 2.0700 # SOURCE3 6 0.0108
bond_coeff @bond:cl-p3 harmonic 249.4 2.0080 # SOURCE1 111 0.0000
bond_coeff @bond:cl-p4 harmonic 249.4 2.0080 # SOURCE1 111 0.0000
bond_coeff @bond:cl-p5 harmonic 249.4 2.0080 # SOURCE1 111 0.0000
bond_coeff @bond:cl-pb harmonic 255.6 1.9970 # SOURCE1 46 0.0000
bond_coeff @bond:cl-s harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:cl-s2 harmonic 172.7 2.1610 # SOURCE2 1 0.0000
bond_coeff @bond:cl-s4 harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:cl-s6 harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:cl-sh harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:cl-ss harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:cl-sx harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:cl-sy harmonic 208.7 2.0720 # SOURCE1 6 0.0000
bond_coeff @bond:c-n2 harmonic 374.6 1.4200 # SOUECE3 1
bond_coeff @bond:c-n4 harmonic 255.5 1.5460 # SOURCE3 4 0.0388
bond_coeff @bond:c-n harmonic 478.2 1.3450 # SOURCE1 1235 0.0215
- bond_coeff @bond:c-nc harmonic 428.3 1.3784 # SOURCE4 70 0.0128
- bond_coeff @bond:c-nd harmonic 391.2 1.4064 # SOURCE4 54 0.0130
- bond_coeff @bond:c-ne harmonic 408.6 1.3929 # SOURCE4 47 0.0136
- bond_coeff @bond:c-nf harmonic 404.8 1.3958 # SOURCE4 5 0.0122
+ bond_coeff @bond:c-nc harmonic 412.1 1.3906 # CORR 124
+ bond_coeff @bond:c-nd harmonic 412.1 1.3906 # CORR 124
+ bond_coeff @bond:c-ne harmonic 408.2 1.3932 # CORR 52
+ bond_coeff @bond:c-nf harmonic 408.2 1.3932 # CORR 52
bond_coeff @bond:c-no harmonic 260.1 1.5400 # SOUECE3 1
bond_coeff @bond:c-o harmonic 648.0 1.2140 # SOURCE1 3682 0.0165
bond_coeff @bond:c-oh harmonic 466.4 1.3060 # SOURCE1 271 0.0041
bond_coeff @bond:c-os harmonic 411.3 1.3430 # SOURCE1 1044 0.0171
bond_coeff @bond:c-p2 harmonic 210.3 1.9000 # SOUECE3 1
bond_coeff @bond:c-p3 harmonic 219.0 1.8830 # SOURCE3 6 0.0129
bond_coeff @bond:c-p4 harmonic 220.6 1.8800 # SOUECE3 1
bond_coeff @bond:c-p5 harmonic 219.8 1.8815 # SOURCE4 11 0.0078
bond_coeff @bond:cp-cp harmonic 346.5 1.4900 # SOURCE1 242 0.0010
bond_coeff @bond:cp-cq harmonic 419.3 1.4282 # SOURCE4 7 0.0034
bond_coeff @bond:c-pe harmonic 204.9 1.9110 # SOURCE3 3 0.0025
bond_coeff @bond:c-pf harmonic 204.9 1.9110 # SOURCE3 3 same_as_c-pe
bond_coeff @bond:cp-na harmonic 420.5 1.3840 # SOURCE4 7 0.0181
bond_coeff @bond:cp-nb harmonic 486.7 1.3398 # SOURCE4 70 0.0062
bond_coeff @bond:c-px harmonic 208.3 1.9040 # SOURCE3 1 0.0000
bond_coeff @bond:c-py harmonic 227.6 1.8670 # SOURCE3 6 0.0199
bond_coeff @bond:cq-cq harmonic 346.5 1.4900 # SOURCE1 242 0.0010
bond_coeff @bond:c-s harmonic 328.9 1.6750 # SOURCE1 401 0.0128
bond_coeff @bond:c-s4 harmonic 200.4 1.8700 # SOUECE3 1
bond_coeff @bond:c-s6 harmonic 200.4 1.8700 # SOUECE3 1
bond_coeff @bond:c-sh harmonic 249.6 1.7810 # SOURCE3 6 0.0171
bond_coeff @bond:c-ss harmonic 261.9 1.7620 # SOURCE1 20 0.0000
bond_coeff @bond:c-sx harmonic 193.3 1.8850 # SOURCE3 5 0.0088
bond_coeff @bond:c-sy harmonic 202.8 1.8650 # SOURCE3 5 0.0085
bond_coeff @bond:cu-cu harmonic 653.7 1.2940 # SOURCE1 10 0.0000
bond_coeff @bond:cu-cx harmonic 327.3 1.5090 # SOURCE1 20 0.0000
bond_coeff @bond:cu-ha harmonic 353.0 1.0810 # SOURCE2 3 0.0111
bond_coeff @bond:cv-cv harmonic 568.1 1.3350 # SOURCE1 25 0.0000
bond_coeff @bond:cv-cy harmonic 323.5 1.5130 # SOURCE1 50 0.0000
bond_coeff @bond:cv-ha harmonic 344.3 1.0870 # SOURCE3 2 0.0000
bond_coeff @bond:cx-cv harmonic 328.3 1.5080 # SOURCE1 2536 as
bond_coeff @bond:cx-cx harmonic 337.3 1.4990 # SOURCE1 1204 0.0183
bond_coeff @bond:cx-cy harmonic 321.5 1.5150 # SOURCE3 2 0.0000
bond_coeff @bond:cx-f harmonic 347.2 1.3580 # SOURCE2 3 0.0050
bond_coeff @bond:cx-h1 harmonic 344.3 1.0870 # SOURCE3 10 0.0017
bond_coeff @bond:cx-h2 harmonic 350.1 1.0830 # SOURCE3 2 0.0000
bond_coeff @bond:cx-hc harmonic 345.8 1.0860 # SOURCE3 44 0.0011
bond_coeff @bond:cx-hx harmonic 347.2 1.0850 # SOURCE4 5 0.0002
bond_coeff @bond:cx-n2 harmonic 309.1 1.4820 # SOURCE3 2 0.0000
bond_coeff @bond:cx-n3 harmonic 318.7 1.4720 # SOURCE1 134 0.0000
bond_coeff @bond:cx-n harmonic 350.6 1.4411 # SOURCE4 11 0.0092
bond_coeff @bond:cx-na harmonic 329.0 1.4616 # SOURCE4 11 0.0016
bond_coeff @bond:cx-nh harmonic 336.7 1.4541 # SOURCE4 83 0.0076
bond_coeff @bond:cx-oh harmonic 387.4 1.3610 # SOURCE3 3 0.0018
bond_coeff @bond:cx-os harmonic 320.1 1.4200 # SOURCE3 7 0.0222
bond_coeff @bond:cx-p3 harmonic 227.6 1.8670 # SOURCE2 1 0.0000
bond_coeff @bond:cx-s4 harmonic 225.3 1.8220 # SOURCE2 1 0.0000
bond_coeff @bond:cx-s6 harmonic 283.7 1.7310 # SOURCE2 1 0.0000
bond_coeff @bond:cx-ss harmonic 229.2 1.8150 # SOURCE2 1 0.0000
bond_coeff @bond:cy-cy harmonic 286.8 1.5540 # SOURCE1 742 0.0041
bond_coeff @bond:cy-f harmonic 355.5 1.3509 # SOURCE4 8 0.0047
bond_coeff @bond:cy-h1 harmonic 330.4 1.0970 # SOURCE3 17 0.0058
bond_coeff @bond:cy-h2 harmonic 335.8 1.0931 # SOURCE4 80 0.0019
bond_coeff @bond:cy-hc harmonic 334.5 1.0940 # SOURCE3 63 0.0014
bond_coeff @bond:cy-n harmonic 321.3 1.4693 # SOURCE4 250 0.0102
bond_coeff @bond:cy-n3 harmonic 307.2 1.4840 # SOURCE1 21 0.0000
bond_coeff @bond:cy-oh harmonic 325.2 1.4150 # SOURCE3 2 0.0000
bond_coeff @bond:cy-os harmonic 308.6 1.4316 # SOURCE4 23 0.0136
bond_coeff @bond:cy-s6 harmonic 209.6 1.8514 # SOURCE4 9 0.0166
bond_coeff @bond:cy-ss harmonic 211.3 1.8481 # SOURCE4 78 0.0080
bond_coeff @bond:cz-nh harmonic 487.8 1.3391 # SOURCE4 32 0.0045
bond_coeff @bond:f-n1 harmonic 375.7 1.4100 # SOUECE3 1
bond_coeff @bond:f-n2 harmonic 337.5 1.4440 # SOURCE3 5 0.0377
bond_coeff @bond:f-n3 harmonic 380.6 1.4060 # SOURCE1 9 0.0000
bond_coeff @bond:f-n harmonic 391.7 1.3970 # SOURCE3 3 0.0112
bond_coeff @bond:f-n4 harmonic 526.8 1.3080 # SOURCE3 2 0.0000
bond_coeff @bond:f-na harmonic 374.5 1.4110 # SOURCE3 7 0.0611
bond_coeff @bond:f-nh harmonic 357.1 1.4260 # SOURCE3 3 0.0085
bond_coeff @bond:f-no harmonic 314.4 1.4670 # SOURCE2 1 0.0000
bond_coeff @bond:f-o harmonic 442.2 1.3300 # SOUECE3 1
bond_coeff @bond:f-oh harmonic 305.4 1.4440 # SOURCE3 1 0.0000
bond_coeff @bond:f-os harmonic 326.2 1.4230 # SOURCE3 2 0.0000
bond_coeff @bond:f-p2 harmonic 287.3 1.5360 # SOURCE3 7 0.2054
bond_coeff @bond:f-p3 harmonic 254.5 1.5780 # SOURCE2 8 0.0103
bond_coeff @bond:f-p4 harmonic 246.0 1.5900 # SOUECE3 1
bond_coeff @bond:f-p5 harmonic 253.8 1.5790 # SOURCE1 72 0.0000
bond_coeff @bond:f-s2 harmonic 244.4 1.6430 # SOURCE2 1 0.0000
bond_coeff @bond:f-s harmonic 233.3 1.6600 # SOUECE3 1
bond_coeff @bond:f-s4 harmonic 282.4 1.5910 # SOURCE2 4 0.0065
bond_coeff @bond:f-s6 harmonic 312.1 1.5560 # SOURCE2 5 0.0220
bond_coeff @bond:f-sh harmonic 240.4 1.6490 # SOURCE3 1 0.0000
bond_coeff @bond:f-ss harmonic 250.5 1.6340 # SOURCE3 3 0.0156
bond_coeff @bond:hn-n1 harmonic 455.1 0.9860 # SOURCE2 1 0.0000
bond_coeff @bond:hn-n2 harmonic 375.5 1.0290 # SOURCE3 108 0.0096
bond_coeff @bond:hn-n3 harmonic 394.1 1.0180 # SOURCE3 157 0.0086
bond_coeff @bond:hn-n harmonic 410.2 1.0090 # SOURCE3 149 0.0098
bond_coeff @bond:hn-n4 harmonic 369.0 1.0330 # SOURCE3 264 0.0082
bond_coeff @bond:hn-na harmonic 406.6 1.0110 # SOURCE3 46 0.0107
bond_coeff @bond:hn-nh harmonic 401.2 1.0140 # SOURCE3 209 0.0091
bond_coeff @bond:hn-no harmonic 385.6 1.0230 # SOURCE3 1 0.0000
bond_coeff @bond:ho-o harmonic 357.9 0.9810 # SOURCE3 1 0.0000
bond_coeff @bond:ho-oh harmonic 369.6 0.9740 # SOURCE3 367 0.0105
bond_coeff @bond:hp-p2 harmonic 385.1 1.3360 # SOURCE3 87 0.1706
bond_coeff @bond:hp-p3 harmonic 303.1 1.4090 # SOURCE3 101 0.0617
bond_coeff @bond:hp-p4 harmonic 368.7 1.3490 # SOURCE3 17 0.1577
bond_coeff @bond:hp-p5 harmonic 305.0 1.4070 # SOURCE3 7 0.0062
bond_coeff @bond:hs-s harmonic 286.4 1.3530 # SOURCE3 1 0.0000
bond_coeff @bond:hs-s4 harmonic 266.4 1.3750 # SOURCE3 5 0.0004
bond_coeff @bond:hs-s6 harmonic 280.8 1.3590 # SOURCE3 5 0.0015
bond_coeff @bond:hs-sh harmonic 302.2 1.3370 # SOURCE3 98 0.0486
bond_coeff @bond:i-i harmonic 109.2 2.9170 # SOURCE1 1 0.0000
bond_coeff @bond:i-n1 harmonic 302.1 2.0600 # SOUECE3 1
bond_coeff @bond:i-n2 harmonic 182.6 2.3040 # SOURCE3 6 0.1186
bond_coeff @bond:i-n harmonic 278.3 2.0980 # SOURCE3 5 0.0156
bond_coeff @bond:i-n3 harmonic 231.8 2.1850 # SOURCE3 3 0.0437
bond_coeff @bond:i-n4 harmonic 246.6 2.1550 # SOURCE3 3 0.0168
bond_coeff @bond:i-na harmonic 260.5 2.1290 # SOURCE3 8 0.1276
bond_coeff @bond:i-nh harmonic 249.2 2.1500 # SOURCE3 1 0.0000
bond_coeff @bond:i-no harmonic 211.0 2.2310 # SOURCE3 1 0.0000
bond_coeff @bond:i-o harmonic 323.8 1.9800 # SOUECE3 1
bond_coeff @bond:i-oh harmonic 247.9 2.1010 # SOURCE3 2 0.0000
bond_coeff @bond:i-os harmonic 233.6 2.1290 # SOURCE3 3 0.0146
bond_coeff @bond:i-p2 harmonic 108.2 2.6430 # SOURCE3 6 0.0297
bond_coeff @bond:i-p3 harmonic 123.6 2.5660 # SOURCE3 3 0.0016
bond_coeff @bond:i-p4 harmonic 183.0 2.3520 # SOURCE3 4 0.2600
bond_coeff @bond:i-p5 harmonic 117.3 2.5960 # SOURCE3 3 0.0143
bond_coeff @bond:i-s harmonic 175.1 2.4300 # SOUECE3 1
bond_coeff @bond:i-s4 harmonic 82.8 2.8700 # SOUECE3 1
bond_coeff @bond:i-s6 harmonic 82.8 2.8700 # SOURCE3 1 0.0000
bond_coeff @bond:i-sh harmonic 138.5 2.5600 # SOUECE3 1
bond_coeff @bond:i-ss harmonic 135.9 2.5710 # SOURCE3 3 0.0065
bond_coeff @bond:n1-n1 harmonic 1221.7 1.1240 # SOURCE1 19 0.0000
bond_coeff @bond:n1-n2 harmonic 857.4 1.2160 # SOURCE1 19 0.0000
bond_coeff @bond:n1-n3 harmonic 535.7 1.3500 # SOUECE3 1
bond_coeff @bond:n1-n4 harmonic 518.2 1.3600 # SOUECE3 1
bond_coeff @bond:n1-na harmonic 535.7 1.3500 # SOUECE3 1
bond_coeff @bond:n1-nc harmonic 857.4 1.2160 # SOURCE1 38 0.0000
bond_coeff @bond:n1-nd harmonic 857.4 1.2160 # SOURCE1 38 0.0000
bond_coeff @bond:n1-ne harmonic 751.9 1.2520 # SOURCE2 1 0.0000
bond_coeff @bond:n1-nf harmonic 751.9 1.2520 # SOURCE2 1 same_as_n1-ne
bond_coeff @bond:n1-nh harmonic 553.9 1.3400 # SOUECE3 1
bond_coeff @bond:n1-no harmonic 454.8 1.4000 # SOUECE3 1
bond_coeff @bond:n1-o harmonic 617.5 1.2770 # SOURCE3 5 0.0438
bond_coeff @bond:n1-oh harmonic 569.8 1.3000 # SOUECE3 1
bond_coeff @bond:n1-os harmonic 550.5 1.3100 # SOUECE3 1
bond_coeff @bond:n1-p2 harmonic 358.8 1.6780 # SOURCE3 2 0.0282
bond_coeff @bond:n1-p3 harmonic 376.7 1.6600 # SOUECE3 1
bond_coeff @bond:n1-p4 harmonic 353.0 1.6800 # SOURCE3 0
bond_coeff @bond:n1-p5 harmonic 482.7 1.5710 # SOURCE1 132 0.0000
bond_coeff @bond:n1-s2 harmonic 604.3 1.4490 # SOURCE2 2 0.0010
bond_coeff @bond:n1-s harmonic 328.7 1.6590 # SOURCE3 6 0.0789
bond_coeff @bond:n1-s4 harmonic 336.8 1.6500 # SOUECE3 1
bond_coeff @bond:n1-s6 harmonic 670.3 1.4160 # SOURCE2 2 0.0000
bond_coeff @bond:n1-sh harmonic 376.1 1.6100 # SOUECE3 1
bond_coeff @bond:n1-ss harmonic 376.1 1.6100 # SOUECE3 1
bond_coeff @bond:n2-n2 harmonic 702.7 1.2710 # SOURCE3 27 0.0347
bond_coeff @bond:n2-n3 harmonic 574.8 1.3290 # SOURCE2 1 0.0000
bond_coeff @bond:n2-n4 harmonic 200.8 1.6790 # SOURCE3 7 0.3138
bond_coeff @bond:n2-na harmonic 503.9 1.3685 # SOURCE4 18 0.0066
bond_coeff @bond:n2-nc harmonic 743.9 1.2550 # SOURCE1 13 0.0000
bond_coeff @bond:n2-nd harmonic 743.9 1.2550 # SOURCE1 13 same_as_n2_nc
bond_coeff @bond:n2-ne harmonic 685.5 1.2780 # SOURCE3 30 0.0302
bond_coeff @bond:n2-nf harmonic 685.5 1.2780 # SOURCE3 30 same_as_n2-ne
bond_coeff @bond:n2-nh harmonic 525.1 1.3560 # SOURCE3 22 0.0300
bond_coeff @bond:n2-no harmonic 231.9 1.6260 # SOURCE3 4 0.1933
bond_coeff @bond:n2-o harmonic 789.9 1.2090 # SOURCE3 20 0.0344
bond_coeff @bond:n2-oh harmonic 416.2 1.3940 # SOURCE1 67 0.0000
bond_coeff @bond:n2-os harmonic 400.5 1.4060 # SOURCE3 10 0.0147
bond_coeff @bond:n2-p2 harmonic 438.3 1.6050 # SOURCE3 35 0.0737
bond_coeff @bond:n2-p3 harmonic 286.5 1.7640 # SOURCE3 7 0.0374
bond_coeff @bond:n2-p4 harmonic 317.7 1.7240 # SOUECE3 1
bond_coeff @bond:n2-p5 harmonic 445.8 1.5990 # SOURCE1 7 0.0000
bond_coeff @bond:n2-pe harmonic 527.9 1.5400 # SOURCE3 20 0.1392
bond_coeff @bond:n2-pf harmonic 527.9 1.5400 # SOURCE3 20 same_as_n2-pe
bond_coeff @bond:n2-s2 harmonic 499.0 1.5120 # SOURCE2 1 0.0000
bond_coeff @bond:n2-s4 harmonic 376.1 1.6100 # SOUECE3 1
bond_coeff @bond:n2-s harmonic 458.1 1.5410 # SOURCE1 37 0.0000
bond_coeff @bond:n2-s6 harmonic 444.6 1.5513 # SOURCE4 5 0.0011
bond_coeff @bond:n2-sh harmonic 266.6 1.7380 # SOURCE3 5 0.0511
bond_coeff @bond:n2-ss harmonic 331.4 1.6560 # SOURCE1 36 0.0000
bond_coeff @bond:n3-n3 harmonic 383.6 1.4540 # SOURCE1 44 0.0000
bond_coeff @bond:n3-n4 harmonic 434.9 1.4140 # SOURCE1 13 0.0000
bond_coeff @bond:n3-na harmonic 426.7 1.4200 # SOURCE1 68 0.0000
bond_coeff @bond:n3-nh harmonic 426.7 1.4200 # SOURCE1 68 0.0000
bond_coeff @bond:n3-no harmonic 394.5 1.4450 # SOURCE3 3 0.0208
bond_coeff @bond:n3-o harmonic 564.0 1.3030 # SOURCE3 4 0.1217
bond_coeff @bond:n3-oh harmonic 413.5 1.3960 # SOURCE1 28 0.0000
bond_coeff @bond:n3-os harmonic 359.6 1.4400 # SOURCE1 34 0.0315
bond_coeff @bond:n3-p2 harmonic 366.6 1.6700 # SOUECE3 1
bond_coeff @bond:n3-p3 harmonic 312.8 1.7300 # SOURCE1 40 0.0000
bond_coeff @bond:n3-p4 harmonic 341.1 1.6970 # SOURCE1 88 0.0000
bond_coeff @bond:n3-p5 harmonic 373.6 1.6630 # SOURCE1 501 0.0086
bond_coeff @bond:n3-py harmonic 338.1 1.7003 # SOURCE4 6 0.0044
bond_coeff @bond:n3-s harmonic 232.3 1.7920 # SOURCE3 3 0.0178
bond_coeff @bond:n3-s4 harmonic 251.3 1.7610 # SOURCE3 6 0.0766
bond_coeff @bond:n3-s6 harmonic 353.8 1.6320 # SOURCE1 99 0.0136
bond_coeff @bond:n3-sh harmonic 265.9 1.7390 # SOURCE3 3 0.0154
bond_coeff @bond:n3-ss harmonic 277.9 1.7220 # SOURCE3 5 0.0207
bond_coeff @bond:n3-sy harmonic 297.3 1.6964 # SOURCE4 226 0.0081
bond_coeff @bond:n4-n4 harmonic 349.9 1.4840 # SOURCE3 4 0.0089
bond_coeff @bond:n4-na harmonic 407.0 1.4350 # SOURCE3 9 0.0390
bond_coeff @bond:n4-nh harmonic 369.7 1.4660 # SOURCE3 5 0.0108
bond_coeff @bond:n4-no harmonic 354.2 1.4800 # SOUECE3 1
bond_coeff @bond:n4-o harmonic 463.6 1.3610 # SOURCE3 3 0.0041
bond_coeff @bond:n4-oh harmonic 408.2 1.4000 # SOURCE3 3 0.0115
bond_coeff @bond:n4-os harmonic 381.8 1.4210 # SOURCE3 5 0.0249
bond_coeff @bond:n4-p2 harmonic 185.9 1.9420 # SOURCE3 10 0.0643
bond_coeff @bond:n4-p3 harmonic 215.1 1.8800 # SOURCE3 5 0.0146
bond_coeff @bond:n4-p4 harmonic 187.6 1.9380 # SOURCE3 1 0.0000
bond_coeff @bond:n4-p5 harmonic 242.9 1.8300 # SOURCE3 5 0.0087
bond_coeff @bond:n4-py harmonic 204.2 1.9020 # SOURCE3 4 0.0000
bond_coeff @bond:n4-s harmonic 210.3 1.8320 # SOURCE3 3 0.0004
bond_coeff @bond:n4-s4 harmonic 151.0 1.9720 # SOURCE3 3 0.0198
bond_coeff @bond:n4-s6 harmonic 172.7 1.9140 # SOURCE3 5 0.0432
bond_coeff @bond:n4-sh harmonic 221.5 1.8110 # SOURCE3 3 0.0027
bond_coeff @bond:n4-ss harmonic 221.0 1.8120 # SOURCE3 5 0.0064
bond_coeff @bond:na-na harmonic 453.3 1.4010 # SOURCE1 40 0.0000
bond_coeff @bond:na-nb harmonic 546.5 1.3440 # SOURCE4 5 0.0070
bond_coeff @bond:na-nc harmonic 535.7 1.3500 # SOURCE3 152 0.0180
bond_coeff @bond:na-nd harmonic 535.7 1.3500 # SOURCE3 152 0.0180
bond_coeff @bond:na-nh harmonic 453.3 1.4010 # SOURCE1 40 0.0000
bond_coeff @bond:na-no harmonic 401.9 1.4390 # SOURCE3 9 0.0289
bond_coeff @bond:na-o harmonic 644.3 1.2650 # SOURCE1 25 0.0347
bond_coeff @bond:na-oh harmonic 412.2 1.3970 # SOURCE3 9 0.0217
bond_coeff @bond:na-os harmonic 355.2 1.4440 # SOURCE3 45 0.0423
bond_coeff @bond:na-p2 harmonic 297.8 1.7490 # SOURCE3 11 0.0192
bond_coeff @bond:na-p3 harmonic 288.0 1.7620 # SOURCE3 8 0.0113
bond_coeff @bond:na-p4 harmonic 492.4 1.5640 # SOURCE3 5 0.2161
bond_coeff @bond:na-p5 harmonic 325.3 1.7150 # SOURCE3 11 0.0238
bond_coeff @bond:na-pc harmonic 311.1 1.7320 # SOURCE3 81 0.0207
bond_coeff @bond:na-pd harmonic 311.1 1.7320 # SOURCE3 81 same_as_na-pc
bond_coeff @bond:na-py harmonic 327.8 1.7120 # SOURCE3 2 0.0000
bond_coeff @bond:na-s harmonic 248.7 1.7650 # SOURCE3 8 0.0095
bond_coeff @bond:na-s4 harmonic 231.7 1.7930 # SOURCE3 10 0.0421
bond_coeff @bond:na-s6 harmonic 274.3 1.7270 # SOURCE3 10 0.0201
bond_coeff @bond:na-sh harmonic 278.6 1.7210 # SOURCE3 9 0.0113
bond_coeff @bond:na-ss harmonic 270.1 1.7330 # SOURCE3 38 0.0412
bond_coeff @bond:na-sy harmonic 274.3 1.7270 # SOURCE3 1
bond_coeff @bond:nb-nb harmonic 550.2 1.3420 # SOURCE1 15 0.0314
bond_coeff @bond:nb-pb harmonic 461.1 1.5870 # SOURCE1 162 0.0091
bond_coeff @bond:nc-nc harmonic 486.8 1.3790 # SOURCE3 9 0.0164
bond_coeff @bond:nc-nd harmonic 602.9 1.3150 # SOURCE3 9 0.0221
bond_coeff @bond:nc-os harmonic 414.9 1.3950 # SOURCE1 46 0.0188
bond_coeff @bond:nc-ss harmonic 433.5 1.5600 # SOURCE1 74 0.0000
bond_coeff @bond:nc-sy harmonic 439.8 1.5550 # SOURCE3 2
bond_coeff @bond:nd-nd harmonic 486.8 1.3790 # SOURCE3 9 0.0164
bond_coeff @bond:nd-os harmonic 414.9 1.3950 # SOURCE1 46 0.0188
bond_coeff @bond:nd-ss harmonic 433.5 1.5600 # SOURCE1 74 0.0000
bond_coeff @bond:nd-sy harmonic 439.8 1.5550 # SOURCE3 2
bond_coeff @bond:ne-ne harmonic 355.3 1.4790 # SOURCE3 19 0.1705
bond_coeff @bond:ne-nf harmonic 721.6 1.2635 # SOURCE4 25 0.0034
bond_coeff @bond:ne-o harmonic 736.4 1.2280 # SOURCE3 40 0.0255
bond_coeff @bond:ne-p2 harmonic 493.9 1.5630 # SOURCE3 14 0.1325
bond_coeff @bond:ne-pe harmonic 327.8 1.7120 # SOURCE3 28 0.1076
bond_coeff @bond:ne-px harmonic 336.6 1.7020 # SOURCE3 11 0.0883
bond_coeff @bond:ne-py harmonic 425.4 1.6157 # SOURCE4 10 0.0094
bond_coeff @bond:ne-s harmonic 463.5 1.5370 # SOURCE3 22 0.1708
bond_coeff @bond:ne-sx harmonic 207.3 1.8380 # SOURCE3 7 0.1060
bond_coeff @bond:ne-sy harmonic 257.1 1.7520 # SOURCE3 7 0.0814
bond_coeff @bond:nf-nf harmonic 355.3 1.4790 # SOURCE3 19 same_as_ne-ne
bond_coeff @bond:nf-o harmonic 736.4 1.2280 # SOURCE3 40 same_as_ne-o
bond_coeff @bond:nf-p2 harmonic 493.9 1.5630 # SOURCE3 14 same_as_ne-p2
bond_coeff @bond:nf-pf harmonic 327.8 1.7120 # SOURCE3 28 same_as_ne-pe
bond_coeff @bond:nf-px harmonic 336.6 1.7020 # SOURCE3 11 same_as_ne-px
bond_coeff @bond:nf-py harmonic 425.4 1.6157 # SOURCE4 10 same_as_ne-py
bond_coeff @bond:nf-s harmonic 463.5 1.5370 # SOURCE3 22 same_as_ne-s
bond_coeff @bond:nf-sx harmonic 207.3 1.8380 # SOURCE3 7 same_as_ne-sx
bond_coeff @bond:nf-sy harmonic 257.1 1.7520 # SOURCE3 7 same_as_ne-sy
bond_coeff @bond:nh-nh harmonic 453.3 1.4010 # SOURCE1 40 0.0000
bond_coeff @bond:nh-no harmonic 477.4 1.3850 # SOURCE4 7 0.0036
bond_coeff @bond:nh-o harmonic 596.2 1.2870 # SOURCE3 3 0.0450
bond_coeff @bond:nh-oh harmonic 389.9 1.4144 # SOURCE4 19 0.0064
bond_coeff @bond:nh-os harmonic 387.8 1.4161 # SOURCE4 6 0.0039
bond_coeff @bond:nh-p2 harmonic 357.8 1.6790 # SOURCE3 17 0.0872
bond_coeff @bond:nh-p3 harmonic 312.8 1.7300 # SOURCE3 3 0.0016
bond_coeff @bond:nh-p4 harmonic 333.1 1.7060 # SOURCE3 3 0.0008
bond_coeff @bond:nh-p5 harmonic 365.6 1.6710 # SOURCE3 3 0.0007
bond_coeff @bond:nh-s harmonic 237.0 1.7840 # SOURCE3 3 0.0076
bond_coeff @bond:nh-s4 harmonic 259.1 1.7490 # SOURCE3 3 0.0203
bond_coeff @bond:nh-s6 harmonic 297.2 1.6965 # SOURCE4 33 0.0062
bond_coeff @bond:nh-sh harmonic 288.3 1.7080 # SOURCE3 1 0.0000
bond_coeff @bond:nh-ss harmonic 288.3 1.7080 # SOURCE1 52 0.0015
bond_coeff @bond:nh-sy harmonic 283.5 1.7144 # SOURCE4 80 0.0066
bond_coeff @bond:n-n1 harmonic 553.9 1.3400 # SOUECE3 1
bond_coeff @bond:n-n2 harmonic 499.7 1.3710 # SOURCE3 9 0.0200
bond_coeff @bond:n-n3 harmonic 443.3 1.4080 # SOURCE3 5 0.0087
bond_coeff @bond:n-n4 harmonic 410.8 1.4320 # SOURCE3 5 0.0098
bond_coeff @bond:n-n harmonic 469.7 1.3900 # SOURCE3 5 0.0038
bond_coeff @bond:n-na harmonic 486.8 1.3790 # SOURCE3 11 0.0071
- bond_coeff @bond:n-nc harmonic 524.9 1.3561 # SOURCE4 63 0.0104
- bond_coeff @bond:n-nd harmonic 517.7 1.3603 # SOURCE4 13 0.0122
+ bond_coeff @bond:n-nc harmonic 523.7 1.3568 # CORR 76
+ bond_coeff @bond:n-nd harmonic 523.7 1.3568 # CORR 76
bond_coeff @bond:n-nh harmonic 451.2 1.4025 # SOURCE4 20 0.0074
bond_coeff @bond:n-no harmonic 381.2 1.4560 # SOURCE3 4 0.0327
bond_coeff @bond:n-o harmonic 646.6 1.2640 # SOURCE3 9 0.0381
bond_coeff @bond:n-oh harmonic 395.4 1.4100 # SOURCE3 6 0.0106
bond_coeff @bond:no-no harmonic 138.3 1.8240 # SOURCE3 1 0.0000
bond_coeff @bond:no-o harmonic 761.2 1.2190 # SOURCE1 1838 0.0049
bond_coeff @bond:no-oh harmonic 400.5 1.4060 # SOURCE2 1 0.0000
bond_coeff @bond:no-os harmonic 379.5 1.4229 # SOURCE4 53 0.0076
- bond_coeff @bond:no-os harmonic 379.5 1.4229 # SOURCE4 53 0.0076
bond_coeff @bond:no-p2 harmonic 306.3 1.7380 # SOURCE3 10 0.2231
bond_coeff @bond:no-p3 harmonic 234.7 1.8440 # SOURCE3 3 0.0005
bond_coeff @bond:no-p4 harmonic 220.4 1.8700 # SOURCE3 3 0.0006
bond_coeff @bond:no-p5 harmonic 240.5 1.8340 # SOURCE3 4 0.0020
bond_coeff @bond:no-s harmonic 263.8 1.7420 # SOURCE3 2 0.0000
bond_coeff @bond:n-os harmonic 395.0 1.4103 # SOURCE4 30 0.0112
bond_coeff @bond:no-s4 harmonic 143.0 1.9960 # SOURCE3 3 0.0313
bond_coeff @bond:no-s6 harmonic 149.6 1.9760 # SOURCE3 3 0.0520
bond_coeff @bond:no-sh harmonic 225.4 1.8040 # SOURCE3 1 0.0000
bond_coeff @bond:no-ss harmonic 212.4 1.8280 # SOURCE3 3 0.0244
bond_coeff @bond:n-p2 harmonic 310.3 1.7330 # SOURCE3 8 0.0217
bond_coeff @bond:n-p3 harmonic 282.2 1.7700 # SOURCE3 9 0.0118
bond_coeff @bond:n-p4 harmonic 309.5 1.7340 # SOURCE3 1 0.0000
bond_coeff @bond:n-p5 harmonic 331.3 1.7080 # SOURCE4 6 0.0022
bond_coeff @bond:n-pc harmonic 304.8 1.7400 # SOURCE3 3 0.0010
bond_coeff @bond:n-pd harmonic 304.8 1.7400 # SOURCE3 3 same_as_n-pc
bond_coeff @bond:n-s harmonic 247.5 1.7670 # SOURCE3 3 0.0011
bond_coeff @bond:n-s4 harmonic 238.2 1.7820 # SOURCE3 4 0.0214
bond_coeff @bond:n-s6 harmonic 283.0 1.7151 # SOURCE4 13 0.0138
bond_coeff @bond:n-sh harmonic 273.6 1.7280 # SOURCE3 4 0.0128
bond_coeff @bond:n-ss harmonic 281.6 1.7170 # SOURCE3 7 0.0133
bond_coeff @bond:n-sy harmonic 282.9 1.7152 # SOURCE4 51 0.0079
bond_coeff @bond:oh-oh harmonic 340.5 1.4690 # SOURCE3 1 0.0000
bond_coeff @bond:oh-os harmonic 355.8 1.4547 # SOURCE4 19 0.0050
bond_coeff @bond:oh-p2 harmonic 316.8 1.6300 # SOURCE3 8 0.0916
bond_coeff @bond:oh-p3 harmonic 278.8 1.6770 # SOURCE3 3 0.0148
bond_coeff @bond:oh-p4 harmonic 307.4 1.6410 # SOURCE3 4 0.0092
bond_coeff @bond:oh-p5 harmonic 321.2 1.6250 # SOURCE3 92 0.0451
bond_coeff @bond:oh-py harmonic 332.1 1.6130 # SOURCE3 79 0.0138
bond_coeff @bond:oh-s harmonic 190.0 1.8120 # SOURCE3 2 0.0000
bond_coeff @bond:oh-s4 harmonic 256.3 1.6954 # SOURCE4 10 0.0091
bond_coeff @bond:oh-s6 harmonic 344.1 1.5880 # SOURCE3 13 0.0091
bond_coeff @bond:oh-sh harmonic 258.6 1.6920 # SOURCE3 2 0.0003
bond_coeff @bond:oh-ss harmonic 265.6 1.6820 # SOURCE3 4 0.0131
bond_coeff @bond:oh-sy harmonic 290.4 1.6490 # SOURCE4 33 0.0044
bond_coeff @bond:o-o harmonic 384.3 1.4300 # SOURCE3 2 0.0500
bond_coeff @bond:o-oh harmonic 294.6 1.5170 # SOURCE3 2 0.0000
bond_coeff @bond:o-os harmonic 306.3 1.5040 # SOURCE3 3 0.0117
bond_coeff @bond:o-p2 harmonic 449.7 1.5080 # SOURCE3 17 0.0306
bond_coeff @bond:o-p3 harmonic 440.4 1.5150 # SOURCE3 35 0.0297
bond_coeff @bond:o-p4 harmonic 456.4 1.5030 # SOURCE3 42 0.0749
bond_coeff @bond:o-p5 harmonic 487.7 1.4810 # SOURCE1 263 0.0205
bond_coeff @bond:o-pe harmonic 432.6 1.5210 # SOURCE3 20 0.0171
bond_coeff @bond:o-pf harmonic 432.6 1.5210 # SOURCE3 20 same_as_o-pe
bond_coeff @bond:o-px harmonic 459.2 1.5010 # SOURCE3 37 0.0160
bond_coeff @bond:o-py harmonic 477.5 1.4880 # SOURCE3 63 0.0091
bond_coeff @bond:o-s harmonic 194.8 1.8020 # SOURCE3 2 0.0000
bond_coeff @bond:o-s2 harmonic 333.6 1.5990 # SOURCE3 3 0.0707
bond_coeff @bond:o-s4 harmonic 448.7 1.4970 # SOURCE1 90 0.0000
bond_coeff @bond:o-s6 harmonic 541.1 1.4360 # SOURCE1 1038 0.0128
bond_coeff @bond:o-sh harmonic 328.0 1.6050 # SOURCE3 2 0.0000
bond_coeff @bond:os-os harmonic 343.6 1.4660 # SOURCE1 20 0.0067
bond_coeff @bond:os-p2 harmonic 371.9 1.5730 # SOURCE1 16 0.0000
bond_coeff @bond:os-p3 harmonic 272.2 1.6860 # SOURCE3 6 0.0201
bond_coeff @bond:os-p4 harmonic 311.6 1.6360 # SOURCE3 4 0.0057
bond_coeff @bond:os-p5 harmonic 342.5 1.6020 # SOURCE1 248 0.0400
bond_coeff @bond:os-py harmonic 328.5 1.6170 # SOURCE3 17 0.0139
bond_coeff @bond:os-s harmonic 195.8 1.8000 # SOURCE3 3 0.0052
bond_coeff @bond:o-ss harmonic 398.5 1.5370 # SOURCE3 3 0.0501
bond_coeff @bond:os-s4 harmonic 253.9 1.6990 # SOURCE3 8 0.0223
bond_coeff @bond:os-s6 harmonic 355.0 1.5770 # SOURCE1 75 0.0030
bond_coeff @bond:os-sh harmonic 273.6 1.6710 # SOURCE3 3 0.0106
bond_coeff @bond:os-ss harmonic 250.5 1.7040 # SOURCE3 9 0.0277
bond_coeff @bond:os-sy harmonic 253.9 1.6990 # SOURCE3 1 0.0000
bond_coeff @bond:o-sx harmonic 434.2 1.5080 # SOURCE3 40 0.0130
bond_coeff @bond:o-sy harmonic 493.0 1.4660 # SOURCE3 92 0.0114
bond_coeff @bond:p2-p2 harmonic 490.3 1.7860 # SOURCE3 25 0.3488
bond_coeff @bond:p2-p3 harmonic 211.9 2.1520 # SOURCE3 9 0.1777
bond_coeff @bond:p2-p4 harmonic 200.4 2.1790 # SOUECE3 1
bond_coeff @bond:p2-p5 harmonic 199.9 2.1800 # SOUECE3 1
bond_coeff @bond:p2-pe harmonic 401.6 1.8670 # SOURCE3 16 0.3571
bond_coeff @bond:p2-pf harmonic 401.6 1.8670 # SOURCE3 16 same_as_p2-pe
bond_coeff @bond:p2-s harmonic 361.6 1.7720 # SOURCE3 26 0.3014
bond_coeff @bond:p2-s4 harmonic 139.4 2.1900 # SOUECE3 1
bond_coeff @bond:p2-s6 harmonic 142.3 2.1800 # SOUECE3 1
bond_coeff @bond:p2-sh harmonic 224.0 1.9710 # SOURCE3 10 0.2829
bond_coeff @bond:p2-ss harmonic 226.6 1.9660 # SOURCE3 10 0.2739
bond_coeff @bond:p3-p3 harmonic 186.5 2.2140 # SOURCE1 41 0.0000
bond_coeff @bond:p3-p4 harmonic 185.7 2.2160 # SOURCE3 3 0.0011
bond_coeff @bond:p3-p5 harmonic 186.9 2.2130 # SOURCE3 9 0.0265
bond_coeff @bond:p3-s harmonic 179.7 2.0700 # SOUECE3 1
bond_coeff @bond:p3-s4 harmonic 173.2 2.0870 # SOURCE3 8 0.2235
bond_coeff @bond:p3-s6 harmonic 176.9 2.0770 # SOURCE3 11 0.1420
bond_coeff @bond:p3-sh harmonic 157.3 2.1320 # SOURCE3 3 0.0078
bond_coeff @bond:p3-ss harmonic 161.0 2.1210 # SOURCE3 3 0.0059
bond_coeff @bond:p4-p4 harmonic 273.1 2.0340 # SOURCE1 1 0.0000
bond_coeff @bond:p4-p5 harmonic 178.0 2.2370 # SOUECE3 1
bond_coeff @bond:p4-s harmonic 152.7 2.1460 # SOURCE3 5 0.0601
bond_coeff @bond:p4-s4 harmonic 123.2 2.2510 # SOUECE3 1
bond_coeff @bond:p4-s6 harmonic 118.9 2.2690 # SOUECE3 1
bond_coeff @bond:p4-sh harmonic 163.1 2.1150 # SOURCE3 4 0.0008
bond_coeff @bond:p4-ss harmonic 167.0 2.1040 # SOURCE3 4 0.0044
bond_coeff @bond:p5-p5 harmonic 261.4 2.0540 # SOURCE1 1 0.0000
bond_coeff @bond:p5-s harmonic 250.8 1.9220 # SOURCE1 89 0.0140
bond_coeff @bond:p5-s4 harmonic 191.9 2.0400 # SOUECE3 1
bond_coeff @bond:p5-s6 harmonic 191.9 2.0400 # SOUECE3 1
bond_coeff @bond:p5-sh harmonic 175.0 2.0820 # SOURCE3 3 0.0035
bond_coeff @bond:p5-ss harmonic 163.1 2.1149 # SOURCE4 24 0.0106
bond_coeff @bond:pe-pe harmonic 240.7 2.0920 # SOURCE3 7 0.1369
bond_coeff @bond:pe-pf harmonic 260.8 2.0550 # SOURCE3 1 0.0000
bond_coeff @bond:pe-px harmonic 291.4 2.0050 # SOURCE3 12 0.2609
bond_coeff @bond:pe-py harmonic 278.6 2.0250 # SOURCE3 12 0.2617
bond_coeff @bond:pe-s harmonic 374.7 1.7580 # SOURCE3 31 0.3197
bond_coeff @bond:pe-sx harmonic 145.9 2.1680 # SOURCE3 9 0.1743
bond_coeff @bond:pe-sy harmonic 133.0 2.2130 # SOURCE3 6 0.0127
bond_coeff @bond:pf-pf harmonic 240.7 2.0920 # SOURCE3 7 same_as_pe-pe
bond_coeff @bond:pf-px harmonic 291.4 2.0050 # SOURCE3 12 same_as_pe-px
bond_coeff @bond:pf-py harmonic 278.6 2.0250 # SOURCE3 12 same_as_pe-py
bond_coeff @bond:pf-s harmonic 374.7 1.7580 # SOURCE3 31 same_as_pe-s
bond_coeff @bond:pf-sx harmonic 145.9 2.1680 # SOURCE3 9 same_as_pe-sx
bond_coeff @bond:pf-sy harmonic 133.0 2.2130 # SOURCE3 6 same_as_pe-sy
bond_coeff @bond:px-py harmonic 192.3 2.1990 # SOURCE3 5 0.0238
bond_coeff @bond:px-sx harmonic 125.4 2.2420 # SOURCE3 3 0.0119
bond_coeff @bond:px-sy harmonic 123.7 2.2490 # SOURCE3 3 0.0272
bond_coeff @bond:py-py harmonic 197.5 2.1860 # SOURCE3 8 0.0132
bond_coeff @bond:py-sx harmonic 121.2 2.2590 # SOURCE3 7 0.0603
bond_coeff @bond:py-sy harmonic 141.7 2.1820 # SOURCE3 5 0.0047
bond_coeff @bond:s4-s4 harmonic 151.5 2.0800 # SOUECE3 1
bond_coeff @bond:s4-s6 harmonic 151.5 2.0800 # SOUECE3 1
bond_coeff @bond:s4-sh harmonic 125.7 2.1680 # SOURCE3 3 0.0227
bond_coeff @bond:s4-ss harmonic 126.2 2.1660 # SOURCE3 5 0.0247
bond_coeff @bond:s6-s6 harmonic 151.5 2.0800 # SOUECE3 1
bond_coeff @bond:s6-sh harmonic 142.6 2.1080 # SOURCE3 3 0.0144
bond_coeff @bond:s6-ss harmonic 139.6 2.1180 # SOURCE3 5 0.0209
bond_coeff @bond:sh-sh harmonic 158.9 2.0580 # SOURCE2 1 0.0000
bond_coeff @bond:sh-ss harmonic 155.8 2.0670 # SOURCE3 3 0.0029
bond_coeff @bond:s-s harmonic 169.0 2.0300 # SOURCE3 1 0.0000
bond_coeff @bond:s-s2 harmonic 229.2 1.8970 # SOURCE1 5 0.0000
bond_coeff @bond:s-s4 harmonic 152.8 2.0760 # SOURCE3 4 0.0345
bond_coeff @bond:s-s6 harmonic 166.0 2.0380 # SOURCE3 3 0.0311
bond_coeff @bond:s-sh harmonic 142.0 2.1100 # SOURCE3 2 0.0000
bond_coeff @bond:s-ss harmonic 148.5 2.0890 # SOURCE3 1 0.0000
bond_coeff @bond:ss-ss harmonic 161.7 2.0500 # SOURCE1 225 0.0015
bond_coeff @bond:sx-sx harmonic 80.9 2.3910 # SOURCE3 3 0.0185
bond_coeff @bond:sx-sy harmonic 105.3 2.2550 # SOURCE3 5 0.0737
bond_coeff @bond:sy-sy harmonic 106.4 2.2500 # SOURCE3 3 0.0289
+ bond_coeff @bond:br-cd harmonic 277.6 1.8847 # NEW 39
+ bond_coeff @bond:c1-cf harmonic 607.4 1.3153 # NEW 6
+ bond_coeff @bond:cd-f harmonic 368.6 1.3401 # NEW 24
+ bond_coeff @bond:cd-n4 harmonic 299.0 1.4930 # NEW 7
+ bond_coeff @bond:cd-nf harmonic 427.4 1.3790 # NEW 30
+ bond_coeff @bond:cd-no harmonic 367.4 1.4262 # NEW 133
+ bond_coeff @bond:cd-sh harmonic 257.9 1.7681 # NEW 8
+ bond_coeff @bond:cd-sx harmonic 231.3 1.8113 # NEW 16
+ bond_coeff @bond:cc-cy harmonic 330.9 1.5054 # NEW 10
+ bond_coeff @bond:cf-cl harmonic 292.6 1.7671 # NEW 24
+ bond_coeff @bond:cf-cx harmonic 337.0 1.4993 # NEW 5
+ bond_coeff @bond:cf-cy harmonic 323.0 1.5135 # NEW 17
+ bond_coeff @bond:cf-na harmonic 373.8 1.4207 # NEW 5
+ bond_coeff @bond:cf-ss harmonic 243.6 1.7906 # NEW 10
+ bond_coeff @bond:cq-na harmonic 420.5 1.3840 # NEW 7
+ bond_coeff @bond:cq-nb harmonic 486.7 1.3398 # NEW 70
} # (end of bond_coeffs)
write_once("Data Bonds By Type") {
@bond:ow-hw @atom:ow @atom:hw
+ @bond:hw-hw @atom:hw @atom:hw
@bond:br-br @atom:br @atom:br
@bond:br-c1 @atom:br @atom:c1
@bond:br-c2 @atom:br @atom:c2
@bond:br-c @atom:br @atom:c
@bond:br-c3 @atom:br @atom:c3
@bond:br-ca @atom:br @atom:ca
@bond:br-cc @atom:br @atom:cc
@bond:br-cx @atom:br @atom:cx
@bond:br-i @atom:br @atom:i
@bond:br-n1 @atom:br @atom:n1
@bond:br-n2 @atom:br @atom:n2
@bond:br-n @atom:br @atom:n
@bond:br-n3 @atom:br @atom:n3
@bond:br-n4 @atom:br @atom:n4
@bond:br-na @atom:br @atom:na
@bond:br-nh @atom:br @atom:nh
@bond:br-no @atom:br @atom:no
@bond:br-o @atom:br @atom:o
@bond:br-oh @atom:br @atom:oh
@bond:br-os @atom:br @atom:os
@bond:br-p2 @atom:br @atom:p2
@bond:br-p3 @atom:br @atom:p3
@bond:br-p4 @atom:br @atom:p4
@bond:br-p5 @atom:br @atom:p5
@bond:br-s @atom:br @atom:s
@bond:br-s4 @atom:br @atom:s4
@bond:br-s6 @atom:br @atom:s6
@bond:br-sh @atom:br @atom:sh
@bond:br-ss @atom:br @atom:ss
@bond:c1-c1 @atom:c1 @atom:c1
@bond:c1-c2 @atom:c1 @atom:c2
@bond:c1-c3 @atom:c1 @atom:c3
@bond:c1-ca @atom:c1 @atom:ca
@bond:c1-ce @atom:c1 @atom:ce
@bond:c1-cg @atom:c1 @atom:cg
@bond:c1-ch @atom:c1 @atom:ch
@bond:c1-cl @atom:c1 @atom:cl
@bond:c1-cx @atom:c1 @atom:cx
@bond:c1-f @atom:c1 @atom:f
@bond:c1-ha @atom:c1 @atom:ha
@bond:c1-hc @atom:c1 @atom:hc
@bond:c1-i @atom:c1 @atom:i
@bond:c1-n1 @atom:c1 @atom:n1
@bond:c1-n2 @atom:c1 @atom:n2
@bond:c1-n3 @atom:c1 @atom:n3
@bond:c1-n4 @atom:c1 @atom:n4
@bond:c1-n @atom:c1 @atom:n
@bond:c1-na @atom:c1 @atom:na
@bond:c1-ne @atom:c1 @atom:ne
@bond:c1-nf @atom:c1 @atom:nf
@bond:c1-nh @atom:c1 @atom:nh
@bond:c1-no @atom:c1 @atom:no
@bond:c1-o @atom:c1 @atom:o
@bond:c1-oh @atom:c1 @atom:oh
@bond:c1-os @atom:c1 @atom:os
@bond:c1-p2 @atom:c1 @atom:p2
@bond:c1-p3 @atom:c1 @atom:p3
@bond:c1-p4 @atom:c1 @atom:p4
@bond:c1-p5 @atom:c1 @atom:p5
@bond:c1-s2 @atom:c1 @atom:s2
@bond:c1-s @atom:c1 @atom:s
@bond:c1-s4 @atom:c1 @atom:s4
@bond:c1-s6 @atom:c1 @atom:s6
@bond:c1-sh @atom:c1 @atom:sh
@bond:c1-ss @atom:c1 @atom:ss
@bond:c2-c2 @atom:c2 @atom:c2
@bond:c2-c3 @atom:c2 @atom:c3
@bond:c2-ca @atom:c2 @atom:ca
@bond:c2-cc @atom:c2 @atom:cc
@bond:c2-cd @atom:c2 @atom:cd
@bond:c2-ce @atom:c2 @atom:ce
@bond:c2-cf @atom:c2 @atom:cf
@bond:c2-cl @atom:c2 @atom:cl
@bond:c2-cu @atom:c2 @atom:cu
@bond:c2-cx @atom:c2 @atom:cx
@bond:c2-cy @atom:c2 @atom:cy
@bond:c2-f @atom:c2 @atom:f
@bond:c2-h4 @atom:c2 @atom:h4
@bond:c2-h5 @atom:c2 @atom:h5
@bond:c2-ha @atom:c2 @atom:ha
@bond:c2-hc @atom:c2 @atom:hc
@bond:c2-hx @atom:c2 @atom:hx
@bond:c2-i @atom:c2 @atom:i
@bond:c2-n1 @atom:c2 @atom:n1
@bond:c2-n2 @atom:c2 @atom:n2
@bond:c2-n3 @atom:c2 @atom:n3
@bond:c2-n @atom:c2 @atom:n
@bond:c2-n4 @atom:c2 @atom:n4
@bond:c2-na @atom:c2 @atom:na
@bond:c2-nc @atom:c2 @atom:nc
@bond:c2-nd @atom:c2 @atom:nd
@bond:c2-ne @atom:c2 @atom:ne
@bond:c2-nf @atom:c2 @atom:nf
@bond:c2-nh @atom:c2 @atom:nh
@bond:c2-no @atom:c2 @atom:no
@bond:c2-o @atom:c2 @atom:o
@bond:c2-oh @atom:c2 @atom:oh
@bond:c2-os @atom:c2 @atom:os
@bond:c2-p2 @atom:c2 @atom:p2
@bond:c2-p3 @atom:c2 @atom:p3
@bond:c2-p4 @atom:c2 @atom:p4
@bond:c2-p5 @atom:c2 @atom:p5
@bond:c2-pe @atom:c2 @atom:pe
@bond:c2-pf @atom:c2 @atom:pf
@bond:c2-s2 @atom:c2 @atom:s2
@bond:c2-s @atom:c2 @atom:s
@bond:c2-s4 @atom:c2 @atom:s4
@bond:c2-s6 @atom:c2 @atom:s6
@bond:c2-sh @atom:c2 @atom:sh
@bond:c2-ss @atom:c2 @atom:ss
@bond:c3-c3 @atom:c3 @atom:c3
@bond:c3-ca @atom:c3 @atom:ca
@bond:c3-cc @atom:c3 @atom:cc
@bond:c3-cd @atom:c3 @atom:cd
@bond:c3-ce @atom:c3 @atom:ce
@bond:c3-cf @atom:c3 @atom:cf
@bond:c3-cl @atom:c3 @atom:cl
@bond:c3-cu @atom:c3 @atom:cu
@bond:c3-cv @atom:c3 @atom:cv
@bond:c3-cx @atom:c3 @atom:cx
@bond:c3-cy @atom:c3 @atom:cy
@bond:c3-f @atom:c3 @atom:f
@bond:c3-h1 @atom:c3 @atom:h1
@bond:c3-h2 @atom:c3 @atom:h2
@bond:c3-h3 @atom:c3 @atom:h3
@bond:c3-hc @atom:c3 @atom:hc
@bond:c3-hx @atom:c3 @atom:hx
@bond:c3-i @atom:c3 @atom:i
@bond:c3-n1 @atom:c3 @atom:n1
@bond:c3-n2 @atom:c3 @atom:n2
@bond:c3-n @atom:c3 @atom:n
@bond:c3-n3 @atom:c3 @atom:n3
@bond:c3-n4 @atom:c3 @atom:n4
@bond:c3-na @atom:c3 @atom:na
@bond:c3-nc @atom:c3 @atom:nc
@bond:c3-nd @atom:c3 @atom:nd
@bond:c3-nh @atom:c3 @atom:nh
@bond:c3-no @atom:c3 @atom:no
@bond:c3-o @atom:c3 @atom:o
@bond:c3-oh @atom:c3 @atom:oh
@bond:c3-os @atom:c3 @atom:os
@bond:c3-p2 @atom:c3 @atom:p2
@bond:c3-p3 @atom:c3 @atom:p3
@bond:c3-p4 @atom:c3 @atom:p4
@bond:c3-p5 @atom:c3 @atom:p5
@bond:c3-px @atom:c3 @atom:px
@bond:c3-py @atom:c3 @atom:py
@bond:c3-s @atom:c3 @atom:s
@bond:c3-s4 @atom:c3 @atom:s4
@bond:c3-s6 @atom:c3 @atom:s6
@bond:c3-sh @atom:c3 @atom:sh
@bond:c3-ss @atom:c3 @atom:ss
@bond:c3-sx @atom:c3 @atom:sx
@bond:c3-sy @atom:c3 @atom:sy
@bond:ca-ca @atom:ca @atom:ca
@bond:ca-cc @atom:ca @atom:cc
@bond:ca-cd @atom:ca @atom:cd
@bond:ca-ce @atom:ca @atom:ce
@bond:ca-cf @atom:ca @atom:cf
@bond:ca-cg @atom:ca @atom:cg
@bond:ca-ch @atom:ca @atom:ch
@bond:ca-cl @atom:ca @atom:cl
@bond:ca-cp @atom:ca @atom:cp
@bond:ca-cq @atom:ca @atom:cq
@bond:ca-cx @atom:ca @atom:cx
@bond:ca-cy @atom:ca @atom:cy
@bond:ca-f @atom:ca @atom:f
@bond:ca-h4 @atom:ca @atom:h4
@bond:ca-h5 @atom:ca @atom:h5
@bond:ca-ha @atom:ca @atom:ha
@bond:ca-i @atom:ca @atom:i
@bond:ca-n1 @atom:ca @atom:n1
@bond:ca-n2 @atom:ca @atom:n2
@bond:ca-n @atom:ca @atom:n
@bond:ca-n4 @atom:ca @atom:n4
@bond:ca-na @atom:ca @atom:na
@bond:ca-nb @atom:ca @atom:nb
@bond:ca-nc @atom:ca @atom:nc
@bond:ca-nd @atom:ca @atom:nd
@bond:ca-ne @atom:ca @atom:ne
@bond:ca-nf @atom:ca @atom:nf
@bond:ca-nh @atom:ca @atom:nh
@bond:ca-no @atom:ca @atom:no
@bond:ca-o @atom:ca @atom:o
@bond:ca-oh @atom:ca @atom:oh
@bond:ca-os @atom:ca @atom:os
@bond:ca-p2 @atom:ca @atom:p2
@bond:ca-p3 @atom:ca @atom:p3
@bond:ca-p4 @atom:ca @atom:p4
@bond:ca-p5 @atom:ca @atom:p5
@bond:ca-pe @atom:ca @atom:pe
@bond:ca-pf @atom:ca @atom:pf
@bond:ca-px @atom:ca @atom:px
@bond:ca-py @atom:ca @atom:py
@bond:ca-s @atom:ca @atom:s
@bond:ca-s4 @atom:ca @atom:s4
@bond:ca-s6 @atom:ca @atom:s6
@bond:ca-sh @atom:ca @atom:sh
@bond:ca-ss @atom:ca @atom:ss
@bond:ca-sx @atom:ca @atom:sx
@bond:ca-sy @atom:ca @atom:sy
@bond:c-c1 @atom:c @atom:c1
@bond:c-c2 @atom:c @atom:c2
@bond:c-c @atom:c @atom:c
@bond:c-c3 @atom:c @atom:c3
@bond:c-ca @atom:c @atom:ca
@bond:c-cc @atom:c @atom:cc
@bond:cc-cc @atom:cc @atom:cc
@bond:cc-cd @atom:cc @atom:cd
@bond:cc-ce @atom:cc @atom:ce
@bond:cc-cf @atom:cc @atom:cf
@bond:cc-cg @atom:cc @atom:cg
@bond:cc-ch @atom:cc @atom:ch
@bond:cc-cl @atom:cc @atom:cl
@bond:cc-cx @atom:cc @atom:cx
@bond:c-cd @atom:c @atom:cd
@bond:c-ce @atom:c @atom:ce
@bond:c-cf @atom:c @atom:cf
@bond:cc-f @atom:cc @atom:f
@bond:c-cg @atom:c @atom:cg
@bond:c-ch @atom:c @atom:ch
@bond:cc-h4 @atom:cc @atom:h4
@bond:cc-h5 @atom:cc @atom:h5
@bond:cc-ha @atom:cc @atom:ha
@bond:c-cl @atom:c @atom:cl
@bond:cc-n2 @atom:cc @atom:n2
@bond:cc-n @atom:cc @atom:n
@bond:cc-n4 @atom:cc @atom:n4
@bond:cc-na @atom:cc @atom:na
@bond:cc-nc @atom:cc @atom:nc
@bond:cc-nd @atom:cc @atom:nd
@bond:cc-ne @atom:cc @atom:ne
@bond:cc-nf @atom:cc @atom:nf
@bond:cc-nh @atom:cc @atom:nh
@bond:cc-no @atom:cc @atom:no
@bond:cc-oh @atom:cc @atom:oh
@bond:cc-os @atom:cc @atom:os
@bond:cc-pd @atom:cc @atom:pd
@bond:cc-sh @atom:cc @atom:sh
@bond:cc-ss @atom:cc @atom:ss
@bond:cc-sx @atom:cc @atom:sx
@bond:cc-sy @atom:cc @atom:sy
@bond:c-cu @atom:c @atom:cu
@bond:c-cx @atom:c @atom:cx
@bond:c-cy @atom:c @atom:cy
@bond:cd-cd @atom:cd @atom:cd
@bond:cd-ce @atom:cd @atom:ce
@bond:cd-cf @atom:cd @atom:cf
@bond:cd-cg @atom:cd @atom:cg
@bond:cd-ch @atom:cd @atom:ch
@bond:cd-cl @atom:cd @atom:cl
@bond:cd-cx @atom:cd @atom:cx
@bond:cd-cy @atom:cd @atom:cy
@bond:cd-h4 @atom:cd @atom:h4
@bond:cd-h5 @atom:cd @atom:h5
@bond:cd-ha @atom:cd @atom:ha
@bond:cd-n2 @atom:cd @atom:n2
@bond:cd-n @atom:cd @atom:n
@bond:cd-na @atom:cd @atom:na
@bond:cd-nc @atom:cd @atom:nc
@bond:cd-nd @atom:cd @atom:nd
@bond:cd-ne @atom:cd @atom:ne
@bond:cd-nh @atom:cd @atom:nh
@bond:cd-oh @atom:cd @atom:oh
@bond:cd-os @atom:cd @atom:os
@bond:cd-pc @atom:cd @atom:pc
@bond:cd-ss @atom:cd @atom:ss
@bond:cd-sy @atom:cd @atom:sy
@bond:ce-ce @atom:ce @atom:ce
@bond:ce-cf @atom:ce @atom:cf
@bond:ce-cg @atom:ce @atom:cg
@bond:ce-ch @atom:ce @atom:ch
@bond:ce-cl @atom:ce @atom:cl
@bond:ce-cx @atom:ce @atom:cx
@bond:ce-cy @atom:ce @atom:cy
@bond:ce-h4 @atom:ce @atom:h4
@bond:ce-ha @atom:ce @atom:ha
@bond:ce-n1 @atom:ce @atom:n1
@bond:ce-n2 @atom:ce @atom:n2
@bond:ce-n @atom:ce @atom:n
@bond:ce-na @atom:ce @atom:na
@bond:ce-ne @atom:ce @atom:ne
@bond:ce-nf @atom:ce @atom:nf
@bond:ce-nh @atom:ce @atom:nh
@bond:ce-oh @atom:ce @atom:oh
@bond:ce-os @atom:ce @atom:os
@bond:ce-p2 @atom:ce @atom:p2
@bond:ce-pe @atom:ce @atom:pe
@bond:ce-px @atom:ce @atom:px
@bond:ce-py @atom:ce @atom:py
@bond:ce-s @atom:ce @atom:s
@bond:ce-ss @atom:ce @atom:ss
@bond:ce-sx @atom:ce @atom:sx
@bond:ce-sy @atom:ce @atom:sy
@bond:c-f @atom:c @atom:f
@bond:cf-cf @atom:cf @atom:cf
@bond:cf-cg @atom:cf @atom:cg
@bond:cf-ch @atom:cf @atom:ch
@bond:cf-h4 @atom:cf @atom:h4
@bond:cf-ha @atom:cf @atom:ha
@bond:cf-n1 @atom:cf @atom:n1
@bond:cf-n2 @atom:cf @atom:n2
@bond:cf-n @atom:cf @atom:n
@bond:cf-ne @atom:cf @atom:ne
@bond:cf-nf @atom:cf @atom:nf
@bond:cf-nh @atom:cf @atom:nh
@bond:cf-oh @atom:cf @atom:oh
@bond:cf-os @atom:cf @atom:os
@bond:cf-p2 @atom:cf @atom:p2
@bond:cf-pf @atom:cf @atom:pf
@bond:cf-px @atom:cf @atom:px
@bond:cf-py @atom:cf @atom:py
@bond:cf-s @atom:cf @atom:s
@bond:cf-sx @atom:cf @atom:sx
@bond:cf-sy @atom:cf @atom:sy
@bond:cg-cg @atom:cg @atom:cg
@bond:cg-ch @atom:cg @atom:ch
@bond:cg-n1 @atom:cg @atom:n1
@bond:cg-ne @atom:cg @atom:ne
@bond:cg-pe @atom:cg @atom:pe
@bond:c-h4 @atom:c @atom:h4
@bond:c-h5 @atom:c @atom:h5
@bond:c-ha @atom:c @atom:ha
@bond:ch-ch @atom:ch @atom:ch
@bond:ch-n1 @atom:ch @atom:n1
@bond:ch-nf @atom:ch @atom:nf
@bond:ch-pf @atom:ch @atom:pf
@bond:c-i @atom:c @atom:i
@bond:cl-cl @atom:cl @atom:cl
@bond:cl-cx @atom:cl @atom:cx
@bond:cl-cy @atom:cl @atom:cy
@bond:cl-f @atom:cl @atom:f
@bond:cl-i @atom:cl @atom:i
@bond:cl-n1 @atom:cl @atom:n1
@bond:cl-n2 @atom:cl @atom:n2
@bond:cl-n3 @atom:cl @atom:n3
@bond:cl-n @atom:cl @atom:n
@bond:cl-n4 @atom:cl @atom:n4
@bond:cl-na @atom:cl @atom:na
@bond:cl-nh @atom:cl @atom:nh
@bond:cl-no @atom:cl @atom:no
@bond:cl-o @atom:cl @atom:o
@bond:cl-oh @atom:cl @atom:oh
@bond:cl-os @atom:cl @atom:os
@bond:cl-p2 @atom:cl @atom:p2
@bond:cl-p3 @atom:cl @atom:p3
@bond:cl-p4 @atom:cl @atom:p4
@bond:cl-p5 @atom:cl @atom:p5
@bond:cl-pb @atom:cl @atom:pb
@bond:cl-s @atom:cl @atom:s
@bond:cl-s2 @atom:cl @atom:s2
@bond:cl-s4 @atom:cl @atom:s4
@bond:cl-s6 @atom:cl @atom:s6
@bond:cl-sh @atom:cl @atom:sh
@bond:cl-ss @atom:cl @atom:ss
@bond:cl-sx @atom:cl @atom:sx
@bond:cl-sy @atom:cl @atom:sy
@bond:c-n2 @atom:c @atom:n2
@bond:c-n4 @atom:c @atom:n4
@bond:c-n @atom:c @atom:n
@bond:c-nc @atom:c @atom:nc
@bond:c-nd @atom:c @atom:nd
@bond:c-ne @atom:c @atom:ne
@bond:c-nf @atom:c @atom:nf
@bond:c-no @atom:c @atom:no
@bond:c-o @atom:c @atom:o
@bond:c-oh @atom:c @atom:oh
@bond:c-os @atom:c @atom:os
@bond:c-p2 @atom:c @atom:p2
@bond:c-p3 @atom:c @atom:p3
@bond:c-p4 @atom:c @atom:p4
@bond:c-p5 @atom:c @atom:p5
@bond:cp-cp @atom:cp @atom:cp
@bond:cp-cq @atom:cp @atom:cq
@bond:c-pe @atom:c @atom:pe
@bond:c-pf @atom:c @atom:pf
@bond:cp-na @atom:cp @atom:na
@bond:cp-nb @atom:cp @atom:nb
@bond:c-px @atom:c @atom:px
@bond:c-py @atom:c @atom:py
@bond:cq-cq @atom:cq @atom:cq
@bond:c-s @atom:c @atom:s
@bond:c-s4 @atom:c @atom:s4
@bond:c-s6 @atom:c @atom:s6
@bond:c-sh @atom:c @atom:sh
@bond:c-ss @atom:c @atom:ss
@bond:c-sx @atom:c @atom:sx
@bond:c-sy @atom:c @atom:sy
@bond:cu-cu @atom:cu @atom:cu
@bond:cu-cx @atom:cu @atom:cx
@bond:cu-ha @atom:cu @atom:ha
@bond:cv-cv @atom:cv @atom:cv
@bond:cv-cy @atom:cv @atom:cy
@bond:cv-ha @atom:cv @atom:ha
@bond:cx-cv @atom:cx @atom:cv
@bond:cx-cx @atom:cx @atom:cx
@bond:cx-cy @atom:cx @atom:cy
@bond:cx-f @atom:cx @atom:f
@bond:cx-h1 @atom:cx @atom:h1
@bond:cx-h2 @atom:cx @atom:h2
@bond:cx-hc @atom:cx @atom:hc
@bond:cx-hx @atom:cx @atom:hx
@bond:cx-n2 @atom:cx @atom:n2
@bond:cx-n3 @atom:cx @atom:n3
@bond:cx-n @atom:cx @atom:n
@bond:cx-na @atom:cx @atom:na
@bond:cx-nh @atom:cx @atom:nh
@bond:cx-oh @atom:cx @atom:oh
@bond:cx-os @atom:cx @atom:os
@bond:cx-p3 @atom:cx @atom:p3
@bond:cx-s4 @atom:cx @atom:s4
@bond:cx-s6 @atom:cx @atom:s6
@bond:cx-ss @atom:cx @atom:ss
@bond:cy-cy @atom:cy @atom:cy
@bond:cy-f @atom:cy @atom:f
@bond:cy-h1 @atom:cy @atom:h1
@bond:cy-h2 @atom:cy @atom:h2
@bond:cy-hc @atom:cy @atom:hc
@bond:cy-n @atom:cy @atom:n
@bond:cy-n3 @atom:cy @atom:n3
@bond:cy-oh @atom:cy @atom:oh
@bond:cy-os @atom:cy @atom:os
@bond:cy-s6 @atom:cy @atom:s6
@bond:cy-ss @atom:cy @atom:ss
@bond:cz-nh @atom:cz @atom:nh
@bond:f-n1 @atom:f @atom:n1
@bond:f-n2 @atom:f @atom:n2
@bond:f-n3 @atom:f @atom:n3
@bond:f-n @atom:f @atom:n
@bond:f-n4 @atom:f @atom:n4
@bond:f-na @atom:f @atom:na
@bond:f-nh @atom:f @atom:nh
@bond:f-no @atom:f @atom:no
@bond:f-o @atom:f @atom:o
@bond:f-oh @atom:f @atom:oh
@bond:f-os @atom:f @atom:os
@bond:f-p2 @atom:f @atom:p2
@bond:f-p3 @atom:f @atom:p3
@bond:f-p4 @atom:f @atom:p4
@bond:f-p5 @atom:f @atom:p5
@bond:f-s2 @atom:f @atom:s2
@bond:f-s @atom:f @atom:s
@bond:f-s4 @atom:f @atom:s4
@bond:f-s6 @atom:f @atom:s6
@bond:f-sh @atom:f @atom:sh
@bond:f-ss @atom:f @atom:ss
@bond:hn-n1 @atom:hn @atom:n1
@bond:hn-n2 @atom:hn @atom:n2
@bond:hn-n3 @atom:hn @atom:n3
@bond:hn-n @atom:hn @atom:n
@bond:hn-n4 @atom:hn @atom:n4
@bond:hn-na @atom:hn @atom:na
@bond:hn-nh @atom:hn @atom:nh
@bond:hn-no @atom:hn @atom:no
@bond:ho-o @atom:ho @atom:o
@bond:ho-oh @atom:ho @atom:oh
@bond:hp-p2 @atom:hp @atom:p2
@bond:hp-p3 @atom:hp @atom:p3
@bond:hp-p4 @atom:hp @atom:p4
@bond:hp-p5 @atom:hp @atom:p5
@bond:hs-s @atom:hs @atom:s
@bond:hs-s4 @atom:hs @atom:s4
@bond:hs-s6 @atom:hs @atom:s6
@bond:hs-sh @atom:hs @atom:sh
@bond:i-i @atom:i @atom:i
@bond:i-n1 @atom:i @atom:n1
@bond:i-n2 @atom:i @atom:n2
@bond:i-n @atom:i @atom:n
@bond:i-n3 @atom:i @atom:n3
@bond:i-n4 @atom:i @atom:n4
@bond:i-na @atom:i @atom:na
@bond:i-nh @atom:i @atom:nh
@bond:i-no @atom:i @atom:no
@bond:i-o @atom:i @atom:o
@bond:i-oh @atom:i @atom:oh
@bond:i-os @atom:i @atom:os
@bond:i-p2 @atom:i @atom:p2
@bond:i-p3 @atom:i @atom:p3
@bond:i-p4 @atom:i @atom:p4
@bond:i-p5 @atom:i @atom:p5
@bond:i-s @atom:i @atom:s
@bond:i-s4 @atom:i @atom:s4
@bond:i-s6 @atom:i @atom:s6
@bond:i-sh @atom:i @atom:sh
@bond:i-ss @atom:i @atom:ss
@bond:n1-n1 @atom:n1 @atom:n1
@bond:n1-n2 @atom:n1 @atom:n2
@bond:n1-n3 @atom:n1 @atom:n3
@bond:n1-n4 @atom:n1 @atom:n4
@bond:n1-na @atom:n1 @atom:na
@bond:n1-nc @atom:n1 @atom:nc
@bond:n1-nd @atom:n1 @atom:nd
@bond:n1-ne @atom:n1 @atom:ne
@bond:n1-nf @atom:n1 @atom:nf
@bond:n1-nh @atom:n1 @atom:nh
@bond:n1-no @atom:n1 @atom:no
@bond:n1-o @atom:n1 @atom:o
@bond:n1-oh @atom:n1 @atom:oh
@bond:n1-os @atom:n1 @atom:os
@bond:n1-p2 @atom:n1 @atom:p2
@bond:n1-p3 @atom:n1 @atom:p3
@bond:n1-p4 @atom:n1 @atom:p4
@bond:n1-p5 @atom:n1 @atom:p5
@bond:n1-s2 @atom:n1 @atom:s2
@bond:n1-s @atom:n1 @atom:s
@bond:n1-s4 @atom:n1 @atom:s4
@bond:n1-s6 @atom:n1 @atom:s6
@bond:n1-sh @atom:n1 @atom:sh
@bond:n1-ss @atom:n1 @atom:ss
@bond:n2-n2 @atom:n2 @atom:n2
@bond:n2-n3 @atom:n2 @atom:n3
@bond:n2-n4 @atom:n2 @atom:n4
@bond:n2-na @atom:n2 @atom:na
@bond:n2-nc @atom:n2 @atom:nc
@bond:n2-nd @atom:n2 @atom:nd
@bond:n2-ne @atom:n2 @atom:ne
@bond:n2-nf @atom:n2 @atom:nf
@bond:n2-nh @atom:n2 @atom:nh
@bond:n2-no @atom:n2 @atom:no
@bond:n2-o @atom:n2 @atom:o
@bond:n2-oh @atom:n2 @atom:oh
@bond:n2-os @atom:n2 @atom:os
@bond:n2-p2 @atom:n2 @atom:p2
@bond:n2-p3 @atom:n2 @atom:p3
@bond:n2-p4 @atom:n2 @atom:p4
@bond:n2-p5 @atom:n2 @atom:p5
@bond:n2-pe @atom:n2 @atom:pe
@bond:n2-pf @atom:n2 @atom:pf
@bond:n2-s2 @atom:n2 @atom:s2
@bond:n2-s4 @atom:n2 @atom:s4
@bond:n2-s @atom:n2 @atom:s
@bond:n2-s6 @atom:n2 @atom:s6
@bond:n2-sh @atom:n2 @atom:sh
@bond:n2-ss @atom:n2 @atom:ss
@bond:n3-n3 @atom:n3 @atom:n3
@bond:n3-n4 @atom:n3 @atom:n4
@bond:n3-na @atom:n3 @atom:na
@bond:n3-nh @atom:n3 @atom:nh
@bond:n3-no @atom:n3 @atom:no
@bond:n3-o @atom:n3 @atom:o
@bond:n3-oh @atom:n3 @atom:oh
@bond:n3-os @atom:n3 @atom:os
@bond:n3-p2 @atom:n3 @atom:p2
@bond:n3-p3 @atom:n3 @atom:p3
@bond:n3-p4 @atom:n3 @atom:p4
@bond:n3-p5 @atom:n3 @atom:p5
@bond:n3-py @atom:n3 @atom:py
@bond:n3-s @atom:n3 @atom:s
@bond:n3-s4 @atom:n3 @atom:s4
@bond:n3-s6 @atom:n3 @atom:s6
@bond:n3-sh @atom:n3 @atom:sh
@bond:n3-ss @atom:n3 @atom:ss
@bond:n3-sy @atom:n3 @atom:sy
@bond:n4-n4 @atom:n4 @atom:n4
@bond:n4-na @atom:n4 @atom:na
@bond:n4-nh @atom:n4 @atom:nh
@bond:n4-no @atom:n4 @atom:no
@bond:n4-o @atom:n4 @atom:o
@bond:n4-oh @atom:n4 @atom:oh
@bond:n4-os @atom:n4 @atom:os
@bond:n4-p2 @atom:n4 @atom:p2
@bond:n4-p3 @atom:n4 @atom:p3
@bond:n4-p4 @atom:n4 @atom:p4
@bond:n4-p5 @atom:n4 @atom:p5
@bond:n4-py @atom:n4 @atom:py
@bond:n4-s @atom:n4 @atom:s
@bond:n4-s4 @atom:n4 @atom:s4
@bond:n4-s6 @atom:n4 @atom:s6
@bond:n4-sh @atom:n4 @atom:sh
@bond:n4-ss @atom:n4 @atom:ss
@bond:na-na @atom:na @atom:na
@bond:na-nb @atom:na @atom:nb
@bond:na-nc @atom:na @atom:nc
@bond:na-nd @atom:na @atom:nd
@bond:na-nh @atom:na @atom:nh
@bond:na-no @atom:na @atom:no
@bond:na-o @atom:na @atom:o
@bond:na-oh @atom:na @atom:oh
@bond:na-os @atom:na @atom:os
@bond:na-p2 @atom:na @atom:p2
@bond:na-p3 @atom:na @atom:p3
@bond:na-p4 @atom:na @atom:p4
@bond:na-p5 @atom:na @atom:p5
@bond:na-pc @atom:na @atom:pc
@bond:na-pd @atom:na @atom:pd
@bond:na-py @atom:na @atom:py
@bond:na-s @atom:na @atom:s
@bond:na-s4 @atom:na @atom:s4
@bond:na-s6 @atom:na @atom:s6
@bond:na-sh @atom:na @atom:sh
@bond:na-ss @atom:na @atom:ss
@bond:na-sy @atom:na @atom:sy
@bond:nb-nb @atom:nb @atom:nb
@bond:nb-pb @atom:nb @atom:pb
@bond:nc-nc @atom:nc @atom:nc
@bond:nc-nd @atom:nc @atom:nd
@bond:nc-os @atom:nc @atom:os
@bond:nc-ss @atom:nc @atom:ss
@bond:nc-sy @atom:nc @atom:sy
@bond:nd-nd @atom:nd @atom:nd
@bond:nd-os @atom:nd @atom:os
@bond:nd-ss @atom:nd @atom:ss
@bond:nd-sy @atom:nd @atom:sy
@bond:ne-ne @atom:ne @atom:ne
@bond:ne-nf @atom:ne @atom:nf
@bond:ne-o @atom:ne @atom:o
@bond:ne-p2 @atom:ne @atom:p2
@bond:ne-pe @atom:ne @atom:pe
@bond:ne-px @atom:ne @atom:px
@bond:ne-py @atom:ne @atom:py
@bond:ne-s @atom:ne @atom:s
@bond:ne-sx @atom:ne @atom:sx
@bond:ne-sy @atom:ne @atom:sy
@bond:nf-nf @atom:nf @atom:nf
@bond:nf-o @atom:nf @atom:o
@bond:nf-p2 @atom:nf @atom:p2
@bond:nf-pf @atom:nf @atom:pf
@bond:nf-px @atom:nf @atom:px
@bond:nf-py @atom:nf @atom:py
@bond:nf-s @atom:nf @atom:s
@bond:nf-sx @atom:nf @atom:sx
@bond:nf-sy @atom:nf @atom:sy
@bond:nh-nh @atom:nh @atom:nh
@bond:nh-no @atom:nh @atom:no
@bond:nh-o @atom:nh @atom:o
@bond:nh-oh @atom:nh @atom:oh
@bond:nh-os @atom:nh @atom:os
@bond:nh-p2 @atom:nh @atom:p2
@bond:nh-p3 @atom:nh @atom:p3
@bond:nh-p4 @atom:nh @atom:p4
@bond:nh-p5 @atom:nh @atom:p5
@bond:nh-s @atom:nh @atom:s
@bond:nh-s4 @atom:nh @atom:s4
@bond:nh-s6 @atom:nh @atom:s6
@bond:nh-sh @atom:nh @atom:sh
@bond:nh-ss @atom:nh @atom:ss
@bond:nh-sy @atom:nh @atom:sy
@bond:n-n1 @atom:n @atom:n1
@bond:n-n2 @atom:n @atom:n2
@bond:n-n3 @atom:n @atom:n3
@bond:n-n4 @atom:n @atom:n4
@bond:n-n @atom:n @atom:n
@bond:n-na @atom:n @atom:na
@bond:n-nc @atom:n @atom:nc
@bond:n-nd @atom:n @atom:nd
@bond:n-nh @atom:n @atom:nh
@bond:n-no @atom:n @atom:no
@bond:n-o @atom:n @atom:o
@bond:n-oh @atom:n @atom:oh
@bond:no-no @atom:no @atom:no
@bond:no-o @atom:no @atom:o
@bond:no-oh @atom:no @atom:oh
@bond:no-os @atom:no @atom:os
- @bond:no-os @atom:no @atom:os
@bond:no-p2 @atom:no @atom:p2
@bond:no-p3 @atom:no @atom:p3
@bond:no-p4 @atom:no @atom:p4
@bond:no-p5 @atom:no @atom:p5
@bond:no-s @atom:no @atom:s
@bond:n-os @atom:n @atom:os
@bond:no-s4 @atom:no @atom:s4
@bond:no-s6 @atom:no @atom:s6
@bond:no-sh @atom:no @atom:sh
@bond:no-ss @atom:no @atom:ss
@bond:n-p2 @atom:n @atom:p2
@bond:n-p3 @atom:n @atom:p3
@bond:n-p4 @atom:n @atom:p4
@bond:n-p5 @atom:n @atom:p5
@bond:n-pc @atom:n @atom:pc
@bond:n-pd @atom:n @atom:pd
@bond:n-s @atom:n @atom:s
@bond:n-s4 @atom:n @atom:s4
@bond:n-s6 @atom:n @atom:s6
@bond:n-sh @atom:n @atom:sh
@bond:n-ss @atom:n @atom:ss
@bond:n-sy @atom:n @atom:sy
@bond:oh-oh @atom:oh @atom:oh
@bond:oh-os @atom:oh @atom:os
@bond:oh-p2 @atom:oh @atom:p2
@bond:oh-p3 @atom:oh @atom:p3
@bond:oh-p4 @atom:oh @atom:p4
@bond:oh-p5 @atom:oh @atom:p5
@bond:oh-py @atom:oh @atom:py
@bond:oh-s @atom:oh @atom:s
@bond:oh-s4 @atom:oh @atom:s4
@bond:oh-s6 @atom:oh @atom:s6
@bond:oh-sh @atom:oh @atom:sh
@bond:oh-ss @atom:oh @atom:ss
@bond:oh-sy @atom:oh @atom:sy
@bond:o-o @atom:o @atom:o
@bond:o-oh @atom:o @atom:oh
@bond:o-os @atom:o @atom:os
@bond:o-p2 @atom:o @atom:p2
@bond:o-p3 @atom:o @atom:p3
@bond:o-p4 @atom:o @atom:p4
@bond:o-p5 @atom:o @atom:p5
@bond:o-pe @atom:o @atom:pe
@bond:o-pf @atom:o @atom:pf
@bond:o-px @atom:o @atom:px
@bond:o-py @atom:o @atom:py
@bond:o-s @atom:o @atom:s
@bond:o-s2 @atom:o @atom:s2
@bond:o-s4 @atom:o @atom:s4
@bond:o-s6 @atom:o @atom:s6
@bond:o-sh @atom:o @atom:sh
@bond:os-os @atom:os @atom:os
@bond:os-p2 @atom:os @atom:p2
@bond:os-p3 @atom:os @atom:p3
@bond:os-p4 @atom:os @atom:p4
@bond:os-p5 @atom:os @atom:p5
@bond:os-py @atom:os @atom:py
@bond:os-s @atom:os @atom:s
@bond:o-ss @atom:o @atom:ss
@bond:os-s4 @atom:os @atom:s4
@bond:os-s6 @atom:os @atom:s6
@bond:os-sh @atom:os @atom:sh
@bond:os-ss @atom:os @atom:ss
@bond:os-sy @atom:os @atom:sy
@bond:o-sx @atom:o @atom:sx
@bond:o-sy @atom:o @atom:sy
@bond:p2-p2 @atom:p2 @atom:p2
@bond:p2-p3 @atom:p2 @atom:p3
@bond:p2-p4 @atom:p2 @atom:p4
@bond:p2-p5 @atom:p2 @atom:p5
@bond:p2-pe @atom:p2 @atom:pe
@bond:p2-pf @atom:p2 @atom:pf
@bond:p2-s @atom:p2 @atom:s
@bond:p2-s4 @atom:p2 @atom:s4
@bond:p2-s6 @atom:p2 @atom:s6
@bond:p2-sh @atom:p2 @atom:sh
@bond:p2-ss @atom:p2 @atom:ss
@bond:p3-p3 @atom:p3 @atom:p3
@bond:p3-p4 @atom:p3 @atom:p4
@bond:p3-p5 @atom:p3 @atom:p5
@bond:p3-s @atom:p3 @atom:s
@bond:p3-s4 @atom:p3 @atom:s4
@bond:p3-s6 @atom:p3 @atom:s6
@bond:p3-sh @atom:p3 @atom:sh
@bond:p3-ss @atom:p3 @atom:ss
@bond:p4-p4 @atom:p4 @atom:p4
@bond:p4-p5 @atom:p4 @atom:p5
@bond:p4-s @atom:p4 @atom:s
@bond:p4-s4 @atom:p4 @atom:s4
@bond:p4-s6 @atom:p4 @atom:s6
@bond:p4-sh @atom:p4 @atom:sh
@bond:p4-ss @atom:p4 @atom:ss
@bond:p5-p5 @atom:p5 @atom:p5
@bond:p5-s @atom:p5 @atom:s
@bond:p5-s4 @atom:p5 @atom:s4
@bond:p5-s6 @atom:p5 @atom:s6
@bond:p5-sh @atom:p5 @atom:sh
@bond:p5-ss @atom:p5 @atom:ss
@bond:pe-pe @atom:pe @atom:pe
@bond:pe-pf @atom:pe @atom:pf
@bond:pe-px @atom:pe @atom:px
@bond:pe-py @atom:pe @atom:py
@bond:pe-s @atom:pe @atom:s
@bond:pe-sx @atom:pe @atom:sx
@bond:pe-sy @atom:pe @atom:sy
@bond:pf-pf @atom:pf @atom:pf
@bond:pf-px @atom:pf @atom:px
@bond:pf-py @atom:pf @atom:py
@bond:pf-s @atom:pf @atom:s
@bond:pf-sx @atom:pf @atom:sx
@bond:pf-sy @atom:pf @atom:sy
@bond:px-py @atom:px @atom:py
@bond:px-sx @atom:px @atom:sx
@bond:px-sy @atom:px @atom:sy
@bond:py-py @atom:py @atom:py
@bond:py-sx @atom:py @atom:sx
@bond:py-sy @atom:py @atom:sy
@bond:s4-s4 @atom:s4 @atom:s4
@bond:s4-s6 @atom:s4 @atom:s6
@bond:s4-sh @atom:s4 @atom:sh
@bond:s4-ss @atom:s4 @atom:ss
@bond:s6-s6 @atom:s6 @atom:s6
@bond:s6-sh @atom:s6 @atom:sh
@bond:s6-ss @atom:s6 @atom:ss
@bond:sh-sh @atom:sh @atom:sh
@bond:sh-ss @atom:sh @atom:ss
@bond:s-s @atom:s @atom:s
@bond:s-s2 @atom:s @atom:s2
@bond:s-s4 @atom:s @atom:s4
@bond:s-s6 @atom:s @atom:s6
@bond:s-sh @atom:s @atom:sh
@bond:s-ss @atom:s @atom:ss
@bond:ss-ss @atom:ss @atom:ss
@bond:sx-sx @atom:sx @atom:sx
@bond:sx-sy @atom:sx @atom:sy
@bond:sy-sy @atom:sy @atom:sy
+ @bond:br-cd @atom:br @atom:cd
+ @bond:c1-cf @atom:c1 @atom:cf
+ @bond:cd-f @atom:cd @atom:f
+ @bond:cd-n4 @atom:cd @atom:n4
+ @bond:cd-nf @atom:cd @atom:nf
+ @bond:cd-no @atom:cd @atom:no
+ @bond:cd-sh @atom:cd @atom:sh
+ @bond:cd-sx @atom:cd @atom:sx
+ @bond:cc-cy @atom:cc @atom:cy
+ @bond:cf-cl @atom:cf @atom:cl
+ @bond:cf-cx @atom:cf @atom:cx
+ @bond:cf-cy @atom:cf @atom:cy
+ @bond:cf-na @atom:cf @atom:na
+ @bond:cf-ss @atom:cf @atom:ss
+ @bond:cq-na @atom:cq @atom:na
+ @bond:cq-nb @atom:cq @atom:nb
} # (end of Bonds By Type)
write_once("In Settings") {
- angle_coeff @angle:hw-ow-hw harmonic 42.730 104.520 # AMBER 1 TIP3P_water
- angle_coeff @angle:hw-hw-ow harmonic 0.000 127.740 # AMBER 1 (found_in_crystallographic_water_with_3_bonds)
- angle_coeff @angle:br-c1-br harmonic 57.760 180.000 # Guess 0
- angle_coeff @angle:br-c1-c1 harmonic 54.930 180.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-c1 harmonic 64.410 180.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-c2 harmonic 60.840 180.000 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-c1-c3 harmonic 56.280 178.460 # SOURCE4 188 0.6631
- angle_coeff @angle:c1-c1-ca harmonic 56.920 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-cl harmonic 55.270 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-f harmonic 61.020 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-ha harmonic 44.840 178.380 # SOURCE3 41 2.0683
- angle_coeff @angle:c1-c1-hc harmonic 44.730 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-i harmonic 49.800 180.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-n1 harmonic 67.170 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-n2 harmonic 65.170 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-n3 harmonic 59.770 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-n4 harmonic 59.090 179.560 # SOURCE3 3 0.3096
- angle_coeff @angle:c1-c1-n harmonic 62.130 177.180 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-na harmonic 61.230 176.750 # SOURCE3 8 2.9328
- angle_coeff @angle:c1-c1-nh harmonic 61.440 179.270 # SOURCE3 3 0.2357
- angle_coeff @angle:c1-c1-no harmonic 59.380 180.000 # SOURCE3 3 0.0000
- angle_coeff @angle:c1-c1-o harmonic 66.790 180.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-oh harmonic 62.700 176.650 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-os harmonic 62.770 176.420 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-c1-p2 harmonic 51.510 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-p3 harmonic 52.470 169.630 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-c1-p4 harmonic 50.940 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-p5 harmonic 52.560 176.170 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-c1-s4 harmonic 68.490 167.470 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-c1-s6 harmonic 68.020 174.380 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-c1-s harmonic 70.430 179.970 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c1-sh harmonic 68.520 180.000 # SOURCE3 1
- angle_coeff @angle:c1-c1-ss harmonic 69.890 173.220 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-c1-c2 harmonic 58.200 180.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-c1-ce harmonic 58.180 179.010 # SOURCE4 6 0.4656
- angle_coeff @angle:c2-c1-n1 harmonic 63.140 180.000 # HF/6-31G* 1
- angle_coeff @angle:c2-c1-o harmonic 63.070 179.500 # SOURCE2 1 0.0000
- angle_coeff @angle:c2-c1-s2 harmonic 71.800 172.980 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-c1-c3 harmonic 51.750 180.000 # Guess 0
- angle_coeff @angle:c3-c1-cg harmonic 55.790 178.520 # SOURCE4 39 0.5063
- angle_coeff @angle:c3-c1-n1 harmonic 58.100 178.500 # SOURCE4 77 0.5443
- angle_coeff @angle:ca-c1-ca harmonic 52.830 180.000 # Guess 0
- angle_coeff @angle:c-c1-c1 harmonic 56.330 180.000 # SOURCE3 1
- angle_coeff @angle:cg-c1-ha harmonic 43.980 177.410 # SOURCE3 22 2.4947
- angle_coeff @angle:ch-c1-ha harmonic 43.980 177.410 # SOURCE3 22 same_as_cg-c1-ha
- angle_coeff @angle:cl-c1-cl harmonic 53.920 180.000 # Guess 0
- angle_coeff @angle:f-c1-f harmonic 58.190 180.000 # Guess 0
- angle_coeff @angle:i-c1-i harmonic 53.410 180.000 # Guess 0
- angle_coeff @angle:n1-c1-n1 harmonic 93.200 102.010 # SOURCE3 1
- angle_coeff @angle:n1-c1-n3 harmonic 63.710 169.700 # SOURCE2 1 0.0000
- angle_coeff @angle:n1-c1-nh harmonic 64.020 177.430 # SOURCE4 7 0.7877
- angle_coeff @angle:n1-c1-os harmonic 64.720 178.590 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-c1-p3 harmonic 53.480 171.200 # SOURCE2 1 0.0000
- angle_coeff @angle:n1-c1-ss harmonic 70.640 178.680 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-c1-n2 harmonic 65.990 180.000 # Guess 0
- angle_coeff @angle:n2-c1-o harmonic 69.150 171.790 # SOURCE3 2 0.3594
- angle_coeff @angle:n2-c1-s harmonic 72.750 176.010 # SOURCE4 9 0.1123
- angle_coeff @angle:n3-c1-n3 harmonic 57.360 180.000 # Guess 0
- angle_coeff @angle:n4-c1-n4 harmonic 56.350 180.000 # Guess 0
- angle_coeff @angle:na-c1-na harmonic 58.620 180.000 # Guess 0
- angle_coeff @angle:ne-c1-o harmonic 69.390 172.330 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-c1-s harmonic 72.880 175.810 # SOURCE4 8 0.2356
- angle_coeff @angle:nf-c1-o harmonic 69.390 172.330 # SOURCE3 1 same_as_ne-c1-o
- angle_coeff @angle:nh-c1-nh harmonic 59.550 180.000 # Guess 0
- angle_coeff @angle:n-c1-n harmonic 60.030 180.000 # Guess 0
- angle_coeff @angle:no-c1-no harmonic 56.830 180.000 # Guess 0
- angle_coeff @angle:oh-c1-oh harmonic 60.910 180.000 # Guess 0
- angle_coeff @angle:o-c1-o harmonic 69.270 180.000 # Guess 0
- angle_coeff @angle:os-c1-os harmonic 60.960 180.000 # Guess 0
- angle_coeff @angle:p2-c1-p2 harmonic 50.310 180.000 # Guess 0
- angle_coeff @angle:p3-c1-p3 harmonic 49.750 180.000 # Guess 0
- angle_coeff @angle:p4-c1-p4 harmonic 49.750 180.000 # Guess 0
- angle_coeff @angle:p5-c1-p5 harmonic 50.800 180.000 # Guess 0
- angle_coeff @angle:s2-c1-s2 harmonic 89.430 180.000 # Guess 0
- angle_coeff @angle:s4-c1-s4 harmonic 81.700 180.000 # Guess 0
- angle_coeff @angle:s6-c1-s6 harmonic 82.840 180.000 # Guess 0
- angle_coeff @angle:sh-c1-sh harmonic 84.910 180.000 # Guess 0
- angle_coeff @angle:s-c1-s harmonic 87.510 180.000 # Guess 0
- angle_coeff @angle:ss-c1-ss harmonic 84.960 180.000 # Guess 0
- angle_coeff @angle:br-c2-br harmonic 68.560 115.060 # SOURCE3 1 0.0000
- angle_coeff @angle:br-c2-c2 harmonic 63.970 118.960 # SOURCE4 6 0.4902
- angle_coeff @angle:br-c2-c3 harmonic 63.710 115.330 # SOURCE4 6 0.5872
- angle_coeff @angle:br-c2-ce harmonic 63.210 121.590 # SOURCE4 7 0.7078
- angle_coeff @angle:br-c2-h4 harmonic 43.040 113.940 # SOURCE4 6 0.4017
- angle_coeff @angle:br-c2-ha harmonic 43.180 113.280 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-c2-c1 harmonic 72.260 116.770 # SOURCE3 1
- angle_coeff @angle:c1-c2-c2 harmonic 70.340 121.620 # SOURCE3 1
- angle_coeff @angle:c1-c2-c3 harmonic 64.220 124.920 # SOURCE4 17 0.7576
- angle_coeff @angle:c1-c2-f harmonic 67.990 124.900 # SOURCE2 1 0.0000
- angle_coeff @angle:c1-c2-ha harmonic 50.430 121.370 # SOURCE3 8 0.0055
- angle_coeff @angle:c2-c2-c2 harmonic 69.840 121.810 # SOURCE3 10 0.3843
- angle_coeff @angle:c2-c2-c3 harmonic 64.330 123.420 # SOURCE3 41 2.6057
- angle_coeff @angle:c2-c2-ca harmonic 66.880 117.000 # SOURCE3 1
- angle_coeff @angle:c2-c2-cc harmonic 70.220 117.210 # SOURCE3 2 0.3418
- angle_coeff @angle:c2-c2-cd harmonic 70.220 117.210 # SOURCE3 2 same_as_c2-c2-cc
- angle_coeff @angle:c2-c2-cl harmonic 62.820 122.850 # SOURCE4 23 0.6711
- angle_coeff @angle:c2-c2-cx harmonic 64.500 125.400 # SOURCE4 12 1.8494
- angle_coeff @angle:c2-c2-cy harmonic 70.420 103.300 # SOURCE2 1 0.0000
- angle_coeff @angle:c2-c2-f harmonic 68.110 122.920 # SOURCE4 12 0.5301
- angle_coeff @angle:c2-c2-h4 harmonic 49.750 122.540 # SOURCE4 69 1.1900
- angle_coeff @angle:c2-c2-ha harmonic 50.040 120.940 # SOURCE3 254 1.3150
- angle_coeff @angle:c2-c2-hc harmonic 50.300 119.700 # SOURCE3 1
- angle_coeff @angle:c2-c2-hx harmonic 48.980 126.450 # SOURCE3 3 0.0219
- angle_coeff @angle:c2-c2-i harmonic 56.280 121.030 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-c2-n1 harmonic 71.690 122.980 # HF/6-31G* 1
- angle_coeff @angle:c2-c2-n2 harmonic 71.290 126.010 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-c2-n3 harmonic 70.330 124.550 # SOURCE3 1
- angle_coeff @angle:c2-c2-n4 harmonic 67.180 121.520 # SOURCE3 5 1.2656
- angle_coeff @angle:c2-c2-n harmonic 68.860 123.200 # SOURCE4 15 1.8657
- angle_coeff @angle:c2-c2-na harmonic 69.830 121.380 # SOURCE3 26 6.9463
- angle_coeff @angle:c2-c2-nh harmonic 69.800 124.990 # SOURCE3 7 0.9929
- angle_coeff @angle:c2-c2-no harmonic 67.520 124.090 # SOURCE4 6 1.2772
- angle_coeff @angle:c2-c2-o harmonic 71.920 130.890 # SOURCE3 2 0.0201
- angle_coeff @angle:c2-c2-oh harmonic 71.640 122.070 # SOURCE4 6 1.0883
- angle_coeff @angle:c2-c2-os harmonic 71.040 121.890 # SOURCE4 33 1.3457
- angle_coeff @angle:c2-c2-p2 harmonic 66.940 115.100 # SOURCE3 1
- angle_coeff @angle:c2-c2-p3 harmonic 59.410 124.830 # SOURCE3 5 2.1222
- angle_coeff @angle:c2-c2-p4 harmonic 61.010 119.760 # SOURCE3 1
- angle_coeff @angle:c2-c2-p5 harmonic 58.230 125.970 # SOURCE3 1
- angle_coeff @angle:c2-c2-s4 harmonic 79.550 119.840 # SOURCE3 1
- angle_coeff @angle:c2-c2-s6 harmonic 79.490 120.010 # SOURCE3 1
- angle_coeff @angle:c2-c2-s harmonic 77.520 129.370 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-c2-sh harmonic 77.030 125.700 # SOURCE3 3 1.3390
- angle_coeff @angle:c2-c2-ss harmonic 79.470 122.860 # SOURCE4 13 1.7467
- angle_coeff @angle:c3-c2-c3 harmonic 62.700 116.520 # SOURCE3 15 3.1001
- angle_coeff @angle:c3-c2-cc harmonic 63.220 125.380 # SOURCE4 26 1.8978
- angle_coeff @angle:c3-c2-cd harmonic 63.160 125.640 # SOURCE3 1 same_as_c3-c2-cc
- angle_coeff @angle:c3-c2-ce harmonic 64.190 123.020 # SOURCE4 1189 1.9006
- angle_coeff @angle:c3-c2-cf harmonic 63.960 123.870 # SOURCE4 99 1.2875
- angle_coeff @angle:c3-c2-h4 harmonic 45.300 119.250 # SOURCE4 22 2.1707
- angle_coeff @angle:c3-c2-ha harmonic 45.660 117.300 # SOURCE3 33 1.7453
- angle_coeff @angle:c3-c2-hc harmonic 45.150 120.000 # SOURCE3 1
- angle_coeff @angle:c3-c2-n2 harmonic 66.470 123.520 # SOURCE4 141 2.2935
- angle_coeff @angle:c3-c2-n harmonic 66.790 114.800 # SOURCE4 12 1.8112
- angle_coeff @angle:c3-c2-na harmonic 64.950 122.540 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-c2-ne harmonic 66.960 122.150 # SOURCE3 4 0.2197
- angle_coeff @angle:c3-c2-nf harmonic 66.960 122.150 # SOURCE3 4 same_as_c3-c2-ne
- angle_coeff @angle:c3-c2-nh harmonic 66.690 118.590 # SOURCE3 6 2.2622
- angle_coeff @angle:c3-c2-o harmonic 67.880 123.180 # SOURCE4 5 0.9226
- angle_coeff @angle:c3-c2-oh harmonic 68.500 115.040 # SOURCE4 36 2.0110
- angle_coeff @angle:c3-c2-os harmonic 68.770 112.690 # SOURCE4 50 2.4254
- angle_coeff @angle:c3-c2-p2 harmonic 62.400 122.740 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-c2-s harmonic 79.470 115.440 # SOURCE3 2 0.0115
- angle_coeff @angle:c3-c2-ss harmonic 77.990 119.660 # SOURCE4 45 1.9732
- angle_coeff @angle:ca-c2-ca harmonic 63.510 117.880 # SOURCE3 1
- angle_coeff @angle:ca-c2-hc harmonic 45.280 123.300 # SOURCE3 1
- angle_coeff @angle:c-c2-c2 harmonic 67.930 120.700 # SOURCE3 1
- angle_coeff @angle:c-c2-c3 harmonic 63.870 119.700 # SOURCE3 1
- angle_coeff @angle:c-c2-c harmonic 66.570 118.880 # SOURCE3 1
- angle_coeff @angle:cc-c2-h4 harmonic 49.190 120.330 # SOURCE4 7 0.0865
- angle_coeff @angle:cc-c2-ha harmonic 49.070 120.760 # SOURCE3 11 1.4155
- angle_coeff @angle:cc-c2-nh harmonic 69.460 122.960 # SOURCE4 10 0.7347
- angle_coeff @angle:cc-c2-o harmonic 72.800 123.590 # SOURCE4 6 0.0560
- angle_coeff @angle:cd-c2-ha harmonic 49.070 120.760 # SOURCE3 11 1.4155
- angle_coeff @angle:ce-c2-cl harmonic 62.430 123.900 # SOURCE4 11 0.3570
- angle_coeff @angle:ce-c2-h4 harmonic 49.380 122.290 # SOURCE4 75 1.4008
- angle_coeff @angle:ce-c2-ha harmonic 49.570 121.190 # SOURCE3 122 0.5318
- angle_coeff @angle:ce-c2-na harmonic 68.820 123.710 # SOURCE4 6 2.0109
- angle_coeff @angle:ce-c2-nh harmonic 70.640 120.720 # SOURCE4 93 2.2537
- angle_coeff @angle:ce-c2-no harmonic 68.450 119.650 # SOURCE4 5 0.9817
- angle_coeff @angle:ce-c2-o harmonic 73.660 123.080 # SOURCE4 5 0.2391
- angle_coeff @angle:ce-c2-oh harmonic 70.900 123.270 # SOURCE4 42 1.8111
- angle_coeff @angle:ce-c2-os harmonic 70.470 122.520 # SOURCE4 51 2.4680
- angle_coeff @angle:cf-c2-ha harmonic 49.570 121.190 # SOURCE3 122 same_as_ce-c2-ha
- angle_coeff @angle:c-c2-ha harmonic 47.670 121.330 # SOURCE3 4 0.2462
- angle_coeff @angle:c-c2-hc harmonic 48.000 119.700 # SOURCE3 1
- angle_coeff @angle:cl-c2-cl harmonic 64.100 114.270 # SOURCE4 10 0.5850
- angle_coeff @angle:cl-c2-h4 harmonic 43.820 113.770 # SOURCE4 9 0.6228
- angle_coeff @angle:cl-c2-ha harmonic 43.940 113.200 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-c2-ha harmonic 46.610 115.890 # SOURCE4 15 0.3682
- angle_coeff @angle:f-c2-f harmonic 70.670 109.600 # SOURCE2 2 0.6000
- angle_coeff @angle:f-c2-ha harmonic 51.250 110.000 # SOURCE2 1 0.0000
- angle_coeff @angle:h4-c2-n2 harmonic 52.400 120.690 # SOURCE4 13 1.3105
- angle_coeff @angle:h4-c2-n harmonic 50.480 113.570 # SOURCE4 26 1.0283
- angle_coeff @angle:h4-c2-na harmonic 51.030 113.220 # SOURCE4 9 0.6345
- angle_coeff @angle:h4-c2-ne harmonic 52.870 119.630 # SOURCE4 10 1.6786
- angle_coeff @angle:h4-c2-nh harmonic 51.550 115.640 # SOURCE4 31 1.0081
- angle_coeff @angle:h4-c2-no harmonic 49.390 113.380 # SOURCE4 6 0.1240
- angle_coeff @angle:h4-c2-os harmonic 52.230 113.700 # SOURCE3 13 2.0464
- angle_coeff @angle:h4-c2-ss harmonic 54.230 118.470 # SOURCE3 9 2.5335
- angle_coeff @angle:h5-c2-n2 harmonic 52.410 120.160 # SOURCE4 27 1.8999
- angle_coeff @angle:h5-c2-na harmonic 48.230 126.390 # SOURCE3 4 0.3299
- angle_coeff @angle:h5-c2-ne harmonic 52.760 119.620 # SOURCE4 17 1.3235
- angle_coeff @angle:h5-c2-nh harmonic 51.850 113.930 # SOURCE4 50 0.8394
- angle_coeff @angle:ha-c2-ha harmonic 38.020 117.650 # SOURCE3 349 1.3426
- angle_coeff @angle:ha-c2-n1 harmonic 51.830 120.760 # SOURCE3 8 0.6632
- angle_coeff @angle:ha-c2-n2 harmonic 52.390 120.540 # SOURCE3 92 1.4571
- angle_coeff @angle:ha-c2-n3 harmonic 52.440 113.540 # SOURCE3 1
- angle_coeff @angle:ha-c2-n harmonic 50.490 113.400 # SOURCE3 4 1.2182
- angle_coeff @angle:ha-c2-na harmonic 51.180 112.420 # SOURCE3 8 0.6507
- angle_coeff @angle:ha-c2-ne harmonic 52.480 121.180 # SOURCE3 68 0.6824
- angle_coeff @angle:ha-c2-nf harmonic 52.480 121.180 # SOURCE3 68 same_as_ha-c2-ne
- angle_coeff @angle:ha-c2-nh harmonic 51.290 116.680 # SOURCE3 13 2.5734
- angle_coeff @angle:ha-c2-no harmonic 49.640 112.140 # SOURCE3 2 0.0264
- angle_coeff @angle:ha-c2-o harmonic 55.300 117.230 # SOURCE3 2 0.0201
- angle_coeff @angle:ha-c2-oh harmonic 52.340 116.180 # SOURCE3 2 0.0000
- angle_coeff @angle:ha-c2-os harmonic 52.430 112.690 # SOURCE3 13 2.5851
- angle_coeff @angle:ha-c2-p2 harmonic 44.050 121.480 # SOURCE3 122 0.4329
- angle_coeff @angle:ha-c2-p3 harmonic 41.120 114.310 # SOURCE3 3 0.0000
- angle_coeff @angle:ha-c2-p4 harmonic 40.790 117.860 # SOURCE3 1
- angle_coeff @angle:ha-c2-p5 harmonic 39.360 120.100 # SOURCE3 2 0.0000
- angle_coeff @angle:ha-c2-pe harmonic 43.490 121.460 # SOURCE3 104 0.7821
- angle_coeff @angle:ha-c2-pf harmonic 43.490 121.460 # SOURCE3 104 same_as_ha-c2-pe
- angle_coeff @angle:ha-c2-s2 harmonic 58.460 118.740 # SOURCE3 2 0.0000
- angle_coeff @angle:ha-c2-s4 harmonic 54.190 115.300 # SOURCE3 2 0.0000
- angle_coeff @angle:ha-c2-s harmonic 54.950 115.700 # SOURCE3 2 0.0000
- angle_coeff @angle:ha-c2-s6 harmonic 53.880 116.600 # SOURCE3 2 0.0000
- angle_coeff @angle:ha-c2-sh harmonic 54.480 111.740 # SOURCE3 1 0.0000
- angle_coeff @angle:ha-c2-ss harmonic 54.640 116.720 # SOURCE3 7 2.7543
- angle_coeff @angle:hc-c2-hc harmonic 37.810 118.920 # SOURCE3 1
- angle_coeff @angle:hc-c2-n2 harmonic 52.420 120.400 # SOURCE3 1
- angle_coeff @angle:hc-c2-n harmonic 50.350 114.040 # SOURCE3 1
- angle_coeff @angle:hc-c2-na harmonic 49.730 119.100 # SOURCE3 1
- angle_coeff @angle:hc-c2-nh harmonic 52.030 113.360 # SOURCE3 1
- angle_coeff @angle:hc-c2-no harmonic 49.640 112.120 # SOURCE3 1
- angle_coeff @angle:hc-c2-oh harmonic 52.330 116.220 # SOURCE3 1
- angle_coeff @angle:hc-c2-os harmonic 51.650 116.110 # SOURCE3 1
- angle_coeff @angle:hc-c2-p3 harmonic 40.610 117.190 # SOURCE3 1
- angle_coeff @angle:hc-c2-p5 harmonic 39.440 119.580 # SOURCE3 1
- angle_coeff @angle:hc-c2-s4 harmonic 54.000 116.120 # SOURCE3 1
- angle_coeff @angle:hc-c2-s6 harmonic 54.150 115.450 # SOURCE3 1
- angle_coeff @angle:hc-c2-sh harmonic 53.550 115.630 # SOURCE3 1
- angle_coeff @angle:hc-c2-ss harmonic 54.900 115.620 # SOURCE3 1
- angle_coeff @angle:hx-c2-n4 harmonic 48.420 113.030 # SOURCE3 3 0.3873
- angle_coeff @angle:i-c2-i harmonic 60.960 117.940 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-c2-n1 harmonic 73.610 124.150 # HF/6-31G* 1
- angle_coeff @angle:n2-c2-n2 harmonic 77.960 113.820 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-c2-n4 harmonic 72.030 113.050 # SOURCE4 6 0.3318
- angle_coeff @angle:n2-c2-na harmonic 71.710 123.620 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-c2-nh harmonic 72.620 124.270 # SOURCE3 12 2.4114
- angle_coeff @angle:n2-c2-oh harmonic 74.360 122.080 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-c2-os harmonic 74.320 119.820 # SOURCE4 20 1.2664
- angle_coeff @angle:n2-c2-ss harmonic 79.560 129.770 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-c2-n3 harmonic 73.450 118.470 # SOURCE3 1
- angle_coeff @angle:n4-c2-n4 harmonic 67.720 113.930 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-c2-ss harmonic 81.510 116.260 # SOURCE4 7 2.4226
- angle_coeff @angle:na-c2-na harmonic 73.650 109.330 # SOURCE3 3 3.0187
- angle_coeff @angle:ne-c2-nh harmonic 73.020 123.570 # SOURCE4 126 2.4468
- angle_coeff @angle:ne-c2-os harmonic 74.860 118.760 # SOURCE4 5 0.3382
- angle_coeff @angle:ne-c2-ss harmonic 82.780 120.060 # SOURCE4 9 1.3423
- angle_coeff @angle:nf-c2-nh harmonic 73.280 122.720 # SOURCE3 2 same_as_ne-c2-nh
- angle_coeff @angle:nh-c2-nh harmonic 74.460 112.720 # SOURCE4 257 1.8176
- angle_coeff @angle:nh-c2-oh harmonic 74.050 117.160 # SOURCE4 7 0.8698
- angle_coeff @angle:nh-c2-os harmonic 74.320 114.290 # SOURCE4 18 1.0900
- angle_coeff @angle:nh-c2-ss harmonic 85.090 111.550 # SOURCE4 37 1.1778
- angle_coeff @angle:n-c2-n2 harmonic 70.560 125.950 # SOURCE3 2 5.0202
- angle_coeff @angle:n-c2-n harmonic 71.550 113.230 # SOURCE3 1 0.0000
- angle_coeff @angle:n-c2-na harmonic 74.570 105.420 # SOURCE3 1 0.0000
- angle_coeff @angle:n-c2-ne harmonic 70.890 125.380 # SOURCE4 10 1.6819
- angle_coeff @angle:n-c2-nh harmonic 74.200 109.140 # SOURCE4 22 1.5634
- angle_coeff @angle:no-c2-no harmonic 69.430 113.900 # SOURCE3 1 0.0000
- angle_coeff @angle:n-c2-ss harmonic 84.580 111.060 # SOURCE4 9 0.5522
- angle_coeff @angle:oh-c2-oh harmonic 76.030 114.330 # SOURCE3 1 0.0000
- angle_coeff @angle:o-c2-o harmonic 80.230 121.690 # SOURCE3 1
- angle_coeff @angle:o-c2-oh harmonic 76.690 121.230 # SOURCE4 6 0.0958
- angle_coeff @angle:o-c2-s harmonic 81.200 127.680 # SOURCE3 2 0.0547
- angle_coeff @angle:os-c2-os harmonic 74.210 115.800 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-c2-p2 harmonic 62.800 129.800 # SOURCE3 1
- angle_coeff @angle:p3-c2-p3 harmonic 60.610 115.540 # SOURCE3 1 0.0000
- angle_coeff @angle:p5-c2-p5 harmonic 58.010 121.850 # SOURCE3 1
- angle_coeff @angle:s4-c2-s4 harmonic 99.130 120.320 # SOURCE3 1
- angle_coeff @angle:s4-c2-s6 harmonic 99.290 119.950 # SOURCE3 1
- angle_coeff @angle:s6-c2-s6 harmonic 99.280 119.970 # SOURCE3 1
- angle_coeff @angle:sh-c2-sh harmonic 102.460 110.480 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-c2-ss harmonic 100.350 117.820 # SOURCE3 1
- angle_coeff @angle:s-c2-s harmonic 100.060 121.670 # SOURCE3 1
- angle_coeff @angle:ss-c2-ss harmonic 100.540 120.240 # SOURCE3 1 0.0000
- angle_coeff @angle:br-c3-br harmonic 67.460 109.030 # SOURCE4 6 0.5435
- angle_coeff @angle:br-c3-c1 harmonic 62.770 111.800 # SOURCE2 3 0.2160
- angle_coeff @angle:br-c3-c3 harmonic 63.030 109.250 # SOURCE3 10 0.5685
- angle_coeff @angle:br-c3-c harmonic 62.920 110.370 # SOURCE4 13 2.4747
- angle_coeff @angle:br-c3-h1 harmonic 43.120 103.040 # SOURCE3 5 0.3092
- angle_coeff @angle:br-c3-h2 harmonic 42.340 107.100 # SOURCE4 7 0.2378
- angle_coeff @angle:br-c3-hc harmonic 42.400 106.500 # SOURCE3 1
- angle_coeff @angle:c1-c3-c1 harmonic 66.500 109.000 # SOURCE2 1 0.0000
- angle_coeff @angle:c1-c3-c2 harmonic 65.000 111.110 # SOURCE4 12 0.7366
- angle_coeff @angle:c1-c3-c3 harmonic 64.290 111.420 # SOURCE4 197 1.2106
- angle_coeff @angle:c1-c3-ca harmonic 64.930 110.950 # SOURCE4 28 1.1203
- angle_coeff @angle:c1-c3-cc harmonic 64.290 114.290 # SOURCE4 8 0.1535
- angle_coeff @angle:c1-c3-cd harmonic 64.360 114.060 # SOURCE4 5 0.0462
- angle_coeff @angle:c1-c3-cl harmonic 62.890 110.630 # SOURCE2 3 1.2257
- angle_coeff @angle:c1-c3-h1 harmonic 48.350 109.290 # SOURCE4 133 0.5701
- angle_coeff @angle:c1-c3-hc harmonic 48.250 109.750 # SOURCE3 12 0.8436
- angle_coeff @angle:c1-c3-hx harmonic 47.760 112.050 # SOURCE4 17 0.2587
- angle_coeff @angle:c1-c3-n3 harmonic 67.030 112.590 # SOURCE4 28 0.9555
- angle_coeff @angle:c1-c3-n4 harmonic 66.530 112.040 # SOURCE4 11 0.5701
- angle_coeff @angle:c1-c3-n harmonic 67.410 112.080 # SOURCE4 18 0.9568
- angle_coeff @angle:c1-c3-nh harmonic 67.250 112.790 # SOURCE4 8 0.9453
- angle_coeff @angle:c1-c3-oh harmonic 69.490 109.140 # SOURCE4 39 0.6500
- angle_coeff @angle:c1-c3-os harmonic 69.270 108.880 # SOURCE4 31 0.9597
- angle_coeff @angle:c2-c3-c2 harmonic 63.930 112.080 # SOURCE4 153 0.7742
- angle_coeff @angle:c2-c3-c3 harmonic 63.530 111.440 # SOURCE4 2891 1.7167
- angle_coeff @angle:c2-c3-ca harmonic 63.710 112.450 # SOURCE4 141 1.6755
- angle_coeff @angle:c2-c3-cc harmonic 64.000 112.490 # SOURCE4 15 1.7250
- angle_coeff @angle:c2-c3-cd harmonic 64.460 110.890 # SOURCE4 17 2.1339
- angle_coeff @angle:c2-c3-ce harmonic 64.080 111.750 # SOURCE4 28 1.5646
- angle_coeff @angle:c2-c3-cf harmonic 63.960 112.190 # SOURCE4 10 2.4554
- angle_coeff @angle:c2-c3-cl harmonic 62.050 112.070 # SOURCE4 6 0.9936
- angle_coeff @angle:c2-c3-cx harmonic 63.650 112.620 # SOURCE4 17 1.3287
- angle_coeff @angle:c2-c3-cy harmonic 66.760 101.330 # SOURCE4 58 0.9262
- angle_coeff @angle:c2-c3-f harmonic 66.520 110.960 # SOURCE4 25 0.2829
- angle_coeff @angle:c2-c3-h1 harmonic 47.030 110.460 # SOURCE3 17 1.1525
- angle_coeff @angle:c2-c3-h2 harmonic 46.840 111.190 # SOURCE4 17 0.8311
- angle_coeff @angle:c2-c3-hc harmonic 47.030 110.490 # SOURCE3 159 0.7479
- angle_coeff @angle:c2-c3-hx harmonic 46.830 111.450 # SOURCE4 20 0.9004
- angle_coeff @angle:c2-c3-n2 harmonic 67.090 108.990 # SOURCE4 10 1.2025
- angle_coeff @angle:c2-c3-n3 harmonic 66.470 111.520 # SOURCE4 158 1.4012
- angle_coeff @angle:c2-c3-n harmonic 66.730 111.380 # SOURCE4 67 1.7559
- angle_coeff @angle:c2-c3-na harmonic 66.240 113.300 # SOURCE4 27 1.2945
- angle_coeff @angle:c2-c3-nh harmonic 67.100 110.270 # SOURCE4 56 1.8018
- angle_coeff @angle:c2-c3-oh harmonic 68.180 110.210 # SOURCE4 220 1.4197
- angle_coeff @angle:c2-c3-os harmonic 68.450 108.480 # SOURCE4 204 1.6082
- angle_coeff @angle:c2-c3-s4 harmonic 79.190 109.730 # SOURCE4 6 0.1722
- angle_coeff @angle:c2-c3-ss harmonic 80.520 104.970 # SOURCE3 2 2.2248
- angle_coeff @angle:c3-c3-c3 harmonic 63.210 110.630 # SOURCE3 507 2.7845
- angle_coeff @angle:c3-c3-ca harmonic 63.250 112.090 # SOURCE4 3859 1.5523
- angle_coeff @angle:c3-c3-cc harmonic 63.570 111.920 # SOURCE4 695 1.6368
- angle_coeff @angle:c3-c3-cd harmonic 64.690 108.100 # SOURCE3 5 same_as_c3-c3-cc
- angle_coeff @angle:c3-c3-ce harmonic 63.650 111.220 # SOURCE4 395 1.7751
- angle_coeff @angle:c3-c3-cf harmonic 63.900 110.370 # SOURCE4 95 1.5467
- angle_coeff @angle:c3-c3-cl harmonic 62.200 110.330 # SOURCE3 20 1.1495
- angle_coeff @angle:c3-c3-cx harmonic 63.300 111.820 # SOURCE4 179 2.4814
- angle_coeff @angle:c3-c3-cy harmonic 63.630 109.620 # SOURCE3 5 2.0747
- angle_coeff @angle:c3-c3-f harmonic 66.220 109.410 # SOURCE3 18 1.1878
- angle_coeff @angle:c3-c3-h1 harmonic 46.360 110.070 # SOURCE3 457 1.1542
- angle_coeff @angle:c3-c3-h2 harmonic 46.020 111.590 # SOURCE3 8 1.1217
- angle_coeff @angle:c3-c3-hc harmonic 46.370 110.050 # SOURCE3 2092 0.6991
- angle_coeff @angle:c3-c3-hx harmonic 46.020 111.740 # SOURCE3 15 1.2365
- angle_coeff @angle:c3-c3-i harmonic 58.480 110.960 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-c3-n1 harmonic 66.640 108.860 # SOURCE4 9 0.8093
- angle_coeff @angle:c3-c3-n2 harmonic 66.400 109.160 # SOURCE3 8 1.4079
- angle_coeff @angle:c3-c3-n3 harmonic 66.180 110.380 # SOURCE3 69 2.9054
- angle_coeff @angle:c3-c3-n4 harmonic 64.450 114.320 # SOURCE4 567 2.4412
- angle_coeff @angle:c3-c3-n harmonic 65.850 112.130 # SOURCE3 31 2.0700
- angle_coeff @angle:c3-c3-na harmonic 65.730 112.810 # SOURCE4 595 1.5050
- angle_coeff @angle:c3-c3-nh harmonic 66.390 110.450 # SOURCE4 1514 1.3881
- angle_coeff @angle:c3-c3-no harmonic 65.210 109.270 # SOURCE4 25 1.1817
- angle_coeff @angle:c3-c3-o harmonic 68.590 112.970 # SOURCE4 14 1.0277
- angle_coeff @angle:c3-c3-oh harmonic 67.720 109.430 # SOURCE3 48 1.5023
- angle_coeff @angle:c3-c3-os harmonic 67.780 108.420 # SOURCE3 122 1.6759
- angle_coeff @angle:c3-c3-p3 harmonic 60.410 113.190 # SOURCE4 15 0.2974
- angle_coeff @angle:c3-c3-p5 harmonic 61.390 112.320 # SOURCE4 106 1.1753
- angle_coeff @angle:c3-c3-s4 harmonic 78.670 110.070 # SOURCE4 38 0.8510
- angle_coeff @angle:c3-c3-s6 harmonic 79.700 110.000 # SOURCE4 152 1.4278
- angle_coeff @angle:c3-c3-sh harmonic 77.180 113.020 # SOURCE4 80 1.3442
- angle_coeff @angle:c3-c3-ss harmonic 77.330 112.690 # SOURCE3 24 2.1842
- angle_coeff @angle:c3-c3-sy harmonic 79.490 109.910 # SOURCE4 22 0.9248
- angle_coeff @angle:ca-c3-ca harmonic 63.660 112.260 # SOURCE4 385 1.7047
- angle_coeff @angle:ca-c3-cc harmonic 63.760 112.940 # SOURCE4 61 1.2579
- angle_coeff @angle:ca-c3-cd harmonic 65.180 108.080 # SOURCE3 8 same_as_ca-c3-cc
- angle_coeff @angle:ca-c3-ce harmonic 63.810 112.330 # SOURCE4 51 1.1929
- angle_coeff @angle:ca-c3-cl harmonic 62.200 111.310 # SOURCE4 16 0.8077
- angle_coeff @angle:ca-c3-cx harmonic 63.690 112.100 # SOURCE4 5 2.1117
- angle_coeff @angle:ca-c3-f harmonic 66.140 111.760 # SOURCE4 449 0.3492
- angle_coeff @angle:ca-c3-h1 harmonic 46.780 110.950 # SOURCE3 12 1.1170
- angle_coeff @angle:ca-c3-h2 harmonic 47.030 109.660 # SOURCE4 29 1.2184
- angle_coeff @angle:ca-c3-hc harmonic 46.960 110.150 # SOURCE3 47 1.2602
- angle_coeff @angle:ca-c3-hx harmonic 46.690 111.440 # SOURCE4 33 0.4691
- angle_coeff @angle:ca-c3-n2 harmonic 65.920 112.490 # SOURCE4 22 1.1043
- angle_coeff @angle:ca-c3-n3 harmonic 66.180 112.130 # SOURCE4 387 1.2309
- angle_coeff @angle:ca-c3-n4 harmonic 64.870 114.540 # SOURCE4 22 2.3986
- angle_coeff @angle:ca-c3-n harmonic 66.290 112.430 # SOURCE4 201 1.5133
- angle_coeff @angle:ca-c3-na harmonic 66.270 112.810 # SOURCE4 104 1.5807
- angle_coeff @angle:ca-c3-nc harmonic 68.200 106.510 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-c3-nd harmonic 68.200 106.510 # SOURCE3 1 same_as_ca-c3-nc
- angle_coeff @angle:ca-c3-nh harmonic 66.640 111.410 # SOURCE4 147 1.0074
- angle_coeff @angle:ca-c3-oh harmonic 67.940 110.550 # SOURCE4 348 1.2310
- angle_coeff @angle:ca-c3-os harmonic 68.190 108.890 # SOURCE4 411 1.0102
- angle_coeff @angle:ca-c3-p5 harmonic 61.350 113.410 # SOURCE4 19 1.4444
- angle_coeff @angle:ca-c3-s6 harmonic 79.570 111.360 # SOURCE4 15 1.4775
- angle_coeff @angle:ca-c3-ss harmonic 78.350 110.660 # SOURCE4 78 1.4797
- angle_coeff @angle:ca-c3-sx harmonic 78.680 110.800 # SOURCE4 16 0.5396
- angle_coeff @angle:c-c3-c1 harmonic 64.560 112.640 # SOURCE4 11 1.0678
- angle_coeff @angle:c-c3-c2 harmonic 64.140 111.320 # SOURCE4 92 1.8522
- angle_coeff @angle:c-c3-c3 harmonic 63.790 110.530 # SOURCE3 62 1.9636
- angle_coeff @angle:c-c3-c harmonic 64.060 111.610 # SOURCE4 151 2.1872
- angle_coeff @angle:c-c3-ca harmonic 64.130 110.990 # SOURCE4 481 1.7257
- angle_coeff @angle:c-c3-cc harmonic 63.940 112.690 # SOURCE4 61 1.4162
- angle_coeff @angle:cc-c3-cc harmonic 63.640 114.440 # SOURCE4 9 0.7894
- angle_coeff @angle:cc-c3-cd harmonic 67.300 102.350 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-c3-cx harmonic 63.850 112.550 # SOURCE4 5 1.4317
- angle_coeff @angle:c-c3-cd harmonic 63.810 113.170 # SOURCE4 43 1.3583
- angle_coeff @angle:c-c3-ce harmonic 64.020 111.980 # SOURCE4 16 2.1388
- angle_coeff @angle:cc-c3-f harmonic 66.730 111.130 # SOURCE4 60 0.4791
- angle_coeff @angle:cc-c3-h1 harmonic 47.030 111.620 # SOURCE3 20 1.0215
- angle_coeff @angle:cc-c3-hc harmonic 47.200 110.860 # SOURCE3 85 1.0276
- angle_coeff @angle:cc-c3-hx harmonic 47.170 111.020 # SOURCE4 9 0.7503
- angle_coeff @angle:c-c3-cl harmonic 62.300 111.160 # SOURCE4 41 1.2257
- angle_coeff @angle:cc-c3-n2 harmonic 66.850 110.470 # SOURCE4 11 0.5153
- angle_coeff @angle:cc-c3-n3 harmonic 66.670 111.570 # SOURCE4 66 1.2287
- angle_coeff @angle:cc-c3-n4 harmonic 64.880 115.580 # SOURCE4 6 1.1723
- angle_coeff @angle:cc-c3-n harmonic 66.740 112.050 # SOURCE4 23 1.5593
- angle_coeff @angle:cc-c3-na harmonic 66.430 113.390 # SOURCE4 8 0.8010
- angle_coeff @angle:cc-c3-nc harmonic 68.370 107.040 # SOURCE3 2 0.0000
- angle_coeff @angle:cc-c3-nh harmonic 66.500 113.020 # SOURCE4 14 1.6083
- angle_coeff @angle:cc-c3-oh harmonic 68.010 111.510 # SOURCE4 61 1.4663
- angle_coeff @angle:cc-c3-os harmonic 68.570 108.820 # SOURCE4 84 1.2451
- angle_coeff @angle:cc-c3-p5 harmonic 60.750 116.230 # SOURCE4 6 0.7766
- angle_coeff @angle:cc-c3-sh harmonic 77.340 114.020 # SOURCE3 1 same_as_cd-c3-sh
- angle_coeff @angle:cc-c3-ss harmonic 78.390 111.090 # SOURCE4 35 0.8623
- angle_coeff @angle:c-c3-cx harmonic 64.080 111.090 # SOURCE4 9 1.2357
- angle_coeff @angle:cd-c3-cd harmonic 65.520 107.990 # SOURCE3 10 5.1937
- angle_coeff @angle:cd-c3-f harmonic 66.530 111.800 # SOURCE4 9 0.4528
- angle_coeff @angle:cd-c3-h1 harmonic 47.030 111.620 # SOURCE3 20 1.0215
- angle_coeff @angle:cd-c3-hc harmonic 47.200 110.860 # SOURCE3 85 1.0276
- angle_coeff @angle:cd-c3-n3 harmonic 66.960 110.590 # SOURCE4 45 1.4707
- angle_coeff @angle:cd-c3-n harmonic 67.110 110.830 # SOURCE4 9 1.3462
- angle_coeff @angle:cd-c3-nd harmonic 68.370 107.040 # SOURCE3 2 same_as_cc-c3-nc
- angle_coeff @angle:cd-c3-nh harmonic 67.060 111.110 # SOURCE4 7 2.0959
- angle_coeff @angle:cd-c3-oh harmonic 68.280 110.640 # SOURCE4 55 1.5008
- angle_coeff @angle:cd-c3-os harmonic 67.810 111.280 # SOURCE3 7 same_as_cc-c3-os
- angle_coeff @angle:cd-c3-sh harmonic 77.340 114.020 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-c3-ss harmonic 78.450 110.910 # SOURCE4 8 0.8705
- angle_coeff @angle:ce-c3-ce harmonic 64.240 111.440 # SOURCE4 18 0.3695
- angle_coeff @angle:ce-c3-cy harmonic 66.340 102.820 # SOURCE4 6 0.1191
- angle_coeff @angle:ce-c3-h1 harmonic 47.280 109.650 # SOURCE4 98 0.9337
- angle_coeff @angle:ce-c3-hc harmonic 47.000 110.980 # SOURCE3 27 0.1559
- angle_coeff @angle:ce-c3-n3 harmonic 66.430 111.900 # SOURCE4 20 0.5035
- angle_coeff @angle:ce-c3-n harmonic 67.090 110.410 # SOURCE4 6 1.1405
- angle_coeff @angle:ce-c3-oh harmonic 68.000 111.050 # SOURCE4 17 1.5159
- angle_coeff @angle:ce-c3-os harmonic 68.640 108.100 # SOURCE4 16 1.9583
- angle_coeff @angle:ce-c3-ss harmonic 78.300 111.100 # SOURCE4 7 2.0156
- angle_coeff @angle:c-c3-f harmonic 66.820 109.980 # SOURCE4 38 0.9895
- angle_coeff @angle:cf-c3-cy harmonic 66.330 102.850 # SOURCE4 49 0.2818
- angle_coeff @angle:cf-c3-h1 harmonic 47.350 109.340 # SOURCE4 21 0.7788
- angle_coeff @angle:cf-c3-hc harmonic 47.000 110.980 # SOURCE3 27 same_as_ce-c3-hc
- angle_coeff @angle:cf-c3-n3 harmonic 66.510 111.640 # SOURCE4 8 1.1575
- angle_coeff @angle:c-c3-h1 harmonic 47.630 107.660 # SOURCE3 66 1.4015
- angle_coeff @angle:c-c3-h2 harmonic 47.160 109.690 # SOURCE4 38 1.0614
- angle_coeff @angle:c-c3-hc harmonic 47.200 109.680 # SOURCE3 614 0.6426
- angle_coeff @angle:c-c3-hx harmonic 47.230 109.540 # SOURCE4 47 0.6627
- angle_coeff @angle:cl-c3-cl harmonic 62.700 111.030 # SOURCE2 6 1.1324
- angle_coeff @angle:cl-c3-f harmonic 63.600 109.020 # SOURCE4 15 0.3609
- angle_coeff @angle:cl-c3-h1 harmonic 43.710 105.930 # SOURCE3 19 1.1883
- angle_coeff @angle:cl-c3-h2 harmonic 43.490 107.140 # SOURCE4 50 0.5973
- angle_coeff @angle:cl-c3-hc harmonic 43.360 107.650 # SOURCE2 2 2.2500
- angle_coeff @angle:cl-c3-os harmonic 64.920 111.400 # SOURCE4 8 0.8275
- angle_coeff @angle:cl-c3-ss harmonic 78.390 112.940 # SOURCE4 10 1.4625
- angle_coeff @angle:c-c3-n2 harmonic 66.920 109.550 # SOURCE4 55 1.4579
- angle_coeff @angle:c-c3-n3 harmonic 66.590 111.140 # SOURCE4 629 1.6673
- angle_coeff @angle:c-c3-n4 harmonic 65.070 114.210 # SOURCE4 27 1.5388
- angle_coeff @angle:c-c3-n harmonic 66.670 111.560 # SOURCE3 28 1.7981
- angle_coeff @angle:c-c3-na harmonic 66.810 111.370 # SOURCE4 31 1.6229
- angle_coeff @angle:c-c3-nh harmonic 67.360 109.430 # SOURCE4 42 1.7022
- angle_coeff @angle:c-c3-oh harmonic 68.650 108.700 # SOURCE4 299 1.3415
- angle_coeff @angle:c-c3-os harmonic 68.030 109.820 # SOURCE3 10 2.0612
- angle_coeff @angle:c-c3-p5 harmonic 62.230 110.410 # SOURCE4 15 2.2683
- angle_coeff @angle:c-c3-s6 harmonic 80.060 110.220 # SOURCE4 5 2.0076
- angle_coeff @angle:c-c3-sh harmonic 79.050 108.820 # SOURCE4 12 0.8354
- angle_coeff @angle:c-c3-ss harmonic 78.090 111.580 # SOURCE3 5 1.9506
- angle_coeff @angle:cx-c3-cx harmonic 63.530 112.580 # SOURCE4 7 1.2211
- angle_coeff @angle:cx-c3-h1 harmonic 47.040 109.640 # SOURCE4 175 0.8822
- angle_coeff @angle:cx-c3-hc harmonic 46.920 110.200 # SOURCE4 356 0.8798
- angle_coeff @angle:cx-c3-hx harmonic 46.380 112.810 # SOURCE4 12 0.0977
- angle_coeff @angle:cx-c3-n3 harmonic 65.830 113.220 # SOURCE4 33 1.3978
- angle_coeff @angle:cx-c3-n4 harmonic 68.880 101.510 # SOURCE4 12 0.0760
- angle_coeff @angle:cx-c3-n harmonic 66.220 112.590 # SOURCE4 22 0.8034
- angle_coeff @angle:cx-c3-oh harmonic 68.100 109.970 # SOURCE4 25 1.3176
- angle_coeff @angle:cx-c3-os harmonic 68.400 108.160 # SOURCE4 26 1.0162
- angle_coeff @angle:cy-c3-h1 harmonic 47.000 107.880 # SOURCE4 162 0.9624
- angle_coeff @angle:cy-c3-hc harmonic 46.510 110.170 # SOURCE3 16 0.5693
- angle_coeff @angle:cy-c3-n3 harmonic 65.630 112.720 # SOURCE4 7 1.0639
- angle_coeff @angle:cy-c3-oh harmonic 67.220 111.560 # SOURCE4 138 0.5051
- angle_coeff @angle:cy-c3-os harmonic 68.450 106.790 # SOURCE4 5 1.0955
- angle_coeff @angle:f-c3-f harmonic 71.260 107.160 # SOURCE2 10 1.1324
- angle_coeff @angle:f-c3-h1 harmonic 51.570 107.850 # SOURCE3 14 0.9537
- angle_coeff @angle:f-c3-h2 harmonic 51.360 108.410 # SOURCE3 6 0.5081
- angle_coeff @angle:f-c3-h3 harmonic 51.050 110.010 # SOURCE4 19 0.6811
- angle_coeff @angle:f-c3-hc harmonic 51.330 108.920 # SOURCE2 5 3.0534
- angle_coeff @angle:f-c3-n2 harmonic 69.230 110.400 # SOURCE2 3 2.6470
- angle_coeff @angle:f-c3-os harmonic 70.660 110.610 # SOURCE4 45 1.1755
- angle_coeff @angle:f-c3-p5 harmonic 63.700 107.250 # SOURCE4 11 1.1735
- angle_coeff @angle:f-c3-s6 harmonic 81.220 109.670 # SOURCE4 24 0.4116
- angle_coeff @angle:f-c3-ss harmonic 78.640 111.890 # SOURCE4 11 0.9479
- angle_coeff @angle:h1-c3-h1 harmonic 39.180 109.550 # SOURCE3 1888 1.1205
- angle_coeff @angle:h1-c3-n1 harmonic 49.990 107.310 # HF/6-31G* 1
- angle_coeff @angle:h1-c3-n2 harmonic 49.260 109.610 # SOURCE3 63 1.0452
- angle_coeff @angle:h1-c3-n3 harmonic 49.390 109.920 # SOURCE3 313 1.1810
- angle_coeff @angle:h1-c3-n harmonic 49.820 109.320 # SOURCE3 91 1.0325
- angle_coeff @angle:h1-c3-na harmonic 49.900 109.450 # SOURCE3 53 0.9555
- angle_coeff @angle:h1-c3-nc harmonic 50.110 108.570 # SOURCE3 6 0.0764
- angle_coeff @angle:h1-c3-nd harmonic 50.110 108.570 # SOURCE3 6 same_as_h1-c3-nc
- angle_coeff @angle:h1-c3-nh harmonic 49.730 109.960 # SOURCE3 70 0.7000
- angle_coeff @angle:h1-c3-no harmonic 48.660 105.150 # SOURCE4 16 0.4950
- angle_coeff @angle:h1-c3-o harmonic 52.530 117.190 # SOURCE3 6 0.0003
- angle_coeff @angle:h1-c3-oh harmonic 50.970 109.880 # SOURCE3 63 1.3172
- angle_coeff @angle:h1-c3-os harmonic 50.840 108.820 # SOURCE3 541 0.8042
- angle_coeff @angle:h1-c3-p5 harmonic 42.870 107.990 # SOURCE4 72 1.1862
- angle_coeff @angle:h1-c3-s4 harmonic 54.280 108.660 # SOURCE3 201 0.3834
- angle_coeff @angle:h1-c3-s harmonic 52.120 112.600 # SOURCE3 6 0.0026
- angle_coeff @angle:h1-c3-s6 harmonic 55.510 108.110 # SOURCE3 160 0.5518
- angle_coeff @angle:h1-c3-sh harmonic 53.660 109.210 # SOURCE3 22 1.2028
- angle_coeff @angle:h1-c3-ss harmonic 53.660 109.340 # SOURCE3 356 0.6573
- angle_coeff @angle:h1-c3-sx harmonic 54.210 108.690 # SOURCE3 90 0.2749
- angle_coeff @angle:h1-c3-sy harmonic 55.250 108.090 # SOURCE3 93 0.2556
- angle_coeff @angle:h2-c3-h2 harmonic 39.000 109.190 # SOURCE3 29 3.1352
- angle_coeff @angle:h2-c3-i harmonic 38.690 104.990 # SOURCE3 2 0.0000
- angle_coeff @angle:h2-c3-n2 harmonic 49.080 110.220 # SOURCE3 6 0.2133
- angle_coeff @angle:h2-c3-n3 harmonic 49.370 109.800 # SOURCE4 189 1.2893
- angle_coeff @angle:h2-c3-n harmonic 50.220 107.380 # SOURCE4 258 1.3140
- angle_coeff @angle:h2-c3-na harmonic 50.270 107.660 # SOURCE3 6 1.4096
- angle_coeff @angle:h2-c3-nc harmonic 49.850 109.470 # SOURCE3 10 0.3133
- angle_coeff @angle:h2-c3-nd harmonic 49.850 109.470 # SOURCE3 10 same_as_h2-c3-nc
- angle_coeff @angle:h2-c3-nh harmonic 49.600 110.330 # SOURCE4 102 1.0596
- angle_coeff @angle:h2-c3-no harmonic 47.830 108.690 # SOURCE3 4 0.0000
- angle_coeff @angle:h2-c3-o harmonic 54.380 108.970 # SOURCE3 4 0.0000
- angle_coeff @angle:h2-c3-oh harmonic 51.290 108.300 # SOURCE3 6 0.5715
- angle_coeff @angle:h2-c3-os harmonic 50.840 108.580 # SOURCE3 44 1.2773
- angle_coeff @angle:h2-c3-s4 harmonic 54.330 108.580 # SOURCE3 8 0.2408
- angle_coeff @angle:h2-c3-s harmonic 53.560 106.750 # SOURCE3 4 0.0000
- angle_coeff @angle:h2-c3-s6 harmonic 55.940 106.540 # SOURCE4 27 0.9934
- angle_coeff @angle:h2-c3-sh harmonic 54.020 107.870 # SOURCE3 6 0.4376
- angle_coeff @angle:h2-c3-ss harmonic 53.590 109.750 # SOURCE3 10 0.3442
- angle_coeff @angle:h3-c3-n3 harmonic 49.730 108.390 # SOURCE4 12 1.7932
- angle_coeff @angle:h3-c3-nc harmonic 49.910 109.370 # SOURCE3 1 0.0000
- angle_coeff @angle:h3-c3-nd harmonic 49.910 109.370 # SOURCE3 1 same_as_h3-c3-nc
- angle_coeff @angle:h3-c3-nh harmonic 49.530 110.780 # SOURCE4 5 1.5993
- angle_coeff @angle:h3-c3-os harmonic 50.090 112.030 # SOURCE4 17 1.0957
- angle_coeff @angle:h3-c3-ss harmonic 53.680 109.270 # SOURCE4 8 0.8367
- angle_coeff @angle:hc-c3-hc harmonic 39.430 108.350 # SOURCE3 2380 0.9006
- angle_coeff @angle:hc-c3-i harmonic 38.620 104.990 # SOURCE3 1
- angle_coeff @angle:hc-c3-n2 harmonic 49.290 109.500 # SOURCE3 1
- angle_coeff @angle:hc-c3-n3 harmonic 49.420 109.800 # SOURCE2 5 2.0070
- angle_coeff @angle:hc-c3-n4 harmonic 49.010 107.900 # SOURCE3 1
- angle_coeff @angle:hc-c3-n harmonic 49.780 109.500 # SOURCE3 1
- angle_coeff @angle:hc-c3-na harmonic 49.900 109.500 # SOURCE3 1
- angle_coeff @angle:hc-c3-nh harmonic 49.380 111.540 # SOURCE3 1
- angle_coeff @angle:hc-c3-no harmonic 48.190 107.200 # SOURCE2 1 0.0000
- angle_coeff @angle:hc-c3-oh harmonic 51.070 109.500 # SOURCE3 1
- angle_coeff @angle:hc-c3-os harmonic 50.870 108.700 # SOURCE2 13 2.3739
- angle_coeff @angle:hc-c3-p2 harmonic 41.380 110.180 # SOURCE3 25 0.4057
- angle_coeff @angle:hc-c3-p3 harmonic 41.660 110.140 # SOURCE3 325 0.5126
- angle_coeff @angle:hc-c3-p4 harmonic 42.040 109.590 # SOURCE3 87 0.3196
- angle_coeff @angle:hc-c3-p5 harmonic 42.540 109.640 # SOURCE3 69 0.8112
- angle_coeff @angle:hc-c3-px harmonic 42.240 109.740 # SOURCE3 84 0.3474
- angle_coeff @angle:hc-c3-py harmonic 42.560 109.540 # SOURCE3 39 0.1999
- angle_coeff @angle:hc-c3-s4 harmonic 54.570 107.500 # SOURCE2 1 0.0000
- angle_coeff @angle:hc-c3-s6 harmonic 55.480 108.200 # SOURCE3 1
- angle_coeff @angle:hc-c3-sh harmonic 53.990 107.870 # SOURCE2 3 2.0981
- angle_coeff @angle:hc-c3-ss harmonic 53.800 108.760 # SOURCE2 3 1.6891
- angle_coeff @angle:hx-c3-hx harmonic 39.040 110.740 # SOURCE3 137 0.5531
- angle_coeff @angle:hx-c3-n4 harmonic 49.020 107.910 # SOURCE3 148 0.5899
- angle_coeff @angle:i-c3-i harmonic 61.980 113.120 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-c3-n1 harmonic 71.090 105.070 # HF/6-31G* 1
- angle_coeff @angle:n2-c3-n2 harmonic 69.890 107.700 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-c3-nh harmonic 69.260 111.060 # SOURCE4 5 0.7868
- angle_coeff @angle:n2-c3-oh harmonic 70.150 111.820 # SOURCE4 10 0.3451
- angle_coeff @angle:n2-c3-os harmonic 70.040 111.230 # SOURCE4 6 1.0463
- angle_coeff @angle:n3-c3-n3 harmonic 69.610 109.590 # SOURCE4 27 1.8125
- angle_coeff @angle:n3-c3-nc harmonic 68.790 113.290 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-c3-nd harmonic 68.790 113.290 # SOURCE3 1 same_as_n3-c3-nc
- angle_coeff @angle:n3-c3-nh harmonic 69.740 110.080 # SOURCE4 21 1.0686
- angle_coeff @angle:n3-c3-oh harmonic 70.710 110.630 # SOURCE4 20 1.0177
- angle_coeff @angle:n3-c3-os harmonic 71.150 108.330 # SOURCE4 17 1.9545
- angle_coeff @angle:n3-c3-p5 harmonic 64.440 109.510 # SOURCE4 10 1.5002
- angle_coeff @angle:n3-c3-ss harmonic 81.950 107.730 # SOURCE4 18 1.7621
- angle_coeff @angle:n4-c3-n4 harmonic 67.130 113.320 # SOURCE3 1 0.0000
- angle_coeff @angle:na-c3-na harmonic 69.060 113.490 # SOURCE3 1 0.0000
- angle_coeff @angle:na-c3-os harmonic 71.270 109.060 # SOURCE4 170 0.5450
- angle_coeff @angle:nc-c3-nc harmonic 69.960 110.610 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-c3-nh harmonic 69.340 112.430 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-c3-os harmonic 69.280 115.410 # SOURCE3 3 1.0288
- angle_coeff @angle:nd-c3-nd harmonic 69.960 110.610 # SOURCE3 1 same_as_nc-c3-nc
- angle_coeff @angle:nd-c3-nh harmonic 69.340 112.430 # SOURCE3 1 same_as_nc-c3-nh
- angle_coeff @angle:nd-c3-os harmonic 69.280 115.410 # SOURCE3 3 same_as_nc-c3-os
- angle_coeff @angle:nh-c3-nh harmonic 71.410 105.870 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-c3-oh harmonic 70.470 112.360 # SOURCE4 12 0.7775
- angle_coeff @angle:nh-c3-os harmonic 71.260 108.930 # SOURCE4 17 1.3775
- angle_coeff @angle:nh-c3-p5 harmonic 63.700 112.500 # SOURCE4 5 1.7371
- angle_coeff @angle:nh-c3-ss harmonic 81.670 108.880 # SOURCE4 8 2.1521
- angle_coeff @angle:n-c3-n2 harmonic 68.820 112.340 # SOURCE4 5 1.1443
- angle_coeff @angle:n-c3-n3 harmonic 69.390 111.030 # SOURCE4 15 1.8216
- angle_coeff @angle:n-c3-n harmonic 68.780 113.810 # SOURCE3 1 0.0000
- angle_coeff @angle:n-c3-nh harmonic 70.540 108.340 # SOURCE4 11 2.1727
- angle_coeff @angle:n-c3-oh harmonic 70.360 112.540 # SOURCE4 31 1.1295
- angle_coeff @angle:no-c3-no harmonic 68.370 104.470 # SOURCE4 5 0.9726
- angle_coeff @angle:n-c3-os harmonic 71.140 109.160 # SOURCE4 153 0.8778
- angle_coeff @angle:n-c3-p5 harmonic 64.380 110.050 # SOURCE4 5 1.2965
- angle_coeff @angle:oh-c3-oh harmonic 72.710 109.230 # SOURCE4 8 1.4978
- angle_coeff @angle:oh-c3-os harmonic 72.380 109.210 # SOURCE4 85 1.1964
- angle_coeff @angle:oh-c3-p5 harmonic 65.440 108.860 # SOURCE4 33 1.2025
- angle_coeff @angle:oh-c3-sh harmonic 80.110 115.460 # SOURCE3 1 0.0000
- angle_coeff @angle:o-c3-o harmonic 74.430 122.300 # SOURCE3 1 0.0000
- angle_coeff @angle:os-c3-os harmonic 71.720 110.240 # SOURCE3 17 2.1340
- angle_coeff @angle:os-c3-p5 harmonic 65.470 108.360 # SOURCE4 22 2.1937
- angle_coeff @angle:os-c3-ss harmonic 82.720 107.980 # SOURCE4 20 1.7464
- angle_coeff @angle:p2-c3-p2 harmonic 61.280 110.480 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-c3-p3 harmonic 61.730 110.160 # SOURCE3 1 0.0000
- angle_coeff @angle:p5-c3-p5 harmonic 62.800 110.130 # SOURCE4 33 2.4116
- angle_coeff @angle:p5-c3-ss harmonic 78.880 111.300 # SOURCE4 5 2.0560
- angle_coeff @angle:s4-c3-s4 harmonic 99.950 112.290 # SOURCE3 2 1.2724
- angle_coeff @angle:s4-c3-s6 harmonic 100.300 113.520 # SOURCE3 1
- angle_coeff @angle:s6-c3-s6 harmonic 102.050 111.750 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-c3-sh harmonic 97.420 116.260 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-c3-ss harmonic 99.850 110.730 # SOURCE3 1
- angle_coeff @angle:s-c3-s harmonic 93.400 123.350 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-c3-ss harmonic 99.950 110.570 # SOURCE4 15 1.4311
- angle_coeff @angle:br-ca-br harmonic 67.310 117.600 # SOURCE3 1
- angle_coeff @angle:br-ca-ca harmonic 63.480 118.130 # SOURCE3 8 0.6041
- angle_coeff @angle:c1-ca-c1 harmonic 64.700 120.000 # SOURCE3 1
- angle_coeff @angle:c1-ca-ca harmonic 65.860 120.000 # SOURCE3 1
- angle_coeff @angle:c2-ca-c2 harmonic 62.950 120.000 # SOURCE3 1
- angle_coeff @angle:c2-ca-ca harmonic 64.690 120.600 # SOURCE3 1
- angle_coeff @angle:c3-ca-c2 harmonic 62.240 120.000 # SOURCE3 1
- angle_coeff @angle:c3-ca-c3 harmonic 62.410 116.800 # SOURCE3 1
- angle_coeff @angle:c3-ca-ca harmonic 63.840 120.630 # SOURCE3 60 0.7175
- angle_coeff @angle:c3-ca-cp harmonic 63.700 120.630 # SOURCE3 60 0.7175
- angle_coeff @angle:c3-ca-cq harmonic 63.590 120.630 # SOURCE3 60 0.7175
- angle_coeff @angle:c3-ca-na harmonic 66.590 118.780 # SOURCE4 59 1.1184
- angle_coeff @angle:c3-ca-nb harmonic 67.330 116.660 # SOURCE4 408 0.9380
- angle_coeff @angle:ca-ca-ca harmonic 67.180 119.970 # SOURCE3 1969 0.3480
- angle_coeff @angle:ca-ca-cc harmonic 65.990 120.100 # SOURCE3 103 0.3451
- angle_coeff @angle:ca-ca-cd harmonic 65.990 120.100 # SOURCE3 103 0.3451
- angle_coeff @angle:ca-ca-ce harmonic 64.880 120.660 # SOURCE3 14 0.1564
- angle_coeff @angle:ca-ca-cf harmonic 64.880 120.660 # SOURCE3 14 same_as_ca-ca-ce
- angle_coeff @angle:ca-ca-cg harmonic 65.900 120.050 # SOURCE3 6 0.2397
- angle_coeff @angle:ca-ca-ch harmonic 65.900 120.050 # SOURCE3 6 same_as_ca-ca-cg
- angle_coeff @angle:ca-ca-cl harmonic 62.920 119.400 # SOURCE4 2459 0.5283
- angle_coeff @angle:ca-ca-cp harmonic 67.240 119.070 # SOURCE3 14 2.3077
- angle_coeff @angle:ca-ca-cq harmonic 67.090 119.070 # SOURCE3 14 2.3077
- angle_coeff @angle:ca-ca-cx harmonic 64.480 120.830 # SOURCE4 71 1.3062
- angle_coeff @angle:ca-ca-cy harmonic 63.770 120.860 # SOURCE4 17 2.0287
- angle_coeff @angle:ca-ca-f harmonic 67.510 118.950 # SOURCE4 967 0.3369
- angle_coeff @angle:ca-ca-h4 harmonic 48.240 121.090 # SOURCE3 57 1.4696
- angle_coeff @angle:ca-ca-ha harmonic 48.460 120.010 # SOURCE3 2980 0.2511
- angle_coeff @angle:ca-ca-i harmonic 58.590 118.470 # SOURCE3 10 0.6181
- angle_coeff @angle:ca-ca-n1 harmonic 68.920 118.500 # HF/6-31G* 1
- angle_coeff @angle:ca-ca-n2 harmonic 70.950 119.570 # SOURCE3 1
- angle_coeff @angle:ca-ca-n4 harmonic 67.280 118.410 # SOURCE3 6 0.1691
- angle_coeff @angle:ca-ca-n harmonic 67.970 119.890 # SOURCE3 18 0.2095
- angle_coeff @angle:ca-ca-na harmonic 70.210 118.340 # SOURCE3 54 3.6168
- angle_coeff @angle:ca-ca-nb harmonic 69.160 122.630 # SOURCE3 83 1.1249
- angle_coeff @angle:ca-ca-nc harmonic 70.140 119.720 # SOURCE3 22 3.3994
- angle_coeff @angle:ca-ca-nd harmonic 70.140 119.720 # SOURCE3 22 3.3994
- angle_coeff @angle:ca-ca-ne harmonic 67.740 119.880 # SOURCE3 24 0.3637
- angle_coeff @angle:ca-ca-nf harmonic 67.740 119.880 # SOURCE3 24 0.3637
- angle_coeff @angle:ca-ca-nh harmonic 69.340 120.130 # SOURCE3 193 0.6341
- angle_coeff @angle:ca-ca-no harmonic 66.880 119.540 # SOURCE3 10 1.3187
- angle_coeff @angle:ca-ca-o harmonic 71.850 123.290 # SOURCE4 11 1.2526
- angle_coeff @angle:ca-ca-oh harmonic 69.850 119.940 # SOURCE3 14 0.1627
- angle_coeff @angle:ca-ca-os harmonic 69.790 119.200 # SOURCE3 52 0.5240
- angle_coeff @angle:ca-ca-p2 harmonic 61.520 114.360 # SOURCE3 1
- angle_coeff @angle:ca-ca-p3 harmonic 60.320 120.730 # SOURCE3 6 0.1273
- angle_coeff @angle:ca-ca-p4 harmonic 60.930 120.300 # SOURCE3 1
- angle_coeff @angle:ca-ca-p5 harmonic 61.240 120.280 # SOURCE4 5 0.0177
- angle_coeff @angle:ca-ca-pe harmonic 60.250 120.450 # SOURCE3 20 0.2719
- angle_coeff @angle:ca-ca-pf harmonic 60.250 120.450 # SOURCE3 20 0.2719
- angle_coeff @angle:ca-ca-px harmonic 60.340 120.530 # SOURCE3 10 0.4509
- angle_coeff @angle:ca-ca-py harmonic 61.180 119.980 # SOURCE3 6 0.0670
- angle_coeff @angle:ca-ca-s4 harmonic 78.120 119.150 # SOURCE3 1
- angle_coeff @angle:ca-ca-s6 harmonic 78.690 120.540 # SOURCE4 36 1.2154
- angle_coeff @angle:ca-ca-s harmonic 78.750 122.550 # SOURCE3 4 0.0000
- angle_coeff @angle:ca-ca-sh harmonic 77.610 121.780 # SOURCE4 17 1.2849
- angle_coeff @angle:ca-ca-ss harmonic 78.500 119.930 # SOURCE3 16 0.3901
- angle_coeff @angle:ca-ca-sx harmonic 76.800 119.180 # SOURCE3 6 0.0434
- angle_coeff @angle:ca-ca-sy harmonic 78.020 119.890 # SOURCE3 24 1.8813
- angle_coeff @angle:c-ca-c3 harmonic 62.610 118.060 # SOURCE3 1
- angle_coeff @angle:c-ca-c harmonic 62.650 120.000 # SOURCE3 1
- angle_coeff @angle:c-ca-ca harmonic 64.640 120.140 # SOURCE3 40 0.4788
- angle_coeff @angle:cc-ca-cp harmonic 64.690 124.300 # SOURCE4 10 0.6423
- angle_coeff @angle:cc-ca-nb harmonic 69.060 118.450 # SOURCE4 35 1.6594
- angle_coeff @angle:cd-ca-nb harmonic 69.340 117.500 # SOURCE4 29 1.8623
- angle_coeff @angle:ce-ca-na harmonic 67.440 119.850 # SOURCE4 9 0.7001
- angle_coeff @angle:ce-ca-nb harmonic 68.300 117.380 # SOURCE4 32 0.6890
- angle_coeff @angle:cf-ca-nb harmonic 68.080 118.140 # SOURCE4 12 1.1775
- angle_coeff @angle:cg-ca-cp harmonic 65.330 121.530 # SOURCE4 12 0.1831
- angle_coeff @angle:c-ca-ha harmonic 46.510 115.900 # SOURCE3 1
- angle_coeff @angle:cl-ca-cl harmonic 62.630 118.720 # SOURCE3 1
- angle_coeff @angle:cl-ca-cp harmonic 62.600 120.310 # SOURCE4 18 0.5607
- angle_coeff @angle:cl-ca-nb harmonic 65.810 116.150 # SOURCE4 50 0.6047
- angle_coeff @angle:c-ca-nb harmonic 67.710 117.940 # SOURCE4 91 1.0536
- angle_coeff @angle:c-ca-nc harmonic 64.400 130.800 # SOURCE3 1
- angle_coeff @angle:c-ca-nd harmonic 64.400 130.800 # SOURCE3 1 same_as_c-ca-nc
- angle_coeff @angle:cp-ca-f harmonic 67.180 119.390 # SOURCE4 16 0.1724
- angle_coeff @angle:cp-ca-h4 harmonic 48.230 120.030 # SOURCE4 27 0.4431
- angle_coeff @angle:cp-ca-ha harmonic 48.030 121.080 # SOURCE3 12 1.7484
- angle_coeff @angle:cp-ca-na harmonic 73.000 108.790 # SOURCE4 165 0.5166
- angle_coeff @angle:cp-ca-nb harmonic 68.640 123.720 # SOURCE4 50 0.8176
- angle_coeff @angle:cp-ca-nh harmonic 68.740 121.520 # SOURCE4 11 0.5438
- angle_coeff @angle:cp-ca-oh harmonic 69.340 120.960 # SOURCE4 12 1.1400
- angle_coeff @angle:cp-ca-ss harmonic 80.870 112.750 # SOURCE4 8 0.6216
- angle_coeff @angle:cp-ca-sy harmonic 80.930 111.180 # SOURCE3 2 0.0000
- angle_coeff @angle:cq-ca-ha harmonic 47.860 121.080 # SOURCE3 12 1.7484
- angle_coeff @angle:cq-ca-sy harmonic 80.860 111.180 # SOURCE3 2 0.0000
- angle_coeff @angle:f-ca-f harmonic 68.050 117.500 # SOURCE3 1
- angle_coeff @angle:f-ca-nb harmonic 71.690 114.580 # SOURCE4 19 0.2987
- angle_coeff @angle:h4-ca-n harmonic 49.480 116.020 # SOURCE3 1
- angle_coeff @angle:h4-ca-na harmonic 51.880 114.650 # SOURCE3 5 1.5484
- angle_coeff @angle:h4-ca-nb harmonic 51.820 115.940 # SOURCE3 52 0.7370
- angle_coeff @angle:h4-ca-nc harmonic 51.460 118.360 # SOURCE3 1
- angle_coeff @angle:h4-ca-nd harmonic 51.460 118.360 # SOURCE3 1 same_as_h4-ca-nc
- angle_coeff @angle:h4-ca-os harmonic 52.300 111.150 # SOURCE3 1
- angle_coeff @angle:h4-ca-ss harmonic 53.660 116.190 # SOURCE3 1
- angle_coeff @angle:h5-ca-nb harmonic 51.760 116.350 # SOURCE3 30 0.5545
- angle_coeff @angle:h5-ca-nc harmonic 50.700 122.110 # SOURCE3 1
- angle_coeff @angle:h5-ca-nd harmonic 50.700 122.110 # SOURCE3 1 same_as_h5-ca-nc
- angle_coeff @angle:ha-ca-n2 harmonic 52.970 116.000 # SOURCE2 1 0.0000
- angle_coeff @angle:ha-ca-p2 harmonic 39.570 122.560 # SOURCE3 1
- angle_coeff @angle:i-ca-i harmonic 62.290 119.280 # SOURCE3 1
- angle_coeff @angle:n1-ca-n1 harmonic 70.730 117.030 # HF/6-31G* 1
- angle_coeff @angle:n2-ca-n2 harmonic 75.050 120.000 # SOURCE3 1
- angle_coeff @angle:n2-ca-na harmonic 73.800 119.600 # SOURCE3 1
- angle_coeff @angle:n4-ca-n4 harmonic 67.650 116.820 # SOURCE3 1
- angle_coeff @angle:na-ca-na harmonic 76.480 107.650 # SOURCE4 5 0.8751
- angle_coeff @angle:na-ca-nb harmonic 70.600 127.070 # SOURCE4 237 1.9392
- angle_coeff @angle:na-ca-nh harmonic 72.480 118.620 # SOURCE4 29 0.9759
- angle_coeff @angle:nb-ca-nb harmonic 70.780 127.190 # SOURCE4 585 1.1793
- angle_coeff @angle:nb-ca-nc harmonic 70.900 127.320 # SOURCE4 8 0.8052
- angle_coeff @angle:nb-ca-nd harmonic 71.250 126.080 # SOURCE4 14 0.9814
- angle_coeff @angle:nb-ca-nh harmonic 73.200 116.950 # SOURCE4 765 0.8040
- angle_coeff @angle:nb-ca-oh harmonic 73.570 117.300 # SOURCE4 64 0.9290
- angle_coeff @angle:nb-ca-os harmonic 72.540 119.660 # SOURCE4 76 0.6493
- angle_coeff @angle:nb-ca-sh harmonic 81.390 117.590 # SOURCE4 15 1.4616
- angle_coeff @angle:nb-ca-ss harmonic 81.120 119.300 # SOURCE4 41 1.3420
- angle_coeff @angle:nc-ca-nc harmonic 70.670 128.740 # SOURCE3 1
- angle_coeff @angle:nc-ca-nh harmonic 72.770 118.860 # SOURCE3 1
- angle_coeff @angle:nd-ca-nd harmonic 70.670 128.740 # SOURCE3 1 same_as_nc-ca-nc
- angle_coeff @angle:nd-ca-nh harmonic 72.770 118.860 # SOURCE3 1 same_as_nc-ca-nh
- angle_coeff @angle:nh-ca-nh harmonic 71.400 120.980 # SOURCE3 1
- angle_coeff @angle:n-ca-nc harmonic 69.660 123.860 # SOURCE3 1
- angle_coeff @angle:n-ca-nd harmonic 69.660 123.860 # SOURCE3 1 same_as_n-ca-nc
- angle_coeff @angle:n-ca-nh harmonic 71.290 116.160 # SOURCE3 1
- angle_coeff @angle:no-ca-no harmonic 67.420 117.140 # SOURCE3 1
- angle_coeff @angle:oh-ca-oh harmonic 72.630 120.000 # SOURCE3 1
- angle_coeff @angle:o-ca-o harmonic 78.210 126.820 # SOURCE3 1
- angle_coeff @angle:os-ca-os harmonic 74.010 113.730 # SOURCE3 1
- angle_coeff @angle:p2-ca-p2 harmonic 58.980 121.200 # SOURCE3 1
- angle_coeff @angle:p3-ca-p3 harmonic 59.440 121.460 # SOURCE3 1
- angle_coeff @angle:p5-ca-p5 harmonic 60.760 120.000 # SOURCE3 1
- angle_coeff @angle:s4-ca-s4 harmonic 104.060 105.810 # SOURCE3 1
- angle_coeff @angle:s6-ca-s6 harmonic 105.770 105.810 # SOURCE3 1
- angle_coeff @angle:sh-ca-sh harmonic 98.150 120.240 # SOURCE3 1
- angle_coeff @angle:s-ca-s harmonic 98.380 125.140 # SOURCE3 1
- angle_coeff @angle:ss-ca-ss harmonic 100.760 115.150 # SOURCE3 1
- angle_coeff @angle:br-c-br harmonic 66.910 113.100 # SOURCE3 1
- angle_coeff @angle:br-c-c3 harmonic 63.340 110.740 # SOURCE3 1 0.0000
- angle_coeff @angle:br-c-o harmonic 63.190 121.460 # SOURCE3 5 1.6264
- angle_coeff @angle:c1-c-c1 harmonic 65.090 115.320 # SOURCE3 1
- angle_coeff @angle:c1-c-o harmonic 69.920 122.340 # SOURCE3 1
- angle_coeff @angle:c2-c-c2 harmonic 67.170 116.780 # SOURCE3 1
- angle_coeff @angle:c2-c-ha harmonic 48.650 115.950 # SOURCE3 1
- angle_coeff @angle:c2-c-o harmonic 72.770 119.120 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-c-s harmonic 81.850 119.160 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-c-c3 harmonic 62.820 116.050 # SOURCE3 11 1.0986
- angle_coeff @angle:c3-c-ca harmonic 62.590 118.540 # SOURCE4 240 1.3614
- angle_coeff @angle:c3-c-cc harmonic 63.240 118.000 # SOURCE4 21 0.9834
- angle_coeff @angle:c3-c-cd harmonic 63.500 117.020 # SOURCE4 25 1.4755
- angle_coeff @angle:c3-c-ce harmonic 63.470 116.250 # SOURCE4 188 1.1613
- angle_coeff @angle:c3-c-cf harmonic 63.300 116.860 # SOURCE4 45 1.5859
- angle_coeff @angle:c3-c-cg harmonic 64.260 115.000 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-c-ch harmonic 64.260 115.000 # SOURCE2 1 same_as_c3-c-cg
- angle_coeff @angle:c3-c-cl harmonic 62.560 111.990 # SOURCE3 2 0.0125
- angle_coeff @angle:c3-c-f harmonic 66.930 110.700 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-c-h4 harmonic 46.110 114.400 # SOURCE4 57 0.4032
- angle_coeff @angle:c3-c-ha harmonic 46.010 115.220 # SOURCE3 15 0.3181
- angle_coeff @angle:c3-c-i harmonic 56.870 112.940 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-c-n2 harmonic 66.620 114.530 # SOURCE3 1
- angle_coeff @angle:c3-c-n4 harmonic 64.610 112.260 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-c-n harmonic 67.860 115.150 # SOURCE3 153 2.7443
- angle_coeff @angle:c3-c-ne harmonic 68.090 111.390 # SOURCE4 11 2.1430
- angle_coeff @angle:c3-c-nf harmonic 67.430 113.380 # SOURCE3 1 same_as_c3-c-ne
- angle_coeff @angle:c3-c-o harmonic 68.030 123.110 # SOURCE3 267 3.0977
- angle_coeff @angle:c3-c-oh harmonic 69.840 112.200 # SOURCE3 14 1.8324
- angle_coeff @angle:c3-c-os harmonic 69.260 111.960 # SOURCE3 15 2.3072
- angle_coeff @angle:c3-c-p3 harmonic 58.900 116.420 # SOURCE3 3 0.1291
- angle_coeff @angle:c3-c-p5 harmonic 58.320 118.900 # SOURCE3 1
- angle_coeff @angle:c3-c-pe harmonic 58.620 114.850 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-c-pf harmonic 58.620 114.850 # SOURCE3 1 same_as_c3-c-pe
- angle_coeff @angle:c3-c-px harmonic 58.600 115.600 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-c-py harmonic 58.850 118.160 # SOURCE3 3 1.0735
- angle_coeff @angle:c3-c-s4 harmonic 75.480 114.790 # SOURCE3 1
- angle_coeff @angle:c3-c-s6 harmonic 75.500 114.720 # SOURCE3 1
- angle_coeff @angle:c3-c-s harmonic 78.510 123.730 # SOURCE3 9 1.4528
- angle_coeff @angle:c3-c-sh harmonic 78.430 114.210 # SOURCE3 3 2.3916
- angle_coeff @angle:c3-c-ss harmonic 78.990 114.320 # SOURCE3 5 2.7478
- angle_coeff @angle:c3-c-sx harmonic 75.280 113.970 # SOURCE3 3 0.0610
- angle_coeff @angle:c3-c-sy harmonic 75.800 114.280 # SOURCE3 3 0.7341
- angle_coeff @angle:ca-c-ca harmonic 63.030 118.580 # SOURCE4 144 2.1146
- angle_coeff @angle:ca-c-cc harmonic 64.370 115.570 # SOURCE4 175 1.7981
- angle_coeff @angle:ca-c-cd harmonic 63.940 117.130 # SOURCE4 82 1.7238
- angle_coeff @angle:ca-c-ce harmonic 63.290 118.610 # SOURCE4 30 1.3375
- angle_coeff @angle:ca-c-cf harmonic 62.800 120.470 # SOURCE4 6 1.3008
- angle_coeff @angle:ca-c-h4 harmonic 46.520 115.140 # SOURCE4 30 0.7320
- angle_coeff @angle:ca-c-ha harmonic 46.800 114.120 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-c-n harmonic 68.470 115.140 # SOURCE4 571 1.4648
- angle_coeff @angle:ca-c-ne harmonic 67.750 114.390 # SOURCE4 5 0.2958
- angle_coeff @angle:ca-c-o harmonic 68.670 123.440 # SOURCE3 18 2.5574
- angle_coeff @angle:ca-c-oh harmonic 70.110 113.440 # SOURCE4 222 0.8421
- angle_coeff @angle:ca-c-os harmonic 68.780 115.540 # SOURCE3 5 2.6708
- angle_coeff @angle:ca-c-s harmonic 79.130 123.040 # SOURCE4 12 0.7935
- angle_coeff @angle:ca-c-sh harmonic 77.270 118.630 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-c-ss harmonic 79.040 115.130 # SOURCE4 12 1.0069
- angle_coeff @angle:br-cc-c harmonic 63.980 115.680 # SOURCE4 8 0.4970
- angle_coeff @angle:br-cc-cc harmonic 61.820 124.890 # SOURCE4 8 1.9479
- angle_coeff @angle:br-cc-cd harmonic 62.260 124.560 # SOURCE4 32 2.4696
- angle_coeff @angle:br-cc-na harmonic 64.600 121.420 # SOURCE4 6 0.5507
- angle_coeff @angle:c2-cc-c3 harmonic 63.270 126.110 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-cc-ca harmonic 65.400 124.420 # SOURCE4 15 1.7107
- angle_coeff @angle:c2-cc-cc harmonic 66.340 121.390 # SOURCE4 29 2.2566
- angle_coeff @angle:c2-cc-cd harmonic 69.090 117.020 # SOURCE3 2 0.0703
- angle_coeff @angle:c2-cc-ha harmonic 48.690 122.720 # SOURCE3 2 0.0092
- angle_coeff @angle:c2-cc-n harmonic 67.740 126.900 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-cc-os harmonic 70.020 121.060 # SOURCE4 11 0.8179
- angle_coeff @angle:c-c-c3 harmonic 61.720 116.860 # SOURCE3 5 0.1653
- angle_coeff @angle:c3-cc-ca harmonic 61.830 126.430 # SOURCE4 119 1.7751
- angle_coeff @angle:c3-cc-cc harmonic 64.660 115.970 # SOURCE3 4 3.0507
- angle_coeff @angle:c3-cc-cd harmonic 64.810 119.450 # SOURCE3 35 8.2040
- angle_coeff @angle:c3-cc-cf harmonic 65.450 117.840 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-cc-ha harmonic 45.110 121.520 # SOURCE3 32 3.2091
- angle_coeff @angle:c3-cc-n2 harmonic 65.940 126.280 # SOURCE4 8 2.1234
- angle_coeff @angle:c3-cc-n harmonic 66.540 118.360 # SOURCE4 53 2.1705
- angle_coeff @angle:c3-cc-na harmonic 65.440 122.990 # SOURCE4 477 1.5214
- angle_coeff @angle:c3-cc-nc harmonic 65.880 121.000 # SOURCE4 66 0.8247
- angle_coeff @angle:c3-cc-nd harmonic 65.890 123.750 # SOURCE4 275 1.8941
- angle_coeff @angle:c3-cc-os harmonic 67.480 117.090 # SOURCE4 127 0.9464
- angle_coeff @angle:c3-cc-ss harmonic 77.460 121.680 # SOURCE4 145 0.8647
- angle_coeff @angle:c-c-c harmonic 62.300 111.680 # SOURCE3 2 6.1226
- angle_coeff @angle:c-c-ca harmonic 61.730 118.340 # SOURCE4 26 1.0692
- angle_coeff @angle:ca-cc-cc harmonic 67.660 111.040 # SOURCE3 9 7.9455
- angle_coeff @angle:ca-cc-cd harmonic 68.230 113.510 # SOURCE3 26 7.4229
- angle_coeff @angle:ca-cc-ce harmonic 62.580 127.870 # SOURCE4 11 1.7579
- angle_coeff @angle:ca-cc-h4 harmonic 45.570 128.660 # SOURCE3 10 3.1167
- angle_coeff @angle:ca-cc-ha harmonic 46.400 124.040 # SOURCE3 34 3.6691
- angle_coeff @angle:ca-cc-n harmonic 68.240 118.420 # SOURCE4 17 2.2100
- angle_coeff @angle:ca-cc-nc harmonic 67.790 120.310 # SOURCE4 46 0.6711
- angle_coeff @angle:ca-cc-nd harmonic 67.840 123.280 # SOURCE4 182 2.3863
- angle_coeff @angle:ca-cc-nh harmonic 67.460 122.450 # SOURCE4 9 1.4092
- angle_coeff @angle:ca-cc-oh harmonic 70.020 116.510 # SOURCE4 12 1.7855
- angle_coeff @angle:ca-cc-os harmonic 69.540 116.090 # SOURCE4 58 2.0472
- angle_coeff @angle:ca-cc-ss harmonic 78.690 120.980 # SOURCE4 28 1.8865
- angle_coeff @angle:c-cc-c2 harmonic 65.620 120.880 # SOURCE4 21 1.5157
- angle_coeff @angle:c-cc-c3 harmonic 64.900 112.750 # SOURCE3 4 0.2063
- angle_coeff @angle:c-cc-c harmonic 63.420 121.160 # SOURCE4 48 0.7193
- angle_coeff @angle:c-c-cc harmonic 64.020 111.670 # SOURCE3 4 5.5146
- angle_coeff @angle:c-cc-ca harmonic 63.550 122.950 # SOURCE3 1 0.0000
- angle_coeff @angle:c-cc-cc harmonic 63.720 122.690 # SOURCE3 2 0.0000
- angle_coeff @angle:cc-c-cc harmonic 64.820 115.970 # SOURCE4 37 1.4486
- angle_coeff @angle:cc-cc-cc harmonic 67.880 110.700 # SOURCE3 54 3.4091
- angle_coeff @angle:cc-cc-cd harmonic 68.160 114.190 # SOURCE3 517 6.5960
- angle_coeff @angle:cc-cc-ce harmonic 63.140 126.050 # SOURCE4 10 2.3332
- angle_coeff @angle:cc-cc-cf harmonic 65.650 123.920 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-cc-cg harmonic 64.740 121.850 # SOURCE4 6 0.8146
- angle_coeff @angle:c-cc-cd harmonic 65.230 121.510 # SOURCE4 919 2.2603
- angle_coeff @angle:cc-c-cd harmonic 65.730 112.790 # SOURCE3 1 0.0000
- angle_coeff @angle:c-cc-ce harmonic 63.360 122.370 # SOURCE4 5 0.0254
- angle_coeff @angle:cc-c-ce harmonic 64.640 115.680 # SOURCE4 6 1.2033
- angle_coeff @angle:cc-cc-f harmonic 66.350 119.410 # SOURCE4 7 0.4917
- angle_coeff @angle:c-cc-cg harmonic 64.980 118.140 # SOURCE4 7 0.7745
- angle_coeff @angle:cc-cc-h4 harmonic 45.560 129.470 # SOURCE3 171 2.2734
- angle_coeff @angle:cc-cc-ha harmonic 47.460 119.260 # SOURCE4 506 1.6808
- angle_coeff @angle:c-cc-cl harmonic 62.790 116.010 # SOURCE4 19 0.9295
- angle_coeff @angle:cc-cc-n2 harmonic 69.460 121.150 # SOURCE3 6 0.4642
- angle_coeff @angle:cc-cc-n harmonic 67.950 119.890 # SOURCE3 36 0.2095
- angle_coeff @angle:cc-cc-na harmonic 72.210 106.800 # SOURCE3 33 0.6297
- angle_coeff @angle:cc-cc-nc harmonic 69.950 113.420 # SOURCE3 4 1.3957
- angle_coeff @angle:cc-cc-nd harmonic 71.150 112.560 # SOURCE3 141 4.2871
- angle_coeff @angle:cc-cc-nh harmonic 68.510 119.190 # SOURCE4 142 2.2114
- angle_coeff @angle:cc-cc-oh harmonic 69.230 119.670 # SOURCE4 10 2.3619
- angle_coeff @angle:cc-cc-os harmonic 69.380 117.090 # SOURCE4 99 2.4776
- angle_coeff @angle:cc-cc-pd harmonic 63.840 115.360 # SOURCE3 84 same_as_cd-cd-pc
- angle_coeff @angle:cc-cc-ss harmonic 80.780 115.020 # SOURCE3 2 0.0000
- angle_coeff @angle:cc-cc-sy harmonic 74.830 128.360 # SOURCE4 8 0.9813
- angle_coeff @angle:c-c-cd harmonic 64.020 111.670 # SOURCE3 4 5.5146
- angle_coeff @angle:cd-cc-cd harmonic 67.630 121.160 # SOURCE4 42 2.0764
- angle_coeff @angle:cd-cc-ce harmonic 63.480 129.500 # SOURCE4 139 2.1675
- angle_coeff @angle:cd-cc-cl harmonic 61.780 123.720 # SOURCE4 48 1.9010
- angle_coeff @angle:cd-cc-f harmonic 67.420 121.080 # SOURCE4 28 0.8788
- angle_coeff @angle:cd-cc-h4 harmonic 47.190 129.110 # SOURCE3 418 3.1355
- angle_coeff @angle:cd-cc-ha harmonic 48.350 122.890 # SOURCE3 584 2.9334
- angle_coeff @angle:cd-cc-n harmonic 70.720 115.520 # SOURCE3 52 1.3322
- angle_coeff @angle:cd-cc-na harmonic 72.910 109.420 # SOURCE3 265 2.6051
- angle_coeff @angle:cd-cc-nc harmonic 70.990 114.980 # SOURCE3 23 5.3935
- angle_coeff @angle:cd-cc-nh harmonic 68.380 125.040 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-cc-no harmonic 65.780 128.950 # SOURCE4 117 1.4740
- angle_coeff @angle:cd-cc-oh harmonic 69.580 124.030 # SOURCE4 59 1.2544
- angle_coeff @angle:cd-cc-os harmonic 69.960 120.300 # SOURCE3 64 5.4354
- angle_coeff @angle:cd-cc-ss harmonic 82.940 111.220 # SOURCE4 692 1.2683
- angle_coeff @angle:cd-cc-sy harmonic 76.410 125.160 # SOURCE4 19 1.1014
- angle_coeff @angle:ce-cc-na harmonic 66.420 124.140 # SOURCE4 40 1.5665
- angle_coeff @angle:ce-cc-nc harmonic 66.980 121.700 # SOURCE4 8 1.6500
- angle_coeff @angle:ce-cc-nd harmonic 67.220 123.910 # SOURCE4 11 1.1451
- angle_coeff @angle:ce-cc-os harmonic 68.210 119.170 # SOURCE4 59 0.7385
- angle_coeff @angle:ce-cc-ss harmonic 78.460 120.940 # SOURCE4 31 1.2422
- angle_coeff @angle:c-cc-f harmonic 66.160 116.870 # SOURCE4 16 0.5322
- angle_coeff @angle:cg-cc-na harmonic 67.510 122.350 # SOURCE4 5 0.8112
- angle_coeff @angle:cg-cc-ss harmonic 78.880 120.700 # SOURCE4 12 0.9090
- angle_coeff @angle:cc-c-h4 harmonic 47.130 115.450 # SOURCE4 5 0.8021
- angle_coeff @angle:c-cc-ha harmonic 46.990 117.020 # SOURCE3 56 1.9713
- angle_coeff @angle:cl-cc-na harmonic 63.840 121.610 # SOURCE4 12 0.3436
- angle_coeff @angle:cl-cc-nd harmonic 63.930 122.510 # SOURCE4 5 1.6568
- angle_coeff @angle:cl-cc-ss harmonic 79.050 119.850 # SOURCE4 11 1.0626
- angle_coeff @angle:c-cc-n2 harmonic 68.530 120.890 # SOURCE3 1 0.0000
- angle_coeff @angle:c-cc-n harmonic 68.110 116.330 # SOURCE4 20 1.9278
- angle_coeff @angle:cc-c-n harmonic 70.190 111.860 # SOURCE3 36 2.3407
- angle_coeff @angle:c-cc-nc harmonic 66.280 123.150 # SOURCE4 23 2.1612
- angle_coeff @angle:cc-c-nd harmonic 67.520 116.400 # SOURCE4 23 1.1407
- angle_coeff @angle:c-cc-nd harmonic 70.070 112.910 # SOURCE3 1 0.0000
- angle_coeff @angle:c-cc-ne harmonic 67.110 119.880 # SOURCE4 6 0.3139
- angle_coeff @angle:cc-c-o harmonic 68.910 125.710 # SOURCE3 66 2.4784
- angle_coeff @angle:c-cc-oh harmonic 70.150 113.450 # SOURCE4 35 1.3440
- angle_coeff @angle:cc-c-oh harmonic 71.160 112.580 # SOURCE4 50 0.7342
- angle_coeff @angle:c-cc-os harmonic 67.710 119.810 # SOURCE4 52 1.7157
- angle_coeff @angle:cc-c-os harmonic 70.500 112.300 # SOURCE3 6 2.7842
- angle_coeff @angle:cc-c-s harmonic 78.050 127.940 # SOURCE4 12 0.9342
- angle_coeff @angle:cc-c-ss harmonic 80.330 112.520 # SOURCE4 10 0.6933
- angle_coeff @angle:cx-cc-nd harmonic 65.680 127.750 # SOURCE4 12 1.7156
- angle_coeff @angle:cx-cc-os harmonic 68.010 118.080 # SOURCE4 10 0.0955
- angle_coeff @angle:cd-c-cd harmonic 64.770 116.170 # SOURCE4 19 1.1663
- angle_coeff @angle:cd-c-cx harmonic 63.880 117.460 # SOURCE4 13 0.1625
- angle_coeff @angle:cd-c-n harmonic 70.190 111.860 # SOURCE3 36 2.3407
- angle_coeff @angle:cd-c-nc harmonic 68.310 115.760 # SOURCE4 10 0.7131
- angle_coeff @angle:cd-c-nd harmonic 68.300 113.750 # SOURCE4 14 0.0860
- angle_coeff @angle:cd-c-o harmonic 68.910 125.710 # SOURCE3 66 2.4784
- angle_coeff @angle:cd-c-oh harmonic 70.770 113.840 # SOURCE4 35 1.1033
- angle_coeff @angle:cd-c-os harmonic 70.500 112.300 # SOURCE3 6 2.7842
- angle_coeff @angle:ce-c-ce harmonic 64.340 115.790 # SOURCE4 73 0.4467
- angle_coeff @angle:ce-c-cf harmonic 64.040 116.890 # SOURCE4 11 1.6021
- angle_coeff @angle:ce-c-cx harmonic 63.950 116.250 # SOURCE4 6 0.6351
- angle_coeff @angle:ce-c-h4 harmonic 46.930 114.880 # SOURCE4 19 0.3355
- angle_coeff @angle:ce-c-ha harmonic 46.930 115.220 # SOURCE3 7 2.4188
- angle_coeff @angle:ce-c-n harmonic 68.880 115.010 # SOURCE3 2 0.5478
- angle_coeff @angle:ce-c-o harmonic 69.270 122.920 # SOURCE3 17 3.5085
- angle_coeff @angle:ce-c-oh harmonic 70.250 114.300 # SOURCE4 94 1.5074
- angle_coeff @angle:ce-c-os harmonic 70.050 112.620 # SOURCE4 125 2.0061
- angle_coeff @angle:ce-c-s harmonic 81.120 117.800 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-c-ss harmonic 80.920 110.390 # SOURCE4 5 0.6050
- angle_coeff @angle:cf-c-cf harmonic 64.070 116.780 # SOURCE3 1 same_as_ce-c-ce
- angle_coeff @angle:cf-c-ha harmonic 46.930 115.220 # SOURCE3 7 same_as_ce-c-ha
- angle_coeff @angle:cf-c-n harmonic 68.800 115.290 # SOURCE4 30 1.1758
- angle_coeff @angle:cf-c-o harmonic 69.270 122.920 # SOURCE3 17 3.5085
- angle_coeff @angle:cf-c-oh harmonic 70.490 113.530 # SOURCE4 34 2.1382
- angle_coeff @angle:cf-c-os harmonic 70.720 110.510 # SOURCE4 24 0.9128
- angle_coeff @angle:cf-c-s harmonic 81.120 117.800 # SOURCE3 1 same_as_ce-c-s
- angle_coeff @angle:cg-c-cg harmonic 65.440 115.380 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-c-ha harmonic 47.800 113.900 # SOURCE2 1 0.0000
- angle_coeff @angle:cg-c-o harmonic 70.210 122.310 # SOURCE3 2 0.0000
- angle_coeff @angle:c-c-h4 harmonic 44.620 116.360 # SOURCE4 5 0.5586
- angle_coeff @angle:h4-cc-n harmonic 50.390 117.620 # SOURCE3 53 0.9721
- angle_coeff @angle:h4-cc-na harmonic 50.220 119.660 # SOURCE3 294 2.4702
- angle_coeff @angle:h4-cc-nc harmonic 50.000 120.030 # SOURCE3 16 2.3863
- angle_coeff @angle:h4-cc-nd harmonic 51.390 119.110 # SOURCE3 135 1.6946
- angle_coeff @angle:h4-cc-os harmonic 52.270 111.890 # SOURCE3 61 2.3500
- angle_coeff @angle:h4-cc-ss harmonic 54.360 117.750 # SOURCE3 40 3.1156
- angle_coeff @angle:h5-cc-n harmonic 50.870 115.610 # SOURCE4 10 0.8505
- angle_coeff @angle:h5-cc-na harmonic 49.760 122.100 # SOURCE3 16 1.4626
- angle_coeff @angle:h5-cc-nc harmonic 49.290 123.700 # SOURCE3 6 0.3547
- angle_coeff @angle:h5-cc-nd harmonic 50.130 125.380 # SOURCE3 40 2.2157
- angle_coeff @angle:h5-cc-os harmonic 51.300 116.330 # SOURCE3 12 3.2919
- angle_coeff @angle:h5-cc-ss harmonic 53.390 122.000 # SOURCE3 6 0.7237
- angle_coeff @angle:c-c-ha harmonic 44.850 115.430 # SOURCE2 3 0.6549
- angle_coeff @angle:ha-cc-na harmonic 49.820 121.500 # SOURCE2 1 0.0000
- angle_coeff @angle:ha-cc-nc harmonic 50.730 116.540 # SOURCE3 5 1.4482
- angle_coeff @angle:ha-cc-nd harmonic 51.410 118.880 # SOURCE3 20 2.8923
- angle_coeff @angle:ha-cc-os harmonic 52.490 110.860 # SOURCE3 7 1.3846
- angle_coeff @angle:ha-cc-pd harmonic 42.350 121.760 # SOURCE3 84 same_as_ha-cd-pc
- angle_coeff @angle:ha-cc-ss harmonic 53.490 121.640 # SOURCE2 5 1.3276
- angle_coeff @angle:ch-c-ch harmonic 65.440 115.380 # SOURCE3 1 same_as_cg-c-cg
- angle_coeff @angle:ch-c-ha harmonic 47.800 113.900 # SOURCE2 1 same_as_cg-c-ha
- angle_coeff @angle:ch-c-o harmonic 70.210 122.310 # SOURCE3 2 same_as_cg-c-o
- angle_coeff @angle:cl-c-cl harmonic 63.330 111.300 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-c-f harmonic 63.490 112.000 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-c-ha harmonic 43.460 109.900 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-c-o harmonic 64.280 121.510 # SOURCE3 6 1.6987
- angle_coeff @angle:cl-c-s harmonic 77.210 127.600 # SOURCE2 1 0.0000
- angle_coeff @angle:c-c-n harmonic 67.530 112.140 # SOURCE4 53 2.1247
- angle_coeff @angle:na-cc-nc harmonic 70.660 121.830 # SOURCE4 169 1.0340
- angle_coeff @angle:na-cc-nd harmonic 74.780 112.020 # SOURCE3 17 2.2434
- angle_coeff @angle:na-cc-no harmonic 68.480 124.900 # SOURCE4 48 0.7933
- angle_coeff @angle:na-cc-oh harmonic 73.310 117.260 # SOURCE4 16 0.9090
- angle_coeff @angle:na-cc-sx harmonic 80.050 117.040 # SOURCE4 13 0.4187
- angle_coeff @angle:na-cc-sy harmonic 79.760 120.550 # SOURCE4 7 1.7547
- angle_coeff @angle:n-cc-c harmonic 68.190 116.060 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-cc-nd harmonic 72.510 118.690 # SOURCE3 9 6.6642
- angle_coeff @angle:nc-cc-nh harmonic 72.700 115.660 # SOURCE4 12 1.0083
- angle_coeff @angle:nc-cc-no harmonic 69.310 121.540 # SOURCE4 7 0.9221
- angle_coeff @angle:nc-cc-ss harmonic 81.790 119.860 # SOURCE3 2 0.0000
- angle_coeff @angle:nd-cc-nd harmonic 70.880 128.170 # SOURCE4 7 0.0269
- angle_coeff @angle:nd-cc-ne harmonic 69.290 129.660 # SOURCE4 7 0.4306
- angle_coeff @angle:nd-cc-nh harmonic 72.410 120.110 # SOURCE3 5 0.9313
- angle_coeff @angle:nd-cc-no harmonic 69.900 122.680 # SOURCE4 16 0.3393
- angle_coeff @angle:nd-cc-oh harmonic 72.800 122.190 # SOURCE4 11 0.7091
- angle_coeff @angle:nd-cc-os harmonic 74.240 115.060 # SOURCE4 109 2.3512
- angle_coeff @angle:nd-cc-sh harmonic 79.410 124.920 # SOURCE4 5 0.9563
- angle_coeff @angle:nd-cc-ss harmonic 84.180 114.510 # SOURCE3 8 0.3449
- angle_coeff @angle:nd-cc-sx harmonic 76.960 127.600 # SOURCE4 14 1.1650
- angle_coeff @angle:nd-cc-sy harmonic 79.280 123.080 # SOURCE4 13 1.0531
- angle_coeff @angle:ne-cc-ss harmonic 82.750 116.990 # SOURCE4 7 0.1657
- angle_coeff @angle:nh-cc-nh harmonic 72.930 115.960 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-cc-os harmonic 72.780 117.270 # SOURCE4 13 0.7995
- angle_coeff @angle:nh-cc-ss harmonic 81.210 122.040 # SOURCE4 80 1.2781
- angle_coeff @angle:n-cc-n2 harmonic 74.770 114.480 # SOURCE4 15 2.3208
- angle_coeff @angle:n-cc-na harmonic 70.450 122.180 # SOURCE4 46 2.2856
- angle_coeff @angle:n-cc-nc harmonic 70.960 120.010 # SOURCE4 10 1.5583
- angle_coeff @angle:n-cc-nd harmonic 71.200 122.710 # SOURCE4 141 1.6659
- angle_coeff @angle:n-cc-nh harmonic 72.220 116.850 # SOURCE4 32 0.7619
- angle_coeff @angle:no-cc-os harmonic 71.010 117.590 # SOURCE4 62 0.2199
- angle_coeff @angle:no-cc-ss harmonic 80.690 121.100 # SOURCE4 10 0.0957
- angle_coeff @angle:n-cc-ss harmonic 80.680 123.050 # SOURCE4 38 1.0101
- angle_coeff @angle:c-c-o harmonic 67.160 120.990 # SOURCE4 233 2.0333
- angle_coeff @angle:c-c-oh harmonic 68.200 113.230 # SOURCE3 5 0.5615
- angle_coeff @angle:c-c-os harmonic 68.180 111.390 # SOURCE4 14 0.4038
- angle_coeff @angle:os-cc-ss harmonic 78.460 132.010 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-cc-ss harmonic 100.050 121.280 # SOURCE4 20 2.4461
- angle_coeff @angle:ss-cc-sy harmonic 98.380 121.770 # SOURCE4 20 0.4970
- angle_coeff @angle:cx-c-cx harmonic 85.450 64.600 # SOURCE2 1 0.0000
- angle_coeff @angle:cx-c-n harmonic 68.690 114.490 # SOURCE4 23 1.4914
- angle_coeff @angle:cx-c-o harmonic 68.880 122.820 # SOURCE4 97 2.2075
- angle_coeff @angle:cx-c-oh harmonic 70.490 112.320 # SOURCE4 10 0.6413
- angle_coeff @angle:cx-c-os harmonic 70.060 111.480 # SOURCE4 16 1.3998
- angle_coeff @angle:cy-c-cy harmonic 70.140 90.550 # SOURCE2 2 2.4500
- angle_coeff @angle:cy-c-n harmonic 75.430 91.540 # SOURCE4 249 0.5104
- angle_coeff @angle:cy-c-o harmonic 64.270 135.040 # SOURCE4 253 1.3450
- angle_coeff @angle:cy-c-oh harmonic 69.090 112.480 # SOURCE4 5 1.0793
- angle_coeff @angle:cy-c-os harmonic 74.550 94.890 # SOURCE4 8 0.6016
- angle_coeff @angle:c2-cd-c3 harmonic 63.270 126.110 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-cd-ca harmonic 64.430 128.220 # SOURCE3 1 same_as_c2-cc-ca
- angle_coeff @angle:c2-cd-cc harmonic 69.090 117.020 # SOURCE3 2 same_as_c2-cc-cd
- angle_coeff @angle:c2-cd-cd harmonic 65.270 125.410 # SOURCE3 3 2.0867
- angle_coeff @angle:c2-cd-ha harmonic 48.690 122.720 # SOURCE3 2 same_as_c2-cc-ha
- angle_coeff @angle:c2-cd-n harmonic 67.740 126.900 # SOURCE3 1 same_as_c2-cc-n
- angle_coeff @angle:c2-cd-os harmonic 70.530 119.310 # SOURCE3 2 same_as_c2-cc-os
- angle_coeff @angle:c3-cd-ca harmonic 64.050 117.810 # SOURCE3 8 same_as_c3-cc-ca
- angle_coeff @angle:c3-cd-cc harmonic 64.810 119.450 # SOURCE3 35 8.2040
- angle_coeff @angle:c3-cd-cd harmonic 64.660 115.970 # SOURCE3 4 3.0507
- angle_coeff @angle:c3-cd-ce harmonic 65.260 117.840 # SOURCE3 1 same_as_c3-cc-cf
- angle_coeff @angle:c3-cd-ha harmonic 45.110 121.520 # SOURCE3 32 3.2091
- angle_coeff @angle:c3-cd-n2 harmonic 64.650 131.550 # SOURCE3 1 same_as_c3-cc-n2
- angle_coeff @angle:c3-cd-n harmonic 65.600 121.760 # SOURCE4 15 1.7884
- angle_coeff @angle:c3-cd-na harmonic 65.670 122.140 # SOURCE4 155 1.5600
- angle_coeff @angle:c3-cd-nc harmonic 66.940 119.910 # SOURCE4 200 1.6430
- angle_coeff @angle:c3-cd-nd harmonic 65.900 120.920 # SOURCE4 243 0.8832
- angle_coeff @angle:c3-cd-os harmonic 67.630 116.540 # SOURCE4 76 0.6353
- angle_coeff @angle:c3-cd-ss harmonic 77.510 121.530 # SOURCE4 26 1.4478
- angle_coeff @angle:ca-cd-cc harmonic 68.230 113.510 # SOURCE3 26 7.4229
- angle_coeff @angle:ca-cd-cd harmonic 67.660 111.040 # SOURCE3 9 7.9455
- angle_coeff @angle:ca-cd-ce harmonic 65.000 125.100 # SOURCE4 9 1.9265
- angle_coeff @angle:ca-cd-h4 harmonic 45.570 128.660 # SOURCE3 10 3.1167
- angle_coeff @angle:ca-cd-ha harmonic 46.400 124.040 # SOURCE3 34 3.6691
- angle_coeff @angle:ca-cd-n harmonic 72.510 104.870 # SOURCE3 1 same_as_ca-cc-n
- angle_coeff @angle:ca-cd-na harmonic 67.030 123.450 # SOURCE4 39 1.9138
- angle_coeff @angle:ca-cd-nc harmonic 70.230 115.050 # SOURCE3 6 4.3938
- angle_coeff @angle:ca-cd-nd harmonic 67.650 120.810 # SOURCE4 116 1.2165
- angle_coeff @angle:ca-cd-oh harmonic 69.080 119.320 # SOURCE4 9 1.2731
- angle_coeff @angle:ca-cd-os harmonic 70.040 114.450 # SOURCE4 76 2.2248
- angle_coeff @angle:ca-cd-ss harmonic 79.130 119.640 # SOURCE4 15 1.8842
- angle_coeff @angle:c-cd-c2 harmonic 65.380 121.760 # SOURCE3 1 same_as_c-cc-c2
- angle_coeff @angle:c-cd-c3 harmonic 63.560 117.570 # SOURCE4 122 1.4868
- angle_coeff @angle:c-cd-c harmonic 63.410 121.180 # SOURCE4 16 1.9017
- angle_coeff @angle:c-cd-ca harmonic 63.550 122.950 # SOURCE3 1 same_as_c-cc-ca
- angle_coeff @angle:c-cd-cc harmonic 65.280 121.320 # SOURCE4 789 2.4126
- angle_coeff @angle:cc-cd-cc harmonic 68.010 119.800 # SOURCE4 91 1.1370
- angle_coeff @angle:cc-cd-cd harmonic 68.160 114.190 # SOURCE3 517 6.5960
- angle_coeff @angle:cc-cd-cf harmonic 64.080 126.280 # SOURCE4 71 2.2936
- angle_coeff @angle:cc-cd-ch harmonic 64.920 126.050 # SOURCE4 30 1.4695
- angle_coeff @angle:cc-cd-cl harmonic 61.810 123.620 # SOURCE4 14 1.9282
- angle_coeff @angle:cc-cd-cy harmonic 63.930 122.130 # SOURCE4 10 0.8509
- angle_coeff @angle:c-cd-cd harmonic 63.720 122.690 # SOURCE3 2 0.0000
- angle_coeff @angle:c-cd-cf harmonic 63.000 123.100 # SOURCE4 5 2.3108
- angle_coeff @angle:cc-cd-h4 harmonic 47.190 129.110 # SOURCE3 418 3.1355
- angle_coeff @angle:cc-cd-ha harmonic 48.350 122.890 # SOURCE3 584 2.9334
- angle_coeff @angle:c-cd-cl harmonic 62.750 116.190 # SOURCE4 5 1.0839
- angle_coeff @angle:cc-cd-n harmonic 70.720 115.520 # SOURCE3 52 1.3322
- angle_coeff @angle:cc-cd-na harmonic 72.910 109.420 # SOURCE3 265 2.6051
- angle_coeff @angle:cc-cd-nc harmonic 69.420 123.820 # SOURCE4 14 0.3678
- angle_coeff @angle:cc-cd-nd harmonic 72.030 111.680 # SOURCE4 1078 1.9168
- angle_coeff @angle:cc-cd-nh harmonic 68.700 123.880 # SOURCE4 105 2.2114
- angle_coeff @angle:cc-cd-oh harmonic 69.540 123.710 # SOURCE4 47 1.3029
- angle_coeff @angle:cc-cd-os harmonic 69.960 120.300 # SOURCE3 64 5.4354
- angle_coeff @angle:cc-cd-ss harmonic 82.380 112.740 # SOURCE4 192 2.2341
- angle_coeff @angle:cc-cd-sy harmonic 76.890 124.690 # SOURCE4 22 0.6891
- angle_coeff @angle:cd-cd-cd harmonic 67.880 110.700 # SOURCE3 54 3.4091
- angle_coeff @angle:cd-cd-ce harmonic 65.800 122.560 # SOURCE4 38 1.7758
- angle_coeff @angle:cd-cd-cf harmonic 62.580 127.560 # SOURCE4 32 2.4879
- angle_coeff @angle:cd-cd-ch harmonic 63.320 127.380 # SOURCE4 21 0.9462
- angle_coeff @angle:cd-cd-cy harmonic 63.170 120.930 # SOURCE4 6 1.2205
- angle_coeff @angle:cd-cd-h4 harmonic 45.560 129.470 # SOURCE3 171 2.2734
- angle_coeff @angle:cd-cd-ha harmonic 47.020 121.510 # SOURCE4 1245 2.1421
- angle_coeff @angle:cd-cd-n2 harmonic 69.520 121.150 # SOURCE3 6 0.4642
- angle_coeff @angle:cd-cd-n harmonic 67.950 119.890 # SOURCE3 36 0.2095
- angle_coeff @angle:cd-cd-na harmonic 72.210 106.800 # SOURCE3 33 same_as_cc-cc-na
- angle_coeff @angle:cd-cd-nc harmonic 71.150 112.560 # SOURCE3 141 4.2871
- angle_coeff @angle:cd-cd-nd harmonic 67.440 122.020 # SOURCE4 101 2.1232
- angle_coeff @angle:cd-cd-nh harmonic 68.260 120.050 # SOURCE4 86 1.2878
- angle_coeff @angle:cd-cd-oh harmonic 68.090 123.300 # SOURCE4 17 2.3237
- angle_coeff @angle:cd-cd-os harmonic 69.300 117.360 # SOURCE4 112 1.9292
- angle_coeff @angle:cd-cd-pc harmonic 63.840 115.360 # SOURCE3 84 3.2889
- angle_coeff @angle:cd-cd-ss harmonic 78.930 120.470 # SOURCE4 29 1.6911
- angle_coeff @angle:ce-cd-nd harmonic 68.130 124.900 # SOURCE4 5 2.3975
- angle_coeff @angle:cf-cd-na harmonic 66.090 124.600 # SOURCE4 8 1.6033
- angle_coeff @angle:cf-cd-nc harmonic 67.940 120.490 # SOURCE4 26 1.3524
- angle_coeff @angle:cf-cd-nd harmonic 66.910 121.180 # SOURCE4 29 1.3143
- angle_coeff @angle:cf-cd-os harmonic 68.380 117.800 # SOURCE4 7 1.1308
- angle_coeff @angle:cf-cd-ss harmonic 77.470 123.670 # SOURCE4 7 1.5823
- angle_coeff @angle:c-cd-h4 harmonic 46.770 118.190 # SOURCE4 8 0.2226
- angle_coeff @angle:c-cd-ha harmonic 46.990 117.020 # SOURCE3 56 1.9713
- angle_coeff @angle:cl-cd-nc harmonic 63.230 125.300 # SOURCE3 1 same_as_cl-cc-nd
- angle_coeff @angle:c-cd-n2 harmonic 68.580 120.890 # SOURCE3 1 same_as_c-cc-n2
- angle_coeff @angle:c-cd-n harmonic 68.190 116.060 # SOURCE3 1 same_as_n-cc-c
- angle_coeff @angle:c-cd-nc harmonic 67.450 121.860 # SOURCE4 46 2.4699
- angle_coeff @angle:c-cd-nd harmonic 64.310 130.800 # SOURCE3 1 0.0000
- angle_coeff @angle:c-cd-oh harmonic 69.870 114.020 # SOURCE4 18 0.9546
- angle_coeff @angle:c-cd-os harmonic 68.070 118.550 # SOURCE4 26 2.1350
- angle_coeff @angle:h4-cd-n harmonic 50.390 117.620 # SOURCE3 53 0.9721
- angle_coeff @angle:h4-cd-na harmonic 50.220 119.660 # SOURCE3 294 2.4702
- angle_coeff @angle:h4-cd-nc harmonic 51.390 119.110 # SOURCE3 135 1.6946
- angle_coeff @angle:h4-cd-nd harmonic 50.000 120.030 # SOURCE3 16 2.3863
- angle_coeff @angle:h4-cd-os harmonic 52.270 111.890 # SOURCE3 61 2.3500
- angle_coeff @angle:h4-cd-ss harmonic 54.360 117.750 # SOURCE3 40 3.1156
- angle_coeff @angle:h5-cd-n harmonic 50.820 115.830 # SOURCE4 10 0.2888
- angle_coeff @angle:h5-cd-na harmonic 49.760 122.100 # SOURCE3 16 1.4626
- angle_coeff @angle:h5-cd-nc harmonic 50.130 125.380 # SOURCE3 40 2.2157
- angle_coeff @angle:h5-cd-nd harmonic 49.290 123.700 # SOURCE3 6 0.3547
- angle_coeff @angle:h5-cd-os harmonic 51.300 116.330 # SOURCE3 12 3.2919
- angle_coeff @angle:h5-cd-ss harmonic 53.390 122.000 # SOURCE3 6 0.7237
- angle_coeff @angle:ha-cd-na harmonic 49.820 121.500 # SOURCE2 1 same_as_ha-cc-na
- angle_coeff @angle:ha-cd-nc harmonic 51.410 118.880 # SOURCE3 20 2.8923
- angle_coeff @angle:ha-cd-nd harmonic 50.730 116.540 # SOURCE3 5 1.4482
- angle_coeff @angle:ha-cd-os harmonic 52.490 110.860 # SOURCE3 7 1.3846
- angle_coeff @angle:ha-cd-pc harmonic 42.350 121.760 # SOURCE3 84 2.2216
- angle_coeff @angle:ha-cd-ss harmonic 53.490 121.640 # SOURCE2 5 same_as_ha-cc-ss
- angle_coeff @angle:na-cd-nc harmonic 74.780 112.020 # SOURCE3 17 2.2434
- angle_coeff @angle:na-cd-nd harmonic 70.890 121.040 # SOURCE4 62 1.4580
- angle_coeff @angle:na-cd-nh harmonic 72.430 116.980 # SOURCE4 46 1.4937
- angle_coeff @angle:na-cd-ss harmonic 84.890 111.460 # SOURCE4 20 0.8600
- angle_coeff @angle:nc-cd-nd harmonic 73.390 115.840 # SOURCE4 213 1.4060
- angle_coeff @angle:nc-cd-nh harmonic 72.410 120.110 # SOURCE3 5 0.9313
- angle_coeff @angle:nc-cd-oh harmonic 73.040 120.890 # SOURCE4 11 1.5340
- angle_coeff @angle:nc-cd-os harmonic 73.420 117.640 # SOURCE4 100 1.8409
- angle_coeff @angle:nc-cd-ss harmonic 84.180 114.510 # SOURCE3 8 0.3449
- angle_coeff @angle:nd-cd-nd harmonic 69.470 125.580 # SOURCE4 13 0.4672
- angle_coeff @angle:nd-cd-nh harmonic 72.140 117.470 # SOURCE4 23 1.5450
- angle_coeff @angle:nd-cd-ss harmonic 81.790 119.860 # SOURCE3 2 same_as_nc-cc-ss
- angle_coeff @angle:nh-cd-nh harmonic 72.930 115.960 # SOURCE3 1 same_as_nh-cc-nh
- angle_coeff @angle:nh-cd-os harmonic 73.160 116.070 # SOURCE4 12 0.5342
- angle_coeff @angle:nh-cd-ss harmonic 81.480 121.220 # SOURCE4 11 1.1514
- angle_coeff @angle:n-cd-na harmonic 70.500 122.010 # SOURCE4 13 1.2061
- angle_coeff @angle:n-cd-nc harmonic 70.990 123.410 # SOURCE4 88 0.9565
- angle_coeff @angle:n-cd-nd harmonic 69.060 126.700 # SOURCE4 54 0.3231
- angle_coeff @angle:n-cd-nh harmonic 72.210 116.880 # SOURCE4 47 0.3458
- angle_coeff @angle:n-cd-ss harmonic 80.730 122.890 # SOURCE4 7 1.1978
- angle_coeff @angle:oh-cd-os harmonic 75.470 111.610 # SOURCE4 6 1.1909
- angle_coeff @angle:os-cd-ss harmonic 78.460 132.010 # SOURCE3 1 same_as_os-cc-ss
- angle_coeff @angle:ss-cd-ss harmonic 99.630 122.300 # SOURCE3 2 same_as_ss-cc-ss
- angle_coeff @angle:ss-cd-sy harmonic 98.720 121.620 # SOURCE4 19 0.4931
- angle_coeff @angle:c2-ce-c3 harmonic 64.300 122.890 # SOURCE3 7 1.0449
- angle_coeff @angle:c2-ce-ca harmonic 65.160 123.080 # SOURCE3 6 2.1589
- angle_coeff @angle:c2-ce-cc harmonic 65.550 123.840 # SOURCE4 49 2.1264
- angle_coeff @angle:c2-ce-ce harmonic 65.730 123.080 # SOURCE3 12 0.6518
- angle_coeff @angle:c2-ce-cg harmonic 66.680 121.580 # SOURCE4 18 1.3663
- angle_coeff @angle:c2-ce-cl harmonic 62.220 119.510 # SOURCE4 24 1.4963
- angle_coeff @angle:c2-ce-h4 harmonic 48.640 125.580 # SOURCE4 11 0.9381
- angle_coeff @angle:c2-ce-ha harmonic 49.560 121.100 # SOURCE3 46 2.4054
- angle_coeff @angle:c2-ce-n1 harmonic 72.730 117.850 # SOURCE4 7 0.3180
- angle_coeff @angle:c2-ce-n2 harmonic 70.340 128.700 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-ce-na harmonic 69.290 119.190 # SOURCE4 5 0.8452
- angle_coeff @angle:c2-ce-ne harmonic 69.730 118.320 # SOURCE3 7 1.0468
- angle_coeff @angle:c2-ce-oh harmonic 70.180 123.780 # SOURCE4 10 1.8182
- angle_coeff @angle:c2-ce-p2 harmonic 61.560 118.240 # SOURCE3 1
- angle_coeff @angle:c2-ce-pe harmonic 61.300 118.760 # SOURCE3 8 2.3984
- angle_coeff @angle:c2-ce-px harmonic 60.970 119.720 # SOURCE3 6 0.5213
- angle_coeff @angle:c2-ce-py harmonic 61.150 122.130 # SOURCE3 5 3.1367
- angle_coeff @angle:c2-ce-sx harmonic 78.010 119.870 # SOURCE3 5 0.8557
- angle_coeff @angle:c2-ce-sy harmonic 78.410 120.350 # SOURCE3 5 0.5401
- angle_coeff @angle:c3-ce-ca harmonic 62.810 119.110 # SOURCE4 127 1.8824
- angle_coeff @angle:c3-ce-cc harmonic 63.490 118.180 # SOURCE4 22 1.7743
- angle_coeff @angle:c3-ce-ce harmonic 63.910 116.590 # SOURCE4 175 1.6539
- angle_coeff @angle:c3-ce-cf harmonic 64.510 122.180 # SOURCE4 119 2.0632
- angle_coeff @angle:c3-ce-cg harmonic 63.790 118.480 # SOURCE4 8 1.4756
- angle_coeff @angle:c3-ce-n2 harmonic 66.940 122.640 # SOURCE4 76 2.0781
- angle_coeff @angle:c3-ce-nf harmonic 67.240 120.750 # SOURCE4 6 2.1938
- angle_coeff @angle:c3-ce-nh harmonic 65.740 119.900 # SOURCE4 5 0.9634
- angle_coeff @angle:ca-ce-ca harmonic 63.870 117.820 # SOURCE4 100 0.9790
- angle_coeff @angle:ca-ce-cc harmonic 64.120 118.640 # SOURCE4 12 0.8455
- angle_coeff @angle:ca-ce-ce harmonic 63.840 119.620 # SOURCE4 14 1.9171
- angle_coeff @angle:ca-ce-cf harmonic 64.090 127.310 # SOURCE4 132 1.9691
- angle_coeff @angle:ca-ce-cl harmonic 62.350 114.220 # SOURCE4 6 1.3164
- angle_coeff @angle:ca-ce-h4 harmonic 46.710 116.860 # SOURCE4 74 0.9179
- angle_coeff @angle:ca-ce-ha harmonic 47.080 115.120 # SOURCE4 210 1.0763
- angle_coeff @angle:ca-ce-n2 harmonic 68.510 120.720 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-ce-nf harmonic 67.770 122.500 # SOURCE4 11 2.3863
- angle_coeff @angle:ca-ce-nh harmonic 67.850 115.510 # SOURCE4 93 0.9284
- angle_coeff @angle:ca-ce-oh harmonic 68.500 117.180 # SOURCE4 5 0.5951
- angle_coeff @angle:ca-ce-os harmonic 68.570 115.580 # SOURCE4 8 1.0735
- angle_coeff @angle:ca-ce-ss harmonic 77.470 117.730 # SOURCE4 5 1.1596
- angle_coeff @angle:c-ce-c2 harmonic 65.820 120.420 # SOURCE3 13 1.8877
- angle_coeff @angle:c-ce-c3 harmonic 63.430 116.630 # SOURCE4 169 2.4309
- angle_coeff @angle:c-ce-c harmonic 62.550 122.540 # SOURCE4 22 1.3987
- angle_coeff @angle:c-ce-ca harmonic 63.790 117.980 # SOURCE4 8 1.5129
- angle_coeff @angle:cc-ce-cd harmonic 63.280 130.360 # SOURCE4 5 2.3402
- angle_coeff @angle:cc-ce-cf harmonic 65.060 125.790 # SOURCE4 39 1.5227
- angle_coeff @angle:c-ce-cd harmonic 63.740 126.070 # SOURCE3 1 same_as_c-cf-cc
- angle_coeff @angle:c-ce-ce harmonic 63.460 120.890 # SOURCE4 16 1.8719
- angle_coeff @angle:c-ce-cf harmonic 64.260 126.410 # SOURCE3 2 5.7847
- angle_coeff @angle:c-ce-cg harmonic 64.570 118.320 # SOURCE4 15 1.0595
- angle_coeff @angle:cc-ce-h4 harmonic 47.610 115.400 # SOURCE4 29 0.8744
- angle_coeff @angle:cc-ce-ha harmonic 47.630 115.360 # SOURCE4 66 0.9385
- angle_coeff @angle:c-ce-cl harmonic 62.010 115.400 # SOURCE4 6 1.0958
- angle_coeff @angle:cc-ce-n2 harmonic 68.910 121.690 # SOURCE4 52 2.2459
- angle_coeff @angle:cc-ce-nh harmonic 67.360 119.170 # SOURCE4 8 2.1378
- angle_coeff @angle:c-ce-cy harmonic 72.720 88.220 # SOURCE4 19 0.3234
- angle_coeff @angle:cd-ce-ce harmonic 65.140 122.940 # SOURCE4 6 0.3490
- angle_coeff @angle:cd-ce-ha harmonic 49.760 115.940 # SOURCE4 23 1.6379
- angle_coeff @angle:ce-ce-ce harmonic 64.550 118.740 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-ce-cf harmonic 65.490 124.050 # SOURCE4 166 1.7004
- angle_coeff @angle:ce-ce-cl harmonic 61.600 117.930 # SOURCE4 12 0.2639
- angle_coeff @angle:ce-ce-h4 harmonic 47.060 118.000 # SOURCE4 10 0.8551
- angle_coeff @angle:ce-ce-ha harmonic 47.500 115.900 # SOURCE3 12 0.4670
- angle_coeff @angle:ce-ce-n1 harmonic 66.840 127.150 # SOURCE3 2 same_as_cf-cf-n1
- angle_coeff @angle:ce-ce-n2 harmonic 68.520 123.000 # SOURCE3 2 0.0000
- angle_coeff @angle:ce-ce-oh harmonic 69.180 116.890 # SOURCE4 11 2.0380
- angle_coeff @angle:cf-ce-cg harmonic 66.060 123.940 # SOURCE4 21 1.4852
- angle_coeff @angle:cf-ce-cy harmonic 60.530 137.740 # SOURCE4 13 0.3952
- angle_coeff @angle:cf-ce-h4 harmonic 49.030 123.760 # SOURCE4 5 1.0909
- angle_coeff @angle:cf-ce-ha harmonic 50.180 118.290 # SOURCE4 299 1.3038
- angle_coeff @angle:cf-ce-n1 harmonic 72.090 120.030 # SOURCE4 6 1.9451
- angle_coeff @angle:cf-ce-n harmonic 72.630 108.180 # SOURCE4 54 0.5772
- angle_coeff @angle:cf-ce-nh harmonic 69.450 121.520 # SOURCE4 12 2.0106
- angle_coeff @angle:cf-ce-oh harmonic 70.830 121.620 # SOURCE4 12 0.5995
- angle_coeff @angle:cg-ce-cg harmonic 65.510 118.510 # SOURCE4 6 0.9614
- angle_coeff @angle:cg-ce-ha harmonic 47.910 116.610 # SOURCE4 12 0.3943
- angle_coeff @angle:cg-ce-n1 harmonic 69.540 119.500 # SOURCE2 1 0.0000
- angle_coeff @angle:cg-ce-n2 harmonic 69.590 121.430 # SOURCE4 6 0.8382
- angle_coeff @angle:c-ce-ha harmonic 46.590 117.260 # SOURCE3 11 2.7158
- angle_coeff @angle:c-ce-n harmonic 66.170 118.730 # SOURCE4 129 1.5548
- angle_coeff @angle:c-ce-nh harmonic 67.880 115.220 # SOURCE4 18 2.4886
- angle_coeff @angle:c-ce-oh harmonic 68.230 117.920 # SOURCE4 5 1.4580
- angle_coeff @angle:c-ce-os harmonic 69.050 113.780 # SOURCE4 21 1.8258
- angle_coeff @angle:h4-ce-n1 harmonic 52.650 116.360 # SOURCE4 7 0.2182
- angle_coeff @angle:h4-ce-n2 harmonic 52.370 121.520 # SOURCE4 105 1.2900
- angle_coeff @angle:h4-ce-ne harmonic 49.720 115.810 # SOURCE4 7 1.9836
- angle_coeff @angle:ha-ce-n1 harmonic 52.770 115.960 # SOURCE3 2 same_as_ha-cf-n1
- angle_coeff @angle:ha-ce-n2 harmonic 52.850 119.510 # SOURCE3 2 0.4623
- angle_coeff @angle:ha-ce-ne harmonic 49.160 118.590 # SOURCE3 5 1.1113
- angle_coeff @angle:ha-ce-nh harmonic 50.580 114.990 # SOURCE3 1 0.0000
- angle_coeff @angle:ha-ce-p2 harmonic 40.610 120.110 # SOURCE3 1
- angle_coeff @angle:ha-ce-pe harmonic 40.640 119.330 # SOURCE3 6 0.8966
- angle_coeff @angle:ha-ce-px harmonic 40.810 117.900 # SOURCE3 6 0.1809
- angle_coeff @angle:ha-ce-py harmonic 41.340 118.720 # SOURCE3 3 0.3064
- angle_coeff @angle:ha-ce-sx harmonic 52.960 115.450 # SOURCE3 3 0.6640
- angle_coeff @angle:ha-ce-sy harmonic 53.580 114.860 # SOURCE3 3 0.4717
- angle_coeff @angle:n2-ce-nh harmonic 71.550 124.860 # SOURCE4 83 2.0415
- angle_coeff @angle:n2-ce-os harmonic 74.520 118.130 # SOURCE4 6 0.1367
- angle_coeff @angle:n2-ce-ss harmonic 81.510 117.230 # SOURCE4 6 2.0518
- angle_coeff @angle:ne-ce-ne harmonic 68.070 123.870 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-ce-nh harmonic 71.870 112.910 # SOURCE4 12 1.1263
- angle_coeff @angle:nf-ce-nh harmonic 73.250 118.130 # SOURCE4 6 0.5842
- angle_coeff @angle:pe-ce-pe harmonic 57.690 129.790 # SOURCE3 1 0.0000
- angle_coeff @angle:py-ce-py harmonic 64.070 108.060 # SOURCE3 1 0.0000
- angle_coeff @angle:sx-ce-sx harmonic 97.090 120.320 # SOURCE3 1 0.0000
- angle_coeff @angle:sy-ce-sy harmonic 98.050 119.970 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-cf-c3 harmonic 64.300 122.890 # SOURCE3 7 same_as_c2-ce-c3
- angle_coeff @angle:c2-cf-ca harmonic 65.160 123.080 # SOURCE3 6 same_as_c2-ce-ca
- angle_coeff @angle:c2-cf-cd harmonic 65.810 122.050 # SOURCE4 23 1.7894
- angle_coeff @angle:c2-cf-cf harmonic 65.730 123.080 # SOURCE3 12 same_as_c2-ce-ce
- angle_coeff @angle:c2-cf-ch harmonic 66.510 122.220 # SOURCE3 3 same_as_c2-ce-cg
- angle_coeff @angle:c2-cf-ha harmonic 49.560 121.100 # SOURCE3 46 same_as_c2-ce-ha
- angle_coeff @angle:c2-cf-n2 harmonic 70.340 128.700 # SOURCE3 1 same_as_c2-ce-n2
- angle_coeff @angle:c2-cf-nf harmonic 69.730 118.320 # SOURCE3 7 same_as_c2-ce-ne
- angle_coeff @angle:c2-cf-p2 harmonic 61.560 118.240 # SOURCE3 1 same_as_c2-ce-p2
- angle_coeff @angle:c2-cf-pf harmonic 61.300 118.760 # SOURCE3 8 same_as_c2-ce-pe
- angle_coeff @angle:c2-cf-px harmonic 60.970 119.720 # SOURCE3 6 same_as_c2-ce-px
- angle_coeff @angle:c2-cf-py harmonic 61.150 122.130 # SOURCE3 5 same_as_c2-ce-py
- angle_coeff @angle:c2-cf-sx harmonic 78.010 119.870 # SOURCE3 5 same_as_c2-ce-sx
- angle_coeff @angle:c2-cf-sy harmonic 78.410 120.350 # SOURCE3 5 same_as_c2-ce-sy
- angle_coeff @angle:c3-cf-ca harmonic 62.650 119.700 # SOURCE4 51 1.2029
- angle_coeff @angle:c3-cf-cd harmonic 63.300 118.280 # SOURCE4 17 0.8680
- angle_coeff @angle:c3-cf-ce harmonic 64.550 122.030 # SOURCE4 102 1.9728
- angle_coeff @angle:c3-cf-cf harmonic 63.520 118.010 # SOURCE4 69 0.9443
- angle_coeff @angle:c3-cf-n2 harmonic 66.670 123.650 # SOURCE4 5 1.9155
- angle_coeff @angle:ca-cf-ca harmonic 64.500 115.530 # SOURCE4 12 0.5692
- angle_coeff @angle:ca-cf-cc harmonic 62.810 130.800 # SOURCE4 12 1.2696
- angle_coeff @angle:ca-cf-cd harmonic 64.490 116.650 # SOURCE4 5 0.8685
- angle_coeff @angle:ca-cf-ce harmonic 64.050 127.440 # SOURCE4 186 1.8735
- angle_coeff @angle:ca-cf-ha harmonic 47.060 115.210 # SOURCE4 135 0.9402
- angle_coeff @angle:ca-cf-n2 harmonic 68.510 120.720 # SOURCE3 1 same_as_ca-ce-n2
- angle_coeff @angle:ca-cf-ne harmonic 67.710 122.810 # SOURCE4 11 2.3913
- angle_coeff @angle:ca-cf-oh harmonic 69.220 115.690 # SOURCE4 6 0.8381
- angle_coeff @angle:c-cf-c2 harmonic 65.820 120.420 # SOURCE3 13 same_as_c-ce-c2
- angle_coeff @angle:c-cf-c3 harmonic 62.670 119.470 # SOURCE4 19 1.2665
- angle_coeff @angle:c-cf-c harmonic 63.510 118.850 # SOURCE3 1 same_as_c-ce-c
- angle_coeff @angle:c-cf-cc harmonic 63.930 126.070 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-cf-cf harmonic 64.530 126.040 # SOURCE4 6 1.0648
- angle_coeff @angle:c-cf-cd harmonic 64.140 117.760 # SOURCE4 10 1.2451
- angle_coeff @angle:c-cf-ce harmonic 64.260 126.410 # SOURCE3 2 same_as_c-ce-cf
- angle_coeff @angle:cc-cf-ha harmonic 50.290 114.810 # SOURCE4 16 0.9788
- angle_coeff @angle:cd-cf-ce harmonic 64.650 126.530 # SOURCE4 49 2.0998
- angle_coeff @angle:cd-cf-ha harmonic 47.360 115.570 # SOURCE4 47 0.8973
- angle_coeff @angle:cd-cf-n2 harmonic 69.140 120.020 # SOURCE4 17 2.4566
- angle_coeff @angle:ce-cf-cf harmonic 65.420 124.330 # SOURCE4 175 1.6942
- angle_coeff @angle:ce-cf-ch harmonic 66.150 123.630 # SOURCE4 20 1.3910
- angle_coeff @angle:ce-cf-ha harmonic 50.240 117.980 # SOURCE4 356 1.4772
- angle_coeff @angle:ce-cf-n harmonic 72.320 108.630 # SOURCE4 10 1.2271
- angle_coeff @angle:ce-cf-oh harmonic 71.100 121.930 # SOURCE4 12 1.6250
- angle_coeff @angle:cf-cf-cf harmonic 64.550 118.740 # SOURCE3 1 same_as_ce-ce-ce
- angle_coeff @angle:cf-cf-h4 harmonic 47.050 117.940 # SOURCE4 9 0.8559
- angle_coeff @angle:cf-cf-ha harmonic 47.500 115.900 # SOURCE3 12 0.4670
- angle_coeff @angle:cf-cf-n1 harmonic 66.650 127.150 # SOURCE3 2 2.1936
- angle_coeff @angle:cf-cf-n2 harmonic 69.760 118.660 # SOURCE4 11 1.2238
- angle_coeff @angle:c-cf-ha harmonic 46.590 117.260 # SOURCE3 11 2.7158
- angle_coeff @angle:ch-cf-ch harmonic 66.000 116.750 # SOURCE3 1 same_as_cg-ce-cg
- angle_coeff @angle:ch-cf-ha harmonic 47.950 116.400 # SOURCE4 6 0.3381
- angle_coeff @angle:ch-cf-n1 harmonic 69.330 119.500 # SOURCE2 1 same_as_cg-ce-n1
- angle_coeff @angle:c-cf-n2 harmonic 70.160 114.880 # SOURCE4 5 1.3647
- angle_coeff @angle:c-cf-n harmonic 66.600 116.790 # SOURCE4 8 0.8255
- angle_coeff @angle:c-cf-nh harmonic 65.940 122.760 # SOURCE3 1 same_as_c-ce-nh
- angle_coeff @angle:f-c-f harmonic 72.220 107.350 # SOURCE2 2 0.2500
- angle_coeff @angle:h4-cf-n2 harmonic 52.210 122.140 # SOURCE4 11 0.9297
- angle_coeff @angle:h4-cf-ne harmonic 52.280 120.210 # SOURCE4 6 0.8104
- angle_coeff @angle:ha-cf-n1 harmonic 52.480 115.960 # SOURCE3 2 3.5425
- angle_coeff @angle:ha-cf-n2 harmonic 52.850 119.510 # SOURCE3 2 same_as_ha-ce-n2
- angle_coeff @angle:ha-cf-nf harmonic 49.160 118.590 # SOURCE3 5 same_as_ha-ce-ne
- angle_coeff @angle:ha-cf-nh harmonic 50.850 114.990 # SOURCE3 1 same_as_ha-ce-nh
- angle_coeff @angle:ha-cf-p2 harmonic 40.610 120.110 # SOURCE3 1 same_as_ha-ce-p2
- angle_coeff @angle:ha-cf-pf harmonic 40.640 119.330 # SOURCE3 6 same_as_ha-ce-pe
- angle_coeff @angle:ha-cf-px harmonic 40.810 117.900 # SOURCE3 6 same_as_ha-ce-px
- angle_coeff @angle:ha-cf-py harmonic 41.340 118.720 # SOURCE3 3 same_as_ha-ce-py
- angle_coeff @angle:ha-cf-sx harmonic 52.960 115.450 # SOURCE3 3 same_as_ha-ce-sx
- angle_coeff @angle:ha-cf-sy harmonic 53.580 114.860 # SOURCE3 3 same_as_ha-ce-sy
- angle_coeff @angle:n2-cf-nh harmonic 71.540 125.890 # SOURCE4 9 1.5587
- angle_coeff @angle:nf-cf-nf harmonic 68.070 123.870 # SOURCE3 1 same_as_ne-ce-ne
- angle_coeff @angle:f-c-o harmonic 73.210 123.440 # SOURCE3 1
- angle_coeff @angle:pf-cf-pf harmonic 57.690 129.790 # SOURCE3 1 same_as_pe-ce-pe
- angle_coeff @angle:py-cf-py harmonic 64.070 108.060 # SOURCE3 1 same_as_py-ce-py
- angle_coeff @angle:f-c-s harmonic 80.250 124.000 # SOURCE2 1 0.0000
- angle_coeff @angle:sx-cf-sx harmonic 97.090 120.320 # SOURCE3 1 same_as_sx-ce-sx
- angle_coeff @angle:sy-cf-sy harmonic 98.050 119.970 # SOURCE3 1 same_as_sy-ce-sy
- angle_coeff @angle:c1-cg-ca harmonic 56.530 179.460 # SOURCE4 17 0.3461
- angle_coeff @angle:c1-cg-cc harmonic 56.970 178.600 # SOURCE4 6 0.3822
- angle_coeff @angle:c1-cg-ce harmonic 56.960 178.000 # SOURCE4 6 0.4324
- angle_coeff @angle:c1-cg-cg harmonic 58.180 179.660 # SOURCE4 16 0.1241
- angle_coeff @angle:c1-cg-ne harmonic 62.730 170.020 # SOURCE3 4 1.1724
- angle_coeff @angle:c1-cg-pe harmonic 56.730 173.290 # SOURCE3 11 4.9305
- angle_coeff @angle:ca-cg-ch harmonic 56.940 179.490 # SOURCE4 5 0.3022
- angle_coeff @angle:ca-cg-n1 harmonic 58.930 179.420 # SOURCE4 102 0.6923
- angle_coeff @angle:c-cg-c1 harmonic 56.190 179.140 # SOURCE3 2 0.0000
- angle_coeff @angle:cc-cg-n1 harmonic 59.440 178.460 # SOURCE4 24 0.7137
- angle_coeff @angle:ce-cg-ch harmonic 57.380 177.980 # SOURCE4 9 0.4223
- angle_coeff @angle:ce-cg-n1 harmonic 59.410 177.890 # SOURCE4 45 1.1337
- angle_coeff @angle:n1-cg-ne harmonic 65.040 174.070 # SOURCE4 14 1.2208
- angle_coeff @angle:h4-c-o harmonic 54.280 120.930 # SOURCE4 129 0.5769
- angle_coeff @angle:h5-c-n harmonic 52.390 112.190 # SOURCE4 33 0.4220
- angle_coeff @angle:h5-c-o harmonic 53.890 123.260 # SOURCE4 38 0.4806
- angle_coeff @angle:ha-c-ha harmonic 37.860 115.610 # SOURCE3 4 0.0458
- angle_coeff @angle:ha-c-i harmonic 36.710 110.580 # SOURCE3 1 0.0000
- angle_coeff @angle:ha-c-n harmonic 52.400 112.370 # SOURCE3 4 0.6424
- angle_coeff @angle:ha-c-o harmonic 54.270 121.940 # SOURCE3 51 2.3235
- angle_coeff @angle:ha-c-oh harmonic 53.970 111.820 # SOURCE3 4 1.9375
- angle_coeff @angle:ha-c-os harmonic 53.240 110.340 # SOURCE3 8 1.9344
- angle_coeff @angle:ha-c-s harmonic 56.030 119.560 # SOURCE3 3 0.7586
- angle_coeff @angle:c1-ch-ca harmonic 56.450 180.000 # SOURCE3 2 same_as_c1-cg-ca
- angle_coeff @angle:c1-ch-cf harmonic 56.900 178.320 # SOURCE3 1 same_as_c1-cg-ce
- angle_coeff @angle:c1-ch-ch harmonic 58.120 180.000 # SOURCE3 2 same_as_c1-cg-cg
- angle_coeff @angle:c1-ch-nf harmonic 62.730 170.020 # SOURCE3 4 same_as_c1-cg-ne
- angle_coeff @angle:c1-ch-pf harmonic 56.730 173.290 # SOURCE3 11 same_as_c1-cg-pe
- angle_coeff @angle:ca-ch-cg harmonic 56.900 179.740 # SOURCE4 8 0.2890
- angle_coeff @angle:ca-ch-n1 harmonic 58.830 180.000 # SOURCE3 1 same_as_ca-cg-n1
- angle_coeff @angle:c-ch-c1 harmonic 56.190 179.140 # SOURCE3 2 same_as_c-cg-c1
- angle_coeff @angle:cd-ch-n1 harmonic 59.410 178.620 # SOURCE4 26 0.2919
- angle_coeff @angle:cf-ch-cg harmonic 57.400 177.900 # SOURCE4 8 0.4883
- angle_coeff @angle:cf-ch-n1 harmonic 59.370 178.120 # SOURCE4 22 1.5200
- angle_coeff @angle:cg-ch-ch harmonic 58.680 179.670 # SOURCE4 7 0.1439
- angle_coeff @angle:n1-ch-nf harmonic 64.660 176.170 # SOURCE2 3 same_as_n1-cg-ne
- angle_coeff @angle:i-c-i harmonic 59.790 116.450 # SOURCE3 1 0.0000
- angle_coeff @angle:i-c-o harmonic 55.510 122.020 # SOURCE3 4 1.2961
- angle_coeff @angle:f-cl-f harmonic 50.000 87.500 # SOURCE2 1 estimated_force_constant
- angle_coeff @angle:n2-c-n2 harmonic 71.830 110.310 # SOURCE3 1
- angle_coeff @angle:n2-c-o harmonic 73.020 122.500 # SOURCE3 1
- angle_coeff @angle:n4-c-n4 harmonic 64.710 114.640 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-c-o harmonic 69.580 118.830 # SOURCE3 4 3.8516
- angle_coeff @angle:nc-c-o harmonic 74.050 123.980 # SOURCE4 66 0.9502
- angle_coeff @angle:nd-c-o harmonic 73.720 121.760 # SOURCE4 55 1.1138
- angle_coeff @angle:ne-c-ne harmonic 73.220 110.310 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-c-o harmonic 72.940 126.030 # SOURCE4 39 0.9885
- angle_coeff @angle:nf-c-nf harmonic 73.070 110.310 # SOURCE3 1 same_as_ne-c-ne
- angle_coeff @angle:nf-c-o harmonic 73.320 124.390 # SOURCE3 3 same_as_ne-c-o
- angle_coeff @angle:n-c-n harmonic 74.800 113.380 # SOURCE4 635 1.4358
- angle_coeff @angle:n-c-nc harmonic 72.690 117.050 # SOURCE4 54 0.7020
- angle_coeff @angle:n-c-nd harmonic 71.900 117.060 # SOURCE4 23 0.9856
- angle_coeff @angle:n-c-ne harmonic 74.440 110.370 # SOURCE4 10 1.7492
- angle_coeff @angle:n-c-o harmonic 75.830 122.030 # SOURCE3 221 2.3565
- angle_coeff @angle:n-c-oh harmonic 76.220 113.630 # SOURCE4 5 1.1209
- angle_coeff @angle:no-c-no harmonic 66.540 109.280 # SOURCE3 1
- angle_coeff @angle:no-c-o harmonic 67.950 125.360 # SOURCE3 1
- angle_coeff @angle:n-c-os harmonic 76.680 109.280 # SOURCE4 318 0.8749
- angle_coeff @angle:n-c-s harmonic 83.180 123.880 # SOURCE3 5 1.2935
- angle_coeff @angle:n-c-sh harmonic 83.030 112.610 # SOURCE4 8 1.2601
- angle_coeff @angle:n-c-ss harmonic 84.610 110.420 # SOURCE4 59 1.5507
- angle_coeff @angle:oh-c-oh harmonic 78.910 110.560 # SOURCE3 2 0.5498
- angle_coeff @angle:oh-c-s harmonic 84.340 123.440 # SOURCE3 1 0.0000
- angle_coeff @angle:o-c-o harmonic 78.170 130.380 # SOURCE4 429 1.0315
- angle_coeff @angle:o-c-oh harmonic 77.380 122.880 # SOURCE3 33 2.1896
- angle_coeff @angle:o-c-os harmonic 75.930 123.330 # SOURCE4 1708 1.0632
- angle_coeff @angle:o-c-p2 harmonic 59.770 123.100 # SOURCE3 1
- angle_coeff @angle:o-c-p3 harmonic 60.900 120.790 # SOURCE3 1
- angle_coeff @angle:o-c-p5 harmonic 60.850 121.200 # SOURCE4 8 1.2117
- angle_coeff @angle:o-c-pe harmonic 59.440 123.020 # SOURCE3 3 0.1404
- angle_coeff @angle:o-c-pf harmonic 59.440 123.020 # SOURCE3 3 same_as_o-c-pe
- angle_coeff @angle:o-c-px harmonic 60.640 119.100 # SOURCE3 1 0.0000
- angle_coeff @angle:o-c-py harmonic 61.200 121.710 # SOURCE4 5 0.3133
- angle_coeff @angle:o-c-s4 harmonic 77.510 121.150 # SOURCE3 1
- angle_coeff @angle:o-c-s6 harmonic 78.060 119.450 # SOURCE3 1
- angle_coeff @angle:o-c-s harmonic 86.330 120.440 # SOURCE3 2 0.0000
- angle_coeff @angle:o-c-sh harmonic 81.240 121.410 # SOURCE3 4 1.4052
- angle_coeff @angle:os-c-os harmonic 76.450 111.380 # SOURCE4 12 0.8309
- angle_coeff @angle:o-c-ss harmonic 81.780 122.290 # SOURCE3 7 1.9240
- angle_coeff @angle:os-c-s harmonic 83.310 125.030 # SOURCE4 18 0.9978
- angle_coeff @angle:os-c-ss harmonic 83.910 113.630 # SOURCE4 5 0.7367
- angle_coeff @angle:o-c-sx harmonic 76.880 121.150 # SOURCE3 5 3.6452
- angle_coeff @angle:o-c-sy harmonic 78.310 119.320 # SOURCE3 5 2.4495
- angle_coeff @angle:p2-c-p2 harmonic 58.960 113.750 # SOURCE3 1
- angle_coeff @angle:p3-c-p3 harmonic 58.400 118.040 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-c-py harmonic 67.140 90.080 # SOURCE3 1 0.0000
- angle_coeff @angle:p5-c-p5 harmonic 57.080 123.760 # SOURCE3 1
- angle_coeff @angle:ca-cp-ca harmonic 67.250 118.330 # SOURCE4 521 0.6228
- angle_coeff @angle:ca-cp-cp harmonic 64.140 121.140 # SOURCE4 979 1.4462
- angle_coeff @angle:ca-cp-na harmonic 68.850 119.430 # SOURCE4 21 0.6591
- angle_coeff @angle:ca-cp-nb harmonic 69.270 121.650 # SOURCE4 63 0.6564
- angle_coeff @angle:cp-cp-cp harmonic 72.200 90.000 # SOURCE3 4 0.0000
- angle_coeff @angle:cp-cp-cq harmonic 62.640 124.480 # SOURCE4 5 1.9038
- angle_coeff @angle:cp-cp-nb harmonic 68.050 116.600 # SOURCE4 88 1.1887
- angle_coeff @angle:pe-c-pe harmonic 58.620 113.770 # SOURCE3 1 0.0000
- angle_coeff @angle:pf-c-pf harmonic 58.620 113.770 # SOURCE3 1 same_as_pe-c-pe
- angle_coeff @angle:nb-cp-nb harmonic 71.310 125.720 # SOURCE4 5 0.6674
- angle_coeff @angle:py-c-py harmonic 57.520 123.800 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-cq-ca harmonic 67.000 118.240 # SOURCE4 5 0.2181
- angle_coeff @angle:ca-cq-cq harmonic 64.220 120.410 # SOURCE4 12 1.4029
- angle_coeff @angle:ca-cq-nb harmonic 69.270 121.650 # SOURCE4 63 same as ca-cp-nb
- angle_coeff @angle:cp-cq-cq harmonic 62.640 124.470 # SOURCE4 5 1.0864
- angle_coeff @angle:cq-cq-cq harmonic 72.200 90.000 # SOURCE3 4 0.0000
- angle_coeff @angle:cq-cq-nb harmonic 68.050 116.600 # SOURCE4 88 same as cp-cp-nb
- angle_coeff @angle:s4-c-s4 harmonic 98.110 108.810 # SOURCE3 1
- angle_coeff @angle:s6-c-s6 harmonic 95.130 115.750 # SOURCE3 1
- angle_coeff @angle:sh-c-sh harmonic 100.060 115.330 # SOURCE3 1 0.0000
- angle_coeff @angle:s-c-s harmonic 104.130 120.400 # SOURCE3 2 1.2766
- angle_coeff @angle:s-c-sh harmonic 99.770 122.760 # SOURCE4 11 1.5734
- angle_coeff @angle:s-c-ss harmonic 99.130 125.900 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-c-ss harmonic 102.180 113.000 # SOURCE3 1 0.0000
- angle_coeff @angle:sx-c-sx harmonic 97.340 108.800 # SOURCE3 1 0.0000
- angle_coeff @angle:sy-c-sy harmonic 95.370 115.780 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-cu-cx harmonic 58.560 148.210 # SOURCE4 6 1.8305
- angle_coeff @angle:c-cu-cu harmonic 94.970 62.600 # SOURCE2 1 0.0000
- angle_coeff @angle:cu-cu-cx harmonic 100.970 50.800 # SOURCE2 1 0.0000
- angle_coeff @angle:cu-cu-ha harmonic 46.110 147.730 # SOURCE2 3 2.0950
- angle_coeff @angle:cv-cv-cy harmonic 73.280 94.170 # SOURCE3 2 0.0000
- angle_coeff @angle:cv-cv-ha harmonic 47.300 133.700 # SOURCE3 2 0.0000
- angle_coeff @angle:cx-cv-cx harmonic 84.660 63.900 # SOURCE2 1 0.0000
- angle_coeff @angle:cy-cv-ha harmonic 42.890 132.140 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-cx-cx harmonic 63.100 120.660 # SOURCE4 9 0.9067
- angle_coeff @angle:c2-cx-cx harmonic 62.330 120.540 # SOURCE4 51 2.2377
- angle_coeff @angle:c2-cx-h1 harmonic 46.630 115.780 # SOURCE4 8 0.2332
- angle_coeff @angle:c2-cx-hc harmonic 46.770 115.100 # SOURCE4 12 0.7463
- angle_coeff @angle:c2-cx-os harmonic 67.140 116.170 # SOURCE4 14 1.2782
- angle_coeff @angle:c3-cx-c3 harmonic 63.000 114.480 # SOURCE4 46 1.9627
- angle_coeff @angle:c3-cx-cx harmonic 61.820 120.060 # SOURCE4 448 2.1467
- angle_coeff @angle:c3-cx-h1 harmonic 45.870 115.420 # SOURCE4 89 1.1096
- angle_coeff @angle:c3-cx-hc harmonic 46.120 114.160 # SOURCE4 85 1.1118
- angle_coeff @angle:c3-cx-n3 harmonic 64.310 118.500 # SOURCE4 17 2.4897
- angle_coeff @angle:c3-cx-os harmonic 66.570 115.500 # SOURCE4 161 1.3016
- angle_coeff @angle:ca-cx-cx harmonic 61.860 122.180 # SOURCE4 65 1.6898
- angle_coeff @angle:ca-cx-h1 harmonic 46.810 114.570 # SOURCE4 7 0.6498
- angle_coeff @angle:ca-cx-hc harmonic 47.050 113.410 # SOURCE4 18 0.7843
- angle_coeff @angle:ca-cx-oh harmonic 69.250 112.930 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-cx-os harmonic 66.420 118.500 # SOURCE4 6 0.7514
- angle_coeff @angle:c-cx-c3 harmonic 62.910 116.930 # SOURCE4 18 1.8253
- angle_coeff @angle:cc-cx-cx harmonic 63.040 118.970 # SOURCE4 30 0.7725
- angle_coeff @angle:cc-cx-hc harmonic 47.440 113.840 # SOURCE4 15 0.6682
- angle_coeff @angle:c-cx-cx harmonic 62.960 117.960 # SOURCE4 147 1.8483
- angle_coeff @angle:cd-cx-cx harmonic 62.450 120.460 # SOURCE4 9 0.8796
- angle_coeff @angle:c-cx-h1 harmonic 46.270 117.250 # SOURCE4 24 0.7935
- angle_coeff @angle:c-cx-hc harmonic 46.420 116.530 # SOURCE4 36 1.2830
- angle_coeff @angle:cl-cx-cl harmonic 62.910 114.200 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-cx-cx harmonic 60.790 120.100 # SOURCE4 15 0.5917
- angle_coeff @angle:cl-cx-h1 harmonic 43.410 111.430 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-cx-hc harmonic 42.580 115.800 # SOURCE2 1 0.0000
- angle_coeff @angle:c-cx-os harmonic 67.250 115.590 # SOURCE4 36 0.8227
- angle_coeff @angle:cu-cx-cu harmonic 91.530 54.600 # SOURCE2 1 0.0000
- angle_coeff @angle:cu-cx-cx harmonic 88.720 58.500 # SOURCE4 7 0.1333
- angle_coeff @angle:cu-cx-hc harmonic 45.490 118.090 # SOURCE4 7 1.0126
- angle_coeff @angle:cx-cx-cx harmonic 87.900 60.000 # SOURCE4 681 0.6259
- angle_coeff @angle:cx-cx-cy harmonic 67.540 100.530 # SOURCE3 4 0.0000
- angle_coeff @angle:cx-cx-f harmonic 64.530 117.930 # SOURCE4 7 1.1613
- angle_coeff @angle:cx-cx-h1 harmonic 45.450 119.660 # SOURCE3 12 0.4529
- angle_coeff @angle:cx-cx-hc harmonic 45.790 117.920 # SOURCE3 92 1.1927
- angle_coeff @angle:cx-cx-hx harmonic 45.470 119.620 # SOURCE4 9 0.1118
- angle_coeff @angle:cx-cx-n3 harmonic 91.170 59.590 # SOURCE4 154 0.3104
- angle_coeff @angle:cx-cx-na harmonic 62.940 125.850 # SOURCE4 16 2.0385
- angle_coeff @angle:cx-cx-nh harmonic 92.030 59.150 # SOURCE4 116 0.6758
- angle_coeff @angle:cx-cx-os harmonic 93.610 59.070 # SOURCE4 306 0.5253
- angle_coeff @angle:cy-cx-hc harmonic 43.980 125.430 # SOURCE3 2 0.0000
- angle_coeff @angle:f-cx-f harmonic 70.610 106.900 # SOURCE2 2 1.4000
- angle_coeff @angle:f-cx-h1 harmonic 50.350 111.680 # SOURCE3 1 0.0000
- angle_coeff @angle:f-cx-hc harmonic 50.220 112.300 # SOURCE2 1 0.0000
- angle_coeff @angle:h1-cx-h1 harmonic 38.380 115.450 # SOURCE4 230 0.3302
- angle_coeff @angle:h1-cx-n3 harmonic 47.970 116.430 # SOURCE4 173 1.4531
- angle_coeff @angle:h1-cx-n harmonic 49.060 115.420 # SOURCE4 12 1.0443
- angle_coeff @angle:h1-cx-na harmonic 49.960 108.670 # SOURCE4 8 1.6134
- angle_coeff @angle:h1-cx-nh harmonic 48.500 116.320 # SOURCE4 151 1.0310
- angle_coeff @angle:h1-cx-os harmonic 50.010 115.170 # SOURCE3 8 0.0226
- angle_coeff @angle:h2-cx-h2 harmonic 37.870 119.430 # SOURCE3 1 0.0000
- angle_coeff @angle:h2-cx-n2 harmonic 47.550 117.180 # SOURCE3 4 0.0000
- angle_coeff @angle:hc-cx-hc harmonic 38.580 114.470 # SOURCE3 19 0.3295
- angle_coeff @angle:hc-cx-os harmonic 50.250 114.100 # SOURCE2 1 0.0000
- angle_coeff @angle:hx-cx-n4 harmonic 47.620 114.470 # SOURCE4 8 0.1059
- angle_coeff @angle:n2-cx-n2 harmonic 102.060 50.160 # SOURCE3 1 0.0000
- angle_coeff @angle:n-cx-oh harmonic 70.160 119.750 # SOURCE3 2 0.0000
- angle_coeff @angle:n-cx-os harmonic 92.710 65.980 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-cx-oh harmonic 76.670 107.850 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-cx-os harmonic 71.640 118.120 # SOURCE3 4 1.3581
- angle_coeff @angle:os-cx-os harmonic 70.900 115.840 # SOURCE4 7 2.0760
- angle_coeff @angle:c2-cy-cy harmonic 66.570 100.400 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-cy-c3 harmonic 63.190 111.580 # SOURCE4 15 1.0060
- angle_coeff @angle:c3-cy-cy harmonic 60.760 118.700 # SOURCE4 293 1.8510
- angle_coeff @angle:c3-cy-h1 harmonic 46.160 111.770 # SOURCE4 119 0.4412
- angle_coeff @angle:c3-cy-hc harmonic 46.210 111.550 # SOURCE3 5 0.6276
- angle_coeff @angle:c3-cy-n3 harmonic 65.280 112.920 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-cy-n harmonic 68.320 104.050 # SOURCE4 122 0.5745
- angle_coeff @angle:c3-cy-os harmonic 66.990 111.960 # SOURCE4 11 1.0668
- angle_coeff @angle:c-cy-c3 harmonic 61.780 116.720 # SOURCE4 129 0.5236
- angle_coeff @angle:cc-cy-cy harmonic 60.440 121.790 # SOURCE4 6 0.2155
- angle_coeff @angle:c-cy-cy harmonic 71.810 84.990 # SOURCE4 263 0.6952
- angle_coeff @angle:cd-cy-cy harmonic 60.650 120.880 # SOURCE4 13 0.5333
- angle_coeff @angle:ce-cy-h2 harmonic 45.500 117.250 # SOURCE4 17 0.5351
- angle_coeff @angle:ce-cy-n harmonic 74.690 88.020 # SOURCE4 14 0.1416
- angle_coeff @angle:ce-cy-ss harmonic 74.010 121.330 # SOURCE4 13 0.1599
- angle_coeff @angle:c-cy-h1 harmonic 45.890 113.100 # SOURCE4 71 0.7655
- angle_coeff @angle:c-cy-hc harmonic 45.750 113.850 # SOURCE3 8 0.2067
- angle_coeff @angle:cl-cy-cy harmonic 61.910 112.000 # SOURCE3 2 0.0000
- angle_coeff @angle:cl-cy-h1 harmonic 44.060 106.590 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-cy-hc harmonic 42.600 114.000 # SOURCE2 1 0.0000
- angle_coeff @angle:c-cy-n harmonic 64.320 117.390 # SOURCE4 70 1.0742
- angle_coeff @angle:c-cy-os harmonic 66.270 114.420 # SOURCE4 6 1.2052
- angle_coeff @angle:cv-cy-cy harmonic 71.460 86.670 # SOURCE4 6 1.1600
- angle_coeff @angle:cv-cy-hc harmonic 46.060 114.470 # SOURCE4 7 0.4307
- angle_coeff @angle:cx-cy-cy harmonic 66.080 101.230 # SOURCE3 4 0.0000
- angle_coeff @angle:cx-cy-hc harmonic 45.250 118.300 # SOURCE2 3 5.7799
- angle_coeff @angle:cy-cy-cy harmonic 70.160 87.610 # SOURCE3 32 1.5407
- angle_coeff @angle:cy-cy-f harmonic 64.550 112.870 # SOURCE4 13 1.6772
- angle_coeff @angle:cy-cy-h1 harmonic 44.870 114.840 # SOURCE3 20 2.5651
- angle_coeff @angle:cy-cy-h2 harmonic 44.510 116.770 # SOURCE4 83 0.8683
- angle_coeff @angle:cy-cy-hc harmonic 44.820 115.140 # SOURCE3 114 0.8364
- angle_coeff @angle:cy-cy-n3 harmonic 73.470 87.580 # SOURCE3 4 0.6135
- angle_coeff @angle:cy-cy-n harmonic 65.220 112.130 # SOURCE3 31 2.0700
- angle_coeff @angle:cy-cy-na harmonic 63.370 119.700 # SOURCE4 9 0.3333
- angle_coeff @angle:cy-cy-oh harmonic 66.000 114.190 # SOURCE3 4 0.0000
- angle_coeff @angle:cy-cy-os harmonic 66.410 111.770 # SOURCE4 18 2.1334
- angle_coeff @angle:cy-cy-s6 harmonic 74.590 117.460 # SOURCE4 7 1.2423
- angle_coeff @angle:cy-cy-ss harmonic 74.450 118.180 # SOURCE4 55 0.9860
- angle_coeff @angle:h1-cy-h1 harmonic 39.010 109.720 # SOURCE3 6 0.8087
- angle_coeff @angle:h1-cy-n3 harmonic 48.210 113.360 # SOURCE3 6 1.4509
- angle_coeff @angle:h1-cy-n harmonic 49.100 111.180 # SOURCE4 141 0.5848
- angle_coeff @angle:h1-cy-oh harmonic 50.890 111.490 # SOURCE3 2 0.0000
- angle_coeff @angle:h1-cy-os harmonic 50.530 110.940 # SOURCE3 8 0.6522
- angle_coeff @angle:h1-cy-s6 harmonic 51.950 112.570 # SOURCE4 5 1.2943
- angle_coeff @angle:h2-cy-n harmonic 48.420 114.440 # SOURCE4 88 0.7114
- angle_coeff @angle:h2-cy-os harmonic 50.970 109.190 # SOURCE4 6 0.4162
- angle_coeff @angle:h2-cy-s6 harmonic 53.300 106.850 # SOURCE4 6 0.3975
- angle_coeff @angle:h2-cy-ss harmonic 52.700 109.730 # SOURCE4 92 0.7424
- angle_coeff @angle:hc-cy-hc harmonic 39.240 109.040 # SOURCE3 28 0.5962
- angle_coeff @angle:n-cy-os harmonic 71.620 107.500 # SOURCE4 9 2.3773
- angle_coeff @angle:n-cy-s6 harmonic 82.570 103.450 # SOURCE4 6 0.7197
- angle_coeff @angle:n-cy-ss harmonic 82.030 105.120 # SOURCE4 69 0.3987
- angle_coeff @angle:nh-cz-nh harmonic 72.970 120.170 # SOURCE4 26 0.3964
- angle_coeff @angle:br-n1-c1 harmonic 51.100 180.000 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-c1 harmonic 64.910 179.920 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-c2 harmonic 60.250 177.730 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-c3 harmonic 54.830 180.000 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-ca harmonic 56.970 179.990 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-cl harmonic 53.870 179.950 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-f harmonic 55.860 179.960 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-hn harmonic 45.620 179.980 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-i harmonic 46.230 179.950 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-n1 harmonic 66.890 180.000 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-n2 harmonic 65.700 171.560 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-n3 harmonic 60.690 175.590 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-n4 harmonic 59.680 179.690 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-na harmonic 59.950 180.000 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-nh harmonic 60.880 176.350 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-o harmonic 62.620 179.950 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-oh harmonic 62.880 174.310 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-os harmonic 62.150 176.610 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-p2 harmonic 53.810 172.830 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-p3 harmonic 54.260 173.510 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-p4 harmonic 53.620 173.640 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-p5 harmonic 56.480 177.280 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-s2 harmonic 76.360 178.110 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-s4 harmonic 69.870 169.600 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-s harmonic 67.470 179.990 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-s6 harmonic 78.230 175.920 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-sh harmonic 70.520 174.250 # HF/6-31G* 1
- angle_coeff @angle:c1-n1-ss harmonic 70.160 176.060 # HF/6-31G* 1
- angle_coeff @angle:c2-n1-n1 harmonic 61.580 180.000 # HF/6-31G* 1
- angle_coeff @angle:c2-n1-o harmonic 73.090 116.940 # SOURCE3 2 0.0060
- angle_coeff @angle:c2-n1-s harmonic 81.900 118.000 # SOURCE3 2 0.0121
- angle_coeff @angle:c3-n1-n1 harmonic 56.300 180.000 # HF/6-31G* 1
- angle_coeff @angle:ca-n1-n1 harmonic 58.540 180.000 # HF/6-31G* 1
- angle_coeff @angle:ce-n1-o harmonic 71.350 122.400 # SOURCE3 1 same_as_cf-n1-o
- angle_coeff @angle:ce-n1-s harmonic 82.090 117.340 # SOURCE3 1 same_as_cf-n1-s
- angle_coeff @angle:cf-n1-o harmonic 71.060 122.400 # SOURCE3 1 0.0000
- angle_coeff @angle:cf-n1-s harmonic 81.960 117.340 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-n1-n1 harmonic 55.230 179.940 # HF/6-31G* 1
- angle_coeff @angle:f-n1-n1 harmonic 57.390 179.930 # HF/6-31G* 1
- angle_coeff @angle:hn-n1-n1 harmonic 47.140 179.910 # HF/6-31G* 1
- angle_coeff @angle:i-n1-n1 harmonic 47.260 179.940 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-n1 harmonic 68.970 179.970 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-n2 harmonic 67.650 171.570 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-n3 harmonic 62.490 175.090 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-n4 harmonic 61.310 179.910 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-na harmonic 61.630 179.970 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-nh harmonic 62.660 176.000 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-o harmonic 64.430 179.940 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-oh harmonic 64.780 173.770 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-os harmonic 64.010 176.120 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-p2 harmonic 54.850 174.710 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-p3 harmonic 55.500 174.270 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-s harmonic 69.160 180.000 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-n1-sh harmonic 72.150 175.070 # HF/6-31G* 1
- angle_coeff @angle:n1-n1-ss harmonic 72.040 175.610 # HF/6-31G* 1
- angle_coeff @angle:o-n1-p2 harmonic 66.900 116.050 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n1-s harmonic 80.340 119.930 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n2-br harmonic 63.890 106.600 # SOURCE3 1
- angle_coeff @angle:br-n2-c2 harmonic 59.130 112.400 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n2-n2 harmonic 61.080 110.420 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n2-o harmonic 60.100 114.470 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n2-p2 harmonic 63.250 111.030 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n2-s harmonic 78.980 115.780 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-n2-c1 harmonic 74.410 121.100 # SOURCE3 1
- angle_coeff @angle:c1-n2-c3 harmonic 58.670 151.880 # SOURCE3 4 15.8282
- angle_coeff @angle:c1-n2-cl harmonic 59.530 118.800 # SOURCE2 1 0.0000
- angle_coeff @angle:c1-n2-hn harmonic 51.470 126.500 # SOURCE2 3 7.6267
- angle_coeff @angle:c1-n2-n2 harmonic 76.750 113.400 # SOURCE3 1
- angle_coeff @angle:c1-n2-o harmonic 79.200 113.590 # SOURCE3 1
- angle_coeff @angle:c1-n2-p2 harmonic 66.970 119.570 # SOURCE3 1
- angle_coeff @angle:c1-n2-s harmonic 88.340 117.670 # SOURCE3 1
- angle_coeff @angle:c2-n2-c2 harmonic 70.760 118.180 # SOURCE3 1
- angle_coeff @angle:c2-n2-c3 harmonic 66.130 115.300 # SOURCE3 8 4.2940
- angle_coeff @angle:c2-n2-ca harmonic 69.830 119.940 # SOURCE3 1
- angle_coeff @angle:c2-n2-cl harmonic 60.950 112.640 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n2-f harmonic 68.300 108.140 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n2-hn harmonic 52.630 110.330 # SOURCE3 9 0.6498
- angle_coeff @angle:c2-n2-i harmonic 51.860 114.740 # SOURCE3 2 0.0139
- angle_coeff @angle:c2-n2-n1 harmonic 75.450 115.090 # HF/6-31G* 1
- angle_coeff @angle:c2-n2-n2 harmonic 77.940 103.590 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-n2-n3 harmonic 71.340 118.140 # SOURCE3 1
- angle_coeff @angle:c2-n2-n4 harmonic 62.390 112.220 # SOURCE3 3 0.0406
- angle_coeff @angle:c2-n2-n harmonic 70.160 117.980 # SOURCE4 11 0.9019
- angle_coeff @angle:c2-n2-na harmonic 70.350 117.580 # SOURCE3 8 1.6671
- angle_coeff @angle:c2-n2-nh harmonic 70.710 117.610 # SOURCE3 6 3.2642
- angle_coeff @angle:c2-n2-no harmonic 64.220 111.540 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n2-o harmonic 75.470 116.940 # SOURCE3 1
- angle_coeff @angle:c2-n2-oh harmonic 72.080 110.890 # SOURCE4 22 1.2709
- angle_coeff @angle:c2-n2-os harmonic 71.830 110.510 # SOURCE4 13 0.7888
- angle_coeff @angle:c2-n2-p2 harmonic 67.180 116.000 # SOURCE3 1
- angle_coeff @angle:c2-n2-p3 harmonic 61.270 119.300 # SOURCE3 3 2.8489
- angle_coeff @angle:c2-n2-p4 harmonic 62.640 118.770 # SOURCE3 1
- angle_coeff @angle:c2-n2-s4 harmonic 86.210 112.290 # SOURCE3 1
- angle_coeff @angle:c2-n2-s6 harmonic 87.140 116.240 # SOURCE3 1
- angle_coeff @angle:c2-n2-s harmonic 86.900 118.000 # SOURCE3 1
- angle_coeff @angle:c2-n2-sh harmonic 79.840 115.480 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n2-ss harmonic 82.230 118.040 # SOURCE3 4 2.2804
- angle_coeff @angle:c3-n2-c3 harmonic 63.760 110.700 # SOURCE3 1
- angle_coeff @angle:c3-n2-ca harmonic 65.970 114.950 # SOURCE4 5 0.9744
- angle_coeff @angle:c3-n2-ce harmonic 65.370 118.520 # SOURCE4 113 1.6475
- angle_coeff @angle:c3-n2-cf harmonic 65.320 118.690 # SOURCE4 10 1.2155
- angle_coeff @angle:c3-n2-hn harmonic 45.180 118.400 # SOURCE3 1
- angle_coeff @angle:c3-n2-n1 harmonic 68.640 116.200 # SOURCE4 12 0.5407
- angle_coeff @angle:c3-n2-n2 harmonic 69.290 111.180 # SOURCE3 7 0.4349
- angle_coeff @angle:c3-n2-nh harmonic 68.080 109.990 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n2-o harmonic 70.290 112.400 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-n2-p2 harmonic 64.870 114.210 # SOURCE3 2 2.2772
- angle_coeff @angle:c3-n2-s6 harmonic 83.890 113.840 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n2-s harmonic 83.150 116.720 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-n2-ca harmonic 71.790 112.200 # SOURCE3 1
- angle_coeff @angle:ca-n2-hn harmonic 50.010 120.000 # SOURCE3 1
- angle_coeff @angle:ca-n2-n2 harmonic 74.000 113.530 # SOURCE3 1
- angle_coeff @angle:ca-n2-o harmonic 75.260 116.000 # SOURCE2 1 0.0000
- angle_coeff @angle:ca-n2-p2 harmonic 66.400 118.110 # SOURCE3 1
- angle_coeff @angle:ca-n2-s harmonic 85.850 120.110 # SOURCE3 1
- angle_coeff @angle:c-n2-c2 harmonic 66.220 120.970 # SOURCE3 1
- angle_coeff @angle:c-n2-c harmonic 62.710 123.800 # SOURCE3 1
- angle_coeff @angle:c-n2-ca harmonic 66.050 120.500 # SOURCE3 1
- angle_coeff @angle:cc-n2-cl harmonic 60.100 115.790 # SOURCE3 1 same_as_cd-n2-cl
- angle_coeff @angle:cc-n2-hn harmonic 52.300 111.140 # SOURCE4 12 0.8109
- angle_coeff @angle:cc-n2-na harmonic 72.990 108.920 # SOURCE4 9 1.6245
- angle_coeff @angle:cc-n2-nh harmonic 70.350 118.470 # SOURCE4 6 1.7995
- angle_coeff @angle:cd-n2-cl harmonic 60.110 115.790 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n2-hn harmonic 52.630 110.090 # SOURCE4 8 0.6980
- angle_coeff @angle:ce-n2-hn harmonic 52.730 111.120 # SOURCE4 68 0.2440
- angle_coeff @angle:ce-n2-n harmonic 70.330 118.090 # SOURCE4 92 1.1048
- angle_coeff @angle:ce-n2-nh harmonic 70.640 118.550 # SOURCE4 52 1.1425
- angle_coeff @angle:ce-n2-o harmonic 77.370 112.160 # SOURCE3 1
- angle_coeff @angle:ce-n2-oh harmonic 71.450 113.480 # SOURCE4 36 1.7049
- angle_coeff @angle:ce-n2-os harmonic 71.290 112.780 # SOURCE4 33 0.8683
- angle_coeff @angle:ce-n2-s harmonic 87.710 116.280 # SOURCE3 1
- angle_coeff @angle:cf-n2-hn harmonic 53.860 106.500 # SOURCE3 1 same_as_ce-n2-hn
- angle_coeff @angle:cf-n2-n harmonic 70.490 117.550 # SOURCE4 9 0.7822
- angle_coeff @angle:cf-n2-nh harmonic 70.490 119.080 # SOURCE3 2 same_as_ce-n2-nh
- angle_coeff @angle:cf-n2-o harmonic 77.370 112.160 # SOURCE3 1 same_as_ce-n2-o
- angle_coeff @angle:cf-n2-oh harmonic 72.610 109.870 # SOURCE3 1 same_as_ce-n2-oh
- angle_coeff @angle:cf-n2-os harmonic 70.950 113.870 # SOURCE4 7 0.6449
- angle_coeff @angle:cf-n2-s harmonic 87.710 116.280 # SOURCE3 1 same_as_ce-n2-s
- angle_coeff @angle:cl-n2-n1 harmonic 63.750 108.700 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-n2-n2 harmonic 63.120 110.470 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-n2-o harmonic 62.610 114.030 # SOURCE3 1
- angle_coeff @angle:cl-n2-p2 harmonic 62.850 112.980 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-n2-s harmonic 79.610 115.770 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-n2-n2 harmonic 90.460 64.920 # SOURCE3 2 0.0000
- angle_coeff @angle:f-n2-n2 harmonic 68.290 114.600 # SOURCE2 1 0.0000
- angle_coeff @angle:f-n2-o harmonic 71.170 110.100 # SOURCE2 1 0.0000
- angle_coeff @angle:f-n2-p2 harmonic 66.600 107.100 # SOURCE3 1 0.0000
- angle_coeff @angle:f-n2-s harmonic 84.970 110.730 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n2-hn harmonic 38.610 120.000 # SOURCE3 1
- angle_coeff @angle:hn-n2-n1 harmonic 55.330 114.100 # SOURCE2 1 0.0000
- angle_coeff @angle:hn-n2-n2 harmonic 55.840 105.010 # SOURCE3 19 1.5183
- angle_coeff @angle:hn-n2-ne harmonic 54.690 108.560 # SOURCE3 29 5.5708
- angle_coeff @angle:hn-n2-nf harmonic 54.690 108.560 # SOURCE3 29 same_as_hn-n2-ne
- angle_coeff @angle:hn-n2-o harmonic 57.610 107.370 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n2-p2 harmonic 46.310 112.090 # SOURCE3 18 4.0663
- angle_coeff @angle:hn-n2-p4 harmonic 43.060 111.330 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n2-p5 harmonic 44.500 122.340 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n2-pe harmonic 48.420 111.410 # SOURCE3 20 4.9895
- angle_coeff @angle:hn-n2-pf harmonic 48.420 111.410 # SOURCE3 20 same_as_hn-n2-pe
- angle_coeff @angle:hn-n2-s2 harmonic 61.190 115.800 # SOURCE2 1 0.0000
- angle_coeff @angle:hn-n2-s4 harmonic 58.650 111.210 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n2-s harmonic 62.150 108.170 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n2-s6 harmonic 60.520 112.590 # SOURCE3 2 0.0000
- angle_coeff @angle:i-n2-n2 harmonic 53.710 111.790 # SOURCE3 1 0.0000
- angle_coeff @angle:i-n2-o harmonic 52.330 116.820 # SOURCE3 1 0.0000
- angle_coeff @angle:i-n2-p2 harmonic 57.140 113.260 # SOURCE3 1 0.0000
- angle_coeff @angle:i-n2-s harmonic 71.310 116.850 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-n2-n1 harmonic 80.820 112.000 # HF/6-31G* 1
- angle_coeff @angle:n2-n2-n1 harmonic 62.280 180.000 # dac_for_azides 0
- angle_coeff @angle:n2-n2-n2 harmonic 78.200 109.490 # SOURCE3 2 0.0000
- angle_coeff @angle:n2-n2-n3 harmonic 76.590 108.880 # SOURCE3 1
- angle_coeff @angle:n2-n2-n4 harmonic 65.780 106.450 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n2-na harmonic 74.180 112.230 # SOURCE3 1
- angle_coeff @angle:n2-n2-nh harmonic 74.760 111.700 # SOURCE3 5 0.3475
- angle_coeff @angle:n2-n2-no harmonic 67.680 105.970 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n2-o harmonic 80.170 110.430 # SOURCE3 1
- angle_coeff @angle:n2-n2-oh harmonic 74.020 111.510 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n2-os harmonic 74.690 108.380 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n2-p2 harmonic 71.160 109.150 # SOURCE3 1
- angle_coeff @angle:n2-n2-p3 harmonic 64.580 113.050 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n2-p4 harmonic 64.290 118.770 # SOURCE3 1
- angle_coeff @angle:n2-n2-p5 harmonic 70.950 110.460 # SOURCE3 1
- angle_coeff @angle:n2-n2-s4 harmonic 90.620 107.300 # SOURCE3 1
- angle_coeff @angle:n2-n2-s6 harmonic 91.570 111.250 # SOURCE3 1
- angle_coeff @angle:n2-n2-s harmonic 90.160 115.910 # SOURCE3 1
- angle_coeff @angle:n2-n2-sh harmonic 83.540 111.100 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n2-ss harmonic 86.650 112.140 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-n2-n3 harmonic 72.950 115.070 # SOURCE3 1
- angle_coeff @angle:n3-n2-o harmonic 76.860 114.000 # SOURCE2 1 0.0000
- angle_coeff @angle:n3-n2-p2 harmonic 68.490 115.340 # SOURCE3 1
- angle_coeff @angle:n3-n2-s harmonic 88.540 117.130 # SOURCE3 1
- angle_coeff @angle:n4-n2-n4 harmonic 59.970 106.700 # SOURCE3 1
- angle_coeff @angle:n4-n2-o harmonic 64.860 112.200 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-n2-p2 harmonic 62.840 113.070 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-n2-s harmonic 79.030 118.500 # SOURCE3 1 0.0000
- angle_coeff @angle:na-n2-na harmonic 73.470 107.000 # SOURCE3 1
- angle_coeff @angle:na-n2-o harmonic 75.740 113.090 # SOURCE3 1 0.0000
- angle_coeff @angle:na-n2-p2 harmonic 66.830 119.160 # SOURCE3 1 0.0000
- angle_coeff @angle:na-n2-s harmonic 87.260 118.260 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-n2-nh harmonic 74.080 113.250 # SOURCE4 11 0.7711
- angle_coeff @angle:ne-n2-o harmonic 79.970 110.310 # SOURCE3 1
- angle_coeff @angle:ne-n2-s harmonic 89.910 116.220 # SOURCE3 1
- angle_coeff @angle:nf-n2-nh harmonic 74.690 111.380 # SOURCE3 1 same_as_ne-n2-nh
- angle_coeff @angle:nf-n2-o harmonic 79.970 110.310 # SOURCE3 1 same_as_ne-n2-o
- angle_coeff @angle:nf-n2-s harmonic 89.910 116.220 # SOURCE3 1 same_as_ne-n2-s
- angle_coeff @angle:nh-n2-nh harmonic 69.670 121.200 # SOURCE3 1
- angle_coeff @angle:nh-n2-o harmonic 76.020 113.600 # SOURCE4 13 1.0945
- angle_coeff @angle:nh-n2-p2 harmonic 67.100 118.830 # SOURCE3 2 0.1024
- angle_coeff @angle:nh-n2-s harmonic 88.040 116.900 # SOURCE3 2 0.2276
- angle_coeff @angle:n-n2-n2 harmonic 75.480 108.180 # SOURCE4 8 0.3496
- angle_coeff @angle:n-n2-o harmonic 74.990 115.100 # SOURCE4 31 0.2796
- angle_coeff @angle:no-n2-no harmonic 62.810 103.700 # SOURCE3 1
- angle_coeff @angle:no-n2-o harmonic 70.400 100.760 # SOURCE3 1 0.0000
- angle_coeff @angle:no-n2-p2 harmonic 64.250 111.950 # SOURCE3 1 0.0000
- angle_coeff @angle:n-n2-p2 harmonic 67.320 117.300 # SOURCE3 1 0.0000
- angle_coeff @angle:n-n2-s harmonic 88.140 115.740 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-n2-oh harmonic 74.840 101.700 # SOURCE3 1
- angle_coeff @angle:oh-n2-p2 harmonic 67.990 115.110 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-n2-s harmonic 87.990 116.080 # SOURCE3 1 0.0000
- angle_coeff @angle:o-n2-o harmonic 81.020 115.370 # SOURCE3 1
- angle_coeff @angle:o-n2-oh harmonic 75.560 112.150 # SOURCE2 2 1.4500
- angle_coeff @angle:o-n2-os harmonic 75.730 110.350 # SOURCE3 2 0.0042
- angle_coeff @angle:o-n2-p2 harmonic 70.040 116.080 # SOURCE3 1
- angle_coeff @angle:o-n2-p3 harmonic 65.080 113.430 # SOURCE3 1 0.0000
- angle_coeff @angle:o-n2-p4 harmonic 67.340 110.610 # SOURCE3 1
- angle_coeff @angle:o-n2-p5 harmonic 72.480 109.110 # SOURCE3 1
- angle_coeff @angle:o-n2-pe harmonic 67.310 134.560 # SOURCE3 1
- angle_coeff @angle:o-n2-pf harmonic 67.310 134.560 # SOURCE3 1 same_as_o-n2-pe
- angle_coeff @angle:o-n2-s4 harmonic 91.280 108.910 # SOURCE3 1
- angle_coeff @angle:o-n2-s6 harmonic 93.100 111.340 # SOURCE3 1
- angle_coeff @angle:o-n2-s harmonic 91.240 117.180 # SOURCE3 1
- angle_coeff @angle:o-n2-sh harmonic 82.970 114.980 # SOURCE3 1 0.0000
- angle_coeff @angle:os-n2-os harmonic 71.250 110.290 # SOURCE3 1
- angle_coeff @angle:os-n2-p2 harmonic 69.290 110.200 # SOURCE3 1 0.0000
- angle_coeff @angle:o-n2-ss harmonic 86.560 115.340 # SOURCE3 1 0.0000
- angle_coeff @angle:os-n2-s harmonic 89.190 112.230 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n2-p2 harmonic 66.870 116.800 # SOURCE3 1
- angle_coeff @angle:p2-n2-p3 harmonic 61.450 124.480 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n2-p4 harmonic 61.350 128.370 # SOURCE3 1
- angle_coeff @angle:p2-n2-p5 harmonic 65.160 123.470 # SOURCE3 1
- angle_coeff @angle:p2-n2-s4 harmonic 86.260 112.100 # SOURCE3 1
- angle_coeff @angle:p2-n2-s6 harmonic 86.440 115.700 # SOURCE3 1
- angle_coeff @angle:p2-n2-s harmonic 85.910 117.840 # SOURCE3 1
- angle_coeff @angle:p2-n2-sh harmonic 80.450 118.450 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n2-ss harmonic 82.010 120.430 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-n2-p3 harmonic 59.930 120.400 # SOURCE3 1
- angle_coeff @angle:p3-n2-s harmonic 80.080 120.860 # SOURCE3 1 0.0000
- angle_coeff @angle:p4-n2-s harmonic 77.830 131.840 # SOURCE3 1
- angle_coeff @angle:p5-n2-p5 harmonic 66.060 120.600 # SOURCE3 1
- angle_coeff @angle:p5-n2-s harmonic 85.340 119.890 # SOURCE3 1
- angle_coeff @angle:pe-n2-s harmonic 88.590 115.730 # SOURCE3 1
- angle_coeff @angle:pf-n2-s harmonic 88.590 115.730 # SOURCE3 1 same_as_pe-n2-s
- angle_coeff @angle:s4-n2-s4 harmonic 105.720 119.180 # SOURCE3 1
- angle_coeff @angle:s4-n2-s6 harmonic 107.600 119.180 # SOURCE3 1
- angle_coeff @angle:s6-n2-s6 harmonic 109.720 119.180 # SOURCE3 1
- angle_coeff @angle:sh-n2-sh harmonic 96.030 123.930 # SOURCE3 1
- angle_coeff @angle:sh-n2-ss harmonic 98.240 123.930 # SOURCE3 1
- angle_coeff @angle:s-n2-s harmonic 109.670 120.880 # SOURCE3 1
- angle_coeff @angle:s-n2-s4 harmonic 110.840 113.000 # SOURCE3 1
- angle_coeff @angle:s-n2-s6 harmonic 109.880 119.610 # SOURCE3 1
- angle_coeff @angle:s-n2-sh harmonic 101.850 122.050 # SOURCE3 1 0.0000
- angle_coeff @angle:s-n2-ss harmonic 106.640 118.190 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-n2-ss harmonic 100.790 123.930 # SOURCE3 1
- angle_coeff @angle:br-n3-br harmonic 66.540 107.150 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n3-c3 harmonic 62.700 106.930 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-n3-c1 harmonic 64.090 123.340 # SOURCE3 1
- angle_coeff @angle:c1-n3-f harmonic 68.220 104.700 # SOURCE2 1 0.0000
- angle_coeff @angle:c1-n3-hn harmonic 47.740 118.310 # SOURCE3 1
- angle_coeff @angle:c1-n3-o harmonic 70.010 116.630 # SOURCE3 1
- angle_coeff @angle:c2-n3-c2 harmonic 66.220 124.680 # SOURCE3 1
- angle_coeff @angle:c2-n3-hn harmonic 49.110 119.380 # SOURCE3 1
- angle_coeff @angle:c3-n3-c3 harmonic 64.010 110.900 # SOURCE3 40 2.3048
- angle_coeff @angle:c3-n3-cl harmonic 62.170 107.230 # SOURCE3 3 0.3673
- angle_coeff @angle:c3-n3-cx harmonic 62.450 116.320 # SOURCE4 24 0.5119
- angle_coeff @angle:c3-n3-cy harmonic 61.690 118.260 # SOURCE4 14 0.8788
- angle_coeff @angle:c3-n3-f harmonic 66.810 103.130 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-n3-hn harmonic 47.130 109.920 # SOURCE3 120 2.2590
- angle_coeff @angle:c3-n3-i harmonic 56.980 108.480 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-n3-n2 harmonic 66.230 118.750 # SOURCE2 2 2.6500
- angle_coeff @angle:c3-n3-n3 harmonic 66.760 108.150 # SOURCE3 15 1.3999
- angle_coeff @angle:c3-n3-n4 harmonic 67.180 109.650 # SOURCE3 3 0.1146
- angle_coeff @angle:c3-n3-n harmonic 66.670 111.750 # SOURCE4 50 1.6777
- angle_coeff @angle:c3-n3-nh harmonic 66.370 111.890 # SOURCE4 21 1.3006
- angle_coeff @angle:c3-n3-no harmonic 66.020 111.270 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n3-o harmonic 68.680 113.310 # SOURCE3 5 8.9081
- angle_coeff @angle:c3-n3-oh harmonic 69.070 106.140 # SOURCE4 14 1.1040
- angle_coeff @angle:c3-n3-os harmonic 68.480 104.950 # SOURCE4 9 0.9687
- angle_coeff @angle:c3-n3-p3 harmonic 59.890 121.930 # SOURCE3 3 5.6009
- angle_coeff @angle:c3-n3-p5 harmonic 62.050 119.810 # SOURCE4 58 1.8367
- angle_coeff @angle:c3-n3-s4 harmonic 77.770 112.910 # SOURCE3 3 0.8983
- angle_coeff @angle:c3-n3-s6 harmonic 80.590 116.570 # SOURCE4 73 1.8772
- angle_coeff @angle:c3-n3-s harmonic 77.780 110.020 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n3-sh harmonic 78.550 112.700 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n3-ss harmonic 77.950 116.010 # SOURCE3 3 1.1944
- angle_coeff @angle:c3-n3-sy harmonic 79.010 115.270 # SOURCE4 108 1.7647
- angle_coeff @angle:cl-n3-cl harmonic 61.850 108.280 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-n3-hn harmonic 42.590 104.390 # SOURCE3 2 0.0000
- angle_coeff @angle:cl-n3-n3 harmonic 63.750 107.650 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-n3-cx harmonic 86.390 60.710 # SOURCE4 57 0.2359
- angle_coeff @angle:cx-n3-hn harmonic 47.150 109.570 # SOURCE4 26 0.7439
- angle_coeff @angle:cx-n3-p5 harmonic 62.150 119.320 # SOURCE4 71 1.1948
- angle_coeff @angle:cx-n3-py harmonic 60.630 121.750 # SOURCE4 10 1.0295
- angle_coeff @angle:cy-n3-cy harmonic 70.040 90.870 # SOURCE4 10 0.5777
- angle_coeff @angle:cy-n3-hn harmonic 46.250 112.120 # SOURCE4 9 1.9058
- angle_coeff @angle:f-n3-f harmonic 67.710 102.220 # SOURCE2 4 0.7562
- angle_coeff @angle:f-n3-hn harmonic 50.780 99.800 # SOURCE2 1 0.0000
- angle_coeff @angle:hn-n3-hn harmonic 41.300 107.130 # SOURCE3 44 1.9687
- angle_coeff @angle:hn-n3-i harmonic 35.430 109.980 # SOURCE3 2 0.0000
- angle_coeff @angle:hn-n3-n1 harmonic 52.050 110.170 # HF/6-31G* 1
- angle_coeff @angle:hn-n3-n2 harmonic 51.400 115.940 # SOURCE3 1
- angle_coeff @angle:hn-n3-n3 harmonic 50.160 103.980 # SOURCE3 18 1.8593
- angle_coeff @angle:hn-n3-n4 harmonic 50.870 106.400 # SOURCE3 5 0.5863
- angle_coeff @angle:hn-n3-n harmonic 51.020 106.570 # SOURCE3 6 1.0767
- angle_coeff @angle:hn-n3-na harmonic 50.320 107.890 # SOURCE3 1
- angle_coeff @angle:hn-n3-nh harmonic 50.440 107.390 # SOURCE3 11 1.6294
- angle_coeff @angle:hn-n3-no harmonic 50.250 104.780 # SOURCE3 3 1.1126
- angle_coeff @angle:hn-n3-o harmonic 53.140 113.320 # SOURCE3 3 4.3945
- angle_coeff @angle:hn-n3-oh harmonic 53.080 101.110 # SOURCE3 4 0.9921
- angle_coeff @angle:hn-n3-os harmonic 51.670 100.920 # SOURCE3 6 0.7295
- angle_coeff @angle:hn-n3-p2 harmonic 42.850 120.260 # SOURCE3 1
- angle_coeff @angle:hn-n3-p3 harmonic 41.820 116.890 # SOURCE3 9 3.8816
- angle_coeff @angle:hn-n3-p4 harmonic 43.440 113.050 # SOURCE3 2 0.0000
- angle_coeff @angle:hn-n3-p5 harmonic 44.280 113.680 # SOURCE3 6 2.1781
- angle_coeff @angle:hn-n3-s4 harmonic 53.750 108.930 # SOURCE3 7 1.7819
- angle_coeff @angle:hn-n3-s harmonic 52.560 109.470 # SOURCE3 1
- angle_coeff @angle:hn-n3-s6 harmonic 58.300 109.330 # SOURCE4 86 0.9610
- angle_coeff @angle:hn-n3-sh harmonic 54.580 108.670 # SOURCE3 3 2.5025
- angle_coeff @angle:hn-n3-ss harmonic 54.880 109.850 # SOURCE3 5 2.3215
- angle_coeff @angle:hn-n3-sy harmonic 55.880 109.490 # SOURCE4 278 0.7897
- angle_coeff @angle:i-n3-i harmonic 60.040 111.270 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-n3-n1 harmonic 72.400 113.210 # HF/6-31G* 1
- angle_coeff @angle:n2-n3-n2 harmonic 71.820 118.730 # SOURCE3 1
- angle_coeff @angle:n2-n3-o harmonic 74.130 114.910 # SOURCE3 1
- angle_coeff @angle:n3-n3-n3 harmonic 69.570 105.710 # SOURCE3 3 0.3561
- angle_coeff @angle:n4-n3-n4 harmonic 69.040 113.480 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-n3-nh harmonic 70.910 107.140 # SOURCE3 1
- angle_coeff @angle:na-n3-na harmonic 69.210 112.000 # SOURCE3 1
- angle_coeff @angle:nh-n3-nh harmonic 70.750 107.150 # SOURCE3 1 0.0000
- angle_coeff @angle:n-n3-n harmonic 70.250 110.550 # SOURCE3 1 0.0000
- angle_coeff @angle:no-n3-no harmonic 67.040 115.260 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-n3-oh harmonic 72.790 107.180 # SOURCE3 1 0.0000
- angle_coeff @angle:o-n3-o harmonic 71.890 126.140 # SOURCE3 1
- angle_coeff @angle:o-n3-p2 harmonic 66.640 117.020 # SOURCE3 1
- angle_coeff @angle:o-n3-p4 harmonic 65.880 116.650 # SOURCE3 1
- angle_coeff @angle:o-n3-s4 harmonic 81.710 114.090 # SOURCE3 1
- angle_coeff @angle:o-n3-s6 harmonic 87.090 113.800 # SOURCE3 1
- angle_coeff @angle:o-n3-s harmonic 78.520 119.810 # SOURCE3 1
- angle_coeff @angle:os-n3-os harmonic 70.790 106.520 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n3-p2 harmonic 60.890 130.130 # SOURCE3 1
- angle_coeff @angle:p3-n3-p3 harmonic 61.530 118.740 # SOURCE3 3 3.3755
- angle_coeff @angle:p4-n3-p4 harmonic 63.370 116.350 # SOURCE3 1
- angle_coeff @angle:p5-n3-p5 harmonic 63.830 119.420 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-n3-s4 harmonic 96.310 120.020 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-n3-s6 harmonic 99.300 120.950 # SOURCE3 1
- angle_coeff @angle:s6-n3-s6 harmonic 101.380 126.130 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-n3-sh harmonic 98.100 118.630 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-n3-ss harmonic 98.150 119.670 # SOURCE3 1
- angle_coeff @angle:s-n3-s harmonic 90.470 131.360 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-n3-ss harmonic 98.680 119.570 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n4-br harmonic 65.140 114.820 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n4-hn harmonic 41.380 108.440 # SOURCE3 7 0.5630
- angle_coeff @angle:c1-n4-c1 harmonic 65.530 113.870 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-n4-hn harmonic 48.620 110.190 # SOURCE3 7 1.0847
- angle_coeff @angle:c2-n4-c2 harmonic 63.010 112.580 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n4-c3 harmonic 63.100 110.960 # SOURCE4 13 2.4632
- angle_coeff @angle:c2-n4-hn harmonic 46.430 111.360 # SOURCE3 13 1.2672
- angle_coeff @angle:c3-n4-c3 harmonic 62.840 110.640 # SOURCE3 13 1.3060
- angle_coeff @angle:c3-n4-ca harmonic 63.610 110.400 # SOURCE4 46 1.4643
- angle_coeff @angle:c3-n4-cc harmonic 62.840 111.090 # SOURCE4 7 0.7065
- angle_coeff @angle:c3-n4-cl harmonic 62.270 108.040 # SOURCE3 3 0.0000
- angle_coeff @angle:c3-n4-hn harmonic 46.190 110.110 # SOURCE3 100 1.3136
- angle_coeff @angle:c3-n4-n3 harmonic 66.730 108.720 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-n4-n4 harmonic 63.720 114.070 # SOURCE3 4 0.0000
- angle_coeff @angle:c3-n4-n harmonic 66.200 109.260 # SOURCE4 7 1.9859
- angle_coeff @angle:c3-n4-nh harmonic 64.760 111.730 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-no harmonic 65.250 109.080 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-o harmonic 67.250 111.660 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-oh harmonic 65.900 113.730 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-os harmonic 67.380 107.420 # SOURCE3 3 3.5920
- angle_coeff @angle:c3-n4-p2 harmonic 56.830 112.520 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-p3 harmonic 58.790 110.730 # SOURCE3 3 2.1084
- angle_coeff @angle:c3-n4-p5 harmonic 59.350 113.220 # SOURCE3 3 0.4021
- angle_coeff @angle:c3-n4-s4 harmonic 72.410 108.230 # SOURCE3 3 0.4195
- angle_coeff @angle:c3-n4-s6 harmonic 73.090 111.560 # SOURCE3 3 1.8851
- angle_coeff @angle:c3-n4-s harmonic 74.940 113.550 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-sh harmonic 74.840 115.810 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-n4-ss harmonic 75.510 113.680 # SOURCE3 3 1.1405
- angle_coeff @angle:ca-n4-ca harmonic 63.210 114.480 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-n4-hn harmonic 47.540 108.520 # SOURCE3 5 1.1693
- angle_coeff @angle:c-n4-c harmonic 61.500 108.610 # SOURCE3 1 0.0000
- angle_coeff @angle:c-n4-hn harmonic 44.680 110.860 # SOURCE3 10 1.0073
- angle_coeff @angle:cl-n4-cl harmonic 60.960 114.910 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-n4-hn harmonic 42.500 108.870 # SOURCE3 7 0.7719
- angle_coeff @angle:f-n4-f harmonic 70.470 109.050 # SOURCE3 1 0.0000
- angle_coeff @angle:f-n4-hn harmonic 51.670 108.390 # SOURCE3 4 0.0000
- angle_coeff @angle:hn-n4-hn harmonic 40.520 108.110 # SOURCE3 208 1.4126
- angle_coeff @angle:hn-n4-i harmonic 36.440 108.720 # SOURCE3 7 1.2717
- angle_coeff @angle:hn-n4-n1 harmonic 51.790 109.390 # HF/6-31G* 1
- angle_coeff @angle:hn-n4-n2 harmonic 42.290 109.680 # SOURCE3 19 0.6266
- angle_coeff @angle:hn-n4-n3 harmonic 49.850 110.400 # SOURCE3 11 0.7307
- angle_coeff @angle:hn-n4-n4 harmonic 48.090 108.660 # SOURCE3 18 1.2967
- angle_coeff @angle:hn-n4-n harmonic 49.590 109.080 # SOURCE3 13 1.6047
- angle_coeff @angle:hn-n4-na harmonic 49.430 109.380 # SOURCE3 25 1.0758
- angle_coeff @angle:hn-n4-nh harmonic 48.360 109.920 # SOURCE3 12 0.7304
- angle_coeff @angle:hn-n4-no harmonic 49.190 104.380 # SOURCE3 2 0.0000
- angle_coeff @angle:hn-n4-o harmonic 52.090 109.260 # SOURCE3 6 2.1203
- angle_coeff @angle:hn-n4-oh harmonic 51.120 108.090 # SOURCE3 6 1.6728
- angle_coeff @angle:hn-n4-os harmonic 50.150 109.390 # SOURCE3 10 1.4403
- angle_coeff @angle:hn-n4-p2 harmonic 37.700 110.500 # SOURCE3 25 1.0664
- angle_coeff @angle:hn-n4-p3 harmonic 39.300 109.890 # SOURCE3 10 2.3870
- angle_coeff @angle:hn-n4-p4 harmonic 37.650 111.330 # SOURCE3 3 0.0000
- angle_coeff @angle:hn-n4-p5 harmonic 40.530 110.000 # SOURCE3 10 1.0282
- angle_coeff @angle:hn-n4-py harmonic 37.420 117.890 # SOURCE3 8 0.0000
- angle_coeff @angle:hn-n4-s4 harmonic 46.920 110.100 # SOURCE3 6 0.8471
- angle_coeff @angle:hn-n4-s harmonic 51.970 106.890 # SOURCE3 6 1.0775
- angle_coeff @angle:hn-n4-s6 harmonic 48.900 108.940 # SOURCE3 10 0.5715
- angle_coeff @angle:hn-n4-sh harmonic 52.260 108.560 # SOURCE3 6 0.8535
- angle_coeff @angle:hn-n4-ss harmonic 52.080 109.170 # SOURCE3 10 0.8455
- angle_coeff @angle:i-n4-i harmonic 58.990 118.490 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-n4-n1 harmonic 72.690 110.670 # HF/6-31G* 1
- angle_coeff @angle:n2-n4-n2 harmonic 59.430 108.640 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-n4-n3 harmonic 69.790 111.070 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-n4-n4 harmonic 65.210 115.490 # SOURCE3 1 0.0000
- angle_coeff @angle:na-n4-na harmonic 66.270 119.600 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-n4-nh harmonic 67.830 109.380 # SOURCE3 1 0.0000
- angle_coeff @angle:n-n4-n harmonic 66.680 118.620 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-n4-oh harmonic 72.250 108.190 # SOURCE3 1 0.0000
- angle_coeff @angle:o-n4-o harmonic 70.280 120.970 # SOURCE3 1 0.0000
- angle_coeff @angle:os-n4-os harmonic 72.460 104.400 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n4-p2 harmonic 55.970 113.910 # SOURCE3 2 0.0000
- angle_coeff @angle:p3-n4-p3 harmonic 56.000 121.380 # SOURCE3 1 0.0000
- angle_coeff @angle:p5-n4-p5 harmonic 61.270 107.020 # SOURCE3 1 0.0000
- angle_coeff @angle:py-n4-py harmonic 73.000 69.790 # SOURCE3 2 0.0000
- angle_coeff @angle:s4-n4-s4 harmonic 87.700 115.430 # SOURCE3 1
- angle_coeff @angle:s6-n4-s6 harmonic 92.770 109.510 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-n4-sh harmonic 96.690 112.590 # SOURCE3 1 0.0000
- angle_coeff @angle:s-n4-s harmonic 90.880 124.550 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-n4-ss harmonic 98.130 109.200 # SOURCE3 1 0.0000
- angle_coeff @angle:br-na-br harmonic 60.550 123.000 # SOURCE3 1
- angle_coeff @angle:br-na-c2 harmonic 63.610 100.480 # SOURCE3 2 1.0536
- angle_coeff @angle:br-na-ca harmonic 57.150 124.810 # SOURCE3 1
- angle_coeff @angle:br-na-cc harmonic 57.160 124.620 # SOURCE3 3 0.5348
- angle_coeff @angle:br-na-cd harmonic 57.160 124.620 # SOURCE3 3 same_as_br-na-cc
- angle_coeff @angle:br-na-nc harmonic 59.860 119.420 # SOURCE3 4 1.6703
- angle_coeff @angle:br-na-nd harmonic 59.860 119.420 # SOURCE3 4 same_as_br-na-nc
- angle_coeff @angle:br-na-os harmonic 63.920 104.990 # SOURCE3 1 0.0000
- angle_coeff @angle:br-na-p2 harmonic 59.980 121.010 # SOURCE3 1
- angle_coeff @angle:br-na-pc harmonic 60.360 120.260 # SOURCE3 3 2.1456
- angle_coeff @angle:br-na-pd harmonic 60.360 120.260 # SOURCE3 3 same_as_br-na-pc
- angle_coeff @angle:br-na-ss harmonic 79.050 112.280 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-na-c1 harmonic 67.200 117.200 # SOURCE3 1
- angle_coeff @angle:c1-na-c2 harmonic 64.320 125.200 # SOURCE3 1
- angle_coeff @angle:c1-na-ca harmonic 66.540 120.570 # SOURCE3 1
- angle_coeff @angle:c1-na-cc harmonic 65.820 121.350 # SOURCE3 6 0.6517
- angle_coeff @angle:c1-na-cd harmonic 65.820 121.350 # SOURCE3 6 0.6517
- angle_coeff @angle:c1-na-nc harmonic 68.270 120.240 # SOURCE3 4 1.6849
- angle_coeff @angle:c1-na-nd harmonic 68.270 120.240 # SOURCE3 4 same_as_c1-na-nc
- angle_coeff @angle:c1-na-os harmonic 70.240 106.960 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-na-p2 harmonic 60.440 122.250 # SOURCE3 1
- angle_coeff @angle:c1-na-pc harmonic 61.100 121.480 # SOURCE3 3 2.1681
- angle_coeff @angle:c1-na-pd harmonic 61.100 121.480 # SOURCE3 3 same_as_c1-na-pc
- angle_coeff @angle:c1-na-ss harmonic 78.330 118.300 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-na-c2 harmonic 67.800 110.370 # SOURCE3 6 0.5121
- angle_coeff @angle:c2-na-c3 harmonic 64.230 117.200 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-na-ca harmonic 64.550 125.330 # SOURCE4 7 0.5648
- angle_coeff @angle:c2-na-cc harmonic 63.980 125.750 # SOURCE3 10 1.5856
- angle_coeff @angle:c2-na-cd harmonic 63.980 125.750 # SOURCE3 10 1.5856
- angle_coeff @angle:c2-na-cl harmonic 63.280 101.010 # SOURCE3 2 1.5799
- angle_coeff @angle:c2-na-f harmonic 68.640 103.110 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-na-hn harmonic 47.620 119.280 # SOURCE3 14 6.6027
- angle_coeff @angle:c2-na-i harmonic 58.980 106.740 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-na-n1 harmonic 66.270 124.810 # HF/6-31G* 1
- angle_coeff @angle:c2-na-n2 harmonic 65.800 125.000 # SOURCE3 1
- angle_coeff @angle:c2-na-n3 harmonic 64.640 124.800 # SOURCE3 1
- angle_coeff @angle:c2-na-n4 harmonic 65.190 121.320 # SOURCE3 1
- angle_coeff @angle:c2-na-n harmonic 65.630 124.700 # SOURCE3 1
- angle_coeff @angle:c2-na-na harmonic 65.140 124.600 # SOURCE3 1
- angle_coeff @angle:c2-na-nc harmonic 67.270 121.140 # SOURCE4 5 1.0225
- angle_coeff @angle:c2-na-nd harmonic 67.600 119.950 # SOURCE3 4 same_as_c2-na-nc
- angle_coeff @angle:c2-na-nh harmonic 65.040 124.980 # SOURCE3 1
- angle_coeff @angle:c2-na-no harmonic 64.340 124.200 # SOURCE3 1
- angle_coeff @angle:c2-na-o harmonic 68.210 125.900 # SOURCE3 1
- angle_coeff @angle:c2-na-oh harmonic 65.800 123.900 # SOURCE3 1
- angle_coeff @angle:c2-na-os harmonic 68.530 110.330 # SOURCE3 4 3.2172
- angle_coeff @angle:c2-na-p2 harmonic 60.200 122.140 # SOURCE3 1
- angle_coeff @angle:c2-na-p3 harmonic 58.910 126.100 # SOURCE3 1
- angle_coeff @angle:c2-na-p4 harmonic 64.460 125.000 # SOURCE3 1
- angle_coeff @angle:c2-na-p5 harmonic 60.390 125.100 # SOURCE3 1
- angle_coeff @angle:c2-na-pc harmonic 60.800 121.560 # SOURCE3 3 1.6252
- angle_coeff @angle:c2-na-pd harmonic 60.800 121.560 # SOURCE3 3 same_as_c2-na-pc
- angle_coeff @angle:c2-na-s4 harmonic 73.870 124.900 # SOURCE3 1
- angle_coeff @angle:c2-na-s6 harmonic 76.240 124.400 # SOURCE3 1
- angle_coeff @angle:c2-na-s harmonic 74.540 125.800 # SOURCE3 1
- angle_coeff @angle:c2-na-sh harmonic 76.230 125.100 # SOURCE3 1
- angle_coeff @angle:c2-na-ss harmonic 78.900 115.530 # SOURCE3 5 1.4036
- angle_coeff @angle:c3-na-c3 harmonic 60.720 125.590 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-na-ca harmonic 63.150 124.360 # SOURCE3 5 4.2557
- angle_coeff @angle:c3-na-cc harmonic 62.560 125.090 # SOURCE3 18 1.2138
- angle_coeff @angle:c3-na-cd harmonic 62.560 125.090 # SOURCE3 18 1.2138
- angle_coeff @angle:c3-na-cp harmonic 63.760 119.460 # SOURCE4 7 0.4108
- angle_coeff @angle:c3-na-n2 harmonic 65.480 120.050 # SOURCE4 5 0.8795
- angle_coeff @angle:c3-na-n harmonic 67.370 112.680 # SOURCE4 12 0.5122
- angle_coeff @angle:c3-na-nc harmonic 65.740 120.460 # SOURCE3 8 2.1625
- angle_coeff @angle:c3-na-nd harmonic 65.740 120.460 # SOURCE3 8 2.1625
- angle_coeff @angle:c3-na-os harmonic 68.910 104.390 # SOURCE3 3 1.2017
- angle_coeff @angle:c3-na-p2 harmonic 59.290 123.120 # SOURCE3 1
- angle_coeff @angle:c3-na-pc harmonic 59.960 122.110 # SOURCE3 3 2.8504
- angle_coeff @angle:c3-na-pd harmonic 59.960 122.110 # SOURCE3 3 same_as_c3-na-pc
- angle_coeff @angle:c3-na-sh harmonic 80.220 110.280 # SOURCE3 1
- angle_coeff @angle:c3-na-ss harmonic 79.610 110.870 # SOURCE3 3 0.8260
- angle_coeff @angle:ca-na-ca harmonic 66.980 120.090 # SOURCE4 321 1.7366
- angle_coeff @angle:ca-na-cc harmonic 68.460 113.150 # SOURCE3 18 9.8644
- angle_coeff @angle:ca-na-cd harmonic 68.460 113.150 # SOURCE3 18 9.8644
- angle_coeff @angle:ca-na-cl harmonic 57.170 124.790 # SOURCE3 1
- angle_coeff @angle:ca-na-cp harmonic 65.880 120.960 # SOURCE4 20 1.2820
- angle_coeff @angle:ca-na-cx harmonic 63.070 124.090 # SOURCE4 12 1.8167
- angle_coeff @angle:ca-na-f harmonic 65.510 116.400 # SOURCE3 1
- angle_coeff @angle:ca-na-hn harmonic 47.630 125.590 # SOURCE4 437 1.1893
- angle_coeff @angle:ca-na-i harmonic 55.210 121.620 # SOURCE3 1
- angle_coeff @angle:ca-na-n2 harmonic 68.210 119.850 # SOURCE4 6 1.2043
- angle_coeff @angle:ca-na-n4 harmonic 66.370 120.190 # SOURCE3 1
- angle_coeff @angle:ca-na-n harmonic 67.340 122.000 # SOURCE3 1
- angle_coeff @angle:ca-na-na harmonic 66.290 123.760 # SOURCE3 1
- angle_coeff @angle:ca-na-nb harmonic 68.180 122.160 # SOURCE4 7 0.8543
- angle_coeff @angle:ca-na-nc harmonic 69.270 117.850 # SOURCE3 6 3.6536
- angle_coeff @angle:ca-na-nd harmonic 69.270 117.850 # SOURCE3 6 same_as_ca-na-nc
- angle_coeff @angle:ca-na-nh harmonic 66.140 124.330 # SOURCE4 7 1.3855
- angle_coeff @angle:ca-na-o harmonic 71.140 119.990 # SOURCE4 51 1.2671
- angle_coeff @angle:ca-na-oh harmonic 66.690 124.080 # SOURCE3 1
- angle_coeff @angle:ca-na-os harmonic 69.700 109.460 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-na-p2 harmonic 59.660 125.850 # SOURCE3 1
- angle_coeff @angle:ca-na-p3 harmonic 59.650 124.380 # SOURCE3 1
- angle_coeff @angle:ca-na-p4 harmonic 65.120 124.970 # SOURCE3 1
- angle_coeff @angle:ca-na-p5 harmonic 61.240 123.300 # SOURCE3 1
- angle_coeff @angle:ca-na-pc harmonic 61.050 122.130 # SOURCE3 3 2.2393
- angle_coeff @angle:ca-na-pd harmonic 61.050 122.130 # SOURCE3 3 same_as_ca-na-pc
- angle_coeff @angle:ca-na-py harmonic 57.370 140.880 # SOURCE3 2 0.0000
- angle_coeff @angle:ca-na-s4 harmonic 76.640 117.230 # SOURCE3 1
- angle_coeff @angle:ca-na-s6 harmonic 77.900 120.690 # SOURCE3 1
- angle_coeff @angle:ca-na-s harmonic 75.010 125.640 # SOURCE3 1
- angle_coeff @angle:ca-na-sh harmonic 76.630 125.440 # SOURCE3 1
- angle_coeff @angle:ca-na-ss harmonic 74.880 129.910 # SOURCE4 8 0.1449
- angle_coeff @angle:cc-na-cc harmonic 68.940 109.900 # SOURCE3 109 1.5547
- angle_coeff @angle:cc-na-cd harmonic 63.880 128.010 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-na-ce harmonic 63.050 126.610 # SOURCE4 8 0.5158
- angle_coeff @angle:cc-na-cl harmonic 57.100 124.610 # SOURCE3 3 0.5208
- angle_coeff @angle:cc-na-f harmonic 64.600 118.030 # SOURCE3 4 0.3081
- angle_coeff @angle:cc-na-hn harmonic 46.990 125.660 # SOURCE4 549 1.5224
- angle_coeff @angle:cc-na-i harmonic 54.340 125.700 # SOURCE3 6 0.7821
- angle_coeff @angle:cc-na-n2 harmonic 66.830 122.960 # SOURCE3 15 0.9350
- angle_coeff @angle:cc-na-n4 harmonic 65.900 120.310 # SOURCE3 10 3.4394
- angle_coeff @angle:cc-na-n harmonic 66.520 123.190 # SOURCE3 13 0.3010
- angle_coeff @angle:cc-na-na harmonic 65.910 123.430 # SOURCE3 23 0.2088
- angle_coeff @angle:cc-na-nc harmonic 70.180 113.020 # SOURCE3 38 2.2867
- angle_coeff @angle:cc-na-nd harmonic 66.370 126.350 # SOURCE4 94 1.1249
- angle_coeff @angle:cc-na-nh harmonic 66.230 122.250 # SOURCE3 19 0.2010
- angle_coeff @angle:cc-na-no harmonic 65.400 121.780 # SOURCE3 9 0.3521
- angle_coeff @angle:cc-na-o harmonic 69.010 125.210 # SOURCE3 10 0.0124
- angle_coeff @angle:cc-na-oh harmonic 66.670 122.380 # SOURCE3 10 0.1570
- angle_coeff @angle:cc-na-os harmonic 67.340 115.740 # SOURCE3 41 5.4093
- angle_coeff @angle:cc-na-p2 harmonic 59.490 125.860 # SOURCE3 14 2.2993
- angle_coeff @angle:cc-na-p3 harmonic 59.280 125.250 # SOURCE3 8 0.1998
- angle_coeff @angle:cc-na-p4 harmonic 64.080 127.730 # SOURCE3 7 3.6077
- angle_coeff @angle:cc-na-p5 harmonic 60.690 124.700 # SOURCE3 13 1.4225
- angle_coeff @angle:cc-na-s4 harmonic 75.240 121.030 # SOURCE3 10 0.5589
- angle_coeff @angle:cc-na-s6 harmonic 77.180 122.190 # SOURCE3 10 0.9634
- angle_coeff @angle:cc-na-s harmonic 74.800 125.660 # SOURCE3 8 0.1880
- angle_coeff @angle:cc-na-sh harmonic 76.830 123.960 # SOURCE3 10 0.3424
- angle_coeff @angle:cc-na-ss harmonic 76.340 124.220 # SOURCE4 8 0.1585
- angle_coeff @angle:cd-na-cd harmonic 68.940 109.900 # SOURCE3 109 1.5547
- angle_coeff @angle:cd-na-cl harmonic 57.100 124.610 # SOURCE3 3 same_as_cc-na-cl
- angle_coeff @angle:cd-na-f harmonic 64.600 118.030 # SOURCE3 4 0.3081
- angle_coeff @angle:cd-na-hn harmonic 47.070 125.220 # SOURCE4 312 1.1426
- angle_coeff @angle:cd-na-i harmonic 54.340 125.700 # SOURCE3 6 0.7821
- angle_coeff @angle:cd-na-n2 harmonic 66.830 122.960 # SOURCE3 15 0.9350
- angle_coeff @angle:cd-na-n4 harmonic 65.900 120.310 # SOURCE3 10 3.4394
- angle_coeff @angle:cd-na-n harmonic 66.520 123.190 # SOURCE3 13 0.3010
- angle_coeff @angle:cd-na-na harmonic 65.910 123.430 # SOURCE3 23 0.2088
- angle_coeff @angle:cd-na-nc harmonic 66.510 125.820 # SOURCE4 30 1.6776
- angle_coeff @angle:cd-na-nd harmonic 70.180 113.020 # SOURCE3 38 2.2867
- angle_coeff @angle:cd-na-nh harmonic 66.230 122.250 # SOURCE3 19 0.2010
- angle_coeff @angle:cd-na-no harmonic 65.400 121.780 # SOURCE3 9 0.3521
- angle_coeff @angle:cd-na-o harmonic 69.010 125.210 # SOURCE3 10 0.0124
- angle_coeff @angle:cd-na-oh harmonic 66.670 122.380 # SOURCE3 10 0.1570
- angle_coeff @angle:cd-na-os harmonic 65.210 123.420 # SOURCE4 7 2.3824
- angle_coeff @angle:cd-na-p2 harmonic 59.490 125.860 # SOURCE3 14 2.2993
- angle_coeff @angle:cd-na-p3 harmonic 59.280 125.250 # SOURCE3 8 0.1998
- angle_coeff @angle:cd-na-p4 harmonic 64.080 127.730 # SOURCE3 7 same_as_cc-na-p4
- angle_coeff @angle:cd-na-p5 harmonic 60.690 124.700 # SOURCE3 13 1.4225
- angle_coeff @angle:cd-na-s4 harmonic 75.240 121.030 # SOURCE3 10 0.5589
- angle_coeff @angle:cd-na-s6 harmonic 77.180 122.190 # SOURCE3 10 0.9634
- angle_coeff @angle:cd-na-s harmonic 74.800 125.660 # SOURCE3 8 0.1880
- angle_coeff @angle:cd-na-sh harmonic 76.830 123.960 # SOURCE3 10 0.3424
- angle_coeff @angle:cd-na-ss harmonic 77.930 119.180 # SOURCE3 36 5.0538
- angle_coeff @angle:cl-na-cl harmonic 56.330 122.800 # SOURCE3 1
- angle_coeff @angle:cl-na-nc harmonic 59.890 119.360 # SOURCE3 4 1.7128
- angle_coeff @angle:cl-na-nd harmonic 59.890 119.360 # SOURCE3 4 same_as_cl-na-nc
- angle_coeff @angle:cl-na-os harmonic 63.040 106.580 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-na-p2 harmonic 58.340 121.290 # SOURCE3 1
- angle_coeff @angle:cl-na-pc harmonic 58.780 120.510 # SOURCE3 3 2.1985
- angle_coeff @angle:cl-na-pd harmonic 58.780 120.510 # SOURCE3 3 same_as_cl-na-pc
- angle_coeff @angle:cl-na-ss harmonic 77.180 111.910 # SOURCE3 1 0.0000
- angle_coeff @angle:f-na-f harmonic 62.220 120.200 # SOURCE3 1
- angle_coeff @angle:f-na-nc harmonic 66.640 118.050 # SOURCE3 4 1.7931
- angle_coeff @angle:f-na-nd harmonic 66.640 118.050 # SOURCE3 4 same_as_f-na-nc
- angle_coeff @angle:f-na-os harmonic 69.150 103.860 # SOURCE3 1 0.0000
- angle_coeff @angle:f-na-p2 harmonic 59.680 119.950 # SOURCE3 1
- angle_coeff @angle:f-na-pc harmonic 60.340 119.100 # SOURCE3 3 2.3967
- angle_coeff @angle:f-na-pd harmonic 60.340 119.100 # SOURCE3 3 same_as_f-na-pc
- angle_coeff @angle:f-na-ss harmonic 80.160 108.010 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-na-hn harmonic 39.830 116.800 # SOURCE3 1
- angle_coeff @angle:hn-na-n harmonic 50.900 111.260 # SOURCE4 5 1.1280
- angle_coeff @angle:hn-na-nc harmonic 50.000 119.610 # SOURCE3 16 1.8079
- angle_coeff @angle:hn-na-nd harmonic 50.000 119.610 # SOURCE3 16 1.8079
- angle_coeff @angle:hn-na-os harmonic 51.440 101.410 # SOURCE3 7 3.0814
- angle_coeff @angle:hn-na-p2 harmonic 40.320 122.520 # SOURCE3 1
- angle_coeff @angle:hn-na-pc harmonic 40.940 121.480 # SOURCE3 3 2.9355
- angle_coeff @angle:hn-na-pd harmonic 40.940 121.480 # SOURCE3 3 same_as_hn-na-pc
- angle_coeff @angle:hn-na-ss harmonic 53.460 113.950 # SOURCE3 1 0.0000
- angle_coeff @angle:i-na-i harmonic 58.320 124.200 # SOURCE3 1
- angle_coeff @angle:i-na-nc harmonic 56.940 120.030 # SOURCE3 4 2.0032
- angle_coeff @angle:i-na-nd harmonic 56.940 120.030 # SOURCE3 4 same_as_i-na-nc
- angle_coeff @angle:i-na-os harmonic 59.850 109.910 # SOURCE3 1 0.0000
- angle_coeff @angle:i-na-p2 harmonic 57.960 122.280 # SOURCE3 1
- angle_coeff @angle:i-na-pc harmonic 58.320 121.400 # SOURCE3 3 2.4763
- angle_coeff @angle:i-na-pd harmonic 58.320 121.400 # SOURCE3 3 same_as_i-na-pc
- angle_coeff @angle:i-na-ss harmonic 74.730 118.400 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-na-n2 harmonic 70.350 116.710 # SOURCE3 1
- angle_coeff @angle:n2-na-nc harmonic 69.850 119.960 # SOURCE3 4 4.5041
- angle_coeff @angle:n2-na-nd harmonic 69.850 119.960 # SOURCE3 4 same_as_n2-na-nc
- angle_coeff @angle:n2-na-os harmonic 70.330 111.530 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-na-p2 harmonic 61.200 124.880 # SOURCE3 1
- angle_coeff @angle:n2-na-pc harmonic 62.110 123.180 # SOURCE3 3 4.7947
- angle_coeff @angle:n2-na-pd harmonic 62.110 123.180 # SOURCE3 3 same_as_n2-na-pc
- angle_coeff @angle:n2-na-ss harmonic 78.110 124.640 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-na-n3 harmonic 65.770 124.000 # SOURCE3 1
- angle_coeff @angle:n4-na-n4 harmonic 68.570 111.700 # SOURCE3 1
- angle_coeff @angle:n4-na-nc harmonic 69.090 116.440 # SOURCE3 4 3.6604
- angle_coeff @angle:n4-na-nd harmonic 69.090 116.440 # SOURCE3 4 same_as_n4-na-nc
- angle_coeff @angle:n4-na-os harmonic 71.610 102.970 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-na-p2 harmonic 60.870 123.560 # SOURCE3 1
- angle_coeff @angle:n4-na-pc harmonic 61.710 121.980 # SOURCE3 3 4.4884
- angle_coeff @angle:n4-na-pd harmonic 61.710 121.980 # SOURCE3 3 same_as_n4-na-pc
- angle_coeff @angle:na-na-na harmonic 66.770 123.600 # SOURCE3 1
- angle_coeff @angle:na-na-nc harmonic 69.080 119.640 # SOURCE3 4 1.6920
- angle_coeff @angle:na-na-nd harmonic 69.080 119.640 # SOURCE3 4 same_as_na-na-nc
- angle_coeff @angle:na-na-os harmonic 70.250 109.470 # SOURCE3 1 0.0000
- angle_coeff @angle:na-na-p2 harmonic 61.690 121.720 # SOURCE3 1
- angle_coeff @angle:na-na-pc harmonic 62.360 120.910 # SOURCE3 3 2.3033
- angle_coeff @angle:na-na-pd harmonic 62.360 120.910 # SOURCE3 3 same_as_na-na-pc
- angle_coeff @angle:na-na-ss harmonic 80.370 116.500 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-na-nc harmonic 71.200 117.080 # SOURCE3 31 1.8121
- angle_coeff @angle:nc-na-nd harmonic 69.530 122.770 # SOURCE4 5 0.1352
- angle_coeff @angle:nc-na-nh harmonic 68.820 120.550 # SOURCE3 8 1.1436
- angle_coeff @angle:nc-na-no harmonic 68.190 119.150 # SOURCE3 4 1.6049
- angle_coeff @angle:nc-na-o harmonic 72.040 122.790 # SOURCE3 6 1.3154
- angle_coeff @angle:nc-na-oh harmonic 69.710 119.220 # SOURCE3 4 1.7201
- angle_coeff @angle:nc-na-os harmonic 68.300 119.650 # SOURCE3 4 1.5019
- angle_coeff @angle:nc-na-p2 harmonic 62.600 119.990 # SOURCE3 4 3.6009
- angle_coeff @angle:nc-na-p3 harmonic 62.200 120.070 # SOURCE3 4 3.7188
- angle_coeff @angle:nc-na-p4 harmonic 68.140 119.770 # SOURCE3 3 0.3747
- angle_coeff @angle:nc-na-p5 harmonic 63.880 118.950 # SOURCE3 4 3.1194
- angle_coeff @angle:nc-na-pc harmonic 63.450 118.660 # SOURCE3 27 1.5082
- angle_coeff @angle:nc-na-s4 harmonic 77.870 119.200 # SOURCE3 4 2.3841
- angle_coeff @angle:nc-na-s6 harmonic 80.300 119.240 # SOURCE3 4 2.2262
- angle_coeff @angle:nc-na-s harmonic 77.910 122.260 # SOURCE3 4 0.9173
- angle_coeff @angle:nc-na-sh harmonic 80.100 120.500 # SOURCE3 4 1.5016
- angle_coeff @angle:nc-na-ss harmonic 79.650 120.500 # SOURCE3 4 1.5615
- angle_coeff @angle:nd-na-nd harmonic 71.200 117.080 # SOURCE3 31 1.8121
- angle_coeff @angle:nd-na-nh harmonic 68.820 120.550 # SOURCE3 8 same_as_nc-na-nh
- angle_coeff @angle:nd-na-no harmonic 68.190 119.150 # SOURCE3 4 same_as_nc-na-no
- angle_coeff @angle:nd-na-o harmonic 72.040 122.790 # SOURCE3 6 same_as_nc-na-o
- angle_coeff @angle:nd-na-oh harmonic 69.710 119.220 # SOURCE3 4 same_as_nc-na-oh
- angle_coeff @angle:nd-na-os harmonic 68.300 119.650 # SOURCE3 4 same_as_nc-na-os
- angle_coeff @angle:nd-na-p2 harmonic 62.600 119.990 # SOURCE3 4 same_as_nc-na-p2
- angle_coeff @angle:nd-na-p3 harmonic 62.200 120.070 # SOURCE3 4 same_as_nc-na-p3
- angle_coeff @angle:nd-na-p4 harmonic 68.140 119.770 # SOURCE3 3 same_as_nc-na-p4
- angle_coeff @angle:nd-na-p5 harmonic 63.880 118.950 # SOURCE3 4 same_as_nc-na-p5
- angle_coeff @angle:nd-na-pd harmonic 63.450 118.660 # SOURCE3 27 same_as_nc-na-pc
- angle_coeff @angle:nd-na-s4 harmonic 77.870 119.200 # SOURCE3 4 same_as_nc-na-s4
- angle_coeff @angle:nd-na-s6 harmonic 80.300 119.240 # SOURCE3 4 same_as_nc-na-s6
- angle_coeff @angle:nd-na-s harmonic 77.910 122.260 # SOURCE3 4 same_as_nc-na-s
- angle_coeff @angle:nd-na-sh harmonic 80.100 120.500 # SOURCE3 4 same_as_nc-na-sh
- angle_coeff @angle:nd-na-ss harmonic 79.650 120.500 # SOURCE3 4 same_as_nc-na-ss
- angle_coeff @angle:nh-na-nh harmonic 66.770 123.600 # SOURCE3 1
- angle_coeff @angle:nh-na-os harmonic 69.650 111.370 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-na-p2 harmonic 61.900 120.860 # SOURCE3 1
- angle_coeff @angle:nh-na-pc harmonic 62.500 120.380 # SOURCE3 6 1.3513
- angle_coeff @angle:nh-na-pd harmonic 62.500 120.380 # SOURCE3 6 same_as_nh-na-pc
- angle_coeff @angle:nh-na-ss harmonic 81.840 112.350 # SOURCE3 2 5.2951
- angle_coeff @angle:n-na-n harmonic 67.780 123.800 # SOURCE3 1
- angle_coeff @angle:n-na-nc harmonic 69.610 119.850 # SOURCE3 4 1.6156
- angle_coeff @angle:n-na-nd harmonic 69.610 119.850 # SOURCE3 4 same_as_n-na-nc
- angle_coeff @angle:no-na-no harmonic 65.220 122.800 # SOURCE3 1
- angle_coeff @angle:no-na-os harmonic 70.300 106.550 # SOURCE3 1 0.0000
- angle_coeff @angle:no-na-pc harmonic 62.140 120.110 # SOURCE3 3 2.0821
- angle_coeff @angle:no-na-pd harmonic 62.140 120.110 # SOURCE3 3 same_as_no-na-pc
- angle_coeff @angle:n-na-os harmonic 72.340 104.710 # SOURCE3 1 0.0000
- angle_coeff @angle:no-na-ss harmonic 80.360 114.950 # SOURCE3 1 0.0000
- angle_coeff @angle:n-na-p2 harmonic 61.990 121.350 # SOURCE3 1
- angle_coeff @angle:n-na-pc harmonic 62.650 120.640 # SOURCE3 3 2.0168
- angle_coeff @angle:n-na-pd harmonic 62.650 120.640 # SOURCE3 3 same_as_n-na-pc
- angle_coeff @angle:n-na-ss harmonic 80.800 116.100 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-na-oh harmonic 68.130 122.200 # SOURCE3 1
- angle_coeff @angle:oh-na-p2 harmonic 62.330 120.760 # SOURCE3 1
- angle_coeff @angle:oh-na-pc harmonic 63.000 119.990 # SOURCE3 3 2.1734
- angle_coeff @angle:oh-na-pd harmonic 63.000 119.990 # SOURCE3 3 same_as_oh-na-pc
- angle_coeff @angle:oh-na-ss harmonic 82.110 113.040 # SOURCE3 1 0.0000
- angle_coeff @angle:o-na-o harmonic 74.030 126.200 # SOURCE3 1
- angle_coeff @angle:o-na-os harmonic 70.760 118.390 # SOURCE3 1 0.0000
- angle_coeff @angle:o-na-p2 harmonic 62.830 122.800 # SOURCE3 1
- angle_coeff @angle:o-na-pc harmonic 63.490 122.340 # SOURCE3 3 1.2908
- angle_coeff @angle:o-na-pd harmonic 63.490 122.340 # SOURCE3 3 same_as_o-na-pc
- angle_coeff @angle:os-na-os harmonic 71.290 104.450 # SOURCE3 2 0.0983
- angle_coeff @angle:os-na-p2 harmonic 62.590 117.860 # SOURCE3 1 0.0000
- angle_coeff @angle:os-na-p3 harmonic 66.040 104.700 # SOURCE3 1 0.0000
- angle_coeff @angle:os-na-p5 harmonic 65.290 111.410 # SOURCE3 1 0.0000
- angle_coeff @angle:os-na-pc harmonic 62.490 119.910 # SOURCE3 3 1.9002
- angle_coeff @angle:os-na-pd harmonic 62.490 119.910 # SOURCE3 3 same_as_os-na-pc
- angle_coeff @angle:os-na-s4 harmonic 82.020 105.880 # SOURCE3 2 0.0000
- angle_coeff @angle:os-na-s6 harmonic 82.010 112.000 # SOURCE3 2 0.0000
- angle_coeff @angle:os-na-ss harmonic 82.680 109.640 # SOURCE3 3 4.1395
- angle_coeff @angle:p2-na-p2 harmonic 60.320 120.910 # SOURCE3 1
- angle_coeff @angle:p2-na-p3 harmonic 59.150 124.800 # SOURCE3 1
- angle_coeff @angle:p2-na-p5 harmonic 60.140 123.990 # SOURCE3 1
- angle_coeff @angle:p2-na-pc harmonic 60.660 120.720 # SOURCE3 3 0.2407
- angle_coeff @angle:p2-na-pd harmonic 60.660 120.720 # SOURCE3 3 same_as_p2-na-pc
- angle_coeff @angle:p2-na-s4 harmonic 74.880 122.470 # SOURCE3 1
- angle_coeff @angle:p2-na-s6 harmonic 76.310 122.500 # SOURCE3 1
- angle_coeff @angle:p2-na-s harmonic 75.690 121.850 # SOURCE3 1
- angle_coeff @angle:p2-na-sh harmonic 76.680 121.750 # SOURCE3 1
- angle_coeff @angle:p2-na-ss harmonic 76.380 121.880 # SOURCE3 1
- angle_coeff @angle:p3-na-p3 harmonic 58.510 126.600 # SOURCE3 1
- angle_coeff @angle:p3-na-pc harmonic 59.780 123.320 # SOURCE3 3 4.1781
- angle_coeff @angle:p3-na-pd harmonic 59.780 123.320 # SOURCE3 3 same_as_p3-na-pc
- angle_coeff @angle:p5-na-p5 harmonic 60.590 124.600 # SOURCE3 1
- angle_coeff @angle:p5-na-pc harmonic 60.760 122.690 # SOURCE3 3 3.6738
- angle_coeff @angle:p5-na-pd harmonic 60.760 122.690 # SOURCE3 3 same_as_p5-na-pc
- angle_coeff @angle:p5-na-ss harmonic 78.220 118.520 # SOURCE3 1 0.0000
- angle_coeff @angle:pc-na-pc harmonic 60.940 120.780 # SOURCE3 27 1.6457
- angle_coeff @angle:pc-na-s4 harmonic 75.520 121.510 # SOURCE3 3 2.7242
- angle_coeff @angle:pc-na-s6 harmonic 76.990 121.550 # SOURCE3 3 2.7065
- angle_coeff @angle:pc-na-s harmonic 76.170 121.470 # SOURCE3 3 1.0668
- angle_coeff @angle:pc-na-sh harmonic 77.280 121.080 # SOURCE3 3 1.8942
- angle_coeff @angle:pc-na-ss harmonic 76.970 121.200 # SOURCE3 3 1.9295
- angle_coeff @angle:pd-na-pd harmonic 60.940 120.780 # SOURCE3 27 same_as_pc-na-pc
- angle_coeff @angle:pd-na-s4 harmonic 75.520 121.510 # SOURCE3 3 same_as_pc-na-s4
- angle_coeff @angle:pd-na-s6 harmonic 76.990 121.550 # SOURCE3 3 same_as_pc-na-s6
- angle_coeff @angle:pd-na-s harmonic 76.170 121.470 # SOURCE3 3 same_as_pc-na-s
- angle_coeff @angle:pd-na-sh harmonic 77.280 121.080 # SOURCE3 3 same_as_pc-na-sh
- angle_coeff @angle:pd-na-ss harmonic 76.970 121.200 # SOURCE3 3 same_as_pc-na-ss
- angle_coeff @angle:py-na-py harmonic 76.600 78.250 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-na-s4 harmonic 92.990 124.200 # SOURCE3 1
- angle_coeff @angle:s4-na-s6 harmonic 99.310 112.860 # SOURCE3 1
- angle_coeff @angle:s4-na-ss harmonic 99.570 111.920 # SOURCE3 1 0.0000
- angle_coeff @angle:s6-na-s6 harmonic 96.930 123.200 # SOURCE3 1
- angle_coeff @angle:s6-na-ss harmonic 98.410 119.100 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-na-sh harmonic 96.720 124.600 # SOURCE3 1
- angle_coeff @angle:sh-na-ss harmonic 98.710 118.790 # SOURCE3 1 0.0000
- angle_coeff @angle:s-na-s harmonic 93.790 126.000 # SOURCE3 1
- angle_coeff @angle:s-na-ss harmonic 100.150 112.490 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-na-ss harmonic 100.760 113.240 # SOURCE3 2 6.6084
- angle_coeff @angle:sy-na-sy harmonic 96.930 123.200 # SOURCE3 1
- angle_coeff @angle:ca-nb-ca harmonic 68.590 115.860 # SOURCE3 46 1.1645
- angle_coeff @angle:ca-nb-cp harmonic 68.010 118.040 # SOURCE4 58 0.7819
- angle_coeff @angle:ca-nb-cq harmonic 68.010 118.040 # SOURCE4 58 same as ca-nb-cp
- angle_coeff @angle:ca-nb-nb harmonic 69.370 118.890 # SOURCE3 10 0.6031
- angle_coeff @angle:cp-nb-nb harmonic 68.790 121.110 # SOURCE4 12 0.4315
- angle_coeff @angle:nb-nb-nb harmonic 70.440 121.040 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n-br harmonic 66.590 116.200 # SOURCE3 1 0.0000
- angle_coeff @angle:br-n-c harmonic 61.850 120.770 # SOURCE3 5 2.6390
- angle_coeff @angle:br-n-ca harmonic 62.070 118.190 # SOURCE3 1
- angle_coeff @angle:br-n-cc harmonic 62.340 118.190 # SOURCE3 1 same_as_br-n-cd
- angle_coeff @angle:br-n-cd harmonic 62.340 118.190 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-n-c1 harmonic 73.520 102.690 # SOURCE3 1
- angle_coeff @angle:c1-n-ca harmonic 65.900 118.880 # SOURCE3 1
- angle_coeff @angle:c1-n-cc harmonic 67.020 118.880 # SOURCE3 1 same_as_c1-n-cd
- angle_coeff @angle:c1-n-cd harmonic 67.020 118.880 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n-c2 harmonic 65.180 116.750 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n-c3 harmonic 63.060 119.980 # SOURCE4 23 2.3373
- angle_coeff @angle:c2-n-ca harmonic 64.880 116.540 # SOURCE3 1
- angle_coeff @angle:c2-n-cc harmonic 65.850 116.540 # SOURCE3 1 same_as_c2-n-cd
- angle_coeff @angle:c2-n-cd harmonic 65.850 116.540 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-n-hn harmonic 47.330 118.360 # SOURCE4 40 1.8005
- angle_coeff @angle:c3-n-c3 harmonic 63.130 115.560 # SOURCE4 392 2.0191
- angle_coeff @angle:c3-n-ca harmonic 62.760 119.960 # SOURCE4 165 2.0808
- angle_coeff @angle:c3-n-cc harmonic 63.380 120.810 # SOURCE4 172 1.6565
- angle_coeff @angle:c3-n-cd harmonic 63.240 121.340 # SOURCE4 95 1.0297
- angle_coeff @angle:c3-n-cy harmonic 62.510 117.110 # SOURCE4 49 1.0344
- angle_coeff @angle:c3-n-hn harmonic 46.040 116.780 # SOURCE3 39 2.1985
- angle_coeff @angle:c3-n-n2 harmonic 64.890 121.680 # SOURCE4 52 1.3175
- angle_coeff @angle:c3-n-n harmonic 66.400 114.820 # SOURCE4 9 0.7008
- angle_coeff @angle:c3-n-nc harmonic 66.990 115.190 # SOURCE4 41 0.8150
- angle_coeff @angle:c3-n-nd harmonic 66.870 115.310 # SOURCE4 7 0.9993
- angle_coeff @angle:c3-n-oh harmonic 66.880 113.050 # SOURCE4 31 0.8144
- angle_coeff @angle:c3-n-os harmonic 66.990 112.650 # SOURCE4 16 1.5399
- angle_coeff @angle:c3-n-sy harmonic 76.610 121.270 # SOURCE4 5 1.1298
- angle_coeff @angle:ca-n-ca harmonic 64.310 117.390 # SOURCE4 39 1.6465
- angle_coeff @angle:ca-n-cc harmonic 64.270 121.000 # SOURCE4 16 1.8986
- angle_coeff @angle:ca-n-cd harmonic 68.060 107.900 # SOURCE4 18 0.3512
- angle_coeff @angle:ca-n-cl harmonic 61.550 117.720 # SOURCE3 1
- angle_coeff @angle:ca-n-f harmonic 64.620 114.920 # SOURCE3 1
- angle_coeff @angle:ca-n-hn harmonic 47.360 115.940 # SOURCE4 537 1.8890
- angle_coeff @angle:ca-n-i harmonic 56.580 119.300 # SOURCE3 1
- angle_coeff @angle:ca-n-n2 harmonic 65.720 122.170 # SOURCE4 5 0.2545
- angle_coeff @angle:ca-n-n4 harmonic 64.150 122.980 # SOURCE3 1
- angle_coeff @angle:ca-n-n harmonic 66.300 118.540 # SOURCE4 21 0.3399
- angle_coeff @angle:ca-n-na harmonic 66.330 119.310 # SOURCE4 16 0.3168
- angle_coeff @angle:ca-n-nc harmonic 68.180 114.630 # SOURCE4 5 0.3030
- angle_coeff @angle:ca-n-nd harmonic 68.570 113.030 # SOURCE3 1 same_as_ca-n-nc
- angle_coeff @angle:ca-n-nh harmonic 66.600 116.450 # SOURCE3 1
- angle_coeff @angle:ca-n-p2 harmonic 62.890 112.320 # SOURCE3 1
- angle_coeff @angle:ca-n-p3 harmonic 58.640 125.110 # SOURCE3 1
- angle_coeff @angle:ca-n-s4 harmonic 75.900 118.400 # SOURCE3 1
- angle_coeff @angle:ca-n-s6 harmonic 78.480 117.320 # SOURCE3 1
- angle_coeff @angle:ca-n-ss harmonic 78.660 116.600 # SOURCE3 1
- angle_coeff @angle:c-n-c1 harmonic 68.470 117.040 # SOURCE3 1 0.0000
- angle_coeff @angle:c-n-c2 harmonic 65.090 122.150 # SOURCE3 9 5.1016
- angle_coeff @angle:c-n-c3 harmonic 63.920 121.350 # SOURCE3 54 2.3808
- angle_coeff @angle:c3-nc-cd harmonic 67.600 109.510 # SOURCE3 9 5.4142
- angle_coeff @angle:c-n-c harmonic 65.330 127.140 # SOURCE4 514 2.0111
- angle_coeff @angle:c-n-ca harmonic 64.290 123.710 # SOURCE3 10 3.8159
- angle_coeff @angle:ca-nc-ca harmonic 70.730 109.950 # SOURCE3 1
- angle_coeff @angle:ca-nc-cd harmonic 72.670 104.240 # SOURCE4 187 1.2216
- angle_coeff @angle:ca-nc-n harmonic 73.700 104.690 # SOURCE3 1
- angle_coeff @angle:ca-nc-na harmonic 74.610 102.630 # SOURCE4 13 0.2570
- angle_coeff @angle:ca-nc-os harmonic 73.070 104.500 # SOURCE4 9 0.1740
- angle_coeff @angle:ca-nc-ss harmonic 85.860 116.290 # SOURCE3 1
- angle_coeff @angle:c-n-cc harmonic 65.240 124.190 # SOURCE3 57 2.2262
- angle_coeff @angle:c-nc-ca harmonic 66.430 120.660 # SOURCE3 1
- angle_coeff @angle:cc-n-cc harmonic 68.800 108.920 # SOURCE3 11 0.3167
- angle_coeff @angle:cc-nc-cc harmonic 68.600 110.190 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-nc-cd harmonic 70.480 107.470 # SOURCE3 26 5.4053
- angle_coeff @angle:c-nc-cd harmonic 66.550 120.320 # SOURCE4 76 0.9196
- angle_coeff @angle:cc-n-cl harmonic 62.010 117.720 # SOURCE3 1 same_as_cd-n-cl
- angle_coeff @angle:cc-nc-na harmonic 73.380 102.970 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-nc-nd harmonic 72.540 107.940 # SOURCE3 6 1.4052
- angle_coeff @angle:c-n-cd harmonic 65.240 124.190 # SOURCE3 57 2.2262
- angle_coeff @angle:cd-nc-cd harmonic 68.020 119.060 # SOURCE4 7 0.1559
- angle_coeff @angle:cd-nc-n harmonic 69.430 118.060 # SOURCE4 60 1.8266
- angle_coeff @angle:cd-nc-na harmonic 74.240 103.730 # SOURCE3 122 2.3292
- angle_coeff @angle:cd-nc-nc harmonic 72.470 106.430 # SOURCE4 9 0.7064
- angle_coeff @angle:cd-nc-os harmonic 73.170 104.300 # SOURCE4 58 1.0231
- angle_coeff @angle:cd-nc-ss harmonic 88.980 108.340 # SOURCE4 33 1.3882
- angle_coeff @angle:c-n-ce harmonic 62.210 131.830 # SOURCE4 146 1.3048
- angle_coeff @angle:cc-n-f harmonic 65.610 114.920 # SOURCE3 1 same_as_cd-n-f
- angle_coeff @angle:cc-n-hn harmonic 48.080 118.710 # SOURCE4 170 2.2963
- angle_coeff @angle:cc-n-i harmonic 56.610 119.300 # SOURCE3 1 same_as_cd-n-i
- angle_coeff @angle:c-n-cl harmonic 62.720 116.350 # SOURCE4 11 0.6829
- angle_coeff @angle:cc-n-n2 harmonic 70.090 110.870 # SOURCE3 1 same_as_cd-n-n2
- angle_coeff @angle:cc-n-n harmonic 66.530 121.370 # SOURCE3 1 same_as_cd-n-n
- angle_coeff @angle:cc-n-na harmonic 67.870 117.570 # SOURCE3 1 same_as_cd-n-na
- angle_coeff @angle:cc-n-nc harmonic 70.120 111.950 # SOURCE4 13 0.6972
- angle_coeff @angle:cc-n-nh harmonic 67.300 117.520 # SOURCE3 1 same_as_cd-n-nh
- angle_coeff @angle:cc-n-no harmonic 66.400 115.920 # SOURCE3 1 same_as_cd-n-no
- angle_coeff @angle:cc-n-o harmonic 70.070 120.540 # SOURCE3 1 same_as_cd-n-o
- angle_coeff @angle:cc-n-oh harmonic 67.320 118.150 # SOURCE3 1 same_as_cd-n-oh
- angle_coeff @angle:cc-n-os harmonic 68.060 115.560 # SOURCE3 1 same_as_cd-n-os
- angle_coeff @angle:cc-n-p2 harmonic 63.340 112.320 # SOURCE3 1 same_as_cd-n-p2
- angle_coeff @angle:cc-n-p3 harmonic 59.020 125.110 # SOURCE3 1 same_as_cd-n-p3
- angle_coeff @angle:cc-n-p5 harmonic 61.710 121.000 # SOURCE3 1 same_as_cd-n-p5
- angle_coeff @angle:cc-n-s4 harmonic 76.360 118.400 # SOURCE3 1 same_as_cd-n-s4
- angle_coeff @angle:cc-n-s6 harmonic 79.070 117.320 # SOURCE3 1 same_as_cd-n-s6
- angle_coeff @angle:cc-n-s harmonic 76.920 118.290 # SOURCE3 1 same_as_cd-n-s
- angle_coeff @angle:cc-n-sh harmonic 78.020 119.130 # SOURCE3 1 same_as_cd-n-sh
- angle_coeff @angle:cc-n-ss harmonic 79.250 116.600 # SOURCE3 2 same_as_cd-n-ss
- angle_coeff @angle:c-n-cx harmonic 64.220 122.070 # SOURCE4 11 1.9478
- angle_coeff @angle:c-n-cy harmonic 72.260 94.230 # SOURCE4 270 1.3777
- angle_coeff @angle:cd-n-cd harmonic 68.800 108.920 # SOURCE3 11 same_as_cc-n-cc
- angle_coeff @angle:cd-n-cl harmonic 62.010 117.720 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-f harmonic 65.610 114.920 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-hn harmonic 47.860 119.820 # SOURCE4 106 1.1020
- angle_coeff @angle:cd-n-i harmonic 56.610 119.300 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-n2 harmonic 70.090 110.870 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-n harmonic 66.530 121.370 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-na harmonic 67.870 117.570 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-nd harmonic 69.680 113.030 # SOURCE3 1 same_as_cc-n-nc
- angle_coeff @angle:cd-n-nh harmonic 67.300 117.520 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-no harmonic 66.400 115.920 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-o harmonic 70.070 120.540 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-oh harmonic 67.320 118.150 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-os harmonic 68.060 115.560 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-p2 harmonic 63.340 112.320 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-p3 harmonic 59.020 125.110 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-p5 harmonic 61.710 121.000 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-s4 harmonic 76.360 118.400 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-s6 harmonic 79.070 117.320 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-s harmonic 76.920 118.290 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-sh harmonic 78.020 119.130 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-n-ss harmonic 79.250 116.600 # SOURCE3 2 1.8318
- angle_coeff @angle:ce-n-cy harmonic 64.680 111.970 # SOURCE4 142 2.1245
- angle_coeff @angle:c-n-f harmonic 68.300 108.630 # SOURCE3 3 4.6785
- angle_coeff @angle:cf-n-cy harmonic 64.910 110.790 # SOURCE4 10 1.1677
- angle_coeff @angle:c-n-hn harmonic 49.210 118.460 # SOURCE3 157 2.4094
- angle_coeff @angle:c-n-i harmonic 56.340 120.380 # SOURCE3 5 2.1600
- angle_coeff @angle:cl-n-cl harmonic 63.240 111.690 # SOURCE3 1 0.0000
- angle_coeff @angle:c-n-n2 harmonic 68.060 120.590 # SOURCE3 9 3.2410
- angle_coeff @angle:c-n-n3 harmonic 67.130 120.430 # SOURCE3 5 0.9481
- angle_coeff @angle:c-n-n4 harmonic 68.850 112.320 # SOURCE3 5 1.2622
- angle_coeff @angle:c-n-n harmonic 68.180 118.420 # SOURCE3 10 2.8922
- angle_coeff @angle:c-n-na harmonic 68.250 119.200 # SOURCE3 11 2.3032
- angle_coeff @angle:na-nc-nd harmonic 75.970 105.470 # SOURCE3 6 0.6349
- angle_coeff @angle:c-n-nc harmonic 67.170 125.230 # SOURCE4 72 2.1204
- angle_coeff @angle:nc-nc-nd harmonic 73.150 111.150 # SOURCE3 3 same_as_nc-nd-nd
- angle_coeff @angle:c-n-nd harmonic 67.140 124.930 # SOURCE4 12 2.2148
- angle_coeff @angle:nd-nc-os harmonic 74.420 107.220 # SOURCE3 3 0.4707
- angle_coeff @angle:c-n-nh harmonic 68.020 117.810 # SOURCE4 21 1.5935
- angle_coeff @angle:c-n-no harmonic 66.470 118.160 # SOURCE3 4 5.4870
- angle_coeff @angle:c-n-o harmonic 71.640 118.900 # SOURCE3 9 5.4085
- angle_coeff @angle:c-n-oh harmonic 69.530 113.390 # SOURCE3 6 1.3345
- angle_coeff @angle:c-n-os harmonic 69.600 113.140 # SOURCE3 7 3.0839
- angle_coeff @angle:c-n-p2 harmonic 60.460 124.560 # SOURCE3 8 3.6907
- angle_coeff @angle:c-n-p3 harmonic 59.910 122.540 # SOURCE3 9 4.4802
- angle_coeff @angle:c-n-p4 harmonic 60.710 123.440 # SOURCE3 1 0.0000
- angle_coeff @angle:c-n-p5 harmonic 60.230 128.500 # SOURCE4 6 0.5353
- angle_coeff @angle:c-n-pc harmonic 60.840 122.230 # SOURCE3 3 2.8787
- angle_coeff @angle:c-n-pd harmonic 60.840 122.230 # SOURCE3 3 same_as_c-n-pc
- angle_coeff @angle:c-n-s4 harmonic 76.060 120.410 # SOURCE3 4 3.1760
- angle_coeff @angle:c-n-s6 harmonic 77.030 125.010 # SOURCE4 13 1.6314
- angle_coeff @angle:c-n-s harmonic 74.720 126.550 # SOURCE3 3 4.3365
- angle_coeff @angle:c-n-sh harmonic 78.300 119.540 # SOURCE3 4 1.7681
- angle_coeff @angle:c-n-ss harmonic 78.430 120.370 # SOURCE3 7 1.4450
- angle_coeff @angle:c-n-sy harmonic 77.090 124.810 # SOURCE4 51 1.0517
- angle_coeff @angle:cx-n-hn harmonic 46.260 118.580 # SOURCE4 5 0.3288
- angle_coeff @angle:cx-n-os harmonic 97.400 54.040 # SOURCE3 1 0.0000
- angle_coeff @angle:cy-n-hn harmonic 45.340 119.000 # SOURCE4 65 1.3840
- angle_coeff @angle:c3-nd-cc harmonic 67.600 109.510 # SOURCE3 9 same_as_c3-nc-cd
- angle_coeff @angle:ca-nd-ca harmonic 70.730 109.950 # SOURCE3 1 same_as_ca-nc-ca
- angle_coeff @angle:ca-nd-cc harmonic 72.240 105.470 # SOURCE4 250 2.4919
- angle_coeff @angle:ca-nd-n harmonic 73.580 104.690 # SOURCE3 1 same_as_ca-nc-n
- angle_coeff @angle:ca-nd-na harmonic 74.060 104.160 # SOURCE3 1 same_as_ca-nc-na
- angle_coeff @angle:ca-nd-nc harmonic 73.550 108.410 # SOURCE4 9 0.1575
- angle_coeff @angle:ca-nd-os harmonic 73.130 104.340 # SOURCE3 1 same_as_ca-nc-os
- angle_coeff @angle:ca-nd-ss harmonic 85.860 116.290 # SOURCE3 1 same_as_ca-nc-ss
- angle_coeff @angle:c-nd-ca harmonic 65.700 120.660 # SOURCE3 1 same_as_c-nc-ca
- angle_coeff @angle:c-nd-cc harmonic 65.710 120.680 # SOURCE4 62 1.4340
- angle_coeff @angle:cc-nd-cc harmonic 68.900 116.040 # SOURCE4 10 0.2861
- angle_coeff @angle:cc-nd-cd harmonic 71.090 105.630 # SOURCE4 1214 2.1301
- angle_coeff @angle:cc-nd-n harmonic 73.800 104.150 # SOURCE3 4 same_as_cd-nc-n
- angle_coeff @angle:cc-nd-na harmonic 74.240 103.730 # SOURCE3 122 2.3292
- angle_coeff @angle:cc-nd-nd harmonic 71.970 107.920 # SOURCE4 346 1.6831
- angle_coeff @angle:cc-nd-os harmonic 72.920 105.010 # SOURCE4 58 0.4186
- angle_coeff @angle:cc-nd-ss harmonic 89.270 107.640 # SOURCE4 12 0.4724
- angle_coeff @angle:cd-nd-cd harmonic 70.890 103.170 # SOURCE4 5 0.0317
- angle_coeff @angle:cd-nd-na harmonic 73.380 102.970 # SOURCE3 1 same_as_cc-nc-na
- angle_coeff @angle:cd-nd-nc harmonic 72.540 107.940 # SOURCE3 6 1.4052
- angle_coeff @angle:na-nd-nc harmonic 75.970 105.470 # SOURCE3 6 0.6349
- angle_coeff @angle:nc-nd-nd harmonic 73.100 111.300 # SOURCE4 58 0.2082
- angle_coeff @angle:nc-nd-os harmonic 74.420 107.220 # SOURCE3 3 same_as_nd-nc-os
- angle_coeff @angle:c1-ne-ca harmonic 60.080 152.480 # SOURCE4 8 1.5840
- angle_coeff @angle:c1-ne-cg harmonic 66.000 140.000 # SOURCE2 1 0.0000
- angle_coeff @angle:c2-ne-ca harmonic 66.060 120.920 # SOURCE4 53 1.9651
- angle_coeff @angle:c2-ne-ce harmonic 67.330 118.170 # SOURCE3 3 1.2374
- angle_coeff @angle:c2-ne-cg harmonic 68.360 123.580 # SOURCE4 12 0.8560
- angle_coeff @angle:c2-ne-n2 harmonic 74.560 113.310 # SOURCE3 1
- angle_coeff @angle:c2-ne-ne harmonic 69.170 110.860 # SOURCE3 7 4.5874
- angle_coeff @angle:c2-ne-p2 harmonic 63.870 134.030 # SOURCE3 1
- angle_coeff @angle:c2-ne-pe harmonic 62.610 120.520 # SOURCE3 8 8.1381
- angle_coeff @angle:c2-ne-px harmonic 63.660 117.750 # SOURCE3 5 0.8581
- angle_coeff @angle:c2-ne-py harmonic 66.630 117.040 # SOURCE3 3 1.4398
- angle_coeff @angle:c2-ne-sx harmonic 77.140 111.980 # SOURCE3 3 0.4090
- angle_coeff @angle:c2-ne-sy harmonic 77.530 120.970 # SOURCE4 6 0.2394
- angle_coeff @angle:ca-ne-cf harmonic 65.630 121.760 # SOURCE4 9 1.9872
- angle_coeff @angle:ca-ne-n2 harmonic 69.660 114.270 # SOURCE4 9 0.4600
- angle_coeff @angle:ca-ne-nf harmonic 69.710 115.050 # SOURCE4 22 0.7409
- angle_coeff @angle:ca-ne-o harmonic 71.100 113.960 # SOURCE3 3 1.1253
- angle_coeff @angle:ca-ne-p2 harmonic 65.650 118.090 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-ne-s harmonic 83.220 120.110 # SOURCE3 1 0.0000
- angle_coeff @angle:c-ne-c2 harmonic 67.860 118.530 # SOURCE3 3 3.2058
- angle_coeff @angle:ce-ne-n2 harmonic 71.160 111.190 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-ne-o harmonic 72.260 112.160 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-ne-p2 harmonic 66.250 117.020 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-ne-s harmonic 84.980 116.280 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-ne-n1 harmonic 71.710 120.200 # SOURCE2 1 0.0000
- angle_coeff @angle:cg-ne-n2 harmonic 73.160 113.390 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-ne-o harmonic 74.430 114.700 # SOURCE2 1 0.0000
- angle_coeff @angle:cg-ne-p2 harmonic 66.960 119.570 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-ne-s harmonic 86.420 117.700 # SOURCE3 1 0.0000
- angle_coeff @angle:c-ne-sy harmonic 78.040 116.050 # SOURCE4 6 1.2661
- angle_coeff @angle:n2-ne-n2 harmonic 78.590 107.220 # SOURCE3 1
- angle_coeff @angle:n2-ne-ne harmonic 70.940 110.720 # SOURCE3 9 6.1488
- angle_coeff @angle:n2-ne-o harmonic 78.090 114.100 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-ne-p2 harmonic 72.370 109.660 # SOURCE3 1
- angle_coeff @angle:n2-ne-pe harmonic 66.510 112.150 # SOURCE3 7 6.5273
- angle_coeff @angle:n2-ne-px harmonic 65.740 115.970 # SOURCE3 3 1.9854
- angle_coeff @angle:n2-ne-py harmonic 69.010 114.600 # SOURCE3 3 2.9261
- angle_coeff @angle:n2-ne-s harmonic 90.200 115.900 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-ne-sx harmonic 80.750 107.290 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-ne-sy harmonic 82.850 111.210 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-ne-o harmonic 72.280 110.450 # SOURCE3 10 1.8535
- angle_coeff @angle:ne-ne-p2 harmonic 67.420 114.390 # SOURCE3 6 4.0528
- angle_coeff @angle:ne-ne-s harmonic 85.550 115.950 # SOURCE3 6 3.4604
- angle_coeff @angle:o-ne-o harmonic 76.910 124.090 # SOURCE3 2 8.7534
- angle_coeff @angle:o-ne-pe harmonic 61.880 132.320 # SOURCE3 11 23.9559
- angle_coeff @angle:o-ne-px harmonic 68.040 110.620 # SOURCE3 1 0.0000
- angle_coeff @angle:o-ne-py harmonic 71.120 110.790 # SOURCE3 4 1.6818
- angle_coeff @angle:o-ne-s harmonic 91.120 117.190 # SOURCE3 2 0.0225
- angle_coeff @angle:o-ne-sx harmonic 80.740 108.920 # SOURCE3 1 0.0000
- angle_coeff @angle:o-ne-sy harmonic 83.600 111.340 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-ne-pe harmonic 65.270 116.810 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-ne-px harmonic 62.490 128.350 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-ne-py harmonic 65.650 123.470 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-ne-sx harmonic 80.480 112.120 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-ne-sy harmonic 81.800 115.730 # SOURCE3 1 0.0000
- angle_coeff @angle:pe-ne-s harmonic 83.520 115.730 # SOURCE3 1 0.0000
- angle_coeff @angle:px-ne-s harmonic 78.540 131.840 # SOURCE3 1 0.0000
- angle_coeff @angle:py-ne-s harmonic 86.300 116.180 # SOURCE3 4 3.7135
- angle_coeff @angle:s-ne-s harmonic 109.960 120.870 # SOURCE3 1 0.0000
- angle_coeff @angle:s-ne-sx harmonic 101.960 112.960 # SOURCE3 1 0.0000
- angle_coeff @angle:s-ne-sy harmonic 102.420 119.630 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-nf-ca harmonic 63.220 137.740 # SOURCE3 1 same_as_c1-ne-ca
- angle_coeff @angle:c1-nf-ch harmonic 66.000 140.000 # SOURCE2 1 same_as_c1-ne-cg
- angle_coeff @angle:c2-nf-ca harmonic 66.690 118.670 # SOURCE3 2 same_as_c2-ne-ca
- angle_coeff @angle:c2-nf-cf harmonic 67.330 118.170 # SOURCE3 3 same_as_c2-ne-ce
- angle_coeff @angle:c2-nf-n2 harmonic 74.560 113.310 # SOURCE3 1 same_as_c2-ne-n2
- angle_coeff @angle:c2-nf-nf harmonic 69.170 110.860 # SOURCE3 7 same_as_c2-ne-ne
- angle_coeff @angle:c2-nf-p2 harmonic 63.870 134.030 # SOURCE3 1 same_as_c2-ne-p2
- angle_coeff @angle:c2-nf-pf harmonic 62.610 120.520 # SOURCE3 8 same_as_c2-ne-pe
- angle_coeff @angle:c2-nf-px harmonic 63.660 117.750 # SOURCE3 5 same_as_c2-ne-px
- angle_coeff @angle:c2-nf-py harmonic 66.630 117.040 # SOURCE3 3 same_as_c2-ne-py
- angle_coeff @angle:c2-nf-sx harmonic 77.140 111.980 # SOURCE3 3 same_as_c2-ne-sx
- angle_coeff @angle:c2-nf-sy harmonic 79.580 114.810 # SOURCE3 3 same_as_c2-ne-sy
- angle_coeff @angle:ca-nf-ce harmonic 65.450 122.300 # SOURCE4 6 1.8938
- angle_coeff @angle:ca-nf-n2 harmonic 70.020 113.110 # SOURCE3 2 same_as_ca-ne-n2
- angle_coeff @angle:ca-nf-ne harmonic 69.660 115.190 # SOURCE4 22 0.6536
- angle_coeff @angle:ca-nf-o harmonic 71.100 113.960 # SOURCE3 3 same_as_ca-ne-o
- angle_coeff @angle:ca-nf-p2 harmonic 65.650 118.090 # SOURCE3 1 same_as_ca-ne-p2
- angle_coeff @angle:ca-nf-s harmonic 83.220 120.110 # SOURCE3 1 same_as_ca-ne-s
- angle_coeff @angle:c-nf-c2 harmonic 67.770 118.530 # SOURCE3 3 same_as_c-ne-c2
- angle_coeff @angle:cf-nf-n2 harmonic 71.160 111.190 # SOURCE3 1 same_as_ce-ne-n2
- angle_coeff @angle:cf-nf-o harmonic 72.260 112.160 # SOURCE3 1 same_as_ce-ne-o
- angle_coeff @angle:cf-nf-p2 harmonic 66.250 117.020 # SOURCE3 1 same_as_ce-ne-p2
- angle_coeff @angle:cf-nf-s harmonic 84.980 116.280 # SOURCE3 1 same_as_ce-ne-s
- angle_coeff @angle:ch-nf-n1 harmonic 71.710 120.200 # SOURCE2 1 same_as_cg-ne-n1
- angle_coeff @angle:ch-nf-n2 harmonic 73.160 113.390 # SOURCE3 1 same_as_cg-ne-n2
- angle_coeff @angle:ch-nf-o harmonic 74.430 114.700 # SOURCE2 1 same_as_cg-ne-o
- angle_coeff @angle:ch-nf-p2 harmonic 66.960 119.570 # SOURCE3 1 same_as_cg-ne-p2
- angle_coeff @angle:ch-nf-s harmonic 86.420 117.700 # SOURCE3 1 same_as_cg-ne-s
- angle_coeff @angle:f-n-f harmonic 67.900 102.980 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-nf-n2 harmonic 78.590 107.220 # SOURCE3 1 same_as_n2-ne-n2
- angle_coeff @angle:n2-nf-nf harmonic 70.940 110.720 # SOURCE3 9 same_as_n2-ne-ne
- angle_coeff @angle:n2-nf-o harmonic 78.090 114.100 # SOURCE3 1 same_as_n2-ne-o
- angle_coeff @angle:n2-nf-p2 harmonic 72.370 109.660 # SOURCE3 1 same_as_n2-ne-p2
- angle_coeff @angle:n2-nf-pf harmonic 66.510 112.150 # SOURCE3 7 same_as_n2-ne-pe
- angle_coeff @angle:n2-nf-px harmonic 65.740 115.970 # SOURCE3 3 same_as_n2-ne-px
- angle_coeff @angle:n2-nf-py harmonic 69.010 114.600 # SOURCE3 3 same_as_n2-ne-py
- angle_coeff @angle:n2-nf-s harmonic 90.200 115.900 # SOURCE3 1 same_as_n2-ne-s
- angle_coeff @angle:n2-nf-sx harmonic 80.750 107.290 # SOURCE3 1 same_as_n2-ne-sx
- angle_coeff @angle:n2-nf-sy harmonic 82.850 111.210 # SOURCE3 1 same_as_n2-ne-sy
- angle_coeff @angle:nf-nf-o harmonic 72.280 110.450 # SOURCE3 10 same_as_ne-ne-o
- angle_coeff @angle:nf-nf-p2 harmonic 67.420 114.390 # SOURCE3 6 same_as_ne-ne-p2
- angle_coeff @angle:nf-nf-s harmonic 85.550 115.950 # SOURCE3 6 same_as_ne-ne-s
- angle_coeff @angle:o-nf-o harmonic 76.910 124.090 # SOURCE3 2 same_as_o-ne-o
- angle_coeff @angle:o-nf-pf harmonic 61.880 132.320 # SOURCE3 11 same_as_o-ne-pe
- angle_coeff @angle:o-nf-px harmonic 68.040 110.620 # SOURCE3 1 same_as_o-ne-px
- angle_coeff @angle:o-nf-py harmonic 71.120 110.790 # SOURCE3 4 same_as_o-ne-py
- angle_coeff @angle:o-nf-s harmonic 91.120 117.190 # SOURCE3 2 same_as_o-ne-s
- angle_coeff @angle:o-nf-sx harmonic 80.740 108.920 # SOURCE3 1 same_as_o-ne-sx
- angle_coeff @angle:o-nf-sy harmonic 83.600 111.340 # SOURCE3 1 same_as_o-ne-sy
- angle_coeff @angle:p2-nf-pf harmonic 65.270 116.810 # SOURCE3 1 same_as_p2-ne-pe
- angle_coeff @angle:p2-nf-px harmonic 62.490 128.350 # SOURCE3 1 same_as_p2-ne-px
- angle_coeff @angle:p2-nf-py harmonic 65.650 123.470 # SOURCE3 1 same_as_p2-ne-py
- angle_coeff @angle:p2-nf-sx harmonic 80.480 112.120 # SOURCE3 1 same_as_p2-ne-sx
- angle_coeff @angle:p2-nf-sy harmonic 81.800 115.730 # SOURCE3 1 same_as_p2-ne-sy
- angle_coeff @angle:pf-nf-s harmonic 83.520 115.730 # SOURCE3 1 same_as_pe-ne-s
- angle_coeff @angle:px-nf-s harmonic 78.540 131.840 # SOURCE3 1 same_as_px-ne-s
- angle_coeff @angle:py-nf-s harmonic 86.300 116.180 # SOURCE3 4 same_as_py-ne-s
- angle_coeff @angle:s-nf-s harmonic 109.960 120.870 # SOURCE3 1 same_as_s-ne-s
- angle_coeff @angle:s-nf-sx harmonic 101.960 112.960 # SOURCE3 1 same_as_s-ne-sx
- angle_coeff @angle:s-nf-sy harmonic 102.420 119.630 # SOURCE3 1 same_as_s-ne-sy
- angle_coeff @angle:br-nh-br harmonic 67.090 106.270 # SOURCE3 1
- angle_coeff @angle:br-nh-ca harmonic 62.040 111.880 # SOURCE3 1 0.0000
- angle_coeff @angle:br-nh-hn harmonic 42.110 101.560 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-nh-c1 harmonic 68.330 116.980 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-nh-c2 harmonic 66.360 122.710 # SOURCE4 5 1.0077
- angle_coeff @angle:c1-nh-ca harmonic 66.220 122.360 # SOURCE3 3 1.2016
- angle_coeff @angle:c1-nh-hn harmonic 49.550 117.300 # SOURCE4 8 0.7120
- angle_coeff @angle:c2-nh-c2 harmonic 65.540 124.500 # SOURCE4 43 1.7515
- angle_coeff @angle:c2-nh-c3 harmonic 63.170 123.710 # SOURCE3 8 3.5348
- angle_coeff @angle:c2-nh-ca harmonic 64.590 127.340 # SOURCE4 97 2.4321
- angle_coeff @angle:c2-nh-cc harmonic 64.990 125.770 # SOURCE4 6 1.4868
- angle_coeff @angle:c2-nh-cd harmonic 64.840 126.330 # SOURCE4 5 0.9167
- angle_coeff @angle:c2-nh-cx harmonic 63.080 124.440 # SOURCE4 10 1.6817
- angle_coeff @angle:c2-nh-hn harmonic 49.620 114.890 # SOURCE4 1000 1.4571
- angle_coeff @angle:c2-nh-n2 harmonic 68.360 120.000 # SOURCE4 33 1.1823
- angle_coeff @angle:c2-nh-n3 harmonic 67.570 116.980 # SOURCE4 14 1.4183
- angle_coeff @angle:c2-nh-no harmonic 66.090 125.630 # SOURCE4 7 0.7554
- angle_coeff @angle:c2-nh-oh harmonic 69.450 112.510 # SOURCE4 12 1.1687
- angle_coeff @angle:c2-nh-os harmonic 69.270 112.930 # SOURCE4 6 0.3945
- angle_coeff @angle:c2-nh-sy harmonic 78.160 121.130 # SOURCE4 10 0.5133
- angle_coeff @angle:c3-nh-c3 harmonic 63.530 114.440 # SOURCE4 523 2.1428
- angle_coeff @angle:c3-nh-ca harmonic 64.560 117.770 # SOURCE3 8 1.7521
- angle_coeff @angle:c3-nh-cc harmonic 63.650 121.180 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-nh-cd harmonic 64.170 119.220 # SOURCE4 162 2.4515
- angle_coeff @angle:c3-nh-cf harmonic 63.620 119.920 # SOURCE4 20 1.8571
- angle_coeff @angle:c3-nh-cz harmonic 63.010 125.510 # SOURCE4 12 0.5177
- angle_coeff @angle:c3-nh-hn harmonic 46.460 114.950 # SOURCE3 19 2.4787
- angle_coeff @angle:c3-nh-n2 harmonic 67.890 112.350 # SOURCE3 9 4.0058
- angle_coeff @angle:c3-nh-n harmonic 67.100 111.710 # SOURCE4 6 2.4251
- angle_coeff @angle:c3-nh-na harmonic 66.920 112.430 # SOURCE4 8 1.4219
- angle_coeff @angle:c3-nh-p2 harmonic 60.930 123.350 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-nh-sy harmonic 78.350 116.120 # SOURCE4 13 1.2830
- angle_coeff @angle:ca-nh-ca harmonic 64.340 127.460 # SOURCE3 2 0.0002
- angle_coeff @angle:ca-nh-cc harmonic 63.730 129.910 # SOURCE4 29 1.3269
- angle_coeff @angle:ca-nh-cd harmonic 63.880 129.310 # SOURCE4 9 1.5610
- angle_coeff @angle:ca-nh-cl harmonic 62.010 113.150 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-nh-cx harmonic 63.110 123.630 # SOURCE4 36 0.5899
- angle_coeff @angle:ca-nh-f harmonic 67.900 106.090 # SOURCE3 3 1.0660
- angle_coeff @angle:ca-nh-hn harmonic 49.080 116.130 # SOURCE4 1780 1.2853
- angle_coeff @angle:ca-nh-i harmonic 55.550 117.830 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-nh-n1 harmonic 69.370 117.130 # HF/6-31G* 1
- angle_coeff @angle:ca-nh-n2 harmonic 67.820 121.110 # SOURCE4 19 0.9700
- angle_coeff @angle:ca-nh-n3 harmonic 68.180 114.210 # SOURCE3 6 2.2412
- angle_coeff @angle:ca-nh-n4 harmonic 68.560 108.940 # SOURCE3 5 0.6562
- angle_coeff @angle:ca-nh-n harmonic 68.070 116.150 # SOURCE4 12 0.8135
- angle_coeff @angle:ca-nh-na harmonic 68.580 114.540 # SOURCE3 8 0.7807
- angle_coeff @angle:ca-nh-nh harmonic 68.490 114.870 # SOURCE3 6 2.1432
- angle_coeff @angle:ca-nh-no harmonic 69.190 113.920 # SOURCE3 4 2.9561
- angle_coeff @angle:ca-nh-o harmonic 69.640 121.920 # SOURCE3 2 3.9630
- angle_coeff @angle:ca-nh-oh harmonic 69.150 112.800 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-nh-os harmonic 69.930 110.170 # SOURCE3 3 0.6448
- angle_coeff @angle:ca-nh-p2 harmonic 61.620 125.270 # SOURCE3 8 5.1798
- angle_coeff @angle:ca-nh-p3 harmonic 60.110 125.700 # SOURCE3 3 5.7796
- angle_coeff @angle:ca-nh-p4 harmonic 61.180 124.010 # SOURCE3 3 2.5810
- angle_coeff @angle:ca-nh-p5 harmonic 61.760 125.610 # SOURCE3 3 0.5287
- angle_coeff @angle:ca-nh-s4 harmonic 78.630 115.620 # SOURCE3 3 0.3434
- angle_coeff @angle:ca-nh-s6 harmonic 77.920 123.530 # SOURCE4 33 2.0385
- angle_coeff @angle:ca-nh-s harmonic 75.150 122.540 # SOURCE3 3 2.7001
- angle_coeff @angle:ca-nh-sh harmonic 78.190 121.410 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-nh-ss harmonic 78.160 121.500 # SOURCE3 3 2.6255
- angle_coeff @angle:ca-nh-sy harmonic 76.750 125.260 # SOURCE4 41 1.7517
- angle_coeff @angle:cc-nh-cx harmonic 63.320 122.820 # SOURCE4 42 1.1841
- angle_coeff @angle:cc-nh-hn harmonic 48.860 117.160 # SOURCE3 11 2.6137
- angle_coeff @angle:cc-nh-n2 harmonic 68.230 119.660 # SOURCE4 5 1.3903
- angle_coeff @angle:cc-nh-sy harmonic 77.480 122.910 # SOURCE4 23 1.2029
- angle_coeff @angle:cd-nh-cx harmonic 62.500 126.090 # SOURCE4 16 2.3269
- angle_coeff @angle:cd-nh-hn harmonic 48.860 117.160 # SOURCE3 11 2.6137
- angle_coeff @angle:ce-nh-hn harmonic 48.340 115.620 # SOURCE4 187 1.0421
- angle_coeff @angle:ce-nh-o harmonic 66.820 129.430 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-nh-sy harmonic 80.450 112.970 # SOURCE4 7 1.0636
- angle_coeff @angle:cf-nh-hn harmonic 48.620 115.620 # SOURCE4 16 1.3549
- angle_coeff @angle:cf-nh-o harmonic 67.070 129.430 # SOURCE3 1 same_as_ce-nh-o
- angle_coeff @angle:cl-nh-cl harmonic 62.930 106.600 # SOURCE3 1
- angle_coeff @angle:cl-nh-hn harmonic 43.080 104.140 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-nh-cx harmonic 86.530 62.020 # SOURCE4 45 0.6189
- angle_coeff @angle:cx-nh-hn harmonic 45.790 118.890 # SOURCE4 8 0.1391
- angle_coeff @angle:cz-nh-hn harmonic 48.790 121.240 # SOURCE4 40 0.5682
- angle_coeff @angle:f-nh-f harmonic 66.930 101.700 # SOURCE3 1 0.0000
- angle_coeff @angle:f-nh-hn harmonic 49.800 101.230 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-nh-hn harmonic 40.050 114.850 # SOURCE4 1108 2.0811
- angle_coeff @angle:hn-nh-i harmonic 36.550 107.570 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-nh-n1 harmonic 52.310 110.570 # HF/6-31G* 1
- angle_coeff @angle:hn-nh-n2 harmonic 50.080 118.220 # SOURCE4 75 2.3319
- angle_coeff @angle:hn-nh-n3 harmonic 50.050 109.120 # SOURCE3 5 2.3680
- angle_coeff @angle:hn-nh-n4 harmonic 49.690 104.400 # SOURCE3 3 0.5056
- angle_coeff @angle:hn-nh-n harmonic 50.890 107.960 # SOURCE4 16 1.2025
- angle_coeff @angle:hn-nh-na harmonic 50.950 107.910 # SOURCE3 26 1.5528
- angle_coeff @angle:hn-nh-nh harmonic 50.320 110.640 # SOURCE4 8 1.3390
- angle_coeff @angle:hn-nh-no harmonic 50.990 109.930 # SOURCE4 7 0.2027
- angle_coeff @angle:hn-nh-o harmonic 52.990 116.450 # SOURCE3 2 0.6063
- angle_coeff @angle:hn-nh-oh harmonic 51.130 106.550 # SOURCE4 8 0.4590
- angle_coeff @angle:hn-nh-os harmonic 51.510 104.760 # SOURCE3 3 0.4883
- angle_coeff @angle:hn-nh-p2 harmonic 42.970 118.180 # SOURCE3 21 3.6927
- angle_coeff @angle:hn-nh-p3 harmonic 41.930 116.190 # SOURCE3 3 3.0539
- angle_coeff @angle:hn-nh-p4 harmonic 43.250 112.600 # SOURCE3 3 0.8237
- angle_coeff @angle:hn-nh-p5 harmonic 43.730 115.260 # SOURCE3 3 0.9168
- angle_coeff @angle:hn-nh-s4 harmonic 54.500 107.480 # SOURCE3 3 1.3960
- angle_coeff @angle:hn-nh-s harmonic 51.650 114.370 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-nh-s6 harmonic 55.730 109.980 # SOURCE4 29 0.7478
- angle_coeff @angle:hn-nh-sh harmonic 54.760 112.250 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-nh-ss harmonic 54.360 113.890 # SOURCE3 3 1.4030
- angle_coeff @angle:hn-nh-sy harmonic 54.780 111.230 # SOURCE4 62 1.1413
- angle_coeff @angle:i-nh-i harmonic 59.800 115.820 # SOURCE3 1
- angle_coeff @angle:n1-nh-n1 harmonic 75.130 106.710 # HF/6-31G* 1
- angle_coeff @angle:n2-nh-n2 harmonic 70.760 117.500 # SOURCE3 2 1.1907
- angle_coeff @angle:n2-nh-n3 harmonic 69.630 115.540 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-nh-o harmonic 70.400 126.060 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-nh-n3 harmonic 69.520 110.980 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-nh-n4 harmonic 68.150 108.360 # SOURCE3 1 0.0000
- angle_coeff @angle:na-nh-na harmonic 70.140 112.010 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-hn harmonic 39.730 117.850 # SOURCE3 15 2.3694
- angle_coeff @angle:nh-nh-nh harmonic 70.070 112.230 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-i harmonic 36.080 117.240 # SOURCE3 2 0.4435
- angle_coeff @angle:hn-n-n2 harmonic 49.620 118.330 # SOURCE3 5 2.2377
- angle_coeff @angle:hn-n-n3 harmonic 48.690 117.220 # SOURCE4 37 1.3737
- angle_coeff @angle:hn-n-n4 harmonic 48.900 112.680 # SOURCE3 3 1.9746
- angle_coeff @angle:hn-n-n harmonic 50.140 113.120 # SOURCE3 7 3.2954
- angle_coeff @angle:hn-n-na harmonic 50.400 113.550 # SOURCE3 8 1.9324
- angle_coeff @angle:hn-n-nc harmonic 50.760 115.240 # SOURCE4 10 0.4966
- angle_coeff @angle:hn-n-nh harmonic 49.740 113.130 # SOURCE4 12 1.2125
- angle_coeff @angle:hn-n-no harmonic 48.710 110.110 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-o harmonic 53.830 116.320 # SOURCE3 2 0.0175
- angle_coeff @angle:n-nh-o harmonic 72.070 115.630 # SOURCE3 1
- angle_coeff @angle:hn-n-oh harmonic 50.330 110.710 # SOURCE4 46 1.1278
- angle_coeff @angle:no-nh-no harmonic 72.070 108.550 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-os harmonic 50.520 109.820 # SOURCE4 12 0.6996
- angle_coeff @angle:hn-n-p2 harmonic 41.490 118.050 # SOURCE3 7 3.0564
- angle_coeff @angle:hn-n-p3 harmonic 40.240 119.630 # SOURCE3 2 0.0000
- angle_coeff @angle:hn-n-p4 harmonic 41.880 115.710 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-p5 harmonic 43.060 113.200 # SOURCE4 6 1.0341
- angle_coeff @angle:hn-n-s4 harmonic 52.120 112.460 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-s harmonic 52.060 114.920 # SOURCE3 2 0.0260
- angle_coeff @angle:hn-n-s6 harmonic 54.500 112.180 # SOURCE4 6 0.6101
- angle_coeff @angle:hn-n-sh harmonic 53.400 114.910 # SOURCE3 1 0.0000
- angle_coeff @angle:hn-n-ss harmonic 53.620 115.600 # SOURCE3 3 0.6414
- angle_coeff @angle:hn-n-sy harmonic 54.450 112.340 # SOURCE4 38 0.6039
- angle_coeff @angle:oh-nh-oh harmonic 72.150 106.270 # SOURCE3 1
- angle_coeff @angle:o-nh-o harmonic 72.240 128.060 # SOURCE3 1
- angle_coeff @angle:os-nh-os harmonic 72.410 105.270 # SOURCE3 1
- angle_coeff @angle:p2-nh-p2 harmonic 61.230 127.330 # SOURCE3 2 2.7857
- angle_coeff @angle:p3-nh-p3 harmonic 59.950 125.080 # SOURCE3 1
- angle_coeff @angle:p5-nh-p5 harmonic 65.370 112.760 # SOURCE3 1
- angle_coeff @angle:s4-nh-s4 harmonic 100.210 112.390 # SOURCE3 1
- angle_coeff @angle:s6-nh-s6 harmonic 99.870 120.270 # SOURCE3 1
- angle_coeff @angle:sh-nh-sh harmonic 99.730 119.000 # SOURCE3 1
- angle_coeff @angle:s-nh-s harmonic 95.590 118.730 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-nh-ss harmonic 99.620 119.250 # SOURCE3 1
- angle_coeff @angle:i-n-i harmonic 60.660 118.200 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-n-n2 harmonic 70.160 116.890 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-n-n3 harmonic 68.020 117.940 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-n-n4 harmonic 68.420 112.690 # SOURCE3 1 0.0000
- angle_coeff @angle:na-n-na harmonic 69.610 117.380 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-n-nc harmonic 71.080 116.410 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-n-p2 harmonic 63.760 117.210 # SOURCE3 1
- angle_coeff @angle:nc-n-pc harmonic 63.550 117.210 # SOURCE3 1 0.0000
- angle_coeff @angle:nd-n-nd harmonic 70.860 116.410 # SOURCE3 1 same_as_nc-n-nc
- angle_coeff @angle:nd-n-p2 harmonic 63.720 117.210 # SOURCE3 1 same_as_nc-n-p2
- angle_coeff @angle:nd-n-pd harmonic 63.510 117.210 # SOURCE3 1 same_as_nc-n-pc
- angle_coeff @angle:nh-n-nh harmonic 69.100 115.180 # SOURCE3 1 0.0000
- angle_coeff @angle:n-n-n harmonic 69.890 114.620 # SOURCE3 1 0.0000
- angle_coeff @angle:no-n-no harmonic 68.520 108.660 # SOURCE3 1 0.0000
- angle_coeff @angle:br-no-o harmonic 58.480 113.190 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-no-o harmonic 71.340 116.630 # SOURCE3 6 0.0000
- angle_coeff @angle:c2-no-o harmonic 69.870 116.870 # SOURCE3 8 0.4200
- angle_coeff @angle:c3-no-o harmonic 66.960 116.560 # SOURCE3 6 0.3959
- angle_coeff @angle:ca-no-o harmonic 68.740 118.100 # SOURCE3 10 1.1524
- angle_coeff @angle:cc-no-o harmonic 70.340 117.520 # SOURCE4 198 0.6255
- angle_coeff @angle:cl-no-o harmonic 61.610 115.080 # SOURCE3 2 0.0000
- angle_coeff @angle:c-no-o harmonic 67.100 115.260 # SOURCE3 1
- angle_coeff @angle:hn-no-o harmonic 55.310 115.490 # SOURCE3 2 0.0000
- angle_coeff @angle:oh-n-oh harmonic 72.050 107.260 # SOURCE3 1 0.0000
- angle_coeff @angle:i-no-o harmonic 54.600 116.310 # SOURCE3 2 0.0000
- angle_coeff @angle:n1-no-o harmonic 73.780 115.000 # HF/6-31G* 1
- angle_coeff @angle:n2-no-o harmonic 65.790 115.100 # SOURCE2 2 2.4000
- angle_coeff @angle:n3-no-o harmonic 72.010 115.560 # SOURCE3 6 0.6427
- angle_coeff @angle:n4-no-o harmonic 72.870 109.000 # SOURCE3 2 0.0000
- angle_coeff @angle:na-no-o harmonic 72.240 115.490 # SOURCE3 18 0.5640
- angle_coeff @angle:nh-no-o harmonic 74.080 115.710 # SOURCE3 8 0.4811
- angle_coeff @angle:n-no-o harmonic 71.670 115.410 # SOURCE3 8 0.3748
- angle_coeff @angle:no-no-o harmonic 59.920 112.380 # SOURCE3 4 0.0000
- angle_coeff @angle:o-n-o harmonic 73.390 128.610 # SOURCE3 3 1.0626
- angle_coeff @angle:o-no-o harmonic 77.150 125.130 # SOURCE4 461 0.7605
- angle_coeff @angle:o-no-oh harmonic 74.090 114.700 # SOURCE3 2 0.0000
- angle_coeff @angle:o-no-os harmonic 73.710 114.010 # SOURCE3 8 0.9778
- angle_coeff @angle:o-no-p2 harmonic 64.840 117.380 # SOURCE3 20 0.8083
- angle_coeff @angle:o-no-p3 harmonic 61.420 116.780 # SOURCE3 6 0.4929
- angle_coeff @angle:o-no-p4 harmonic 60.600 116.640 # SOURCE3 6 0.0089
- angle_coeff @angle:o-no-p5 harmonic 61.770 116.690 # SOURCE3 8 0.4507
- angle_coeff @angle:o-no-s4 harmonic 72.320 114.490 # SOURCE3 6 0.5674
- angle_coeff @angle:o-no-s6 harmonic 73.140 114.390 # SOURCE3 6 0.8311
- angle_coeff @angle:o-no-s harmonic 81.060 119.810 # SOURCE3 4 0.0042
- angle_coeff @angle:o-no-sh harmonic 79.650 116.100 # SOURCE3 2 0.0000
- angle_coeff @angle:o-no-ss harmonic 78.810 115.580 # SOURCE3 6 0.5860
- angle_coeff @angle:os-n-os harmonic 72.280 106.530 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-n-p2 harmonic 61.200 119.620 # SOURCE3 1
- angle_coeff @angle:p3-n-p3 harmonic 62.850 108.730 # SOURCE3 3 0.2591
- angle_coeff @angle:p4-n-p4 harmonic 64.210 108.550 # SOURCE3 1
- angle_coeff @angle:p5-n-p5 harmonic 67.920 99.990 # SOURCE3 1
- angle_coeff @angle:pc-n-pc harmonic 60.950 119.620 # SOURCE3 1 0.0000
- angle_coeff @angle:pd-n-pd harmonic 60.950 119.620 # SOURCE3 1 same_as_pc-n-pc
- angle_coeff @angle:s4-n-s4 harmonic 97.760 113.750 # SOURCE3 1 0.0000
- angle_coeff @angle:s6-n-s6 harmonic 99.030 119.680 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-n-sh harmonic 98.560 119.030 # SOURCE3 1 0.0000
- angle_coeff @angle:s-n-s harmonic 93.680 126.000 # SOURCE3 1
- angle_coeff @angle:ss-n-ss harmonic 99.420 118.490 # SOURCE3 1 0.0000
- angle_coeff @angle:br-oh-ho harmonic 42.150 101.600 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-oh-ho harmonic 50.200 108.760 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-oh-ho harmonic 49.910 108.980 # SOURCE3 6 2.2379
- angle_coeff @angle:c3-oh-ho harmonic 47.090 108.160 # SOURCE3 42 1.3034
- angle_coeff @angle:ca-oh-ho harmonic 48.850 109.470 # SOURCE3 7 1.0405
- angle_coeff @angle:cc-oh-ho harmonic 50.060 106.970 # SOURCE4 63 1.4230
- angle_coeff @angle:cd-oh-ho harmonic 49.840 107.160 # SOURCE4 54 1.4035
- angle_coeff @angle:ce-oh-ho harmonic 49.700 106.840 # SOURCE4 23 1.5653
- angle_coeff @angle:cf-oh-ho harmonic 50.070 107.190 # SOURCE4 11 0.9954
- angle_coeff @angle:c-oh-ho harmonic 51.190 107.370 # SOURCE3 34 1.6830
- angle_coeff @angle:cl-oh-ho harmonic 43.560 102.400 # SOURCE2 1 0.0000
- angle_coeff @angle:cx-oh-ho harmonic 49.640 106.170 # SOURCE3 3 0.0644
- angle_coeff @angle:cy-oh-ho harmonic 47.620 107.320 # SOURCE4 5 0.4955
- angle_coeff @angle:f-oh-ho harmonic 48.470 96.800 # SOURCE2 1 0.0000
- angle_coeff @angle:ho-oh-ho harmonic 41.930 104.800 # SOURCE2 1 0.0000
- angle_coeff @angle:ho-oh-i harmonic 35.670 107.980 # SOURCE3 2 0.0000
- angle_coeff @angle:ho-oh-n1 harmonic 52.550 107.810 # HF/6-31G* 1
- angle_coeff @angle:ho-oh-n2 harmonic 50.570 102.740 # SOURCE3 9 2.1286
- angle_coeff @angle:ho-oh-n3 harmonic 50.610 102.330 # SOURCE3 5 1.2591
- angle_coeff @angle:ho-oh-n4 harmonic 49.440 106.630 # SOURCE3 3 0.2770
- angle_coeff @angle:ho-oh-n harmonic 50.460 101.030 # SOURCE3 6 1.4086
- angle_coeff @angle:ho-oh-na harmonic 50.240 103.710 # SOURCE3 9 1.2590
- angle_coeff @angle:ho-oh-nh harmonic 49.970 102.420 # SOURCE4 15 0.6819
- angle_coeff @angle:ho-oh-no harmonic 50.310 102.170 # SOURCE3 1 0.0000
- angle_coeff @angle:ho-oh-o harmonic 47.260 100.870 # SOURCE3 1
- angle_coeff @angle:ho-oh-oh harmonic 49.340 98.720 # SOURCE3 2 0.0000
- angle_coeff @angle:ho-oh-os harmonic 49.580 99.690 # SOURCE4 18 0.3384
- angle_coeff @angle:ho-oh-p2 harmonic 44.140 109.450 # SOURCE3 8 3.3491
- angle_coeff @angle:ho-oh-p3 harmonic 42.540 110.640 # SOURCE3 3 0.5191
- angle_coeff @angle:ho-oh-p4 harmonic 43.670 110.190 # SOURCE3 4 0.2372
- angle_coeff @angle:ho-oh-p5 harmonic 44.150 110.140 # SOURCE3 92 3.8033
- angle_coeff @angle:ho-oh-py harmonic 44.390 110.730 # SOURCE3 79 1.7835
- angle_coeff @angle:ho-oh-s4 harmonic 54.130 106.760 # SOURCE4 9 0.4035
- angle_coeff @angle:ho-oh-s harmonic 51.720 100.150 # SOURCE3 2 0.0000
- angle_coeff @angle:ho-oh-s6 harmonic 57.540 109.200 # SOURCE3 13 0.1856
- angle_coeff @angle:ho-oh-sh harmonic 54.390 106.240 # SOURCE3 2 0.0661
- angle_coeff @angle:ho-oh-ss harmonic 54.540 107.060 # SOURCE3 4 0.9967
- angle_coeff @angle:ho-oh-sy harmonic 55.940 106.410 # SOURCE4 33 0.3729
- angle_coeff @angle:br-os-br harmonic 65.080 110.630 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-os-c1 harmonic 66.990 115.020 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-os-c3 harmonic 64.470 113.390 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-os-c2 harmonic 65.950 113.140 # SOURCE3 6 2.1932
- angle_coeff @angle:c2-os-c3 harmonic 64.210 112.090 # SOURCE3 7 4.1809
- angle_coeff @angle:c2-os-ca harmonic 65.430 113.590 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-os-n2 harmonic 64.910 118.130 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-os-na harmonic 68.210 103.850 # SOURCE3 4 0.6297
- angle_coeff @angle:c2-os-os harmonic 68.350 102.770 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-os-p5 harmonic 61.090 126.370 # SOURCE4 7 1.7939
- angle_coeff @angle:c2-os-ss harmonic 79.830 108.130 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-os-c3 harmonic 62.390 112.450 # SOURCE4 1293 1.6468
- angle_coeff @angle:c3-os-ca harmonic 62.270 117.970 # SOURCE4 2495 1.4576
- angle_coeff @angle:c3-os-cc harmonic 62.430 117.580 # SOURCE4 118 1.0660
- angle_coeff @angle:c3-os-cd harmonic 62.560 117.110 # SOURCE4 130 1.0230
- angle_coeff @angle:c3-os-ce harmonic 62.850 115.700 # SOURCE4 31 2.2296
- angle_coeff @angle:c3-os-cf harmonic 62.540 117.850 # SOURCE4 6 1.2514
- angle_coeff @angle:c3-os-cl harmonic 60.430 110.500 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-os-cy harmonic 61.670 115.650 # SOURCE4 5 0.2390
- angle_coeff @angle:c3-os-i harmonic 54.880 113.700 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-os-n1 harmonic 66.310 113.500 # HF/6-31G* 1
- angle_coeff @angle:c3-os-n2 harmonic 65.920 108.120 # SOURCE3 7 0.3048
- angle_coeff @angle:c3-os-n3 harmonic 64.520 110.280 # SOURCE4 14 1.9026
- angle_coeff @angle:c3-os-n4 harmonic 64.880 110.500 # SOURCE3 3 0.5426
- angle_coeff @angle:c3-os-n harmonic 65.400 109.520 # SOURCE4 14 0.6827
- angle_coeff @angle:c3-os-na harmonic 64.540 109.910 # SOURCE3 9 1.8268
- angle_coeff @angle:c3-os-nc harmonic 64.800 112.730 # SOURCE3 2 1.0358
- angle_coeff @angle:c3-os-nd harmonic 64.800 112.730 # SOURCE3 2 same_as_c3-os-nc
- angle_coeff @angle:c3-os-nh harmonic 65.220 109.690 # SOURCE4 8 0.1662
- angle_coeff @angle:c3-os-no harmonic 63.890 113.800 # SOURCE4 42 0.2726
- angle_coeff @angle:c3-os-o harmonic 65.620 103.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-os-oh harmonic 65.240 107.970 # SOURCE4 11 0.4333
- angle_coeff @angle:c3-os-os harmonic 65.890 105.010 # SOURCE3 7 0.6328
- angle_coeff @angle:c3-os-p2 harmonic 63.400 115.470 # SOURCE3 8 2.6374
- angle_coeff @angle:c3-os-p3 harmonic 60.450 115.970 # SOURCE3 3 0.3597
- angle_coeff @angle:c3-os-p4 harmonic 61.300 117.480 # SOURCE3 4 0.3850
- angle_coeff @angle:c3-os-p5 harmonic 62.000 118.000 # SOURCE3 31 1.2882
- angle_coeff @angle:c3-os-py harmonic 61.690 117.800 # SOURCE3 16 0.9654
- angle_coeff @angle:c3-os-s4 harmonic 77.610 111.500 # SOURCE3 6 1.4240
- angle_coeff @angle:c3-os-s6 harmonic 80.000 115.790 # SOURCE4 60 1.2588
- angle_coeff @angle:c3-os-s harmonic 75.020 109.550 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-os-sh harmonic 78.050 112.820 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-os-ss harmonic 76.870 113.190 # SOURCE3 3 0.2455
- angle_coeff @angle:ca-os-ca harmonic 63.310 119.950 # SOURCE4 107 1.6535
- angle_coeff @angle:ca-os-cc harmonic 67.320 106.320 # SOURCE4 56 2.1614
- angle_coeff @angle:ca-os-cd harmonic 66.250 109.770 # SOURCE3 6 5.0326
- angle_coeff @angle:ca-os-n3 harmonic 65.390 112.190 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-os-na harmonic 66.470 108.240 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-os-nc harmonic 66.090 113.680 # SOURCE3 2
- angle_coeff @angle:ca-os-nd harmonic 66.090 113.680 # SOURCE3 2
- angle_coeff @angle:ca-os-p5 harmonic 61.600 123.420 # SOURCE4 54 1.1358
- angle_coeff @angle:ca-os-s6 harmonic 80.940 116.970 # SOURCE4 15 0.9514
- angle_coeff @angle:c-os-c2 harmonic 64.910 118.020 # SOURCE4 7 0.3666
- angle_coeff @angle:c-os-c3 harmonic 63.630 115.140 # SOURCE3 17 1.8967
- angle_coeff @angle:c-os-c harmonic 64.540 120.640 # SOURCE4 7 1.5114
- angle_coeff @angle:c-os-ca harmonic 63.750 120.870 # SOURCE4 257 1.7209
- angle_coeff @angle:c-os-cc harmonic 64.150 119.620 # SOURCE3 5 6.0675
- angle_coeff @angle:cc-os-cc harmonic 67.250 106.760 # SOURCE4 192 0.6652
- angle_coeff @angle:cc-os-cd harmonic 63.800 118.620 # SOURCE4 14 1.9764
- angle_coeff @angle:c-os-cd harmonic 64.150 119.620 # SOURCE3 5 6.0675
- angle_coeff @angle:cc-os-na harmonic 65.510 111.660 # SOURCE3 28 4.1343
- angle_coeff @angle:cc-os-nc harmonic 68.120 107.230 # SOURCE3 6 2.7507
- angle_coeff @angle:cc-os-os harmonic 66.270 108.470 # SOURCE3 2 0.0000
- angle_coeff @angle:cc-os-ss harmonic 75.750 119.590 # SOURCE3 1 0.0000
- angle_coeff @angle:c-os-cy harmonic 71.750 91.100 # SOURCE3 2 0.0155
- angle_coeff @angle:cd-os-cd harmonic 67.350 106.450 # SOURCE4 60 0.9115
- angle_coeff @angle:cd-os-na harmonic 65.510 111.660 # SOURCE3 28 4.1343
- angle_coeff @angle:cd-os-nd harmonic 68.120 107.230 # SOURCE3 6 2.7507
- angle_coeff @angle:cd-os-os harmonic 66.270 108.470 # SOURCE3 2 same_as_cc-os-os
- angle_coeff @angle:cd-os-ss harmonic 75.750 119.590 # SOURCE3 1 same_as_cc-os-ss
- angle_coeff @angle:cl-os-cl harmonic 60.450 110.760 # SOURCE3 2 0.0000
- angle_coeff @angle:c-os-n2 harmonic 66.950 112.080 # SOURCE4 6 0.1154
- angle_coeff @angle:c-os-n harmonic 66.830 112.100 # SOURCE4 6 0.6163
- angle_coeff @angle:c-os-oh harmonic 66.500 110.500 # SOURCE3 1 0.0000
- angle_coeff @angle:c-os-os harmonic 66.250 110.280 # SOURCE4 10 1.3612
- angle_coeff @angle:c-os-p5 harmonic 62.330 122.100 # SOURCE4 5 0.5870
- angle_coeff @angle:c-os-sy harmonic 78.280 113.490 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-os-cx harmonic 85.270 61.820 # SOURCE4 107 0.1793
- angle_coeff @angle:cx-os-n harmonic 88.980 59.990 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-os-os harmonic 90.380 56.520 # SOURCE3 2 0.0000
- angle_coeff @angle:cy-os-cy harmonic 68.810 93.400 # SOURCE2 2 1.4000
- angle_coeff @angle:f-os-f harmonic 63.940 103.300 # SOURCE2 1 0.0000
- angle_coeff @angle:f-os-os harmonic 63.940 109.500 # SOURCE2 1 0.0000
- angle_coeff @angle:i-os-i harmonic 58.060 115.670 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-os-n1 harmonic 70.280 117.790 # HF/6-31G* 1
- angle_coeff @angle:n2-os-n2 harmonic 68.760 106.830 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-os-s6 harmonic 84.320 111.300 # SOURCE4 7 0.5651
- angle_coeff @angle:n3-os-n3 harmonic 67.760 104.880 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-os-n4 harmonic 65.660 114.680 # SOURCE3 1 0.0000
- angle_coeff @angle:na-os-na harmonic 66.100 109.590 # SOURCE3 1 0.0000
- angle_coeff @angle:na-os-ss harmonic 81.940 104.340 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-os-nc harmonic 68.170 110.400 # SOURCE2 1 0.0000
- angle_coeff @angle:nc-os-ss harmonic 80.210 110.970 # SOURCE3 1 0.0000
- angle_coeff @angle:nd-os-nd harmonic 68.170 110.400 # SOURCE2 1 same_as_nc-os-nc
- angle_coeff @angle:nd-os-ss harmonic 80.210 110.970 # SOURCE3 1 same_as_nc-os-ss
- angle_coeff @angle:nh-os-nh harmonic 67.810 108.290 # SOURCE3 1 0.0000
- angle_coeff @angle:n-os-n harmonic 68.080 108.310 # SOURCE3 1 0.0000
- angle_coeff @angle:no-os-no harmonic 66.400 111.860 # SOURCE3 1 0.0000
- angle_coeff @angle:n-os-s6 harmonic 83.370 113.620 # SOURCE4 5 0.0928
- angle_coeff @angle:o-os-o harmonic 62.760 114.680 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-os-p2 harmonic 64.670 120.020 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-os-p5 harmonic 67.590 107.860 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-os-p3 harmonic 60.040 121.220 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-os-py harmonic 65.620 105.580 # SOURCE3 1 0.0000
- angle_coeff @angle:p5-os-p5 harmonic 61.920 126.250 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-os-s4 harmonic 99.450 111.630 # SOURCE3 1 0.0000
- angle_coeff @angle:s6-os-s6 harmonic 103.740 119.070 # SOURCE3 2 0.4318
- angle_coeff @angle:sh-os-sh harmonic 97.950 118.950 # SOURCE3 1 0.0000
- angle_coeff @angle:s-os-s harmonic 91.270 118.080 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-os-ss harmonic 97.420 115.640 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p2-br harmonic 65.020 108.600 # SOURCE3 1
- angle_coeff @angle:br-p2-c2 harmonic 63.020 102.320 # SOURCE3 2 0.0146
- angle_coeff @angle:br-p2-n2 harmonic 64.590 103.330 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p2-o harmonic 63.020 110.870 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p2-p2 harmonic 63.350 115.460 # SOURCE3 4 7.8622
- angle_coeff @angle:br-p2-s harmonic 82.100 110.520 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-p2-c1 harmonic 62.650 99.040 # SOURCE3 1
- angle_coeff @angle:c1-p2-c2 harmonic 63.650 101.290 # SOURCE3 1
- angle_coeff @angle:c1-p2-n2 harmonic 66.100 101.790 # SOURCE3 1
- angle_coeff @angle:c1-p2-o harmonic 66.040 107.620 # SOURCE3 1
- angle_coeff @angle:c1-p2-p2 harmonic 67.310 99.540 # SOURCE3 1
- angle_coeff @angle:c1-p2-s harmonic 82.930 105.900 # SOURCE3 1
- angle_coeff @angle:c2-p2-c2 harmonic 64.650 104.500 # SOURCE3 1
- angle_coeff @angle:c2-p2-c3 harmonic 61.690 101.900 # SOURCE3 4 0.1132
- angle_coeff @angle:c2-p2-ca harmonic 61.990 101.950 # SOURCE3 1
- angle_coeff @angle:c2-p2-cl harmonic 61.200 102.720 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-p2-f harmonic 66.480 103.470 # SOURCE3 2 0.0136
- angle_coeff @angle:c2-p2-hp harmonic 48.160 97.190 # SOURCE3 3 0.0216
- angle_coeff @angle:c2-p2-i harmonic 54.100 101.940 # SOURCE3 2 0.0368
- angle_coeff @angle:c2-p2-n2 harmonic 69.040 99.880 # SOURCE3 1
- angle_coeff @angle:c2-p2-n3 harmonic 67.110 101.800 # SOURCE3 1
- angle_coeff @angle:c2-p2-n4 harmonic 62.450 98.260 # SOURCE3 6 0.1522
- angle_coeff @angle:c2-p2-n harmonic 65.340 103.280 # SOURCE3 4 3.3113
- angle_coeff @angle:c2-p2-na harmonic 64.790 103.990 # SOURCE3 8 1.6834
- angle_coeff @angle:c2-p2-nh harmonic 65.840 105.170 # SOURCE3 8 0.8263
- angle_coeff @angle:c2-p2-no harmonic 66.990 97.970 # SOURCE3 3 0.4175
- angle_coeff @angle:c2-p2-o harmonic 66.350 115.160 # SOURCE3 1
- angle_coeff @angle:c2-p2-oh harmonic 67.930 102.890 # SOURCE3 3 0.8191
- angle_coeff @angle:c2-p2-os harmonic 69.280 102.120 # SOURCE3 4 0.8783
- angle_coeff @angle:c2-p2-p2 harmonic 69.100 99.560 # SOURCE3 1
- angle_coeff @angle:c2-p2-p3 harmonic 60.750 99.270 # SOURCE3 4 1.1590
- angle_coeff @angle:c2-p2-p4 harmonic 60.850 96.940 # SOURCE3 1
- angle_coeff @angle:c2-p2-p5 harmonic 60.620 97.610 # SOURCE3 1
- angle_coeff @angle:c2-p2-s4 harmonic 77.420 95.150 # SOURCE3 1
- angle_coeff @angle:c2-p2-s6 harmonic 77.560 95.510 # SOURCE3 1
- angle_coeff @angle:c2-p2-s harmonic 85.340 105.530 # SOURCE3 1
- angle_coeff @angle:c2-p2-sh harmonic 81.290 101.490 # SOURCE3 3 0.0057
- angle_coeff @angle:c2-p2-ss harmonic 81.300 101.810 # SOURCE3 4 0.5883
- angle_coeff @angle:c3-p2-c3 harmonic 59.710 99.300 # SOURCE3 1
- angle_coeff @angle:c3-p2-n2 harmonic 64.420 100.820 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p2-o harmonic 64.090 106.720 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p2-os harmonic 65.020 101.340 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p2-p2 harmonic 65.390 100.480 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p2-s harmonic 80.980 105.680 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-p2-ca harmonic 60.070 99.700 # SOURCE3 1
- angle_coeff @angle:ca-p2-n2 harmonic 64.770 100.820 # SOURCE3 1
- angle_coeff @angle:ca-p2-n harmonic 66.610 89.970 # SOURCE3 1
- angle_coeff @angle:ca-p2-na harmonic 66.630 89.210 # SOURCE3 1
- angle_coeff @angle:ca-p2-o harmonic 64.430 106.880 # SOURCE3 1
- angle_coeff @angle:ca-p2-s harmonic 80.490 107.930 # SOURCE3 1
- angle_coeff @angle:c-p2-c2 harmonic 62.160 97.300 # SOURCE3 1
- angle_coeff @angle:c-p2-c harmonic 61.190 90.100 # SOURCE3 1
- angle_coeff @angle:ce-p2-o harmonic 64.940 107.440 # SOURCE3 1
- angle_coeff @angle:ce-p2-s harmonic 82.030 105.540 # SOURCE3 1
- angle_coeff @angle:cf-p2-o harmonic 64.940 107.440 # SOURCE3 1 same_as_ce-p2-o
- angle_coeff @angle:cf-p2-s harmonic 82.030 105.540 # SOURCE3 1 same_as_ce-p2-s
- angle_coeff @angle:cl-p2-cl harmonic 59.120 108.700 # SOURCE3 1
- angle_coeff @angle:cl-p2-n2 harmonic 63.020 103.380 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-p2-o harmonic 61.870 110.570 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-p2-p2 harmonic 64.880 103.110 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-p2-s harmonic 79.650 110.110 # SOURCE3 1 0.0000
- angle_coeff @angle:f-p2-f harmonic 67.450 107.100 # SOURCE3 1
- angle_coeff @angle:f-p2-n2 harmonic 69.660 103.570 # SOURCE3 1 0.0000
- angle_coeff @angle:f-p2-o harmonic 70.010 110.610 # SOURCE3 1 0.0000
- angle_coeff @angle:f-p2-p2 harmonic 68.870 103.480 # SOURCE3 1 0.0000
- angle_coeff @angle:f-p2-s harmonic 83.240 114.710 # SOURCE3 2 5.2794
- angle_coeff @angle:hp-p2-hp harmonic 36.510 98.760 # SOURCE3 1
- angle_coeff @angle:hp-p2-n1 harmonic 49.670 95.180 # SOURCE3 2 1.5708
- angle_coeff @angle:hp-p2-n2 harmonic 51.270 95.540 # SOURCE3 19 4.7352
- angle_coeff @angle:hp-p2-ne harmonic 51.040 100.100 # SOURCE3 14 6.1290
- angle_coeff @angle:hp-p2-nf harmonic 51.040 100.100 # SOURCE3 14 same_as_hp-p2-ne
- angle_coeff @angle:hp-p2-o harmonic 51.210 105.580 # SOURCE3 1 0.0000
- angle_coeff @angle:hp-p2-p2 harmonic 48.180 101.880 # SOURCE3 27 12.9535
- angle_coeff @angle:hp-p2-p4 harmonic 41.290 94.510 # SOURCE3 1 0.0000
- angle_coeff @angle:hp-p2-p5 harmonic 42.510 89.070 # SOURCE3 1 0.0000
- angle_coeff @angle:hp-p2-pe harmonic 47.430 97.250 # SOURCE3 16 8.8916
- angle_coeff @angle:hp-p2-pf harmonic 47.430 97.250 # SOURCE3 16 same_as_hp-p2-pe
- angle_coeff @angle:hp-p2-s4 harmonic 53.260 89.990 # SOURCE3 1 0.0000
- angle_coeff @angle:hp-p2-s harmonic 61.200 102.520 # SOURCE3 1 0.0000
- angle_coeff @angle:hp-p2-s6 harmonic 54.080 88.130 # SOURCE3 1 0.0000
- angle_coeff @angle:i-p2-i harmonic 57.140 104.160 # SOURCE3 1
- angle_coeff @angle:i-p2-n2 harmonic 55.340 101.770 # SOURCE3 1 0.0000
- angle_coeff @angle:i-p2-o harmonic 53.280 109.510 # SOURCE3 1 0.0000
- angle_coeff @angle:i-p2-p2 harmonic 58.360 102.630 # SOURCE3 1 0.0000
- angle_coeff @angle:i-p2-s harmonic 71.170 110.600 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-p2-n1 harmonic 74.350 86.220 # HF/6-31G* 1
- angle_coeff @angle:n2-p2-n2 harmonic 72.910 98.000 # SOURCE3 1
- angle_coeff @angle:n2-p2-n3 harmonic 70.540 100.420 # SOURCE3 1
- angle_coeff @angle:n2-p2-n4 harmonic 66.370 93.420 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-na harmonic 68.130 102.030 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-nh harmonic 69.830 101.870 # SOURCE3 2 0.8491
- angle_coeff @angle:n2-p2-no harmonic 69.740 98.120 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-o harmonic 69.560 115.340 # SOURCE3 1
- angle_coeff @angle:n2-p2-oh harmonic 68.760 109.720 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-os harmonic 72.480 102.290 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-p3 harmonic 62.580 99.510 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-p4 harmonic 61.230 101.730 # SOURCE3 1
- angle_coeff @angle:n2-p2-p5 harmonic 63.780 93.680 # SOURCE3 1
- angle_coeff @angle:n2-p2-s4 harmonic 78.670 97.830 # SOURCE3 1
- angle_coeff @angle:n2-p2-s6 harmonic 78.860 98.140 # SOURCE3 1
- angle_coeff @angle:n2-p2-s harmonic 85.870 112.940 # SOURCE3 1
- angle_coeff @angle:n2-p2-sh harmonic 84.460 100.820 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-p2-ss harmonic 84.230 101.760 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-p2-n3 harmonic 67.280 106.300 # SOURCE3 1
- angle_coeff @angle:n3-p2-o harmonic 70.570 106.830 # SOURCE3 1
- angle_coeff @angle:n3-p2-p2 harmonic 70.440 100.580 # SOURCE3 1
- angle_coeff @angle:n3-p2-s harmonic 87.340 105.750 # SOURCE3 1
- angle_coeff @angle:n4-p2-n4 harmonic 63.300 88.800 # SOURCE3 1
- angle_coeff @angle:n4-p2-o harmonic 65.000 101.360 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-p2-p2 harmonic 66.570 96.530 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-p2-s harmonic 81.040 104.980 # SOURCE3 1 0.0000
- angle_coeff @angle:na-p2-na harmonic 64.300 106.100 # SOURCE3 1
- angle_coeff @angle:na-p2-o harmonic 68.270 107.460 # SOURCE3 1 0.0000
- angle_coeff @angle:na-p2-s harmonic 84.570 108.150 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-p2-o harmonic 73.070 107.710 # SOURCE3 1
- angle_coeff @angle:ne-p2-s harmonic 89.700 105.500 # SOURCE3 1
- angle_coeff @angle:nf-p2-o harmonic 73.070 107.710 # SOURCE3 1 same_as_ne-p2-o
- angle_coeff @angle:nf-p2-s harmonic 89.700 105.500 # SOURCE3 1 same_as_ne-p2-s
- angle_coeff @angle:nh-p2-nh harmonic 67.650 104.000 # SOURCE3 1
- angle_coeff @angle:nh-p2-o harmonic 69.920 108.110 # SOURCE3 2 0.6773
- angle_coeff @angle:nh-p2-p2 harmonic 67.910 107.730 # SOURCE3 3 3.1678
- angle_coeff @angle:nh-p2-s harmonic 85.580 109.620 # SOURCE3 2 1.7725
- angle_coeff @angle:n-p2-n2 harmonic 69.610 98.850 # SOURCE3 1 0.0000
- angle_coeff @angle:n-p2-o harmonic 69.470 105.080 # SOURCE3 1 0.0000
- angle_coeff @angle:no-p2-no harmonic 67.260 98.200 # SOURCE3 1
- angle_coeff @angle:no-p2-o harmonic 69.400 104.870 # SOURCE3 1 0.0000
- angle_coeff @angle:no-p2-p2 harmonic 66.610 108.570 # SOURCE3 3 8.2121
- angle_coeff @angle:no-p2-s harmonic 84.470 109.060 # SOURCE3 2 5.4074
- angle_coeff @angle:n-p2-p2 harmonic 68.780 102.120 # SOURCE3 1 0.0000
- angle_coeff @angle:n-p2-s harmonic 83.340 112.340 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-p2-oh harmonic 71.860 100.100 # SOURCE3 1
- angle_coeff @angle:oh-p2-p2 harmonic 69.090 107.820 # SOURCE3 2 2.6708
- angle_coeff @angle:oh-p2-s harmonic 87.090 109.750 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p2-o harmonic 70.950 119.960 # SOURCE3 1
- angle_coeff @angle:o-p2-oh harmonic 70.850 110.460 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p2-os harmonic 72.860 108.810 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p2-p2 harmonic 68.910 114.230 # SOURCE3 1
- angle_coeff @angle:o-p2-p3 harmonic 61.190 106.690 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p2-p4 harmonic 61.150 104.370 # SOURCE3 1
- angle_coeff @angle:o-p2-p5 harmonic 61.090 104.490 # SOURCE3 1
- angle_coeff @angle:o-p2-pe harmonic 59.000 145.960 # SOURCE3 1
- angle_coeff @angle:o-p2-pf harmonic 59.000 145.960 # SOURCE3 1 same_as_o-p2-pe
- angle_coeff @angle:o-p2-s4 harmonic 76.220 106.590 # SOURCE3 1
- angle_coeff @angle:o-p2-s6 harmonic 77.110 105.040 # SOURCE3 1
- angle_coeff @angle:o-p2-s harmonic 86.500 117.420 # SOURCE3 1
- angle_coeff @angle:o-p2-sh harmonic 82.540 109.600 # SOURCE3 1 0.0000
- angle_coeff @angle:os-p2-os harmonic 75.140 98.300 # SOURCE3 1
- angle_coeff @angle:os-p2-p2 harmonic 72.150 101.460 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p2-ss harmonic 82.710 109.600 # SOURCE3 1 0.0000
- angle_coeff @angle:os-p2-s harmonic 88.770 108.470 # SOURCE3 3 1.7065
- angle_coeff @angle:p2-p2-n2 harmonic 72.700 97.400 # SOURCE3 1
- angle_coeff @angle:p2-p2-p3 harmonic 63.950 101.730 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-p2-p4 harmonic 63.280 101.980 # SOURCE3 1
- angle_coeff @angle:p2-p2-p5 harmonic 64.100 99.330 # SOURCE3 1
- angle_coeff @angle:p2-p2-s4 harmonic 82.350 95.730 # SOURCE3 1
- angle_coeff @angle:p2-p2-s6 harmonic 82.540 95.950 # SOURCE3 1
- angle_coeff @angle:p2-p2-s harmonic 87.130 111.280 # SOURCE3 1
- angle_coeff @angle:p2-p2-sh harmonic 81.160 113.940 # SOURCE3 3 8.5009
- angle_coeff @angle:p3-p2-p3 harmonic 59.740 101.000 # SOURCE3 1
- angle_coeff @angle:p3-p2-s harmonic 76.850 113.280 # SOURCE3 2 6.7035
- angle_coeff @angle:p4-p2-s harmonic 79.510 103.890 # SOURCE3 1
- angle_coeff @angle:p5-p2-p5 harmonic 62.680 89.400 # SOURCE3 1
- angle_coeff @angle:p5-p2-s harmonic 80.520 101.210 # SOURCE3 1
- angle_coeff @angle:pe-p2-s harmonic 87.030 106.350 # SOURCE3 1
- angle_coeff @angle:pf-p2-s harmonic 87.030 106.350 # SOURCE3 1 same_as_pe-p2-s
- angle_coeff @angle:s4-p2-s4 harmonic 102.320 85.300 # SOURCE3 1
- angle_coeff @angle:s6-p2-s6 harmonic 95.800 98.200 # SOURCE3 1
- angle_coeff @angle:sh-p2-sh harmonic 105.800 98.500 # SOURCE3 1
- angle_coeff @angle:s-p2-s harmonic 113.120 106.600 # SOURCE3 1
- angle_coeff @angle:s-p2-s4 harmonic 99.570 105.290 # SOURCE3 1
- angle_coeff @angle:s-p2-s6 harmonic 99.150 106.930 # SOURCE3 1
- angle_coeff @angle:s-p2-sh harmonic 104.500 110.730 # SOURCE3 2 0.0232
- angle_coeff @angle:s-p2-ss harmonic 103.090 114.140 # SOURCE3 4 5.9223
- angle_coeff @angle:ss-p2-ss harmonic 106.390 97.900 # SOURCE3 1
- angle_coeff @angle:br-p3-br harmonic 65.960 103.540 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p3-hp harmonic 43.060 96.360 # SOURCE3 4 0.6701
- angle_coeff @angle:c1-p3-c1 harmonic 61.500 100.500 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-p3-f harmonic 65.100 96.900 # SOURCE2 1 0.0000
- angle_coeff @angle:c1-p3-hp harmonic 44.980 97.670 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-p3-c2 harmonic 59.650 101.770 # SOURCE3 3 0.0000
- angle_coeff @angle:c2-p3-hp harmonic 44.060 97.850 # SOURCE3 4 0.0000
- angle_coeff @angle:c3-p3-c3 harmonic 59.950 99.660 # SOURCE3 40 0.9854
- angle_coeff @angle:c3-p3-ca harmonic 59.600 101.940 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-p3-cl harmonic 61.420 99.890 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p3-f harmonic 63.510 97.800 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-p3-hp harmonic 43.910 97.660 # SOURCE3 9 0.4096
- angle_coeff @angle:c3-p3-n2 harmonic 63.720 96.550 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-p3-n3 harmonic 62.780 101.180 # SOURCE3 10 2.2338
- angle_coeff @angle:c3-p3-n4 harmonic 61.660 96.940 # SOURCE3 6 0.4815
- angle_coeff @angle:c3-p3-n harmonic 61.970 101.770 # SOURCE3 12 2.4449
- angle_coeff @angle:c3-p3-na harmonic 62.590 100.170 # SOURCE3 4 0.0554
- angle_coeff @angle:c3-p3-nh harmonic 61.770 104.500 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-p3-no harmonic 62.270 96.980 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-p3-o harmonic 62.860 111.670 # SOURCE3 28 5.3387
- angle_coeff @angle:c3-p3-oh harmonic 64.890 98.210 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-p3-os harmonic 64.330 99.530 # SOURCE3 3 1.7678
- angle_coeff @angle:c3-p3-p3 harmonic 57.790 100.310 # SOURCE3 18 2.1836
- angle_coeff @angle:c3-p3-p5 harmonic 57.640 100.900 # SOURCE3 10 2.7070
- angle_coeff @angle:c3-p3-s4 harmonic 76.740 98.880 # SOURCE3 8 6.2235
- angle_coeff @angle:c3-p3-s6 harmonic 76.100 101.180 # SOURCE3 12 6.4536
- angle_coeff @angle:c3-p3-sh harmonic 75.720 98.710 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-p3-ss harmonic 75.730 99.370 # SOURCE3 2 0.0000
- angle_coeff @angle:ca-p3-ca harmonic 60.550 99.860 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-p3-hp harmonic 44.340 97.500 # SOURCE3 2 0.0000
- angle_coeff @angle:c-p3-c3 harmonic 60.100 97.060 # SOURCE3 3 1.1490
- angle_coeff @angle:c-p3-c harmonic 58.350 100.900 # SOURCE3 1 0.0000
- angle_coeff @angle:c-p3-hp harmonic 43.390 96.550 # SOURCE3 6 0.5223
- angle_coeff @angle:cl-p3-cl harmonic 62.670 102.820 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-p3-f harmonic 63.640 99.200 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-p3-hp harmonic 44.110 96.300 # SOURCE3 3 0.6203
- angle_coeff @angle:c-p3-os harmonic 70.240 81.320 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-p3-hp harmonic 44.010 95.200 # SOURCE2 1 0.0000
- angle_coeff @angle:f-p3-f harmonic 68.840 97.400 # SOURCE2 8 1.6636
- angle_coeff @angle:f-p3-hp harmonic 48.850 96.410 # SOURCE3 2 0.0000
- angle_coeff @angle:f-p3-n3 harmonic 66.890 100.600 # SOURCE2 1 0.0000
- angle_coeff @angle:f-p3-os harmonic 67.790 102.200 # SOURCE2 1 0.0000
- angle_coeff @angle:f-p3-p3 harmonic 59.520 97.200 # SOURCE2 1 0.0000
- angle_coeff @angle:hp-p3-hp harmonic 35.200 95.520 # SOURCE3 44 2.4200
- angle_coeff @angle:hp-p3-i harmonic 37.430 96.190 # SOURCE3 4 0.6454
- angle_coeff @angle:hp-p3-n1 harmonic 49.970 92.980 # HF/6-31G* 1
- angle_coeff @angle:hp-p3-n2 harmonic 46.470 98.280 # SOURCE3 10 1.8860
- angle_coeff @angle:hp-p3-n3 harmonic 48.110 94.460 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-n4 harmonic 45.300 93.210 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-n harmonic 47.100 95.150 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-na harmonic 46.750 97.270 # SOURCE3 12 0.9318
- angle_coeff @angle:hp-p3-nh harmonic 48.200 94.100 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-no harmonic 46.080 93.060 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-o harmonic 51.150 101.020 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-oh harmonic 49.120 95.950 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-os harmonic 48.580 97.350 # SOURCE3 6 2.8326
- angle_coeff @angle:hp-p3-p2 harmonic 40.920 99.110 # SOURCE3 16 4.3022
- angle_coeff @angle:hp-p3-p3 harmonic 40.500 95.520 # SOURCE3 4 0.0844
- angle_coeff @angle:hp-p3-p4 harmonic 40.370 95.950 # SOURCE3 6 0.0489
- angle_coeff @angle:hp-p3-p5 harmonic 40.510 95.540 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-s4 harmonic 54.390 95.490 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-s6 harmonic 55.380 92.950 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-sh harmonic 53.620 94.210 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p3-ss harmonic 53.780 94.610 # SOURCE3 2 0.0000
- angle_coeff @angle:i-p3-i harmonic 58.550 105.250 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-p3-n1 harmonic 73.380 90.440 # HF/6-31G* 1
- angle_coeff @angle:n2-p3-n2 harmonic 64.560 103.460 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-p3-n3 harmonic 62.770 113.800 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-p3-o harmonic 68.780 107.100 # SOURCE3 4 0.0000
- angle_coeff @angle:n3-p3-oh harmonic 68.930 98.360 # SOURCE3 1
- angle_coeff @angle:n4-p3-n4 harmonic 61.460 100.530 # SOURCE3 1 0.0000
- angle_coeff @angle:na-p3-na harmonic 63.790 106.220 # SOURCE3 1
- angle_coeff @angle:nh-p3-nh harmonic 64.100 109.110 # SOURCE3 1 0.0000
- angle_coeff @angle:n-p3-n harmonic 64.000 104.580 # SOURCE3 1
- angle_coeff @angle:n-p3-o harmonic 68.400 104.990 # SOURCE3 4 0.0000
- angle_coeff @angle:no-p3-no harmonic 63.350 98.330 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-p3-oh harmonic 68.360 104.480 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p3-o harmonic 69.980 122.180 # SOURCE3 2 7.8556
- angle_coeff @angle:o-p3-p3 harmonic 56.940 116.740 # SOURCE3 14 0.7525
- angle_coeff @angle:o-p3-p5 harmonic 59.320 107.620 # SOURCE3 4 0.0000
- angle_coeff @angle:o-p3-s4 harmonic 78.140 110.700 # SOURCE3 4 0.7259
- angle_coeff @angle:o-p3-s6 harmonic 79.950 106.660 # SOURCE3 6 3.4017
- angle_coeff @angle:os-p3-os harmonic 67.300 106.650 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-p3-p2 harmonic 58.990 103.580 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-p3-p3 harmonic 56.870 105.310 # SOURCE3 4 3.5864
- angle_coeff @angle:p4-p3-p4 harmonic 58.570 99.090 # SOURCE3 1
- angle_coeff @angle:p5-p3-p5 harmonic 58.650 99.100 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-p3-s4 harmonic 100.040 98.260 # SOURCE3 1 0.0000
- angle_coeff @angle:s6-p3-s6 harmonic 100.770 97.780 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-p3-sh harmonic 93.590 107.580 # SOURCE3 1 0.0000
- angle_coeff @angle:s-p3-s harmonic 87.250 131.320 # SOURCE3 1
- angle_coeff @angle:ss-p3-ss harmonic 93.360 109.240 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p4-br harmonic 65.640 110.410 # SOURCE3 1
- angle_coeff @angle:br-p4-o harmonic 60.420 124.800 # SOURCE3 1
- angle_coeff @angle:c2-p4-c2 harmonic 59.340 104.210 # SOURCE3 1
- angle_coeff @angle:c2-p4-hp harmonic 44.230 99.500 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-p4-o harmonic 63.010 113.590 # SOURCE3 1
- angle_coeff @angle:c3-p4-c3 harmonic 59.460 102.550 # SOURCE3 4 0.0192
- angle_coeff @angle:c3-p4-n2 harmonic 62.470 103.170 # SOURCE3 1
- angle_coeff @angle:c3-p4-n3 harmonic 63.130 102.370 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p4-n4 harmonic 60.000 99.570 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p4-n harmonic 62.290 103.260 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p4-na harmonic 60.600 117.670 # SOURCE3 5 19.0404
- angle_coeff @angle:c3-p4-nh harmonic 62.860 102.790 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p4-no harmonic 61.120 99.800 # SOURCE3 3 0.2151
- angle_coeff @angle:c3-p4-o harmonic 61.960 116.440 # SOURCE3 25 2.6494
- angle_coeff @angle:c3-p4-oh harmonic 65.550 98.560 # SOURCE3 2 0.4558
- angle_coeff @angle:c3-p4-os harmonic 65.800 98.010 # SOURCE3 2 0.0931
- angle_coeff @angle:c3-p4-p2 harmonic 56.110 109.270 # SOURCE3 1
- angle_coeff @angle:c3-p4-p3 harmonic 56.940 103.530 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p4-p4 harmonic 60.790 102.120 # SOURCE3 1
- angle_coeff @angle:c3-p4-p5 harmonic 56.380 104.150 # SOURCE3 1
- angle_coeff @angle:c3-p4-sh harmonic 75.720 100.170 # SOURCE3 2 0.0815
- angle_coeff @angle:c3-p4-ss harmonic 75.600 101.190 # SOURCE3 1
- angle_coeff @angle:ca-p4-ca harmonic 58.870 107.770 # SOURCE3 1
- angle_coeff @angle:ca-p4-o harmonic 63.970 111.640 # SOURCE3 1
- angle_coeff @angle:cl-p4-cl harmonic 62.460 103.510 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-p4-o harmonic 61.910 116.530 # SOURCE3 2 0.0000
- angle_coeff @angle:hp-p4-hp harmonic 36.070 99.210 # SOURCE3 4 6.4572
- angle_coeff @angle:hp-p4-n1 harmonic 48.330 99.910 # HF/6-31G* 1
- angle_coeff @angle:hp-p4-o harmonic 50.250 109.350 # SOURCE3 6 10.8284
- angle_coeff @angle:hp-p4-p3 harmonic 39.650 98.960 # SOURCE3 4 0.0000
- angle_coeff @angle:hp-p4-s harmonic 49.200 110.240 # SOURCE3 4 4.1081
- angle_coeff @angle:i-p4-i harmonic 61.590 113.220 # SOURCE3 2 6.7916
- angle_coeff @angle:i-p4-o harmonic 60.270 110.220 # SOURCE3 4 9.7726
- angle_coeff @angle:n1-p4-n1 harmonic 68.740 100.610 # HF/6-31G* 1
- angle_coeff @angle:n1-p4-o harmonic 67.970 114.590 # HF/6-31G* 1
- angle_coeff @angle:n2-p4-n2 harmonic 66.360 102.540 # SOURCE3 1
- angle_coeff @angle:n2-p4-o harmonic 65.230 120.280 # SOURCE3 1
- angle_coeff @angle:n3-p4-o harmonic 67.920 113.270 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-p4-o harmonic 63.230 107.610 # SOURCE3 1 0.0000
- angle_coeff @angle:na-p4-o harmonic 72.190 110.600 # SOURCE3 5 1.3133
- angle_coeff @angle:nh-p4-nh harmonic 69.560 95.300 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-p4-o harmonic 66.920 115.860 # SOURCE3 3 3.2712
- angle_coeff @angle:n-p4-o harmonic 65.600 117.990 # SOURCE3 1 0.0000
- angle_coeff @angle:no-p4-o harmonic 63.000 114.690 # SOURCE3 3 0.1070
- angle_coeff @angle:oh-p4-oh harmonic 72.990 95.710 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p4-o harmonic 72.010 117.220 # SOURCE3 6 2.7792
- angle_coeff @angle:o-p4-oh harmonic 68.540 117.390 # SOURCE3 4 1.0083
- angle_coeff @angle:o-p4-os harmonic 68.880 116.670 # SOURCE3 4 0.6923
- angle_coeff @angle:o-p4-p2 harmonic 56.720 121.350 # SOURCE3 1
- angle_coeff @angle:o-p4-p3 harmonic 57.580 114.000 # SOURCE3 3 0.6663
- angle_coeff @angle:o-p4-p4 harmonic 61.640 116.430 # SOURCE3 1
- angle_coeff @angle:o-p4-p5 harmonic 58.150 109.760 # SOURCE3 1
- angle_coeff @angle:o-p4-s4 harmonic 72.350 112.190 # SOURCE3 1
- angle_coeff @angle:o-p4-s6 harmonic 71.250 113.890 # SOURCE3 1
- angle_coeff @angle:o-p4-s harmonic 75.540 112.780 # SOURCE3 2 0.0000
- angle_coeff @angle:o-p4-sh harmonic 74.810 118.090 # SOURCE3 1
- angle_coeff @angle:os-p4-os harmonic 71.510 100.340 # SOURCE3 1 0.0000
- angle_coeff @angle:o-p4-ss harmonic 75.800 116.140 # SOURCE3 4 1.0636
- angle_coeff @angle:p2-p4-p2 harmonic 56.350 110.710 # SOURCE3 1
- angle_coeff @angle:p3-p4-p3 harmonic 54.380 114.980 # SOURCE3 1 0.0000
- angle_coeff @angle:p4-p4-p4 harmonic 61.300 107.380 # SOURCE3 1
- angle_coeff @angle:p5-p4-p5 harmonic 55.630 107.780 # SOURCE3 1
- angle_coeff @angle:s4-p4-s4 harmonic 93.720 96.240 # SOURCE3 1
- angle_coeff @angle:s6-p4-s6 harmonic 90.160 102.360 # SOURCE3 1
- angle_coeff @angle:sh-p4-sh harmonic 98.440 98.810 # SOURCE3 1 0.0000
- angle_coeff @angle:s-p4-s harmonic 93.540 106.300 # SOURCE3 2 25.0119
- angle_coeff @angle:ss-p4-ss harmonic 96.270 104.410 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p5-br harmonic 67.070 103.380 # SOURCE3 1 0.0000
- angle_coeff @angle:br-p5-o harmonic 62.390 114.650 # SOURCE3 3 1.0910
- angle_coeff @angle:br-p5-oh harmonic 65.360 102.920 # SOURCE3 4 0.5468
- angle_coeff @angle:c1-p5-c1 harmonic 62.070 102.890 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-p5-o harmonic 64.450 115.770 # SOURCE3 2 0.0000
- angle_coeff @angle:c1-p5-oh harmonic 66.220 102.790 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-p5-c2 harmonic 57.300 106.560 # SOURCE3 1
- angle_coeff @angle:c2-p5-o harmonic 63.330 109.240 # SOURCE4 7 2.2628
- angle_coeff @angle:c2-p5-oh harmonic 64.000 101.690 # SOURCE3 1
- angle_coeff @angle:c2-p5-os harmonic 63.780 103.340 # SOURCE3 1
- angle_coeff @angle:c3-p5-c3 harmonic 59.060 106.230 # SOURCE3 14 2.6389
- angle_coeff @angle:c3-p5-hp harmonic 43.230 103.620 # SOURCE4 7 1.1616
- angle_coeff @angle:c3-p5-n3 harmonic 63.940 102.760 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-p5-o harmonic 63.790 112.500 # SOURCE3 23 4.4203
- angle_coeff @angle:c3-p5-oh harmonic 65.260 101.560 # SOURCE3 17 2.1803
- angle_coeff @angle:c3-p5-os harmonic 65.840 100.770 # SOURCE4 51 2.0928
- angle_coeff @angle:c3-p5-p4 harmonic 55.960 106.270 # SOURCE3 1
- angle_coeff @angle:c3-p5-s harmonic 75.870 113.400 # SOURCE3 4 2.0067
- angle_coeff @angle:c3-p5-ss harmonic 74.660 103.760 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-p5-ca harmonic 59.290 107.530 # SOURCE3 1
- angle_coeff @angle:ca-p5-o harmonic 63.850 113.980 # SOURCE3 1
- angle_coeff @angle:ca-p5-oh harmonic 65.600 101.770 # SOURCE3 1
- angle_coeff @angle:ca-p5-os harmonic 65.310 103.750 # SOURCE3 1
- angle_coeff @angle:c-p5-c harmonic 57.470 104.160 # SOURCE3 1
- angle_coeff @angle:cl-p5-cl harmonic 62.400 103.700 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-p5-o harmonic 62.360 115.320 # SOURCE3 2 0.0000
- angle_coeff @angle:cl-p5-oh harmonic 65.050 102.440 # SOURCE3 2 0.0000
- angle_coeff @angle:c-p5-o harmonic 63.510 107.190 # SOURCE4 16 0.5711
- angle_coeff @angle:c-p5-oh harmonic 63.500 102.120 # SOURCE3 1
- angle_coeff @angle:f-p5-f harmonic 67.910 99.960 # SOURCE2 4 0.9197
- angle_coeff @angle:f-p5-o harmonic 69.070 112.030 # SOURCE4 7 0.5178
- angle_coeff @angle:f-p5-oh harmonic 69.260 101.980 # SOURCE3 2 0.0000
- angle_coeff @angle:f-p5-os harmonic 69.530 102.700 # SOURCE4 5 0.1524
- angle_coeff @angle:f-p5-s harmonic 77.040 117.400 # SOURCE2 1 0.0000
- angle_coeff @angle:hp-p5-hp harmonic 34.260 101.090 # SOURCE3 4 1.3036
- angle_coeff @angle:hp-p5-n1 harmonic 49.690 101.320 # HF/6-31G* 1
- angle_coeff @angle:hp-p5-o harmonic 48.280 116.580 # SOURCE3 7 1.3282
- angle_coeff @angle:hp-p5-oh harmonic 48.850 101.450 # SOURCE3 5 0.9084
- angle_coeff @angle:hp-p5-s harmonic 52.540 119.200 # SOURCE2 1 0.0000
- angle_coeff @angle:i-p5-i harmonic 57.350 107.170 # SOURCE3 1 0.0000
- angle_coeff @angle:i-p5-o harmonic 52.720 115.930 # SOURCE3 3 0.0415
- angle_coeff @angle:i-p5-oh harmonic 56.650 102.260 # SOURCE3 4 1.9577
- angle_coeff @angle:n1-p5-n1 harmonic 73.170 101.550 # HF/6-31G* 1
- angle_coeff @angle:n1-p5-o harmonic 71.450 113.780 # HF/6-31G* 1
- angle_coeff @angle:n2-p5-n2 harmonic 70.250 106.340 # SOURCE3 1
- angle_coeff @angle:n2-p5-o harmonic 70.800 113.530 # SOURCE3 1
- angle_coeff @angle:n2-p5-oh harmonic 71.420 102.400 # SOURCE3 1
- angle_coeff @angle:n3-p5-n3 harmonic 68.510 103.370 # SOURCE4 47 2.1009
- angle_coeff @angle:n3-p5-nh harmonic 68.130 104.020 # SOURCE4 5 1.8740
- angle_coeff @angle:n3-p5-o harmonic 68.760 114.640 # SOURCE4 76 2.2728
- angle_coeff @angle:n3-p5-oh harmonic 69.420 104.180 # SOURCE3 6 0.4373
- angle_coeff @angle:n3-p5-os harmonic 70.640 101.940 # SOURCE4 34 2.3553
- angle_coeff @angle:n3-p5-s harmonic 78.990 117.120 # SOURCE4 7 0.7109
- angle_coeff @angle:n4-p5-n4 harmonic 62.620 102.200 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-p5-o harmonic 65.690 109.780 # SOURCE3 5 2.7519
- angle_coeff @angle:n4-p5-oh harmonic 67.490 98.480 # SOURCE3 6 0.4104
- angle_coeff @angle:n4-p5-os harmonic 69.210 94.550 # SOURCE3 2 0.0000
- angle_coeff @angle:na-p5-na harmonic 64.830 108.570 # SOURCE3 1 0.0000
- angle_coeff @angle:na-p5-o harmonic 67.730 113.430 # SOURCE3 11 0.8968
- angle_coeff @angle:na-p5-oh harmonic 68.960 102.070 # SOURCE3 16 1.4144
- angle_coeff @angle:na-p5-os harmonic 69.040 103.060 # SOURCE3 4 0.7463
- angle_coeff @angle:nh-p5-nh harmonic 69.500 99.510 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-p5-o harmonic 67.300 118.910 # SOURCE3 3 1.3237
- angle_coeff @angle:nh-p5-oh harmonic 69.360 103.810 # SOURCE3 2 0.0000
- angle_coeff @angle:nh-p5-os harmonic 70.950 100.510 # SOURCE3 2 0.0000
- angle_coeff @angle:n-p5-n3 harmonic 67.330 104.110 # SOURCE4 11 1.4088
- angle_coeff @angle:n-p5-n harmonic 66.800 103.090 # SOURCE3 1 0.0000
- angle_coeff @angle:n-p5-o harmonic 69.370 108.730 # SOURCE4 5 0.2571
- angle_coeff @angle:n-p5-oh harmonic 68.990 102.440 # SOURCE3 4 0.0999
- angle_coeff @angle:no-p5-no harmonic 64.570 95.680 # SOURCE3 1 0.0000
- angle_coeff @angle:no-p5-o harmonic 64.720 112.750 # SOURCE3 4 3.3684
- angle_coeff @angle:no-p5-oh harmonic 66.430 101.350 # SOURCE3 2 0.0000
- angle_coeff @angle:no-p5-os harmonic 66.640 101.700 # SOURCE3 4 0.0565
- angle_coeff @angle:n-p5-os harmonic 70.090 100.480 # SOURCE3 2 0.0000
- angle_coeff @angle:oh-p5-oh harmonic 71.250 102.450 # SOURCE3 39 2.4223
- angle_coeff @angle:oh-p5-os harmonic 71.770 102.370 # SOURCE3 8 1.5063
- angle_coeff @angle:oh-p5-p2 harmonic 60.920 103.530 # SOURCE3 1
- angle_coeff @angle:oh-p5-p3 harmonic 60.040 103.830 # SOURCE3 13 0.4303
- angle_coeff @angle:oh-p5-p4 harmonic 60.070 101.790 # SOURCE3 1
- angle_coeff @angle:oh-p5-p5 harmonic 64.950 100.450 # SOURCE3 1
- angle_coeff @angle:oh-p5-s4 harmonic 81.520 103.240 # SOURCE3 1
- angle_coeff @angle:oh-p5-s6 harmonic 82.230 101.480 # SOURCE3 1
- angle_coeff @angle:oh-p5-s harmonic 85.370 102.880 # SOURCE3 3 1.6044
- angle_coeff @angle:oh-p5-sh harmonic 80.940 101.410 # SOURCE3 2 0.0000
- angle_coeff @angle:oh-p5-ss harmonic 78.780 104.330 # SOURCE3 6 2.0112
- angle_coeff @angle:o-p5-o harmonic 73.530 115.800 # SOURCE3 17 5.7902
- angle_coeff @angle:o-p5-oh harmonic 69.980 115.260 # SOURCE4 740 1.3004
- angle_coeff @angle:o-p5-os harmonic 70.340 116.090 # SOURCE3 35 3.2062
- angle_coeff @angle:o-p5-p2 harmonic 58.380 114.600 # SOURCE3 1
- angle_coeff @angle:o-p5-p3 harmonic 57.310 115.480 # SOURCE3 9 2.1084
- angle_coeff @angle:o-p5-p4 harmonic 56.910 114.660 # SOURCE3 1
- angle_coeff @angle:o-p5-p5 harmonic 62.020 113.440 # SOURCE3 1
- angle_coeff @angle:o-p5-s4 harmonic 80.110 110.230 # SOURCE3 1
- angle_coeff @angle:o-p5-s6 harmonic 79.570 111.750 # SOURCE3 1
- angle_coeff @angle:o-p5-s harmonic 81.840 116.940 # SOURCE3 3 2.9506
- angle_coeff @angle:o-p5-sh harmonic 77.150 114.560 # SOURCE3 3 1.7645
- angle_coeff @angle:os-p5-os harmonic 72.510 101.770 # SOURCE4 243 2.0816
- angle_coeff @angle:os-p5-p3 harmonic 60.190 103.670 # SOURCE3 2 0.0000
- angle_coeff @angle:os-p5-p5 harmonic 63.870 104.480 # SOURCE3 1
- angle_coeff @angle:os-p5-s4 harmonic 82.050 102.520 # SOURCE3 1
- angle_coeff @angle:os-p5-s6 harmonic 82.310 101.890 # SOURCE3 1
- angle_coeff @angle:o-p5-ss harmonic 76.760 112.460 # SOURCE3 6 2.7392
- angle_coeff @angle:os-p5-s harmonic 80.280 117.280 # SOURCE4 74 0.7542
- angle_coeff @angle:os-p5-sh harmonic 79.910 104.590 # SOURCE3 2 0.0000
- angle_coeff @angle:os-p5-ss harmonic 79.620 102.650 # SOURCE4 25 1.8093
- angle_coeff @angle:p2-p5-p2 harmonic 57.260 107.140 # SOURCE3 1
- angle_coeff @angle:p3-p5-p3 harmonic 56.920 105.230 # SOURCE3 3 5.1024
- angle_coeff @angle:p4-p5-p4 harmonic 57.300 101.620 # SOURCE3 1
- angle_coeff @angle:p5-p5-p5 harmonic 59.250 112.720 # SOURCE3 1
- angle_coeff @angle:s6-p5-s6 harmonic 98.920 105.180 # SOURCE3 1
- angle_coeff @angle:sh-p5-sh harmonic 97.210 104.560 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-p5-ss harmonic 95.280 107.130 # SOURCE3 1
- angle_coeff @angle:s-p5-s harmonic 100.790 114.130 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-p5-ss harmonic 93.470 109.610 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-pc-n harmonic 68.330 90.800 # SOURCE3 3 2.3423
- angle_coeff @angle:cd-pc-na harmonic 68.730 90.180 # SOURCE3 81 2.7619
- angle_coeff @angle:cc-pd-n harmonic 68.330 90.800 # SOURCE3 3 same_as_cd-pc-n
- angle_coeff @angle:cc-pd-na harmonic 68.730 90.180 # SOURCE3 81 same_as_cd-pc-na
- angle_coeff @angle:c2-pe-ca harmonic 62.070 101.440 # SOURCE3 3 0.7177
- angle_coeff @angle:c2-pe-ce harmonic 61.820 103.010 # SOURCE3 4 1.4470
- angle_coeff @angle:c2-pe-cg harmonic 65.280 104.030 # SOURCE3 3 3.8740
- angle_coeff @angle:c2-pe-n2 harmonic 71.820 94.140 # SOURCE3 1
- angle_coeff @angle:c2-pe-ne harmonic 66.880 98.700 # SOURCE3 12 5.3383
- angle_coeff @angle:c2-pe-o harmonic 65.620 115.160 # SOURCE3 2 0.0149
- angle_coeff @angle:c2-pe-p2 harmonic 64.330 107.820 # SOURCE3 1
- angle_coeff @angle:c2-pe-pe harmonic 60.830 102.990 # SOURCE3 9 8.2860
- angle_coeff @angle:c2-pe-px harmonic 64.550 97.370 # SOURCE3 4 0.6655
- angle_coeff @angle:c2-pe-py harmonic 64.310 96.710 # SOURCE3 4 1.2755
- angle_coeff @angle:c2-pe-s harmonic 83.060 111.160 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-pe-sx harmonic 77.900 95.110 # SOURCE3 4 0.2676
- angle_coeff @angle:c2-pe-sy harmonic 76.420 95.560 # SOURCE3 2 0.0462
- angle_coeff @angle:ca-pe-n2 harmonic 65.480 102.030 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-pe-o harmonic 64.570 106.880 # SOURCE3 2 0.0018
- angle_coeff @angle:ca-pe-p2 harmonic 64.350 100.790 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-pe-pf harmonic 61.170 99.700 # SOURCE3 2 0.0000
- angle_coeff @angle:ca-pe-s harmonic 81.050 107.930 # SOURCE3 1 0.0000
- angle_coeff @angle:c-pe-c2 harmonic 61.660 97.300 # SOURCE3 3 0.0335
- angle_coeff @angle:ce-pe-n2 harmonic 66.250 100.550 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-pe-o harmonic 64.690 107.440 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-pe-p2 harmonic 64.930 99.560 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-pe-s harmonic 82.230 105.540 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-pe-n2 harmonic 70.820 101.790 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-pe-o harmonic 69.640 107.620 # SOURCE3 1 0.0000
- angle_coeff @angle:cg-pe-p2 harmonic 66.260 104.680 # SOURCE3 2 5.1435
- angle_coeff @angle:cg-pe-s harmonic 85.560 108.600 # SOURCE3 4 2.6981
- angle_coeff @angle:n2-pe-n2 harmonic 72.340 108.140 # SOURCE3 1
- angle_coeff @angle:n2-pe-ne harmonic 68.550 106.800 # SOURCE3 6 4.5981
- angle_coeff @angle:n2-pe-o harmonic 70.860 115.390 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-pe-p2 harmonic 66.740 111.600 # SOURCE3 1
- angle_coeff @angle:n2-pe-pe harmonic 61.500 109.400 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-pe-px harmonic 63.500 110.300 # SOURCE3 3 6.0548
- angle_coeff @angle:n2-pe-py harmonic 68.340 93.680 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-pe-s harmonic 86.860 114.840 # SOURCE3 3 3.6512
- angle_coeff @angle:n2-pe-sx harmonic 79.730 97.830 # SOURCE3 1 0.0000
- angle_coeff @angle:n2-pe-sy harmonic 78.100 98.140 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-pe-o harmonic 68.170 110.240 # SOURCE3 3 3.8478
- angle_coeff @angle:ne-pe-p2 harmonic 66.630 104.480 # SOURCE3 2 7.1207
- angle_coeff @angle:ne-pe-s harmonic 85.380 109.190 # SOURCE3 5 3.6708
- angle_coeff @angle:o-pe-o harmonic 70.340 119.960 # SOURCE3 1 0.0000
- angle_coeff @angle:o-pe-p2 harmonic 66.560 114.230 # SOURCE3 1 0.0000
- angle_coeff @angle:o-pe-pe harmonic 53.630 145.960 # SOURCE3 1 0.0000
- angle_coeff @angle:o-pe-px harmonic 65.790 104.370 # SOURCE3 1 0.0000
- angle_coeff @angle:o-pe-py harmonic 65.210 104.490 # SOURCE3 1 0.0000
- angle_coeff @angle:o-pe-s harmonic 86.750 117.420 # SOURCE3 2 0.0426
- angle_coeff @angle:o-pe-sx harmonic 76.900 106.590 # SOURCE3 1 0.0000
- angle_coeff @angle:o-pe-sy harmonic 75.980 105.040 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-pe-pe harmonic 65.430 98.240 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-pe-px harmonic 63.970 108.280 # SOURCE3 2 6.2959
- angle_coeff @angle:p2-pe-py harmonic 62.850 110.870 # SOURCE3 3 8.1645
- angle_coeff @angle:p2-pe-s harmonic 85.370 111.280 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-pe-sx harmonic 81.920 95.730 # SOURCE3 1 0.0000
- angle_coeff @angle:p2-pe-sy harmonic 80.670 95.950 # SOURCE3 1 0.0000
- angle_coeff @angle:pe-pe-s harmonic 80.550 107.910 # SOURCE3 2 1.5577
- angle_coeff @angle:px-pe-s harmonic 83.060 107.620 # SOURCE3 2 3.7266
- angle_coeff @angle:py-pe-s harmonic 82.090 108.730 # SOURCE3 3 5.3201
- angle_coeff @angle:s-pe-s harmonic 88.130 178.440 # SOURCE3 1 0.0000
- angle_coeff @angle:s-pe-sx harmonic 99.120 108.320 # SOURCE3 2 3.0318
- angle_coeff @angle:s-pe-sy harmonic 98.190 106.930 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-pf-ca harmonic 62.070 101.440 # SOURCE3 3 same_as_c2-pe-ca
- angle_coeff @angle:c2-pf-cf harmonic 61.820 103.010 # SOURCE3 4 same_as_c2-pe-ce
- angle_coeff @angle:c2-pf-ch harmonic 65.280 104.030 # SOURCE3 3 same_as_c2-pe-cg
- angle_coeff @angle:c2-pf-n2 harmonic 71.820 94.140 # SOURCE3 1 same_as_c2-pe-n2
- angle_coeff @angle:c2-pf-nf harmonic 66.880 98.700 # SOURCE3 12 same_as_c2-pe-ne
- angle_coeff @angle:c2-pf-o harmonic 65.620 115.160 # SOURCE3 2 same_as_c2-pe-o
- angle_coeff @angle:c2-pf-p2 harmonic 64.330 107.820 # SOURCE3 1 same_as_c2-pe-p2
- angle_coeff @angle:c2-pf-pf harmonic 60.830 102.990 # SOURCE3 9 same_as_c2-pe-pe
- angle_coeff @angle:c2-pf-px harmonic 64.550 97.370 # SOURCE3 4 same_as_c2-pe-px
- angle_coeff @angle:c2-pf-py harmonic 64.310 96.710 # SOURCE3 4 same_as_c2-pe-py
- angle_coeff @angle:c2-pf-s harmonic 83.060 111.160 # SOURCE3 2 same_as_c2-pe-s
- angle_coeff @angle:c2-pf-sx harmonic 77.900 95.110 # SOURCE3 4 same_as_c2-pe-sx
- angle_coeff @angle:c2-pf-sy harmonic 76.420 95.560 # SOURCE3 2 same_as_c2-pe-sy
- angle_coeff @angle:ca-pf-n2 harmonic 65.480 102.030 # SOURCE3 1 same_as_ca-pe-n2
- angle_coeff @angle:ca-pf-o harmonic 64.570 106.880 # SOURCE3 2 same_as_ca-pe-o
- angle_coeff @angle:ca-pf-p2 harmonic 64.350 100.790 # SOURCE3 1 same_as_ca-pe-p2
- angle_coeff @angle:ca-pf-pe harmonic 61.170 99.700 # SOURCE3 2 0.0000
- angle_coeff @angle:ca-pf-s harmonic 81.050 107.930 # SOURCE3 1 same_as_ca-pe-s
- angle_coeff @angle:c-pf-c2 harmonic 61.660 97.300 # SOURCE3 3 same_as_c-pe-c2
- angle_coeff @angle:cf-pf-n2 harmonic 66.250 100.550 # SOURCE3 1 same_as_ce-pe-n2
- angle_coeff @angle:cf-pf-o harmonic 64.690 107.440 # SOURCE3 1 same_as_ce-pe-o
- angle_coeff @angle:cf-pf-p2 harmonic 64.930 99.560 # SOURCE3 1 same_as_ce-pe-p2
- angle_coeff @angle:cf-pf-s harmonic 82.230 105.540 # SOURCE3 1 same_as_ce-pe-s
- angle_coeff @angle:ch-pf-n2 harmonic 70.820 101.790 # SOURCE3 1 same_as_cg-pe-n2
- angle_coeff @angle:ch-pf-o harmonic 69.640 107.620 # SOURCE3 1 same_as_cg-pe-o
- angle_coeff @angle:ch-pf-p2 harmonic 66.260 104.680 # SOURCE3 2 same_as_cg-pe-p2
- angle_coeff @angle:ch-pf-s harmonic 85.560 108.600 # SOURCE3 4 same_as_cg-pe-s
- angle_coeff @angle:n2-pf-n2 harmonic 72.340 108.140 # SOURCE3 1 same_as_n2-pe-n2
- angle_coeff @angle:n2-pf-nf harmonic 68.550 106.800 # SOURCE3 6 same_as_n2-pe-ne
- angle_coeff @angle:n2-pf-o harmonic 70.860 115.390 # SOURCE3 1 same_as_n2-pe-o
- angle_coeff @angle:n2-pf-p2 harmonic 66.740 111.600 # SOURCE3 1 same_as_n2-pe-p2
- angle_coeff @angle:n2-pf-pf harmonic 61.500 109.400 # SOURCE3 1 same_as_n2-pe-pe
- angle_coeff @angle:n2-pf-px harmonic 63.500 110.300 # SOURCE3 3 same_as_n2-pe-px
- angle_coeff @angle:n2-pf-py harmonic 68.340 93.680 # SOURCE3 1 same_as_n2-pe-py
- angle_coeff @angle:n2-pf-s harmonic 86.860 114.840 # SOURCE3 3 same_as_n2-pe-s
- angle_coeff @angle:n2-pf-sx harmonic 79.730 97.830 # SOURCE3 1 same_as_n2-pe-sx
- angle_coeff @angle:n2-pf-sy harmonic 78.100 98.140 # SOURCE3 1 same_as_n2-pe-sy
- angle_coeff @angle:nf-pf-o harmonic 68.170 110.240 # SOURCE3 3 same_as_ne-pe-o
- angle_coeff @angle:nf-pf-p2 harmonic 66.630 104.480 # SOURCE3 2 same_as_ne-pe-p2
- angle_coeff @angle:nf-pf-s harmonic 85.380 109.190 # SOURCE3 5 same_as_ne-pe-s
- angle_coeff @angle:o-pf-o harmonic 70.340 119.960 # SOURCE3 1 same_as_o-pe-o
- angle_coeff @angle:o-pf-p2 harmonic 66.560 114.230 # SOURCE3 1 same_as_o-pe-p2
- angle_coeff @angle:o-pf-pf harmonic 53.630 145.960 # SOURCE3 1 same_as_o-pe-pe
- angle_coeff @angle:o-pf-px harmonic 65.790 104.370 # SOURCE3 1 same_as_o-pe-px
- angle_coeff @angle:o-pf-py harmonic 65.210 104.490 # SOURCE3 1 same_as_o-pe-py
- angle_coeff @angle:o-pf-s harmonic 86.750 117.420 # SOURCE3 2 same_as_o-pe-s
- angle_coeff @angle:o-pf-sx harmonic 76.900 106.590 # SOURCE3 1 same_as_o-pe-sx
- angle_coeff @angle:o-pf-sy harmonic 75.980 105.040 # SOURCE3 1 same_as_o-pe-sy
- angle_coeff @angle:p2-pf-pf harmonic 65.430 98.240 # SOURCE3 1 same_as_p2-pe-pe
- angle_coeff @angle:p2-pf-px harmonic 63.970 108.280 # SOURCE3 2 same_as_p2-pe-px
- angle_coeff @angle:p2-pf-py harmonic 62.850 110.870 # SOURCE3 3 same_as_p2-pe-py
- angle_coeff @angle:p2-pf-s harmonic 85.370 111.280 # SOURCE3 1 same_as_p2-pe-s
- angle_coeff @angle:p2-pf-sx harmonic 81.920 95.730 # SOURCE3 1 same_as_p2-pe-sx
- angle_coeff @angle:p2-pf-sy harmonic 80.670 95.950 # SOURCE3 1 same_as_p2-pe-sy
- angle_coeff @angle:pf-pf-s harmonic 80.550 107.910 # SOURCE3 2 same_as_pe-pe-s
- angle_coeff @angle:px-pf-s harmonic 83.060 107.620 # SOURCE3 2 same_as_px-pe-s
- angle_coeff @angle:py-pf-s harmonic 82.090 108.730 # SOURCE3 3 same_as_py-pe-s
- angle_coeff @angle:s-pf-s harmonic 88.130 178.440 # SOURCE3 1 same_as_s-pe-s
- angle_coeff @angle:s-pf-sx harmonic 99.120 108.320 # SOURCE3 2 same_as_s-pe-sx
- angle_coeff @angle:s-pf-sy harmonic 98.190 106.930 # SOURCE3 1 same_as_s-pe-sy
- angle_coeff @angle:c3-px-ca harmonic 59.090 104.790 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-px-ce harmonic 59.140 104.860 # SOURCE3 4 0.6354
- angle_coeff @angle:c3-px-cf harmonic 59.140 104.860 # SOURCE3 4 same_as_c3-px-ce
- angle_coeff @angle:c3-px-ne harmonic 63.210 102.460 # SOURCE3 7 1.8685
- angle_coeff @angle:c3-px-nf harmonic 63.210 102.460 # SOURCE3 7 same_as_c3-px-ne
- angle_coeff @angle:c3-px-o harmonic 62.960 113.680 # SOURCE3 28 4.8990
- angle_coeff @angle:c3-px-pe harmonic 60.390 105.730 # SOURCE3 10 4.4059
- angle_coeff @angle:c3-px-pf harmonic 60.390 105.730 # SOURCE3 10 same_as_c3-px-pe
- angle_coeff @angle:c3-px-py harmonic 57.460 103.110 # SOURCE3 3 0.8680
- angle_coeff @angle:c3-px-sx harmonic 72.950 99.550 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-px-sy harmonic 71.410 103.410 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-px-ca harmonic 59.260 104.150 # SOURCE3 2 3.6168
- angle_coeff @angle:ca-px-o harmonic 64.720 107.500 # SOURCE3 5 5.7355
- angle_coeff @angle:c-px-c3 harmonic 58.650 101.720 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-px-ce harmonic 59.370 104.210 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-px-o harmonic 63.000 113.790 # SOURCE3 6 0.3877
- angle_coeff @angle:cf-px-cf harmonic 59.370 104.210 # SOURCE3 1 same_as_ce-px-ce
- angle_coeff @angle:cf-px-o harmonic 63.000 113.790 # SOURCE3 6 same_as_ce-px-o
- angle_coeff @angle:c-px-o harmonic 60.710 114.470 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-px-ne harmonic 66.990 103.220 # SOURCE3 2 0.6807
- angle_coeff @angle:ne-px-o harmonic 67.560 114.130 # SOURCE3 11 8.9737
- angle_coeff @angle:nf-px-nf harmonic 66.990 103.220 # SOURCE3 2 same_as_ne-px-ne
- angle_coeff @angle:nf-px-o harmonic 67.560 114.130 # SOURCE3 11 same_as_ne-px-o
- angle_coeff @angle:o-px-pe harmonic 62.400 116.500 # SOURCE3 12 8.2925
- angle_coeff @angle:o-px-pf harmonic 62.400 116.500 # SOURCE3 12 same_as_o-px-pe
- angle_coeff @angle:o-px-py harmonic 57.960 114.200 # SOURCE3 5 1.7165
- angle_coeff @angle:o-px-sx harmonic 72.440 112.810 # SOURCE3 3 0.8799
- angle_coeff @angle:o-px-sy harmonic 71.990 113.540 # SOURCE3 3 0.5010
- angle_coeff @angle:pe-px-pe harmonic 61.250 110.710 # SOURCE3 1 0.0000
- angle_coeff @angle:pf-px-pf harmonic 61.250 110.710 # SOURCE3 1 same_as_pe-px-pe
- angle_coeff @angle:py-px-py harmonic 56.600 107.780 # SOURCE3 1 0.0000
- angle_coeff @angle:sx-px-sx harmonic 94.100 96.240 # SOURCE3 1 0.0000
- angle_coeff @angle:sy-px-sy harmonic 90.960 102.360 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-py-n4 harmonic 59.670 103.830 # SOURCE3 4 0.0000
- angle_coeff @angle:c3-py-na harmonic 61.950 106.890 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-py-o harmonic 62.250 117.870 # SOURCE3 13 2.3554
- angle_coeff @angle:c3-py-oh harmonic 65.880 100.160 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-py-os harmonic 64.170 105.390 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-py-px harmonic 56.690 106.270 # SOURCE3 2 0.0000
- angle_coeff @angle:c3-py-py harmonic 54.980 113.970 # SOURCE3 10 1.6346
- angle_coeff @angle:c3-py-sx harmonic 70.270 106.360 # SOURCE3 4 0.0000
- angle_coeff @angle:ca-py-ca harmonic 59.130 107.550 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-py-o harmonic 63.640 113.980 # SOURCE3 3 0.5309
- angle_coeff @angle:ca-py-oh harmonic 65.370 102.680 # SOURCE4 5 1.2945
- angle_coeff @angle:ca-py-os harmonic 64.980 103.750 # SOURCE3 2 0.0000
- angle_coeff @angle:c-py-c3 harmonic 57.070 110.360 # SOURCE3 1 0.0000
- angle_coeff @angle:c-py-c harmonic 57.910 104.200 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-py-ce harmonic 59.600 106.540 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-py-o harmonic 64.310 112.160 # SOURCE3 5 3.2594
- angle_coeff @angle:ce-py-oh harmonic 64.850 104.770 # SOURCE3 6 2.1852
- angle_coeff @angle:ce-py-os harmonic 65.240 103.340 # SOURCE3 2 0.0000
- angle_coeff @angle:cf-py-cf harmonic 59.600 106.540 # SOURCE3 1 same_as_ce-py-ce
- angle_coeff @angle:cf-py-o harmonic 64.310 112.160 # SOURCE3 5 same_as_ce-py-o
- angle_coeff @angle:cf-py-oh harmonic 64.850 104.770 # SOURCE3 6 same_as_ce-py-oh
- angle_coeff @angle:cf-py-os harmonic 65.240 103.340 # SOURCE3 2 same_as_ce-py-os
- angle_coeff @angle:c-py-o harmonic 61.560 115.250 # SOURCE3 6 2.6519
- angle_coeff @angle:c-py-oh harmonic 63.980 102.140 # SOURCE3 6 1.0654
- angle_coeff @angle:c-py-os harmonic 66.040 95.740 # SOURCE3 3 9.0999
- angle_coeff @angle:n3-py-ne harmonic 67.010 108.440 # SOURCE4 12 0.9498
- angle_coeff @angle:n4-py-o harmonic 62.060 115.580 # SOURCE3 4 0.0000
- angle_coeff @angle:n4-py-py harmonic 79.860 55.100 # SOURCE3 4 0.0000
- angle_coeff @angle:na-py-o harmonic 65.180 122.400 # SOURCE3 2 0.0000
- angle_coeff @angle:na-py-py harmonic 85.440 50.880 # SOURCE3 2 0.0000
- angle_coeff @angle:ne-py-ne harmonic 69.540 106.290 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-py-o harmonic 70.320 113.210 # SOURCE3 15 3.8894
- angle_coeff @angle:ne-py-oh harmonic 70.530 104.700 # SOURCE3 26 2.7513
- angle_coeff @angle:ne-py-os harmonic 71.610 101.330 # SOURCE3 2 0.0000
- angle_coeff @angle:nf-py-nf harmonic 69.540 106.290 # SOURCE3 1 same_as_ne-py-ne
- angle_coeff @angle:nf-py-o harmonic 70.320 113.210 # SOURCE3 15 same_as_ne-py-o
- angle_coeff @angle:nf-py-oh harmonic 70.530 104.700 # SOURCE3 26 same_as_ne-py-oh
- angle_coeff @angle:nf-py-os harmonic 71.610 101.330 # SOURCE3 2 same_as_ne-py-os
- angle_coeff @angle:oh-py-oh harmonic 72.010 101.780 # SOURCE3 35 2.2937
- angle_coeff @angle:oh-py-pe harmonic 64.390 104.840 # SOURCE3 22 2.0337
- angle_coeff @angle:oh-py-pf harmonic 64.390 104.840 # SOURCE3 22 same_as_oh-py-pe
- angle_coeff @angle:oh-py-px harmonic 60.300 104.300 # SOURCE3 8 1.2772
- angle_coeff @angle:oh-py-py harmonic 61.760 100.450 # SOURCE3 6 0.0000
- angle_coeff @angle:oh-py-sx harmonic 75.730 100.940 # SOURCE3 4 0.0000
- angle_coeff @angle:oh-py-sy harmonic 77.890 101.470 # SOURCE3 6 0.2490
- angle_coeff @angle:o-py-oh harmonic 69.900 116.140 # SOURCE3 79 2.1455
- angle_coeff @angle:o-py-os harmonic 69.600 116.790 # SOURCE3 17 1.3534
- angle_coeff @angle:o-py-pe harmonic 62.460 114.560 # SOURCE3 12 3.6114
- angle_coeff @angle:o-py-pf harmonic 62.460 114.560 # SOURCE3 12 same_as_o-py-pe
- angle_coeff @angle:o-py-px harmonic 58.710 111.370 # SOURCE3 5 0.3803
- angle_coeff @angle:o-py-py harmonic 56.790 120.430 # SOURCE3 16 6.0629
- angle_coeff @angle:os-py-os harmonic 72.020 101.250 # SOURCE3 8 2.0860
- angle_coeff @angle:os-py-py harmonic 60.540 104.480 # SOURCE3 4 0.0000
- angle_coeff @angle:os-py-sx harmonic 74.640 103.860 # SOURCE3 2 0.0000
- angle_coeff @angle:os-py-sy harmonic 77.620 102.120 # SOURCE3 2 0.0000
- angle_coeff @angle:o-py-sx harmonic 70.140 118.560 # SOURCE3 7 6.2976
- angle_coeff @angle:o-py-sy harmonic 74.750 111.710 # SOURCE3 5 1.1937
- angle_coeff @angle:pe-py-pe harmonic 61.640 107.140 # SOURCE3 1 0.0000
- angle_coeff @angle:pf-py-pf harmonic 61.640 107.140 # SOURCE3 1 same_as_pe-py-pe
- angle_coeff @angle:py-py-py harmonic 55.680 112.700 # SOURCE3 1 0.0000
- angle_coeff @angle:py-py-sx harmonic 93.740 61.540 # SOURCE3 4 0.0000
- angle_coeff @angle:sy-py-sy harmonic 92.490 105.170 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-s2-o harmonic 41.150 117.250 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-s2-n2 harmonic 42.960 110.840 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-s2-o harmonic 41.410 114.700 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-s2-n1 harmonic 35.940 117.700 # SOURCE2 1 0.0000
- angle_coeff @angle:f-s2-n1 harmonic 41.390 116.900 # SOURCE2 1 0.0000
- angle_coeff @angle:n1-s2-o harmonic 45.710 108.460 # HF/6-31G* 1
- angle_coeff @angle:n2-s2-o harmonic 42.500 121.200 # SOURCE2 2 0.8000
- angle_coeff @angle:o-s2-o harmonic 42.540 116.170 # SOURCE3 1 0.0000
- angle_coeff @angle:o-s2-s harmonic 50.510 118.300 # SOURCE2 1 0.0000
- angle_coeff @angle:s-s2-s harmonic 63.640 115.040 # SOURCE3 1 0.0000
- angle_coeff @angle:br-s4-br harmonic 40.430 98.020 # SOURCE3 1
- angle_coeff @angle:br-s4-c3 harmonic 38.910 92.980 # SOURCE3 1 0.0000
- angle_coeff @angle:br-s4-o harmonic 37.040 112.070 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-s4-c1 harmonic 40.890 93.550 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-s4-o harmonic 41.280 110.360 # SOURCE3 2 0.0000
- angle_coeff @angle:c2-s4-c2 harmonic 38.790 102.290 # SOURCE3 1
- angle_coeff @angle:c2-s4-c3 harmonic 39.720 94.950 # SOURCE3 1
- angle_coeff @angle:c2-s4-o harmonic 41.680 107.090 # SOURCE3 1
- angle_coeff @angle:c3-s4-c3 harmonic 38.840 96.820 # SOURCE3 11 1.5580
- angle_coeff @angle:c3-s4-ca harmonic 39.410 95.000 # SOURCE3 1
- angle_coeff @angle:c3-s4-f harmonic 41.500 91.700 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-hs harmonic 29.130 90.600 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-i harmonic 33.080 90.530 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-n2 harmonic 43.220 90.590 # SOURCE3 1
- angle_coeff @angle:c3-s4-n3 harmonic 40.780 94.490 # SOURCE3 4 1.5570
- angle_coeff @angle:c3-s4-n harmonic 40.220 96.070 # SOURCE3 4 1.0354
- angle_coeff @angle:c3-s4-n4 harmonic 38.790 92.470 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-na harmonic 40.740 93.070 # SOURCE3 10 1.8813
- angle_coeff @angle:c3-s4-nh harmonic 40.360 97.080 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-no harmonic 39.130 89.530 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-o harmonic 41.060 106.210 # SOURCE3 60 2.0426
- angle_coeff @angle:c3-s4-oh harmonic 42.680 90.250 # SOURCE4 8 0.3023
- angle_coeff @angle:c3-s4-os harmonic 42.690 90.060 # SOURCE3 4 0.4484
- angle_coeff @angle:c3-s4-p2 harmonic 37.780 94.370 # SOURCE3 1
- angle_coeff @angle:c3-s4-p3 harmonic 38.650 96.540 # SOURCE3 4 1.3634
- angle_coeff @angle:c3-s4-p4 harmonic 36.430 97.400 # SOURCE3 1
- angle_coeff @angle:c3-s4-p5 harmonic 38.720 99.180 # SOURCE3 1
- angle_coeff @angle:c3-s4-s4 harmonic 50.930 89.500 # SOURCE3 1
- angle_coeff @angle:c3-s4-s harmonic 48.550 98.720 # SOURCE3 2 0.0185
- angle_coeff @angle:c3-s4-s6 harmonic 48.800 97.480 # SOURCE3 1
- angle_coeff @angle:c3-s4-sh harmonic 48.100 94.660 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s4-ss harmonic 47.970 95.310 # SOURCE3 3 1.4101
- angle_coeff @angle:ca-s4-ca harmonic 39.580 95.210 # SOURCE3 1
- angle_coeff @angle:ca-s4-o harmonic 41.300 106.630 # SOURCE3 1
- angle_coeff @angle:c-s4-c3 harmonic 38.500 95.070 # SOURCE3 1
- angle_coeff @angle:c-s4-c harmonic 39.630 86.830 # SOURCE3 1
- angle_coeff @angle:cl-s4-cl harmonic 38.990 97.680 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-s4-o harmonic 39.110 108.340 # SOURCE3 2 0.0000
- angle_coeff @angle:c-s4-o harmonic 40.030 106.170 # SOURCE3 1
- angle_coeff @angle:cx-s4-cx harmonic 54.250 48.800 # SOURCE2 1 0.0000
- angle_coeff @angle:cx-s4-o harmonic 40.110 110.000 # SOURCE2 1 0.0000
- angle_coeff @angle:f-s4-f harmonic 43.790 92.710 # SOURCE2 3 0.1490
- angle_coeff @angle:f-s4-o harmonic 43.870 106.810 # SOURCE2 2 0.0100
- angle_coeff @angle:f-s4-s harmonic 47.340 107.500 # SOURCE2 1 0.0000
- angle_coeff @angle:hs-s4-hs harmonic 23.650 87.000 # SOURCE3 2 0.0202
- angle_coeff @angle:hs-s4-n1 harmonic 32.050 90.510 # HF/6-31G* 1
- angle_coeff @angle:hs-s4-o harmonic 31.160 110.270 # SOURCE3 5 0.1908
- angle_coeff @angle:i-s4-i harmonic 34.070 97.290 # SOURCE3 1
- angle_coeff @angle:i-s4-o harmonic 29.610 113.910 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-s4-n1 harmonic 45.300 94.020 # HF/6-31G* 1
- angle_coeff @angle:n1-s4-o harmonic 43.950 110.090 # HF/6-31G* 1
- angle_coeff @angle:n2-s4-n2 harmonic 47.410 90.170 # SOURCE3 1
- angle_coeff @angle:n2-s4-o harmonic 45.130 107.570 # SOURCE3 1
- angle_coeff @angle:n3-s4-n3 harmonic 43.100 91.190 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-s4-o harmonic 42.290 109.070 # SOURCE3 6 2.3605
- angle_coeff @angle:n4-s4-n4 harmonic 37.790 94.610 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-s4-o harmonic 39.520 104.910 # SOURCE3 3 0.4370
- angle_coeff @angle:na-s4-na harmonic 39.810 103.100 # SOURCE3 1
- angle_coeff @angle:na-s4-o harmonic 41.620 109.750 # SOURCE3 10 2.6919
- angle_coeff @angle:nh-s4-nh harmonic 43.150 92.240 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-s4-o harmonic 42.790 107.540 # SOURCE3 3 0.0401
- angle_coeff @angle:n-s4-n harmonic 42.570 91.300 # SOURCE3 1
- angle_coeff @angle:n-s4-o harmonic 42.600 105.700 # SOURCE3 4 1.6857
- angle_coeff @angle:no-s4-no harmonic 39.760 83.400 # SOURCE3 1 0.0000
- angle_coeff @angle:no-s4-o harmonic 39.370 103.580 # SOURCE3 3 1.5109
- angle_coeff @angle:oh-s4-oh harmonic 43.170 100.340 # SOURCE3 1
- angle_coeff @angle:o-s4-o harmonic 46.570 110.610 # SOURCE3 5 3.6413
- angle_coeff @angle:o-s4-oh harmonic 43.430 110.130 # SOURCE4 10 0.5760
- angle_coeff @angle:o-s4-os harmonic 43.590 109.020 # SOURCE3 8 1.5005
- angle_coeff @angle:o-s4-p2 harmonic 37.660 106.770 # SOURCE3 1
- angle_coeff @angle:o-s4-p3 harmonic 39.430 106.510 # SOURCE3 8 4.0943
- angle_coeff @angle:o-s4-p4 harmonic 37.270 103.360 # SOURCE3 1
- angle_coeff @angle:o-s4-p5 harmonic 42.180 96.950 # SOURCE3 1
- angle_coeff @angle:o-s4-s4 harmonic 50.530 104.550 # SOURCE3 1
- angle_coeff @angle:o-s4-s harmonic 48.850 112.220 # SOURCE3 4 2.8682
- angle_coeff @angle:o-s4-s6 harmonic 50.940 102.840 # SOURCE3 1
- angle_coeff @angle:o-s4-sh harmonic 47.960 107.510 # SOURCE3 3 0.7511
- angle_coeff @angle:os-s4-os harmonic 44.590 93.680 # SOURCE3 2 2.4166
- angle_coeff @angle:o-s4-ss harmonic 47.560 109.490 # SOURCE3 5 1.8509
- angle_coeff @angle:p2-s4-p2 harmonic 38.360 92.620 # SOURCE3 1
- angle_coeff @angle:p3-s4-p3 harmonic 39.590 95.710 # SOURCE3 2 1.2239
- angle_coeff @angle:p5-s4-p5 harmonic 40.900 93.860 # SOURCE3 1
- angle_coeff @angle:s4-s4-s4 harmonic 65.560 90.170 # SOURCE3 1
- angle_coeff @angle:s4-s4-s6 harmonic 65.560 90.170 # SOURCE3 1
- angle_coeff @angle:s6-s4-s6 harmonic 64.380 93.520 # SOURCE3 1
- angle_coeff @angle:sh-s4-sh harmonic 58.920 102.760 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-s4-ss harmonic 58.980 102.640 # SOURCE3 1
- angle_coeff @angle:s-s4-s harmonic 60.000 108.080 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-s4-ss harmonic 61.190 95.470 # SOURCE3 1 0.0000
- angle_coeff @angle:br-s6-br harmonic 41.990 101.570 # SOURCE3 1 0.0000
- angle_coeff @angle:br-s6-c3 harmonic 39.570 98.990 # SOURCE3 1 0.0000
- angle_coeff @angle:br-s6-f harmonic 39.450 100.600 # SOURCE2 1 0.0000
- angle_coeff @angle:br-s6-o harmonic 39.980 107.580 # SOURCE3 6 0.3000
- angle_coeff @angle:c1-s6-c1 harmonic 40.100 99.990 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-s6-o harmonic 42.610 108.230 # SOURCE3 4 0.0000
- angle_coeff @angle:c2-s6-c2 harmonic 38.710 102.750 # SOURCE3 1
- angle_coeff @angle:c2-s6-c3 harmonic 38.310 104.050 # SOURCE3 1
- angle_coeff @angle:c2-s6-o harmonic 42.250 106.580 # SOURCE3 1
- angle_coeff @angle:c3-s6-c3 harmonic 38.390 102.830 # SOURCE3 7 1.2531
- angle_coeff @angle:c3-s6-ca harmonic 38.480 103.170 # SOURCE3 1
- angle_coeff @angle:c3-s6-cy harmonic 39.140 94.570 # SOURCE4 8 0.4183
- angle_coeff @angle:c3-s6-f harmonic 41.130 97.110 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s6-hs harmonic 28.120 100.620 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s6-i harmonic 31.800 97.740 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s6-n2 harmonic 39.680 112.950 # SOURCE4 11 0.7920
- angle_coeff @angle:c3-s6-n3 harmonic 41.120 101.380 # SOURCE4 60 0.9507
- angle_coeff @angle:c3-s6-n harmonic 39.940 102.970 # SOURCE3 4 0.8785
- angle_coeff @angle:c3-s6-n4 harmonic 38.370 99.400 # SOURCE3 3 0.4695
- angle_coeff @angle:c3-s6-na harmonic 39.840 102.810 # SOURCE3 10 3.1256
- angle_coeff @angle:c3-s6-nh harmonic 39.880 104.310 # SOURCE4 34 1.5848
- angle_coeff @angle:c3-s6-no harmonic 37.590 99.570 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s6-o harmonic 41.660 108.320 # SOURCE3 112 1.8014
- angle_coeff @angle:c3-s6-oh harmonic 42.370 98.600 # SOURCE4 42 0.8366
- angle_coeff @angle:c3-s6-os harmonic 42.970 96.320 # SOURCE4 30 0.4539
- angle_coeff @angle:c3-s6-p2 harmonic 35.860 106.470 # SOURCE3 1
- angle_coeff @angle:c3-s6-p3 harmonic 37.690 103.400 # SOURCE3 3 0.8516
- angle_coeff @angle:c3-s6-p4 harmonic 35.150 104.120 # SOURCE3 1
- angle_coeff @angle:c3-s6-p5 harmonic 38.150 103.460 # SOURCE3 1
- angle_coeff @angle:c3-s6-s4 harmonic 48.920 98.100 # SOURCE3 1
- angle_coeff @angle:c3-s6-s harmonic 48.070 104.500 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s6-s6 harmonic 47.990 101.950 # SOURCE3 1
- angle_coeff @angle:c3-s6-sh harmonic 47.570 101.840 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-s6-ss harmonic 47.260 102.470 # SOURCE3 3 1.7451
- angle_coeff @angle:ca-s6-ca harmonic 38.670 103.080 # SOURCE3 1
- angle_coeff @angle:ca-s6-o harmonic 42.780 104.070 # SOURCE4 59 0.5636
- angle_coeff @angle:c-s6-c3 harmonic 37.620 101.240 # SOURCE3 1
- angle_coeff @angle:c-s6-c harmonic 36.960 99.820 # SOURCE3 1
- angle_coeff @angle:cc-s6-o harmonic 42.850 103.630 # SOURCE4 9 0.5934
- angle_coeff @angle:cl-s6-cl harmonic 38.290 101.250 # SOURCE3 1 0.0000
- angle_coeff @angle:cl-s6-f harmonic 38.940 99.000 # SOURCE2 1 0.0000
- angle_coeff @angle:cl-s6-o harmonic 39.360 107.660 # SOURCE3 4 0.0000
- angle_coeff @angle:c-s6-o harmonic 40.020 107.970 # SOURCE3 1
- angle_coeff @angle:c-s6-os harmonic 40.270 102.120 # SOURCE3 1
- angle_coeff @angle:cx-s6-cx harmonic 53.940 54.700 # SOURCE2 1 0.0000
- angle_coeff @angle:cy-s6-o harmonic 39.940 110.220 # SOURCE4 20 1.1009
- angle_coeff @angle:f-s6-f harmonic 44.300 94.700 # SOURCE2 3 0.9899
- angle_coeff @angle:f-s6-o harmonic 45.290 106.480 # SOURCE3 2 0.0000
- angle_coeff @angle:hs-s6-hs harmonic 22.430 99.020 # SOURCE3 2 0.0595
- angle_coeff @angle:hs-s6-n1 harmonic 34.230 97.270 # HF/6-31G* 1
- angle_coeff @angle:hs-s6-o harmonic 32.480 107.600 # SOURCE3 10 0.0343
- angle_coeff @angle:i-s6-i harmonic 33.730 99.250 # SOURCE3 1
- angle_coeff @angle:i-s6-o harmonic 29.870 109.740 # SOURCE3 2 0.0000
- angle_coeff @angle:n1-s6-n1 harmonic 52.370 95.520 # HF/6-31G* 1
- angle_coeff @angle:n1-s6-o harmonic 49.300 107.520 # HF/6-31G* 1
- angle_coeff @angle:n2-s6-n2 harmonic 47.050 98.610 # SOURCE3 1
- angle_coeff @angle:n2-s6-o harmonic 45.100 116.410 # SOURCE3 3 5.0830
- angle_coeff @angle:n2-s6-oh harmonic 44.890 106.960 # SOURCE3 2 0.0000
- angle_coeff @angle:n2-s6-os harmonic 45.860 103.250 # SOURCE3 1
- angle_coeff @angle:n3-s6-n3 harmonic 44.730 98.570 # SOURCE4 7 0.2690
- angle_coeff @angle:n3-s6-o harmonic 45.610 106.800 # SOURCE3 14 1.7908
- angle_coeff @angle:n3-s6-os harmonic 45.580 99.260 # SOURCE4 8 0.5141
- angle_coeff @angle:n4-s6-n4 harmonic 37.520 101.850 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-s6-o harmonic 41.190 102.920 # SOURCE3 10 1.5434
- angle_coeff @angle:na-s6-na harmonic 42.390 98.040 # SOURCE3 1
- angle_coeff @angle:na-s6-o harmonic 44.090 105.670 # SOURCE3 20 0.8019
- angle_coeff @angle:nh-s6-nh harmonic 43.940 94.560 # SOURCE3 1 0.0000
- angle_coeff @angle:nh-s6-o harmonic 43.940 109.120 # SOURCE3 6 0.9556
- angle_coeff @angle:n-s6-n harmonic 41.410 104.160 # SOURCE3 1
- angle_coeff @angle:n-s6-o harmonic 44.260 105.910 # SOURCE3 8 0.2953
- angle_coeff @angle:no-s6-no harmonic 38.320 91.630 # SOURCE3 1 0.0000
- angle_coeff @angle:no-s6-o harmonic 39.210 107.430 # SOURCE3 6 1.5494
- angle_coeff @angle:n-s6-os harmonic 44.300 99.230 # SOURCE4 5 0.9794
- angle_coeff @angle:oh-s6-oh harmonic 46.090 100.340 # SOURCE3 6 0.0076
- angle_coeff @angle:oh-s6-os harmonic 47.130 96.620 # SOURCE4 26 0.6688
- angle_coeff @angle:oh-s6-p2 harmonic 37.140 109.670 # SOURCE3 2 0.0000
- angle_coeff @angle:o-s6-o harmonic 46.660 119.730 # SOURCE4 324 2.0530
- angle_coeff @angle:o-s6-oh harmonic 46.380 108.210 # SOURCE3 18 0.7437
- angle_coeff @angle:o-s6-os harmonic 46.660 107.840 # SOURCE3 12 0.7025
- angle_coeff @angle:o-s6-p2 harmonic 37.890 106.610 # SOURCE3 1
- angle_coeff @angle:o-s6-p3 harmonic 39.630 107.070 # SOURCE3 22 1.0550
- angle_coeff @angle:o-s6-p4 harmonic 36.540 105.670 # SOURCE3 1
- angle_coeff @angle:o-s6-p5 harmonic 40.380 106.640 # SOURCE3 1
- angle_coeff @angle:o-s6-s4 harmonic 49.910 107.850 # SOURCE3 1
- angle_coeff @angle:o-s6-s harmonic 50.300 110.290 # SOURCE3 6 2.2405
- angle_coeff @angle:o-s6-s6 harmonic 50.330 106.070 # SOURCE3 1
- angle_coeff @angle:o-s6-sh harmonic 49.520 106.810 # SOURCE3 6 0.6292
- angle_coeff @angle:os-s6-os harmonic 46.800 98.700 # SOURCE3 1 0.0000
- angle_coeff @angle:o-s6-ss harmonic 49.150 107.430 # SOURCE3 10 1.1423
- angle_coeff @angle:p3-s6-p3 harmonic 37.080 110.170 # SOURCE3 4 5.3678
- angle_coeff @angle:p5-s6-p5 harmonic 38.770 104.490 # SOURCE3 1
- angle_coeff @angle:s4-s6-s4 harmonic 61.650 101.990 # SOURCE3 1
- angle_coeff @angle:s4-s6-s6 harmonic 65.560 90.170 # SOURCE3 1
- angle_coeff @angle:s6-s6-s6 harmonic 61.260 103.290 # SOURCE3 1
- angle_coeff @angle:sh-s6-sh harmonic 59.550 106.430 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-s6-ss harmonic 60.490 102.640 # SOURCE3 1
- angle_coeff @angle:s-s6-s harmonic 60.770 109.340 # SOURCE3 1 0.0000
- angle_coeff @angle:ss-s6-ss harmonic 60.590 101.820 # SOURCE3 1 0.0000
- angle_coeff @angle:br-sh-hs harmonic 27.240 95.640 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-sh-hs harmonic 30.170 95.990 # calculated_based_on_C#C-SH 0
- angle_coeff @angle:c2-sh-hs harmonic 28.660 97.080 # SOURCE4 5 0.3132
- angle_coeff @angle:c3-sh-hs harmonic 28.120 96.600 # SOURCE3 12 0.8009
- angle_coeff @angle:ca-sh-hs harmonic 28.980 94.840 # SOURCE4 13 0.4130
- angle_coeff @angle:cc-sh-hs harmonic 29.040 95.380 # SOURCE4 8 1.1410
- angle_coeff @angle:c-sh-hs harmonic 28.760 96.070 # SOURCE3 6 1.1164
- angle_coeff @angle:f-sh-hs harmonic 30.090 96.500 # SOURCE3 1 0.0000
- angle_coeff @angle:hs-sh-hs harmonic 23.430 93.720 # SOURCE3 3 0.4777
- angle_coeff @angle:hs-sh-i harmonic 23.210 96.440 # SOURCE3 1 0.0000
- angle_coeff @angle:hs-sh-n1 harmonic 32.340 93.510 # HF/6-31G* 1
- angle_coeff @angle:hs-sh-n2 harmonic 30.110 95.820 # SOURCE3 5 3.1495
- angle_coeff @angle:hs-sh-n harmonic 30.290 95.590 # SOURCE3 4 3.9065
- angle_coeff @angle:hs-sh-n3 harmonic 30.070 95.980 # SOURCE3 3 1.1735
- angle_coeff @angle:hs-sh-n4 harmonic 29.500 93.130 # SOURCE3 3 0.1675
- angle_coeff @angle:hs-sh-na harmonic 30.110 97.380 # SOURCE3 9 1.0223
- angle_coeff @angle:hs-sh-nh harmonic 29.730 101.110 # SOURCE3 1 0.0000
- angle_coeff @angle:hs-sh-no harmonic 29.630 92.930 # SOURCE3 1 0.0000
- angle_coeff @angle:hs-sh-o harmonic 30.170 109.230 # SOURCE3 2 0.0068
- angle_coeff @angle:hs-sh-oh harmonic 30.500 98.640 # SOURCE3 2 0.0605
- angle_coeff @angle:hs-sh-os harmonic 30.880 98.150 # SOURCE3 3 0.1661
- angle_coeff @angle:hs-sh-p2 harmonic 27.940 99.120 # SOURCE3 10 5.4110
- angle_coeff @angle:hs-sh-p3 harmonic 26.260 95.810 # SOURCE3 3 0.4396
- angle_coeff @angle:hs-sh-p4 harmonic 26.700 94.220 # SOURCE3 4 0.7605
- angle_coeff @angle:hs-sh-p5 harmonic 27.090 94.520 # SOURCE3 3 0.5589
- angle_coeff @angle:hs-sh-s harmonic 32.420 102.870 # SOURCE3 2 0.0000
- angle_coeff @angle:hs-sh-s4 harmonic 33.290 92.160 # SOURCE3 3 1.6519
- angle_coeff @angle:hs-sh-s6 harmonic 33.980 93.830 # SOURCE3 3 1.2561
- angle_coeff @angle:hs-sh-sh harmonic 33.890 99.070 # SOURCE3 2 0.0000
- angle_coeff @angle:hs-sh-ss harmonic 33.730 99.170 # SOURCE3 3 0.2457
- angle_coeff @angle:br-ss-br harmonic 41.920 102.920 # SOURCE3 1 0.0000
- angle_coeff @angle:br-ss-c3 harmonic 39.460 99.030 # SOURCE3 1 0.0000
- angle_coeff @angle:c1-ss-c1 harmonic 41.480 98.300 # SOURCE2 1 0.0000
- angle_coeff @angle:c1-ss-c3 harmonic 39.350 99.900 # SOURCE2 1 0.0000
- angle_coeff @angle:c2-ss-c2 harmonic 39.870 99.560 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-ss-c3 harmonic 38.710 100.370 # SOURCE4 100 2.3280
- angle_coeff @angle:c2-ss-cy harmonic 40.860 88.610 # SOURCE4 27 0.4481
- angle_coeff @angle:c2-ss-n2 harmonic 40.330 106.760 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-ss-na harmonic 40.680 100.510 # SOURCE3 6 6.9702
- angle_coeff @angle:c2-ss-os harmonic 43.660 89.760 # SOURCE3 1 0.0000
- angle_coeff @angle:c2-ss-ss harmonic 51.300 92.260 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-c3 harmonic 37.940 99.920 # SOURCE3 14 2.0723
- angle_coeff @angle:c3-ss-ca harmonic 38.040 102.120 # SOURCE4 161 1.3084
- angle_coeff @angle:c3-ss-cc harmonic 38.610 100.850 # SOURCE4 74 1.3149
- angle_coeff @angle:c3-ss-cd harmonic 38.730 100.210 # SOURCE4 13 1.3340
- angle_coeff @angle:c3-ss-cl harmonic 37.940 99.400 # SOURCE2 1 0.0000
- angle_coeff @angle:c3-ss-cy harmonic 38.750 94.320 # SOURCE4 62 0.3646
- angle_coeff @angle:c3-ss-f harmonic 39.670 97.490 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-i harmonic 35.060 100.000 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-n1 harmonic 41.250 98.440 # HF/6-31G* 1
- angle_coeff @angle:c3-ss-n2 harmonic 41.260 96.420 # SOURCE3 5 1.3604
- angle_coeff @angle:c3-ss-n3 harmonic 40.110 98.830 # SOURCE3 3 0.2909
- angle_coeff @angle:c3-ss-n harmonic 39.860 100.300 # SOURCE3 4 0.6579
- angle_coeff @angle:c3-ss-n4 harmonic 39.380 97.790 # SOURCE3 3 0.2002
- angle_coeff @angle:c3-ss-na harmonic 39.740 100.140 # SOURCE3 12 1.7415
- angle_coeff @angle:c3-ss-nh harmonic 39.890 100.630 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-no harmonic 39.050 98.620 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-o harmonic 40.460 106.600 # SOURCE3 2 1.6714
- angle_coeff @angle:c3-ss-oh harmonic 40.850 98.280 # SOURCE3 2 1.4326
- angle_coeff @angle:c3-ss-os harmonic 40.650 98.210 # SOURCE3 4 1.7097
- angle_coeff @angle:c3-ss-p2 harmonic 39.660 98.410 # SOURCE3 8 0.9454
- angle_coeff @angle:c3-ss-p3 harmonic 37.720 98.700 # SOURCE3 3 0.0356
- angle_coeff @angle:c3-ss-p4 harmonic 38.030 98.160 # SOURCE3 4 0.1361
- angle_coeff @angle:c3-ss-p5 harmonic 37.500 100.220 # SOURCE4 23 1.1410
- angle_coeff @angle:c3-ss-s4 harmonic 47.600 96.370 # SOURCE3 3 0.0202
- angle_coeff @angle:c3-ss-s harmonic 47.470 101.900 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-s6 harmonic 48.260 96.760 # SOURCE3 3 1.5680
- angle_coeff @angle:c3-ss-sh harmonic 47.800 101.930 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-ss-ss harmonic 47.780 103.100 # SOURCE4 70 1.3377
- angle_coeff @angle:ca-ss-ca harmonic 39.270 98.710 # SOURCE4 97 1.2321
- angle_coeff @angle:ca-ss-cc harmonic 41.730 89.010 # SOURCE4 88 1.2324
- angle_coeff @angle:ca-ss-cd harmonic 41.420 90.360 # SOURCE4 46 0.9833
- angle_coeff @angle:ca-ss-cl harmonic 37.980 101.050 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-ss-n harmonic 41.150 97.160 # SOURCE3 1
- angle_coeff @angle:ca-ss-na harmonic 40.520 99.320 # SOURCE3 1
- angle_coeff @angle:ca-ss-nc harmonic 43.300 94.760 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-ss-nd harmonic 43.300 94.760 # SOURCE3 1 same_as_ca-ss-nc
- angle_coeff @angle:ca-ss-ss harmonic 47.820 104.900 # SOURCE4 19 0.8743
- angle_coeff @angle:c-ss-c2 harmonic 41.060 92.430 # SOURCE3 1 0.0000
- angle_coeff @angle:c-ss-c3 harmonic 38.470 100.290 # SOURCE3 5 2.2127
- angle_coeff @angle:c-ss-c harmonic 38.920 101.400 # SOURCE3 1 0.0000
- angle_coeff @angle:c-ss-cc harmonic 41.050 92.430 # SOURCE4 14 2.3600
- angle_coeff @angle:cc-ss-cc harmonic 41.930 89.910 # SOURCE3 11 2.2164
- angle_coeff @angle:cc-ss-cd harmonic 41.970 89.740 # SOURCE4 49 0.7509
- angle_coeff @angle:cc-ss-n harmonic 41.560 97.160 # SOURCE3 1 same_as_cd-ss-n
- angle_coeff @angle:cc-ss-na harmonic 40.910 99.330 # SOURCE3 18 same_as_cd-ss-na
- angle_coeff @angle:cc-ss-nc harmonic 44.100 93.610 # SOURCE4 10 0.8252
- angle_coeff @angle:cc-ss-os harmonic 41.600 98.810 # SOURCE3 2 2.1583
- angle_coeff @angle:cc-ss-ss harmonic 48.670 102.460 # SOURCE3 2 0.0000
- angle_coeff @angle:cd-ss-cd harmonic 41.930 89.910 # SOURCE3 11 2.2164
- angle_coeff @angle:cd-ss-n harmonic 41.560 97.160 # SOURCE3 1 0.0000
- angle_coeff @angle:cd-ss-na harmonic 40.910 99.330 # SOURCE3 18 2.5847
- angle_coeff @angle:cd-ss-nd harmonic 43.630 95.660 # SOURCE3 3 0.0000
- angle_coeff @angle:cd-ss-os harmonic 41.600 98.810 # SOURCE3 2 same_as_cc-ss-os
- angle_coeff @angle:cd-ss-ss harmonic 50.980 93.360 # SOURCE4 11 0.3795
- angle_coeff @angle:cl-ss-cl harmonic 37.900 103.370 # SOURCE3 1 0.0000
- angle_coeff @angle:cx-ss-cx harmonic 54.740 48.300 # SOURCE2 1 0.0000
- angle_coeff @angle:f-ss-f harmonic 41.410 98.300 # SOURCE2 1 0.0000
- angle_coeff @angle:f-ss-ss harmonic 47.400 108.300 # SOURCE2 1 0.0000
- angle_coeff @angle:i-ss-i harmonic 36.380 106.290 # SOURCE3 1 0.0000
- angle_coeff @angle:n1-ss-n1 harmonic 45.720 96.960 # HF/6-31G* 1
- angle_coeff @angle:n2-ss-n2 harmonic 44.500 96.750 # SOURCE3 1 0.0000
- angle_coeff @angle:n3-ss-n3 harmonic 41.610 102.340 # SOURCE3 1 0.0000
- angle_coeff @angle:n4-ss-n4 harmonic 39.760 101.190 # SOURCE3 1 0.0000
- angle_coeff @angle:na-ss-na harmonic 41.250 102.810 # SOURCE3 1 0.0000
- angle_coeff @angle:nc-ss-nc harmonic 46.990 97.750 # SOURCE4 8 0.3345
- angle_coeff @angle:nd-ss-nd harmonic 46.580 99.500 # SOURCE2 1 same_as_nc-ss-nc
- angle_coeff @angle:nh-ss-nh harmonic 40.860 107.890 # SOURCE3 1 0.0000
- angle_coeff @angle:n-ss-n harmonic 41.570 103.100 # SOURCE3 1 0.0000
- angle_coeff @angle:no-ss-no harmonic 38.430 106.430 # SOURCE3 1 0.0000
- angle_coeff @angle:oh-ss-oh harmonic 42.690 104.250 # SOURCE3 1 0.0000
- angle_coeff @angle:o-ss-o harmonic 43.680 119.300 # SOURCE2 1 0.0000
- angle_coeff @angle:o-ss-p5 harmonic 38.880 106.410 # SOURCE3 1 0.0000
- angle_coeff @angle:o-ss-s6 harmonic 49.380 105.390 # SOURCE3 1
- angle_coeff @angle:os-ss-os harmonic 42.400 102.990 # SOURCE3 1 0.0000
- angle_coeff @angle:o-ss-ss harmonic 49.130 112.700 # SOURCE2 1 0.0000
- angle_coeff @angle:p2-ss-p2 harmonic 41.220 99.520 # SOURCE3 1 0.0000
- angle_coeff @angle:p3-ss-p3 harmonic 37.800 101.670 # SOURCE3 1
- angle_coeff @angle:p5-ss-p5 harmonic 40.330 89.830 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-ss-s4 harmonic 60.990 96.080 # SOURCE3 1 0.0000
- angle_coeff @angle:s4-ss-s6 harmonic 60.060 101.260 # SOURCE3 1
- angle_coeff @angle:s6-ss-s6 harmonic 60.590 101.810 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-ss-sh harmonic 60.410 107.540 # SOURCE3 1 0.0000
- angle_coeff @angle:sh-ss-ss harmonic 60.950 106.530 # SOURCE3 1
- angle_coeff @angle:s-ss-s harmonic 57.790 115.040 # SOURCE3 1
- angle_coeff @angle:ss-ss-ss harmonic 60.570 108.760 # SOURCE4 8 0.2385
- angle_coeff @angle:c3-sx-ca harmonic 38.700 96.410 # SOURCE4 13 0.3130
- angle_coeff @angle:c3-sx-cc harmonic 39.120 95.110 # SOURCE4 17 0.6557
- angle_coeff @angle:c3-sx-ce harmonic 39.300 94.950 # SOURCE3 3 0.0007
- angle_coeff @angle:c3-sx-cf harmonic 39.300 94.950 # SOURCE3 3 same_as_c3-sx-ce
- angle_coeff @angle:c3-sx-ne harmonic 40.880 90.060 # SOURCE3 5 1.9627
- angle_coeff @angle:c3-sx-nf harmonic 40.880 90.060 # SOURCE3 5 same_as_c3-sx-ne
- angle_coeff @angle:c3-sx-o harmonic 40.630 107.880 # SOURCE3 30 0.8721
- angle_coeff @angle:c3-sx-pe harmonic 38.060 94.320 # SOURCE3 7 0.5547
- angle_coeff @angle:c3-sx-pf harmonic 38.060 94.320 # SOURCE3 7 same_as_c3-sx-pe
- angle_coeff @angle:c3-sx-px harmonic 36.710 96.460 # SOURCE3 3 1.3351
- angle_coeff @angle:c3-sx-py harmonic 36.650 95.670 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-sx-sx harmonic 45.310 91.470 # SOURCE3 4 1.9919
- angle_coeff @angle:c3-sx-sy harmonic 46.490 95.470 # SOURCE3 3 2.8422
- angle_coeff @angle:ca-sx-ca harmonic 38.770 95.210 # SOURCE3 1 0.0000
- angle_coeff @angle:ca-sx-o harmonic 40.550 106.890 # SOURCE4 25 0.5562
- angle_coeff @angle:c-sx-c3 harmonic 38.800 92.710 # SOURCE3 3 0.3095
- angle_coeff @angle:c-sx-c harmonic 39.310 86.850 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-sx-o harmonic 41.250 104.490 # SOURCE4 17 1.7759
- angle_coeff @angle:ce-sx-ce harmonic 39.430 94.960 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-sx-o harmonic 40.910 107.470 # SOURCE3 5 0.3128
- angle_coeff @angle:cf-sx-cf harmonic 39.430 94.960 # SOURCE3 1 same_as_ce-sx-ce
- angle_coeff @angle:cf-sx-o harmonic 40.910 107.470 # SOURCE3 5 same_as_ce-sx-o
- angle_coeff @angle:c-sx-o harmonic 39.710 106.170 # SOURCE3 5 0.9477
- angle_coeff @angle:ne-sx-ne harmonic 41.530 90.170 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-sx-o harmonic 40.900 109.200 # SOURCE3 7 1.4542
- angle_coeff @angle:nf-sx-nf harmonic 41.530 90.170 # SOURCE3 1 same_as_ne-sx-ne
- angle_coeff @angle:nf-sx-o harmonic 40.900 109.200 # SOURCE3 7 same_as_ne-sx-o
- angle_coeff @angle:o-sx-pe harmonic 38.070 106.430 # SOURCE3 9 2.8345
- angle_coeff @angle:o-sx-pf harmonic 38.070 106.430 # SOURCE3 9 same_as_o-sx-pe
- angle_coeff @angle:o-sx-px harmonic 37.160 104.770 # SOURCE3 3 1.9810
- angle_coeff @angle:o-sx-py harmonic 36.140 109.130 # SOURCE3 7 5.6840
- angle_coeff @angle:o-sx-sx harmonic 44.100 104.650 # SOURCE3 6 3.0524
- angle_coeff @angle:o-sx-sy harmonic 47.070 103.410 # SOURCE3 5 0.9618
- angle_coeff @angle:pe-sx-pe harmonic 38.750 92.620 # SOURCE3 1 0.0000
- angle_coeff @angle:pf-sx-pf harmonic 38.750 92.620 # SOURCE3 1 same_as_pe-sx-pe
- angle_coeff @angle:py-sx-py harmonic 43.010 69.230 # SOURCE3 3 17.4143
- angle_coeff @angle:sx-sx-sx harmonic 58.780 84.900 # SOURCE3 1 0.0000
- angle_coeff @angle:sy-sx-sy harmonic 59.380 93.520 # SOURCE3 1 0.0000
- angle_coeff @angle:c3-sy-ca harmonic 38.000 103.860 # SOURCE4 54 0.3180
- angle_coeff @angle:c3-sy-cc harmonic 38.280 102.190 # SOURCE4 12 1.5324
- angle_coeff @angle:c3-sy-ce harmonic 38.030 103.810 # SOURCE3 3 0.3368
- angle_coeff @angle:c3-sy-cf harmonic 38.030 103.810 # SOURCE3 3 same_as_c3-sy-ce
- angle_coeff @angle:c3-sy-ne harmonic 39.420 103.120 # SOURCE3 5 4.1882
- angle_coeff @angle:c3-sy-nf harmonic 39.420 103.120 # SOURCE3 5 same_as_c3-sy-ne
- angle_coeff @angle:c3-sy-o harmonic 41.280 108.480 # SOURCE3 62 0.8576
- angle_coeff @angle:c3-sy-pe harmonic 35.490 106.030 # SOURCE3 6 2.6117
- angle_coeff @angle:c3-sy-pf harmonic 35.490 106.030 # SOURCE3 6 same_as_c3-sy-pe
- angle_coeff @angle:c3-sy-px harmonic 35.450 103.620 # SOURCE3 3 0.7078
- angle_coeff @angle:c3-sy-py harmonic 36.330 103.390 # SOURCE3 3 0.4563
- angle_coeff @angle:c3-sy-sx harmonic 44.560 104.640 # SOURCE3 3 4.6276
- angle_coeff @angle:c3-sy-sy harmonic 45.480 100.780 # SOURCE3 4 1.1633
- angle_coeff @angle:ca-sy-ca harmonic 37.950 104.040 # SOURCE4 25 2.0762
- angle_coeff @angle:ca-sy-cc harmonic 37.720 105.090 # SOURCE4 5 0.3628
- angle_coeff @angle:ca-sy-n3 harmonic 40.110 102.480 # SOURCE4 180 1.0802
- angle_coeff @angle:ca-sy-n harmonic 39.350 105.450 # SOURCE4 51 1.1497
- angle_coeff @angle:ca-sy-ne harmonic 39.330 103.470 # SOURCE4 11 1.6071
- angle_coeff @angle:ca-sy-nh harmonic 39.330 105.590 # SOURCE4 78 1.5805
- angle_coeff @angle:ca-sy-o harmonic 41.200 108.730 # SOURCE3 26 1.2638
- angle_coeff @angle:ca-sy-oh harmonic 41.070 101.250 # SOURCE4 23 0.9100
- angle_coeff @angle:ca-sy-os harmonic 42.320 92.980 # SOURCE3 1 0.0000
- angle_coeff @angle:c-sy-c3 harmonic 37.600 101.250 # SOURCE3 3 1.1850
- angle_coeff @angle:c-sy-c harmonic 37.060 99.810 # SOURCE3 1 0.0000
- angle_coeff @angle:cc-sy-n3 harmonic 40.090 102.390 # SOURCE4 17 0.6395
- angle_coeff @angle:cc-sy-o harmonic 41.420 107.270 # SOURCE4 62 0.9782
- angle_coeff @angle:cd-sy-n3 harmonic 40.140 102.730 # SOURCE4 13 0.5722
- angle_coeff @angle:cd-sy-nh harmonic 41.070 97.200 # SOURCE4 6 0.2429
- angle_coeff @angle:cd-sy-o harmonic 41.360 108.420 # SOURCE4 38 0.6229
- angle_coeff @angle:ce-sy-ce harmonic 38.220 102.780 # SOURCE3 1 0.0000
- angle_coeff @angle:ce-sy-o harmonic 41.510 107.250 # SOURCE3 10 0.5477
- angle_coeff @angle:cf-sy-cf harmonic 38.220 102.780 # SOURCE3 1 same_as_ce-sy-ce
- angle_coeff @angle:cf-sy-o harmonic 41.510 107.250 # SOURCE3 10 same_as_ce-sy-o
- angle_coeff @angle:c-sy-o harmonic 40.090 107.230 # SOURCE3 10 0.8425
- angle_coeff @angle:f-sy-o harmonic 45.090 105.600 # SOURCE4 7 0.2000
- angle_coeff @angle:n2-sy-o harmonic 43.410 123.530 # SOURCE4 6 1.2388
- angle_coeff @angle:n3-sy-ne harmonic 41.520 102.400 # SOURCE4 5 1.3390
- angle_coeff @angle:n3-sy-o harmonic 44.080 107.110 # SOURCE4 375 1.1257
- angle_coeff @angle:na-sy-na harmonic 42.390 98.040 # SOURCE3 1
- angle_coeff @angle:nc-sy-nc harmonic 47.080 98.040 # SOURCE3 2
- angle_coeff @angle:nd-sy-nd harmonic 47.080 98.040 # SOURCE3 2
- angle_coeff @angle:ne-sy-ne harmonic 41.660 98.620 # SOURCE3 1 0.0000
- angle_coeff @angle:ne-sy-o harmonic 43.100 107.060 # SOURCE3 14 2.2705
- angle_coeff @angle:nf-sy-nf harmonic 41.660 98.620 # SOURCE3 1 same_as_ne-sy-ne
- angle_coeff @angle:nf-sy-o harmonic 43.100 107.060 # SOURCE3 14 same_as_ne-sy-o
- angle_coeff @angle:nh-sy-o harmonic 43.910 106.380 # SOURCE4 123 1.6517
- angle_coeff @angle:n-sy-o harmonic 43.660 107.500 # SOURCE4 61 1.8720
- angle_coeff @angle:o-sy-o harmonic 45.300 121.880 # SOURCE3 46 0.9495
- angle_coeff @angle:o-sy-oh harmonic 45.210 106.930 # SOURCE3 8 0.7424
- angle_coeff @angle:o-sy-os harmonic 44.040 108.310 # SOURCE4 7 0.1222
- angle_coeff @angle:o-sy-pe harmonic 37.280 106.900 # SOURCE3 12 1.4524
- angle_coeff @angle:o-sy-pf harmonic 37.280 106.900 # SOURCE3 12 same_as_o-sy-pe
- angle_coeff @angle:o-sy-px harmonic 36.810 106.170 # SOURCE3 6 0.7059
- angle_coeff @angle:o-sy-py harmonic 37.840 106.670 # SOURCE3 10 0.6478
- angle_coeff @angle:o-sy-sx harmonic 46.420 106.330 # SOURCE3 10 2.0456
- angle_coeff @angle:o-sy-sy harmonic 46.560 106.190 # SOURCE3 12 0.1754
- angle_coeff @angle:py-sy-py harmonic 36.250 104.490 # SOURCE3 1 0.0000
- angle_coeff @angle:sx-sy-sx harmonic 56.860 101.990 # SOURCE3 1 0.0000
- angle_coeff @angle:sy-sy-sy harmonic 56.630 103.290 # SOURCE3 1 0.0000
+ angle_coeff @angle:hw-ow-hw harmonic 100.00 104.52 # AMBER 1 TIP3P_water
+ angle_coeff @angle:hw-hw-ow harmonic 0.00 127.74 # AMBER 1 (found_in_crystallographic_water_with_3_bonds)
+ angle_coeff @angle:br-c1-br harmonic 57.76 180.00 # Guess 0
+ angle_coeff @angle:br-c1-c1 harmonic 54.93 180.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-c1 harmonic 64.41 180.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-c2 harmonic 60.84 180.00 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-c1-c3 harmonic 56.28 178.46 # SOURCE4 188 0.6631
+ angle_coeff @angle:c1-c1-ca harmonic 56.92 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-cl harmonic 51.40 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-f harmonic 61.02 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-ha harmonic 44.84 178.38 # SOURCE3 41 2.0683
+ angle_coeff @angle:c1-c1-hc harmonic 44.73 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-i harmonic 49.80 180.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-n1 harmonic 67.17 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-n2 harmonic 65.17 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-n3 harmonic 59.77 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-n4 harmonic 59.09 179.56 # SOURCE3 3 0.3096
+ angle_coeff @angle:c1-c1-n harmonic 62.13 177.18 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-na harmonic 61.23 176.75 # SOURCE3 8 2.9328
+ angle_coeff @angle:c1-c1-nh harmonic 61.44 179.27 # SOURCE3 3 0.2357
+ angle_coeff @angle:c1-c1-no harmonic 59.38 180.00 # SOURCE3 3 0.0000
+ angle_coeff @angle:c1-c1-o harmonic 66.79 180.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-oh harmonic 62.70 176.65 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-os harmonic 62.77 176.42 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-c1-p2 harmonic 65.19 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-p3 harmonic 66.41 169.63 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-c1-p4 harmonic 64.47 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-p5 harmonic 66.52 176.17 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-c1-s4 harmonic 54.12 167.47 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-c1-s6 harmonic 53.74 174.38 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-c1-s harmonic 55.65 179.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c1-sh harmonic 54.14 180.00 # SOURCE3 1
+ angle_coeff @angle:c1-c1-ss harmonic 55.22 173.22 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-c1-c2 harmonic 58.20 180.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-c1-ce harmonic 58.18 179.01 # SOURCE4 6 0.4656
+ angle_coeff @angle:c2-c1-n1 harmonic 63.14 180.00 # HF/6-31G* 1
+ angle_coeff @angle:c2-c1-o harmonic 63.07 179.50 # SOURCE2 1 0.0000
+ angle_coeff @angle:c2-c1-s2 harmonic 56.73 172.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-c1-c3 harmonic 51.75 180.00 # Guess 0
+ angle_coeff @angle:c3-c1-cg harmonic 55.79 178.52 # SOURCE4 39 0.5063
+ angle_coeff @angle:c3-c1-n1 harmonic 58.10 178.50 # SOURCE4 77 0.5443
+ angle_coeff @angle:ca-c1-ca harmonic 52.83 180.00 # Guess 0
+ angle_coeff @angle:c-c1-c1 harmonic 56.33 180.00 # SOURCE3 1
+ angle_coeff @angle:cg-c1-ha harmonic 43.98 177.41 # SOURCE3 22 2.4947
+ angle_coeff @angle:ch-c1-ha harmonic 43.98 177.41 # SOURCE3 22 same_as_cg-c1-ha
+ angle_coeff @angle:cl-c1-cl harmonic 46.64 180.00 # Guess 0
+ angle_coeff @angle:f-c1-f harmonic 58.19 180.00 # Guess 0
+ angle_coeff @angle:i-c1-i harmonic 53.41 180.00 # Guess 0
+ angle_coeff @angle:n1-c1-n1 harmonic 93.20 102.01 # SOURCE3 1
+ angle_coeff @angle:n1-c1-n3 harmonic 63.71 169.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:n1-c1-nh harmonic 64.02 177.43 # SOURCE4 7 0.7877
+ angle_coeff @angle:n1-c1-os harmonic 64.72 178.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-c1-p3 harmonic 67.69 171.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:n1-c1-ss harmonic 55.82 178.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-c1-n2 harmonic 65.99 180.00 # Guess 0
+ angle_coeff @angle:n2-c1-o harmonic 69.15 171.79 # SOURCE3 2 0.3594
+ angle_coeff @angle:n2-c1-s harmonic 57.48 176.01 # SOURCE4 9 0.1123
+ angle_coeff @angle:n3-c1-n3 harmonic 57.36 180.00 # Guess 0
+ angle_coeff @angle:n4-c1-n4 harmonic 56.35 180.00 # Guess 0
+ angle_coeff @angle:na-c1-na harmonic 58.62 180.00 # Guess 0
+ angle_coeff @angle:ne-c1-o harmonic 69.39 172.33 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-c1-s harmonic 57.59 175.81 # SOURCE4 8 0.2356
+ angle_coeff @angle:nf-c1-o harmonic 69.39 172.33 # SOURCE3 1 same_as_ne-c1-o
+ angle_coeff @angle:nh-c1-nh harmonic 59.55 180.00 # Guess 0
+ angle_coeff @angle:n-c1-n harmonic 60.03 180.00 # Guess 0
+ angle_coeff @angle:no-c1-no harmonic 56.83 180.00 # Guess 0
+ angle_coeff @angle:oh-c1-oh harmonic 60.91 180.00 # Guess 0
+ angle_coeff @angle:o-c1-o harmonic 69.27 180.00 # Guess 0
+ angle_coeff @angle:os-c1-os harmonic 60.96 180.00 # Guess 0
+ angle_coeff @angle:p2-c1-p2 harmonic 80.59 180.00 # Guess 0
+ angle_coeff @angle:p3-c1-p3 harmonic 79.69 180.00 # Guess 0
+ angle_coeff @angle:p4-c1-p4 harmonic 79.69 180.00 # Guess 0
+ angle_coeff @angle:p5-c1-p5 harmonic 81.37 180.00 # Guess 0
+ angle_coeff @angle:s2-c1-s2 harmonic 55.83 180.00 # Guess 0
+ angle_coeff @angle:s4-c1-s4 harmonic 51.00 180.00 # Guess 0
+ angle_coeff @angle:s6-c1-s6 harmonic 51.72 180.00 # Guess 0
+ angle_coeff @angle:sh-c1-sh harmonic 53.01 180.00 # Guess 0
+ angle_coeff @angle:s-c1-s harmonic 54.63 180.00 # Guess 0
+ angle_coeff @angle:ss-c1-ss harmonic 53.04 180.00 # Guess 0
+ angle_coeff @angle:br-c2-br harmonic 68.56 115.06 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-c2-c2 harmonic 63.97 118.96 # SOURCE4 6 0.4902
+ angle_coeff @angle:br-c2-c3 harmonic 63.71 115.33 # SOURCE4 6 0.5872
+ angle_coeff @angle:br-c2-ce harmonic 63.21 121.59 # SOURCE4 7 0.7078
+ angle_coeff @angle:br-c2-h4 harmonic 43.04 113.94 # SOURCE4 6 0.4017
+ angle_coeff @angle:br-c2-ha harmonic 43.18 113.28 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-c2-c1 harmonic 72.26 116.77 # SOURCE3 1
+ angle_coeff @angle:c1-c2-c2 harmonic 70.34 121.62 # SOURCE3 1
+ angle_coeff @angle:c1-c2-c3 harmonic 64.22 124.92 # SOURCE4 17 0.7576
+ angle_coeff @angle:c1-c2-f harmonic 67.99 124.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:c1-c2-ha harmonic 50.43 121.37 # SOURCE3 8 0.0055
+ angle_coeff @angle:c2-c2-c2 harmonic 69.84 121.81 # SOURCE3 10 0.3843
+ angle_coeff @angle:c2-c2-c3 harmonic 64.33 123.42 # SOURCE3 41 2.6057
+ angle_coeff @angle:c2-c2-ca harmonic 66.88 117.00 # SOURCE3 1
+ angle_coeff @angle:c2-c2-cc harmonic 70.22 117.21 # SOURCE3 2 0.3418
+ angle_coeff @angle:c2-c2-cd harmonic 70.22 117.21 # SOURCE3 2 same_as_c2-c2-cc
+ angle_coeff @angle:c2-c2-cl harmonic 58.43 122.85 # SOURCE4 23 0.6711
+ angle_coeff @angle:c2-c2-cx harmonic 64.50 125.40 # SOURCE4 12 1.8494
+ angle_coeff @angle:c2-c2-cy harmonic 70.42 103.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:c2-c2-f harmonic 68.11 122.92 # SOURCE4 12 0.5301
+ angle_coeff @angle:c2-c2-h4 harmonic 49.75 122.54 # SOURCE4 69 1.1900
+ angle_coeff @angle:c2-c2-ha harmonic 50.04 120.94 # SOURCE3 254 1.3150
+ angle_coeff @angle:c2-c2-hc harmonic 50.30 119.70 # SOURCE3 1
+ angle_coeff @angle:c2-c2-hx harmonic 48.98 126.45 # SOURCE3 3 0.0219
+ angle_coeff @angle:c2-c2-i harmonic 56.28 121.03 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-c2-n1 harmonic 71.69 122.98 # HF/6-31G* 1
+ angle_coeff @angle:c2-c2-n2 harmonic 71.29 126.01 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-c2-n3 harmonic 70.33 124.55 # SOURCE3 1
+ angle_coeff @angle:c2-c2-n4 harmonic 67.18 121.52 # SOURCE3 5 1.2656
+ angle_coeff @angle:c2-c2-n harmonic 68.86 123.20 # SOURCE4 15 1.8657
+ angle_coeff @angle:c2-c2-na harmonic 69.83 121.38 # SOURCE3 26 6.9463
+ angle_coeff @angle:c2-c2-nh harmonic 69.80 124.99 # SOURCE3 7 0.9929
+ angle_coeff @angle:c2-c2-no harmonic 67.52 124.09 # SOURCE4 6 1.2772
+ angle_coeff @angle:c2-c2-o harmonic 71.92 130.89 # SOURCE3 2 0.0201
+ angle_coeff @angle:c2-c2-oh harmonic 71.64 122.07 # SOURCE4 6 1.0883
+ angle_coeff @angle:c2-c2-os harmonic 71.04 121.89 # SOURCE4 33 1.3457
+ angle_coeff @angle:c2-c2-p2 harmonic 84.73 115.10 # SOURCE3 1
+ angle_coeff @angle:c2-c2-p3 harmonic 75.19 124.83 # SOURCE3 5 2.1222
+ angle_coeff @angle:c2-c2-p4 harmonic 77.22 119.76 # SOURCE3 1
+ angle_coeff @angle:c2-c2-p5 harmonic 73.70 125.97 # SOURCE3 1
+ angle_coeff @angle:c2-c2-s4 harmonic 62.85 119.84 # SOURCE3 1
+ angle_coeff @angle:c2-c2-s6 harmonic 62.81 120.01 # SOURCE3 1
+ angle_coeff @angle:c2-c2-s harmonic 61.25 129.37 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-c2-sh harmonic 60.87 125.70 # SOURCE3 3 1.3390
+ angle_coeff @angle:c2-c2-ss harmonic 62.79 122.86 # SOURCE4 13 1.7467
+ angle_coeff @angle:c3-c2-c3 harmonic 62.70 116.52 # SOURCE3 15 3.1001
+ angle_coeff @angle:c3-c2-cc harmonic 63.22 125.39 # CORR 27
+ angle_coeff @angle:c3-c2-cd harmonic 63.22 125.39 # CORR 27
+ angle_coeff @angle:c3-c2-ce harmonic 64.17 123.08 # CORR 1288
+ angle_coeff @angle:c3-c2-cf harmonic 64.17 123.08 # CORR 1288
+ angle_coeff @angle:c3-c2-h4 harmonic 45.30 119.25 # SOURCE4 22 2.1707
+ angle_coeff @angle:c3-c2-ha harmonic 45.66 117.30 # SOURCE3 33 1.7453
+ angle_coeff @angle:c3-c2-hc harmonic 45.15 120.00 # SOURCE3 1
+ angle_coeff @angle:c3-c2-n2 harmonic 66.47 123.52 # SOURCE4 141 2.2935
+ angle_coeff @angle:c3-c2-n harmonic 66.79 114.80 # SOURCE4 12 1.8112
+ angle_coeff @angle:c3-c2-na harmonic 64.95 122.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-c2-ne harmonic 66.96 122.15 # SOURCE3 4 0.2197
+ angle_coeff @angle:c3-c2-nf harmonic 66.96 122.15 # SOURCE3 4 same_as_c3-c2-ne
+ angle_coeff @angle:c3-c2-nh harmonic 66.69 118.59 # SOURCE3 6 2.2622
+ angle_coeff @angle:c3-c2-o harmonic 67.88 123.18 # SOURCE4 5 0.9226
+ angle_coeff @angle:c3-c2-oh harmonic 68.50 115.04 # SOURCE4 36 2.0110
+ angle_coeff @angle:c3-c2-os harmonic 68.77 112.69 # SOURCE4 50 2.4254
+ angle_coeff @angle:c3-c2-p2 harmonic 78.98 122.74 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-c2-s harmonic 62.79 115.44 # SOURCE3 2 0.0115
+ angle_coeff @angle:c3-c2-ss harmonic 61.62 119.66 # SOURCE4 45 1.9732
+ angle_coeff @angle:ca-c2-ca harmonic 63.51 117.88 # SOURCE3 1
+ angle_coeff @angle:ca-c2-hc harmonic 45.28 123.30 # SOURCE3 1
+ angle_coeff @angle:c-c2-c2 harmonic 67.93 120.70 # SOURCE3 1
+ angle_coeff @angle:c-c2-c3 harmonic 63.87 119.70 # SOURCE3 1
+ angle_coeff @angle:c-c2-c harmonic 66.57 118.88 # SOURCE3 1
+ angle_coeff @angle:cc-c2-h4 harmonic 49.19 120.33 # SOURCE4 7 0.0865
+ angle_coeff @angle:cc-c2-ha harmonic 49.07 120.76 # SOURCE3 11 1.4155
+ angle_coeff @angle:cc-c2-nh harmonic 69.46 122.96 # SOURCE4 10 0.7347
+ angle_coeff @angle:cc-c2-o harmonic 72.80 123.59 # SOURCE4 6 0.0560
+ angle_coeff @angle:cd-c2-ha harmonic 49.07 120.76 # SOURCE3 11 1.4155
+ angle_coeff @angle:ce-c2-cl harmonic 58.06 123.90 # SOURCE4 11 0.3570
+ angle_coeff @angle:ce-c2-h4 harmonic 49.38 122.29 # SOURCE4 75 1.4008
+ angle_coeff @angle:ce-c2-ha harmonic 49.57 121.19 # SOURCE3 122 0.5318
+ angle_coeff @angle:ce-c2-na harmonic 68.82 123.71 # SOURCE4 6 2.0109
+ angle_coeff @angle:ce-c2-nh harmonic 70.64 120.72 # SOURCE4 93 2.2537
+ angle_coeff @angle:ce-c2-no harmonic 68.45 119.65 # SOURCE4 5 0.9817
+ angle_coeff @angle:ce-c2-o harmonic 73.66 123.08 # SOURCE4 5 0.2391
+ angle_coeff @angle:ce-c2-oh harmonic 70.90 123.27 # SOURCE4 42 1.8111
+ angle_coeff @angle:ce-c2-os harmonic 70.47 122.52 # SOURCE4 51 2.4680
+ angle_coeff @angle:cf-c2-ha harmonic 49.57 121.19 # SOURCE3 122 same_as_ce-c2-ha
+ angle_coeff @angle:c-c2-ha harmonic 47.67 121.33 # SOURCE3 4 0.2462
+ angle_coeff @angle:c-c2-hc harmonic 48.00 119.70 # SOURCE3 1
+ angle_coeff @angle:cl-c2-cl harmonic 55.44 114.27 # SOURCE4 10 0.5850
+ angle_coeff @angle:cl-c2-h4 harmonic 40.76 113.77 # SOURCE4 9 0.6228
+ angle_coeff @angle:cl-c2-ha harmonic 40.86 113.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-c2-ha harmonic 46.61 115.89 # SOURCE4 15 0.3682
+ angle_coeff @angle:f-c2-f harmonic 70.67 109.60 # SOURCE2 2 0.6000
+ angle_coeff @angle:f-c2-ha harmonic 51.25 110.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:h4-c2-n2 harmonic 52.40 120.69 # SOURCE4 13 1.3105
+ angle_coeff @angle:h4-c2-n harmonic 50.48 113.57 # SOURCE4 26 1.0283
+ angle_coeff @angle:h4-c2-na harmonic 51.03 113.22 # SOURCE4 9 0.6345
+ angle_coeff @angle:h4-c2-ne harmonic 52.87 119.63 # SOURCE4 10 1.6786
+ angle_coeff @angle:h4-c2-nh harmonic 51.55 115.64 # SOURCE4 31 1.0081
+ angle_coeff @angle:h4-c2-no harmonic 49.39 113.38 # SOURCE4 6 0.1240
+ angle_coeff @angle:h4-c2-os harmonic 52.23 113.70 # SOURCE3 13 2.0464
+ angle_coeff @angle:h4-c2-ss harmonic 42.85 118.47 # SOURCE3 9 2.5335
+ angle_coeff @angle:h5-c2-n2 harmonic 52.41 120.16 # SOURCE4 27 1.8999
+ angle_coeff @angle:h5-c2-na harmonic 48.23 126.39 # SOURCE3 4 0.3299
+ angle_coeff @angle:h5-c2-ne harmonic 52.76 119.62 # SOURCE4 17 1.3235
+ angle_coeff @angle:h5-c2-nh harmonic 51.85 113.93 # SOURCE4 50 0.8394
+ angle_coeff @angle:ha-c2-ha harmonic 38.02 117.65 # SOURCE3 349 1.3426
+ angle_coeff @angle:ha-c2-n1 harmonic 51.83 120.76 # SOURCE3 8 0.6632
+ angle_coeff @angle:ha-c2-n2 harmonic 52.39 120.54 # SOURCE3 92 1.4571
+ angle_coeff @angle:ha-c2-n3 harmonic 52.44 113.54 # SOURCE3 1
+ angle_coeff @angle:ha-c2-n harmonic 50.49 113.40 # SOURCE3 4 1.2182
+ angle_coeff @angle:ha-c2-na harmonic 51.18 112.42 # SOURCE3 8 0.6507
+ angle_coeff @angle:ha-c2-ne harmonic 52.48 121.18 # SOURCE3 68 0.6824
+ angle_coeff @angle:ha-c2-nf harmonic 52.48 121.18 # SOURCE3 68 same_as_ha-c2-ne
+ angle_coeff @angle:ha-c2-nh harmonic 51.29 116.68 # SOURCE3 13 2.5734
+ angle_coeff @angle:ha-c2-no harmonic 49.64 112.14 # SOURCE3 2 0.0264
+ angle_coeff @angle:ha-c2-o harmonic 55.30 117.23 # SOURCE3 2 0.0201
+ angle_coeff @angle:ha-c2-oh harmonic 52.34 116.18 # SOURCE3 2 0.0000
+ angle_coeff @angle:ha-c2-os harmonic 52.43 112.69 # SOURCE3 13 2.5851
+ angle_coeff @angle:ha-c2-p2 harmonic 55.74 121.48 # SOURCE3 122 0.4329
+ angle_coeff @angle:ha-c2-p3 harmonic 52.04 114.31 # SOURCE3 3 0.0000
+ angle_coeff @angle:ha-c2-p4 harmonic 51.62 117.86 # SOURCE3 1
+ angle_coeff @angle:ha-c2-p5 harmonic 49.81 120.10 # SOURCE3 2 0.0000
+ angle_coeff @angle:ha-c2-pe harmonic 55.05 121.46 # SOURCE3 104 0.7821
+ angle_coeff @angle:ha-c2-pf harmonic 55.05 121.46 # SOURCE3 104 same_as_ha-c2-pe
+ angle_coeff @angle:ha-c2-s2 harmonic 46.19 118.74 # SOURCE3 2 0.0000
+ angle_coeff @angle:ha-c2-s4 harmonic 42.81 115.30 # SOURCE3 2 0.0000
+ angle_coeff @angle:ha-c2-s harmonic 43.42 115.70 # SOURCE3 2 0.0000
+ angle_coeff @angle:ha-c2-s6 harmonic 42.58 116.60 # SOURCE3 2 0.0000
+ angle_coeff @angle:ha-c2-sh harmonic 43.04 111.74 # SOURCE3 1 0.0000
+ angle_coeff @angle:ha-c2-ss harmonic 43.18 116.72 # SOURCE3 7 2.7543
+ angle_coeff @angle:hc-c2-hc harmonic 37.81 118.92 # SOURCE3 1
+ angle_coeff @angle:hc-c2-n2 harmonic 52.42 120.40 # SOURCE3 1
+ angle_coeff @angle:hc-c2-n harmonic 50.35 114.04 # SOURCE3 1
+ angle_coeff @angle:hc-c2-na harmonic 49.73 119.10 # SOURCE3 1
+ angle_coeff @angle:hc-c2-nh harmonic 52.03 113.36 # SOURCE3 1
+ angle_coeff @angle:hc-c2-no harmonic 49.64 112.12 # SOURCE3 1
+ angle_coeff @angle:hc-c2-oh harmonic 52.33 116.22 # SOURCE3 1
+ angle_coeff @angle:hc-c2-os harmonic 51.65 116.11 # SOURCE3 1
+ angle_coeff @angle:hc-c2-p3 harmonic 51.40 117.19 # SOURCE3 1
+ angle_coeff @angle:hc-c2-p5 harmonic 49.92 119.58 # SOURCE3 1
+ angle_coeff @angle:hc-c2-s4 harmonic 42.66 116.12 # SOURCE3 1
+ angle_coeff @angle:hc-c2-s6 harmonic 42.79 115.45 # SOURCE3 1
+ angle_coeff @angle:hc-c2-sh harmonic 42.31 115.63 # SOURCE3 1
+ angle_coeff @angle:hc-c2-ss harmonic 43.38 115.62 # SOURCE3 1
+ angle_coeff @angle:hx-c2-n4 harmonic 48.42 113.03 # SOURCE3 3 0.3873
+ angle_coeff @angle:i-c2-i harmonic 60.96 117.94 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-c2-n1 harmonic 73.61 124.15 # HF/6-31G* 1
+ angle_coeff @angle:n2-c2-n2 harmonic 77.96 113.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-c2-n4 harmonic 72.03 113.05 # SOURCE4 6 0.3318
+ angle_coeff @angle:n2-c2-na harmonic 71.71 123.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-c2-nh harmonic 72.62 124.27 # SOURCE3 12 2.4114
+ angle_coeff @angle:n2-c2-oh harmonic 74.36 122.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-c2-os harmonic 74.32 119.82 # SOURCE4 20 1.2664
+ angle_coeff @angle:n2-c2-ss harmonic 62.86 129.77 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-c2-n3 harmonic 73.45 118.47 # SOURCE3 1
+ angle_coeff @angle:n4-c2-n4 harmonic 67.72 113.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-c2-ss harmonic 64.40 116.26 # SOURCE4 7 2.4226
+ angle_coeff @angle:na-c2-na harmonic 73.65 109.33 # SOURCE3 3 3.0187
+ angle_coeff @angle:ne-c2-nh harmonic 73.03 123.56 # CORR 128
+ angle_coeff @angle:ne-c2-os harmonic 74.86 118.76 # SOURCE4 5 0.3382
+ angle_coeff @angle:ne-c2-ss harmonic 65.41 120.06 # SOURCE4 9 1.3423
+ angle_coeff @angle:nf-c2-nh harmonic 73.03 123.56 # CORR 128
+ angle_coeff @angle:nh-c2-nh harmonic 74.46 112.72 # SOURCE4 257 1.8176
+ angle_coeff @angle:nh-c2-oh harmonic 74.05 117.16 # SOURCE4 7 0.8698
+ angle_coeff @angle:nh-c2-os harmonic 74.32 114.29 # SOURCE4 18 1.0900
+ angle_coeff @angle:nh-c2-ss harmonic 67.23 111.55 # SOURCE4 37 1.1778
+ angle_coeff @angle:n-c2-n2 harmonic 70.56 125.95 # SOURCE3 2 5.0202
+ angle_coeff @angle:n-c2-n harmonic 71.55 113.23 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-c2-na harmonic 74.57 105.42 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-c2-ne harmonic 70.89 125.38 # SOURCE4 10 1.6819
+ angle_coeff @angle:n-c2-nh harmonic 74.20 109.14 # SOURCE4 22 1.5634
+ angle_coeff @angle:no-c2-no harmonic 69.43 113.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-c2-ss harmonic 66.83 111.06 # SOURCE4 9 0.5522
+ angle_coeff @angle:oh-c2-oh harmonic 76.03 114.33 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-c2-o harmonic 80.23 121.69 # SOURCE3 1
+ angle_coeff @angle:o-c2-oh harmonic 76.69 121.23 # SOURCE4 6 0.0958
+ angle_coeff @angle:o-c2-s harmonic 64.15 127.68 # SOURCE3 2 0.0547
+ angle_coeff @angle:os-c2-os harmonic 74.21 115.80 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-c2-p2 harmonic 100.59 129.80 # SOURCE3 1
+ angle_coeff @angle:p3-c2-p3 harmonic 97.08 115.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:p5-c2-p5 harmonic 92.92 121.85 # SOURCE3 1
+ angle_coeff @angle:s4-c2-s4 harmonic 61.89 120.32 # SOURCE3 1
+ angle_coeff @angle:s4-c2-s6 harmonic 61.98 119.95 # SOURCE3 1
+ angle_coeff @angle:s6-c2-s6 harmonic 61.98 119.97 # SOURCE3 1
+ angle_coeff @angle:sh-c2-sh harmonic 63.96 110.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-c2-ss harmonic 62.65 117.82 # SOURCE3 1
+ angle_coeff @angle:s-c2-s harmonic 62.47 121.67 # SOURCE3 1
+ angle_coeff @angle:ss-c2-ss harmonic 62.77 120.24 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-c3-br harmonic 67.46 109.03 # SOURCE4 6 0.5435
+ angle_coeff @angle:br-c3-c1 harmonic 62.77 111.80 # SOURCE2 3 0.2160
+ angle_coeff @angle:br-c3-c3 harmonic 63.03 109.25 # SOURCE3 10 0.5685
+ angle_coeff @angle:br-c3-c harmonic 62.92 110.37 # SOURCE4 13 2.4747
+ angle_coeff @angle:br-c3-h1 harmonic 43.12 103.04 # SOURCE3 5 0.3092
+ angle_coeff @angle:br-c3-h2 harmonic 42.34 107.10 # SOURCE4 7 0.2378
+ angle_coeff @angle:br-c3-hc harmonic 42.40 106.50 # SOURCE3 1
+ angle_coeff @angle:c1-c3-c1 harmonic 66.50 109.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:c1-c3-c2 harmonic 65.00 111.11 # SOURCE4 12 0.7366
+ angle_coeff @angle:c1-c3-c3 harmonic 64.29 111.42 # SOURCE4 197 1.2106
+ angle_coeff @angle:c1-c3-ca harmonic 64.93 110.95 # SOURCE4 28 1.1203
+ angle_coeff @angle:c1-c3-cc harmonic 64.32 114.20 # CORR 13
+ angle_coeff @angle:c1-c3-cd harmonic 64.32 114.20 # CORR 13
+ angle_coeff @angle:c1-c3-cl harmonic 58.49 110.63 # SOURCE2 3 1.2257
+ angle_coeff @angle:c1-c3-h1 harmonic 48.35 109.29 # SOURCE4 133 0.5701
+ angle_coeff @angle:c1-c3-hc harmonic 48.25 109.75 # SOURCE3 12 0.8436
+ angle_coeff @angle:c1-c3-hx harmonic 47.76 112.05 # SOURCE4 17 0.2587
+ angle_coeff @angle:c1-c3-n3 harmonic 67.03 112.59 # SOURCE4 28 0.9555
+ angle_coeff @angle:c1-c3-n4 harmonic 66.53 112.04 # SOURCE4 11 0.5701
+ angle_coeff @angle:c1-c3-n harmonic 67.41 112.08 # SOURCE4 18 0.9568
+ angle_coeff @angle:c1-c3-nh harmonic 67.25 112.79 # SOURCE4 8 0.9453
+ angle_coeff @angle:c1-c3-oh harmonic 69.49 109.14 # SOURCE4 39 0.6500
+ angle_coeff @angle:c1-c3-os harmonic 69.27 108.88 # SOURCE4 31 0.9597
+ angle_coeff @angle:c2-c3-c2 harmonic 63.93 112.08 # SOURCE4 153 0.7742
+ angle_coeff @angle:c2-c3-c3 harmonic 63.53 111.44 # SOURCE4 2891 1.7167
+ angle_coeff @angle:c2-c3-ca harmonic 63.71 112.45 # SOURCE4 141 1.6755
+ angle_coeff @angle:c2-c3-cc harmonic 64.24 111.64 # CORR 32
+ angle_coeff @angle:c2-c3-cd harmonic 64.24 111.64 # CORR 32
+ angle_coeff @angle:c2-c3-ce harmonic 64.05 111.87 # CORR 38
+ angle_coeff @angle:c2-c3-cf harmonic 64.05 111.87 # CORR 38
+ angle_coeff @angle:c2-c3-cl harmonic 57.71 112.07 # SOURCE4 6 0.9936
+ angle_coeff @angle:c2-c3-cx harmonic 63.65 112.62 # SOURCE4 17 1.3287
+ angle_coeff @angle:c2-c3-cy harmonic 66.76 101.33 # SOURCE4 58 0.9262
+ angle_coeff @angle:c2-c3-f harmonic 66.52 110.96 # SOURCE4 25 0.2829
+ angle_coeff @angle:c2-c3-h1 harmonic 47.03 110.46 # SOURCE3 17 1.1525
+ angle_coeff @angle:c2-c3-h2 harmonic 46.84 111.19 # SOURCE4 17 0.8311
+ angle_coeff @angle:c2-c3-hc harmonic 47.03 110.49 # SOURCE3 159 0.7479
+ angle_coeff @angle:c2-c3-hx harmonic 46.83 111.45 # SOURCE4 20 0.9004
+ angle_coeff @angle:c2-c3-n2 harmonic 67.09 108.99 # SOURCE4 10 1.2025
+ angle_coeff @angle:c2-c3-n3 harmonic 66.47 111.52 # SOURCE4 158 1.4012
+ angle_coeff @angle:c2-c3-n harmonic 66.73 111.38 # SOURCE4 67 1.7559
+ angle_coeff @angle:c2-c3-na harmonic 66.24 113.30 # SOURCE4 27 1.2945
+ angle_coeff @angle:c2-c3-nh harmonic 67.10 110.27 # SOURCE4 56 1.8018
+ angle_coeff @angle:c2-c3-oh harmonic 68.18 110.21 # SOURCE4 220 1.4197
+ angle_coeff @angle:c2-c3-os harmonic 68.45 108.48 # SOURCE4 204 1.6082
+ angle_coeff @angle:c2-c3-s4 harmonic 62.57 109.73 # SOURCE4 6 0.1722
+ angle_coeff @angle:c2-c3-ss harmonic 63.62 104.97 # SOURCE3 2 2.2248
+ angle_coeff @angle:c3-c3-c3 harmonic 63.21 110.63 # SOURCE3 507 2.7845
+ angle_coeff @angle:c3-c3-ca harmonic 63.25 112.09 # SOURCE4 3859 1.5523
+ angle_coeff @angle:c3-c3-cc harmonic 63.58 111.89 # CORR 700
+ angle_coeff @angle:c3-c3-cd harmonic 63.58 111.89 # CORR 700
+ angle_coeff @angle:c3-c3-ce harmonic 63.70 111.06 # CORR 490
+ angle_coeff @angle:c3-c3-cf harmonic 63.70 111.06 # CORR 490
+ angle_coeff @angle:c3-c3-cl harmonic 57.85 110.33 # SOURCE3 20 1.1495
+ angle_coeff @angle:c3-c3-cx harmonic 63.30 111.82 # SOURCE4 179 2.4814
+ angle_coeff @angle:c3-c3-cy harmonic 63.63 109.62 # SOURCE3 5 2.0747
+ angle_coeff @angle:c3-c3-f harmonic 66.22 109.41 # SOURCE3 18 1.1878
+ angle_coeff @angle:c3-c3-h1 harmonic 46.36 110.07 # SOURCE3 457 1.1542
+ angle_coeff @angle:c3-c3-h2 harmonic 46.02 111.59 # SOURCE3 8 1.1217
+ angle_coeff @angle:c3-c3-hc harmonic 46.37 110.05 # SOURCE3 2092 0.6991
+ angle_coeff @angle:c3-c3-hx harmonic 46.02 111.74 # SOURCE3 15 1.2365
+ angle_coeff @angle:c3-c3-i harmonic 58.48 110.96 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-c3-n1 harmonic 66.64 108.86 # SOURCE4 9 0.8093
+ angle_coeff @angle:c3-c3-n2 harmonic 66.40 109.16 # SOURCE3 8 1.4079
+ angle_coeff @angle:c3-c3-n3 harmonic 66.18 110.38 # SOURCE3 69 2.9054
+ angle_coeff @angle:c3-c3-n4 harmonic 64.45 114.32 # SOURCE4 567 2.4412
+ angle_coeff @angle:c3-c3-n harmonic 65.85 112.13 # SOURCE3 31 2.0700
+ angle_coeff @angle:c3-c3-na harmonic 65.73 112.81 # SOURCE4 595 1.5050
+ angle_coeff @angle:c3-c3-nh harmonic 66.39 110.45 # SOURCE4 1514 1.3881
+ angle_coeff @angle:c3-c3-no harmonic 65.21 109.27 # SOURCE4 25 1.1817
+ angle_coeff @angle:c3-c3-o harmonic 68.59 112.97 # SOURCE4 14 1.0277
+ angle_coeff @angle:c3-c3-oh harmonic 67.72 109.43 # SOURCE3 48 1.5023
+ angle_coeff @angle:c3-c3-os harmonic 67.78 108.42 # SOURCE3 122 1.6759
+ angle_coeff @angle:c3-c3-p3 harmonic 76.46 113.19 # SOURCE4 15 0.2974
+ angle_coeff @angle:c3-c3-p5 harmonic 77.70 112.32 # SOURCE4 106 1.1753
+ angle_coeff @angle:c3-c3-s4 harmonic 62.16 110.07 # SOURCE4 38 0.8510
+ angle_coeff @angle:c3-c3-s6 harmonic 62.98 110.00 # SOURCE4 152 1.4278
+ angle_coeff @angle:c3-c3-sh harmonic 60.98 113.02 # SOURCE4 80 1.3442
+ angle_coeff @angle:c3-c3-ss harmonic 61.10 112.69 # SOURCE3 24 2.1842
+ angle_coeff @angle:c3-c3-sy harmonic 62.81 109.91 # SOURCE4 22 0.9248
+ angle_coeff @angle:ca-c3-ca harmonic 63.66 112.26 # SOURCE4 385 1.7047
+ angle_coeff @angle:ca-c3-cc harmonic 63.92 112.38 # CORR 69
+ angle_coeff @angle:ca-c3-cd harmonic 63.92 112.38 # CORR 69
+ angle_coeff @angle:ca-c3-ce harmonic 63.81 112.33 # SOURCE4 51 1.1929
+ angle_coeff @angle:ca-c3-cl harmonic 57.85 111.31 # SOURCE4 16 0.8077
+ angle_coeff @angle:ca-c3-cx harmonic 63.69 112.10 # SOURCE4 5 2.1117
+ angle_coeff @angle:ca-c3-f harmonic 66.14 111.76 # SOURCE4 449 0.3492
+ angle_coeff @angle:ca-c3-h1 harmonic 46.78 110.95 # SOURCE3 12 1.1170
+ angle_coeff @angle:ca-c3-h2 harmonic 47.03 109.66 # SOURCE4 29 1.2184
+ angle_coeff @angle:ca-c3-hc harmonic 46.96 110.15 # SOURCE3 47 1.2602
+ angle_coeff @angle:ca-c3-hx harmonic 46.69 111.44 # SOURCE4 33 0.4691
+ angle_coeff @angle:ca-c3-n2 harmonic 65.92 112.49 # SOURCE4 22 1.1043
+ angle_coeff @angle:ca-c3-n3 harmonic 66.18 112.13 # SOURCE4 387 1.2309
+ angle_coeff @angle:ca-c3-n4 harmonic 64.87 114.54 # SOURCE4 22 2.3986
+ angle_coeff @angle:ca-c3-n harmonic 66.29 112.43 # SOURCE4 201 1.5133
+ angle_coeff @angle:ca-c3-na harmonic 66.27 112.81 # SOURCE4 104 1.5807
+ angle_coeff @angle:ca-c3-nc harmonic 68.20 106.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-c3-nd harmonic 68.20 106.51 # SOURCE3 1 same_as_ca-c3-nc
+ angle_coeff @angle:ca-c3-nh harmonic 66.64 111.41 # SOURCE4 147 1.0074
+ angle_coeff @angle:ca-c3-oh harmonic 67.94 110.55 # SOURCE4 348 1.2310
+ angle_coeff @angle:ca-c3-os harmonic 68.19 108.89 # SOURCE4 411 1.0102
+ angle_coeff @angle:ca-c3-p5 harmonic 77.64 113.41 # SOURCE4 19 1.4444
+ angle_coeff @angle:ca-c3-s6 harmonic 62.87 111.36 # SOURCE4 15 1.4775
+ angle_coeff @angle:ca-c3-ss harmonic 61.90 110.66 # SOURCE4 78 1.4797
+ angle_coeff @angle:ca-c3-sx harmonic 62.16 110.80 # SOURCE4 16 0.5396
+ angle_coeff @angle:c-c3-c1 harmonic 64.56 112.64 # SOURCE4 11 1.0678
+ angle_coeff @angle:c-c3-c2 harmonic 64.14 111.32 # SOURCE4 92 1.8522
+ angle_coeff @angle:c-c3-c3 harmonic 63.79 110.53 # SOURCE3 62 1.9636
+ angle_coeff @angle:c-c3-c harmonic 64.06 111.61 # SOURCE4 151 2.1872
+ angle_coeff @angle:c-c3-ca harmonic 64.13 110.99 # SOURCE4 481 1.7257
+ angle_coeff @angle:c-c3-cc harmonic 63.89 112.89 # CORR 104
+ angle_coeff @angle:cc-c3-cc harmonic 64.61 111.05 # CORR 19
+ angle_coeff @angle:cc-c3-cd harmonic 67.30 102.35 # SOURCE3 1 0.0000
+ angle_coeff @angle:cc-c3-cx harmonic 63.85 112.55 # SOURCE4 5 1.4317
+ angle_coeff @angle:c-c3-cd harmonic 63.89 112.89 # CORR 104
+ angle_coeff @angle:c-c3-ce harmonic 64.02 111.98 # SOURCE4 16 2.1388
+ angle_coeff @angle:cc-c3-f harmonic 66.70 111.22 # CORR 69
+ angle_coeff @angle:cc-c3-h1 harmonic 47.03 111.62 # SOURCE3 20 1.0215
+ angle_coeff @angle:cc-c3-hc harmonic 47.20 110.86 # SOURCE3 85 1.0276
+ angle_coeff @angle:cc-c3-hx harmonic 47.17 111.02 # SOURCE4 9 0.7503
+ angle_coeff @angle:c-c3-cl harmonic 57.94 111.16 # SOURCE4 41 1.2257
+ angle_coeff @angle:cc-c3-n2 harmonic 66.85 110.47 # SOURCE4 11 0.5153
+ angle_coeff @angle:cc-c3-n3 harmonic 66.79 111.17 # CORR 111
+ angle_coeff @angle:cc-c3-n4 harmonic 64.88 115.58 # SOURCE4 6 1.1723
+ angle_coeff @angle:cc-c3-n harmonic 66.84 111.71 # CORR 32
+ angle_coeff @angle:cc-c3-na harmonic 66.43 113.39 # SOURCE4 8 0.8010
+ angle_coeff @angle:cc-c3-nc harmonic 68.37 107.04 # SOURCE3 2 0.0000
+ angle_coeff @angle:cc-c3-nh harmonic 66.68 112.38 # CORR 21
+ angle_coeff @angle:cc-c3-oh harmonic 68.13 111.10 # CORR 116
+ angle_coeff @angle:cc-c3-os harmonic 68.51 109.01 # CORR 91
+ angle_coeff @angle:cc-c3-p5 harmonic 76.89 116.23 # SOURCE4 6 0.7766
+ angle_coeff @angle:cc-c3-sh harmonic 61.11 114.02 # SOURCE3 1 same_as_cd-c3-sh
+ angle_coeff @angle:cc-c3-ss harmonic 61.95 111.06 # CORR 43
+ angle_coeff @angle:c-c3-cx harmonic 64.08 111.09 # SOURCE4 9 1.2357
+ angle_coeff @angle:cd-c3-cd harmonic 64.61 111.05 # CORR 19
+ angle_coeff @angle:cd-c3-f harmonic 66.70 111.22 # CORR 69
+ angle_coeff @angle:cd-c3-h1 harmonic 47.03 111.62 # SOURCE3 20 1.0215
+ angle_coeff @angle:cd-c3-hc harmonic 47.20 110.86 # SOURCE3 85 1.0276
+ angle_coeff @angle:cd-c3-n3 harmonic 66.79 111.17 # CORR 111
+ angle_coeff @angle:cd-c3-n harmonic 66.84 111.71 # CORR 32
+ angle_coeff @angle:cd-c3-nd harmonic 68.37 107.04 # SOURCE3 2 same_as_cc-c3-nc
+ angle_coeff @angle:cd-c3-nh harmonic 66.68 112.38 # CORR 21
+ angle_coeff @angle:cd-c3-oh harmonic 68.13 111.10 # CORR 116
+ angle_coeff @angle:cd-c3-os harmonic 68.51 109.01 # CORR 91
+ angle_coeff @angle:cd-c3-sh harmonic 61.11 114.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-c3-ss harmonic 61.95 111.06 # CORR 43
+ angle_coeff @angle:ce-c3-ce harmonic 64.24 111.44 # SOURCE4 18 0.3695
+ angle_coeff @angle:ce-c3-cy harmonic 66.33 102.85 # CORR 55
+ angle_coeff @angle:ce-c3-h1 harmonic 47.30 109.59 # CORR 119
+ angle_coeff @angle:ce-c3-hc harmonic 47.00 110.98 # SOURCE3 27 0.1559
+ angle_coeff @angle:ce-c3-n3 harmonic 66.45 111.83 # CORR 28
+ angle_coeff @angle:ce-c3-n harmonic 67.09 110.41 # SOURCE4 6 1.1405
+ angle_coeff @angle:ce-c3-oh harmonic 68.00 111.05 # SOURCE4 17 1.5159
+ angle_coeff @angle:ce-c3-os harmonic 68.64 108.10 # SOURCE4 16 1.9583
+ angle_coeff @angle:ce-c3-ss harmonic 61.87 111.10 # SOURCE4 7 2.0156
+ angle_coeff @angle:c-c3-f harmonic 66.82 109.98 # SOURCE4 38 0.9895
+ angle_coeff @angle:cf-c3-cy harmonic 66.33 102.85 # CORR 55
+ angle_coeff @angle:cf-c3-h1 harmonic 47.30 109.59 # CORR 119
+ angle_coeff @angle:cf-c3-hc harmonic 47.00 110.98 # SOURCE3 27 same_as_ce-c3-hc
+ angle_coeff @angle:cf-c3-n3 harmonic 66.45 111.83 # CORR 28
+ angle_coeff @angle:c-c3-h1 harmonic 47.63 107.66 # SOURCE3 66 1.4015
+ angle_coeff @angle:c-c3-h2 harmonic 47.16 109.69 # SOURCE4 38 1.0614
+ angle_coeff @angle:c-c3-hc harmonic 47.20 109.68 # SOURCE3 614 0.6426
+ angle_coeff @angle:c-c3-hx harmonic 47.23 109.54 # SOURCE4 47 0.6627
+ angle_coeff @angle:cl-c3-cl harmonic 54.23 111.03 # SOURCE2 6 1.1324
+ angle_coeff @angle:cl-c3-f harmonic 59.15 109.02 # SOURCE4 15 0.3609
+ angle_coeff @angle:cl-c3-h1 harmonic 40.66 105.93 # SOURCE3 19 1.1883
+ angle_coeff @angle:cl-c3-h2 harmonic 40.44 107.14 # SOURCE4 50 0.5973
+ angle_coeff @angle:cl-c3-hc harmonic 40.33 107.65 # SOURCE2 2 2.2500
+ angle_coeff @angle:cl-c3-os harmonic 60.38 111.40 # SOURCE4 8 0.8275
+ angle_coeff @angle:cl-c3-ss harmonic 57.60 112.94 # SOURCE4 10 1.4625
+ angle_coeff @angle:c-c3-n2 harmonic 66.92 109.55 # SOURCE4 55 1.4579
+ angle_coeff @angle:c-c3-n3 harmonic 66.59 111.14 # SOURCE4 629 1.6673
+ angle_coeff @angle:c-c3-n4 harmonic 65.07 114.21 # SOURCE4 27 1.5388
+ angle_coeff @angle:c-c3-n harmonic 66.67 111.56 # SOURCE3 28 1.7981
+ angle_coeff @angle:c-c3-na harmonic 66.81 111.37 # SOURCE4 31 1.6229
+ angle_coeff @angle:c-c3-nh harmonic 67.36 109.43 # SOURCE4 42 1.7022
+ angle_coeff @angle:c-c3-oh harmonic 68.65 108.70 # SOURCE4 299 1.3415
+ angle_coeff @angle:c-c3-os harmonic 68.03 109.82 # SOURCE3 10 2.0612
+ angle_coeff @angle:c-c3-p5 harmonic 78.76 110.41 # SOURCE4 15 2.2683
+ angle_coeff @angle:c-c3-s6 harmonic 63.26 110.22 # SOURCE4 5 2.0076
+ angle_coeff @angle:c-c3-sh harmonic 62.46 108.82 # SOURCE4 12 0.8354
+ angle_coeff @angle:c-c3-ss harmonic 61.70 111.58 # SOURCE3 5 1.9506
+ angle_coeff @angle:cx-c3-cx harmonic 63.53 112.58 # SOURCE4 7 1.2211
+ angle_coeff @angle:cx-c3-h1 harmonic 47.04 109.64 # SOURCE4 175 0.8822
+ angle_coeff @angle:cx-c3-hc harmonic 46.92 110.20 # SOURCE4 356 0.8798
+ angle_coeff @angle:cx-c3-hx harmonic 46.38 112.81 # SOURCE4 12 0.0977
+ angle_coeff @angle:cx-c3-n3 harmonic 65.83 113.22 # SOURCE4 33 1.3978
+ angle_coeff @angle:cx-c3-n4 harmonic 68.88 101.51 # SOURCE4 12 0.0760
+ angle_coeff @angle:cx-c3-n harmonic 66.22 112.59 # SOURCE4 22 0.8034
+ angle_coeff @angle:cx-c3-oh harmonic 68.10 109.97 # SOURCE4 25 1.3176
+ angle_coeff @angle:cx-c3-os harmonic 68.40 108.16 # SOURCE4 26 1.0162
+ angle_coeff @angle:cy-c3-h1 harmonic 47.00 107.88 # SOURCE4 162 0.9624
+ angle_coeff @angle:cy-c3-hc harmonic 46.51 110.17 # SOURCE3 16 0.5693
+ angle_coeff @angle:cy-c3-n3 harmonic 65.63 112.72 # SOURCE4 7 1.0639
+ angle_coeff @angle:cy-c3-oh harmonic 67.22 111.56 # SOURCE4 138 0.5051
+ angle_coeff @angle:cy-c3-os harmonic 68.45 106.79 # SOURCE4 5 1.0955
+ angle_coeff @angle:f-c3-f harmonic 71.26 107.16 # SOURCE2 10 1.1324
+ angle_coeff @angle:f-c3-h1 harmonic 51.57 107.85 # SOURCE3 14 0.9537
+ angle_coeff @angle:f-c3-h2 harmonic 51.36 108.41 # SOURCE3 6 0.5081
+ angle_coeff @angle:f-c3-h3 harmonic 51.05 110.01 # SOURCE4 19 0.6811
+ angle_coeff @angle:f-c3-hc harmonic 51.33 108.92 # SOURCE2 5 3.0534
+ angle_coeff @angle:f-c3-n2 harmonic 69.23 110.40 # SOURCE2 3 2.6470
+ angle_coeff @angle:f-c3-os harmonic 70.66 110.61 # SOURCE4 45 1.1755
+ angle_coeff @angle:f-c3-p5 harmonic 80.63 107.25 # SOURCE4 11 1.1735
+ angle_coeff @angle:f-c3-s6 harmonic 64.18 109.67 # SOURCE4 24 0.4116
+ angle_coeff @angle:f-c3-ss harmonic 62.13 111.89 # SOURCE4 11 0.9479
+ angle_coeff @angle:h1-c3-h1 harmonic 39.18 109.55 # SOURCE3 1888 1.1205
+ angle_coeff @angle:h1-c3-n1 harmonic 49.99 107.31 # HF/6-31G* 1
+ angle_coeff @angle:h1-c3-n2 harmonic 49.26 109.61 # SOURCE3 63 1.0452
+ angle_coeff @angle:h1-c3-n3 harmonic 49.39 109.92 # SOURCE3 313 1.1810
+ angle_coeff @angle:h1-c3-n harmonic 49.82 109.32 # SOURCE3 91 1.0325
+ angle_coeff @angle:h1-c3-na harmonic 49.90 109.45 # SOURCE3 53 0.9555
+ angle_coeff @angle:h1-c3-nc harmonic 50.11 108.57 # SOURCE3 6 0.0764
+ angle_coeff @angle:h1-c3-nd harmonic 50.11 108.57 # SOURCE3 6 same_as_h1-c3-nc
+ angle_coeff @angle:h1-c3-nh harmonic 49.73 109.96 # SOURCE3 70 0.7000
+ angle_coeff @angle:h1-c3-no harmonic 48.66 105.15 # SOURCE4 16 0.4950
+ angle_coeff @angle:h1-c3-o harmonic 52.53 117.19 # SOURCE3 6 0.0003
+ angle_coeff @angle:h1-c3-oh harmonic 50.97 109.88 # SOURCE3 63 1.3172
+ angle_coeff @angle:h1-c3-os harmonic 50.84 108.82 # SOURCE3 541 0.8042
+ angle_coeff @angle:h1-c3-p5 harmonic 54.25 107.99 # SOURCE4 72 1.1862
+ angle_coeff @angle:h1-c3-s4 harmonic 42.89 108.66 # SOURCE3 201 0.3834
+ angle_coeff @angle:h1-c3-s harmonic 41.18 112.60 # SOURCE3 6 0.0026
+ angle_coeff @angle:h1-c3-s6 harmonic 43.86 108.11 # SOURCE3 160 0.5518
+ angle_coeff @angle:h1-c3-sh harmonic 42.40 109.21 # SOURCE3 22 1.2028
+ angle_coeff @angle:h1-c3-ss harmonic 42.40 109.34 # SOURCE3 356 0.6573
+ angle_coeff @angle:h1-c3-sx harmonic 42.83 108.69 # SOURCE3 90 0.2749
+ angle_coeff @angle:h1-c3-sy harmonic 43.65 108.09 # SOURCE3 93 0.2556
+ angle_coeff @angle:h2-c3-h2 harmonic 39.00 109.19 # SOURCE3 29 3.1352
+ angle_coeff @angle:h2-c3-i harmonic 38.69 104.99 # SOURCE3 2 0.0000
+ angle_coeff @angle:h2-c3-n2 harmonic 49.08 110.22 # SOURCE3 6 0.2133
+ angle_coeff @angle:h2-c3-n3 harmonic 49.37 109.80 # SOURCE4 189 1.2893
+ angle_coeff @angle:h2-c3-n harmonic 50.22 107.38 # SOURCE4 258 1.3140
+ angle_coeff @angle:h2-c3-na harmonic 50.27 107.66 # SOURCE3 6 1.4096
+ angle_coeff @angle:h2-c3-nc harmonic 49.85 109.47 # SOURCE3 10 0.3133
+ angle_coeff @angle:h2-c3-nd harmonic 49.85 109.47 # SOURCE3 10 same_as_h2-c3-nc
+ angle_coeff @angle:h2-c3-nh harmonic 49.60 110.33 # SOURCE4 102 1.0596
+ angle_coeff @angle:h2-c3-no harmonic 47.83 108.69 # SOURCE3 4 0.0000
+ angle_coeff @angle:h2-c3-o harmonic 54.38 108.97 # SOURCE3 4 0.0000
+ angle_coeff @angle:h2-c3-oh harmonic 51.29 108.30 # SOURCE3 6 0.5715
+ angle_coeff @angle:h2-c3-os harmonic 50.84 108.58 # SOURCE3 44 1.2773
+ angle_coeff @angle:h2-c3-s4 harmonic 42.93 108.58 # SOURCE3 8 0.2408
+ angle_coeff @angle:h2-c3-s harmonic 42.32 106.75 # SOURCE3 4 0.0000
+ angle_coeff @angle:h2-c3-s6 harmonic 44.20 106.54 # SOURCE4 27 0.9934
+ angle_coeff @angle:h2-c3-sh harmonic 42.68 107.87 # SOURCE3 6 0.4376
+ angle_coeff @angle:h2-c3-ss harmonic 42.34 109.75 # SOURCE3 10 0.3442
+ angle_coeff @angle:h3-c3-n3 harmonic 49.73 108.39 # SOURCE4 12 1.7932
+ angle_coeff @angle:h3-c3-nc harmonic 49.91 109.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:h3-c3-nd harmonic 49.91 109.37 # SOURCE3 1 same_as_h3-c3-nc
+ angle_coeff @angle:h3-c3-nh harmonic 49.53 110.78 # SOURCE4 5 1.5993
+ angle_coeff @angle:h3-c3-os harmonic 50.09 112.03 # SOURCE4 17 1.0957
+ angle_coeff @angle:h3-c3-ss harmonic 42.42 109.27 # SOURCE4 8 0.8367
+ angle_coeff @angle:hc-c3-hc harmonic 39.43 108.35 # SOURCE3 2380 0.9006
+ angle_coeff @angle:hc-c3-i harmonic 38.62 104.99 # SOURCE3 1
+ angle_coeff @angle:hc-c3-n2 harmonic 49.29 109.50 # SOURCE3 1
+ angle_coeff @angle:hc-c3-n3 harmonic 49.42 109.80 # SOURCE2 5 2.0070
+ angle_coeff @angle:hc-c3-n4 harmonic 49.01 107.90 # SOURCE3 1
+ angle_coeff @angle:hc-c3-n harmonic 49.78 109.50 # SOURCE3 1
+ angle_coeff @angle:hc-c3-na harmonic 49.90 109.50 # SOURCE3 1
+ angle_coeff @angle:hc-c3-nh harmonic 49.38 111.54 # SOURCE3 1
+ angle_coeff @angle:hc-c3-no harmonic 48.19 107.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:hc-c3-oh harmonic 51.07 109.50 # SOURCE3 1
+ angle_coeff @angle:hc-c3-os harmonic 50.87 108.70 # SOURCE2 13 2.3739
+ angle_coeff @angle:hc-c3-p2 harmonic 52.37 110.18 # SOURCE3 25 0.4057
+ angle_coeff @angle:hc-c3-p3 harmonic 52.73 110.14 # SOURCE3 325 0.5126
+ angle_coeff @angle:hc-c3-p4 harmonic 53.21 109.59 # SOURCE3 87 0.3196
+ angle_coeff @angle:hc-c3-p5 harmonic 53.84 109.64 # SOURCE3 69 0.8112
+ angle_coeff @angle:hc-c3-px harmonic 53.46 109.74 # SOURCE3 84 0.3474
+ angle_coeff @angle:hc-c3-py harmonic 53.86 109.54 # SOURCE3 39 0.1999
+ angle_coeff @angle:hc-c3-s4 harmonic 43.12 107.50 # SOURCE2 1 0.0000
+ angle_coeff @angle:hc-c3-s6 harmonic 43.84 108.20 # SOURCE3 1
+ angle_coeff @angle:hc-c3-sh harmonic 42.66 107.87 # SOURCE2 3 2.0981
+ angle_coeff @angle:hc-c3-ss harmonic 42.51 108.76 # SOURCE2 3 1.6891
+ angle_coeff @angle:hx-c3-hx harmonic 39.04 110.74 # SOURCE3 137 0.5531
+ angle_coeff @angle:hx-c3-n4 harmonic 49.02 107.91 # SOURCE3 148 0.5899
+ angle_coeff @angle:i-c3-i harmonic 61.98 113.12 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-c3-n1 harmonic 71.09 105.07 # HF/6-31G* 1
+ angle_coeff @angle:n2-c3-n2 harmonic 69.89 107.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-c3-nh harmonic 69.26 111.06 # SOURCE4 5 0.7868
+ angle_coeff @angle:n2-c3-oh harmonic 70.15 111.82 # SOURCE4 10 0.3451
+ angle_coeff @angle:n2-c3-os harmonic 70.04 111.23 # SOURCE4 6 1.0463
+ angle_coeff @angle:n3-c3-n3 harmonic 69.61 109.59 # SOURCE4 27 1.8125
+ angle_coeff @angle:n3-c3-nc harmonic 68.79 113.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-c3-nd harmonic 68.79 113.29 # SOURCE3 1 same_as_n3-c3-nc
+ angle_coeff @angle:n3-c3-nh harmonic 69.74 110.08 # SOURCE4 21 1.0686
+ angle_coeff @angle:n3-c3-oh harmonic 70.71 110.63 # SOURCE4 20 1.0177
+ angle_coeff @angle:n3-c3-os harmonic 71.15 108.33 # SOURCE4 17 1.9545
+ angle_coeff @angle:n3-c3-p5 harmonic 81.55 109.51 # SOURCE4 10 1.5002
+ angle_coeff @angle:n3-c3-ss harmonic 64.75 107.73 # SOURCE4 18 1.7621
+ angle_coeff @angle:n4-c3-n4 harmonic 67.13 113.32 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-c3-na harmonic 69.06 113.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-c3-os harmonic 71.27 109.06 # SOURCE4 170 0.5450
+ angle_coeff @angle:nc-c3-nc harmonic 69.96 110.61 # SOURCE3 1 0.0000
+ angle_coeff @angle:nc-c3-nh harmonic 69.34 112.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:nc-c3-os harmonic 69.28 115.41 # SOURCE3 3 1.0288
+ angle_coeff @angle:nd-c3-nd harmonic 69.96 110.61 # SOURCE3 1 same_as_nc-c3-nc
+ angle_coeff @angle:nd-c3-nh harmonic 69.34 112.43 # SOURCE3 1 same_as_nc-c3-nh
+ angle_coeff @angle:nd-c3-os harmonic 69.28 115.41 # SOURCE3 3 same_as_nc-c3-os
+ angle_coeff @angle:nh-c3-nh harmonic 71.41 105.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-c3-oh harmonic 70.47 112.36 # SOURCE4 12 0.7775
+ angle_coeff @angle:nh-c3-os harmonic 71.26 108.93 # SOURCE4 17 1.3775
+ angle_coeff @angle:nh-c3-p5 harmonic 80.62 112.50 # SOURCE4 5 1.7371
+ angle_coeff @angle:nh-c3-ss harmonic 64.53 108.88 # SOURCE4 8 2.1521
+ angle_coeff @angle:n-c3-n2 harmonic 68.82 112.34 # SOURCE4 5 1.1443
+ angle_coeff @angle:n-c3-n3 harmonic 69.39 111.03 # SOURCE4 15 1.8216
+ angle_coeff @angle:n-c3-n harmonic 68.78 113.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-c3-nh harmonic 70.54 108.34 # SOURCE4 11 2.1727
+ angle_coeff @angle:n-c3-oh harmonic 70.36 112.54 # SOURCE4 31 1.1295
+ angle_coeff @angle:no-c3-no harmonic 68.37 104.47 # SOURCE4 5 0.9726
+ angle_coeff @angle:n-c3-os harmonic 71.14 109.16 # SOURCE4 153 0.8778
+ angle_coeff @angle:n-c3-p5 harmonic 81.48 110.05 # SOURCE4 5 1.2965
+ angle_coeff @angle:oh-c3-oh harmonic 72.71 109.23 # SOURCE4 8 1.4978
+ angle_coeff @angle:oh-c3-os harmonic 72.38 109.21 # SOURCE4 85 1.1964
+ angle_coeff @angle:oh-c3-p5 harmonic 82.83 108.86 # SOURCE4 33 1.2025
+ angle_coeff @angle:oh-c3-sh harmonic 63.30 115.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-c3-o harmonic 74.43 122.30 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-c3-os harmonic 71.72 110.24 # SOURCE3 17 2.1340
+ angle_coeff @angle:os-c3-p5 harmonic 82.86 108.36 # SOURCE4 22 2.1937
+ angle_coeff @angle:os-c3-ss harmonic 65.36 107.98 # SOURCE4 20 1.7464
+ angle_coeff @angle:p2-c3-p2 harmonic 98.16 110.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-c3-p3 harmonic 98.88 110.16 # SOURCE3 1 0.0000
+ angle_coeff @angle:p5-c3-p5 harmonic 100.59 110.13 # SOURCE4 33 2.4116
+ angle_coeff @angle:p5-c3-ss harmonic 78.88 111.30 # SOURCE4 5 2.0560
+ angle_coeff @angle:s4-c3-s4 harmonic 62.40 112.29 # SOURCE3 2 1.2724
+ angle_coeff @angle:s4-c3-s6 harmonic 62.62 113.52 # SOURCE3 1
+ angle_coeff @angle:s6-c3-s6 harmonic 63.71 111.75 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-c3-sh harmonic 60.82 116.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-c3-ss harmonic 62.33 110.73 # SOURCE3 1
+ angle_coeff @angle:s-c3-s harmonic 58.31 123.35 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-c3-ss harmonic 62.40 110.57 # SOURCE4 15 1.4311
+ angle_coeff @angle:br-ca-br harmonic 67.31 117.60 # SOURCE3 1
+ angle_coeff @angle:br-ca-ca harmonic 63.48 118.13 # SOURCE3 8 0.6041
+ angle_coeff @angle:c1-ca-c1 harmonic 64.70 120.00 # SOURCE3 1
+ angle_coeff @angle:c1-ca-ca harmonic 65.86 120.00 # SOURCE3 1
+ angle_coeff @angle:c2-ca-c2 harmonic 62.95 120.00 # SOURCE3 1
+ angle_coeff @angle:c2-ca-ca harmonic 64.69 120.60 # SOURCE3 1
+ angle_coeff @angle:c3-ca-c2 harmonic 62.24 120.00 # SOURCE3 1
+ angle_coeff @angle:c3-ca-c3 harmonic 62.41 116.80 # SOURCE3 1
+ angle_coeff @angle:c3-ca-ca harmonic 63.84 120.63 # SOURCE3 60 0.7175
+ angle_coeff @angle:c3-ca-cp harmonic 63.64 120.63 # CORR 120
+ angle_coeff @angle:c3-ca-cq harmonic 63.64 120.63 # CORR 120
+ angle_coeff @angle:c3-ca-na harmonic 66.59 118.78 # SOURCE4 59 1.1184
+ angle_coeff @angle:c3-ca-nb harmonic 67.33 116.66 # SOURCE4 408 0.9380
+ angle_coeff @angle:ca-ca-ca harmonic 67.18 119.97 # SOURCE3 1969 0.3480
+ angle_coeff @angle:ca-ca-cc harmonic 65.99 120.10 # SOURCE3 103 0.3451
+ angle_coeff @angle:ca-ca-cd harmonic 65.99 120.10 # SOURCE3 103 0.3451
+ angle_coeff @angle:ca-ca-ce harmonic 64.88 120.66 # SOURCE3 14 0.1564
+ angle_coeff @angle:ca-ca-cf harmonic 64.88 120.66 # SOURCE3 14 same_as_ca-ca-ce
+ angle_coeff @angle:ca-ca-cg harmonic 65.90 120.05 # SOURCE3 6 0.2397
+ angle_coeff @angle:ca-ca-ch harmonic 65.90 120.05 # SOURCE3 6 same_as_ca-ca-cg
+ angle_coeff @angle:ca-ca-cl harmonic 58.52 119.40 # SOURCE4 2459 0.5283
+ angle_coeff @angle:ca-ca-cp harmonic 67.16 119.07 # CORR 28
+ angle_coeff @angle:ca-ca-cq harmonic 67.16 119.07 # CORR 28
+ angle_coeff @angle:ca-ca-cx harmonic 64.48 120.83 # SOURCE4 71 1.3062
+ angle_coeff @angle:ca-ca-cy harmonic 63.77 120.86 # SOURCE4 17 2.0287
+ angle_coeff @angle:ca-ca-f harmonic 67.51 118.95 # SOURCE4 967 0.3369
+ angle_coeff @angle:ca-ca-h4 harmonic 48.24 121.09 # SOURCE3 57 1.4696
+ angle_coeff @angle:ca-ca-ha harmonic 48.46 120.01 # SOURCE3 2980 0.2511
+ angle_coeff @angle:ca-ca-i harmonic 58.59 118.47 # SOURCE3 10 0.6181
+ angle_coeff @angle:ca-ca-n1 harmonic 68.92 118.50 # HF/6-31G* 1
+ angle_coeff @angle:ca-ca-n2 harmonic 70.95 119.57 # SOURCE3 1
+ angle_coeff @angle:ca-ca-n4 harmonic 67.28 118.41 # SOURCE3 6 0.1691
+ angle_coeff @angle:ca-ca-n harmonic 67.97 119.89 # SOURCE3 18 0.2095
+ angle_coeff @angle:ca-ca-na harmonic 70.21 118.34 # SOURCE3 54 3.6168
+ angle_coeff @angle:ca-ca-nb harmonic 69.16 122.63 # SOURCE3 83 1.1249
+ angle_coeff @angle:ca-ca-nc harmonic 70.14 119.72 # SOURCE3 22 3.3994
+ angle_coeff @angle:ca-ca-nd harmonic 70.14 119.72 # SOURCE3 22 3.3994
+ angle_coeff @angle:ca-ca-ne harmonic 67.74 119.88 # SOURCE3 24 0.3637
+ angle_coeff @angle:ca-ca-nf harmonic 67.74 119.88 # SOURCE3 24 0.3637
+ angle_coeff @angle:ca-ca-nh harmonic 69.34 120.13 # SOURCE3 193 0.6341
+ angle_coeff @angle:ca-ca-no harmonic 66.88 119.54 # SOURCE3 10 1.3187
+ angle_coeff @angle:ca-ca-o harmonic 71.85 123.29 # SOURCE4 11 1.2526
+ angle_coeff @angle:ca-ca-oh harmonic 69.85 119.94 # SOURCE3 14 0.1627
+ angle_coeff @angle:ca-ca-os harmonic 69.79 119.20 # SOURCE3 52 0.5240
+ angle_coeff @angle:ca-ca-p2 harmonic 77.87 114.36 # SOURCE3 1
+ angle_coeff @angle:ca-ca-p3 harmonic 76.34 120.73 # SOURCE3 6 0.1273
+ angle_coeff @angle:ca-ca-p4 harmonic 77.11 120.30 # SOURCE3 1
+ angle_coeff @angle:ca-ca-p5 harmonic 77.50 120.28 # SOURCE4 5 0.0177
+ angle_coeff @angle:ca-ca-pe harmonic 76.26 120.45 # SOURCE3 20 0.2719
+ angle_coeff @angle:ca-ca-pf harmonic 76.26 120.45 # SOURCE3 20 0.2719
+ angle_coeff @angle:ca-ca-px harmonic 76.37 120.53 # SOURCE3 10 0.4509
+ angle_coeff @angle:ca-ca-py harmonic 77.43 119.98 # SOURCE3 6 0.0670
+ angle_coeff @angle:ca-ca-s4 harmonic 61.72 119.15 # SOURCE3 1
+ angle_coeff @angle:ca-ca-s6 harmonic 62.18 120.54 # SOURCE4 36 1.2154
+ angle_coeff @angle:ca-ca-s harmonic 62.22 122.55 # SOURCE3 4 0.0000
+ angle_coeff @angle:ca-ca-sh harmonic 61.32 121.78 # SOURCE4 17 1.2849
+ angle_coeff @angle:ca-ca-ss harmonic 62.03 119.93 # SOURCE3 16 0.3901
+ angle_coeff @angle:ca-ca-sx harmonic 60.68 119.18 # SOURCE3 6 0.0434
+ angle_coeff @angle:ca-ca-sy harmonic 61.64 119.89 # SOURCE3 24 1.8813
+ angle_coeff @angle:c-ca-c3 harmonic 62.61 118.06 # SOURCE3 1
+ angle_coeff @angle:c-ca-c harmonic 62.65 120.00 # SOURCE3 1
+ angle_coeff @angle:c-ca-ca harmonic 64.64 120.14 # SOURCE3 40 0.4788
+ angle_coeff @angle:cc-ca-cp harmonic 64.63 124.30 # SOURCE4 10 0.6423
+ angle_coeff @angle:cc-ca-nb harmonic 69.19 118.02 # CORR 64
+ angle_coeff @angle:cd-ca-nb harmonic 69.19 118.02 # CORR 64
+ angle_coeff @angle:ce-ca-na harmonic 67.44 119.85 # SOURCE4 9 0.7001
+ angle_coeff @angle:ce-ca-nb harmonic 68.24 117.59 # CORR 44
+ angle_coeff @angle:cf-ca-nb harmonic 68.24 117.59 # CORR 44
+ angle_coeff @angle:cg-ca-cp harmonic 65.26 121.53 # SOURCE4 12 0.1831
+ angle_coeff @angle:c-ca-ha harmonic 46.51 115.90 # SOURCE3 1
+ angle_coeff @angle:cl-ca-cl harmonic 54.17 118.72 # SOURCE3 1
+ angle_coeff @angle:cl-ca-cp harmonic 58.19 120.31 # SOURCE4 18 0.5607
+ angle_coeff @angle:cl-ca-nb harmonic 61.21 116.15 # SOURCE4 50 0.6047
+ angle_coeff @angle:c-ca-nb harmonic 67.71 117.94 # SOURCE4 91 1.0536
+ angle_coeff @angle:c-ca-nc harmonic 64.40 130.80 # SOURCE3 1
+ angle_coeff @angle:c-ca-nd harmonic 64.40 130.80 # SOURCE3 1 same_as_c-ca-nc
+ angle_coeff @angle:cp-ca-f harmonic 67.10 119.39 # SOURCE4 16 0.1724
+ angle_coeff @angle:cp-ca-h4 harmonic 48.15 120.03 # SOURCE4 27 0.4431
+ angle_coeff @angle:cp-ca-ha harmonic 47.94 121.08 # CORR 24
+ angle_coeff @angle:cp-ca-na harmonic 72.91 108.79 # SOURCE4 165 0.5166
+ angle_coeff @angle:cp-ca-nb harmonic 68.56 123.72 # SOURCE4 50 0.8176
+ angle_coeff @angle:cp-ca-nh harmonic 68.66 121.52 # SOURCE4 11 0.5438
+ angle_coeff @angle:cp-ca-oh harmonic 69.26 120.96 # SOURCE4 12 1.1400
+ angle_coeff @angle:cp-ca-ss harmonic 63.87 112.75 # SOURCE4 8 0.6216
+ angle_coeff @angle:cp-ca-sy harmonic 63.91 111.18 # CORR 4
+ angle_coeff @angle:cq-ca-ha harmonic 47.94 121.08 # CORR 24
+ angle_coeff @angle:cq-ca-sy harmonic 63.91 111.18 # CORR 4
+ angle_coeff @angle:f-ca-f harmonic 68.05 117.50 # SOURCE3 1
+ angle_coeff @angle:f-ca-nb harmonic 71.69 114.58 # SOURCE4 19 0.2987
+ angle_coeff @angle:h4-ca-n harmonic 49.48 116.02 # SOURCE3 1
+ angle_coeff @angle:h4-ca-na harmonic 51.88 114.65 # SOURCE3 5 1.5484
+ angle_coeff @angle:h4-ca-nb harmonic 51.82 115.94 # SOURCE3 52 0.7370
+ angle_coeff @angle:h4-ca-nc harmonic 51.46 118.36 # SOURCE3 1
+ angle_coeff @angle:h4-ca-nd harmonic 51.46 118.36 # SOURCE3 1 same_as_h4-ca-nc
+ angle_coeff @angle:h4-ca-os harmonic 52.30 111.15 # SOURCE3 1
+ angle_coeff @angle:h4-ca-ss harmonic 42.40 116.19 # SOURCE3 1
+ angle_coeff @angle:h5-ca-nb harmonic 51.76 116.35 # SOURCE3 30 0.5545
+ angle_coeff @angle:h5-ca-nc harmonic 50.70 122.11 # SOURCE3 1
+ angle_coeff @angle:h5-ca-nd harmonic 50.70 122.11 # SOURCE3 1 same_as_h5-ca-nc
+ angle_coeff @angle:ha-ca-n2 harmonic 52.97 116.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:ha-ca-p2 harmonic 50.08 122.56 # SOURCE3 1
+ angle_coeff @angle:i-ca-i harmonic 62.29 119.28 # SOURCE3 1
+ angle_coeff @angle:n1-ca-n1 harmonic 70.73 117.03 # HF/6-31G* 1
+ angle_coeff @angle:n2-ca-n2 harmonic 75.05 120.00 # SOURCE3 1
+ angle_coeff @angle:n2-ca-na harmonic 73.80 119.60 # SOURCE3 1
+ angle_coeff @angle:n4-ca-n4 harmonic 67.65 116.82 # SOURCE3 1
+ angle_coeff @angle:na-ca-na harmonic 76.48 107.65 # SOURCE4 5 0.8751
+ angle_coeff @angle:na-ca-nb harmonic 70.60 127.07 # SOURCE4 237 1.9392
+ angle_coeff @angle:na-ca-nh harmonic 72.48 118.62 # SOURCE4 29 0.9759
+ angle_coeff @angle:nb-ca-nb harmonic 70.78 127.19 # SOURCE4 585 1.1793
+ angle_coeff @angle:nb-ca-nc harmonic 71.12 126.53 # CORR 22
+ angle_coeff @angle:nb-ca-nd harmonic 71.12 126.53 # CORR 22
+ angle_coeff @angle:nb-ca-nh harmonic 73.20 116.95 # SOURCE4 765 0.8040
+ angle_coeff @angle:nb-ca-oh harmonic 73.57 117.30 # SOURCE4 64 0.9290
+ angle_coeff @angle:nb-ca-os harmonic 72.54 119.66 # SOURCE4 76 0.6493
+ angle_coeff @angle:nb-ca-sh harmonic 64.31 117.59 # SOURCE4 15 1.4616
+ angle_coeff @angle:nb-ca-ss harmonic 64.10 119.30 # SOURCE4 41 1.3420
+ angle_coeff @angle:nc-ca-nc harmonic 70.67 128.74 # SOURCE3 1
+ angle_coeff @angle:nc-ca-nh harmonic 72.77 118.86 # SOURCE3 1
+ angle_coeff @angle:nd-ca-nd harmonic 70.67 128.74 # SOURCE3 1 same_as_nc-ca-nc
+ angle_coeff @angle:nd-ca-nh harmonic 72.77 118.86 # SOURCE3 1 same_as_nc-ca-nh
+ angle_coeff @angle:nh-ca-nh harmonic 71.40 120.98 # SOURCE3 1
+ angle_coeff @angle:n-ca-nc harmonic 69.66 123.86 # SOURCE3 1
+ angle_coeff @angle:n-ca-nd harmonic 69.66 123.86 # SOURCE3 1 same_as_n-ca-nc
+ angle_coeff @angle:n-ca-nh harmonic 71.29 116.16 # SOURCE3 1
+ angle_coeff @angle:no-ca-no harmonic 67.42 117.14 # SOURCE3 1
+ angle_coeff @angle:oh-ca-oh harmonic 72.63 120.00 # SOURCE3 1
+ angle_coeff @angle:o-ca-o harmonic 78.21 126.82 # SOURCE3 1
+ angle_coeff @angle:os-ca-os harmonic 74.01 113.73 # SOURCE3 1
+ angle_coeff @angle:p2-ca-p2 harmonic 94.48 121.20 # SOURCE3 1
+ angle_coeff @angle:p3-ca-p3 harmonic 95.21 121.46 # SOURCE3 1
+ angle_coeff @angle:p5-ca-p5 harmonic 97.33 120.00 # SOURCE3 1
+ angle_coeff @angle:s4-ca-s4 harmonic 64.96 105.81 # SOURCE3 1
+ angle_coeff @angle:s6-ca-s6 harmonic 66.03 105.81 # SOURCE3 1
+ angle_coeff @angle:sh-ca-sh harmonic 61.27 120.24 # SOURCE3 1
+ angle_coeff @angle:s-ca-s harmonic 61.42 125.14 # SOURCE3 1
+ angle_coeff @angle:ss-ca-ss harmonic 62.91 115.15 # SOURCE3 1
+ angle_coeff @angle:br-c-br harmonic 66.91 113.10 # SOURCE3 1
+ angle_coeff @angle:br-c-c3 harmonic 63.34 110.74 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-c-o harmonic 63.19 121.46 # SOURCE3 5 1.6264
+ angle_coeff @angle:c1-c-c1 harmonic 65.09 115.32 # SOURCE3 1
+ angle_coeff @angle:c1-c-o harmonic 69.92 122.34 # SOURCE3 1
+ angle_coeff @angle:c2-c-c2 harmonic 67.17 116.78 # SOURCE3 1
+ angle_coeff @angle:c2-c-ha harmonic 48.65 115.95 # SOURCE3 1
+ angle_coeff @angle:c2-c-o harmonic 72.77 119.12 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-c-s harmonic 64.67 119.16 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-c-c3 harmonic 62.82 116.05 # SOURCE3 11 1.0986
+ angle_coeff @angle:c3-c-ca harmonic 62.59 118.54 # SOURCE4 240 1.3614
+ angle_coeff @angle:c3-c-cc harmonic 63.38 117.47 # CORR 46
+ angle_coeff @angle:c3-c-cd harmonic 63.38 117.47 # CORR 46
+ angle_coeff @angle:c3-c-ce harmonic 63.44 116.37 # CORR 233
+ angle_coeff @angle:c3-c-cf harmonic 63.44 116.37 # CORR 233
+ angle_coeff @angle:c3-c-cg harmonic 64.26 115.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-c-ch harmonic 64.26 115.00 # SOURCE2 1 same_as_c3-c-cg
+ angle_coeff @angle:c3-c-cl harmonic 58.18 111.99 # SOURCE3 2 0.0125
+ angle_coeff @angle:c3-c-f harmonic 66.93 110.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-c-h4 harmonic 46.11 114.40 # SOURCE4 57 0.4032
+ angle_coeff @angle:c3-c-ha harmonic 46.01 115.22 # SOURCE3 15 0.3181
+ angle_coeff @angle:c3-c-i harmonic 56.87 112.94 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-c-n2 harmonic 66.62 114.53 # SOURCE3 1
+ angle_coeff @angle:c3-c-n4 harmonic 64.61 112.26 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-c-n harmonic 67.86 115.15 # SOURCE3 153 2.7443
+ angle_coeff @angle:c3-c-ne harmonic 68.03 111.56 # CORR 12
+ angle_coeff @angle:c3-c-nf harmonic 68.03 111.56 # CORR 12
+ angle_coeff @angle:c3-c-o harmonic 68.03 123.11 # SOURCE3 267 3.0977
+ angle_coeff @angle:c3-c-oh harmonic 69.84 112.20 # SOURCE3 14 1.8324
+ angle_coeff @angle:c3-c-os harmonic 69.26 111.96 # SOURCE3 15 2.3072
+ angle_coeff @angle:c3-c-p3 harmonic 74.55 116.42 # SOURCE3 3 0.1291
+ angle_coeff @angle:c3-c-p5 harmonic 73.81 118.90 # SOURCE3 1
+ angle_coeff @angle:c3-c-pe harmonic 74.19 114.85 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-c-pf harmonic 74.19 114.85 # SOURCE3 1 same_as_c3-c-pe
+ angle_coeff @angle:c3-c-px harmonic 74.17 115.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-c-py harmonic 74.48 118.16 # SOURCE3 3 1.0735
+ angle_coeff @angle:c3-c-s4 harmonic 59.64 114.79 # SOURCE3 1
+ angle_coeff @angle:c3-c-s6 harmonic 59.65 114.72 # SOURCE3 1
+ angle_coeff @angle:c3-c-s harmonic 62.03 123.73 # SOURCE3 9 1.4528
+ angle_coeff @angle:c3-c-sh harmonic 61.97 114.21 # SOURCE3 3 2.3916
+ angle_coeff @angle:c3-c-ss harmonic 62.41 114.32 # SOURCE3 5 2.7478
+ angle_coeff @angle:c3-c-sx harmonic 59.48 113.97 # SOURCE3 3 0.0610
+ angle_coeff @angle:c3-c-sy harmonic 59.89 114.28 # SOURCE3 3 0.7341
+ angle_coeff @angle:ca-c-ca harmonic 63.03 118.58 # SOURCE4 144 2.1146
+ angle_coeff @angle:ca-c-cc harmonic 64.24 116.07 # CORR 257
+ angle_coeff @angle:ca-c-cd harmonic 64.24 116.07 # CORR 257
+ angle_coeff @angle:ca-c-ce harmonic 63.21 118.92 # CORR 36
+ angle_coeff @angle:ca-c-cf harmonic 63.21 118.92 # CORR 36
+ angle_coeff @angle:ca-c-h4 harmonic 46.52 115.14 # SOURCE4 30 0.7320
+ angle_coeff @angle:ca-c-ha harmonic 46.80 114.12 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-c-n harmonic 68.47 115.14 # SOURCE4 571 1.4648
+ angle_coeff @angle:ca-c-ne harmonic 67.74 114.39 # SOURCE4 5 0.2958
+ angle_coeff @angle:ca-c-o harmonic 68.67 123.44 # SOURCE3 18 2.5574
+ angle_coeff @angle:ca-c-oh harmonic 70.11 113.44 # SOURCE4 222 0.8421
+ angle_coeff @angle:ca-c-os harmonic 68.78 115.54 # SOURCE3 5 2.6708
+ angle_coeff @angle:ca-c-s harmonic 62.52 123.04 # SOURCE4 12 0.7935
+ angle_coeff @angle:ca-c-sh harmonic 61.05 118.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-c-ss harmonic 62.45 115.13 # SOURCE4 12 1.0069
+ angle_coeff @angle:br-cc-c harmonic 63.98 115.68 # SOURCE4 8 0.4970
+ angle_coeff @angle:br-cc-cc harmonic 61.82 124.89 # SOURCE4 8 1.9479
+ angle_coeff @angle:br-cc-cd harmonic 62.26 124.56 # SOURCE4 32 2.4696
+ angle_coeff @angle:br-cc-na harmonic 64.60 121.42 # SOURCE4 6 0.5507
+ angle_coeff @angle:c2-cc-c3 harmonic 63.27 126.11 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-cc-ca harmonic 65.34 124.66 # CORR 16
+ angle_coeff @angle:c2-cc-cc harmonic 66.24 121.77 # CORR 32
+ angle_coeff @angle:c2-cc-cd harmonic 69.09 117.02 # SOURCE3 2 0.0703
+ angle_coeff @angle:c2-cc-ha harmonic 48.69 122.72 # SOURCE3 2 0.0092
+ angle_coeff @angle:c2-cc-n harmonic 67.74 126.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-cc-os harmonic 70.10 120.79 # CORR 13
+ angle_coeff @angle:c-c-c3 harmonic 61.72 116.86 # SOURCE3 5 0.1653
+ angle_coeff @angle:c3-cc-ca harmonic 61.96 125.89 # CORR 127
+ angle_coeff @angle:c3-cc-cc harmonic 64.66 115.97 # SOURCE3 4 3.0507
+ angle_coeff @angle:c3-cc-cd harmonic 64.81 119.45 # SOURCE3 35 8.2040
+ angle_coeff @angle:c3-cc-cf harmonic 65.34 117.84 # CORR 2
+ angle_coeff @angle:c3-cc-ha harmonic 45.11 121.52 # SOURCE3 32 3.2091
+ angle_coeff @angle:c3-cc-n2 harmonic 65.80 126.87 # CORR 9
+ angle_coeff @angle:c3-cc-n harmonic 66.33 119.11 # CORR 68
+ angle_coeff @angle:c3-cc-na harmonic 65.50 122.78 # CORR 632
+ angle_coeff @angle:c3-cc-nc harmonic 65.90 120.94 # CORR 309
+ angle_coeff @angle:c3-cc-nd harmonic 66.32 122.13 # CORR 475
+ angle_coeff @angle:c3-cc-os harmonic 67.54 116.88 # CORR 203
+ angle_coeff @angle:c3-cc-ss harmonic 61.21 121.66 # CORR 171
+ angle_coeff @angle:c-c-c harmonic 62.30 111.68 # SOURCE3 2 6.1226
+ angle_coeff @angle:c-c-ca harmonic 61.73 118.34 # SOURCE4 26 1.0692
+ angle_coeff @angle:ca-cc-cc harmonic 67.66 111.04 # SOURCE3 9 7.9455
+ angle_coeff @angle:ca-cc-cd harmonic 68.23 113.51 # SOURCE3 26 7.4229
+ angle_coeff @angle:ca-cc-ce harmonic 62.51 127.87 # SOURCE4 11 1.7579
+ angle_coeff @angle:ca-cc-h4 harmonic 45.57 128.66 # SOURCE3 10 3.1167
+ angle_coeff @angle:ca-cc-ha harmonic 46.40 124.04 # SOURCE3 34 3.6691
+ angle_coeff @angle:ca-cc-n harmonic 68.46 117.67 # CORR 18
+ angle_coeff @angle:ca-cc-nc harmonic 67.69 120.67 # CORR 162
+ angle_coeff @angle:ca-cc-nd harmonic 67.92 123.02 # CORR 188
+ angle_coeff @angle:ca-cc-nh harmonic 67.46 122.45 # SOURCE4 9 1.4092
+ angle_coeff @angle:ca-cc-oh harmonic 69.61 117.71 # CORR 21
+ angle_coeff @angle:ca-cc-os harmonic 69.82 115.16 # CORR 134
+ angle_coeff @angle:ca-cc-ss harmonic 62.30 120.51 # CORR 43
+ angle_coeff @angle:c-cc-c2 harmonic 65.60 120.92 # CORR 22
+ angle_coeff @angle:c-cc-c3 harmonic 63.60 117.42 # CORR 126
+ angle_coeff @angle:c-cc-c harmonic 63.42 121.17 # CORR 64
+ angle_coeff @angle:c-c-cc harmonic 64.02 111.67 # SOURCE3 4 5.5146
+ angle_coeff @angle:c-cc-ca harmonic 63.55 122.95 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-cc-cc harmonic 63.72 122.69 # SOURCE3 2 0.0000
+ angle_coeff @angle:cc-c-cc harmonic 64.80 116.04 # CORR 56
+ angle_coeff @angle:cc-cc-cc harmonic 67.88 110.70 # SOURCE3 54 3.4091
+ angle_coeff @angle:cc-cc-cd harmonic 68.16 114.19 # SOURCE3 517 6.5960
+ angle_coeff @angle:cc-cc-ce harmonic 62.78 127.20 # CORR 42
+ angle_coeff @angle:cc-cc-cf harmonic 65.88 122.59 # CORR 39
+ angle_coeff @angle:cc-cc-cg harmonic 63.63 126.15 # CORR 27
+ angle_coeff @angle:c-cc-cd harmonic 65.25 121.42 # CORR 1708
+ angle_coeff @angle:cc-c-cd harmonic 65.73 112.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-cc-ce harmonic 63.20 122.73 # CORR 10
+ angle_coeff @angle:cc-c-ce harmonic 64.64 115.68 # SOURCE4 6 1.2033
+ angle_coeff @angle:cc-cc-f harmonic 66.35 119.41 # SOURCE4 7 0.4917
+ angle_coeff @angle:c-cc-cg harmonic 64.98 118.14 # SOURCE4 7 0.7745
+ angle_coeff @angle:cc-cc-h4 harmonic 45.56 129.47 # SOURCE3 171 2.2734
+ angle_coeff @angle:cc-cc-ha harmonic 47.14 120.86 # CORR 1751
+ angle_coeff @angle:c-cc-cl harmonic 58.39 116.05 # CORR 24
+ angle_coeff @angle:cc-cc-n2 harmonic 69.48 121.15 # CORR 12
+ angle_coeff @angle:cc-cc-n harmonic 67.95 119.89 # SOURCE3 36 0.2095
+ angle_coeff @angle:cc-cc-na harmonic 72.21 106.80 # SOURCE3 33 0.6297
+ angle_coeff @angle:cc-cc-nc harmonic 67.53 121.69 # CORR 105
+ angle_coeff @angle:cc-cc-nd harmonic 71.15 112.56 # SOURCE3 141 4.2871
+ angle_coeff @angle:cc-cc-nh harmonic 68.41 119.51 # CORR 228
+ angle_coeff @angle:cc-cc-oh harmonic 68.53 121.96 # CORR 27
+ angle_coeff @angle:cc-cc-os harmonic 69.34 117.23 # CORR 211
+ angle_coeff @angle:cc-cc-pd harmonic 80.79 115.36 # SOURCE3 84 same_as_cd-cd-pc
+ angle_coeff @angle:cc-cc-ss harmonic 62.45 120.12 # CORR 31
+ angle_coeff @angle:cc-cc-sy harmonic 59.22 128.36 # SOURCE4 8 0.9813
+ angle_coeff @angle:c-c-cd harmonic 64.02 111.67 # SOURCE3 4 5.5146
+ angle_coeff @angle:cd-cc-cd harmonic 67.89 120.23 # CORR 133
+ angle_coeff @angle:cd-cc-ce harmonic 63.67 128.41 # CORR 210
+ angle_coeff @angle:cd-cc-cl harmonic 57.46 123.70 # CORR 62
+ angle_coeff @angle:cd-cc-f harmonic 67.42 121.08 # SOURCE4 28 0.8788
+ angle_coeff @angle:cd-cc-h4 harmonic 47.19 129.11 # SOURCE3 418 3.1355
+ angle_coeff @angle:cd-cc-ha harmonic 48.35 122.89 # SOURCE3 584 2.9334
+ angle_coeff @angle:cd-cc-n harmonic 70.72 115.52 # SOURCE3 52 1.3322
+ angle_coeff @angle:cd-cc-na harmonic 72.91 109.42 # SOURCE3 265 2.6051
+ angle_coeff @angle:cd-cc-nc harmonic 72.01 111.75 # CORR 1101
+ angle_coeff @angle:cd-cc-nh harmonic 68.69 123.89 # CORR 106
+ angle_coeff @angle:cd-cc-no harmonic 65.78 128.95 # SOURCE4 117 1.4740
+ angle_coeff @angle:cd-cc-oh harmonic 69.56 123.89 # CORR 106
+ angle_coeff @angle:cd-cc-os harmonic 69.96 120.30 # SOURCE3 64 5.4354
+ angle_coeff @angle:cd-cc-ss harmonic 65.44 111.55 # CORR 884
+ angle_coeff @angle:cd-cc-sy harmonic 60.54 124.91 # CORR 41
+ angle_coeff @angle:ce-cc-na harmonic 66.32 124.22 # CORR 48
+ angle_coeff @angle:ce-cc-nc harmonic 67.01 121.29 # CORR 37
+ angle_coeff @angle:ce-cc-nd harmonic 67.80 121.51 # CORR 37
+ angle_coeff @angle:ce-cc-os harmonic 68.17 119.03 # CORR 66
+ angle_coeff @angle:ce-cc-ss harmonic 61.83 121.44 # CORR 38
+ angle_coeff @angle:c-cc-f harmonic 66.16 116.87 # SOURCE4 16 0.5322
+ angle_coeff @angle:cg-cc-na harmonic 67.51 122.35 # SOURCE4 5 0.8112
+ angle_coeff @angle:cg-cc-ss harmonic 62.33 120.70 # SOURCE4 12 0.9090
+ angle_coeff @angle:cc-c-h4 harmonic 47.13 115.45 # SOURCE4 5 0.8021
+ angle_coeff @angle:c-cc-ha harmonic 46.99 117.02 # SOURCE3 56 1.9713
+ angle_coeff @angle:cl-cc-na harmonic 59.37 121.61 # SOURCE4 12 0.3436
+ angle_coeff @angle:cl-cc-nd harmonic 59.35 122.97 # CORR 6
+ angle_coeff @angle:cl-cc-ss harmonic 58.09 119.85 # SOURCE4 11 1.0626
+ angle_coeff @angle:c-cc-n2 harmonic 68.54 120.89 # CORR 2
+ angle_coeff @angle:c-cc-n harmonic 68.11 116.32 # CORR 21
+ angle_coeff @angle:cc-c-n harmonic 70.19 111.86 # SOURCE3 36 2.3407
+ angle_coeff @angle:c-cc-nc harmonic 66.19 123.47 # CORR 24
+ angle_coeff @angle:cc-c-nd harmonic 67.92 116.21 # CORR 33
+ angle_coeff @angle:c-cc-nd harmonic 67.50 121.67 # CORR 47
+ angle_coeff @angle:c-cc-ne harmonic 67.11 119.88 # SOURCE4 6 0.3139
+ angle_coeff @angle:cc-c-o harmonic 68.91 125.71 # SOURCE3 66 2.4784
+ angle_coeff @angle:c-cc-oh harmonic 70.04 113.64 # CORR 53
+ angle_coeff @angle:cc-c-oh harmonic 71.00 113.10 # CORR 85
+ angle_coeff @angle:c-cc-os harmonic 67.83 119.39 # CORR 78
+ angle_coeff @angle:cc-c-os harmonic 70.50 112.30 # SOURCE3 6 2.7842
+ angle_coeff @angle:cc-c-s harmonic 61.67 127.94 # SOURCE4 12 0.9342
+ angle_coeff @angle:cc-c-ss harmonic 63.47 112.52 # SOURCE4 10 0.6933
+ angle_coeff @angle:cx-cc-nd harmonic 65.61 127.75 # SOURCE4 12 1.7156
+ angle_coeff @angle:cx-cc-os harmonic 67.94 118.08 # SOURCE4 10 0.0955
+ angle_coeff @angle:cd-c-cd harmonic 64.80 116.04 # CORR 56
+ angle_coeff @angle:cd-c-cx harmonic 63.88 117.46 # SOURCE4 13 0.1625
+ angle_coeff @angle:cd-c-n harmonic 70.19 111.86 # SOURCE3 36 2.3407
+ angle_coeff @angle:cd-c-nc harmonic 67.92 116.21 # CORR 33
+ angle_coeff @angle:cd-c-nd harmonic 68.65 113.75 # SOURCE4 14 0.0860
+ angle_coeff @angle:cd-c-o harmonic 68.91 125.71 # SOURCE3 66 2.4784
+ angle_coeff @angle:cd-c-oh harmonic 71.00 113.10 # CORR 85
+ angle_coeff @angle:cd-c-os harmonic 70.50 112.30 # SOURCE3 6 2.7842
+ angle_coeff @angle:ce-c-ce harmonic 64.34 115.80 # CORR 74
+ angle_coeff @angle:ce-c-cf harmonic 64.04 116.89 # SOURCE4 11 1.6021
+ angle_coeff @angle:ce-c-cx harmonic 63.95 116.25 # SOURCE4 6 0.6351
+ angle_coeff @angle:ce-c-h4 harmonic 46.93 114.88 # SOURCE4 19 0.3355
+ angle_coeff @angle:ce-c-ha harmonic 46.93 115.22 # SOURCE3 7 2.4188
+ angle_coeff @angle:ce-c-n harmonic 68.80 115.27 # CORR 32
+ angle_coeff @angle:ce-c-o harmonic 69.27 122.92 # SOURCE3 17 3.5085
+ angle_coeff @angle:ce-c-oh harmonic 70.32 114.09 # CORR 128
+ angle_coeff @angle:ce-c-os harmonic 70.16 112.28 # CORR 149
+ angle_coeff @angle:ce-c-s harmonic 64.09 117.80 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-c-ss harmonic 63.94 110.39 # SOURCE4 5 0.6050
+ angle_coeff @angle:cf-c-cf harmonic 64.34 115.80 # CORR 74
+ angle_coeff @angle:cf-c-ha harmonic 46.93 115.22 # SOURCE3 7 same_as_ce-c-ha
+ angle_coeff @angle:cf-c-n harmonic 68.80 115.27 # CORR 32
+ angle_coeff @angle:cf-c-o harmonic 69.27 122.92 # SOURCE3 17 3.5085
+ angle_coeff @angle:cf-c-oh harmonic 70.32 114.09 # CORR 128
+ angle_coeff @angle:cf-c-os harmonic 70.16 112.28 # CORR 149
+ angle_coeff @angle:cf-c-s harmonic 64.09 117.80 # SOURCE3 1 same_as_ce-c-s
+ angle_coeff @angle:cg-c-cg harmonic 65.44 115.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-c-ha harmonic 47.80 113.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:cg-c-o harmonic 70.21 122.31 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-c-h4 harmonic 44.62 116.36 # SOURCE4 5 0.5586
+ angle_coeff @angle:h4-cc-n harmonic 50.39 117.62 # SOURCE3 53 0.9721
+ angle_coeff @angle:h4-cc-na harmonic 50.22 119.66 # SOURCE3 294 2.4702
+ angle_coeff @angle:h4-cc-nc harmonic 50.00 120.03 # SOURCE3 16 2.3863
+ angle_coeff @angle:h4-cc-nd harmonic 51.39 119.11 # SOURCE3 135 1.6946
+ angle_coeff @angle:h4-cc-os harmonic 52.27 111.89 # SOURCE3 61 2.3500
+ angle_coeff @angle:h4-cc-ss harmonic 42.95 117.75 # SOURCE3 40 3.1156
+ angle_coeff @angle:h5-cc-n harmonic 50.84 115.72 # CORR 20
+ angle_coeff @angle:h5-cc-na harmonic 49.76 122.10 # SOURCE3 16 1.4626
+ angle_coeff @angle:h5-cc-nc harmonic 49.29 123.70 # SOURCE3 6 0.3547
+ angle_coeff @angle:h5-cc-nd harmonic 50.13 125.38 # SOURCE3 40 2.2157
+ angle_coeff @angle:h5-cc-os harmonic 51.30 116.33 # SOURCE3 12 3.2919
+ angle_coeff @angle:h5-cc-ss harmonic 42.19 122.00 # SOURCE3 6 0.7237
+ angle_coeff @angle:c-c-ha harmonic 44.85 115.43 # SOURCE2 3 0.6549
+ angle_coeff @angle:ha-cc-na harmonic 49.82 121.50 # SOURCE2 1 0.0000
+ angle_coeff @angle:ha-cc-nc harmonic 50.73 116.54 # SOURCE3 5 1.4482
+ angle_coeff @angle:ha-cc-nd harmonic 51.41 118.88 # SOURCE3 20 2.8923
+ angle_coeff @angle:ha-cc-os harmonic 52.49 110.86 # SOURCE3 7 1.3846
+ angle_coeff @angle:ha-cc-pd harmonic 53.59 121.76 # SOURCE3 84 same_as_ha-cd-pc
+ angle_coeff @angle:ha-cc-ss harmonic 42.26 121.64 # SOURCE2 5 1.3276
+ angle_coeff @angle:ch-c-ch harmonic 65.44 115.38 # SOURCE3 1 same_as_cg-c-cg
+ angle_coeff @angle:ch-c-ha harmonic 47.80 113.90 # SOURCE2 1 same_as_cg-c-ha
+ angle_coeff @angle:ch-c-o harmonic 70.21 122.31 # SOURCE3 2 same_as_cg-c-o
+ angle_coeff @angle:cl-c-cl harmonic 54.78 111.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-c-f harmonic 59.05 112.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-c-ha harmonic 40.42 109.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-c-o harmonic 59.78 121.51 # SOURCE3 6 1.6987
+ angle_coeff @angle:cl-c-s harmonic 56.74 127.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:c-c-n harmonic 67.53 112.14 # SOURCE4 53 2.1247
+ angle_coeff @angle:na-cc-nc harmonic 70.72 121.62 # CORR 231
+ angle_coeff @angle:na-cc-nd harmonic 74.78 112.02 # SOURCE3 17 2.2434
+ angle_coeff @angle:na-cc-no harmonic 68.48 124.90 # SOURCE4 48 0.7933
+ angle_coeff @angle:na-cc-oh harmonic 73.25 117.26 # SOURCE4 16 0.9090
+ angle_coeff @angle:na-cc-sx harmonic 63.25 117.04 # SOURCE4 13 0.4187
+ angle_coeff @angle:na-cc-sy harmonic 63.13 120.55 # SOURCE4 7 1.7547
+ angle_coeff @angle:nc-cc-nd harmonic 73.35 115.96 # CORR 222
+ angle_coeff @angle:nc-cc-nh harmonic 72.33 116.85 # CORR 35
+ angle_coeff @angle:nc-cc-no harmonic 69.31 121.54 # SOURCE4 7 0.9221
+ angle_coeff @angle:nc-cc-ss harmonic 64.63 119.86 # SOURCE3 2 0.0000
+ angle_coeff @angle:nd-cc-nd harmonic 70.88 128.17 # SOURCE4 7 0.0269
+ angle_coeff @angle:nd-cc-ne harmonic 69.29 129.66 # SOURCE4 7 0.4306
+ angle_coeff @angle:nd-cc-nh harmonic 72.41 120.11 # SOURCE3 5 0.9313
+ angle_coeff @angle:nd-cc-no harmonic 69.90 122.68 # SOURCE4 16 0.3393
+ angle_coeff @angle:nd-cc-oh harmonic 72.93 121.54 # CORR 22
+ angle_coeff @angle:nd-cc-os harmonic 73.85 116.29 # CORR 209
+ angle_coeff @angle:nd-cc-sh harmonic 62.75 124.92 # SOURCE4 5 0.9563
+ angle_coeff @angle:nd-cc-ss harmonic 66.51 114.51 # SOURCE3 8 0.3449
+ angle_coeff @angle:nd-cc-sx harmonic 60.81 127.60 # SOURCE4 14 1.1650
+ angle_coeff @angle:nd-cc-sy harmonic 62.75 123.08 # SOURCE4 13 1.0531
+ angle_coeff @angle:ne-cc-ss harmonic 65.39 116.99 # SOURCE4 7 0.1657
+ angle_coeff @angle:nh-cc-nh harmonic 72.93 115.96 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-cc-os harmonic 72.96 116.69 # CORR 25
+ angle_coeff @angle:nh-cc-ss harmonic 64.19 121.94 # CORR 91
+ angle_coeff @angle:n-cc-n2 harmonic 74.78 114.48 # SOURCE4 15 2.3208
+ angle_coeff @angle:n-cc-na harmonic 70.47 122.14 # CORR 59
+ angle_coeff @angle:n-cc-nc harmonic 69.35 125.66 # CORR 64
+ angle_coeff @angle:n-cc-nd harmonic 71.12 122.98 # CORR 229
+ angle_coeff @angle:n-cc-nh harmonic 72.22 116.87 # CORR 79
+ angle_coeff @angle:no-cc-os harmonic 71.01 117.59 # SOURCE4 62 0.2199
+ angle_coeff @angle:no-cc-ss harmonic 63.76 121.10 # SOURCE4 10 0.0957
+ angle_coeff @angle:n-cc-ss harmonic 63.75 123.03 # CORR 45
+ angle_coeff @angle:c-c-o harmonic 67.16 120.99 # SOURCE4 233 2.0333
+ angle_coeff @angle:c-c-oh harmonic 68.20 113.23 # SOURCE3 5 0.5615
+ angle_coeff @angle:c-c-os harmonic 68.18 111.39 # SOURCE4 14 0.4038
+ angle_coeff @angle:os-cc-ss harmonic 61.99 132.01 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-cc-ss harmonic 62.44 121.37 # CORR 22
+ angle_coeff @angle:ss-cc-sy harmonic 61.51 121.70 # CORR 39
+ angle_coeff @angle:cx-c-cx harmonic 85.45 64.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:cx-c-n harmonic 68.69 114.49 # SOURCE4 23 1.4914
+ angle_coeff @angle:cx-c-o harmonic 68.88 122.82 # SOURCE4 97 2.2075
+ angle_coeff @angle:cx-c-oh harmonic 70.49 112.32 # SOURCE4 10 0.6413
+ angle_coeff @angle:cx-c-os harmonic 70.06 111.48 # SOURCE4 16 1.3998
+ angle_coeff @angle:cy-c-cy harmonic 70.14 90.55 # SOURCE2 2 2.4500
+ angle_coeff @angle:cy-c-n harmonic 75.43 91.54 # SOURCE4 249 0.5104
+ angle_coeff @angle:cy-c-o harmonic 64.27 135.04 # SOURCE4 253 1.3450
+ angle_coeff @angle:cy-c-oh harmonic 69.09 112.48 # SOURCE4 5 1.0793
+ angle_coeff @angle:cy-c-os harmonic 74.55 94.89 # SOURCE4 8 0.6016
+ angle_coeff @angle:c2-cd-c3 harmonic 63.27 126.11 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-cd-ca harmonic 65.34 124.66 # CORR 16
+ angle_coeff @angle:c2-cd-cc harmonic 69.09 117.02 # SOURCE3 2 same_as_c2-cc-cd
+ angle_coeff @angle:c2-cd-cd harmonic 66.24 121.77 # CORR 32
+ angle_coeff @angle:c2-cd-ha harmonic 48.69 122.72 # SOURCE3 2 same_as_c2-cc-ha
+ angle_coeff @angle:c2-cd-n harmonic 67.74 126.90 # SOURCE3 1 same_as_c2-cc-n
+ angle_coeff @angle:c2-cd-os harmonic 70.10 120.79 # CORR 13
+ angle_coeff @angle:c3-cd-ca harmonic 61.96 125.89 # CORR 127
+ angle_coeff @angle:c3-cd-cc harmonic 64.81 119.45 # SOURCE3 35 8.2040
+ angle_coeff @angle:c3-cd-cd harmonic 64.66 115.97 # SOURCE3 4 3.0507
+ angle_coeff @angle:c3-cd-ce harmonic 65.34 117.84 # CORR 2
+ angle_coeff @angle:c3-cd-ha harmonic 45.11 121.52 # SOURCE3 32 3.2091
+ angle_coeff @angle:c3-cd-n2 harmonic 65.80 126.87 # CORR 9
+ angle_coeff @angle:c3-cd-n harmonic 66.33 119.11 # CORR 68
+ angle_coeff @angle:c3-cd-na harmonic 65.50 122.78 # CORR 632
+ angle_coeff @angle:c3-cd-nc harmonic 66.32 122.13 # CORR 475
+ angle_coeff @angle:c3-cd-nd harmonic 65.90 120.94 # CORR 309
+ angle_coeff @angle:c3-cd-os harmonic 67.54 116.88 # CORR 203
+ angle_coeff @angle:c3-cd-ss harmonic 61.21 121.66 # CORR 171
+ angle_coeff @angle:ca-cd-cc harmonic 68.23 113.51 # SOURCE3 26 7.4229
+ angle_coeff @angle:ca-cd-cd harmonic 67.66 111.04 # SOURCE3 9 7.9455
+ angle_coeff @angle:ca-cd-ce harmonic 65.09 125.10 # SOURCE4 9 1.9265
+ angle_coeff @angle:ca-cd-h4 harmonic 45.57 128.66 # SOURCE3 10 3.1167
+ angle_coeff @angle:ca-cd-ha harmonic 46.40 124.04 # SOURCE3 34 3.6691
+ angle_coeff @angle:ca-cd-n harmonic 68.46 117.67 # CORR 18
+ angle_coeff @angle:ca-cd-na harmonic 67.03 123.45 # SOURCE4 39 1.9138
+ angle_coeff @angle:ca-cd-nc harmonic 67.92 123.02 # CORR 188
+ angle_coeff @angle:ca-cd-nd harmonic 67.69 120.67 # CORR 162
+ angle_coeff @angle:ca-cd-oh harmonic 69.61 117.71 # CORR 21
+ angle_coeff @angle:ca-cd-os harmonic 69.82 115.16 # CORR 134
+ angle_coeff @angle:ca-cd-ss harmonic 62.30 120.51 # CORR 43
+ angle_coeff @angle:c-cd-c2 harmonic 65.60 120.92 # CORR 22
+ angle_coeff @angle:c-cd-c3 harmonic 63.60 117.42 # CORR 126
+ angle_coeff @angle:c-cd-c harmonic 63.42 121.17 # CORR 64
+ angle_coeff @angle:c-cd-ca harmonic 63.55 122.95 # SOURCE3 1 same_as_c-cc-ca
+ angle_coeff @angle:c-cd-cc harmonic 65.25 121.42 # CORR 1708
+ angle_coeff @angle:cc-cd-cc harmonic 67.89 120.23 # CORR 133
+ angle_coeff @angle:cc-cd-cd harmonic 68.16 114.19 # SOURCE3 517 6.5960
+ angle_coeff @angle:cc-cd-cf harmonic 63.67 128.41 # CORR 210
+ angle_coeff @angle:cc-cd-ch harmonic 64.92 126.05 # SOURCE4 30 1.4695
+ angle_coeff @angle:cc-cd-cl harmonic 57.46 123.70 # CORR 62
+ angle_coeff @angle:cc-cd-cy harmonic 63.93 122.13 # SOURCE4 10 0.8509
+ angle_coeff @angle:c-cd-cd harmonic 63.72 122.69 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-cd-cf harmonic 63.20 122.73 # CORR 10
+ angle_coeff @angle:cc-cd-h4 harmonic 47.19 129.11 # SOURCE3 418 3.1355
+ angle_coeff @angle:cc-cd-ha harmonic 48.35 122.89 # SOURCE3 584 2.9334
+ angle_coeff @angle:c-cd-cl harmonic 58.39 116.05 # CORR 24
+ angle_coeff @angle:cc-cd-n harmonic 70.72 115.52 # SOURCE3 52 1.3322
+ angle_coeff @angle:cc-cd-na harmonic 72.91 109.42 # SOURCE3 265 2.6051
+ angle_coeff @angle:cc-cd-nc harmonic 69.42 123.82 # SOURCE4 14 0.3678
+ angle_coeff @angle:cc-cd-nd harmonic 72.01 111.75 # CORR 1101
+ angle_coeff @angle:cc-cd-nh harmonic 68.69 123.89 # CORR 106
+ angle_coeff @angle:cc-cd-oh harmonic 69.56 123.89 # CORR 106
+ angle_coeff @angle:cc-cd-os harmonic 69.96 120.30 # SOURCE3 64 5.4354
+ angle_coeff @angle:cc-cd-ss harmonic 65.44 111.55 # CORR 884
+ angle_coeff @angle:cc-cd-sy harmonic 60.54 124.91 # CORR 41
+ angle_coeff @angle:cd-cd-cd harmonic 67.88 110.70 # SOURCE3 54 3.4091
+ angle_coeff @angle:cd-cd-ce harmonic 65.88 122.59 # CORR 39
+ angle_coeff @angle:cd-cd-cf harmonic 62.78 127.20 # CORR 42
+ angle_coeff @angle:cd-cd-ch harmonic 63.63 126.15 # CORR 27
+ angle_coeff @angle:cd-cd-cy harmonic 63.17 120.93 # SOURCE4 6 1.2205
+ angle_coeff @angle:cd-cd-h4 harmonic 45.56 129.47 # SOURCE3 171 2.2734
+ angle_coeff @angle:cd-cd-ha harmonic 47.14 120.86 # CORR 1751
+ angle_coeff @angle:cd-cd-n2 harmonic 69.48 121.15 # CORR 12
+ angle_coeff @angle:cd-cd-n harmonic 67.95 119.89 # SOURCE3 36 0.2095
+ angle_coeff @angle:cd-cd-na harmonic 72.21 106.80 # SOURCE3 33 same_as_cc-cc-na
+ angle_coeff @angle:cd-cd-nc harmonic 71.15 112.56 # SOURCE3 141 4.2871
+ angle_coeff @angle:cd-cd-nd harmonic 67.53 121.69 # CORR 105
+ angle_coeff @angle:cd-cd-nh harmonic 68.41 119.51 # CORR 228
+ angle_coeff @angle:cd-cd-oh harmonic 68.53 121.96 # CORR 27
+ angle_coeff @angle:cd-cd-os harmonic 69.34 117.23 # CORR 211
+ angle_coeff @angle:cd-cd-pc harmonic 80.79 115.36 # SOURCE3 84 3.2889
+ angle_coeff @angle:cd-cd-ss harmonic 62.45 120.12 # CORR 31
+ angle_coeff @angle:ce-cd-nd harmonic 68.22 124.90 # SOURCE4 5 2.3975
+ angle_coeff @angle:cf-cd-na harmonic 66.32 124.22 # CORR 48
+ angle_coeff @angle:cf-cd-nc harmonic 67.80 121.51 # CORR 37
+ angle_coeff @angle:cf-cd-nd harmonic 67.01 121.29 # CORR 37
+ angle_coeff @angle:cf-cd-os harmonic 68.17 119.03 # CORR 66
+ angle_coeff @angle:cf-cd-ss harmonic 61.83 121.44 # CORR 38
+ angle_coeff @angle:c-cd-h4 harmonic 46.77 118.19 # SOURCE4 8 0.2226
+ angle_coeff @angle:c-cd-ha harmonic 46.99 117.02 # SOURCE3 56 1.9713
+ angle_coeff @angle:cl-cd-nc harmonic 59.35 122.97 # CORR 6
+ angle_coeff @angle:c-cd-n2 harmonic 68.54 120.89 # CORR 2
+ angle_coeff @angle:c-cd-n harmonic 68.11 116.32 # CORR 21
+ angle_coeff @angle:c-cd-nc harmonic 67.50 121.67 # CORR 47
+ angle_coeff @angle:c-cd-nd harmonic 66.19 123.47 # CORR 24
+ angle_coeff @angle:c-cd-oh harmonic 70.04 113.64 # CORR 53
+ angle_coeff @angle:c-cd-os harmonic 67.83 119.39 # CORR 78
+ angle_coeff @angle:h4-cd-n harmonic 50.39 117.62 # SOURCE3 53 0.9721
+ angle_coeff @angle:h4-cd-na harmonic 50.22 119.66 # SOURCE3 294 2.4702
+ angle_coeff @angle:h4-cd-nc harmonic 51.39 119.11 # SOURCE3 135 1.6946
+ angle_coeff @angle:h4-cd-nd harmonic 50.00 120.03 # SOURCE3 16 2.3863
+ angle_coeff @angle:h4-cd-os harmonic 52.27 111.89 # SOURCE3 61 2.3500
+ angle_coeff @angle:h4-cd-ss harmonic 42.95 117.75 # SOURCE3 40 3.1156
+ angle_coeff @angle:h5-cd-n harmonic 50.84 115.72 # CORR 20
+ angle_coeff @angle:h5-cd-na harmonic 49.76 122.10 # SOURCE3 16 1.4626
+ angle_coeff @angle:h5-cd-nc harmonic 50.13 125.38 # SOURCE3 40 2.2157
+ angle_coeff @angle:h5-cd-nd harmonic 49.29 123.70 # SOURCE3 6 0.3547
+ angle_coeff @angle:h5-cd-os harmonic 51.30 116.33 # SOURCE3 12 3.2919
+ angle_coeff @angle:h5-cd-ss harmonic 42.19 122.00 # SOURCE3 6 0.7237
+ angle_coeff @angle:ha-cd-na harmonic 49.82 121.50 # SOURCE2 1 same_as_ha-cc-na
+ angle_coeff @angle:ha-cd-nc harmonic 51.41 118.88 # SOURCE3 20 2.8923
+ angle_coeff @angle:ha-cd-nd harmonic 50.73 116.54 # SOURCE3 5 1.4482
+ angle_coeff @angle:ha-cd-os harmonic 52.49 110.86 # SOURCE3 7 1.3846
+ angle_coeff @angle:ha-cd-pc harmonic 53.59 121.76 # SOURCE3 84 2.2216
+ angle_coeff @angle:ha-cd-ss harmonic 42.26 121.64 # SOURCE2 5 same_as_ha-cc-ss
+ angle_coeff @angle:na-cd-nc harmonic 74.78 112.02 # SOURCE3 17 2.2434
+ angle_coeff @angle:na-cd-nd harmonic 70.72 121.62 # CORR 231
+ angle_coeff @angle:na-cd-nh harmonic 72.43 116.98 # SOURCE4 46 1.4937
+ angle_coeff @angle:na-cd-ss harmonic 67.07 111.46 # SOURCE4 20 0.8600
+ angle_coeff @angle:nc-cd-nd harmonic 73.35 115.96 # CORR 222
+ angle_coeff @angle:nc-cd-nh harmonic 72.41 120.11 # SOURCE3 5 0.9313
+ angle_coeff @angle:nc-cd-oh harmonic 72.93 121.54 # CORR 22
+ angle_coeff @angle:nc-cd-os harmonic 73.85 116.29 # CORR 209
+ angle_coeff @angle:nc-cd-ss harmonic 66.51 114.51 # SOURCE3 8 0.3449
+ angle_coeff @angle:nd-cd-nd harmonic 69.47 125.58 # SOURCE4 13 0.4672
+ angle_coeff @angle:nd-cd-nh harmonic 72.33 116.85 # CORR 35
+ angle_coeff @angle:nd-cd-ss harmonic 64.63 119.86 # SOURCE3 2 same_as_nc-cc-ss
+ angle_coeff @angle:nh-cd-nh harmonic 72.93 115.96 # SOURCE3 1 same_as_nh-cc-nh
+ angle_coeff @angle:nh-cd-os harmonic 72.96 116.69 # CORR 25
+ angle_coeff @angle:nh-cd-ss harmonic 64.19 121.94 # CORR 91
+ angle_coeff @angle:n-cd-na harmonic 70.47 122.14 # CORR 59
+ angle_coeff @angle:n-cd-nc harmonic 71.12 122.98 # CORR 229
+ angle_coeff @angle:n-cd-nd harmonic 69.35 125.66 # CORR 64
+ angle_coeff @angle:n-cd-nh harmonic 72.22 116.87 # CORR 79
+ angle_coeff @angle:n-cd-ss harmonic 63.75 123.03 # CORR 45
+ angle_coeff @angle:oh-cd-os harmonic 75.54 111.61 # SOURCE4 6 1.1909
+ angle_coeff @angle:os-cd-ss harmonic 61.99 132.01 # SOURCE3 1 same_as_os-cc-ss
+ angle_coeff @angle:ss-cd-ss harmonic 62.44 121.37 # CORR 22
+ angle_coeff @angle:ss-cd-sy harmonic 61.51 121.70 # CORR 39
+ angle_coeff @angle:c2-ce-c3 harmonic 64.30 122.89 # SOURCE3 7 1.0449
+ angle_coeff @angle:c2-ce-ca harmonic 65.16 123.08 # SOURCE3 6 2.1589
+ angle_coeff @angle:c2-ce-cc harmonic 65.62 123.27 # CORR 72
+ angle_coeff @angle:c2-ce-ce harmonic 65.73 123.08 # SOURCE3 12 0.6518
+ angle_coeff @angle:c2-ce-cg harmonic 66.66 121.67 # CORR 21
+ angle_coeff @angle:c2-ce-cl harmonic 57.87 119.51 # SOURCE4 24 1.4963
+ angle_coeff @angle:c2-ce-h4 harmonic 48.64 125.58 # SOURCE4 11 0.9381
+ angle_coeff @angle:c2-ce-ha harmonic 49.56 121.10 # SOURCE3 46 2.4054
+ angle_coeff @angle:c2-ce-n1 harmonic 72.67 117.85 # SOURCE4 7 0.3180
+ angle_coeff @angle:c2-ce-n2 harmonic 70.34 128.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-ce-na harmonic 69.29 119.19 # SOURCE4 5 0.8452
+ angle_coeff @angle:c2-ce-ne harmonic 69.73 118.32 # SOURCE3 7 1.0468
+ angle_coeff @angle:c2-ce-oh harmonic 70.32 123.78 # SOURCE4 10 1.8182
+ angle_coeff @angle:c2-ce-p2 harmonic 77.91 118.24 # SOURCE3 1
+ angle_coeff @angle:c2-ce-pe harmonic 77.59 118.76 # SOURCE3 8 2.3984
+ angle_coeff @angle:c2-ce-px harmonic 77.17 119.72 # SOURCE3 6 0.5213
+ angle_coeff @angle:c2-ce-py harmonic 77.39 122.13 # SOURCE3 5 3.1367
+ angle_coeff @angle:c2-ce-sx harmonic 61.64 119.87 # SOURCE3 5 0.8557
+ angle_coeff @angle:c2-ce-sy harmonic 61.96 120.35 # SOURCE3 5 0.5401
+ angle_coeff @angle:c3-ce-ca harmonic 62.76 119.28 # CORR 178
+ angle_coeff @angle:c3-ce-cc harmonic 63.42 118.22 # CORR 39
+ angle_coeff @angle:c3-ce-ce harmonic 63.80 116.99 # CORR 244
+ angle_coeff @angle:c3-ce-cf harmonic 64.52 122.11 # CORR 221
+ angle_coeff @angle:c3-ce-cg harmonic 63.79 118.48 # SOURCE4 8 1.4756
+ angle_coeff @angle:c3-ce-n2 harmonic 66.92 122.70 # CORR 81
+ angle_coeff @angle:c3-ce-nf harmonic 67.26 120.75 # SOURCE4 6 2.1938
+ angle_coeff @angle:c3-ce-nh harmonic 65.76 119.90 # SOURCE4 5 0.9634
+ angle_coeff @angle:ca-ce-ca harmonic 63.94 117.58 # CORR 112
+ angle_coeff @angle:ca-ce-cc harmonic 64.21 118.06 # CORR 17
+ angle_coeff @angle:ca-ce-ce harmonic 63.84 119.62 # SOURCE4 14 1.9171
+ angle_coeff @angle:ca-ce-cf harmonic 64.07 127.39 # CORR 318
+ angle_coeff @angle:ca-ce-cl harmonic 57.99 114.22 # SOURCE4 6 1.3164
+ angle_coeff @angle:ca-ce-h4 harmonic 46.71 116.86 # SOURCE4 74 0.9179
+ angle_coeff @angle:ca-ce-ha harmonic 47.07 115.16 # CORR 345
+ angle_coeff @angle:ca-ce-n2 harmonic 68.51 120.72 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-ce-nf harmonic 67.74 122.66 # CORR 22
+ angle_coeff @angle:ca-ce-nh harmonic 67.87 115.51 # SOURCE4 93 0.9284
+ angle_coeff @angle:ca-ce-oh harmonic 68.85 116.37 # CORR 11
+ angle_coeff @angle:ca-ce-os harmonic 68.60 115.58 # SOURCE4 8 1.0735
+ angle_coeff @angle:ca-ce-ss harmonic 61.21 117.73 # SOURCE4 5 1.1596
+ angle_coeff @angle:c-ce-c2 harmonic 65.82 120.42 # SOURCE3 13 1.8877
+ angle_coeff @angle:c-ce-c3 harmonic 63.35 116.92 # CORR 188
+ angle_coeff @angle:c-ce-c harmonic 62.59 122.38 # CORR 23
+ angle_coeff @angle:c-ce-ca harmonic 63.79 117.98 # SOURCE4 8 1.5129
+ angle_coeff @angle:cc-ce-cd harmonic 63.28 130.36 # SOURCE4 5 2.3402
+ angle_coeff @angle:cc-ce-cf harmonic 64.87 126.20 # CORR 88
+ angle_coeff @angle:c-ce-cd harmonic 63.81 126.07 # CORR 2
+ angle_coeff @angle:c-ce-ce harmonic 63.46 120.89 # SOURCE4 16 1.8719
+ angle_coeff @angle:c-ce-cf harmonic 64.26 126.41 # SOURCE3 2 5.7847
+ angle_coeff @angle:c-ce-cg harmonic 64.57 118.32 # SOURCE4 15 1.0595
+ angle_coeff @angle:cc-ce-h4 harmonic 47.52 115.40 # SOURCE4 29 0.8744
+ angle_coeff @angle:cc-ce-ha harmonic 47.53 115.45 # CORR 113
+ angle_coeff @angle:c-ce-cl harmonic 57.67 115.40 # SOURCE4 6 1.0958
+ angle_coeff @angle:cc-ce-n2 harmonic 68.94 121.28 # CORR 69
+ angle_coeff @angle:cc-ce-nh harmonic 67.31 119.17 # SOURCE4 8 2.1378
+ angle_coeff @angle:c-ce-cy harmonic 72.72 88.22 # SOURCE4 19 0.3234
+ angle_coeff @angle:cd-ce-ce harmonic 64.81 124.49 # CORR 12
+ angle_coeff @angle:cd-ce-ha harmonic 49.97 115.48 # CORR 39
+ angle_coeff @angle:ce-ce-ce harmonic 64.55 118.74 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-ce-cf harmonic 65.46 124.19 # CORR 341
+ angle_coeff @angle:ce-ce-cl harmonic 57.29 117.93 # SOURCE4 12 0.2639
+ angle_coeff @angle:ce-ce-h4 harmonic 47.06 117.97 # CORR 19
+ angle_coeff @angle:ce-ce-ha harmonic 47.50 115.90 # SOURCE3 12 0.4670
+ angle_coeff @angle:ce-ce-n1 harmonic 66.79 127.15 # CORR 4
+ angle_coeff @angle:ce-ce-n2 harmonic 69.57 119.33 # CORR 13
+ angle_coeff @angle:ce-ce-oh harmonic 69.29 116.89 # SOURCE4 11 2.0380
+ angle_coeff @angle:cf-ce-cg harmonic 66.10 123.79 # CORR 41
+ angle_coeff @angle:cf-ce-cy harmonic 60.53 137.74 # SOURCE4 13 0.3952
+ angle_coeff @angle:cf-ce-h4 harmonic 49.02 123.76 # SOURCE4 5 1.0909
+ angle_coeff @angle:cf-ce-ha harmonic 50.21 118.12 # CORR 655
+ angle_coeff @angle:cf-ce-n1 harmonic 72.03 120.03 # SOURCE4 6 1.9451
+ angle_coeff @angle:cf-ce-n harmonic 72.60 108.25 # CORR 64
+ angle_coeff @angle:cf-ce-nh harmonic 69.48 121.52 # SOURCE4 12 2.0106
+ angle_coeff @angle:cf-ce-oh harmonic 70.92 121.78 # CORR 24
+ angle_coeff @angle:cg-ce-cg harmonic 65.58 118.26 # CORR 7
+ angle_coeff @angle:cg-ce-ha harmonic 47.93 116.54 # CORR 18
+ angle_coeff @angle:cg-ce-n1 harmonic 69.49 119.50 # CORR 2
+ angle_coeff @angle:cg-ce-n2 harmonic 69.59 121.43 # SOURCE4 6 0.8382
+ angle_coeff @angle:c-ce-ha harmonic 46.59 117.26 # SOURCE3 11 2.7158
+ angle_coeff @angle:c-ce-n harmonic 66.20 118.62 # CORR 137
+ angle_coeff @angle:c-ce-nh harmonic 67.79 115.62 # CORR 19
+ angle_coeff @angle:c-ce-oh harmonic 68.34 117.92 # SOURCE4 5 1.4580
+ angle_coeff @angle:c-ce-os harmonic 69.09 113.78 # SOURCE4 21 1.8258
+ angle_coeff @angle:h4-ce-n1 harmonic 52.58 116.36 # SOURCE4 7 0.2182
+ angle_coeff @angle:h4-ce-n2 harmonic 52.36 121.58 # CORR 116
+ angle_coeff @angle:h4-ce-ne harmonic 49.72 115.81 # SOURCE4 7 1.9836
+ angle_coeff @angle:ha-ce-n1 harmonic 52.70 115.96 # CORR 4
+ angle_coeff @angle:ha-ce-n2 harmonic 52.85 119.51 # SOURCE3 2 0.4623
+ angle_coeff @angle:ha-ce-ne harmonic 49.16 118.59 # SOURCE3 5 1.1113
+ angle_coeff @angle:ha-ce-nh harmonic 50.62 114.99 # CORR 2
+ angle_coeff @angle:ha-ce-p2 harmonic 51.40 120.11 # SOURCE3 1
+ angle_coeff @angle:ha-ce-pe harmonic 51.44 119.33 # SOURCE3 6 0.8966
+ angle_coeff @angle:ha-ce-px harmonic 51.66 117.90 # SOURCE3 6 0.1809
+ angle_coeff @angle:ha-ce-py harmonic 52.32 118.72 # SOURCE3 3 0.3064
+ angle_coeff @angle:ha-ce-sx harmonic 41.85 115.45 # SOURCE3 3 0.6640
+ angle_coeff @angle:ha-ce-sy harmonic 42.34 114.86 # SOURCE3 3 0.4717
+ angle_coeff @angle:n2-ce-nh harmonic 71.56 124.96 # CORR 92
+ angle_coeff @angle:n2-ce-os harmonic 74.58 118.13 # SOURCE4 6 0.1367
+ angle_coeff @angle:n2-ce-ss harmonic 64.40 117.23 # SOURCE4 6 2.0518
+ angle_coeff @angle:ne-ce-ne harmonic 68.07 123.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-ce-nh harmonic 71.89 112.91 # SOURCE4 12 1.1263
+ angle_coeff @angle:nf-ce-nh harmonic 73.31 118.13 # SOURCE4 6 0.5842
+ angle_coeff @angle:pe-ce-pe harmonic 92.40 129.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:py-ce-py harmonic 102.62 108.06 # SOURCE3 1 0.0000
+ angle_coeff @angle:sx-ce-sx harmonic 60.61 120.32 # SOURCE3 1 0.0000
+ angle_coeff @angle:sy-ce-sy harmonic 61.21 119.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-cf-c3 harmonic 64.30 122.89 # SOURCE3 7 same_as_c2-ce-c3
+ angle_coeff @angle:c2-cf-ca harmonic 65.16 123.08 # SOURCE3 6 same_as_c2-ce-ca
+ angle_coeff @angle:c2-cf-cd harmonic 65.62 123.27 # CORR 72
+ angle_coeff @angle:c2-cf-cf harmonic 65.73 123.08 # SOURCE3 12 same_as_c2-ce-ce
+ angle_coeff @angle:c2-cf-ch harmonic 66.66 121.67 # CORR 21
+ angle_coeff @angle:c2-cf-ha harmonic 49.56 121.10 # SOURCE3 46 same_as_c2-ce-ha
+ angle_coeff @angle:c2-cf-n2 harmonic 70.34 128.70 # SOURCE3 1 same_as_c2-ce-n2
+ angle_coeff @angle:c2-cf-nf harmonic 69.73 118.32 # SOURCE3 7 same_as_c2-ce-ne
+ angle_coeff @angle:c2-cf-p2 harmonic 77.91 118.24 # SOURCE3 1 same_as_c2-ce-p2
+ angle_coeff @angle:c2-cf-pf harmonic 77.59 118.76 # SOURCE3 8 same_as_c2-ce-pe
+ angle_coeff @angle:c2-cf-px harmonic 77.17 119.72 # SOURCE3 6 same_as_c2-ce-px
+ angle_coeff @angle:c2-cf-py harmonic 77.39 122.13 # SOURCE3 5 same_as_c2-ce-py
+ angle_coeff @angle:c2-cf-sx harmonic 61.64 119.87 # SOURCE3 5 same_as_c2-ce-sx
+ angle_coeff @angle:c2-cf-sy harmonic 61.96 120.35 # SOURCE3 5 same_as_c2-ce-sy
+ angle_coeff @angle:c3-cf-ca harmonic 62.76 119.28 # CORR 178
+ angle_coeff @angle:c3-cf-cd harmonic 63.42 118.22 # CORR 39
+ angle_coeff @angle:c3-cf-ce harmonic 64.52 122.11 # CORR 221
+ angle_coeff @angle:c3-cf-cf harmonic 63.80 116.99 # CORR 244
+ angle_coeff @angle:c3-cf-n2 harmonic 66.92 122.70 # CORR 81
+ angle_coeff @angle:ca-cf-ca harmonic 63.94 117.58 # CORR 112
+ angle_coeff @angle:ca-cf-cc harmonic 62.70 130.80 # SOURCE4 12 1.2696
+ angle_coeff @angle:ca-cf-cd harmonic 64.21 118.06 # CORR 17
+ angle_coeff @angle:ca-cf-ce harmonic 64.07 127.39 # CORR 318
+ angle_coeff @angle:ca-cf-ha harmonic 47.07 115.16 # CORR 345
+ angle_coeff @angle:ca-cf-n2 harmonic 68.51 120.72 # SOURCE3 1 same_as_ca-ce-n2
+ angle_coeff @angle:ca-cf-ne harmonic 67.74 122.66 # CORR 22
+ angle_coeff @angle:ca-cf-oh harmonic 68.85 116.37 # CORR 11
+ angle_coeff @angle:c-cf-c2 harmonic 65.82 120.42 # SOURCE3 13 same_as_c-ce-c2
+ angle_coeff @angle:c-cf-c3 harmonic 63.35 116.92 # CORR 188
+ angle_coeff @angle:c-cf-c harmonic 62.59 122.38 # CORR 23
+ angle_coeff @angle:c-cf-cc harmonic 63.81 126.07 # CORR 2
+ angle_coeff @angle:cc-cf-cf harmonic 64.81 124.49 # CORR 12
+ angle_coeff @angle:c-cf-cd harmonic 64.25 117.76 # SOURCE4 10 1.2451
+ angle_coeff @angle:c-cf-ce harmonic 64.26 126.41 # SOURCE3 2 same_as_c-ce-cf
+ angle_coeff @angle:cc-cf-ha harmonic 49.97 115.48 # CORR 39
+ angle_coeff @angle:cd-cf-ce harmonic 64.87 126.20 # CORR 88
+ angle_coeff @angle:cd-cf-ha harmonic 47.53 115.45 # CORR 113
+ angle_coeff @angle:cd-cf-n2 harmonic 68.94 121.28 # CORR 69
+ angle_coeff @angle:ce-cf-cf harmonic 65.46 124.19 # CORR 341
+ angle_coeff @angle:ce-cf-ch harmonic 66.10 123.79 # CORR 41
+ angle_coeff @angle:ce-cf-ha harmonic 50.21 118.12 # CORR 655
+ angle_coeff @angle:ce-cf-n harmonic 72.60 108.25 # CORR 64
+ angle_coeff @angle:ce-cf-oh harmonic 70.92 121.78 # CORR 24
+ angle_coeff @angle:cf-cf-cf harmonic 64.55 118.74 # SOURCE3 1 same_as_ce-ce-ce
+ angle_coeff @angle:cf-cf-h4 harmonic 47.06 117.97 # CORR 19
+ angle_coeff @angle:cf-cf-ha harmonic 47.50 115.90 # SOURCE3 12 0.4670
+ angle_coeff @angle:cf-cf-n1 harmonic 66.79 127.15 # CORR 4
+ angle_coeff @angle:cf-cf-n2 harmonic 69.57 119.33 # CORR 13
+ angle_coeff @angle:c-cf-ha harmonic 46.59 117.26 # SOURCE3 11 2.7158
+ angle_coeff @angle:ch-cf-ch harmonic 65.58 118.26 # CORR 7
+ angle_coeff @angle:ch-cf-ha harmonic 47.93 116.54 # CORR 18
+ angle_coeff @angle:ch-cf-n1 harmonic 69.49 119.50 # CORR 2
+ angle_coeff @angle:c-cf-n2 harmonic 70.16 114.88 # SOURCE4 5 1.3647
+ angle_coeff @angle:c-cf-n harmonic 66.20 118.62 # CORR 137
+ angle_coeff @angle:c-cf-nh harmonic 67.79 115.62 # CORR 19
+ angle_coeff @angle:f-c-f harmonic 72.22 107.35 # SOURCE2 2 0.2500
+ angle_coeff @angle:h4-cf-n2 harmonic 52.36 121.58 # CORR 116
+ angle_coeff @angle:h4-cf-ne harmonic 52.29 120.21 # SOURCE4 6 0.8104
+ angle_coeff @angle:ha-cf-n1 harmonic 52.70 115.96 # CORR 4
+ angle_coeff @angle:ha-cf-n2 harmonic 52.85 119.51 # SOURCE3 2 same_as_ha-ce-n2
+ angle_coeff @angle:ha-cf-nf harmonic 49.16 118.59 # SOURCE3 5 same_as_ha-ce-ne
+ angle_coeff @angle:ha-cf-nh harmonic 50.62 114.99 # CORR 2
+ angle_coeff @angle:ha-cf-p2 harmonic 51.40 120.11 # SOURCE3 1 same_as_ha-ce-p2
+ angle_coeff @angle:ha-cf-pf harmonic 51.44 119.33 # SOURCE3 6 same_as_ha-ce-pe
+ angle_coeff @angle:ha-cf-px harmonic 51.66 117.90 # SOURCE3 6 same_as_ha-ce-px
+ angle_coeff @angle:ha-cf-py harmonic 52.32 118.72 # SOURCE3 3 same_as_ha-ce-py
+ angle_coeff @angle:ha-cf-sx harmonic 41.85 115.45 # SOURCE3 3 same_as_ha-ce-sx
+ angle_coeff @angle:ha-cf-sy harmonic 42.34 114.86 # SOURCE3 3 same_as_ha-ce-sy
+ angle_coeff @angle:n2-cf-nh harmonic 71.56 124.96 # CORR 92
+ angle_coeff @angle:nf-cf-nf harmonic 68.07 123.87 # SOURCE3 1 same_as_ne-ce-ne
+ angle_coeff @angle:f-c-o harmonic 73.21 123.44 # SOURCE3 1
+ angle_coeff @angle:pf-cf-pf harmonic 92.40 129.79 # SOURCE3 1 same_as_pe-ce-pe
+ angle_coeff @angle:py-cf-py harmonic 102.62 108.06 # SOURCE3 1 same_as_py-ce-py
+ angle_coeff @angle:f-c-s harmonic 63.41 124.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:sx-cf-sx harmonic 60.61 120.32 # SOURCE3 1 same_as_sx-ce-sx
+ angle_coeff @angle:sy-cf-sy harmonic 61.21 119.97 # SOURCE3 1 same_as_sy-ce-sy
+ angle_coeff @angle:c1-cg-ca harmonic 56.52 179.52 # CORR 19
+ angle_coeff @angle:c1-cg-cc harmonic 56.97 178.60 # SOURCE4 6 0.3822
+ angle_coeff @angle:c1-cg-ce harmonic 56.95 178.05 # CORR 7
+ angle_coeff @angle:c1-cg-cg harmonic 58.17 179.70 # CORR 18
+ angle_coeff @angle:c1-cg-ne harmonic 62.73 170.02 # SOURCE3 4 1.1724
+ angle_coeff @angle:c1-cg-pe harmonic 71.80 173.29 # SOURCE3 11 4.9305
+ angle_coeff @angle:ca-cg-ch harmonic 56.91 179.64 # CORR 13
+ angle_coeff @angle:ca-cg-n1 harmonic 58.93 179.43 # CORR 103
+ angle_coeff @angle:c-cg-c1 harmonic 56.19 179.14 # SOURCE3 2 0.0000
+ angle_coeff @angle:cc-cg-n1 harmonic 59.43 178.54 # CORR 50
+ angle_coeff @angle:ce-cg-ch harmonic 57.39 177.94 # CORR 17
+ angle_coeff @angle:ce-cg-n1 harmonic 59.39 177.97 # CORR 67
+ angle_coeff @angle:n1-cg-ne harmonic 64.98 174.44 # CORR 17
+ angle_coeff @angle:h4-c-o harmonic 54.28 120.93 # SOURCE4 129 0.5769
+ angle_coeff @angle:h5-c-n harmonic 52.39 112.19 # SOURCE4 33 0.4220
+ angle_coeff @angle:h5-c-o harmonic 53.89 123.26 # SOURCE4 38 0.4806
+ angle_coeff @angle:ha-c-ha harmonic 37.86 115.61 # SOURCE3 4 0.0458
+ angle_coeff @angle:ha-c-i harmonic 36.71 110.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:ha-c-n harmonic 52.40 112.37 # SOURCE3 4 0.6424
+ angle_coeff @angle:ha-c-o harmonic 54.27 121.94 # SOURCE3 51 2.3235
+ angle_coeff @angle:ha-c-oh harmonic 53.97 111.82 # SOURCE3 4 1.9375
+ angle_coeff @angle:ha-c-os harmonic 53.24 110.34 # SOURCE3 8 1.9344
+ angle_coeff @angle:ha-c-s harmonic 44.27 119.56 # SOURCE3 3 0.7586
+ angle_coeff @angle:c1-ch-ca harmonic 56.52 179.52 # CORR 19
+ angle_coeff @angle:c1-ch-cf harmonic 56.95 178.05 # CORR 7
+ angle_coeff @angle:c1-ch-ch harmonic 58.17 179.70 # CORR 18
+ angle_coeff @angle:c1-ch-nf harmonic 62.73 170.02 # SOURCE3 4 same_as_c1-cg-ne
+ angle_coeff @angle:c1-ch-pf harmonic 71.80 173.29 # SOURCE3 11 same_as_c1-cg-pe
+ angle_coeff @angle:ca-ch-cg harmonic 56.91 179.64 # CORR 13
+ angle_coeff @angle:ca-ch-n1 harmonic 58.93 179.43 # CORR 103
+ angle_coeff @angle:c-ch-c1 harmonic 56.19 179.14 # SOURCE3 2 same_as_c-cg-c1
+ angle_coeff @angle:cd-ch-n1 harmonic 59.43 178.54 # CORR 50
+ angle_coeff @angle:cf-ch-cg harmonic 57.39 177.94 # CORR 17
+ angle_coeff @angle:cf-ch-n1 harmonic 59.39 177.97 # CORR 67
+ angle_coeff @angle:cg-ch-ch harmonic 58.68 179.67 # SOURCE4 7 0.1439
+ angle_coeff @angle:n1-ch-nf harmonic 64.98 174.44 # CORR 17
+ angle_coeff @angle:i-c-i harmonic 59.79 116.45 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-c-o harmonic 55.51 122.02 # SOURCE3 4 1.2961
+ angle_coeff @angle:f-cl-f harmonic 0.00 87.50 # SOURCE2 1 estimated_force_constant
+ angle_coeff @angle:n2-c-n2 harmonic 71.83 110.31 # SOURCE3 1
+ angle_coeff @angle:n2-c-o harmonic 73.02 122.50 # SOURCE3 1
+ angle_coeff @angle:n4-c-n4 harmonic 64.71 114.64 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-c-o harmonic 69.58 118.83 # SOURCE3 4 3.8516
+ angle_coeff @angle:nc-c-o harmonic 73.92 122.97 # CORR 121
+ angle_coeff @angle:nd-c-o harmonic 73.92 122.97 # CORR 121
+ angle_coeff @angle:ne-c-ne harmonic 73.21 110.31 # CORR 2
+ angle_coeff @angle:ne-c-o harmonic 72.96 125.91 # CORR 42
+ angle_coeff @angle:nf-c-nf harmonic 73.21 110.31 # CORR 2
+ angle_coeff @angle:nf-c-o harmonic 72.96 125.91 # CORR 42
+ angle_coeff @angle:n-c-n harmonic 74.80 113.38 # SOURCE4 635 1.4358
+ angle_coeff @angle:n-c-nc harmonic 72.35 117.05 # CORR 77
+ angle_coeff @angle:n-c-nd harmonic 72.35 117.05 # CORR 77
+ angle_coeff @angle:n-c-ne harmonic 74.43 110.37 # SOURCE4 10 1.7492
+ angle_coeff @angle:n-c-o harmonic 75.83 122.03 # SOURCE3 221 2.3565
+ angle_coeff @angle:n-c-oh harmonic 76.22 113.63 # SOURCE4 5 1.1209
+ angle_coeff @angle:no-c-no harmonic 66.54 109.28 # SOURCE3 1
+ angle_coeff @angle:no-c-o harmonic 67.95 125.36 # SOURCE3 1
+ angle_coeff @angle:n-c-os harmonic 76.68 109.28 # SOURCE4 318 0.8749
+ angle_coeff @angle:n-c-s harmonic 65.73 123.88 # SOURCE3 5 1.2935
+ angle_coeff @angle:n-c-sh harmonic 65.61 112.61 # SOURCE4 8 1.2601
+ angle_coeff @angle:n-c-ss harmonic 66.85 110.42 # SOURCE4 59 1.5507
+ angle_coeff @angle:oh-c-oh harmonic 78.91 110.56 # SOURCE3 2 0.5498
+ angle_coeff @angle:oh-c-s harmonic 66.64 123.44 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-c-o harmonic 78.17 130.38 # SOURCE4 429 1.0315
+ angle_coeff @angle:o-c-oh harmonic 77.38 122.88 # SOURCE3 33 2.1896
+ angle_coeff @angle:o-c-os harmonic 75.93 123.33 # SOURCE4 1708 1.0632
+ angle_coeff @angle:o-c-p2 harmonic 75.65 123.10 # SOURCE3 1
+ angle_coeff @angle:o-c-p3 harmonic 77.08 120.79 # SOURCE3 1
+ angle_coeff @angle:o-c-p5 harmonic 77.01 121.20 # SOURCE4 8 1.2117
+ angle_coeff @angle:o-c-pe harmonic 75.23 123.02 # SOURCE3 3 0.1404
+ angle_coeff @angle:o-c-pf harmonic 75.23 123.02 # SOURCE3 3 same_as_o-c-pe
+ angle_coeff @angle:o-c-px harmonic 76.75 119.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-c-py harmonic 77.45 121.71 # SOURCE4 5 0.3133
+ angle_coeff @angle:o-c-s4 harmonic 61.24 121.15 # SOURCE3 1
+ angle_coeff @angle:o-c-s6 harmonic 61.67 119.45 # SOURCE3 1
+ angle_coeff @angle:o-c-s harmonic 68.21 120.44 # SOURCE3 2 0.0000
+ angle_coeff @angle:o-c-sh harmonic 64.19 121.41 # SOURCE3 4 1.4052
+ angle_coeff @angle:os-c-os harmonic 76.45 111.38 # SOURCE4 12 0.8309
+ angle_coeff @angle:o-c-ss harmonic 64.62 122.29 # SOURCE3 7 1.9240
+ angle_coeff @angle:os-c-s harmonic 65.82 125.03 # SOURCE4 18 0.9978
+ angle_coeff @angle:os-c-ss harmonic 66.30 113.63 # SOURCE4 5 0.7367
+ angle_coeff @angle:o-c-sx harmonic 60.75 121.15 # SOURCE3 5 3.6452
+ angle_coeff @angle:o-c-sy harmonic 61.88 119.32 # SOURCE3 5 2.4495
+ angle_coeff @angle:p2-c-p2 harmonic 94.44 113.75 # SOURCE3 1
+ angle_coeff @angle:p3-c-p3 harmonic 93.55 118.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-c-py harmonic 107.54 90.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:p5-c-p5 harmonic 91.43 123.76 # SOURCE3 1
+ angle_coeff @angle:ca-cp-ca harmonic 67.11 118.33 # CORR 526
+ angle_coeff @angle:ca-cp-cp harmonic 64.09 121.13 # CORR 991
+ angle_coeff @angle:ca-cp-na harmonic 68.78 119.43 # SOURCE4 21 0.6591
+ angle_coeff @angle:ca-cp-nb harmonic 69.19 121.65 # SOURCE4 63 0.6564
+ angle_coeff @angle:cp-cp-cp harmonic 72.20 90.00 # SOURCE3 4 0.0000
+ angle_coeff @angle:cp-cp-cq harmonic 62.64 124.47 # CORR 10
+ angle_coeff @angle:cp-cp-nb harmonic 68.05 116.60 # SOURCE4 88 1.1887
+ angle_coeff @angle:pe-c-pe harmonic 93.89 113.77 # SOURCE3 1 0.0000
+ angle_coeff @angle:pf-c-pf harmonic 93.89 113.77 # SOURCE3 1 same_as_pe-c-pe
+ angle_coeff @angle:nb-cp-nb harmonic 71.31 125.72 # SOURCE4 5 0.6674
+ angle_coeff @angle:py-c-py harmonic 92.13 123.80 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-cq-ca harmonic 67.11 118.33 # CORR 526
+ angle_coeff @angle:ca-cq-cq harmonic 64.09 121.13 # CORR 991
+ angle_coeff @angle:ca-cq-nb harmonic 69.19 121.65 # SOURCE4 63 same as ca-cp-nb
+ angle_coeff @angle:cp-cq-cq harmonic 62.64 124.47 # CORR 10
+ angle_coeff @angle:cq-cq-cq harmonic 72.20 90.00 # SOURCE3 4 0.0000
+ angle_coeff @angle:cq-cq-nb harmonic 68.05 116.60 # SOURCE4 88 same as cp-cp-nb
+ angle_coeff @angle:s4-c-s4 harmonic 61.25 108.81 # SOURCE3 1
+ angle_coeff @angle:s6-c-s6 harmonic 59.39 115.75 # SOURCE3 1
+ angle_coeff @angle:sh-c-sh harmonic 62.47 115.33 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-c-s harmonic 65.01 120.40 # SOURCE3 2 1.2766
+ angle_coeff @angle:s-c-sh harmonic 62.29 122.76 # SOURCE4 11 1.5734
+ angle_coeff @angle:s-c-ss harmonic 61.88 125.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-c-ss harmonic 63.79 113.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:sx-c-sx harmonic 60.77 108.80 # SOURCE3 1 0.0000
+ angle_coeff @angle:sy-c-sy harmonic 59.54 115.78 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-cu-cx harmonic 58.56 148.21 # SOURCE4 6 1.8305
+ angle_coeff @angle:c-cu-cu harmonic 94.97 62.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:cu-cu-cx harmonic 100.97 50.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:cu-cu-ha harmonic 46.11 147.73 # SOURCE2 3 2.0950
+ angle_coeff @angle:cv-cv-cy harmonic 73.28 94.17 # SOURCE3 2 0.0000
+ angle_coeff @angle:cv-cv-ha harmonic 47.30 133.70 # SOURCE3 2 0.0000
+ angle_coeff @angle:cx-cv-cx harmonic 84.66 63.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:cy-cv-ha harmonic 42.89 132.14 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-cx-cx harmonic 63.10 120.66 # SOURCE4 9 0.9067
+ angle_coeff @angle:c2-cx-cx harmonic 62.33 120.54 # SOURCE4 51 2.2377
+ angle_coeff @angle:c2-cx-h1 harmonic 46.63 115.78 # SOURCE4 8 0.2332
+ angle_coeff @angle:c2-cx-hc harmonic 46.77 115.10 # SOURCE4 12 0.7463
+ angle_coeff @angle:c2-cx-os harmonic 67.14 116.17 # SOURCE4 14 1.2782
+ angle_coeff @angle:c3-cx-c3 harmonic 63.00 114.48 # SOURCE4 46 1.9627
+ angle_coeff @angle:c3-cx-cx harmonic 61.82 120.06 # SOURCE4 448 2.1467
+ angle_coeff @angle:c3-cx-h1 harmonic 45.87 115.42 # SOURCE4 89 1.1096
+ angle_coeff @angle:c3-cx-hc harmonic 46.12 114.16 # SOURCE4 85 1.1118
+ angle_coeff @angle:c3-cx-n3 harmonic 64.31 118.50 # SOURCE4 17 2.4897
+ angle_coeff @angle:c3-cx-os harmonic 66.57 115.50 # SOURCE4 161 1.3016
+ angle_coeff @angle:ca-cx-cx harmonic 61.86 122.18 # SOURCE4 65 1.6898
+ angle_coeff @angle:ca-cx-h1 harmonic 46.81 114.57 # SOURCE4 7 0.6498
+ angle_coeff @angle:ca-cx-hc harmonic 47.05 113.41 # SOURCE4 18 0.7843
+ angle_coeff @angle:ca-cx-oh harmonic 69.25 112.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-cx-os harmonic 66.42 118.50 # SOURCE4 6 0.7514
+ angle_coeff @angle:c-cx-c3 harmonic 62.91 116.93 # SOURCE4 18 1.8253
+ angle_coeff @angle:cc-cx-cx harmonic 62.90 119.31 # CORR 39
+ angle_coeff @angle:cc-cx-hc harmonic 47.37 113.84 # SOURCE4 15 0.6682
+ angle_coeff @angle:c-cx-cx harmonic 62.96 117.96 # SOURCE4 147 1.8483
+ angle_coeff @angle:cd-cx-cx harmonic 62.90 119.31 # CORR 39
+ angle_coeff @angle:c-cx-h1 harmonic 46.27 117.25 # SOURCE4 24 0.7935
+ angle_coeff @angle:c-cx-hc harmonic 46.42 116.53 # SOURCE4 36 1.2830
+ angle_coeff @angle:cl-cx-cl harmonic 54.42 114.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-cx-cx harmonic 56.53 120.10 # SOURCE4 15 0.5917
+ angle_coeff @angle:cl-cx-h1 harmonic 40.37 111.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-cx-hc harmonic 39.60 115.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:c-cx-os harmonic 67.25 115.59 # SOURCE4 36 0.8227
+ angle_coeff @angle:cu-cx-cu harmonic 91.53 54.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:cu-cx-cx harmonic 88.72 58.50 # SOURCE4 7 0.1333
+ angle_coeff @angle:cu-cx-hc harmonic 45.49 118.09 # SOURCE4 7 1.0126
+ angle_coeff @angle:cx-cx-cx harmonic 87.90 60.00 # SOURCE4 681 0.6259
+ angle_coeff @angle:cx-cx-cy harmonic 67.54 100.53 # SOURCE3 4 0.0000
+ angle_coeff @angle:cx-cx-f harmonic 64.53 117.93 # SOURCE4 7 1.1613
+ angle_coeff @angle:cx-cx-h1 harmonic 45.45 119.66 # SOURCE3 12 0.4529
+ angle_coeff @angle:cx-cx-hc harmonic 45.79 117.92 # SOURCE3 92 1.1927
+ angle_coeff @angle:cx-cx-hx harmonic 45.47 119.62 # SOURCE4 9 0.1118
+ angle_coeff @angle:cx-cx-n3 harmonic 91.17 59.59 # SOURCE4 154 0.3104
+ angle_coeff @angle:cx-cx-na harmonic 62.94 125.85 # SOURCE4 16 2.0385
+ angle_coeff @angle:cx-cx-nh harmonic 92.03 59.15 # SOURCE4 116 0.6758
+ angle_coeff @angle:cx-cx-os harmonic 93.61 59.07 # SOURCE4 306 0.5253
+ angle_coeff @angle:cy-cx-hc harmonic 43.98 125.43 # SOURCE3 2 0.0000
+ angle_coeff @angle:f-cx-f harmonic 70.61 106.90 # SOURCE2 2 1.4000
+ angle_coeff @angle:f-cx-h1 harmonic 50.35 111.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-cx-hc harmonic 50.22 112.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:h1-cx-h1 harmonic 38.38 115.45 # SOURCE4 230 0.3302
+ angle_coeff @angle:h1-cx-n3 harmonic 47.97 116.43 # SOURCE4 173 1.4531
+ angle_coeff @angle:h1-cx-n harmonic 49.06 115.42 # SOURCE4 12 1.0443
+ angle_coeff @angle:h1-cx-na harmonic 49.96 108.67 # SOURCE4 8 1.6134
+ angle_coeff @angle:h1-cx-nh harmonic 48.50 116.32 # SOURCE4 151 1.0310
+ angle_coeff @angle:h1-cx-os harmonic 50.01 115.17 # SOURCE3 8 0.0226
+ angle_coeff @angle:h2-cx-h2 harmonic 37.87 119.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:h2-cx-n2 harmonic 47.55 117.18 # SOURCE3 4 0.0000
+ angle_coeff @angle:hc-cx-hc harmonic 38.58 114.47 # SOURCE3 19 0.3295
+ angle_coeff @angle:hc-cx-os harmonic 50.25 114.10 # SOURCE2 1 0.0000
+ angle_coeff @angle:hx-cx-n4 harmonic 49.89 114.47 # SOURCE4 8 0.1059
+ angle_coeff @angle:n2-cx-n2 harmonic 102.06 50.16 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-cx-oh harmonic 70.16 119.75 # SOURCE3 2 0.0000
+ angle_coeff @angle:n-cx-os harmonic 92.71 65.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-cx-oh harmonic 76.67 107.85 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-cx-os harmonic 71.64 118.12 # SOURCE3 4 1.3581
+ angle_coeff @angle:os-cx-os harmonic 70.90 115.84 # SOURCE4 7 2.0760
+ angle_coeff @angle:c2-cy-cy harmonic 66.57 100.40 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-cy-c3 harmonic 63.19 111.58 # SOURCE4 15 1.0060
+ angle_coeff @angle:c3-cy-cy harmonic 60.76 118.70 # SOURCE4 293 1.8510
+ angle_coeff @angle:c3-cy-h1 harmonic 46.16 111.77 # SOURCE4 119 0.4412
+ angle_coeff @angle:c3-cy-hc harmonic 46.21 111.55 # SOURCE3 5 0.6276
+ angle_coeff @angle:c3-cy-n3 harmonic 65.28 112.92 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-cy-n harmonic 68.32 104.05 # SOURCE4 122 0.5745
+ angle_coeff @angle:c3-cy-os harmonic 66.99 111.96 # SOURCE4 11 1.0668
+ angle_coeff @angle:c-cy-c3 harmonic 61.78 116.72 # SOURCE4 129 0.5236
+ angle_coeff @angle:cc-cy-cy harmonic 60.58 121.17 # CORR 19
+ angle_coeff @angle:c-cy-cy harmonic 71.81 84.99 # SOURCE4 263 0.6952
+ angle_coeff @angle:cd-cy-cy harmonic 60.58 121.17 # CORR 19
+ angle_coeff @angle:ce-cy-h2 harmonic 45.50 117.25 # SOURCE4 17 0.5351
+ angle_coeff @angle:ce-cy-n harmonic 74.69 88.02 # SOURCE4 14 0.1416
+ angle_coeff @angle:ce-cy-ss harmonic 58.47 121.33 # SOURCE4 13 0.1599
+ angle_coeff @angle:c-cy-h1 harmonic 45.89 113.10 # SOURCE4 71 0.7655
+ angle_coeff @angle:c-cy-hc harmonic 45.75 113.85 # SOURCE3 8 0.2067
+ angle_coeff @angle:cl-cy-cy harmonic 57.58 112.00 # SOURCE3 2 0.0000
+ angle_coeff @angle:cl-cy-h1 harmonic 40.98 106.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-cy-hc harmonic 39.62 114.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:c-cy-n harmonic 64.32 117.39 # SOURCE4 70 1.0742
+ angle_coeff @angle:c-cy-os harmonic 66.27 114.42 # SOURCE4 6 1.2052
+ angle_coeff @angle:cv-cy-cy harmonic 71.46 86.67 # SOURCE4 6 1.1600
+ angle_coeff @angle:cv-cy-hc harmonic 46.06 114.47 # SOURCE4 7 0.4307
+ angle_coeff @angle:cx-cy-cy harmonic 66.08 101.23 # SOURCE3 4 0.0000
+ angle_coeff @angle:cx-cy-hc harmonic 45.25 118.30 # SOURCE2 3 5.7799
+ angle_coeff @angle:cy-cy-cy harmonic 70.16 87.61 # SOURCE3 32 1.5407
+ angle_coeff @angle:cy-cy-f harmonic 64.55 112.87 # SOURCE4 13 1.6772
+ angle_coeff @angle:cy-cy-h1 harmonic 44.87 114.84 # SOURCE3 20 2.5651
+ angle_coeff @angle:cy-cy-h2 harmonic 44.51 116.77 # SOURCE4 83 0.8683
+ angle_coeff @angle:cy-cy-hc harmonic 44.82 115.14 # SOURCE3 114 0.8364
+ angle_coeff @angle:cy-cy-n3 harmonic 73.47 87.58 # SOURCE3 4 0.6135
+ angle_coeff @angle:cy-cy-n harmonic 65.22 112.13 # SOURCE3 31 2.0700
+ angle_coeff @angle:cy-cy-na harmonic 63.12 119.70 # SOURCE4 9 0.3333
+ angle_coeff @angle:cy-cy-oh harmonic 66.00 114.19 # SOURCE3 4 0.0000
+ angle_coeff @angle:cy-cy-os harmonic 66.41 111.77 # SOURCE4 18 2.1334
+ angle_coeff @angle:cy-cy-s6 harmonic 58.93 117.46 # SOURCE4 7 1.2423
+ angle_coeff @angle:cy-cy-ss harmonic 58.83 118.18 # SOURCE4 55 0.9860
+ angle_coeff @angle:h1-cy-h1 harmonic 39.01 109.72 # SOURCE3 6 0.8087
+ angle_coeff @angle:h1-cy-n3 harmonic 48.21 113.36 # SOURCE3 6 1.4509
+ angle_coeff @angle:h1-cy-n harmonic 49.10 111.18 # SOURCE4 141 0.5848
+ angle_coeff @angle:h1-cy-oh harmonic 50.89 111.49 # SOURCE3 2 0.0000
+ angle_coeff @angle:h1-cy-os harmonic 50.53 110.94 # SOURCE3 8 0.6522
+ angle_coeff @angle:h1-cy-s6 harmonic 41.05 112.57 # SOURCE4 5 1.2943
+ angle_coeff @angle:h2-cy-n harmonic 48.42 114.44 # SOURCE4 88 0.7114
+ angle_coeff @angle:h2-cy-os harmonic 50.97 109.19 # SOURCE4 6 0.4162
+ angle_coeff @angle:h2-cy-s6 harmonic 42.11 106.85 # SOURCE4 6 0.3975
+ angle_coeff @angle:h2-cy-ss harmonic 41.64 109.73 # SOURCE4 92 0.7424
+ angle_coeff @angle:hc-cy-hc harmonic 39.24 109.04 # SOURCE3 28 0.5962
+ angle_coeff @angle:n-cy-os harmonic 71.62 107.50 # SOURCE4 9 2.3773
+ angle_coeff @angle:n-cy-s6 harmonic 65.24 103.45 # SOURCE4 6 0.7197
+ angle_coeff @angle:n-cy-ss harmonic 64.81 105.12 # SOURCE4 69 0.3987
+ angle_coeff @angle:nh-cz-nh harmonic 72.97 120.17 # SOURCE4 26 0.3964
+ angle_coeff @angle:br-n1-c1 harmonic 51.10 180.00 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-c1 harmonic 64.91 179.92 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-c2 harmonic 60.25 177.73 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-c3 harmonic 54.83 180.00 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-ca harmonic 56.97 179.99 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-cl harmonic 50.10 179.95 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-f harmonic 55.86 179.96 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-hn harmonic 45.62 179.98 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-i harmonic 46.23 179.95 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-n1 harmonic 66.89 180.00 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-n2 harmonic 65.70 171.56 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-n3 harmonic 60.69 175.59 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-n4 harmonic 59.68 179.69 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-na harmonic 59.95 180.00 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-nh harmonic 60.88 176.35 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-o harmonic 62.62 179.95 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-oh harmonic 62.88 174.31 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-os harmonic 62.15 176.61 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-p2 harmonic 68.11 172.83 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-p3 harmonic 68.68 173.51 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-p4 harmonic 67.87 173.64 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-p5 harmonic 71.49 177.28 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-s2 harmonic 60.33 178.11 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-s4 harmonic 55.20 169.60 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-s harmonic 53.31 179.99 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-s6 harmonic 61.81 175.92 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-sh harmonic 55.72 174.25 # HF/6-31G* 1
+ angle_coeff @angle:c1-n1-ss harmonic 55.44 176.06 # HF/6-31G* 1
+ angle_coeff @angle:c2-n1-n1 harmonic 61.58 180.00 # HF/6-31G* 1
+ angle_coeff @angle:c2-n1-o harmonic 73.09 116.94 # SOURCE3 2 0.0060
+ angle_coeff @angle:c2-n1-s harmonic 64.71 118.00 # SOURCE3 2 0.0121
+ angle_coeff @angle:c3-n1-n1 harmonic 56.30 180.00 # HF/6-31G* 1
+ angle_coeff @angle:ca-n1-n1 harmonic 58.54 180.00 # HF/6-31G* 1
+ angle_coeff @angle:ce-n1-o harmonic 71.28 122.40 # CORR 2
+ angle_coeff @angle:ce-n1-s harmonic 64.84 117.34 # CORR 2
+ angle_coeff @angle:cf-n1-o harmonic 71.28 122.40 # CORR 2
+ angle_coeff @angle:cf-n1-s harmonic 64.84 117.34 # CORR 2
+ angle_coeff @angle:cl-n1-n1 harmonic 51.37 179.94 # HF/6-31G* 1
+ angle_coeff @angle:f-n1-n1 harmonic 57.39 179.93 # HF/6-31G* 1
+ angle_coeff @angle:hn-n1-n1 harmonic 47.14 179.91 # HF/6-31G* 1
+ angle_coeff @angle:i-n1-n1 harmonic 47.26 179.94 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-n1 harmonic 68.97 179.97 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-n2 harmonic 67.65 171.57 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-n3 harmonic 62.49 175.09 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-n4 harmonic 61.31 179.91 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-na harmonic 61.63 179.97 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-nh harmonic 62.66 176.00 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-o harmonic 64.43 179.94 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-oh harmonic 64.78 173.77 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-os harmonic 64.01 176.12 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-p2 harmonic 69.42 174.71 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-p3 harmonic 70.24 174.27 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-s harmonic 54.64 180.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-n1-sh harmonic 57.01 175.07 # HF/6-31G* 1
+ angle_coeff @angle:n1-n1-ss harmonic 56.92 175.61 # HF/6-31G* 1
+ angle_coeff @angle:o-n1-p2 harmonic 84.67 116.05 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n1-s harmonic 80.34 119.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n2-br harmonic 63.89 106.60 # SOURCE3 1
+ angle_coeff @angle:br-n2-c2 harmonic 59.13 112.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n2-n2 harmonic 61.08 110.42 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n2-o harmonic 60.10 114.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n2-p2 harmonic 80.05 111.03 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n2-s harmonic 62.40 115.78 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-n2-c1 harmonic 74.41 121.10 # SOURCE3 1
+ angle_coeff @angle:c1-n2-c3 harmonic 58.67 151.88 # SOURCE3 4 15.8282
+ angle_coeff @angle:c1-n2-cl harmonic 55.36 118.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:c1-n2-hn harmonic 51.47 126.50 # SOURCE2 3 7.6267
+ angle_coeff @angle:c1-n2-n2 harmonic 76.75 113.40 # SOURCE3 1
+ angle_coeff @angle:c1-n2-o harmonic 79.20 113.59 # SOURCE3 1
+ angle_coeff @angle:c1-n2-p2 harmonic 84.76 119.57 # SOURCE3 1
+ angle_coeff @angle:c1-n2-s harmonic 69.80 117.67 # SOURCE3 1
+ angle_coeff @angle:c2-n2-c2 harmonic 70.76 118.18 # SOURCE3 1
+ angle_coeff @angle:c2-n2-c3 harmonic 66.13 115.30 # SOURCE3 8 4.2940
+ angle_coeff @angle:c2-n2-ca harmonic 69.83 119.94 # SOURCE3 1
+ angle_coeff @angle:c2-n2-cl harmonic 56.69 112.64 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n2-f harmonic 68.30 108.14 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n2-hn harmonic 52.63 110.33 # SOURCE3 9 0.6498
+ angle_coeff @angle:c2-n2-i harmonic 51.86 114.74 # SOURCE3 2 0.0139
+ angle_coeff @angle:c2-n2-n1 harmonic 75.45 115.09 # HF/6-31G* 1
+ angle_coeff @angle:c2-n2-n2 harmonic 77.94 103.59 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-n2-n3 harmonic 71.34 118.14 # SOURCE3 1
+ angle_coeff @angle:c2-n2-n4 harmonic 62.39 112.22 # SOURCE3 3 0.0406
+ angle_coeff @angle:c2-n2-n harmonic 70.16 117.98 # SOURCE4 11 0.9019
+ angle_coeff @angle:c2-n2-na harmonic 70.35 117.58 # SOURCE3 8 1.6671
+ angle_coeff @angle:c2-n2-nh harmonic 70.71 117.61 # SOURCE3 6 3.2642
+ angle_coeff @angle:c2-n2-no harmonic 64.22 111.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n2-o harmonic 75.47 116.94 # SOURCE3 1
+ angle_coeff @angle:c2-n2-oh harmonic 72.08 110.89 # SOURCE4 22 1.2709
+ angle_coeff @angle:c2-n2-os harmonic 71.83 110.51 # SOURCE4 13 0.7888
+ angle_coeff @angle:c2-n2-p2 harmonic 85.03 116.00 # SOURCE3 1
+ angle_coeff @angle:c2-n2-p3 harmonic 77.54 119.30 # SOURCE3 3 2.8489
+ angle_coeff @angle:c2-n2-p4 harmonic 79.28 118.77 # SOURCE3 1
+ angle_coeff @angle:c2-n2-s4 harmonic 68.12 112.29 # SOURCE3 1
+ angle_coeff @angle:c2-n2-s6 harmonic 68.85 116.24 # SOURCE3 1
+ angle_coeff @angle:c2-n2-s harmonic 68.67 118.00 # SOURCE3 1
+ angle_coeff @angle:c2-n2-sh harmonic 63.09 115.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n2-ss harmonic 64.97 118.04 # SOURCE3 4 2.2804
+ angle_coeff @angle:c3-n2-c3 harmonic 63.76 110.70 # SOURCE3 1
+ angle_coeff @angle:c3-n2-ca harmonic 65.97 114.95 # SOURCE4 5 0.9744
+ angle_coeff @angle:c3-n2-ce harmonic 65.37 118.53 # CORR 123
+ angle_coeff @angle:c3-n2-cf harmonic 65.37 118.53 # CORR 123
+ angle_coeff @angle:c3-n2-hn harmonic 45.18 118.40 # SOURCE3 1
+ angle_coeff @angle:c3-n2-n1 harmonic 68.64 116.20 # SOURCE4 12 0.5407
+ angle_coeff @angle:c3-n2-n2 harmonic 69.29 111.18 # SOURCE3 7 0.4349
+ angle_coeff @angle:c3-n2-nh harmonic 68.08 109.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n2-o harmonic 70.29 112.40 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-n2-p2 harmonic 82.11 114.21 # SOURCE3 2 2.2772
+ angle_coeff @angle:c3-n2-s6 harmonic 66.28 113.84 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n2-s harmonic 65.70 116.72 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-n2-ca harmonic 71.79 112.20 # SOURCE3 1
+ angle_coeff @angle:ca-n2-hn harmonic 50.01 120.00 # SOURCE3 1
+ angle_coeff @angle:ca-n2-n2 harmonic 74.00 113.53 # SOURCE3 1
+ angle_coeff @angle:ca-n2-o harmonic 75.26 116.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:ca-n2-p2 harmonic 84.03 118.11 # SOURCE3 1
+ angle_coeff @angle:ca-n2-s harmonic 67.84 120.11 # SOURCE3 1
+ angle_coeff @angle:c-n2-c2 harmonic 66.22 120.97 # SOURCE3 1
+ angle_coeff @angle:c-n2-c harmonic 62.71 123.80 # SOURCE3 1
+ angle_coeff @angle:c-n2-ca harmonic 66.05 120.50 # SOURCE3 1
+ angle_coeff @angle:cc-n2-cl harmonic 55.90 115.79 # CORR 2
+ angle_coeff @angle:cc-n2-hn harmonic 52.42 110.72 # CORR 20
+ angle_coeff @angle:cc-n2-na harmonic 73.01 108.92 # SOURCE4 9 1.6245
+ angle_coeff @angle:cc-n2-nh harmonic 70.37 118.47 # SOURCE4 6 1.7995
+ angle_coeff @angle:cd-n2-cl harmonic 55.90 115.79 # CORR 2
+ angle_coeff @angle:cd-n2-hn harmonic 52.42 110.72 # CORR 20
+ angle_coeff @angle:ce-n2-hn harmonic 52.74 111.05 # CORR 69
+ angle_coeff @angle:ce-n2-n harmonic 70.35 118.04 # CORR 101
+ angle_coeff @angle:ce-n2-nh harmonic 70.64 118.57 # CORR 54
+ angle_coeff @angle:ce-n2-o harmonic 77.37 112.16 # SOURCE3 1
+ angle_coeff @angle:ce-n2-oh harmonic 71.48 113.38 # CORR 37
+ angle_coeff @angle:ce-n2-os harmonic 71.23 112.97 # CORR 40
+ angle_coeff @angle:ce-n2-s harmonic 69.30 116.28 # SOURCE3 1
+ angle_coeff @angle:cf-n2-hn harmonic 52.74 111.05 # CORR 69
+ angle_coeff @angle:cf-n2-n harmonic 70.35 118.04 # CORR 101
+ angle_coeff @angle:cf-n2-nh harmonic 70.64 118.57 # CORR 54
+ angle_coeff @angle:cf-n2-o harmonic 77.37 112.16 # SOURCE3 1 same_as_ce-n2-o
+ angle_coeff @angle:cf-n2-oh harmonic 71.48 113.38 # CORR 37
+ angle_coeff @angle:cf-n2-os harmonic 71.23 112.97 # CORR 40
+ angle_coeff @angle:cf-n2-s harmonic 69.30 116.28 # SOURCE3 1 same_as_ce-n2-s
+ angle_coeff @angle:cl-n2-n1 harmonic 59.29 108.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-n2-n2 harmonic 58.70 110.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-n2-o harmonic 58.23 114.03 # SOURCE3 1
+ angle_coeff @angle:cl-n2-p2 harmonic 73.98 112.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-n2-s harmonic 58.50 115.77 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-n2-n2 harmonic 90.46 64.92 # SOURCE3 2 0.0000
+ angle_coeff @angle:f-n2-n2 harmonic 68.29 114.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-n2-o harmonic 71.17 110.10 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-n2-p2 harmonic 84.30 107.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-n2-s harmonic 67.14 110.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n2-hn harmonic 38.61 120.00 # SOURCE3 1
+ angle_coeff @angle:hn-n2-n1 harmonic 55.33 114.10 # SOURCE2 1 0.0000
+ angle_coeff @angle:hn-n2-n2 harmonic 55.84 105.01 # SOURCE3 19 1.5183
+ angle_coeff @angle:hn-n2-ne harmonic 54.69 108.56 # SOURCE3 29 5.5708
+ angle_coeff @angle:hn-n2-nf harmonic 54.69 108.56 # SOURCE3 29 same_as_hn-n2-ne
+ angle_coeff @angle:hn-n2-o harmonic 57.61 107.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n2-p2 harmonic 58.61 112.09 # SOURCE3 18 4.0663
+ angle_coeff @angle:hn-n2-p4 harmonic 54.50 111.33 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n2-p5 harmonic 56.32 122.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n2-pe harmonic 61.28 111.41 # SOURCE3 20 4.9895
+ angle_coeff @angle:hn-n2-pf harmonic 61.28 111.41 # SOURCE3 20 same_as_hn-n2-pe
+ angle_coeff @angle:hn-n2-s2 harmonic 48.34 115.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:hn-n2-s4 harmonic 46.34 111.21 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n2-s harmonic 49.11 108.17 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n2-s6 harmonic 47.82 112.59 # SOURCE3 2 0.0000
+ angle_coeff @angle:i-n2-n2 harmonic 53.71 111.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-n2-o harmonic 52.33 116.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-n2-p2 harmonic 72.31 113.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-n2-s harmonic 56.35 116.85 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-n2-n1 harmonic 80.82 112.00 # HF/6-31G* 1
+ angle_coeff @angle:n2-n2-n1 harmonic 62.28 180.00 # dac_for_azides 0
+ angle_coeff @angle:n2-n2-n2 harmonic 78.20 109.49 # SOURCE3 2 0.0000
+ angle_coeff @angle:n2-n2-n3 harmonic 76.59 108.88 # SOURCE3 1
+ angle_coeff @angle:n2-n2-n4 harmonic 65.78 106.45 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n2-na harmonic 74.18 112.23 # SOURCE3 1
+ angle_coeff @angle:n2-n2-nh harmonic 74.76 111.70 # SOURCE3 5 0.3475
+ angle_coeff @angle:n2-n2-no harmonic 67.68 105.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n2-o harmonic 80.17 110.43 # SOURCE3 1
+ angle_coeff @angle:n2-n2-oh harmonic 74.02 111.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n2-os harmonic 74.69 108.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n2-p2 harmonic 90.07 109.15 # SOURCE3 1
+ angle_coeff @angle:n2-n2-p3 harmonic 81.73 113.05 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n2-p4 harmonic 81.37 118.77 # SOURCE3 1
+ angle_coeff @angle:n2-n2-p5 harmonic 89.80 110.46 # SOURCE3 1
+ angle_coeff @angle:n2-n2-s4 harmonic 71.60 107.30 # SOURCE3 1
+ angle_coeff @angle:n2-n2-s6 harmonic 72.35 111.25 # SOURCE3 1
+ angle_coeff @angle:n2-n2-s harmonic 71.24 115.91 # SOURCE3 1
+ angle_coeff @angle:n2-n2-sh harmonic 66.00 111.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n2-ss harmonic 68.46 112.14 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-n2-n3 harmonic 72.95 115.07 # SOURCE3 1
+ angle_coeff @angle:n3-n2-o harmonic 76.86 114.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:n3-n2-p2 harmonic 86.69 115.34 # SOURCE3 1
+ angle_coeff @angle:n3-n2-s harmonic 69.96 117.13 # SOURCE3 1
+ angle_coeff @angle:n4-n2-n4 harmonic 59.97 106.70 # SOURCE3 1
+ angle_coeff @angle:n4-n2-o harmonic 64.86 112.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-n2-p2 harmonic 79.54 113.07 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-n2-s harmonic 62.44 118.50 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-n2-na harmonic 73.47 107.00 # SOURCE3 1
+ angle_coeff @angle:na-n2-o harmonic 75.74 113.09 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-n2-p2 harmonic 84.58 119.16 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-n2-s harmonic 68.94 118.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-n2-nh harmonic 74.13 113.09 # CORR 12
+ angle_coeff @angle:ne-n2-o harmonic 79.97 110.31 # SOURCE3 1
+ angle_coeff @angle:ne-n2-s harmonic 71.04 116.22 # SOURCE3 1
+ angle_coeff @angle:nf-n2-nh harmonic 74.13 113.09 # CORR 12
+ angle_coeff @angle:nf-n2-o harmonic 79.97 110.31 # SOURCE3 1 same_as_ne-n2-o
+ angle_coeff @angle:nf-n2-s harmonic 71.04 116.22 # SOURCE3 1 same_as_ne-n2-s
+ angle_coeff @angle:nh-n2-nh harmonic 69.67 121.20 # SOURCE3 1
+ angle_coeff @angle:nh-n2-o harmonic 76.02 113.60 # SOURCE4 13 1.0945
+ angle_coeff @angle:nh-n2-p2 harmonic 84.93 118.83 # SOURCE3 2 0.1024
+ angle_coeff @angle:nh-n2-s harmonic 69.56 116.90 # SOURCE3 2 0.2276
+ angle_coeff @angle:n-n2-n2 harmonic 75.48 108.18 # SOURCE4 8 0.3496
+ angle_coeff @angle:n-n2-o harmonic 74.99 115.10 # SOURCE4 31 0.2796
+ angle_coeff @angle:no-n2-no harmonic 62.81 103.70 # SOURCE3 1
+ angle_coeff @angle:no-n2-o harmonic 70.40 100.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-n2-p2 harmonic 81.32 111.95 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-n2-p2 harmonic 85.20 117.30 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-n2-s harmonic 69.64 115.74 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-n2-oh harmonic 74.84 101.70 # SOURCE3 1
+ angle_coeff @angle:oh-n2-p2 harmonic 86.05 115.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-n2-s harmonic 69.52 116.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-n2-o harmonic 81.02 115.37 # SOURCE3 1
+ angle_coeff @angle:o-n2-oh harmonic 75.56 112.15 # SOURCE2 2 1.4500
+ angle_coeff @angle:o-n2-os harmonic 75.73 110.35 # SOURCE3 2 0.0042
+ angle_coeff @angle:o-n2-p2 harmonic 88.65 116.08 # SOURCE3 1
+ angle_coeff @angle:o-n2-p3 harmonic 82.37 113.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-n2-p4 harmonic 85.23 110.61 # SOURCE3 1
+ angle_coeff @angle:o-n2-p5 harmonic 91.73 109.11 # SOURCE3 1
+ angle_coeff @angle:o-n2-pe harmonic 85.18 134.56 # SOURCE3 1
+ angle_coeff @angle:o-n2-pf harmonic 85.18 134.56 # SOURCE3 1 same_as_o-n2-pe
+ angle_coeff @angle:o-n2-s4 harmonic 72.12 108.91 # SOURCE3 1
+ angle_coeff @angle:o-n2-s6 harmonic 73.56 111.34 # SOURCE3 1
+ angle_coeff @angle:o-n2-s harmonic 72.09 117.18 # SOURCE3 1
+ angle_coeff @angle:o-n2-sh harmonic 65.55 114.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-n2-os harmonic 71.25 110.29 # SOURCE3 1
+ angle_coeff @angle:os-n2-p2 harmonic 87.70 110.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-n2-ss harmonic 68.39 115.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-n2-s harmonic 70.47 112.23 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n2-p2 harmonic 107.12 116.80 # SOURCE3 1
+ angle_coeff @angle:p2-n2-p3 harmonic 98.43 124.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n2-p4 harmonic 98.27 128.37 # SOURCE3 1
+ angle_coeff @angle:p2-n2-p5 harmonic 104.38 123.47 # SOURCE3 1
+ angle_coeff @angle:p2-n2-s4 harmonic 86.26 112.10 # SOURCE3 1
+ angle_coeff @angle:p2-n2-s6 harmonic 86.44 115.70 # SOURCE3 1
+ angle_coeff @angle:p2-n2-s harmonic 85.91 117.84 # SOURCE3 1
+ angle_coeff @angle:p2-n2-sh harmonic 80.45 118.45 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n2-ss harmonic 82.01 120.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-n2-p3 harmonic 96.00 120.40 # SOURCE3 1
+ angle_coeff @angle:p3-n2-s harmonic 80.08 120.86 # SOURCE3 1 0.0000
+ angle_coeff @angle:p4-n2-s harmonic 77.83 131.84 # SOURCE3 1
+ angle_coeff @angle:p5-n2-p5 harmonic 105.81 120.60 # SOURCE3 1
+ angle_coeff @angle:p5-n2-s harmonic 85.34 119.89 # SOURCE3 1
+ angle_coeff @angle:pe-n2-s harmonic 88.59 115.73 # SOURCE3 1
+ angle_coeff @angle:pf-n2-s harmonic 88.59 115.73 # SOURCE3 1 same_as_pe-n2-s
+ angle_coeff @angle:s4-n2-s4 harmonic 66.00 119.18 # SOURCE3 1
+ angle_coeff @angle:s4-n2-s6 harmonic 67.18 119.18 # SOURCE3 1
+ angle_coeff @angle:s6-n2-s6 harmonic 68.49 119.18 # SOURCE3 1
+ angle_coeff @angle:sh-n2-sh harmonic 59.95 123.93 # SOURCE3 1
+ angle_coeff @angle:sh-n2-ss harmonic 61.33 123.93 # SOURCE3 1
+ angle_coeff @angle:s-n2-s harmonic 68.47 120.88 # SOURCE3 1
+ angle_coeff @angle:s-n2-s4 harmonic 69.20 113.00 # SOURCE3 1
+ angle_coeff @angle:s-n2-s6 harmonic 68.60 119.61 # SOURCE3 1
+ angle_coeff @angle:s-n2-sh harmonic 63.58 122.05 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-n2-ss harmonic 66.58 118.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-n2-ss harmonic 62.92 123.93 # SOURCE3 1
+ angle_coeff @angle:br-n3-br harmonic 66.54 107.15 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n3-c3 harmonic 62.70 106.93 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-n3-c1 harmonic 64.09 123.34 # SOURCE3 1
+ angle_coeff @angle:c1-n3-f harmonic 68.22 104.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:c1-n3-hn harmonic 47.74 118.31 # SOURCE3 1
+ angle_coeff @angle:c1-n3-o harmonic 70.01 116.63 # SOURCE3 1
+ angle_coeff @angle:c2-n3-c2 harmonic 66.22 124.68 # SOURCE3 1
+ angle_coeff @angle:c2-n3-hn harmonic 49.11 119.38 # SOURCE3 1
+ angle_coeff @angle:c3-n3-c3 harmonic 64.01 110.90 # SOURCE3 40 2.3048
+ angle_coeff @angle:c3-n3-cl harmonic 57.82 107.23 # SOURCE3 3 0.3673
+ angle_coeff @angle:c3-n3-cx harmonic 62.45 116.32 # SOURCE4 24 0.5119
+ angle_coeff @angle:c3-n3-cy harmonic 61.69 118.26 # SOURCE4 14 0.8788
+ angle_coeff @angle:c3-n3-f harmonic 66.81 103.13 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-n3-hn harmonic 47.13 109.92 # SOURCE3 120 2.2590
+ angle_coeff @angle:c3-n3-i harmonic 56.98 108.48 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-n3-n2 harmonic 66.23 118.75 # SOURCE2 2 2.6500
+ angle_coeff @angle:c3-n3-n3 harmonic 66.76 108.15 # SOURCE3 15 1.3999
+ angle_coeff @angle:c3-n3-n4 harmonic 67.18 109.65 # SOURCE3 3 0.1146
+ angle_coeff @angle:c3-n3-n harmonic 66.67 111.75 # SOURCE4 50 1.6777
+ angle_coeff @angle:c3-n3-nh harmonic 66.37 111.89 # SOURCE4 21 1.3006
+ angle_coeff @angle:c3-n3-no harmonic 66.02 111.27 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n3-o harmonic 68.68 113.31 # SOURCE3 5 8.9081
+ angle_coeff @angle:c3-n3-oh harmonic 69.07 106.14 # SOURCE4 14 1.1040
+ angle_coeff @angle:c3-n3-os harmonic 68.48 104.95 # SOURCE4 9 0.9687
+ angle_coeff @angle:c3-n3-p3 harmonic 75.79 121.93 # SOURCE3 3 5.6009
+ angle_coeff @angle:c3-n3-p5 harmonic 78.53 119.81 # SOURCE4 58 1.8367
+ angle_coeff @angle:c3-n3-s4 harmonic 61.45 112.91 # SOURCE3 3 0.8983
+ angle_coeff @angle:c3-n3-s6 harmonic 63.67 116.57 # SOURCE4 73 1.8772
+ angle_coeff @angle:c3-n3-s harmonic 61.46 110.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n3-sh harmonic 62.06 112.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n3-ss harmonic 61.59 116.01 # SOURCE3 3 1.1944
+ angle_coeff @angle:c3-n3-sy harmonic 62.43 115.27 # SOURCE4 108 1.7647
+ angle_coeff @angle:cl-n3-cl harmonic 53.49 108.28 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-n3-hn harmonic 39.61 104.39 # SOURCE3 2 0.0000
+ angle_coeff @angle:cl-n3-n3 harmonic 59.29 107.65 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-n3-cx harmonic 86.39 60.71 # SOURCE4 57 0.2359
+ angle_coeff @angle:cx-n3-hn harmonic 47.15 109.57 # SOURCE4 26 0.7439
+ angle_coeff @angle:cx-n3-p5 harmonic 78.66 119.32 # SOURCE4 71 1.1948
+ angle_coeff @angle:cx-n3-py harmonic 76.73 121.75 # SOURCE4 10 1.0295
+ angle_coeff @angle:cy-n3-cy harmonic 70.04 90.87 # SOURCE4 10 0.5777
+ angle_coeff @angle:cy-n3-hn harmonic 46.25 112.12 # SOURCE4 9 1.9058
+ angle_coeff @angle:f-n3-f harmonic 67.71 102.22 # SOURCE2 4 0.7562
+ angle_coeff @angle:f-n3-hn harmonic 50.78 99.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:hn-n3-hn harmonic 41.30 107.13 # SOURCE3 44 1.9687
+ angle_coeff @angle:hn-n3-i harmonic 35.43 109.98 # SOURCE3 2 0.0000
+ angle_coeff @angle:hn-n3-n1 harmonic 52.05 110.17 # HF/6-31G* 1
+ angle_coeff @angle:hn-n3-n2 harmonic 51.40 115.94 # SOURCE3 1
+ angle_coeff @angle:hn-n3-n3 harmonic 50.16 103.98 # SOURCE3 18 1.8593
+ angle_coeff @angle:hn-n3-n4 harmonic 50.87 106.40 # SOURCE3 5 0.5863
+ angle_coeff @angle:hn-n3-n harmonic 51.02 106.57 # SOURCE3 6 1.0767
+ angle_coeff @angle:hn-n3-na harmonic 50.32 107.89 # SOURCE3 1
+ angle_coeff @angle:hn-n3-nh harmonic 50.44 107.39 # SOURCE3 11 1.6294
+ angle_coeff @angle:hn-n3-no harmonic 50.25 104.78 # SOURCE3 3 1.1126
+ angle_coeff @angle:hn-n3-o harmonic 53.14 113.32 # SOURCE3 3 4.3945
+ angle_coeff @angle:hn-n3-oh harmonic 53.08 101.11 # SOURCE3 4 0.9921
+ angle_coeff @angle:hn-n3-os harmonic 51.67 100.92 # SOURCE3 6 0.7295
+ angle_coeff @angle:hn-n3-p2 harmonic 54.24 120.26 # SOURCE3 1
+ angle_coeff @angle:hn-n3-p3 harmonic 52.93 116.89 # SOURCE3 9 3.8816
+ angle_coeff @angle:hn-n3-p4 harmonic 54.97 113.05 # SOURCE3 2 0.0000
+ angle_coeff @angle:hn-n3-p5 harmonic 56.04 113.68 # SOURCE3 6 2.1781
+ angle_coeff @angle:hn-n3-s4 harmonic 42.47 108.93 # SOURCE3 7 1.7819
+ angle_coeff @angle:hn-n3-s harmonic 41.53 109.47 # SOURCE3 1
+ angle_coeff @angle:hn-n3-s6 harmonic 46.06 109.33 # SOURCE4 86 0.9610
+ angle_coeff @angle:hn-n3-sh harmonic 43.12 108.67 # SOURCE3 3 2.5025
+ angle_coeff @angle:hn-n3-ss harmonic 43.36 109.85 # SOURCE3 5 2.3215
+ angle_coeff @angle:hn-n3-sy harmonic 44.15 109.49 # SOURCE4 278 0.7897
+ angle_coeff @angle:i-n3-i harmonic 60.04 111.27 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-n3-n1 harmonic 72.40 113.21 # HF/6-31G* 1
+ angle_coeff @angle:n2-n3-n2 harmonic 71.82 118.73 # SOURCE3 1
+ angle_coeff @angle:n2-n3-o harmonic 74.13 114.91 # SOURCE3 1
+ angle_coeff @angle:n3-n3-n3 harmonic 69.57 105.71 # SOURCE3 3 0.3561
+ angle_coeff @angle:n4-n3-n4 harmonic 69.04 113.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-n3-nh harmonic 70.91 107.14 # SOURCE3 1
+ angle_coeff @angle:na-n3-na harmonic 69.21 112.00 # SOURCE3 1
+ angle_coeff @angle:nh-n3-nh harmonic 70.75 107.15 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-n3-n harmonic 70.25 110.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-n3-no harmonic 67.04 115.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-n3-oh harmonic 72.79 107.18 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-n3-o harmonic 71.89 126.14 # SOURCE3 1
+ angle_coeff @angle:o-n3-p2 harmonic 84.34 117.02 # SOURCE3 1
+ angle_coeff @angle:o-n3-p4 harmonic 83.38 116.65 # SOURCE3 1
+ angle_coeff @angle:o-n3-s4 harmonic 64.56 114.09 # SOURCE3 1
+ angle_coeff @angle:o-n3-s6 harmonic 68.82 113.80 # SOURCE3 1
+ angle_coeff @angle:o-n3-s harmonic 62.04 119.81 # SOURCE3 1
+ angle_coeff @angle:os-n3-os harmonic 70.79 106.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n3-p2 harmonic 97.53 130.13 # SOURCE3 1
+ angle_coeff @angle:p3-n3-p3 harmonic 98.56 118.74 # SOURCE3 3 3.3755
+ angle_coeff @angle:p4-n3-p4 harmonic 101.51 116.35 # SOURCE3 1
+ angle_coeff @angle:p5-n3-p5 harmonic 102.24 119.42 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-n3-s4 harmonic 60.13 120.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-n3-s6 harmonic 61.99 120.95 # SOURCE3 1
+ angle_coeff @angle:s6-n3-s6 harmonic 63.29 126.13 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-n3-sh harmonic 61.24 118.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-n3-ss harmonic 61.27 119.67 # SOURCE3 1
+ angle_coeff @angle:s-n3-s harmonic 56.48 131.36 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-n3-ss harmonic 61.60 119.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n4-br harmonic 65.14 114.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n4-hn harmonic 41.38 108.44 # SOURCE3 7 0.5630
+ angle_coeff @angle:c1-n4-c1 harmonic 65.53 113.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-n4-hn harmonic 48.62 110.19 # SOURCE3 7 1.0847
+ angle_coeff @angle:c2-n4-c2 harmonic 63.01 112.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n4-c3 harmonic 63.10 110.96 # SOURCE4 13 2.4632
+ angle_coeff @angle:c2-n4-hn harmonic 46.43 111.36 # SOURCE3 13 1.2672
+ angle_coeff @angle:c3-n4-c3 harmonic 62.84 110.64 # SOURCE3 13 1.3060
+ angle_coeff @angle:c3-n4-ca harmonic 63.61 110.40 # SOURCE4 46 1.4643
+ angle_coeff @angle:c3-n4-cc harmonic 62.84 111.09 # SOURCE4 7 0.7065
+ angle_coeff @angle:c3-n4-cl harmonic 57.92 108.04 # SOURCE3 3 0.0000
+ angle_coeff @angle:c3-n4-hn harmonic 46.19 110.11 # SOURCE3 100 1.3136
+ angle_coeff @angle:c3-n4-n3 harmonic 66.73 108.72 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-n4-n4 harmonic 63.72 114.07 # SOURCE3 4 0.0000
+ angle_coeff @angle:c3-n4-n harmonic 66.20 109.26 # SOURCE4 7 1.9859
+ angle_coeff @angle:c3-n4-nh harmonic 64.76 111.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-no harmonic 65.25 109.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-o harmonic 67.25 111.66 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-oh harmonic 65.90 113.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-os harmonic 67.38 107.42 # SOURCE3 3 3.5920
+ angle_coeff @angle:c3-n4-p2 harmonic 71.92 112.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-p3 harmonic 74.40 110.73 # SOURCE3 3 2.1084
+ angle_coeff @angle:c3-n4-p5 harmonic 75.11 113.22 # SOURCE3 3 0.4021
+ angle_coeff @angle:c3-n4-s4 harmonic 57.21 108.23 # SOURCE3 3 0.4195
+ angle_coeff @angle:c3-n4-s6 harmonic 57.75 111.56 # SOURCE3 3 1.8851
+ angle_coeff @angle:c3-n4-s harmonic 59.21 113.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-sh harmonic 59.13 115.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-n4-ss harmonic 59.66 113.68 # SOURCE3 3 1.1405
+ angle_coeff @angle:ca-n4-ca harmonic 63.21 114.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-n4-hn harmonic 47.54 108.52 # SOURCE3 5 1.1693
+ angle_coeff @angle:c-n4-c harmonic 61.50 108.61 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-n4-hn harmonic 44.68 110.86 # SOURCE3 10 1.0073
+ angle_coeff @angle:cl-n4-cl harmonic 52.73 114.91 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-n4-hn harmonic 39.53 108.87 # SOURCE3 7 0.7719
+ angle_coeff @angle:f-n4-f harmonic 70.47 109.05 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-n4-hn harmonic 51.67 108.39 # SOURCE3 4 0.0000
+ angle_coeff @angle:hn-n4-hn harmonic 40.52 108.11 # SOURCE3 208 1.4126
+ angle_coeff @angle:hn-n4-i harmonic 36.44 108.72 # SOURCE3 7 1.2717
+ angle_coeff @angle:hn-n4-n1 harmonic 51.79 109.39 # HF/6-31G* 1
+ angle_coeff @angle:hn-n4-n2 harmonic 42.29 109.68 # SOURCE3 19 0.6266
+ angle_coeff @angle:hn-n4-n3 harmonic 49.85 110.40 # SOURCE3 11 0.7307
+ angle_coeff @angle:hn-n4-n4 harmonic 48.09 108.66 # SOURCE3 18 1.2967
+ angle_coeff @angle:hn-n4-n harmonic 49.59 109.08 # SOURCE3 13 1.6047
+ angle_coeff @angle:hn-n4-na harmonic 49.43 109.38 # SOURCE3 25 1.0758
+ angle_coeff @angle:hn-n4-nh harmonic 48.36 109.92 # SOURCE3 12 0.7304
+ angle_coeff @angle:hn-n4-no harmonic 49.19 104.38 # SOURCE3 2 0.0000
+ angle_coeff @angle:hn-n4-o harmonic 52.09 109.26 # SOURCE3 6 2.1203
+ angle_coeff @angle:hn-n4-oh harmonic 51.12 108.09 # SOURCE3 6 1.6728
+ angle_coeff @angle:hn-n4-os harmonic 50.15 109.39 # SOURCE3 10 1.4403
+ angle_coeff @angle:hn-n4-p2 harmonic 47.71 110.50 # SOURCE3 25 1.0664
+ angle_coeff @angle:hn-n4-p3 harmonic 49.73 109.89 # SOURCE3 10 2.3870
+ angle_coeff @angle:hn-n4-p4 harmonic 47.65 111.33 # SOURCE3 3 0.0000
+ angle_coeff @angle:hn-n4-p5 harmonic 51.29 110.00 # SOURCE3 10 1.0282
+ angle_coeff @angle:hn-n4-py harmonic 47.36 117.89 # SOURCE3 8 0.0000
+ angle_coeff @angle:hn-n4-s4 harmonic 37.07 110.10 # SOURCE3 6 0.8471
+ angle_coeff @angle:hn-n4-s harmonic 41.06 106.89 # SOURCE3 6 1.0775
+ angle_coeff @angle:hn-n4-s6 harmonic 38.64 108.94 # SOURCE3 10 0.5715
+ angle_coeff @angle:hn-n4-sh harmonic 41.29 108.56 # SOURCE3 6 0.8535
+ angle_coeff @angle:hn-n4-ss harmonic 41.15 109.17 # SOURCE3 10 0.8455
+ angle_coeff @angle:i-n4-i harmonic 58.99 118.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-n4-n1 harmonic 72.69 110.67 # HF/6-31G* 1
+ angle_coeff @angle:n2-n4-n2 harmonic 59.43 108.64 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-n4-n3 harmonic 69.79 111.07 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-n4-n4 harmonic 65.21 115.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-n4-na harmonic 66.27 119.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-n4-nh harmonic 67.83 109.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-n4-n harmonic 66.68 118.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-n4-oh harmonic 72.25 108.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-n4-o harmonic 70.28 120.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-n4-os harmonic 72.46 104.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n4-p2 harmonic 89.65 113.91 # SOURCE3 2 0.0000
+ angle_coeff @angle:p3-n4-p3 harmonic 89.71 121.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:p5-n4-p5 harmonic 98.15 107.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:py-n4-py harmonic 116.94 69.79 # SOURCE3 2 0.0000
+ angle_coeff @angle:s4-n4-s4 harmonic 54.75 115.43 # SOURCE3 1
+ angle_coeff @angle:s6-n4-s6 harmonic 57.91 109.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-n4-sh harmonic 60.37 112.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-n4-s harmonic 56.74 124.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-n4-ss harmonic 61.26 109.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-na-br harmonic 60.55 123.00 # SOURCE3 1
+ angle_coeff @angle:br-na-c2 harmonic 63.61 100.48 # SOURCE3 2 1.0536
+ angle_coeff @angle:br-na-ca harmonic 57.15 124.81 # SOURCE3 1
+ angle_coeff @angle:br-na-cc harmonic 57.16 124.62 # SOURCE3 3 0.5348
+ angle_coeff @angle:br-na-cd harmonic 57.16 124.62 # SOURCE3 3 same_as_br-na-cc
+ angle_coeff @angle:br-na-nc harmonic 59.86 119.42 # SOURCE3 4 1.6703
+ angle_coeff @angle:br-na-nd harmonic 59.86 119.42 # SOURCE3 4 same_as_br-na-nc
+ angle_coeff @angle:br-na-os harmonic 63.92 104.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-na-p2 harmonic 75.91 121.01 # SOURCE3 1
+ angle_coeff @angle:br-na-pc harmonic 76.39 120.26 # SOURCE3 3 2.1456
+ angle_coeff @angle:br-na-pd harmonic 76.39 120.26 # SOURCE3 3 same_as_br-na-pc
+ angle_coeff @angle:br-na-ss harmonic 62.46 112.28 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-na-c1 harmonic 67.20 117.20 # SOURCE3 1
+ angle_coeff @angle:c1-na-c2 harmonic 64.32 125.20 # SOURCE3 1
+ angle_coeff @angle:c1-na-ca harmonic 66.54 120.57 # SOURCE3 1
+ angle_coeff @angle:c1-na-cc harmonic 65.82 121.35 # SOURCE3 6 0.6517
+ angle_coeff @angle:c1-na-cd harmonic 65.82 121.35 # SOURCE3 6 0.6517
+ angle_coeff @angle:c1-na-nc harmonic 68.27 120.24 # SOURCE3 4 1.6849
+ angle_coeff @angle:c1-na-nd harmonic 68.27 120.24 # SOURCE3 4 same_as_c1-na-nc
+ angle_coeff @angle:c1-na-os harmonic 70.24 106.96 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-na-p2 harmonic 76.49 122.25 # SOURCE3 1
+ angle_coeff @angle:c1-na-pc harmonic 77.33 121.48 # SOURCE3 3 2.1681
+ angle_coeff @angle:c1-na-pd harmonic 77.33 121.48 # SOURCE3 3 same_as_c1-na-pc
+ angle_coeff @angle:c1-na-ss harmonic 61.89 118.30 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-na-c2 harmonic 67.80 110.37 # SOURCE3 6 0.5121
+ angle_coeff @angle:c2-na-c3 harmonic 64.23 117.20 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-na-ca harmonic 64.55 125.33 # SOURCE4 7 0.5648
+ angle_coeff @angle:c2-na-cc harmonic 63.98 125.75 # SOURCE3 10 1.5856
+ angle_coeff @angle:c2-na-cd harmonic 63.98 125.75 # SOURCE3 10 1.5856
+ angle_coeff @angle:c2-na-cl harmonic 58.85 101.01 # SOURCE3 2 1.5799
+ angle_coeff @angle:c2-na-f harmonic 68.64 103.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-na-hn harmonic 47.62 119.28 # SOURCE3 14 6.6027
+ angle_coeff @angle:c2-na-i harmonic 58.98 106.74 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-na-n1 harmonic 66.27 124.81 # HF/6-31G* 1
+ angle_coeff @angle:c2-na-n2 harmonic 65.80 125.00 # SOURCE3 1
+ angle_coeff @angle:c2-na-n3 harmonic 64.64 124.80 # SOURCE3 1
+ angle_coeff @angle:c2-na-n4 harmonic 65.19 121.32 # SOURCE3 1
+ angle_coeff @angle:c2-na-n harmonic 65.63 124.70 # SOURCE3 1
+ angle_coeff @angle:c2-na-na harmonic 65.14 124.60 # SOURCE3 1
+ angle_coeff @angle:c2-na-nc harmonic 67.42 120.61 # CORR 9
+ angle_coeff @angle:c2-na-nd harmonic 67.42 120.61 # CORR 9
+ angle_coeff @angle:c2-na-nh harmonic 65.04 124.98 # SOURCE3 1
+ angle_coeff @angle:c2-na-no harmonic 64.34 124.20 # SOURCE3 1
+ angle_coeff @angle:c2-na-o harmonic 68.21 125.90 # SOURCE3 1
+ angle_coeff @angle:c2-na-oh harmonic 65.80 123.90 # SOURCE3 1
+ angle_coeff @angle:c2-na-os harmonic 68.53 110.33 # SOURCE3 4 3.2172
+ angle_coeff @angle:c2-na-p2 harmonic 76.19 122.14 # SOURCE3 1
+ angle_coeff @angle:c2-na-p3 harmonic 74.55 126.10 # SOURCE3 1
+ angle_coeff @angle:c2-na-p4 harmonic 81.58 125.00 # SOURCE3 1
+ angle_coeff @angle:c2-na-p5 harmonic 76.43 125.10 # SOURCE3 1
+ angle_coeff @angle:c2-na-pc harmonic 76.96 121.56 # SOURCE3 3 1.6252
+ angle_coeff @angle:c2-na-pd harmonic 76.96 121.56 # SOURCE3 3 same_as_c2-na-pc
+ angle_coeff @angle:c2-na-s4 harmonic 58.37 124.90 # SOURCE3 1
+ angle_coeff @angle:c2-na-s6 harmonic 60.24 124.40 # SOURCE3 1
+ angle_coeff @angle:c2-na-s harmonic 58.90 125.80 # SOURCE3 1
+ angle_coeff @angle:c2-na-sh harmonic 60.23 125.10 # SOURCE3 1
+ angle_coeff @angle:c2-na-ss harmonic 62.34 115.53 # SOURCE3 5 1.4036
+ angle_coeff @angle:c3-na-c3 harmonic 60.72 125.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-na-ca harmonic 63.15 124.36 # SOURCE3 5 4.2557
+ angle_coeff @angle:c3-na-cc harmonic 62.56 125.09 # SOURCE3 18 1.2138
+ angle_coeff @angle:c3-na-cd harmonic 62.56 125.09 # SOURCE3 18 1.2138
+ angle_coeff @angle:c3-na-cp harmonic 63.76 119.46 # SOURCE4 7 0.4108
+ angle_coeff @angle:c3-na-n2 harmonic 65.48 120.05 # SOURCE4 5 0.8795
+ angle_coeff @angle:c3-na-n harmonic 67.37 112.68 # SOURCE4 12 0.5122
+ angle_coeff @angle:c3-na-nc harmonic 65.74 120.46 # SOURCE3 8 2.1625
+ angle_coeff @angle:c3-na-nd harmonic 65.74 120.46 # SOURCE3 8 2.1625
+ angle_coeff @angle:c3-na-os harmonic 68.91 104.39 # SOURCE3 3 1.2017
+ angle_coeff @angle:c3-na-p2 harmonic 75.04 123.12 # SOURCE3 1
+ angle_coeff @angle:c3-na-pc harmonic 75.89 122.11 # SOURCE3 3 2.8504
+ angle_coeff @angle:c3-na-pd harmonic 75.89 122.11 # SOURCE3 3 same_as_c3-na-pc
+ angle_coeff @angle:c3-na-sh harmonic 63.38 110.28 # SOURCE3 1
+ angle_coeff @angle:c3-na-ss harmonic 62.90 110.87 # SOURCE3 3 0.8260
+ angle_coeff @angle:ca-na-ca harmonic 66.98 120.09 # SOURCE4 321 1.7366
+ angle_coeff @angle:ca-na-cc harmonic 68.46 113.15 # SOURCE3 18 9.8644
+ angle_coeff @angle:ca-na-cd harmonic 68.46 113.15 # SOURCE3 18 9.8644
+ angle_coeff @angle:ca-na-cl harmonic 53.17 124.79 # SOURCE3 1
+ angle_coeff @angle:ca-na-cp harmonic 65.88 120.96 # SOURCE4 20 1.2820
+ angle_coeff @angle:ca-na-cx harmonic 63.07 124.09 # SOURCE4 12 1.8167
+ angle_coeff @angle:ca-na-f harmonic 65.51 116.40 # SOURCE3 1
+ angle_coeff @angle:ca-na-hn harmonic 47.63 125.59 # SOURCE4 437 1.1893
+ angle_coeff @angle:ca-na-i harmonic 55.21 121.62 # SOURCE3 1
+ angle_coeff @angle:ca-na-n2 harmonic 68.21 119.85 # SOURCE4 6 1.2043
+ angle_coeff @angle:ca-na-n4 harmonic 66.37 120.19 # SOURCE3 1
+ angle_coeff @angle:ca-na-n harmonic 67.34 122.00 # SOURCE3 1
+ angle_coeff @angle:ca-na-na harmonic 66.29 123.76 # SOURCE3 1
+ angle_coeff @angle:ca-na-nb harmonic 68.18 122.16 # SOURCE4 7 0.8543
+ angle_coeff @angle:ca-na-nc harmonic 69.27 117.85 # SOURCE3 6 3.6536
+ angle_coeff @angle:ca-na-nd harmonic 69.27 117.85 # SOURCE3 6 same_as_ca-na-nc
+ angle_coeff @angle:ca-na-nh harmonic 66.14 124.33 # SOURCE4 7 1.3855
+ angle_coeff @angle:ca-na-o harmonic 71.14 119.99 # SOURCE4 51 1.2671
+ angle_coeff @angle:ca-na-oh harmonic 66.69 124.08 # SOURCE3 1
+ angle_coeff @angle:ca-na-os harmonic 69.70 109.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-na-p2 harmonic 75.51 125.85 # SOURCE3 1
+ angle_coeff @angle:ca-na-p3 harmonic 75.50 124.38 # SOURCE3 1
+ angle_coeff @angle:ca-na-p4 harmonic 82.41 124.97 # SOURCE3 1
+ angle_coeff @angle:ca-na-p5 harmonic 77.51 123.30 # SOURCE3 1
+ angle_coeff @angle:ca-na-pc harmonic 77.26 122.13 # SOURCE3 3 2.2393
+ angle_coeff @angle:ca-na-pd harmonic 77.26 122.13 # SOURCE3 3 same_as_ca-na-pc
+ angle_coeff @angle:ca-na-py harmonic 72.61 140.88 # SOURCE3 2 0.0000
+ angle_coeff @angle:ca-na-s4 harmonic 60.55 117.23 # SOURCE3 1
+ angle_coeff @angle:ca-na-s6 harmonic 61.55 120.69 # SOURCE3 1
+ angle_coeff @angle:ca-na-s harmonic 59.27 125.64 # SOURCE3 1
+ angle_coeff @angle:ca-na-sh harmonic 60.55 125.44 # SOURCE3 1
+ angle_coeff @angle:ca-na-ss harmonic 59.16 129.91 # SOURCE4 8 0.1449
+ angle_coeff @angle:cc-na-cc harmonic 68.94 109.90 # SOURCE3 109 1.5547
+ angle_coeff @angle:cc-na-cd harmonic 63.88 128.01 # SOURCE3 1 0.0000
+ angle_coeff @angle:cc-na-ce harmonic 63.05 126.61 # SOURCE4 8 0.5158
+ angle_coeff @angle:cc-na-cl harmonic 53.10 124.61 # SOURCE3 3 0.5208
+ angle_coeff @angle:cc-na-f harmonic 64.60 118.03 # SOURCE3 4 0.3081
+ angle_coeff @angle:cc-na-hn harmonic 47.02 125.50 # CORR 861
+ angle_coeff @angle:cc-na-i harmonic 54.34 125.70 # SOURCE3 6 0.7821
+ angle_coeff @angle:cc-na-n2 harmonic 66.83 122.96 # SOURCE3 15 0.9350
+ angle_coeff @angle:cc-na-n4 harmonic 65.90 120.31 # SOURCE3 10 3.4394
+ angle_coeff @angle:cc-na-n harmonic 66.52 123.19 # SOURCE3 13 0.3010
+ angle_coeff @angle:cc-na-na harmonic 65.91 123.43 # SOURCE3 23 0.2088
+ angle_coeff @angle:cc-na-nc harmonic 70.18 113.02 # SOURCE3 38 2.2867
+ angle_coeff @angle:cc-na-nd harmonic 66.41 126.22 # CORR 124
+ angle_coeff @angle:cc-na-nh harmonic 66.23 122.25 # SOURCE3 19 0.2010
+ angle_coeff @angle:cc-na-no harmonic 65.40 121.78 # SOURCE3 9 0.3521
+ angle_coeff @angle:cc-na-o harmonic 69.01 125.21 # SOURCE3 10 0.0124
+ angle_coeff @angle:cc-na-oh harmonic 66.67 122.38 # SOURCE3 10 0.1570
+ angle_coeff @angle:cc-na-os harmonic 67.01 116.86 # CORR 48
+ angle_coeff @angle:cc-na-p2 harmonic 75.29 125.86 # SOURCE3 14 2.2993
+ angle_coeff @angle:cc-na-p3 harmonic 75.02 125.25 # SOURCE3 8 0.1998
+ angle_coeff @angle:cc-na-p4 harmonic 81.11 127.73 # SOURCE3 7 3.6077
+ angle_coeff @angle:cc-na-p5 harmonic 76.81 124.70 # SOURCE3 13 1.4225
+ angle_coeff @angle:cc-na-s4 harmonic 59.45 121.03 # SOURCE3 10 0.5589
+ angle_coeff @angle:cc-na-s6 harmonic 60.98 122.19 # SOURCE3 10 0.9634
+ angle_coeff @angle:cc-na-s harmonic 59.10 125.66 # SOURCE3 8 0.1880
+ angle_coeff @angle:cc-na-sh harmonic 60.71 123.96 # SOURCE3 10 0.3424
+ angle_coeff @angle:cc-na-ss harmonic 61.34 120.10 # CORR 44
+ angle_coeff @angle:cd-na-cd harmonic 68.94 109.90 # SOURCE3 109 1.5547
+ angle_coeff @angle:cd-na-cl harmonic 53.10 124.61 # SOURCE3 3 same_as_cc-na-cl
+ angle_coeff @angle:cd-na-f harmonic 64.60 118.03 # SOURCE3 4 0.3081
+ angle_coeff @angle:cd-na-hn harmonic 47.02 125.50 # CORR 861
+ angle_coeff @angle:cd-na-i harmonic 54.34 125.70 # SOURCE3 6 0.7821
+ angle_coeff @angle:cd-na-n2 harmonic 66.83 122.96 # SOURCE3 15 0.9350
+ angle_coeff @angle:cd-na-n4 harmonic 65.90 120.31 # SOURCE3 10 3.4394
+ angle_coeff @angle:cd-na-n harmonic 66.52 123.19 # SOURCE3 13 0.3010
+ angle_coeff @angle:cd-na-na harmonic 65.91 123.43 # SOURCE3 23 0.2088
+ angle_coeff @angle:cd-na-nc harmonic 66.41 126.22 # CORR 124
+ angle_coeff @angle:cd-na-nd harmonic 70.18 113.02 # SOURCE3 38 2.2867
+ angle_coeff @angle:cd-na-nh harmonic 66.23 122.25 # SOURCE3 19 0.2010
+ angle_coeff @angle:cd-na-no harmonic 65.40 121.78 # SOURCE3 9 0.3521
+ angle_coeff @angle:cd-na-o harmonic 69.01 125.21 # SOURCE3 10 0.0124
+ angle_coeff @angle:cd-na-oh harmonic 66.67 122.38 # SOURCE3 10 0.1570
+ angle_coeff @angle:cd-na-os harmonic 67.01 116.86 # CORR 48
+ angle_coeff @angle:cd-na-p2 harmonic 75.29 125.86 # SOURCE3 14 2.2993
+ angle_coeff @angle:cd-na-p3 harmonic 75.02 125.25 # SOURCE3 8 0.1998
+ angle_coeff @angle:cd-na-p4 harmonic 81.11 127.73 # SOURCE3 7 same_as_cc-na-p4
+ angle_coeff @angle:cd-na-p5 harmonic 76.81 124.70 # SOURCE3 13 1.4225
+ angle_coeff @angle:cd-na-s4 harmonic 59.45 121.03 # SOURCE3 10 0.5589
+ angle_coeff @angle:cd-na-s6 harmonic 60.98 122.19 # SOURCE3 10 0.9634
+ angle_coeff @angle:cd-na-s harmonic 59.10 125.66 # SOURCE3 8 0.1880
+ angle_coeff @angle:cd-na-sh harmonic 60.71 123.96 # SOURCE3 10 0.3424
+ angle_coeff @angle:cd-na-ss harmonic 61.34 120.10 # CORR 44
+ angle_coeff @angle:cl-na-cl harmonic 48.73 122.80 # SOURCE3 1
+ angle_coeff @angle:cl-na-nc harmonic 55.70 119.36 # SOURCE3 4 1.7128
+ angle_coeff @angle:cl-na-nd harmonic 55.70 119.36 # SOURCE3 4 same_as_cl-na-nc
+ angle_coeff @angle:cl-na-os harmonic 58.63 106.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-na-p2 harmonic 68.67 121.29 # SOURCE3 1
+ angle_coeff @angle:cl-na-pc harmonic 69.19 120.51 # SOURCE3 3 2.1985
+ angle_coeff @angle:cl-na-pd harmonic 69.19 120.51 # SOURCE3 3 same_as_cl-na-pc
+ angle_coeff @angle:cl-na-ss harmonic 56.71 111.91 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-na-f harmonic 62.22 120.20 # SOURCE3 1
+ angle_coeff @angle:f-na-nc harmonic 66.64 118.05 # SOURCE3 4 1.7931
+ angle_coeff @angle:f-na-nd harmonic 66.64 118.05 # SOURCE3 4 same_as_f-na-nc
+ angle_coeff @angle:f-na-os harmonic 69.15 103.86 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-na-p2 harmonic 75.54 119.95 # SOURCE3 1
+ angle_coeff @angle:f-na-pc harmonic 76.37 119.10 # SOURCE3 3 2.3967
+ angle_coeff @angle:f-na-pd harmonic 76.37 119.10 # SOURCE3 3 same_as_f-na-pc
+ angle_coeff @angle:f-na-ss harmonic 63.34 108.01 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-na-hn harmonic 39.83 116.80 # SOURCE3 1
+ angle_coeff @angle:hn-na-n harmonic 50.90 111.26 # SOURCE4 5 1.1280
+ angle_coeff @angle:hn-na-nc harmonic 50.00 119.61 # SOURCE3 16 1.8079
+ angle_coeff @angle:hn-na-nd harmonic 50.00 119.61 # SOURCE3 16 1.8079
+ angle_coeff @angle:hn-na-os harmonic 51.44 101.41 # SOURCE3 7 3.0814
+ angle_coeff @angle:hn-na-p2 harmonic 51.02 122.52 # SOURCE3 1
+ angle_coeff @angle:hn-na-pc harmonic 51.81 121.48 # SOURCE3 3 2.9355
+ angle_coeff @angle:hn-na-pd harmonic 51.81 121.48 # SOURCE3 3 same_as_hn-na-pc
+ angle_coeff @angle:hn-na-ss harmonic 42.24 113.95 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-na-i harmonic 58.32 124.20 # SOURCE3 1
+ angle_coeff @angle:i-na-nc harmonic 56.94 120.03 # SOURCE3 4 2.0032
+ angle_coeff @angle:i-na-nd harmonic 56.94 120.03 # SOURCE3 4 same_as_i-na-nc
+ angle_coeff @angle:i-na-os harmonic 59.85 109.91 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-na-p2 harmonic 73.36 122.28 # SOURCE3 1
+ angle_coeff @angle:i-na-pc harmonic 73.81 121.40 # SOURCE3 3 2.4763
+ angle_coeff @angle:i-na-pd harmonic 73.81 121.40 # SOURCE3 3 same_as_i-na-pc
+ angle_coeff @angle:i-na-ss harmonic 59.04 118.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-na-n2 harmonic 70.35 116.71 # SOURCE3 1
+ angle_coeff @angle:n2-na-nc harmonic 69.85 119.96 # SOURCE3 4 4.5041
+ angle_coeff @angle:n2-na-nd harmonic 69.85 119.96 # SOURCE3 4 same_as_n2-na-nc
+ angle_coeff @angle:n2-na-os harmonic 70.33 111.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-na-p2 harmonic 77.46 124.88 # SOURCE3 1
+ angle_coeff @angle:n2-na-pc harmonic 78.60 123.18 # SOURCE3 3 4.7947
+ angle_coeff @angle:n2-na-pd harmonic 78.60 123.18 # SOURCE3 3 same_as_n2-na-pc
+ angle_coeff @angle:n2-na-ss harmonic 61.71 124.64 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-na-n3 harmonic 65.77 124.00 # SOURCE3 1
+ angle_coeff @angle:n4-na-n4 harmonic 68.57 111.70 # SOURCE3 1
+ angle_coeff @angle:n4-na-nc harmonic 69.09 116.44 # SOURCE3 4 3.6604
+ angle_coeff @angle:n4-na-nd harmonic 69.09 116.44 # SOURCE3 4 same_as_n4-na-nc
+ angle_coeff @angle:n4-na-os harmonic 71.61 102.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-na-p2 harmonic 77.04 123.56 # SOURCE3 1
+ angle_coeff @angle:n4-na-pc harmonic 78.10 121.98 # SOURCE3 3 4.4884
+ angle_coeff @angle:n4-na-pd harmonic 78.10 121.98 # SOURCE3 3 same_as_n4-na-pc
+ angle_coeff @angle:na-na-na harmonic 66.77 123.60 # SOURCE3 1
+ angle_coeff @angle:na-na-nc harmonic 69.08 119.64 # SOURCE3 4 1.6920
+ angle_coeff @angle:na-na-nd harmonic 69.08 119.64 # SOURCE3 4 same_as_na-na-nc
+ angle_coeff @angle:na-na-os harmonic 70.25 109.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-na-p2 harmonic 78.07 121.72 # SOURCE3 1
+ angle_coeff @angle:na-na-pc harmonic 78.92 120.91 # SOURCE3 3 2.3033
+ angle_coeff @angle:na-na-pd harmonic 78.92 120.91 # SOURCE3 3 same_as_na-na-pc
+ angle_coeff @angle:na-na-ss harmonic 63.50 116.50 # SOURCE3 1 0.0000
+ angle_coeff @angle:nc-na-nc harmonic 71.20 117.08 # SOURCE3 31 1.8121
+ angle_coeff @angle:nc-na-nd harmonic 69.53 122.77 # SOURCE4 5 0.1352
+ angle_coeff @angle:nc-na-nh harmonic 68.82 120.55 # SOURCE3 8 1.1436
+ angle_coeff @angle:nc-na-no harmonic 68.19 119.15 # SOURCE3 4 1.6049
+ angle_coeff @angle:nc-na-o harmonic 72.04 122.79 # SOURCE3 6 1.3154
+ angle_coeff @angle:nc-na-oh harmonic 69.71 119.22 # SOURCE3 4 1.7201
+ angle_coeff @angle:nc-na-os harmonic 68.30 119.65 # SOURCE3 4 1.5019
+ angle_coeff @angle:nc-na-p2 harmonic 79.23 119.99 # SOURCE3 4 3.6009
+ angle_coeff @angle:nc-na-p3 harmonic 78.72 120.07 # SOURCE3 4 3.7188
+ angle_coeff @angle:nc-na-p4 harmonic 86.25 119.77 # SOURCE3 3 0.3747
+ angle_coeff @angle:nc-na-p5 harmonic 80.84 118.95 # SOURCE3 4 3.1194
+ angle_coeff @angle:nc-na-pc harmonic 80.31 118.66 # SOURCE3 27 1.5082
+ angle_coeff @angle:nc-na-s4 harmonic 61.52 119.20 # SOURCE3 4 2.3841
+ angle_coeff @angle:nc-na-s6 harmonic 63.45 119.24 # SOURCE3 4 2.2262
+ angle_coeff @angle:nc-na-s harmonic 61.55 122.26 # SOURCE3 4 0.9173
+ angle_coeff @angle:nc-na-sh harmonic 63.29 120.50 # SOURCE3 4 1.5016
+ angle_coeff @angle:nc-na-ss harmonic 62.94 120.50 # SOURCE3 4 1.5615
+ angle_coeff @angle:nd-na-nd harmonic 71.20 117.08 # SOURCE3 31 1.8121
+ angle_coeff @angle:nd-na-nh harmonic 68.82 120.55 # SOURCE3 8 same_as_nc-na-nh
+ angle_coeff @angle:nd-na-no harmonic 68.19 119.15 # SOURCE3 4 same_as_nc-na-no
+ angle_coeff @angle:nd-na-o harmonic 72.04 122.79 # SOURCE3 6 same_as_nc-na-o
+ angle_coeff @angle:nd-na-oh harmonic 69.71 119.22 # SOURCE3 4 same_as_nc-na-oh
+ angle_coeff @angle:nd-na-os harmonic 68.30 119.65 # SOURCE3 4 same_as_nc-na-os
+ angle_coeff @angle:nd-na-p2 harmonic 79.23 119.99 # SOURCE3 4 same_as_nc-na-p2
+ angle_coeff @angle:nd-na-p3 harmonic 78.72 120.07 # SOURCE3 4 same_as_nc-na-p3
+ angle_coeff @angle:nd-na-p4 harmonic 86.25 119.77 # SOURCE3 3 same_as_nc-na-p4
+ angle_coeff @angle:nd-na-p5 harmonic 80.84 118.95 # SOURCE3 4 same_as_nc-na-p5
+ angle_coeff @angle:nd-na-pd harmonic 80.31 118.66 # SOURCE3 27 same_as_nc-na-pc
+ angle_coeff @angle:nd-na-s4 harmonic 61.52 119.20 # SOURCE3 4 same_as_nc-na-s4
+ angle_coeff @angle:nd-na-s6 harmonic 63.45 119.24 # SOURCE3 4 same_as_nc-na-s6
+ angle_coeff @angle:nd-na-s harmonic 61.55 122.26 # SOURCE3 4 same_as_nc-na-s
+ angle_coeff @angle:nd-na-sh harmonic 63.29 120.50 # SOURCE3 4 same_as_nc-na-sh
+ angle_coeff @angle:nd-na-ss harmonic 62.94 120.50 # SOURCE3 4 same_as_nc-na-ss
+ angle_coeff @angle:nh-na-nh harmonic 66.77 123.60 # SOURCE3 1
+ angle_coeff @angle:nh-na-os harmonic 69.65 111.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-na-p2 harmonic 78.35 120.86 # SOURCE3 1
+ angle_coeff @angle:nh-na-pc harmonic 79.10 120.38 # SOURCE3 6 1.3513
+ angle_coeff @angle:nh-na-pd harmonic 79.10 120.38 # SOURCE3 6 same_as_nh-na-pc
+ angle_coeff @angle:nh-na-ss harmonic 64.66 112.35 # SOURCE3 2 5.2951
+ angle_coeff @angle:n-na-n harmonic 67.78 123.80 # SOURCE3 1
+ angle_coeff @angle:n-na-nc harmonic 69.61 119.85 # SOURCE3 4 1.6156
+ angle_coeff @angle:n-na-nd harmonic 69.61 119.85 # SOURCE3 4 same_as_n-na-nc
+ angle_coeff @angle:no-na-no harmonic 65.22 122.80 # SOURCE3 1
+ angle_coeff @angle:no-na-os harmonic 70.30 106.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-na-pc harmonic 78.65 120.11 # SOURCE3 3 2.0821
+ angle_coeff @angle:no-na-pd harmonic 78.65 120.11 # SOURCE3 3 same_as_no-na-pc
+ angle_coeff @angle:n-na-os harmonic 72.34 104.71 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-na-ss harmonic 63.49 114.95 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-na-p2 harmonic 78.46 121.35 # SOURCE3 1
+ angle_coeff @angle:n-na-pc harmonic 79.30 120.64 # SOURCE3 3 2.0168
+ angle_coeff @angle:n-na-pd harmonic 79.30 120.64 # SOURCE3 3 same_as_n-na-pc
+ angle_coeff @angle:n-na-ss harmonic 63.84 116.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-na-oh harmonic 68.13 122.20 # SOURCE3 1
+ angle_coeff @angle:oh-na-p2 harmonic 78.88 120.76 # SOURCE3 1
+ angle_coeff @angle:oh-na-pc harmonic 79.74 119.99 # SOURCE3 3 2.1734
+ angle_coeff @angle:oh-na-pd harmonic 79.74 119.99 # SOURCE3 3 same_as_oh-na-pc
+ angle_coeff @angle:oh-na-ss harmonic 64.88 113.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-na-o harmonic 74.03 126.20 # SOURCE3 1
+ angle_coeff @angle:o-na-os harmonic 70.76 118.39 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-na-p2 harmonic 79.51 122.80 # SOURCE3 1
+ angle_coeff @angle:o-na-pc harmonic 80.36 122.34 # SOURCE3 3 1.2908
+ angle_coeff @angle:o-na-pd harmonic 80.36 122.34 # SOURCE3 3 same_as_o-na-pc
+ angle_coeff @angle:os-na-os harmonic 71.29 104.45 # SOURCE3 2 0.0983
+ angle_coeff @angle:os-na-p2 harmonic 79.21 117.86 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-na-p3 harmonic 83.58 104.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-na-p5 harmonic 82.64 111.41 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-na-pc harmonic 79.09 119.91 # SOURCE3 3 1.9002
+ angle_coeff @angle:os-na-pd harmonic 79.09 119.91 # SOURCE3 3 same_as_os-na-pc
+ angle_coeff @angle:os-na-s4 harmonic 64.81 105.88 # SOURCE3 2 0.0000
+ angle_coeff @angle:os-na-s6 harmonic 64.80 112.00 # SOURCE3 2 0.0000
+ angle_coeff @angle:os-na-ss harmonic 65.33 109.64 # SOURCE3 3 4.1395
+ angle_coeff @angle:p2-na-p2 harmonic 96.62 120.91 # SOURCE3 1
+ angle_coeff @angle:p2-na-p3 harmonic 94.74 124.80 # SOURCE3 1
+ angle_coeff @angle:p2-na-p5 harmonic 96.33 123.99 # SOURCE3 1
+ angle_coeff @angle:p2-na-pc harmonic 97.16 120.72 # SOURCE3 3 0.2407
+ angle_coeff @angle:p2-na-pd harmonic 97.16 120.72 # SOURCE3 3 same_as_p2-na-pc
+ angle_coeff @angle:p2-na-s4 harmonic 74.88 122.47 # SOURCE3 1
+ angle_coeff @angle:p2-na-s6 harmonic 76.31 122.50 # SOURCE3 1
+ angle_coeff @angle:p2-na-s harmonic 75.69 121.85 # SOURCE3 1
+ angle_coeff @angle:p2-na-sh harmonic 76.68 121.75 # SOURCE3 1
+ angle_coeff @angle:p2-na-ss harmonic 76.38 121.88 # SOURCE3 1
+ angle_coeff @angle:p3-na-p3 harmonic 93.72 126.60 # SOURCE3 1
+ angle_coeff @angle:p3-na-pc harmonic 95.76 123.32 # SOURCE3 3 4.1781
+ angle_coeff @angle:p3-na-pd harmonic 95.76 123.32 # SOURCE3 3 same_as_p3-na-pc
+ angle_coeff @angle:p5-na-p5 harmonic 97.06 124.60 # SOURCE3 1
+ angle_coeff @angle:p5-na-pc harmonic 97.33 122.69 # SOURCE3 3 3.6738
+ angle_coeff @angle:p5-na-pd harmonic 97.33 122.69 # SOURCE3 3 same_as_p5-na-pc
+ angle_coeff @angle:p5-na-ss harmonic 78.22 118.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:pc-na-pc harmonic 97.62 120.78 # SOURCE3 27 1.6457
+ angle_coeff @angle:pc-na-s4 harmonic 75.52 121.51 # SOURCE3 3 2.7242
+ angle_coeff @angle:pc-na-s6 harmonic 76.99 121.55 # SOURCE3 3 2.7065
+ angle_coeff @angle:pc-na-s harmonic 76.17 121.47 # SOURCE3 3 1.0668
+ angle_coeff @angle:pc-na-sh harmonic 77.28 121.08 # SOURCE3 3 1.8942
+ angle_coeff @angle:pc-na-ss harmonic 76.97 121.20 # SOURCE3 3 1.9295
+ angle_coeff @angle:pd-na-pd harmonic 97.62 120.78 # SOURCE3 27 same_as_pc-na-pc
+ angle_coeff @angle:pd-na-s4 harmonic 75.52 121.51 # SOURCE3 3 same_as_pc-na-s4
+ angle_coeff @angle:pd-na-s6 harmonic 76.99 121.55 # SOURCE3 3 same_as_pc-na-s6
+ angle_coeff @angle:pd-na-s harmonic 76.17 121.47 # SOURCE3 3 same_as_pc-na-s
+ angle_coeff @angle:pd-na-sh harmonic 77.28 121.08 # SOURCE3 3 same_as_pc-na-sh
+ angle_coeff @angle:pd-na-ss harmonic 76.97 121.20 # SOURCE3 3 same_as_pc-na-ss
+ angle_coeff @angle:py-na-py harmonic 122.69 78.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-na-s4 harmonic 58.05 124.20 # SOURCE3 1
+ angle_coeff @angle:s4-na-s6 harmonic 62.00 112.86 # SOURCE3 1
+ angle_coeff @angle:s4-na-ss harmonic 62.16 111.92 # SOURCE3 1 0.0000
+ angle_coeff @angle:s6-na-s6 harmonic 60.51 123.20 # SOURCE3 1
+ angle_coeff @angle:s6-na-ss harmonic 61.44 119.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-na-sh harmonic 60.38 124.60 # SOURCE3 1
+ angle_coeff @angle:sh-na-ss harmonic 61.63 118.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-na-s harmonic 58.55 126.00 # SOURCE3 1
+ angle_coeff @angle:s-na-ss harmonic 62.52 112.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-na-ss harmonic 62.90 113.24 # SOURCE3 2 6.6084
+ angle_coeff @angle:sy-na-sy harmonic 60.51 123.20 # SOURCE3 1
+ angle_coeff @angle:ca-nb-ca harmonic 68.59 115.86 # SOURCE3 46 1.1645
+ angle_coeff @angle:ca-nb-cp harmonic 68.01 118.04 # SOURCE4 58 0.7819
+ angle_coeff @angle:ca-nb-cq harmonic 68.01 118.04 # SOURCE4 58 same as ca-nb-cp
+ angle_coeff @angle:ca-nb-nb harmonic 69.37 118.89 # SOURCE3 10 0.6031
+ angle_coeff @angle:cp-nb-nb harmonic 68.79 121.11 # SOURCE4 12 0.4315
+ angle_coeff @angle:nb-nb-nb harmonic 70.44 121.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n-br harmonic 66.59 116.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-n-c harmonic 61.85 120.77 # SOURCE3 5 2.6390
+ angle_coeff @angle:br-n-ca harmonic 62.07 118.19 # SOURCE3 1
+ angle_coeff @angle:br-n-cc harmonic 62.34 118.19 # SOURCE3 1 same_as_br-n-cd
+ angle_coeff @angle:br-n-cd harmonic 62.34 118.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-n-c1 harmonic 73.52 102.69 # SOURCE3 1
+ angle_coeff @angle:c1-n-ca harmonic 65.90 118.88 # SOURCE3 1
+ angle_coeff @angle:c1-n-cc harmonic 67.02 118.88 # SOURCE3 1 same_as_c1-n-cd
+ angle_coeff @angle:c1-n-cd harmonic 67.02 118.88 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n-c2 harmonic 65.18 116.75 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n-c3 harmonic 63.06 119.98 # SOURCE4 23 2.3373
+ angle_coeff @angle:c2-n-ca harmonic 64.88 116.54 # SOURCE3 1
+ angle_coeff @angle:c2-n-cc harmonic 65.85 116.54 # SOURCE3 1 same_as_c2-n-cd
+ angle_coeff @angle:c2-n-cd harmonic 65.85 116.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-n-hn harmonic 47.33 118.36 # SOURCE4 40 1.8005
+ angle_coeff @angle:c3-n-c3 harmonic 63.13 115.56 # SOURCE4 392 2.0191
+ angle_coeff @angle:c3-n-ca harmonic 62.76 119.96 # SOURCE4 165 2.0808
+ angle_coeff @angle:c3-n-cc harmonic 63.33 121.00 # CORR 267
+ angle_coeff @angle:c3-n-cd harmonic 63.33 121.00 # CORR 267
+ angle_coeff @angle:c3-n-cy harmonic 62.51 117.11 # SOURCE4 49 1.0344
+ angle_coeff @angle:c3-n-hn harmonic 46.04 116.78 # SOURCE3 39 2.1985
+ angle_coeff @angle:c3-n-n2 harmonic 64.89 121.68 # SOURCE4 52 1.3175
+ angle_coeff @angle:c3-n-n harmonic 66.40 114.82 # SOURCE4 9 0.7008
+ angle_coeff @angle:c3-n-nc harmonic 66.97 115.21 # CORR 48
+ angle_coeff @angle:c3-n-nd harmonic 66.97 115.21 # CORR 48
+ angle_coeff @angle:c3-n-oh harmonic 66.88 113.05 # SOURCE4 31 0.8144
+ angle_coeff @angle:c3-n-os harmonic 66.99 112.65 # SOURCE4 16 1.5399
+ angle_coeff @angle:c3-n-sy harmonic 60.53 121.27 # SOURCE4 5 1.1298
+ angle_coeff @angle:ca-n-ca harmonic 64.31 117.39 # SOURCE4 39 1.6465
+ angle_coeff @angle:ca-n-cc harmonic 66.19 114.06 # CORR 34
+ angle_coeff @angle:ca-n-cd harmonic 66.19 114.06 # CORR 34
+ angle_coeff @angle:ca-n-cl harmonic 57.24 117.72 # SOURCE3 1
+ angle_coeff @angle:ca-n-f harmonic 64.62 114.92 # SOURCE3 1
+ angle_coeff @angle:ca-n-hn harmonic 47.36 115.94 # SOURCE4 537 1.8890
+ angle_coeff @angle:ca-n-i harmonic 56.58 119.30 # SOURCE3 1
+ angle_coeff @angle:ca-n-n2 harmonic 65.72 122.17 # SOURCE4 5 0.2545
+ angle_coeff @angle:ca-n-n4 harmonic 64.15 122.98 # SOURCE3 1
+ angle_coeff @angle:ca-n-n harmonic 66.30 118.54 # SOURCE4 21 0.3399
+ angle_coeff @angle:ca-n-na harmonic 66.33 119.31 # SOURCE4 16 0.3168
+ angle_coeff @angle:ca-n-nc harmonic 68.25 114.36 # CORR 6
+ angle_coeff @angle:ca-n-nd harmonic 68.25 114.36 # CORR 6
+ angle_coeff @angle:ca-n-nh harmonic 66.60 116.45 # SOURCE3 1
+ angle_coeff @angle:ca-n-p2 harmonic 79.60 112.32 # SOURCE3 1
+ angle_coeff @angle:ca-n-p3 harmonic 74.22 125.11 # SOURCE3 1
+ angle_coeff @angle:ca-n-s4 harmonic 59.97 118.40 # SOURCE3 1
+ angle_coeff @angle:ca-n-s6 harmonic 62.01 117.32 # SOURCE3 1
+ angle_coeff @angle:ca-n-ss harmonic 62.15 116.60 # SOURCE3 1
+ angle_coeff @angle:c-n-c1 harmonic 68.47 117.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-n-c2 harmonic 65.09 122.15 # SOURCE3 9 5.1016
+ angle_coeff @angle:c-n-c3 harmonic 63.92 121.35 # SOURCE3 54 2.3808
+ angle_coeff @angle:c3-nc-cd harmonic 67.60 109.51 # SOURCE3 9 5.4142
+ angle_coeff @angle:c-n-c harmonic 65.33 127.14 # SOURCE4 514 2.0111
+ angle_coeff @angle:c-n-ca harmonic 64.29 123.71 # SOURCE3 10 3.8159
+ angle_coeff @angle:ca-nc-ca harmonic 70.73 109.95 # SOURCE3 1
+ angle_coeff @angle:ca-nc-cd harmonic 72.43 104.94 # CORR 437
+ angle_coeff @angle:ca-nc-n harmonic 73.68 104.69 # CORR 2
+ angle_coeff @angle:ca-nc-na harmonic 74.57 102.74 # CORR 14
+ angle_coeff @angle:ca-nc-os harmonic 73.08 104.48 # CORR 10
+ angle_coeff @angle:ca-nc-ss harmonic 67.84 116.29 # SOURCE3 1
+ angle_coeff @angle:c-n-cc harmonic 65.24 124.19 # SOURCE3 57 2.2262
+ angle_coeff @angle:c-nc-ca harmonic 66.11 120.66 # CORR 2
+ angle_coeff @angle:cc-n-cc harmonic 68.80 108.92 # SOURCE3 11 0.3167
+ angle_coeff @angle:cc-nc-cc harmonic 70.50 104.34 # CORR 6
+ angle_coeff @angle:cc-nc-cd harmonic 71.08 105.67 # CORR 1240
+ angle_coeff @angle:c-nc-cd harmonic 66.18 120.48 # CORR 138
+ angle_coeff @angle:cc-n-cl harmonic 57.67 117.72 # SOURCE3 1 same_as_cd-n-cl
+ angle_coeff @angle:cc-nc-na harmonic 73.38 102.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:cc-nc-nd harmonic 72.54 107.94 # SOURCE3 6 1.4052
+ angle_coeff @angle:c-n-cd harmonic 65.24 124.19 # SOURCE3 57 2.2262
+ angle_coeff @angle:cd-nc-cd harmonic 68.53 117.28 # CORR 17
+ angle_coeff @angle:cd-nc-n harmonic 69.66 117.19 # CORR 64
+ angle_coeff @angle:cd-nc-na harmonic 74.24 103.73 # SOURCE3 122 2.3292
+ angle_coeff @angle:cd-nc-nc harmonic 71.99 107.88 # CORR 355
+ angle_coeff @angle:cd-nc-os harmonic 73.04 104.66 # CORR 116
+ angle_coeff @angle:cd-nc-ss harmonic 70.36 108.15 # CORR 45
+ angle_coeff @angle:c-n-ce harmonic 62.21 131.83 # SOURCE4 146 1.3048
+ angle_coeff @angle:cc-n-f harmonic 65.61 114.92 # SOURCE3 1 same_as_cd-n-f
+ angle_coeff @angle:cc-n-hn harmonic 47.99 119.14 # CORR 276
+ angle_coeff @angle:cc-n-i harmonic 56.61 119.30 # SOURCE3 1 same_as_cd-n-i
+ angle_coeff @angle:c-n-cl harmonic 58.34 116.35 # SOURCE4 11 0.6829
+ angle_coeff @angle:cc-n-n2 harmonic 70.09 110.87 # SOURCE3 1 same_as_cd-n-n2
+ angle_coeff @angle:cc-n-n harmonic 66.53 121.37 # SOURCE3 1 same_as_cd-n-n
+ angle_coeff @angle:cc-n-na harmonic 67.87 117.57 # SOURCE3 1 same_as_cd-n-na
+ angle_coeff @angle:cc-n-nc harmonic 70.08 112.03 # CORR 14
+ angle_coeff @angle:cc-n-nh harmonic 67.30 117.52 # SOURCE3 1 same_as_cd-n-nh
+ angle_coeff @angle:cc-n-no harmonic 66.40 115.92 # SOURCE3 1 same_as_cd-n-no
+ angle_coeff @angle:cc-n-o harmonic 70.07 120.54 # SOURCE3 1 same_as_cd-n-o
+ angle_coeff @angle:cc-n-oh harmonic 67.32 118.15 # SOURCE3 1 same_as_cd-n-oh
+ angle_coeff @angle:cc-n-os harmonic 68.06 115.56 # SOURCE3 1 same_as_cd-n-os
+ angle_coeff @angle:cc-n-p2 harmonic 80.17 112.32 # SOURCE3 1 same_as_cd-n-p2
+ angle_coeff @angle:cc-n-p3 harmonic 74.70 125.11 # SOURCE3 1 same_as_cd-n-p3
+ angle_coeff @angle:cc-n-p5 harmonic 78.11 121.00 # SOURCE3 1 same_as_cd-n-p5
+ angle_coeff @angle:cc-n-s4 harmonic 60.34 118.40 # SOURCE3 1 same_as_cd-n-s4
+ angle_coeff @angle:cc-n-s6 harmonic 62.48 117.32 # SOURCE3 1 same_as_cd-n-s6
+ angle_coeff @angle:cc-n-s harmonic 60.78 118.29 # SOURCE3 1 same_as_cd-n-s
+ angle_coeff @angle:cc-n-sh harmonic 61.64 119.13 # SOURCE3 1 same_as_cd-n-sh
+ angle_coeff @angle:cc-n-ss harmonic 62.62 116.60 # SOURCE3 2 same_as_cd-n-ss
+ angle_coeff @angle:c-n-cx harmonic 64.22 122.07 # SOURCE4 11 1.9478
+ angle_coeff @angle:c-n-cy harmonic 72.26 94.23 # SOURCE4 270 1.3777
+ angle_coeff @angle:cd-n-cd harmonic 68.80 108.92 # SOURCE3 11 same_as_cc-n-cc
+ angle_coeff @angle:cd-n-cl harmonic 57.67 117.72 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-f harmonic 65.61 114.92 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-hn harmonic 47.99 119.14 # CORR 276
+ angle_coeff @angle:cd-n-i harmonic 56.61 119.30 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-n2 harmonic 70.09 110.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-n harmonic 66.53 121.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-na harmonic 67.87 117.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-nd harmonic 70.08 112.03 # CORR 14
+ angle_coeff @angle:cd-n-nh harmonic 67.30 117.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-no harmonic 66.40 115.92 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-o harmonic 70.07 120.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-oh harmonic 67.32 118.15 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-os harmonic 68.06 115.56 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-p2 harmonic 80.17 112.32 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-p3 harmonic 74.70 125.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-p5 harmonic 78.11 121.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-s4 harmonic 60.34 118.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-s6 harmonic 62.48 117.32 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-s harmonic 60.78 118.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-sh harmonic 61.64 119.13 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-n-ss harmonic 62.62 116.60 # SOURCE3 2 1.8318
+ angle_coeff @angle:ce-n-cy harmonic 64.70 111.89 # CORR 152
+ angle_coeff @angle:c-n-f harmonic 68.30 108.63 # SOURCE3 3 4.6785
+ angle_coeff @angle:cf-n-cy harmonic 64.70 111.89 # CORR 152
+ angle_coeff @angle:c-n-hn harmonic 49.21 118.46 # SOURCE3 157 2.4094
+ angle_coeff @angle:c-n-i harmonic 56.34 120.38 # SOURCE3 5 2.1600
+ angle_coeff @angle:cl-n-cl harmonic 54.70 111.69 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-n-n2 harmonic 68.06 120.59 # SOURCE3 9 3.2410
+ angle_coeff @angle:c-n-n3 harmonic 67.13 120.43 # SOURCE3 5 0.9481
+ angle_coeff @angle:c-n-n4 harmonic 68.85 112.32 # SOURCE3 5 1.2622
+ angle_coeff @angle:c-n-n harmonic 68.18 118.42 # SOURCE3 10 2.8922
+ angle_coeff @angle:c-n-na harmonic 68.25 119.20 # SOURCE3 11 2.3032
+ angle_coeff @angle:na-nc-nd harmonic 75.97 105.47 # SOURCE3 6 0.6349
+ angle_coeff @angle:c-n-nc harmonic 67.16 125.19 # CORR 84
+ angle_coeff @angle:nc-nc-nd harmonic 73.11 111.29 # CORR 61
+ angle_coeff @angle:c-n-nd harmonic 67.16 125.19 # CORR 84
+ angle_coeff @angle:nd-nc-os harmonic 74.42 107.22 # SOURCE3 3 0.4707
+ angle_coeff @angle:c-n-nh harmonic 68.02 117.81 # SOURCE4 21 1.5935
+ angle_coeff @angle:c-n-no harmonic 66.47 118.16 # SOURCE3 4 5.4870
+ angle_coeff @angle:c-n-o harmonic 71.64 118.90 # SOURCE3 9 5.4085
+ angle_coeff @angle:c-n-oh harmonic 69.53 113.39 # SOURCE3 6 1.3345
+ angle_coeff @angle:c-n-os harmonic 69.60 113.14 # SOURCE3 7 3.0839
+ angle_coeff @angle:c-n-p2 harmonic 76.53 124.56 # SOURCE3 8 3.6907
+ angle_coeff @angle:c-n-p3 harmonic 75.82 122.54 # SOURCE3 9 4.4802
+ angle_coeff @angle:c-n-p4 harmonic 76.84 123.44 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-n-p5 harmonic 76.23 128.50 # SOURCE4 6 0.5353
+ angle_coeff @angle:c-n-pc harmonic 77.00 122.23 # SOURCE3 3 2.8787
+ angle_coeff @angle:c-n-pd harmonic 77.00 122.23 # SOURCE3 3 same_as_c-n-pc
+ angle_coeff @angle:c-n-s4 harmonic 60.09 120.41 # SOURCE3 4 3.1760
+ angle_coeff @angle:c-n-s6 harmonic 60.86 125.01 # SOURCE4 13 1.6314
+ angle_coeff @angle:c-n-s harmonic 59.04 126.55 # SOURCE3 3 4.3365
+ angle_coeff @angle:c-n-sh harmonic 61.87 119.54 # SOURCE3 4 1.7681
+ angle_coeff @angle:c-n-ss harmonic 61.97 120.37 # SOURCE3 7 1.4450
+ angle_coeff @angle:c-n-sy harmonic 60.91 124.81 # SOURCE4 51 1.0517
+ angle_coeff @angle:cx-n-hn harmonic 46.26 118.58 # SOURCE4 5 0.3288
+ angle_coeff @angle:cx-n-os harmonic 97.40 54.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:cy-n-hn harmonic 45.34 119.00 # SOURCE4 65 1.3840
+ angle_coeff @angle:c3-nd-cc harmonic 67.60 109.51 # SOURCE3 9 same_as_c3-nc-cd
+ angle_coeff @angle:ca-nd-ca harmonic 70.73 109.95 # SOURCE3 1 same_as_ca-nc-ca
+ angle_coeff @angle:ca-nd-cc harmonic 72.43 104.94 # CORR 437
+ angle_coeff @angle:ca-nd-n harmonic 73.68 104.69 # CORR 2
+ angle_coeff @angle:ca-nd-na harmonic 74.57 102.74 # CORR 14
+ angle_coeff @angle:ca-nd-nc harmonic 73.55 108.41 # SOURCE4 9 0.1575
+ angle_coeff @angle:ca-nd-os harmonic 73.08 104.48 # CORR 10
+ angle_coeff @angle:ca-nd-ss harmonic 67.84 116.29 # SOURCE3 1 same_as_ca-nc-ss
+ angle_coeff @angle:c-nd-ca harmonic 66.11 120.66 # CORR 2
+ angle_coeff @angle:c-nd-cc harmonic 66.18 120.48 # CORR 138
+ angle_coeff @angle:cc-nd-cc harmonic 68.53 117.28 # CORR 17
+ angle_coeff @angle:cc-nd-cd harmonic 71.08 105.67 # CORR 1240
+ angle_coeff @angle:cc-nd-n harmonic 69.66 117.19 # CORR 64
+ angle_coeff @angle:cc-nd-na harmonic 74.24 103.73 # SOURCE3 122 2.3292
+ angle_coeff @angle:cc-nd-nd harmonic 71.99 107.88 # CORR 355
+ angle_coeff @angle:cc-nd-os harmonic 73.04 104.66 # CORR 116
+ angle_coeff @angle:cc-nd-ss harmonic 70.36 108.15 # CORR 45
+ angle_coeff @angle:cd-nd-cd harmonic 70.50 104.34 # CORR 6
+ angle_coeff @angle:cd-nd-na harmonic 73.38 102.97 # SOURCE3 1 same_as_cc-nc-na
+ angle_coeff @angle:cd-nd-nc harmonic 72.54 107.94 # SOURCE3 6 1.4052
+ angle_coeff @angle:na-nd-nc harmonic 75.97 105.47 # SOURCE3 6 0.6349
+ angle_coeff @angle:nc-nd-nd harmonic 73.11 111.29 # CORR 61
+ angle_coeff @angle:nc-nd-os harmonic 74.42 107.22 # SOURCE3 3 same_as_nd-nc-os
+ angle_coeff @angle:c1-ne-ca harmonic 60.41 150.84 # CORR 9
+ angle_coeff @angle:c1-ne-cg harmonic 66.00 140.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:c2-ne-ca harmonic 66.09 120.84 # CORR 55
+ angle_coeff @angle:c2-ne-ce harmonic 67.33 118.17 # SOURCE3 3 1.2374
+ angle_coeff @angle:c2-ne-cg harmonic 68.36 123.58 # SOURCE4 12 0.8560
+ angle_coeff @angle:c2-ne-n2 harmonic 74.56 113.31 # SOURCE3 1
+ angle_coeff @angle:c2-ne-ne harmonic 69.17 110.86 # SOURCE3 7 4.5874
+ angle_coeff @angle:c2-ne-p2 harmonic 80.83 134.03 # SOURCE3 1
+ angle_coeff @angle:c2-ne-pe harmonic 79.24 120.52 # SOURCE3 8 8.1381
+ angle_coeff @angle:c2-ne-px harmonic 80.57 117.75 # SOURCE3 5 0.8581
+ angle_coeff @angle:c2-ne-py harmonic 84.33 117.04 # SOURCE3 3 1.4398
+ angle_coeff @angle:c2-ne-sx harmonic 60.95 111.98 # SOURCE3 3 0.4090
+ angle_coeff @angle:c2-ne-sy harmonic 61.78 118.92 # CORR 9
+ angle_coeff @angle:ca-ne-cf harmonic 65.56 121.98 # CORR 15
+ angle_coeff @angle:ca-ne-n2 harmonic 69.73 114.06 # CORR 11
+ angle_coeff @angle:ca-ne-nf harmonic 69.69 115.12 # CORR 44
+ angle_coeff @angle:ca-ne-o harmonic 71.10 113.96 # SOURCE3 3 1.1253
+ angle_coeff @angle:ca-ne-p2 harmonic 83.08 118.09 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-ne-s harmonic 65.75 120.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-ne-c2 harmonic 67.85 118.53 # CORR 6
+ angle_coeff @angle:ce-ne-n2 harmonic 71.16 111.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-ne-o harmonic 72.26 112.16 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-ne-p2 harmonic 83.85 117.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-ne-s harmonic 67.15 116.28 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-ne-n1 harmonic 71.71 120.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:cg-ne-n2 harmonic 73.16 113.39 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-ne-o harmonic 74.43 114.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:cg-ne-p2 harmonic 84.75 119.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-ne-s harmonic 68.28 117.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-ne-sy harmonic 61.66 116.05 # SOURCE4 6 1.2661
+ angle_coeff @angle:n2-ne-n2 harmonic 78.59 107.22 # SOURCE3 1
+ angle_coeff @angle:n2-ne-ne harmonic 70.94 110.72 # SOURCE3 9 6.1488
+ angle_coeff @angle:n2-ne-o harmonic 78.09 114.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-ne-p2 harmonic 91.59 109.66 # SOURCE3 1
+ angle_coeff @angle:n2-ne-pe harmonic 84.18 112.15 # SOURCE3 7 6.5273
+ angle_coeff @angle:n2-ne-px harmonic 83.20 115.97 # SOURCE3 3 1.9854
+ angle_coeff @angle:n2-ne-py harmonic 87.34 114.60 # SOURCE3 3 2.9261
+ angle_coeff @angle:n2-ne-s harmonic 71.27 115.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-ne-sx harmonic 63.80 107.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-ne-sy harmonic 65.46 111.21 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-ne-o harmonic 72.28 110.45 # SOURCE3 10 1.8535
+ angle_coeff @angle:ne-ne-p2 harmonic 85.32 114.39 # SOURCE3 6 4.0528
+ angle_coeff @angle:ne-ne-s harmonic 67.59 115.95 # SOURCE3 6 3.4604
+ angle_coeff @angle:o-ne-o harmonic 76.91 124.09 # SOURCE3 2 8.7534
+ angle_coeff @angle:o-ne-pe harmonic 78.32 132.32 # SOURCE3 11 23.9559
+ angle_coeff @angle:o-ne-px harmonic 86.11 110.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-ne-py harmonic 90.01 110.79 # SOURCE3 4 1.6818
+ angle_coeff @angle:o-ne-s harmonic 71.99 117.19 # SOURCE3 2 0.0225
+ angle_coeff @angle:o-ne-sx harmonic 63.79 108.92 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-ne-sy harmonic 66.05 111.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-ne-pe harmonic 104.56 116.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-ne-px harmonic 100.10 128.35 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-ne-py harmonic 105.15 123.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-ne-sx harmonic 80.48 112.12 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-ne-sy harmonic 81.80 115.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:pe-ne-s harmonic 83.52 115.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:px-ne-s harmonic 78.54 131.84 # SOURCE3 1 0.0000
+ angle_coeff @angle:py-ne-s harmonic 86.30 116.18 # SOURCE3 4 3.7135
+ angle_coeff @angle:s-ne-s harmonic 68.65 120.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-ne-sx harmonic 63.66 112.96 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-ne-sy harmonic 63.94 119.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-nf-ca harmonic 60.41 150.84 # CORR 9
+ angle_coeff @angle:c1-nf-ch harmonic 66.00 140.00 # SOURCE2 1 same_as_c1-ne-cg
+ angle_coeff @angle:c2-nf-ca harmonic 66.09 120.84 # CORR 55
+ angle_coeff @angle:c2-nf-cf harmonic 67.33 118.17 # SOURCE3 3 same_as_c2-ne-ce
+ angle_coeff @angle:c2-nf-n2 harmonic 74.56 113.31 # SOURCE3 1 same_as_c2-ne-n2
+ angle_coeff @angle:c2-nf-nf harmonic 69.17 110.86 # SOURCE3 7 same_as_c2-ne-ne
+ angle_coeff @angle:c2-nf-p2 harmonic 80.83 134.03 # SOURCE3 1 same_as_c2-ne-p2
+ angle_coeff @angle:c2-nf-pf harmonic 79.24 120.52 # SOURCE3 8 same_as_c2-ne-pe
+ angle_coeff @angle:c2-nf-px harmonic 80.57 117.75 # SOURCE3 5 same_as_c2-ne-px
+ angle_coeff @angle:c2-nf-py harmonic 84.33 117.04 # SOURCE3 3 same_as_c2-ne-py
+ angle_coeff @angle:c2-nf-sx harmonic 60.95 111.98 # SOURCE3 3 same_as_c2-ne-sx
+ angle_coeff @angle:c2-nf-sy harmonic 61.78 118.92 # CORR 9
+ angle_coeff @angle:ca-nf-ce harmonic 65.56 121.98 # CORR 15
+ angle_coeff @angle:ca-nf-n2 harmonic 69.73 114.06 # CORR 11
+ angle_coeff @angle:ca-nf-ne harmonic 69.69 115.12 # CORR 44
+ angle_coeff @angle:ca-nf-o harmonic 71.10 113.96 # SOURCE3 3 same_as_ca-ne-o
+ angle_coeff @angle:ca-nf-p2 harmonic 83.08 118.09 # SOURCE3 1 same_as_ca-ne-p2
+ angle_coeff @angle:ca-nf-s harmonic 65.75 120.11 # SOURCE3 1 same_as_ca-ne-s
+ angle_coeff @angle:c-nf-c2 harmonic 67.85 118.53 # CORR 6
+ angle_coeff @angle:cf-nf-n2 harmonic 71.16 111.19 # SOURCE3 1 same_as_ce-ne-n2
+ angle_coeff @angle:cf-nf-o harmonic 72.26 112.16 # SOURCE3 1 same_as_ce-ne-o
+ angle_coeff @angle:cf-nf-p2 harmonic 83.85 117.02 # SOURCE3 1 same_as_ce-ne-p2
+ angle_coeff @angle:cf-nf-s harmonic 67.15 116.28 # SOURCE3 1 same_as_ce-ne-s
+ angle_coeff @angle:ch-nf-n1 harmonic 71.71 120.20 # SOURCE2 1 same_as_cg-ne-n1
+ angle_coeff @angle:ch-nf-n2 harmonic 73.16 113.39 # SOURCE3 1 same_as_cg-ne-n2
+ angle_coeff @angle:ch-nf-o harmonic 74.43 114.70 # SOURCE2 1 same_as_cg-ne-o
+ angle_coeff @angle:ch-nf-p2 harmonic 84.75 119.57 # SOURCE3 1 same_as_cg-ne-p2
+ angle_coeff @angle:ch-nf-s harmonic 68.28 117.70 # SOURCE3 1 same_as_cg-ne-s
+ angle_coeff @angle:f-n-f harmonic 67.90 102.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-nf-n2 harmonic 78.59 107.22 # SOURCE3 1 same_as_n2-ne-n2
+ angle_coeff @angle:n2-nf-nf harmonic 70.94 110.72 # SOURCE3 9 same_as_n2-ne-ne
+ angle_coeff @angle:n2-nf-o harmonic 78.09 114.10 # SOURCE3 1 same_as_n2-ne-o
+ angle_coeff @angle:n2-nf-p2 harmonic 91.59 109.66 # SOURCE3 1 same_as_n2-ne-p2
+ angle_coeff @angle:n2-nf-pf harmonic 84.18 112.15 # SOURCE3 7 same_as_n2-ne-pe
+ angle_coeff @angle:n2-nf-px harmonic 83.20 115.97 # SOURCE3 3 same_as_n2-ne-px
+ angle_coeff @angle:n2-nf-py harmonic 87.34 114.60 # SOURCE3 3 same_as_n2-ne-py
+ angle_coeff @angle:n2-nf-s harmonic 71.27 115.90 # SOURCE3 1 same_as_n2-ne-s
+ angle_coeff @angle:n2-nf-sx harmonic 63.80 107.29 # SOURCE3 1 same_as_n2-ne-sx
+ angle_coeff @angle:n2-nf-sy harmonic 65.46 111.21 # SOURCE3 1 same_as_n2-ne-sy
+ angle_coeff @angle:nf-nf-o harmonic 72.28 110.45 # SOURCE3 10 same_as_ne-ne-o
+ angle_coeff @angle:nf-nf-p2 harmonic 85.32 114.39 # SOURCE3 6 same_as_ne-ne-p2
+ angle_coeff @angle:nf-nf-s harmonic 67.59 115.95 # SOURCE3 6 same_as_ne-ne-s
+ angle_coeff @angle:o-nf-o harmonic 76.91 124.09 # SOURCE3 2 same_as_o-ne-o
+ angle_coeff @angle:o-nf-pf harmonic 78.32 132.32 # SOURCE3 11 same_as_o-ne-pe
+ angle_coeff @angle:o-nf-px harmonic 86.11 110.62 # SOURCE3 1 same_as_o-ne-px
+ angle_coeff @angle:o-nf-py harmonic 90.01 110.79 # SOURCE3 4 same_as_o-ne-py
+ angle_coeff @angle:o-nf-s harmonic 71.99 117.19 # SOURCE3 2 same_as_o-ne-s
+ angle_coeff @angle:o-nf-sx harmonic 63.79 108.92 # SOURCE3 1 same_as_o-ne-sx
+ angle_coeff @angle:o-nf-sy harmonic 66.05 111.34 # SOURCE3 1 same_as_o-ne-sy
+ angle_coeff @angle:p2-nf-pf harmonic 104.56 116.81 # SOURCE3 1 same_as_p2-ne-pe
+ angle_coeff @angle:p2-nf-px harmonic 100.10 128.35 # SOURCE3 1 same_as_p2-ne-px
+ angle_coeff @angle:p2-nf-py harmonic 105.15 123.47 # SOURCE3 1 same_as_p2-ne-py
+ angle_coeff @angle:p2-nf-sx harmonic 80.48 112.12 # SOURCE3 1 same_as_p2-ne-sx
+ angle_coeff @angle:p2-nf-sy harmonic 81.80 115.73 # SOURCE3 1 same_as_p2-ne-sy
+ angle_coeff @angle:pf-nf-s harmonic 83.52 115.73 # SOURCE3 1 same_as_pe-ne-s
+ angle_coeff @angle:px-nf-s harmonic 78.54 131.84 # SOURCE3 1 same_as_px-ne-s
+ angle_coeff @angle:py-nf-s harmonic 86.30 116.18 # SOURCE3 4 same_as_py-ne-s
+ angle_coeff @angle:s-nf-s harmonic 68.65 120.87 # SOURCE3 1 same_as_s-ne-s
+ angle_coeff @angle:s-nf-sx harmonic 63.66 112.96 # SOURCE3 1 same_as_s-ne-sx
+ angle_coeff @angle:s-nf-sy harmonic 63.94 119.63 # SOURCE3 1 same_as_s-ne-sy
+ angle_coeff @angle:br-nh-br harmonic 67.09 106.27 # SOURCE3 1
+ angle_coeff @angle:br-nh-ca harmonic 62.04 111.88 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-nh-hn harmonic 42.11 101.56 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-nh-c1 harmonic 68.33 116.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-nh-c2 harmonic 66.36 122.71 # SOURCE4 5 1.0077
+ angle_coeff @angle:c1-nh-ca harmonic 66.22 122.36 # SOURCE3 3 1.2016
+ angle_coeff @angle:c1-nh-hn harmonic 49.55 117.30 # SOURCE4 8 0.7120
+ angle_coeff @angle:c2-nh-c2 harmonic 65.54 124.50 # SOURCE4 43 1.7515
+ angle_coeff @angle:c2-nh-c3 harmonic 63.17 123.71 # SOURCE3 8 3.5348
+ angle_coeff @angle:c2-nh-ca harmonic 64.59 127.34 # SOURCE4 97 2.4321
+ angle_coeff @angle:c2-nh-cc harmonic 64.92 126.03 # CORR 11
+ angle_coeff @angle:c2-nh-cd harmonic 64.92 126.03 # CORR 11
+ angle_coeff @angle:c2-nh-cx harmonic 63.08 124.44 # SOURCE4 10 1.6817
+ angle_coeff @angle:c2-nh-hn harmonic 49.62 114.89 # SOURCE4 1000 1.4571
+ angle_coeff @angle:c2-nh-n2 harmonic 68.36 120.00 # SOURCE4 33 1.1823
+ angle_coeff @angle:c2-nh-n3 harmonic 67.57 116.98 # SOURCE4 14 1.4183
+ angle_coeff @angle:c2-nh-no harmonic 66.09 125.63 # SOURCE4 7 0.7554
+ angle_coeff @angle:c2-nh-oh harmonic 69.45 112.51 # SOURCE4 12 1.1687
+ angle_coeff @angle:c2-nh-os harmonic 69.27 112.93 # SOURCE4 6 0.3945
+ angle_coeff @angle:c2-nh-sy harmonic 61.76 121.13 # SOURCE4 10 0.5133
+ angle_coeff @angle:c3-nh-c3 harmonic 63.53 114.44 # SOURCE4 523 2.1428
+ angle_coeff @angle:c3-nh-ca harmonic 64.56 117.77 # SOURCE3 8 1.7521
+ angle_coeff @angle:c3-nh-cc harmonic 64.17 119.23 # CORR 163
+ angle_coeff @angle:c3-nh-cd harmonic 64.17 119.23 # CORR 163
+ angle_coeff @angle:c3-nh-cf harmonic 63.47 119.92 # SOURCE4 20 1.8571
+ angle_coeff @angle:c3-nh-cz harmonic 63.01 125.51 # SOURCE4 12 0.5177
+ angle_coeff @angle:c3-nh-hn harmonic 46.46 114.95 # SOURCE3 19 2.4787
+ angle_coeff @angle:c3-nh-n2 harmonic 67.89 112.35 # SOURCE3 9 4.0058
+ angle_coeff @angle:c3-nh-n harmonic 67.10 111.71 # SOURCE4 6 2.4251
+ angle_coeff @angle:c3-nh-na harmonic 66.92 112.43 # SOURCE4 8 1.4219
+ angle_coeff @angle:c3-nh-p2 harmonic 77.12 123.35 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-nh-sy harmonic 61.91 116.12 # SOURCE4 13 1.2830
+ angle_coeff @angle:ca-nh-ca harmonic 64.34 127.46 # SOURCE3 2 0.0002
+ angle_coeff @angle:ca-nh-cc harmonic 63.77 129.77 # CORR 38
+ angle_coeff @angle:ca-nh-cd harmonic 63.77 129.77 # CORR 38
+ angle_coeff @angle:ca-nh-cl harmonic 57.67 113.15 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-nh-cx harmonic 63.11 123.63 # SOURCE4 36 0.5899
+ angle_coeff @angle:ca-nh-f harmonic 67.90 106.09 # SOURCE3 3 1.0660
+ angle_coeff @angle:ca-nh-hn harmonic 49.08 116.13 # SOURCE4 1780 1.2853
+ angle_coeff @angle:ca-nh-i harmonic 55.55 117.83 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-nh-n1 harmonic 69.37 117.13 # HF/6-31G* 1
+ angle_coeff @angle:ca-nh-n2 harmonic 67.82 121.11 # SOURCE4 19 0.9700
+ angle_coeff @angle:ca-nh-n3 harmonic 68.18 114.21 # SOURCE3 6 2.2412
+ angle_coeff @angle:ca-nh-n4 harmonic 68.56 108.94 # SOURCE3 5 0.6562
+ angle_coeff @angle:ca-nh-n harmonic 68.07 116.15 # SOURCE4 12 0.8135
+ angle_coeff @angle:ca-nh-na harmonic 68.58 114.54 # SOURCE3 8 0.7807
+ angle_coeff @angle:ca-nh-nh harmonic 68.49 114.87 # SOURCE3 6 2.1432
+ angle_coeff @angle:ca-nh-no harmonic 69.19 113.92 # SOURCE3 4 2.9561
+ angle_coeff @angle:ca-nh-o harmonic 69.64 121.92 # SOURCE3 2 3.9630
+ angle_coeff @angle:ca-nh-oh harmonic 69.15 112.80 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-nh-os harmonic 69.93 110.17 # SOURCE3 3 0.6448
+ angle_coeff @angle:ca-nh-p2 harmonic 77.99 125.27 # SOURCE3 8 5.1798
+ angle_coeff @angle:ca-nh-p3 harmonic 76.07 125.70 # SOURCE3 3 5.7796
+ angle_coeff @angle:ca-nh-p4 harmonic 77.43 124.01 # SOURCE3 3 2.5810
+ angle_coeff @angle:ca-nh-p5 harmonic 78.16 125.61 # SOURCE3 3 0.5287
+ angle_coeff @angle:ca-nh-s4 harmonic 62.13 115.62 # SOURCE3 3 0.3434
+ angle_coeff @angle:ca-nh-s6 harmonic 61.56 123.53 # SOURCE4 33 2.0385
+ angle_coeff @angle:ca-nh-s harmonic 59.38 122.54 # SOURCE3 3 2.7001
+ angle_coeff @angle:ca-nh-sh harmonic 61.78 121.41 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-nh-ss harmonic 61.75 121.50 # SOURCE3 3 2.6255
+ angle_coeff @angle:ca-nh-sy harmonic 60.64 125.26 # SOURCE4 41 1.7517
+ angle_coeff @angle:cc-nh-cx harmonic 63.09 123.72 # CORR 58
+ angle_coeff @angle:cc-nh-hn harmonic 48.86 117.16 # SOURCE3 11 2.6137
+ angle_coeff @angle:cc-nh-n2 harmonic 68.23 119.66 # SOURCE4 5 1.3903
+ angle_coeff @angle:cc-nh-sy harmonic 61.22 122.91 # SOURCE4 23 1.2029
+ angle_coeff @angle:cd-nh-cx harmonic 63.09 123.72 # CORR 58
+ angle_coeff @angle:cd-nh-hn harmonic 48.86 117.16 # SOURCE3 11 2.6137
+ angle_coeff @angle:ce-nh-hn harmonic 48.38 115.62 # CORR 203
+ angle_coeff @angle:ce-nh-o harmonic 66.85 129.43 # CORR 2
+ angle_coeff @angle:ce-nh-sy harmonic 63.58 112.97 # SOURCE4 7 1.0636
+ angle_coeff @angle:cf-nh-hn harmonic 48.38 115.62 # CORR 203
+ angle_coeff @angle:cf-nh-o harmonic 66.85 129.43 # CORR 2
+ angle_coeff @angle:cl-nh-cl harmonic 54.43 106.60 # SOURCE3 1
+ angle_coeff @angle:cl-nh-hn harmonic 40.07 104.14 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-nh-cx harmonic 86.53 62.02 # SOURCE4 45 0.6189
+ angle_coeff @angle:cx-nh-hn harmonic 45.79 118.89 # SOURCE4 8 0.1391
+ angle_coeff @angle:cz-nh-hn harmonic 48.79 121.24 # SOURCE4 40 0.5682
+ angle_coeff @angle:f-nh-f harmonic 66.93 101.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-nh-hn harmonic 49.80 101.23 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-nh-hn harmonic 40.05 114.85 # SOURCE4 1108 2.0811
+ angle_coeff @angle:hn-nh-i harmonic 36.55 107.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-nh-n1 harmonic 52.31 110.57 # HF/6-31G* 1
+ angle_coeff @angle:hn-nh-n2 harmonic 50.08 118.22 # SOURCE4 75 2.3319
+ angle_coeff @angle:hn-nh-n3 harmonic 50.05 109.12 # SOURCE3 5 2.3680
+ angle_coeff @angle:hn-nh-n4 harmonic 49.69 104.40 # SOURCE3 3 0.5056
+ angle_coeff @angle:hn-nh-n harmonic 50.89 107.96 # SOURCE4 16 1.2025
+ angle_coeff @angle:hn-nh-na harmonic 50.95 107.91 # SOURCE3 26 1.5528
+ angle_coeff @angle:hn-nh-nh harmonic 50.32 110.64 # SOURCE4 8 1.3390
+ angle_coeff @angle:hn-nh-no harmonic 50.99 109.93 # SOURCE4 7 0.2027
+ angle_coeff @angle:hn-nh-o harmonic 52.99 116.45 # SOURCE3 2 0.6063
+ angle_coeff @angle:hn-nh-oh harmonic 51.13 106.55 # SOURCE4 8 0.4590
+ angle_coeff @angle:hn-nh-os harmonic 51.51 104.76 # SOURCE3 3 0.4883
+ angle_coeff @angle:hn-nh-p2 harmonic 54.38 118.18 # SOURCE3 21 3.6927
+ angle_coeff @angle:hn-nh-p3 harmonic 53.06 116.19 # SOURCE3 3 3.0539
+ angle_coeff @angle:hn-nh-p4 harmonic 54.74 112.60 # SOURCE3 3 0.8237
+ angle_coeff @angle:hn-nh-p5 harmonic 55.35 115.26 # SOURCE3 3 0.9168
+ angle_coeff @angle:hn-nh-s4 harmonic 43.06 107.48 # SOURCE3 3 1.3960
+ angle_coeff @angle:hn-nh-s harmonic 40.81 114.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-nh-s6 harmonic 44.04 109.98 # SOURCE4 29 0.7478
+ angle_coeff @angle:hn-nh-sh harmonic 43.27 112.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-nh-ss harmonic 42.95 113.89 # SOURCE3 3 1.4030
+ angle_coeff @angle:hn-nh-sy harmonic 43.28 111.23 # SOURCE4 62 1.1413
+ angle_coeff @angle:i-nh-i harmonic 59.80 115.82 # SOURCE3 1
+ angle_coeff @angle:n1-nh-n1 harmonic 75.13 106.71 # HF/6-31G* 1
+ angle_coeff @angle:n2-nh-n2 harmonic 70.76 117.50 # SOURCE3 2 1.1907
+ angle_coeff @angle:n2-nh-n3 harmonic 69.63 115.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-nh-o harmonic 70.40 126.06 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-nh-n3 harmonic 69.52 110.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-nh-n4 harmonic 68.15 108.36 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-nh-na harmonic 70.14 112.01 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-hn harmonic 39.73 117.85 # SOURCE3 15 2.3694
+ angle_coeff @angle:nh-nh-nh harmonic 70.07 112.23 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-i harmonic 36.08 117.24 # SOURCE3 2 0.4435
+ angle_coeff @angle:hn-n-n2 harmonic 49.62 118.33 # SOURCE3 5 2.2377
+ angle_coeff @angle:hn-n-n3 harmonic 48.69 117.22 # SOURCE4 37 1.3737
+ angle_coeff @angle:hn-n-n4 harmonic 48.90 112.68 # SOURCE3 3 1.9746
+ angle_coeff @angle:hn-n-n harmonic 50.14 113.12 # SOURCE3 7 3.2954
+ angle_coeff @angle:hn-n-na harmonic 50.40 113.55 # SOURCE3 8 1.9324
+ angle_coeff @angle:hn-n-nc harmonic 50.74 115.24 # SOURCE4 10 0.4966
+ angle_coeff @angle:hn-n-nh harmonic 49.74 113.13 # SOURCE4 12 1.2125
+ angle_coeff @angle:hn-n-no harmonic 48.71 110.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-o harmonic 53.83 116.32 # SOURCE3 2 0.0175
+ angle_coeff @angle:n-nh-o harmonic 72.07 115.63 # SOURCE3 1
+ angle_coeff @angle:hn-n-oh harmonic 50.33 110.71 # SOURCE4 46 1.1278
+ angle_coeff @angle:no-nh-no harmonic 72.07 108.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-os harmonic 50.52 109.82 # SOURCE4 12 0.6996
+ angle_coeff @angle:hn-n-p2 harmonic 52.51 118.05 # SOURCE3 7 3.0564
+ angle_coeff @angle:hn-n-p3 harmonic 50.93 119.63 # SOURCE3 2 0.0000
+ angle_coeff @angle:hn-n-p4 harmonic 53.00 115.71 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-p5 harmonic 54.50 113.20 # SOURCE4 6 1.0341
+ angle_coeff @angle:hn-n-s4 harmonic 41.18 112.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-s harmonic 41.14 114.92 # SOURCE3 2 0.0260
+ angle_coeff @angle:hn-n-s6 harmonic 43.06 112.18 # SOURCE4 6 0.6101
+ angle_coeff @angle:hn-n-sh harmonic 42.19 114.91 # SOURCE3 1 0.0000
+ angle_coeff @angle:hn-n-ss harmonic 42.36 115.60 # SOURCE3 3 0.6414
+ angle_coeff @angle:hn-n-sy harmonic 43.02 112.34 # SOURCE4 38 0.6039
+ angle_coeff @angle:oh-nh-oh harmonic 72.15 106.27 # SOURCE3 1
+ angle_coeff @angle:o-nh-o harmonic 72.24 128.06 # SOURCE3 1
+ angle_coeff @angle:os-nh-os harmonic 72.41 105.27 # SOURCE3 1
+ angle_coeff @angle:p2-nh-p2 harmonic 98.07 127.33 # SOURCE3 2 2.7857
+ angle_coeff @angle:p3-nh-p3 harmonic 96.03 125.08 # SOURCE3 1
+ angle_coeff @angle:p5-nh-p5 harmonic 104.72 112.76 # SOURCE3 1
+ angle_coeff @angle:s4-nh-s4 harmonic 62.56 112.39 # SOURCE3 1
+ angle_coeff @angle:s6-nh-s6 harmonic 62.35 120.27 # SOURCE3 1
+ angle_coeff @angle:sh-nh-sh harmonic 62.26 119.00 # SOURCE3 1
+ angle_coeff @angle:s-nh-s harmonic 59.67 118.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-nh-ss harmonic 62.19 119.25 # SOURCE3 1
+ angle_coeff @angle:i-n-i harmonic 60.66 118.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-n-n2 harmonic 70.16 116.89 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-n-n3 harmonic 68.02 117.94 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-n-n4 harmonic 68.42 112.69 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-n-na harmonic 69.61 117.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:nc-n-nc harmonic 71.04 116.41 # CORR 2
+ angle_coeff @angle:nc-n-p2 harmonic 80.69 117.21 # CORR 2
+ angle_coeff @angle:nc-n-pc harmonic 80.42 117.21 # CORR 2
+ angle_coeff @angle:nd-n-nd harmonic 71.04 116.41 # CORR 2
+ angle_coeff @angle:nd-n-p2 harmonic 80.69 117.21 # CORR 2
+ angle_coeff @angle:nd-n-pd harmonic 80.42 117.21 # CORR 2
+ angle_coeff @angle:nh-n-nh harmonic 69.10 115.18 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-n-n harmonic 69.89 114.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-n-no harmonic 68.52 108.66 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-no-o harmonic 58.48 113.19 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-no-o harmonic 71.34 116.63 # SOURCE3 6 0.0000
+ angle_coeff @angle:c2-no-o harmonic 69.87 116.87 # SOURCE3 8 0.4200
+ angle_coeff @angle:c3-no-o harmonic 66.96 116.56 # SOURCE3 6 0.3959
+ angle_coeff @angle:ca-no-o harmonic 68.74 118.10 # SOURCE3 10 1.1524
+ angle_coeff @angle:cc-no-o harmonic 70.34 117.52 # SOURCE4 198 0.6255
+ angle_coeff @angle:cl-no-o harmonic 57.30 115.08 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-no-o harmonic 67.10 115.26 # SOURCE3 1
+ angle_coeff @angle:hn-no-o harmonic 55.31 115.49 # SOURCE3 2 0.0000
+ angle_coeff @angle:oh-n-oh harmonic 72.05 107.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-no-o harmonic 54.60 116.31 # SOURCE3 2 0.0000
+ angle_coeff @angle:n1-no-o harmonic 73.78 115.00 # HF/6-31G* 1
+ angle_coeff @angle:n2-no-o harmonic 65.79 115.10 # SOURCE2 2 2.4000
+ angle_coeff @angle:n3-no-o harmonic 72.01 115.56 # SOURCE3 6 0.6427
+ angle_coeff @angle:n4-no-o harmonic 72.87 109.00 # SOURCE3 2 0.0000
+ angle_coeff @angle:na-no-o harmonic 72.24 115.49 # SOURCE3 18 0.5640
+ angle_coeff @angle:nh-no-o harmonic 74.08 115.71 # SOURCE3 8 0.4811
+ angle_coeff @angle:n-no-o harmonic 71.67 115.41 # SOURCE3 8 0.3748
+ angle_coeff @angle:no-no-o harmonic 59.92 112.38 # SOURCE3 4 0.0000
+ angle_coeff @angle:o-n-o harmonic 73.39 128.61 # SOURCE3 3 1.0626
+ angle_coeff @angle:o-no-o harmonic 77.15 125.13 # SOURCE4 461 0.7605
+ angle_coeff @angle:o-no-oh harmonic 74.09 114.70 # SOURCE3 2 0.0000
+ angle_coeff @angle:o-no-os harmonic 73.71 114.01 # SOURCE3 8 0.9778
+ angle_coeff @angle:o-no-p2 harmonic 82.07 117.38 # SOURCE3 20 0.8083
+ angle_coeff @angle:o-no-p3 harmonic 77.73 116.78 # SOURCE3 6 0.4929
+ angle_coeff @angle:o-no-p4 harmonic 76.69 116.64 # SOURCE3 6 0.0089
+ angle_coeff @angle:o-no-p5 harmonic 78.18 116.69 # SOURCE3 8 0.4507
+ angle_coeff @angle:o-no-s4 harmonic 57.15 114.49 # SOURCE3 6 0.5674
+ angle_coeff @angle:o-no-s6 harmonic 57.79 114.39 # SOURCE3 6 0.8311
+ angle_coeff @angle:o-no-s harmonic 64.05 119.81 # SOURCE3 4 0.0042
+ angle_coeff @angle:o-no-sh harmonic 62.94 116.10 # SOURCE3 2 0.0000
+ angle_coeff @angle:o-no-ss harmonic 62.27 115.58 # SOURCE3 6 0.5860
+ angle_coeff @angle:os-n-os harmonic 72.28 106.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-n-p2 harmonic 98.03 119.62 # SOURCE3 1
+ angle_coeff @angle:p3-n-p3 harmonic 100.67 108.73 # SOURCE3 3 0.2591
+ angle_coeff @angle:p4-n-p4 harmonic 102.85 108.55 # SOURCE3 1
+ angle_coeff @angle:p5-n-p5 harmonic 108.79 99.99 # SOURCE3 1
+ angle_coeff @angle:pc-n-pc harmonic 97.64 119.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:pd-n-pd harmonic 97.64 119.62 # SOURCE3 1 same_as_pc-n-pc
+ angle_coeff @angle:s4-n-s4 harmonic 61.03 113.75 # SOURCE3 1 0.0000
+ angle_coeff @angle:s6-n-s6 harmonic 61.82 119.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-n-sh harmonic 61.53 119.03 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-n-s harmonic 58.48 126.00 # SOURCE3 1
+ angle_coeff @angle:ss-n-ss harmonic 62.06 118.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-oh-ho harmonic 42.15 101.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-oh-ho harmonic 50.20 108.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-oh-ho harmonic 49.91 108.98 # SOURCE3 6 2.2379
+ angle_coeff @angle:c3-oh-ho harmonic 47.09 108.16 # SOURCE3 42 1.3034
+ angle_coeff @angle:ca-oh-ho harmonic 48.85 109.47 # SOURCE3 7 1.0405
+ angle_coeff @angle:cc-oh-ho harmonic 49.96 107.06 # CORR 117
+ angle_coeff @angle:cd-oh-ho harmonic 49.96 107.06 # CORR 117
+ angle_coeff @angle:ce-oh-ho harmonic 49.85 106.95 # CORR 34
+ angle_coeff @angle:cf-oh-ho harmonic 49.85 106.95 # CORR 34
+ angle_coeff @angle:c-oh-ho harmonic 51.19 107.37 # SOURCE3 34 1.6830
+ angle_coeff @angle:cl-oh-ho harmonic 40.51 102.40 # SOURCE2 1 0.0000
+ angle_coeff @angle:cx-oh-ho harmonic 49.64 106.17 # SOURCE3 3 0.0644
+ angle_coeff @angle:cy-oh-ho harmonic 47.62 107.32 # SOURCE4 5 0.4955
+ angle_coeff @angle:f-oh-ho harmonic 48.47 96.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:ho-oh-ho harmonic 41.93 104.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:ho-oh-i harmonic 35.67 107.98 # SOURCE3 2 0.0000
+ angle_coeff @angle:ho-oh-n1 harmonic 52.55 107.81 # HF/6-31G* 1
+ angle_coeff @angle:ho-oh-n2 harmonic 50.57 102.74 # SOURCE3 9 2.1286
+ angle_coeff @angle:ho-oh-n3 harmonic 50.61 102.33 # SOURCE3 5 1.2591
+ angle_coeff @angle:ho-oh-n4 harmonic 49.44 106.63 # SOURCE3 3 0.2770
+ angle_coeff @angle:ho-oh-n harmonic 50.46 101.03 # SOURCE3 6 1.4086
+ angle_coeff @angle:ho-oh-na harmonic 50.24 103.71 # SOURCE3 9 1.2590
+ angle_coeff @angle:ho-oh-nh harmonic 49.97 102.42 # SOURCE4 15 0.6819
+ angle_coeff @angle:ho-oh-no harmonic 50.31 102.17 # SOURCE3 1 0.0000
+ angle_coeff @angle:ho-oh-o harmonic 47.26 100.87 # SOURCE3 1
+ angle_coeff @angle:ho-oh-oh harmonic 49.34 98.72 # SOURCE3 2 0.0000
+ angle_coeff @angle:ho-oh-os harmonic 49.58 99.69 # SOURCE4 18 0.3384
+ angle_coeff @angle:ho-oh-p2 harmonic 55.87 109.45 # SOURCE3 8 3.3491
+ angle_coeff @angle:ho-oh-p3 harmonic 53.84 110.64 # SOURCE3 3 0.5191
+ angle_coeff @angle:ho-oh-p4 harmonic 55.27 110.19 # SOURCE3 4 0.2372
+ angle_coeff @angle:ho-oh-p5 harmonic 55.88 110.14 # SOURCE3 92 3.8033
+ angle_coeff @angle:ho-oh-py harmonic 56.18 110.73 # SOURCE3 79 1.7835
+ angle_coeff @angle:ho-oh-s4 harmonic 42.77 106.76 # SOURCE4 9 0.4035
+ angle_coeff @angle:ho-oh-s harmonic 40.86 100.15 # SOURCE3 2 0.0000
+ angle_coeff @angle:ho-oh-s6 harmonic 45.46 109.20 # SOURCE3 13 0.1856
+ angle_coeff @angle:ho-oh-sh harmonic 42.97 106.24 # SOURCE3 2 0.0661
+ angle_coeff @angle:ho-oh-ss harmonic 43.10 107.06 # SOURCE3 4 0.9967
+ angle_coeff @angle:ho-oh-sy harmonic 44.20 106.41 # SOURCE4 33 0.3729
+ angle_coeff @angle:br-os-br harmonic 65.08 110.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-os-c1 harmonic 66.99 115.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-os-c3 harmonic 64.47 113.39 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-os-c2 harmonic 65.95 113.14 # SOURCE3 6 2.1932
+ angle_coeff @angle:c2-os-c3 harmonic 64.21 112.09 # SOURCE3 7 4.1809
+ angle_coeff @angle:c2-os-ca harmonic 65.43 113.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-os-n2 harmonic 64.91 118.13 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-os-na harmonic 68.21 103.85 # SOURCE3 4 0.6297
+ angle_coeff @angle:c2-os-os harmonic 68.35 102.77 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-os-p5 harmonic 77.31 126.37 # SOURCE4 7 1.7939
+ angle_coeff @angle:c2-os-ss harmonic 63.08 108.13 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-os-c3 harmonic 62.39 112.45 # SOURCE4 1293 1.6468
+ angle_coeff @angle:c3-os-ca harmonic 62.27 117.97 # SOURCE4 2495 1.4576
+ angle_coeff @angle:c3-os-cc harmonic 62.50 117.33 # CORR 248
+ angle_coeff @angle:c3-os-cd harmonic 62.50 117.33 # CORR 248
+ angle_coeff @angle:c3-os-ce harmonic 62.79 116.05 # CORR 37
+ angle_coeff @angle:c3-os-cf harmonic 62.79 116.05 # CORR 37
+ angle_coeff @angle:c3-os-cl harmonic 56.20 110.50 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-os-cy harmonic 61.67 115.65 # SOURCE4 5 0.2390
+ angle_coeff @angle:c3-os-i harmonic 54.88 113.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-os-n1 harmonic 66.31 113.50 # HF/6-31G* 1
+ angle_coeff @angle:c3-os-n2 harmonic 65.92 108.12 # SOURCE3 7 0.3048
+ angle_coeff @angle:c3-os-n3 harmonic 64.52 110.28 # SOURCE4 14 1.9026
+ angle_coeff @angle:c3-os-n4 harmonic 64.88 110.50 # SOURCE3 3 0.5426
+ angle_coeff @angle:c3-os-n harmonic 65.40 109.52 # SOURCE4 14 0.6827
+ angle_coeff @angle:c3-os-na harmonic 64.54 109.91 # SOURCE3 9 1.8268
+ angle_coeff @angle:c3-os-nc harmonic 64.80 112.73 # SOURCE3 2 1.0358
+ angle_coeff @angle:c3-os-nd harmonic 64.80 112.73 # SOURCE3 2 same_as_c3-os-nc
+ angle_coeff @angle:c3-os-nh harmonic 65.22 109.69 # SOURCE4 8 0.1662
+ angle_coeff @angle:c3-os-no harmonic 63.89 113.80 # SOURCE4 42 0.2726
+ angle_coeff @angle:c3-os-o harmonic 65.62 103.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-os-oh harmonic 65.24 107.97 # SOURCE4 11 0.4333
+ angle_coeff @angle:c3-os-os harmonic 65.89 105.01 # SOURCE3 7 0.6328
+ angle_coeff @angle:c3-os-p2 harmonic 80.24 115.47 # SOURCE3 8 2.6374
+ angle_coeff @angle:c3-os-p3 harmonic 76.51 115.97 # SOURCE3 3 0.3597
+ angle_coeff @angle:c3-os-p4 harmonic 77.59 117.48 # SOURCE3 4 0.3850
+ angle_coeff @angle:c3-os-p5 harmonic 78.48 118.00 # SOURCE3 31 1.2882
+ angle_coeff @angle:c3-os-py harmonic 78.07 117.80 # SOURCE3 16 0.9654
+ angle_coeff @angle:c3-os-s4 harmonic 61.32 111.50 # SOURCE3 6 1.4240
+ angle_coeff @angle:c3-os-s6 harmonic 63.21 115.79 # SOURCE4 60 1.2588
+ angle_coeff @angle:c3-os-s harmonic 59.28 109.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-os-sh harmonic 61.67 112.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-os-ss harmonic 60.74 113.19 # SOURCE3 3 0.2455
+ angle_coeff @angle:ca-os-ca harmonic 63.31 119.95 # SOURCE4 107 1.6535
+ angle_coeff @angle:ca-os-cc harmonic 67.21 106.65 # CORR 62
+ angle_coeff @angle:ca-os-cd harmonic 67.21 106.65 # CORR 62
+ angle_coeff @angle:ca-os-n3 harmonic 65.39 112.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-os-na harmonic 66.47 108.24 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-os-nc harmonic 66.09 113.68 # SOURCE3 2
+ angle_coeff @angle:ca-os-nd harmonic 66.09 113.68 # SOURCE3 2
+ angle_coeff @angle:ca-os-p5 harmonic 77.96 123.42 # SOURCE4 54 1.1358
+ angle_coeff @angle:ca-os-s6 harmonic 63.95 116.97 # SOURCE4 15 0.9514
+ angle_coeff @angle:c-os-c2 harmonic 64.91 118.02 # SOURCE4 7 0.3666
+ angle_coeff @angle:c-os-c3 harmonic 63.63 115.14 # SOURCE3 17 1.8967
+ angle_coeff @angle:c-os-c harmonic 64.54 120.64 # SOURCE4 7 1.5114
+ angle_coeff @angle:c-os-ca harmonic 63.75 120.87 # SOURCE4 257 1.7209
+ angle_coeff @angle:c-os-cc harmonic 64.15 119.62 # SOURCE3 5 6.0675
+ angle_coeff @angle:cc-os-cc harmonic 67.27 106.69 # CORR 252
+ angle_coeff @angle:cc-os-cd harmonic 63.80 118.62 # SOURCE4 14 1.9764
+ angle_coeff @angle:c-os-cd harmonic 64.15 119.62 # SOURCE3 5 6.0675
+ angle_coeff @angle:cc-os-na harmonic 65.51 111.66 # SOURCE3 28 4.1343
+ angle_coeff @angle:cc-os-nc harmonic 68.12 107.23 # SOURCE3 6 2.7507
+ angle_coeff @angle:cc-os-os harmonic 66.27 108.47 # SOURCE3 2 0.0000
+ angle_coeff @angle:cc-os-ss harmonic 59.85 119.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-os-cy harmonic 71.75 91.10 # SOURCE3 2 0.0155
+ angle_coeff @angle:cd-os-cd harmonic 67.27 106.69 # CORR 252
+ angle_coeff @angle:cd-os-na harmonic 65.51 111.66 # SOURCE3 28 4.1343
+ angle_coeff @angle:cd-os-nd harmonic 68.12 107.23 # SOURCE3 6 2.7507
+ angle_coeff @angle:cd-os-os harmonic 66.27 108.47 # SOURCE3 2 same_as_cc-os-os
+ angle_coeff @angle:cd-os-ss harmonic 59.85 119.59 # SOURCE3 1 same_as_cc-os-ss
+ angle_coeff @angle:cl-os-cl harmonic 52.29 110.76 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-os-n2 harmonic 66.95 112.08 # SOURCE4 6 0.1154
+ angle_coeff @angle:c-os-n harmonic 66.83 112.10 # SOURCE4 6 0.6163
+ angle_coeff @angle:c-os-oh harmonic 66.50 110.50 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-os-os harmonic 66.25 110.28 # SOURCE4 10 1.3612
+ angle_coeff @angle:c-os-p5 harmonic 78.89 122.10 # SOURCE4 5 0.5870
+ angle_coeff @angle:c-os-sy harmonic 61.85 113.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-os-cx harmonic 85.27 61.82 # SOURCE4 107 0.1793
+ angle_coeff @angle:cx-os-n harmonic 88.98 59.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-os-os harmonic 90.38 56.52 # SOURCE3 2 0.0000
+ angle_coeff @angle:cy-os-cy harmonic 68.81 93.40 # SOURCE2 2 1.4000
+ angle_coeff @angle:f-os-f harmonic 63.94 103.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-os-os harmonic 63.94 109.50 # SOURCE2 1 0.0000
+ angle_coeff @angle:i-os-i harmonic 58.06 115.67 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-os-n1 harmonic 70.28 117.79 # HF/6-31G* 1
+ angle_coeff @angle:n2-os-n2 harmonic 68.76 106.83 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-os-s6 harmonic 66.63 111.30 # SOURCE4 7 0.5651
+ angle_coeff @angle:n3-os-n3 harmonic 67.76 104.88 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-os-n4 harmonic 65.66 114.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-os-na harmonic 66.10 109.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-os-ss harmonic 64.75 104.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:nc-os-nc harmonic 68.17 110.40 # SOURCE2 1 0.0000
+ angle_coeff @angle:nc-os-ss harmonic 63.38 110.97 # SOURCE3 1 0.0000
+ angle_coeff @angle:nd-os-nd harmonic 68.17 110.40 # SOURCE2 1 same_as_nc-os-nc
+ angle_coeff @angle:nd-os-ss harmonic 63.38 110.97 # SOURCE3 1 same_as_nc-os-ss
+ angle_coeff @angle:nh-os-nh harmonic 67.81 108.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-os-n harmonic 68.08 108.31 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-os-no harmonic 66.40 111.86 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-os-s6 harmonic 65.87 113.62 # SOURCE4 5 0.0928
+ angle_coeff @angle:o-os-o harmonic 62.76 114.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-os-p2 harmonic 103.59 120.02 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-os-p5 harmonic 108.26 107.86 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-os-p3 harmonic 96.17 121.22 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-os-py harmonic 105.11 105.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:p5-os-p5 harmonic 99.18 126.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-os-s4 harmonic 62.09 111.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:s6-os-s6 harmonic 64.77 119.07 # SOURCE3 2 0.4318
+ angle_coeff @angle:sh-os-sh harmonic 61.15 118.95 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-os-s harmonic 56.98 118.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-os-ss harmonic 60.82 115.64 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p2-br harmonic 40.68 108.60 # SOURCE3 1
+ angle_coeff @angle:br-p2-c2 harmonic 39.43 102.32 # SOURCE3 2 0.0146
+ angle_coeff @angle:br-p2-n2 harmonic 40.42 103.33 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p2-o harmonic 39.43 110.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p2-p2 harmonic 50.16 115.46 # SOURCE3 4 7.8622
+ angle_coeff @angle:br-p2-s harmonic 40.59 110.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-p2-c1 harmonic 39.20 99.04 # SOURCE3 1
+ angle_coeff @angle:c1-p2-c2 harmonic 39.82 101.29 # SOURCE3 1
+ angle_coeff @angle:c1-p2-n2 harmonic 41.36 101.79 # SOURCE3 1
+ angle_coeff @angle:c1-p2-o harmonic 41.32 107.62 # SOURCE3 1
+ angle_coeff @angle:c1-p2-p2 harmonic 53.31 99.54 # SOURCE3 1
+ angle_coeff @angle:c1-p2-s harmonic 41.00 105.90 # SOURCE3 1
+ angle_coeff @angle:c2-p2-c2 harmonic 40.45 104.50 # SOURCE3 1
+ angle_coeff @angle:c2-p2-c3 harmonic 38.60 101.90 # SOURCE3 4 0.1132
+ angle_coeff @angle:c2-p2-ca harmonic 38.79 101.95 # SOURCE3 1
+ angle_coeff @angle:c2-p2-cl harmonic 35.61 102.72 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-p2-f harmonic 41.60 103.47 # SOURCE3 2 0.0136
+ angle_coeff @angle:c2-p2-hp harmonic 30.13 97.19 # SOURCE3 3 0.0216
+ angle_coeff @angle:c2-p2-i harmonic 33.85 101.94 # SOURCE3 2 0.0368
+ angle_coeff @angle:c2-p2-n2 harmonic 43.20 99.88 # SOURCE3 1
+ angle_coeff @angle:c2-p2-n3 harmonic 41.99 101.80 # SOURCE3 1
+ angle_coeff @angle:c2-p2-n4 harmonic 39.07 98.26 # SOURCE3 6 0.1522
+ angle_coeff @angle:c2-p2-n harmonic 40.89 103.28 # SOURCE3 4 3.3113
+ angle_coeff @angle:c2-p2-na harmonic 40.54 103.99 # SOURCE3 8 1.6834
+ angle_coeff @angle:c2-p2-nh harmonic 41.20 105.17 # SOURCE3 8 0.8263
+ angle_coeff @angle:c2-p2-no harmonic 41.91 97.97 # SOURCE3 3 0.4175
+ angle_coeff @angle:c2-p2-o harmonic 41.51 115.16 # SOURCE3 1
+ angle_coeff @angle:c2-p2-oh harmonic 42.50 102.89 # SOURCE3 3 0.8191
+ angle_coeff @angle:c2-p2-os harmonic 43.35 102.12 # SOURCE3 4 0.8783
+ angle_coeff @angle:c2-p2-p2 harmonic 54.72 99.56 # SOURCE3 1
+ angle_coeff @angle:c2-p2-p3 harmonic 48.11 99.27 # SOURCE3 4 1.1590
+ angle_coeff @angle:c2-p2-p4 harmonic 48.19 96.94 # SOURCE3 1
+ angle_coeff @angle:c2-p2-p5 harmonic 48.01 97.61 # SOURCE3 1
+ angle_coeff @angle:c2-p2-s4 harmonic 38.27 95.15 # SOURCE3 1
+ angle_coeff @angle:c2-p2-s6 harmonic 38.35 95.51 # SOURCE3 1
+ angle_coeff @angle:c2-p2-s harmonic 42.19 105.53 # SOURCE3 1
+ angle_coeff @angle:c2-p2-sh harmonic 40.19 101.49 # SOURCE3 3 0.0057
+ angle_coeff @angle:c2-p2-ss harmonic 40.19 101.81 # SOURCE3 4 0.5883
+ angle_coeff @angle:c3-p2-c3 harmonic 37.36 99.30 # SOURCE3 1
+ angle_coeff @angle:c3-p2-n2 harmonic 40.30 100.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p2-o harmonic 40.10 106.72 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p2-os harmonic 40.68 101.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p2-p2 harmonic 51.78 100.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p2-s harmonic 40.04 105.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-p2-ca harmonic 37.59 99.70 # SOURCE3 1
+ angle_coeff @angle:ca-p2-n2 harmonic 40.53 100.82 # SOURCE3 1
+ angle_coeff @angle:ca-p2-n harmonic 41.68 89.97 # SOURCE3 1
+ angle_coeff @angle:ca-p2-na harmonic 41.69 89.21 # SOURCE3 1
+ angle_coeff @angle:ca-p2-o harmonic 40.31 106.88 # SOURCE3 1
+ angle_coeff @angle:ca-p2-s harmonic 39.79 107.93 # SOURCE3 1
+ angle_coeff @angle:c-p2-c2 harmonic 38.89 97.30 # SOURCE3 1
+ angle_coeff @angle:c-p2-c harmonic 38.29 90.10 # SOURCE3 1
+ angle_coeff @angle:ce-p2-o harmonic 40.63 107.44 # SOURCE3 1
+ angle_coeff @angle:ce-p2-s harmonic 40.55 105.54 # SOURCE3 1
+ angle_coeff @angle:cf-p2-o harmonic 40.63 107.44 # SOURCE3 1 same_as_ce-p2-o
+ angle_coeff @angle:cf-p2-s harmonic 40.55 105.54 # SOURCE3 1 same_as_ce-p2-s
+ angle_coeff @angle:cl-p2-cl harmonic 32.00 108.70 # SOURCE3 1
+ angle_coeff @angle:cl-p2-n2 harmonic 36.67 103.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-p2-o harmonic 36.00 110.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-p2-p2 harmonic 47.78 103.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-p2-s harmonic 36.62 110.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-p2-f harmonic 42.20 107.10 # SOURCE3 1
+ angle_coeff @angle:f-p2-n2 harmonic 43.59 103.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-p2-o harmonic 43.81 110.61 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-p2-p2 harmonic 54.54 103.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:f-p2-s harmonic 41.15 114.71 # SOURCE3 2 5.2794
+ angle_coeff @angle:hp-p2-hp harmonic 22.84 98.76 # SOURCE3 1
+ angle_coeff @angle:hp-p2-n1 harmonic 31.08 95.18 # SOURCE3 2 1.5708
+ angle_coeff @angle:hp-p2-n2 harmonic 32.08 95.54 # SOURCE3 19 4.7352
+ angle_coeff @angle:hp-p2-ne harmonic 31.94 100.10 # SOURCE3 14 6.1290
+ angle_coeff @angle:hp-p2-nf harmonic 31.94 100.10 # SOURCE3 14 same_as_hp-p2-ne
+ angle_coeff @angle:hp-p2-o harmonic 32.04 105.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:hp-p2-p2 harmonic 38.16 101.88 # SOURCE3 27 12.9535
+ angle_coeff @angle:hp-p2-p4 harmonic 32.69 94.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:hp-p2-p5 harmonic 33.66 89.07 # SOURCE3 1 0.0000
+ angle_coeff @angle:hp-p2-pe harmonic 37.56 97.25 # SOURCE3 16 8.8916
+ angle_coeff @angle:hp-p2-pf harmonic 37.56 97.25 # SOURCE3 16 same_as_hp-p2-pe
+ angle_coeff @angle:hp-p2-s4 harmonic 26.33 89.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:hp-p2-s harmonic 30.26 102.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:hp-p2-s6 harmonic 26.74 88.13 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-p2-i harmonic 35.75 104.16 # SOURCE3 1
+ angle_coeff @angle:i-p2-n2 harmonic 34.63 101.77 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-p2-o harmonic 33.34 109.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-p2-p2 harmonic 46.22 102.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-p2-s harmonic 35.18 110.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-p2-n1 harmonic 46.52 86.22 # HF/6-31G* 1
+ angle_coeff @angle:n2-p2-n2 harmonic 45.62 98.00 # SOURCE3 1
+ angle_coeff @angle:n2-p2-n3 harmonic 44.14 100.42 # SOURCE3 1
+ angle_coeff @angle:n2-p2-n4 harmonic 41.53 93.42 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-na harmonic 42.63 102.03 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-nh harmonic 43.69 101.87 # SOURCE3 2 0.8491
+ angle_coeff @angle:n2-p2-no harmonic 43.64 98.12 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-o harmonic 43.53 115.34 # SOURCE3 1
+ angle_coeff @angle:n2-p2-oh harmonic 43.02 109.72 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-os harmonic 45.35 102.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-p3 harmonic 49.55 99.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-p4 harmonic 48.48 101.73 # SOURCE3 1
+ angle_coeff @angle:n2-p2-p5 harmonic 50.50 93.68 # SOURCE3 1
+ angle_coeff @angle:n2-p2-s4 harmonic 38.89 97.83 # SOURCE3 1
+ angle_coeff @angle:n2-p2-s6 harmonic 38.99 98.14 # SOURCE3 1
+ angle_coeff @angle:n2-p2-s harmonic 42.45 112.94 # SOURCE3 1
+ angle_coeff @angle:n2-p2-sh harmonic 41.75 100.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-p2-ss harmonic 41.64 101.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-p2-n3 harmonic 42.10 106.30 # SOURCE3 1
+ angle_coeff @angle:n3-p2-o harmonic 44.16 106.83 # SOURCE3 1
+ angle_coeff @angle:n3-p2-p2 harmonic 55.78 100.58 # SOURCE3 1
+ angle_coeff @angle:n3-p2-s harmonic 43.18 105.75 # SOURCE3 1
+ angle_coeff @angle:n4-p2-n4 harmonic 39.61 88.80 # SOURCE3 1
+ angle_coeff @angle:n4-p2-o harmonic 40.67 101.36 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-p2-p2 harmonic 52.72 96.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-p2-s harmonic 40.06 104.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-p2-na harmonic 40.23 106.10 # SOURCE3 1
+ angle_coeff @angle:na-p2-o harmonic 42.71 107.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-p2-s harmonic 41.81 108.15 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-p2-o harmonic 45.72 107.71 # SOURCE3 1
+ angle_coeff @angle:ne-p2-s harmonic 44.34 105.50 # SOURCE3 1
+ angle_coeff @angle:nf-p2-o harmonic 45.72 107.71 # SOURCE3 1 same_as_ne-p2-o
+ angle_coeff @angle:nf-p2-s harmonic 44.34 105.50 # SOURCE3 1 same_as_ne-p2-s
+ angle_coeff @angle:nh-p2-nh harmonic 42.33 104.00 # SOURCE3 1
+ angle_coeff @angle:nh-p2-o harmonic 43.75 108.11 # SOURCE3 2 0.6773
+ angle_coeff @angle:nh-p2-p2 harmonic 53.77 107.73 # SOURCE3 3 3.1678
+ angle_coeff @angle:nh-p2-s harmonic 42.31 109.62 # SOURCE3 2 1.7725
+ angle_coeff @angle:n-p2-n2 harmonic 43.55 98.85 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-p2-o harmonic 43.46 105.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-p2-no harmonic 42.08 98.20 # SOURCE3 1
+ angle_coeff @angle:no-p2-o harmonic 43.42 104.87 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-p2-p2 harmonic 52.75 108.57 # SOURCE3 3 8.2121
+ angle_coeff @angle:no-p2-s harmonic 41.76 109.06 # SOURCE3 2 5.4074
+ angle_coeff @angle:n-p2-p2 harmonic 54.46 102.12 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-p2-s harmonic 41.20 112.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-p2-oh harmonic 44.96 100.10 # SOURCE3 1
+ angle_coeff @angle:oh-p2-p2 harmonic 54.71 107.82 # SOURCE3 2 2.6708
+ angle_coeff @angle:oh-p2-s harmonic 43.05 109.75 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p2-o harmonic 44.39 119.96 # SOURCE3 1
+ angle_coeff @angle:o-p2-oh harmonic 44.33 110.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p2-os harmonic 45.59 108.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p2-p2 harmonic 54.57 114.23 # SOURCE3 1
+ angle_coeff @angle:o-p2-p3 harmonic 48.45 106.69 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p2-p4 harmonic 48.42 104.37 # SOURCE3 1
+ angle_coeff @angle:o-p2-p5 harmonic 48.37 104.49 # SOURCE3 1
+ angle_coeff @angle:o-p2-pe harmonic 46.73 145.96 # SOURCE3 1
+ angle_coeff @angle:o-p2-pf harmonic 46.73 145.96 # SOURCE3 1 same_as_o-p2-pe
+ angle_coeff @angle:o-p2-s4 harmonic 37.68 106.59 # SOURCE3 1
+ angle_coeff @angle:o-p2-s6 harmonic 38.12 105.04 # SOURCE3 1
+ angle_coeff @angle:o-p2-s harmonic 42.77 117.42 # SOURCE3 1
+ angle_coeff @angle:o-p2-sh harmonic 40.81 109.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-p2-os harmonic 47.01 98.30 # SOURCE3 1
+ angle_coeff @angle:os-p2-p2 harmonic 57.14 101.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p2-ss harmonic 40.89 109.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:os-p2-s harmonic 43.89 108.47 # SOURCE3 3 1.7065
+ angle_coeff @angle:p2-p2-n2 harmonic 57.57 97.40 # SOURCE3 1
+ angle_coeff @angle:p2-p2-p3 harmonic 64.09 101.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-p2-p4 harmonic 63.42 101.98 # SOURCE3 1
+ angle_coeff @angle:p2-p2-p5 harmonic 64.24 99.33 # SOURCE3 1
+ angle_coeff @angle:p2-p2-s4 harmonic 51.53 95.73 # SOURCE3 1
+ angle_coeff @angle:p2-p2-s6 harmonic 51.64 95.95 # SOURCE3 1
+ angle_coeff @angle:p2-p2-s harmonic 54.52 111.28 # SOURCE3 1
+ angle_coeff @angle:p2-p2-sh harmonic 50.78 113.94 # SOURCE3 3 8.5009
+ angle_coeff @angle:p3-p2-p3 harmonic 59.88 101.00 # SOURCE3 1
+ angle_coeff @angle:p3-p2-s harmonic 48.09 113.28 # SOURCE3 2 6.7035
+ angle_coeff @angle:p4-p2-s harmonic 49.75 103.89 # SOURCE3 1
+ angle_coeff @angle:p5-p2-p5 harmonic 62.82 89.40 # SOURCE3 1
+ angle_coeff @angle:p5-p2-s harmonic 50.38 101.21 # SOURCE3 1
+ angle_coeff @angle:pe-p2-s harmonic 54.45 106.35 # SOURCE3 1
+ angle_coeff @angle:pf-p2-s harmonic 54.45 106.35 # SOURCE3 1 same_as_pe-p2-s
+ angle_coeff @angle:s4-p2-s4 harmonic 39.97 85.30 # SOURCE3 1
+ angle_coeff @angle:s6-p2-s6 harmonic 37.42 98.20 # SOURCE3 1
+ angle_coeff @angle:sh-p2-sh harmonic 41.33 98.50 # SOURCE3 1
+ angle_coeff @angle:s-p2-s harmonic 44.19 106.60 # SOURCE3 1
+ angle_coeff @angle:s-p2-s4 harmonic 38.90 105.29 # SOURCE3 1
+ angle_coeff @angle:s-p2-s6 harmonic 38.73 106.93 # SOURCE3 1
+ angle_coeff @angle:s-p2-sh harmonic 40.82 110.73 # SOURCE3 2 0.0232
+ angle_coeff @angle:s-p2-ss harmonic 40.27 114.14 # SOURCE3 4 5.9223
+ angle_coeff @angle:ss-p2-ss harmonic 41.56 97.90 # SOURCE3 1
+ angle_coeff @angle:br-p3-br harmonic 41.27 103.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p3-hp harmonic 26.94 96.36 # SOURCE3 4 0.6701
+ angle_coeff @angle:c1-p3-c1 harmonic 38.48 100.50 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-p3-f harmonic 40.73 96.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:c1-p3-hp harmonic 28.14 97.67 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-p3-c2 harmonic 37.32 101.77 # SOURCE3 3 0.0000
+ angle_coeff @angle:c2-p3-hp harmonic 27.57 97.85 # SOURCE3 4 0.0000
+ angle_coeff @angle:c3-p3-c3 harmonic 37.51 99.66 # SOURCE3 40 0.9854
+ angle_coeff @angle:c3-p3-ca harmonic 37.29 101.94 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-p3-cl harmonic 35.74 99.89 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p3-f harmonic 39.74 97.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-p3-hp harmonic 27.47 97.66 # SOURCE3 9 0.4096
+ angle_coeff @angle:c3-p3-n2 harmonic 39.87 96.55 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-p3-n3 harmonic 39.28 101.18 # SOURCE3 10 2.2338
+ angle_coeff @angle:c3-p3-n4 harmonic 38.58 96.94 # SOURCE3 6 0.4815
+ angle_coeff @angle:c3-p3-n harmonic 38.78 101.77 # SOURCE3 12 2.4449
+ angle_coeff @angle:c3-p3-na harmonic 39.16 100.17 # SOURCE3 4 0.0554
+ angle_coeff @angle:c3-p3-nh harmonic 38.65 104.50 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-p3-no harmonic 38.96 96.98 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-p3-o harmonic 39.33 111.67 # SOURCE3 28 5.3387
+ angle_coeff @angle:c3-p3-oh harmonic 40.60 98.21 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-p3-os harmonic 40.25 99.53 # SOURCE3 3 1.7678
+ angle_coeff @angle:c3-p3-p3 harmonic 45.77 100.31 # SOURCE3 18 2.1836
+ angle_coeff @angle:c3-p3-p5 harmonic 45.65 100.90 # SOURCE3 10 2.7070
+ angle_coeff @angle:c3-p3-s4 harmonic 37.94 98.88 # SOURCE3 8 6.2235
+ angle_coeff @angle:c3-p3-s6 harmonic 37.62 101.18 # SOURCE3 12 6.4536
+ angle_coeff @angle:c3-p3-sh harmonic 37.43 98.71 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-p3-ss harmonic 37.44 99.37 # SOURCE3 2 0.0000
+ angle_coeff @angle:ca-p3-ca harmonic 37.89 99.86 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-p3-hp harmonic 27.74 97.50 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-p3-c3 harmonic 37.60 97.06 # SOURCE3 3 1.1490
+ angle_coeff @angle:c-p3-c harmonic 36.51 100.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-p3-hp harmonic 27.15 96.55 # SOURCE3 6 0.5223
+ angle_coeff @angle:cl-p3-cl harmonic 33.91 102.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-p3-f harmonic 37.03 99.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-p3-hp harmonic 25.67 96.30 # SOURCE3 3 0.6203
+ angle_coeff @angle:c-p3-os harmonic 43.95 81.32 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-p3-hp harmonic 27.54 95.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-p3-f harmonic 43.08 97.40 # SOURCE2 8 1.6636
+ angle_coeff @angle:f-p3-hp harmonic 30.56 96.41 # SOURCE3 2 0.0000
+ angle_coeff @angle:f-p3-n3 harmonic 41.86 100.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-p3-os harmonic 42.42 102.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-p3-p3 harmonic 47.13 97.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:hp-p3-hp harmonic 22.02 95.52 # SOURCE3 44 2.4200
+ angle_coeff @angle:hp-p3-i harmonic 23.42 96.19 # SOURCE3 4 0.6454
+ angle_coeff @angle:hp-p3-n1 harmonic 31.27 92.98 # HF/6-31G* 1
+ angle_coeff @angle:hp-p3-n2 harmonic 29.07 98.28 # SOURCE3 10 1.8860
+ angle_coeff @angle:hp-p3-n3 harmonic 30.10 94.46 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-n4 harmonic 28.34 93.21 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-n harmonic 29.47 95.15 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-na harmonic 29.25 97.27 # SOURCE3 12 0.9318
+ angle_coeff @angle:hp-p3-nh harmonic 30.16 94.10 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-no harmonic 28.83 93.06 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-o harmonic 32.01 101.02 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-oh harmonic 30.73 95.95 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-os harmonic 30.39 97.35 # SOURCE3 6 2.8326
+ angle_coeff @angle:hp-p3-p2 harmonic 32.41 99.11 # SOURCE3 16 4.3022
+ angle_coeff @angle:hp-p3-p3 harmonic 32.07 95.52 # SOURCE3 4 0.0844
+ angle_coeff @angle:hp-p3-p4 harmonic 31.97 95.95 # SOURCE3 6 0.0489
+ angle_coeff @angle:hp-p3-p5 harmonic 32.08 95.54 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-s4 harmonic 26.89 95.49 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-s6 harmonic 27.38 92.95 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-sh harmonic 26.51 94.21 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p3-ss harmonic 26.59 94.61 # SOURCE3 2 0.0000
+ angle_coeff @angle:i-p3-i harmonic 36.63 105.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-p3-n1 harmonic 45.91 90.44 # HF/6-31G* 1
+ angle_coeff @angle:n2-p3-n2 harmonic 40.40 103.46 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-p3-n3 harmonic 39.27 113.80 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-p3-o harmonic 43.04 107.10 # SOURCE3 4 0.0000
+ angle_coeff @angle:n3-p3-oh harmonic 43.13 98.36 # SOURCE3 1
+ angle_coeff @angle:n4-p3-n4 harmonic 38.45 100.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-p3-na harmonic 39.91 106.22 # SOURCE3 1
+ angle_coeff @angle:nh-p3-nh harmonic 40.11 109.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-p3-n harmonic 40.04 104.58 # SOURCE3 1
+ angle_coeff @angle:n-p3-o harmonic 42.80 104.99 # SOURCE3 4 0.0000
+ angle_coeff @angle:no-p3-no harmonic 39.64 98.33 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-p3-oh harmonic 42.77 104.48 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p3-o harmonic 43.78 122.18 # SOURCE3 2 7.8556
+ angle_coeff @angle:o-p3-p3 harmonic 45.09 116.74 # SOURCE3 14 0.7525
+ angle_coeff @angle:o-p3-p5 harmonic 46.98 107.62 # SOURCE3 4 0.0000
+ angle_coeff @angle:o-p3-s4 harmonic 38.63 110.70 # SOURCE3 4 0.7259
+ angle_coeff @angle:o-p3-s6 harmonic 39.52 106.66 # SOURCE3 6 3.4017
+ angle_coeff @angle:os-p3-os harmonic 42.11 106.65 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-p3-p2 harmonic 59.12 103.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-p3-p3 harmonic 57.00 105.31 # SOURCE3 4 3.5864
+ angle_coeff @angle:p4-p3-p4 harmonic 58.70 99.09 # SOURCE3 1
+ angle_coeff @angle:p5-p3-p5 harmonic 58.78 99.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-p3-s4 harmonic 39.08 98.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:s6-p3-s6 harmonic 39.36 97.78 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-p3-sh harmonic 36.56 107.58 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-p3-s harmonic 34.08 131.32 # SOURCE3 1
+ angle_coeff @angle:ss-p3-ss harmonic 36.47 109.24 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p4-br harmonic 41.07 110.41 # SOURCE3 1
+ angle_coeff @angle:br-p4-o harmonic 37.80 124.80 # SOURCE3 1
+ angle_coeff @angle:c2-p4-c2 harmonic 37.13 104.21 # SOURCE3 1
+ angle_coeff @angle:c2-p4-hp harmonic 27.68 99.50 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-p4-o harmonic 39.43 113.59 # SOURCE3 1
+ angle_coeff @angle:c3-p4-c3 harmonic 37.20 102.55 # SOURCE3 4 0.0192
+ angle_coeff @angle:c3-p4-n2 harmonic 39.09 103.17 # SOURCE3 1
+ angle_coeff @angle:c3-p4-n3 harmonic 39.50 102.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p4-n4 harmonic 37.54 99.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p4-n harmonic 38.98 103.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p4-na harmonic 37.92 117.67 # SOURCE3 5 19.0404
+ angle_coeff @angle:c3-p4-nh harmonic 39.33 102.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p4-no harmonic 38.24 99.80 # SOURCE3 3 0.2151
+ angle_coeff @angle:c3-p4-o harmonic 38.77 116.44 # SOURCE3 25 2.6494
+ angle_coeff @angle:c3-p4-oh harmonic 41.01 98.56 # SOURCE3 2 0.4558
+ angle_coeff @angle:c3-p4-os harmonic 41.17 98.01 # SOURCE3 2 0.0931
+ angle_coeff @angle:c3-p4-p2 harmonic 44.43 109.27 # SOURCE3 1
+ angle_coeff @angle:c3-p4-p3 harmonic 45.09 103.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p4-p4 harmonic 48.14 102.12 # SOURCE3 1
+ angle_coeff @angle:c3-p4-p5 harmonic 44.64 104.15 # SOURCE3 1
+ angle_coeff @angle:c3-p4-sh harmonic 37.43 100.17 # SOURCE3 2 0.0815
+ angle_coeff @angle:c3-p4-ss harmonic 37.38 101.19 # SOURCE3 1
+ angle_coeff @angle:ca-p4-ca harmonic 36.83 107.77 # SOURCE3 1
+ angle_coeff @angle:ca-p4-o harmonic 40.03 111.64 # SOURCE3 1
+ angle_coeff @angle:cl-p4-cl harmonic 33.80 103.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-p4-o harmonic 36.03 116.53 # SOURCE3 2 0.0000
+ angle_coeff @angle:hp-p4-hp harmonic 22.57 99.21 # SOURCE3 4 6.4572
+ angle_coeff @angle:hp-p4-n1 harmonic 30.24 99.91 # HF/6-31G* 1
+ angle_coeff @angle:hp-p4-o harmonic 31.44 109.35 # SOURCE3 6 10.8284
+ angle_coeff @angle:hp-p4-p3 harmonic 31.40 98.96 # SOURCE3 4 0.0000
+ angle_coeff @angle:hp-p4-s harmonic 24.32 110.24 # SOURCE3 4 4.1081
+ angle_coeff @angle:i-p4-i harmonic 38.53 113.22 # SOURCE3 2 6.7916
+ angle_coeff @angle:i-p4-o harmonic 37.71 110.22 # SOURCE3 4 9.7726
+ angle_coeff @angle:n1-p4-n1 harmonic 43.01 100.61 # HF/6-31G* 1
+ angle_coeff @angle:n1-p4-o harmonic 42.53 114.59 # HF/6-31G* 1
+ angle_coeff @angle:n2-p4-n2 harmonic 41.52 102.54 # SOURCE3 1
+ angle_coeff @angle:n2-p4-o harmonic 40.81 120.28 # SOURCE3 1
+ angle_coeff @angle:n3-p4-o harmonic 42.50 113.27 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-p4-o harmonic 39.56 107.61 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-p4-o harmonic 45.17 110.60 # SOURCE3 5 1.3133
+ angle_coeff @angle:nh-p4-nh harmonic 43.52 95.30 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-p4-o harmonic 41.87 115.86 # SOURCE3 3 3.2712
+ angle_coeff @angle:n-p4-o harmonic 41.05 117.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-p4-o harmonic 39.42 114.69 # SOURCE3 3 0.1070
+ angle_coeff @angle:oh-p4-oh harmonic 45.67 95.71 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p4-o harmonic 45.06 117.22 # SOURCE3 6 2.7792
+ angle_coeff @angle:o-p4-oh harmonic 42.88 117.39 # SOURCE3 4 1.0083
+ angle_coeff @angle:o-p4-os harmonic 43.10 116.67 # SOURCE3 4 0.6923
+ angle_coeff @angle:o-p4-p2 harmonic 44.91 121.35 # SOURCE3 1
+ angle_coeff @angle:o-p4-p3 harmonic 45.60 114.00 # SOURCE3 3 0.6663
+ angle_coeff @angle:o-p4-p4 harmonic 48.81 116.43 # SOURCE3 1
+ angle_coeff @angle:o-p4-p5 harmonic 46.05 109.76 # SOURCE3 1
+ angle_coeff @angle:o-p4-s4 harmonic 35.77 112.19 # SOURCE3 1
+ angle_coeff @angle:o-p4-s6 harmonic 35.22 113.89 # SOURCE3 1
+ angle_coeff @angle:o-p4-s harmonic 37.34 112.78 # SOURCE3 2 0.0000
+ angle_coeff @angle:o-p4-sh harmonic 36.99 118.09 # SOURCE3 1
+ angle_coeff @angle:os-p4-os harmonic 44.74 100.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-p4-ss harmonic 37.47 116.14 # SOURCE3 4 1.0636
+ angle_coeff @angle:p2-p4-p2 harmonic 56.48 110.71 # SOURCE3 1
+ angle_coeff @angle:p3-p4-p3 harmonic 54.50 114.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:p4-p4-p4 harmonic 61.44 107.38 # SOURCE3 1
+ angle_coeff @angle:p5-p4-p5 harmonic 55.76 107.78 # SOURCE3 1
+ angle_coeff @angle:s4-p4-s4 harmonic 36.61 96.24 # SOURCE3 1
+ angle_coeff @angle:s6-p4-s6 harmonic 35.22 102.36 # SOURCE3 1
+ angle_coeff @angle:sh-p4-sh harmonic 38.45 98.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-p4-s harmonic 36.54 106.30 # SOURCE3 2 25.0119
+ angle_coeff @angle:ss-p4-ss harmonic 37.60 104.41 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p5-br harmonic 41.96 103.38 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-p5-o harmonic 39.04 114.65 # SOURCE3 3 1.0910
+ angle_coeff @angle:br-p5-oh harmonic 40.90 102.92 # SOURCE3 4 0.5468
+ angle_coeff @angle:c1-p5-c1 harmonic 38.83 102.89 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-p5-o harmonic 40.32 115.77 # SOURCE3 2 0.0000
+ angle_coeff @angle:c1-p5-oh harmonic 41.43 102.79 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-p5-c2 harmonic 35.85 106.56 # SOURCE3 1
+ angle_coeff @angle:c2-p5-o harmonic 39.62 109.24 # SOURCE4 7 2.2628
+ angle_coeff @angle:c2-p5-oh harmonic 40.04 101.69 # SOURCE3 1
+ angle_coeff @angle:c2-p5-os harmonic 39.90 103.34 # SOURCE3 1
+ angle_coeff @angle:c3-p5-c3 harmonic 36.95 106.23 # SOURCE3 14 2.6389
+ angle_coeff @angle:c3-p5-hp harmonic 27.05 103.62 # SOURCE4 7 1.1616
+ angle_coeff @angle:c3-p5-n3 harmonic 40.01 102.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-p5-o harmonic 39.91 112.50 # SOURCE3 23 4.4203
+ angle_coeff @angle:c3-p5-oh harmonic 40.83 101.56 # SOURCE3 17 2.1803
+ angle_coeff @angle:c3-p5-os harmonic 41.20 100.77 # SOURCE4 51 2.0928
+ angle_coeff @angle:c3-p5-p4 harmonic 44.32 106.27 # SOURCE3 1
+ angle_coeff @angle:c3-p5-s harmonic 37.51 113.40 # SOURCE3 4 2.0067
+ angle_coeff @angle:c3-p5-ss harmonic 36.91 103.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-p5-ca harmonic 37.10 107.53 # SOURCE3 1
+ angle_coeff @angle:ca-p5-o harmonic 39.95 113.98 # SOURCE3 1
+ angle_coeff @angle:ca-p5-oh harmonic 41.04 101.77 # SOURCE3 1
+ angle_coeff @angle:ca-p5-os harmonic 40.86 103.75 # SOURCE3 1
+ angle_coeff @angle:c-p5-c harmonic 35.96 104.16 # SOURCE3 1
+ angle_coeff @angle:cl-p5-cl harmonic 33.77 103.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-p5-o harmonic 36.29 115.32 # SOURCE3 2 0.0000
+ angle_coeff @angle:cl-p5-oh harmonic 37.85 102.44 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-p5-o harmonic 39.74 107.19 # SOURCE4 16 0.5711
+ angle_coeff @angle:c-p5-oh harmonic 39.73 102.12 # SOURCE3 1
+ angle_coeff @angle:f-p5-f harmonic 42.49 99.96 # SOURCE2 4 0.9197
+ angle_coeff @angle:f-p5-o harmonic 43.22 112.03 # SOURCE4 7 0.5178
+ angle_coeff @angle:f-p5-oh harmonic 43.33 101.98 # SOURCE3 2 0.0000
+ angle_coeff @angle:f-p5-os harmonic 43.51 102.70 # SOURCE4 5 0.1524
+ angle_coeff @angle:f-p5-s harmonic 38.09 117.40 # SOURCE2 1 0.0000
+ angle_coeff @angle:hp-p5-hp harmonic 21.44 101.09 # SOURCE3 4 1.3036
+ angle_coeff @angle:hp-p5-n1 harmonic 31.09 101.32 # HF/6-31G* 1
+ angle_coeff @angle:hp-p5-o harmonic 30.21 116.58 # SOURCE3 7 1.3282
+ angle_coeff @angle:hp-p5-oh harmonic 30.57 101.45 # SOURCE3 5 0.9084
+ angle_coeff @angle:hp-p5-s harmonic 25.97 119.20 # SOURCE2 1 0.0000
+ angle_coeff @angle:i-p5-i harmonic 35.88 107.17 # SOURCE3 1 0.0000
+ angle_coeff @angle:i-p5-o harmonic 32.99 115.93 # SOURCE3 3 0.0415
+ angle_coeff @angle:i-p5-oh harmonic 35.44 102.26 # SOURCE3 4 1.9577
+ angle_coeff @angle:n1-p5-n1 harmonic 45.78 101.55 # HF/6-31G* 1
+ angle_coeff @angle:n1-p5-o harmonic 44.71 113.78 # HF/6-31G* 1
+ angle_coeff @angle:n2-p5-n2 harmonic 43.96 106.34 # SOURCE3 1
+ angle_coeff @angle:n2-p5-o harmonic 44.30 113.53 # SOURCE3 1
+ angle_coeff @angle:n2-p5-oh harmonic 44.68 102.40 # SOURCE3 1
+ angle_coeff @angle:n3-p5-n3 harmonic 42.87 103.37 # SOURCE4 47 2.1009
+ angle_coeff @angle:n3-p5-nh harmonic 42.63 104.02 # SOURCE4 5 1.8740
+ angle_coeff @angle:n3-p5-o harmonic 43.02 114.64 # SOURCE4 76 2.2728
+ angle_coeff @angle:n3-p5-oh harmonic 43.43 104.18 # SOURCE3 6 0.4373
+ angle_coeff @angle:n3-p5-os harmonic 44.20 101.94 # SOURCE4 34 2.3553
+ angle_coeff @angle:n3-p5-s harmonic 39.05 117.12 # SOURCE4 7 0.7109
+ angle_coeff @angle:n4-p5-n4 harmonic 39.18 102.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-p5-o harmonic 41.10 109.78 # SOURCE3 5 2.7519
+ angle_coeff @angle:n4-p5-oh harmonic 42.23 98.48 # SOURCE3 6 0.4104
+ angle_coeff @angle:n4-p5-os harmonic 43.31 94.55 # SOURCE3 2 0.0000
+ angle_coeff @angle:na-p5-na harmonic 40.56 108.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-p5-o harmonic 42.38 113.43 # SOURCE3 11 0.8968
+ angle_coeff @angle:na-p5-oh harmonic 43.14 102.07 # SOURCE3 16 1.4144
+ angle_coeff @angle:na-p5-os harmonic 43.20 103.06 # SOURCE3 4 0.7463
+ angle_coeff @angle:nh-p5-nh harmonic 43.48 99.51 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-p5-o harmonic 42.11 118.91 # SOURCE3 3 1.3237
+ angle_coeff @angle:nh-p5-oh harmonic 43.40 103.81 # SOURCE3 2 0.0000
+ angle_coeff @angle:nh-p5-os harmonic 44.39 100.51 # SOURCE3 2 0.0000
+ angle_coeff @angle:n-p5-n3 harmonic 42.13 104.11 # SOURCE4 11 1.4088
+ angle_coeff @angle:n-p5-n harmonic 41.80 103.09 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-p5-o harmonic 43.40 108.73 # SOURCE4 5 0.2571
+ angle_coeff @angle:n-p5-oh harmonic 43.17 102.44 # SOURCE3 4 0.0999
+ angle_coeff @angle:no-p5-no harmonic 40.40 95.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-p5-o harmonic 40.49 112.75 # SOURCE3 4 3.3684
+ angle_coeff @angle:no-p5-oh harmonic 41.56 101.35 # SOURCE3 2 0.0000
+ angle_coeff @angle:no-p5-os harmonic 41.69 101.70 # SOURCE3 4 0.0565
+ angle_coeff @angle:n-p5-os harmonic 43.85 100.48 # SOURCE3 2 0.0000
+ angle_coeff @angle:oh-p5-oh harmonic 44.58 102.45 # SOURCE3 39 2.4223
+ angle_coeff @angle:oh-p5-os harmonic 44.91 102.37 # SOURCE3 8 1.5063
+ angle_coeff @angle:oh-p5-p2 harmonic 48.24 103.53 # SOURCE3 1
+ angle_coeff @angle:oh-p5-p3 harmonic 47.55 103.83 # SOURCE3 13 0.4303
+ angle_coeff @angle:oh-p5-p4 harmonic 47.57 101.79 # SOURCE3 1
+ angle_coeff @angle:oh-p5-p5 harmonic 51.43 100.45 # SOURCE3 1
+ angle_coeff @angle:oh-p5-s4 harmonic 40.30 103.24 # SOURCE3 1
+ angle_coeff @angle:oh-p5-s6 harmonic 40.65 101.48 # SOURCE3 1
+ angle_coeff @angle:oh-p5-s harmonic 42.20 102.88 # SOURCE3 3 1.6044
+ angle_coeff @angle:oh-p5-sh harmonic 40.01 101.41 # SOURCE3 2 0.0000
+ angle_coeff @angle:oh-p5-ss harmonic 38.95 104.33 # SOURCE3 6 2.0112
+ angle_coeff @angle:o-p5-o harmonic 46.01 115.80 # SOURCE3 17 5.7902
+ angle_coeff @angle:o-p5-oh harmonic 43.79 115.26 # SOURCE4 740 1.3004
+ angle_coeff @angle:o-p5-os harmonic 44.01 116.09 # SOURCE3 35 3.2062
+ angle_coeff @angle:o-p5-p2 harmonic 46.23 114.60 # SOURCE3 1
+ angle_coeff @angle:o-p5-p3 harmonic 45.38 115.48 # SOURCE3 9 2.1084
+ angle_coeff @angle:o-p5-p4 harmonic 45.07 114.66 # SOURCE3 1
+ angle_coeff @angle:o-p5-p5 harmonic 49.11 113.44 # SOURCE3 1
+ angle_coeff @angle:o-p5-s4 harmonic 39.61 110.23 # SOURCE3 1
+ angle_coeff @angle:o-p5-s6 harmonic 39.34 111.75 # SOURCE3 1
+ angle_coeff @angle:o-p5-s harmonic 40.46 116.94 # SOURCE3 3 2.9506
+ angle_coeff @angle:o-p5-sh harmonic 38.14 114.56 # SOURCE3 3 1.7645
+ angle_coeff @angle:os-p5-os harmonic 45.37 101.77 # SOURCE4 243 2.0816
+ angle_coeff @angle:os-p5-p3 harmonic 47.66 103.67 # SOURCE3 2 0.0000
+ angle_coeff @angle:os-p5-p5 harmonic 50.58 104.48 # SOURCE3 1
+ angle_coeff @angle:os-p5-s4 harmonic 40.57 102.52 # SOURCE3 1
+ angle_coeff @angle:os-p5-s6 harmonic 40.69 101.89 # SOURCE3 1
+ angle_coeff @angle:o-p5-ss harmonic 37.95 112.46 # SOURCE3 6 2.7392
+ angle_coeff @angle:os-p5-s harmonic 39.69 117.28 # SOURCE4 74 0.7542
+ angle_coeff @angle:os-p5-sh harmonic 39.51 104.59 # SOURCE3 2 0.0000
+ angle_coeff @angle:os-p5-ss harmonic 39.36 102.65 # SOURCE4 25 1.8093
+ angle_coeff @angle:p2-p5-p2 harmonic 57.39 107.14 # SOURCE3 1
+ angle_coeff @angle:p3-p5-p3 harmonic 57.04 105.23 # SOURCE3 3 5.1024
+ angle_coeff @angle:p4-p5-p4 harmonic 57.42 101.62 # SOURCE3 1
+ angle_coeff @angle:p5-p5-p5 harmonic 59.38 112.72 # SOURCE3 1
+ angle_coeff @angle:s6-p5-s6 harmonic 38.64 105.18 # SOURCE3 1
+ angle_coeff @angle:sh-p5-sh harmonic 37.97 104.56 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-p5-ss harmonic 37.22 107.13 # SOURCE3 1
+ angle_coeff @angle:s-p5-s harmonic 39.37 114.13 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-p5-ss harmonic 36.51 109.61 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-pc-n harmonic 42.75 90.80 # SOURCE3 3 2.3423
+ angle_coeff @angle:cd-pc-na harmonic 43.00 90.18 # SOURCE3 81 2.7619
+ angle_coeff @angle:cc-pd-n harmonic 42.75 90.80 # SOURCE3 3 same_as_cd-pc-n
+ angle_coeff @angle:cc-pd-na harmonic 43.00 90.18 # SOURCE3 81 same_as_cd-pc-na
+ angle_coeff @angle:c2-pe-ca harmonic 38.84 101.44 # SOURCE3 3 0.7177
+ angle_coeff @angle:c2-pe-ce harmonic 38.68 103.01 # SOURCE3 4 1.4470
+ angle_coeff @angle:c2-pe-cg harmonic 40.85 104.03 # SOURCE3 3 3.8740
+ angle_coeff @angle:c2-pe-n2 harmonic 44.94 94.14 # SOURCE3 1
+ angle_coeff @angle:c2-pe-ne harmonic 41.85 98.70 # SOURCE3 12 5.3383
+ angle_coeff @angle:c2-pe-o harmonic 41.06 115.16 # SOURCE3 2 0.0149
+ angle_coeff @angle:c2-pe-p2 harmonic 50.94 107.82 # SOURCE3 1
+ angle_coeff @angle:c2-pe-pe harmonic 48.17 102.99 # SOURCE3 9 8.2860
+ angle_coeff @angle:c2-pe-px harmonic 51.11 97.37 # SOURCE3 4 0.6655
+ angle_coeff @angle:c2-pe-py harmonic 50.92 96.71 # SOURCE3 4 1.2755
+ angle_coeff @angle:c2-pe-s harmonic 41.06 111.16 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-pe-sx harmonic 38.51 95.11 # SOURCE3 4 0.2676
+ angle_coeff @angle:c2-pe-sy harmonic 37.78 95.56 # SOURCE3 2 0.0462
+ angle_coeff @angle:ca-pe-n2 harmonic 40.97 102.03 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-pe-o harmonic 40.40 106.88 # SOURCE3 2 0.0018
+ angle_coeff @angle:ca-pe-p2 harmonic 50.96 100.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-pe-pf harmonic 48.44 99.70 # SOURCE3 2 0.0000
+ angle_coeff @angle:ca-pe-s harmonic 40.07 107.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-pe-c2 harmonic 38.58 97.30 # SOURCE3 3 0.0335
+ angle_coeff @angle:ce-pe-n2 harmonic 41.45 100.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-pe-o harmonic 40.47 107.44 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-pe-p2 harmonic 51.42 99.56 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-pe-s harmonic 40.65 105.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-pe-n2 harmonic 44.31 101.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-pe-o harmonic 43.57 107.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:cg-pe-p2 harmonic 52.47 104.68 # SOURCE3 2 5.1435
+ angle_coeff @angle:cg-pe-s harmonic 42.30 108.60 # SOURCE3 4 2.6981
+ angle_coeff @angle:n2-pe-n2 harmonic 45.26 108.14 # SOURCE3 1
+ angle_coeff @angle:n2-pe-ne harmonic 42.89 106.80 # SOURCE3 6 4.5981
+ angle_coeff @angle:n2-pe-o harmonic 44.34 115.39 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-pe-p2 harmonic 52.85 111.60 # SOURCE3 1
+ angle_coeff @angle:n2-pe-pe harmonic 48.70 109.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-pe-px harmonic 50.28 110.30 # SOURCE3 3 6.0548
+ angle_coeff @angle:n2-pe-py harmonic 54.11 93.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-pe-s harmonic 42.94 114.84 # SOURCE3 3 3.6512
+ angle_coeff @angle:n2-pe-sx harmonic 39.42 97.83 # SOURCE3 1 0.0000
+ angle_coeff @angle:n2-pe-sy harmonic 38.61 98.14 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-pe-o harmonic 42.65 110.24 # SOURCE3 3 3.8478
+ angle_coeff @angle:ne-pe-p2 harmonic 52.77 104.48 # SOURCE3 2 7.1207
+ angle_coeff @angle:ne-pe-s harmonic 42.21 109.19 # SOURCE3 5 3.6708
+ angle_coeff @angle:o-pe-o harmonic 44.01 119.96 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-pe-p2 harmonic 52.71 114.23 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-pe-pe harmonic 42.47 145.96 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-pe-px harmonic 52.10 104.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-pe-py harmonic 51.64 104.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-pe-s harmonic 42.89 117.42 # SOURCE3 2 0.0426
+ angle_coeff @angle:o-pe-sx harmonic 38.02 106.59 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-pe-sy harmonic 37.56 105.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-pe-pe harmonic 65.58 98.24 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-pe-px harmonic 64.12 108.28 # SOURCE3 2 6.2959
+ angle_coeff @angle:p2-pe-py harmonic 62.99 110.87 # SOURCE3 3 8.1645
+ angle_coeff @angle:p2-pe-s harmonic 53.42 111.28 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-pe-sx harmonic 51.26 95.73 # SOURCE3 1 0.0000
+ angle_coeff @angle:p2-pe-sy harmonic 50.47 95.95 # SOURCE3 1 0.0000
+ angle_coeff @angle:pe-pe-s harmonic 50.40 107.91 # SOURCE3 2 1.5577
+ angle_coeff @angle:px-pe-s harmonic 51.97 107.62 # SOURCE3 2 3.7266
+ angle_coeff @angle:py-pe-s harmonic 51.36 108.73 # SOURCE3 3 5.3201
+ angle_coeff @angle:s-pe-s harmonic 34.43 178.44 # SOURCE3 1 0.0000
+ angle_coeff @angle:s-pe-sx harmonic 38.72 108.32 # SOURCE3 2 3.0318
+ angle_coeff @angle:s-pe-sy harmonic 38.35 106.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-pf-ca harmonic 38.84 101.44 # SOURCE3 3 same_as_c2-pe-ca
+ angle_coeff @angle:c2-pf-cf harmonic 38.68 103.01 # SOURCE3 4 same_as_c2-pe-ce
+ angle_coeff @angle:c2-pf-ch harmonic 40.85 104.03 # SOURCE3 3 same_as_c2-pe-cg
+ angle_coeff @angle:c2-pf-n2 harmonic 44.94 94.14 # SOURCE3 1 same_as_c2-pe-n2
+ angle_coeff @angle:c2-pf-nf harmonic 41.85 98.70 # SOURCE3 12 same_as_c2-pe-ne
+ angle_coeff @angle:c2-pf-o harmonic 41.06 115.16 # SOURCE3 2 same_as_c2-pe-o
+ angle_coeff @angle:c2-pf-p2 harmonic 50.94 107.82 # SOURCE3 1 same_as_c2-pe-p2
+ angle_coeff @angle:c2-pf-pf harmonic 48.17 102.99 # SOURCE3 9 same_as_c2-pe-pe
+ angle_coeff @angle:c2-pf-px harmonic 51.11 97.37 # SOURCE3 4 same_as_c2-pe-px
+ angle_coeff @angle:c2-pf-py harmonic 50.92 96.71 # SOURCE3 4 same_as_c2-pe-py
+ angle_coeff @angle:c2-pf-s harmonic 41.06 111.16 # SOURCE3 2 same_as_c2-pe-s
+ angle_coeff @angle:c2-pf-sx harmonic 38.51 95.11 # SOURCE3 4 same_as_c2-pe-sx
+ angle_coeff @angle:c2-pf-sy harmonic 37.78 95.56 # SOURCE3 2 same_as_c2-pe-sy
+ angle_coeff @angle:ca-pf-n2 harmonic 40.97 102.03 # SOURCE3 1 same_as_ca-pe-n2
+ angle_coeff @angle:ca-pf-o harmonic 40.40 106.88 # SOURCE3 2 same_as_ca-pe-o
+ angle_coeff @angle:ca-pf-p2 harmonic 50.96 100.79 # SOURCE3 1 same_as_ca-pe-p2
+ angle_coeff @angle:ca-pf-pe harmonic 48.44 99.70 # SOURCE3 2 0.0000
+ angle_coeff @angle:ca-pf-s harmonic 40.07 107.93 # SOURCE3 1 same_as_ca-pe-s
+ angle_coeff @angle:c-pf-c2 harmonic 38.58 97.30 # SOURCE3 3 same_as_c-pe-c2
+ angle_coeff @angle:cf-pf-n2 harmonic 41.45 100.55 # SOURCE3 1 same_as_ce-pe-n2
+ angle_coeff @angle:cf-pf-o harmonic 40.47 107.44 # SOURCE3 1 same_as_ce-pe-o
+ angle_coeff @angle:cf-pf-p2 harmonic 51.42 99.56 # SOURCE3 1 same_as_ce-pe-p2
+ angle_coeff @angle:cf-pf-s harmonic 40.65 105.54 # SOURCE3 1 same_as_ce-pe-s
+ angle_coeff @angle:ch-pf-n2 harmonic 44.31 101.79 # SOURCE3 1 same_as_cg-pe-n2
+ angle_coeff @angle:ch-pf-o harmonic 43.57 107.62 # SOURCE3 1 same_as_cg-pe-o
+ angle_coeff @angle:ch-pf-p2 harmonic 52.47 104.68 # SOURCE3 2 same_as_cg-pe-p2
+ angle_coeff @angle:ch-pf-s harmonic 42.30 108.60 # SOURCE3 4 same_as_cg-pe-s
+ angle_coeff @angle:n2-pf-n2 harmonic 45.26 108.14 # SOURCE3 1 same_as_n2-pe-n2
+ angle_coeff @angle:n2-pf-nf harmonic 42.89 106.80 # SOURCE3 6 same_as_n2-pe-ne
+ angle_coeff @angle:n2-pf-o harmonic 44.34 115.39 # SOURCE3 1 same_as_n2-pe-o
+ angle_coeff @angle:n2-pf-p2 harmonic 52.85 111.60 # SOURCE3 1 same_as_n2-pe-p2
+ angle_coeff @angle:n2-pf-pf harmonic 48.70 109.40 # SOURCE3 1 same_as_n2-pe-pe
+ angle_coeff @angle:n2-pf-px harmonic 50.28 110.30 # SOURCE3 3 same_as_n2-pe-px
+ angle_coeff @angle:n2-pf-py harmonic 54.11 93.68 # SOURCE3 1 same_as_n2-pe-py
+ angle_coeff @angle:n2-pf-s harmonic 42.94 114.84 # SOURCE3 3 same_as_n2-pe-s
+ angle_coeff @angle:n2-pf-sx harmonic 39.42 97.83 # SOURCE3 1 same_as_n2-pe-sx
+ angle_coeff @angle:n2-pf-sy harmonic 38.61 98.14 # SOURCE3 1 same_as_n2-pe-sy
+ angle_coeff @angle:nf-pf-o harmonic 42.65 110.24 # SOURCE3 3 same_as_ne-pe-o
+ angle_coeff @angle:nf-pf-p2 harmonic 52.77 104.48 # SOURCE3 2 same_as_ne-pe-p2
+ angle_coeff @angle:nf-pf-s harmonic 42.21 109.19 # SOURCE3 5 same_as_ne-pe-s
+ angle_coeff @angle:o-pf-o harmonic 44.01 119.96 # SOURCE3 1 same_as_o-pe-o
+ angle_coeff @angle:o-pf-p2 harmonic 52.71 114.23 # SOURCE3 1 same_as_o-pe-p2
+ angle_coeff @angle:o-pf-pf harmonic 42.47 145.96 # SOURCE3 1 same_as_o-pe-pe
+ angle_coeff @angle:o-pf-px harmonic 52.10 104.37 # SOURCE3 1 same_as_o-pe-px
+ angle_coeff @angle:o-pf-py harmonic 51.64 104.49 # SOURCE3 1 same_as_o-pe-py
+ angle_coeff @angle:o-pf-s harmonic 42.89 117.42 # SOURCE3 2 same_as_o-pe-s
+ angle_coeff @angle:o-pf-sx harmonic 38.02 106.59 # SOURCE3 1 same_as_o-pe-sx
+ angle_coeff @angle:o-pf-sy harmonic 37.56 105.04 # SOURCE3 1 same_as_o-pe-sy
+ angle_coeff @angle:p2-pf-pf harmonic 65.58 98.24 # SOURCE3 1 same_as_p2-pe-pe
+ angle_coeff @angle:p2-pf-px harmonic 64.12 108.28 # SOURCE3 2 same_as_p2-pe-px
+ angle_coeff @angle:p2-pf-py harmonic 62.99 110.87 # SOURCE3 3 same_as_p2-pe-py
+ angle_coeff @angle:p2-pf-s harmonic 53.42 111.28 # SOURCE3 1 same_as_p2-pe-s
+ angle_coeff @angle:p2-pf-sx harmonic 51.26 95.73 # SOURCE3 1 same_as_p2-pe-sx
+ angle_coeff @angle:p2-pf-sy harmonic 50.47 95.95 # SOURCE3 1 same_as_p2-pe-sy
+ angle_coeff @angle:pf-pf-s harmonic 50.40 107.91 # SOURCE3 2 same_as_pe-pe-s
+ angle_coeff @angle:px-pf-s harmonic 51.97 107.62 # SOURCE3 2 same_as_px-pe-s
+ angle_coeff @angle:py-pf-s harmonic 51.36 108.73 # SOURCE3 3 same_as_py-pe-s
+ angle_coeff @angle:s-pf-s harmonic 34.43 178.44 # SOURCE3 1 same_as_s-pe-s
+ angle_coeff @angle:s-pf-sx harmonic 38.72 108.32 # SOURCE3 2 same_as_s-pe-sx
+ angle_coeff @angle:s-pf-sy harmonic 38.35 106.93 # SOURCE3 1 same_as_s-pe-sy
+ angle_coeff @angle:c3-px-ca harmonic 36.97 104.79 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-px-ce harmonic 37.00 104.86 # SOURCE3 4 0.6354
+ angle_coeff @angle:c3-px-cf harmonic 37.00 104.86 # SOURCE3 4 same_as_c3-px-ce
+ angle_coeff @angle:c3-px-ne harmonic 39.55 102.46 # SOURCE3 7 1.8685
+ angle_coeff @angle:c3-px-nf harmonic 39.55 102.46 # SOURCE3 7 same_as_c3-px-ne
+ angle_coeff @angle:c3-px-o harmonic 39.39 113.68 # SOURCE3 28 4.8990
+ angle_coeff @angle:c3-px-pe harmonic 47.82 105.73 # SOURCE3 10 4.4059
+ angle_coeff @angle:c3-px-pf harmonic 47.82 105.73 # SOURCE3 10 same_as_c3-px-pe
+ angle_coeff @angle:c3-px-py harmonic 45.50 103.11 # SOURCE3 3 0.8680
+ angle_coeff @angle:c3-px-sx harmonic 36.06 99.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-px-sy harmonic 35.30 103.41 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-px-ca harmonic 37.08 104.15 # SOURCE3 2 3.6168
+ angle_coeff @angle:ca-px-o harmonic 40.49 107.50 # SOURCE3 5 5.7355
+ angle_coeff @angle:c-px-c3 harmonic 36.70 101.72 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-px-ce harmonic 37.15 104.21 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-px-o harmonic 39.42 113.79 # SOURCE3 6 0.3877
+ angle_coeff @angle:cf-px-cf harmonic 37.15 104.21 # SOURCE3 1 same_as_ce-px-ce
+ angle_coeff @angle:cf-px-o harmonic 39.42 113.79 # SOURCE3 6 same_as_ce-px-o
+ angle_coeff @angle:c-px-o harmonic 37.98 114.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-px-ne harmonic 41.92 103.22 # SOURCE3 2 0.6807
+ angle_coeff @angle:ne-px-o harmonic 42.27 114.13 # SOURCE3 11 8.9737
+ angle_coeff @angle:nf-px-nf harmonic 41.92 103.22 # SOURCE3 2 same_as_ne-px-ne
+ angle_coeff @angle:nf-px-o harmonic 42.27 114.13 # SOURCE3 11 same_as_ne-px-o
+ angle_coeff @angle:o-px-pe harmonic 49.41 116.50 # SOURCE3 12 8.2925
+ angle_coeff @angle:o-px-pf harmonic 49.41 116.50 # SOURCE3 12 same_as_o-px-pe
+ angle_coeff @angle:o-px-py harmonic 45.90 114.20 # SOURCE3 5 1.7165
+ angle_coeff @angle:o-px-sx harmonic 35.81 112.81 # SOURCE3 3 0.8799
+ angle_coeff @angle:o-px-sy harmonic 35.59 113.54 # SOURCE3 3 0.5010
+ angle_coeff @angle:pe-px-pe harmonic 61.38 110.71 # SOURCE3 1 0.0000
+ angle_coeff @angle:pf-px-pf harmonic 61.38 110.71 # SOURCE3 1 same_as_pe-px-pe
+ angle_coeff @angle:py-px-py harmonic 56.72 107.78 # SOURCE3 1 0.0000
+ angle_coeff @angle:sx-px-sx harmonic 36.76 96.24 # SOURCE3 1 0.0000
+ angle_coeff @angle:sy-px-sy harmonic 35.53 102.36 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-py-n4 harmonic 37.34 103.83 # SOURCE3 4 0.0000
+ angle_coeff @angle:c3-py-na harmonic 38.76 106.89 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-py-o harmonic 38.95 117.87 # SOURCE3 13 2.3554
+ angle_coeff @angle:c3-py-oh harmonic 41.22 100.16 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-py-os harmonic 40.15 105.39 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-py-px harmonic 44.89 106.27 # SOURCE3 2 0.0000
+ angle_coeff @angle:c3-py-py harmonic 43.54 113.97 # SOURCE3 10 1.6346
+ angle_coeff @angle:c3-py-sx harmonic 34.74 106.36 # SOURCE3 4 0.0000
+ angle_coeff @angle:ca-py-ca harmonic 36.99 107.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-py-o harmonic 39.82 113.98 # SOURCE3 3 0.5309
+ angle_coeff @angle:ca-py-oh harmonic 40.90 102.68 # SOURCE4 5 1.2945
+ angle_coeff @angle:ca-py-os harmonic 40.66 103.75 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-py-c3 harmonic 35.71 110.36 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-py-c harmonic 36.23 104.20 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-py-ce harmonic 37.29 106.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-py-o harmonic 40.24 112.16 # SOURCE3 5 3.2594
+ angle_coeff @angle:ce-py-oh harmonic 40.58 104.77 # SOURCE3 6 2.1852
+ angle_coeff @angle:ce-py-os harmonic 40.82 103.34 # SOURCE3 2 0.0000
+ angle_coeff @angle:cf-py-cf harmonic 37.29 106.54 # SOURCE3 1 same_as_ce-py-ce
+ angle_coeff @angle:cf-py-o harmonic 40.24 112.16 # SOURCE3 5 same_as_ce-py-o
+ angle_coeff @angle:cf-py-oh harmonic 40.58 104.77 # SOURCE3 6 same_as_ce-py-oh
+ angle_coeff @angle:cf-py-os harmonic 40.82 103.34 # SOURCE3 2 same_as_ce-py-os
+ angle_coeff @angle:c-py-o harmonic 38.52 115.25 # SOURCE3 6 2.6519
+ angle_coeff @angle:c-py-oh harmonic 40.03 102.14 # SOURCE3 6 1.0654
+ angle_coeff @angle:c-py-os harmonic 41.32 95.74 # SOURCE3 3 9.0999
+ angle_coeff @angle:n3-py-ne harmonic 41.93 108.44 # SOURCE4 12 0.9498
+ angle_coeff @angle:n4-py-o harmonic 38.83 115.58 # SOURCE3 4 0.0000
+ angle_coeff @angle:n4-py-py harmonic 63.24 55.10 # SOURCE3 4 0.0000
+ angle_coeff @angle:na-py-o harmonic 40.78 122.40 # SOURCE3 2 0.0000
+ angle_coeff @angle:na-py-py harmonic 67.66 50.88 # SOURCE3 2 0.0000
+ angle_coeff @angle:ne-py-ne harmonic 43.51 106.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-py-o harmonic 44.00 113.21 # SOURCE3 15 3.8894
+ angle_coeff @angle:ne-py-oh harmonic 44.13 104.70 # SOURCE3 26 2.7513
+ angle_coeff @angle:ne-py-os harmonic 44.80 101.33 # SOURCE3 2 0.0000
+ angle_coeff @angle:nf-py-nf harmonic 43.51 106.29 # SOURCE3 1 same_as_ne-py-ne
+ angle_coeff @angle:nf-py-o harmonic 44.00 113.21 # SOURCE3 15 same_as_ne-py-o
+ angle_coeff @angle:nf-py-oh harmonic 44.13 104.70 # SOURCE3 26 same_as_ne-py-oh
+ angle_coeff @angle:nf-py-os harmonic 44.80 101.33 # SOURCE3 2 same_as_ne-py-os
+ angle_coeff @angle:oh-py-oh harmonic 45.06 101.78 # SOURCE3 35 2.2937
+ angle_coeff @angle:oh-py-pe harmonic 50.99 104.84 # SOURCE3 22 2.0337
+ angle_coeff @angle:oh-py-pf harmonic 50.99 104.84 # SOURCE3 22 same_as_oh-py-pe
+ angle_coeff @angle:oh-py-px harmonic 47.75 104.30 # SOURCE3 8 1.2772
+ angle_coeff @angle:oh-py-py harmonic 48.91 100.45 # SOURCE3 6 0.0000
+ angle_coeff @angle:oh-py-sx harmonic 37.44 100.94 # SOURCE3 4 0.0000
+ angle_coeff @angle:oh-py-sy harmonic 38.51 101.47 # SOURCE3 6 0.2490
+ angle_coeff @angle:o-py-oh harmonic 43.74 116.14 # SOURCE3 79 2.1455
+ angle_coeff @angle:o-py-os harmonic 43.55 116.79 # SOURCE3 17 1.3534
+ angle_coeff @angle:o-py-pe harmonic 49.46 114.56 # SOURCE3 12 3.6114
+ angle_coeff @angle:o-py-pf harmonic 49.46 114.56 # SOURCE3 12 same_as_o-py-pe
+ angle_coeff @angle:o-py-px harmonic 46.50 111.37 # SOURCE3 5 0.3803
+ angle_coeff @angle:o-py-py harmonic 44.97 120.43 # SOURCE3 16 6.0629
+ angle_coeff @angle:os-py-os harmonic 45.06 101.25 # SOURCE3 8 2.0860
+ angle_coeff @angle:os-py-py harmonic 47.94 104.48 # SOURCE3 4 0.0000
+ angle_coeff @angle:os-py-sx harmonic 36.90 103.86 # SOURCE3 2 0.0000
+ angle_coeff @angle:os-py-sy harmonic 38.37 102.12 # SOURCE3 2 0.0000
+ angle_coeff @angle:o-py-sx harmonic 34.68 118.56 # SOURCE3 7 6.2976
+ angle_coeff @angle:o-py-sy harmonic 36.96 111.71 # SOURCE3 5 1.1937
+ angle_coeff @angle:pe-py-pe harmonic 61.78 107.14 # SOURCE3 1 0.0000
+ angle_coeff @angle:pf-py-pf harmonic 61.78 107.14 # SOURCE3 1 same_as_pe-py-pe
+ angle_coeff @angle:py-py-py harmonic 55.80 112.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:py-py-sx harmonic 58.65 61.54 # SOURCE3 4 0.0000
+ angle_coeff @angle:sy-py-sy harmonic 36.13 105.17 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-s2-o harmonic 65.76 117.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-s2-n2 harmonic 68.67 110.84 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-s2-o harmonic 66.18 114.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-s2-n1 harmonic 53.42 117.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-s2-n1 harmonic 66.15 116.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:n1-s2-o harmonic 73.05 108.46 # HF/6-31G* 1
+ angle_coeff @angle:n2-s2-o harmonic 67.93 121.20 # SOURCE2 2 0.8000
+ angle_coeff @angle:o-s2-o harmonic 67.99 116.17 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-s2-s harmonic 63.79 118.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:s-s2-s harmonic 63.50 115.04 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-s4-br harmonic 64.61 98.02 # SOURCE3 1
+ angle_coeff @angle:br-s4-c3 harmonic 62.19 92.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-s4-o harmonic 59.20 112.07 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-s4-c1 harmonic 65.35 93.55 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-s4-o harmonic 65.98 110.36 # SOURCE3 2 0.0000
+ angle_coeff @angle:c2-s4-c2 harmonic 62.00 102.29 # SOURCE3 1
+ angle_coeff @angle:c2-s4-c3 harmonic 63.48 94.95 # SOURCE3 1
+ angle_coeff @angle:c2-s4-o harmonic 66.61 107.09 # SOURCE3 1
+ angle_coeff @angle:c3-s4-c3 harmonic 62.07 96.82 # SOURCE3 11 1.5580
+ angle_coeff @angle:c3-s4-ca harmonic 62.99 95.00 # SOURCE3 1
+ angle_coeff @angle:c3-s4-f harmonic 66.32 91.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-hs harmonic 46.55 90.60 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-i harmonic 52.86 90.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-n2 harmonic 69.07 90.59 # SOURCE3 1
+ angle_coeff @angle:c3-s4-n3 harmonic 65.18 94.49 # SOURCE3 4 1.5570
+ angle_coeff @angle:c3-s4-n harmonic 64.28 96.07 # SOURCE3 4 1.0354
+ angle_coeff @angle:c3-s4-n4 harmonic 61.99 92.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-na harmonic 65.11 93.07 # SOURCE3 10 1.8813
+ angle_coeff @angle:c3-s4-nh harmonic 64.51 97.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-no harmonic 62.53 89.53 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-o harmonic 65.63 106.21 # SOURCE3 60 2.0426
+ angle_coeff @angle:c3-s4-oh harmonic 68.22 90.25 # SOURCE4 8 0.3023
+ angle_coeff @angle:c3-s4-os harmonic 68.23 90.06 # SOURCE3 4 0.4484
+ angle_coeff @angle:c3-s4-p2 harmonic 76.43 94.37 # SOURCE3 1
+ angle_coeff @angle:c3-s4-p3 harmonic 78.19 96.54 # SOURCE3 4 1.3634
+ angle_coeff @angle:c3-s4-p4 harmonic 73.69 97.40 # SOURCE3 1
+ angle_coeff @angle:c3-s4-p5 harmonic 78.32 99.18 # SOURCE3 1
+ angle_coeff @angle:c3-s4-s4 harmonic 64.31 89.50 # SOURCE3 1
+ angle_coeff @angle:c3-s4-s harmonic 61.31 98.72 # SOURCE3 2 0.0185
+ angle_coeff @angle:c3-s4-s6 harmonic 61.62 97.48 # SOURCE3 1
+ angle_coeff @angle:c3-s4-sh harmonic 60.74 94.66 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s4-ss harmonic 60.58 95.31 # SOURCE3 3 1.4101
+ angle_coeff @angle:ca-s4-ca harmonic 63.26 95.21 # SOURCE3 1
+ angle_coeff @angle:ca-s4-o harmonic 66.01 106.63 # SOURCE3 1
+ angle_coeff @angle:c-s4-c3 harmonic 61.53 95.07 # SOURCE3 1
+ angle_coeff @angle:c-s4-c harmonic 63.34 86.83 # SOURCE3 1
+ angle_coeff @angle:cl-s4-cl harmonic 53.89 97.68 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-s4-o harmonic 58.13 108.34 # SOURCE3 2 0.0000
+ angle_coeff @angle:c-s4-o harmonic 63.97 106.17 # SOURCE3 1
+ angle_coeff @angle:cx-s4-cx harmonic 86.71 48.80 # SOURCE2 1 0.0000
+ angle_coeff @angle:cx-s4-o harmonic 64.10 110.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-s4-f harmonic 69.99 92.71 # SOURCE2 3 0.1490
+ angle_coeff @angle:f-s4-o harmonic 70.11 106.81 # SOURCE2 2 0.0100
+ angle_coeff @angle:f-s4-s harmonic 59.78 107.50 # SOURCE2 1 0.0000
+ angle_coeff @angle:hs-s4-hs harmonic 37.79 87.00 # SOURCE3 2 0.0202
+ angle_coeff @angle:hs-s4-n1 harmonic 51.22 90.51 # HF/6-31G* 1
+ angle_coeff @angle:hs-s4-o harmonic 49.80 110.27 # SOURCE3 5 0.1908
+ angle_coeff @angle:i-s4-i harmonic 54.45 97.29 # SOURCE3 1
+ angle_coeff @angle:i-s4-o harmonic 47.32 113.91 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-s4-n1 harmonic 72.41 94.02 # HF/6-31G* 1
+ angle_coeff @angle:n1-s4-o harmonic 70.24 110.09 # HF/6-31G* 1
+ angle_coeff @angle:n2-s4-n2 harmonic 75.77 90.17 # SOURCE3 1
+ angle_coeff @angle:n2-s4-o harmonic 72.12 107.57 # SOURCE3 1
+ angle_coeff @angle:n3-s4-n3 harmonic 68.89 91.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-s4-o harmonic 67.59 109.07 # SOURCE3 6 2.3605
+ angle_coeff @angle:n4-s4-n4 harmonic 60.39 94.61 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-s4-o harmonic 63.17 104.91 # SOURCE3 3 0.4370
+ angle_coeff @angle:na-s4-na harmonic 63.63 103.10 # SOURCE3 1
+ angle_coeff @angle:na-s4-o harmonic 66.52 109.75 # SOURCE3 10 2.6919
+ angle_coeff @angle:nh-s4-nh harmonic 68.96 92.24 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-s4-o harmonic 68.40 107.54 # SOURCE3 3 0.0401
+ angle_coeff @angle:n-s4-n harmonic 68.03 91.30 # SOURCE3 1
+ angle_coeff @angle:n-s4-o harmonic 68.09 105.70 # SOURCE3 4 1.6857
+ angle_coeff @angle:no-s4-no harmonic 63.55 83.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-s4-o harmonic 62.93 103.58 # SOURCE3 3 1.5109
+ angle_coeff @angle:oh-s4-oh harmonic 69.00 100.34 # SOURCE3 1
+ angle_coeff @angle:o-s4-o harmonic 74.43 110.61 # SOURCE3 5 3.6413
+ angle_coeff @angle:o-s4-oh harmonic 69.42 110.13 # SOURCE4 10 0.5760
+ angle_coeff @angle:o-s4-os harmonic 69.67 109.02 # SOURCE3 8 1.5005
+ angle_coeff @angle:o-s4-p2 harmonic 76.18 106.77 # SOURCE3 1
+ angle_coeff @angle:o-s4-p3 harmonic 79.76 106.51 # SOURCE3 8 4.0943
+ angle_coeff @angle:o-s4-p4 harmonic 75.38 103.36 # SOURCE3 1
+ angle_coeff @angle:o-s4-p5 harmonic 85.32 96.95 # SOURCE3 1
+ angle_coeff @angle:o-s4-s4 harmonic 63.80 104.55 # SOURCE3 1
+ angle_coeff @angle:o-s4-s harmonic 61.69 112.22 # SOURCE3 4 2.8682
+ angle_coeff @angle:o-s4-s6 harmonic 64.33 102.84 # SOURCE3 1
+ angle_coeff @angle:o-s4-sh harmonic 60.56 107.51 # SOURCE3 3 0.7511
+ angle_coeff @angle:os-s4-os harmonic 71.26 93.68 # SOURCE3 2 2.4166
+ angle_coeff @angle:o-s4-ss harmonic 60.06 109.49 # SOURCE3 5 1.8509
+ angle_coeff @angle:p2-s4-p2 harmonic 98.20 92.62 # SOURCE3 1
+ angle_coeff @angle:p3-s4-p3 harmonic 101.37 95.71 # SOURCE3 2 1.2239
+ angle_coeff @angle:p5-s4-p5 harmonic 104.72 93.86 # SOURCE3 1
+ angle_coeff @angle:s4-s4-s4 harmonic 65.42 90.17 # SOURCE3 1
+ angle_coeff @angle:s4-s4-s6 harmonic 65.42 90.17 # SOURCE3 1
+ angle_coeff @angle:s6-s4-s6 harmonic 64.23 93.52 # SOURCE3 1
+ angle_coeff @angle:sh-s4-sh harmonic 58.79 102.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-s4-ss harmonic 58.85 102.64 # SOURCE3 1
+ angle_coeff @angle:s-s4-s harmonic 59.87 108.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-s4-ss harmonic 61.05 95.47 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-s6-br harmonic 67.11 101.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-s6-c3 harmonic 63.24 98.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-s6-f harmonic 63.06 100.60 # SOURCE2 1 0.0000
+ angle_coeff @angle:br-s6-o harmonic 63.90 107.58 # SOURCE3 6 0.3000
+ angle_coeff @angle:c1-s6-c1 harmonic 64.09 99.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-s6-o harmonic 68.10 108.23 # SOURCE3 4 0.0000
+ angle_coeff @angle:c2-s6-c2 harmonic 61.86 102.75 # SOURCE3 1
+ angle_coeff @angle:c2-s6-c3 harmonic 61.23 104.05 # SOURCE3 1
+ angle_coeff @angle:c2-s6-o harmonic 67.53 106.58 # SOURCE3 1
+ angle_coeff @angle:c3-s6-c3 harmonic 61.35 102.83 # SOURCE3 7 1.2531
+ angle_coeff @angle:c3-s6-ca harmonic 61.51 103.17 # SOURCE3 1
+ angle_coeff @angle:c3-s6-cy harmonic 62.55 94.57 # SOURCE4 8 0.4183
+ angle_coeff @angle:c3-s6-f harmonic 65.73 97.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s6-hs harmonic 44.94 100.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s6-i harmonic 50.82 97.74 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s6-n2 harmonic 63.42 112.95 # SOURCE4 11 0.7920
+ angle_coeff @angle:c3-s6-n3 harmonic 65.71 101.38 # SOURCE4 60 0.9507
+ angle_coeff @angle:c3-s6-n harmonic 63.84 102.97 # SOURCE3 4 0.8785
+ angle_coeff @angle:c3-s6-n4 harmonic 61.33 99.40 # SOURCE3 3 0.4695
+ angle_coeff @angle:c3-s6-na harmonic 63.68 102.81 # SOURCE3 10 3.1256
+ angle_coeff @angle:c3-s6-nh harmonic 63.74 104.31 # SOURCE4 34 1.5848
+ angle_coeff @angle:c3-s6-no harmonic 60.08 99.57 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s6-o harmonic 66.59 108.32 # SOURCE3 112 1.8014
+ angle_coeff @angle:c3-s6-oh harmonic 67.71 98.60 # SOURCE4 42 0.8366
+ angle_coeff @angle:c3-s6-os harmonic 68.68 96.32 # SOURCE4 30 0.4539
+ angle_coeff @angle:c3-s6-p2 harmonic 72.54 106.47 # SOURCE3 1
+ angle_coeff @angle:c3-s6-p3 harmonic 76.24 103.40 # SOURCE3 3 0.8516
+ angle_coeff @angle:c3-s6-p4 harmonic 71.10 104.12 # SOURCE3 1
+ angle_coeff @angle:c3-s6-p5 harmonic 77.16 103.46 # SOURCE3 1
+ angle_coeff @angle:c3-s6-s4 harmonic 61.78 98.10 # SOURCE3 1
+ angle_coeff @angle:c3-s6-s harmonic 60.70 104.50 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s6-s6 harmonic 60.60 101.95 # SOURCE3 1
+ angle_coeff @angle:c3-s6-sh harmonic 60.07 101.84 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-s6-ss harmonic 59.68 102.47 # SOURCE3 3 1.7451
+ angle_coeff @angle:ca-s6-ca harmonic 61.80 103.08 # SOURCE3 1
+ angle_coeff @angle:ca-s6-o harmonic 68.37 104.07 # SOURCE4 59 0.5636
+ angle_coeff @angle:c-s6-c3 harmonic 60.12 101.24 # SOURCE3 1
+ angle_coeff @angle:c-s6-c harmonic 59.07 99.82 # SOURCE3 1
+ angle_coeff @angle:cc-s6-o harmonic 65.29 103.63 # SOURCE4 9 0.5934
+ angle_coeff @angle:cl-s6-cl harmonic 52.93 101.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:cl-s6-f harmonic 57.88 99.00 # SOURCE2 1 0.0000
+ angle_coeff @angle:cl-s6-o harmonic 58.51 107.66 # SOURCE3 4 0.0000
+ angle_coeff @angle:c-s6-o harmonic 63.97 107.97 # SOURCE3 1
+ angle_coeff @angle:c-s6-os harmonic 64.36 102.12 # SOURCE3 1
+ angle_coeff @angle:cx-s6-cx harmonic 86.21 54.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:cy-s6-o harmonic 63.83 110.22 # SOURCE4 20 1.1009
+ angle_coeff @angle:f-s6-f harmonic 70.81 94.70 # SOURCE2 3 0.9899
+ angle_coeff @angle:f-s6-o harmonic 72.38 106.48 # SOURCE3 2 0.0000
+ angle_coeff @angle:hs-s6-hs harmonic 35.84 99.02 # SOURCE3 2 0.0595
+ angle_coeff @angle:hs-s6-n1 harmonic 54.71 97.27 # HF/6-31G* 1
+ angle_coeff @angle:hs-s6-o harmonic 51.91 107.60 # SOURCE3 10 0.0343
+ angle_coeff @angle:i-s6-i harmonic 53.90 99.25 # SOURCE3 1
+ angle_coeff @angle:i-s6-o harmonic 47.73 109.74 # SOURCE3 2 0.0000
+ angle_coeff @angle:n1-s6-n1 harmonic 83.71 95.52 # HF/6-31G* 1
+ angle_coeff @angle:n1-s6-o harmonic 78.79 107.52 # HF/6-31G* 1
+ angle_coeff @angle:n2-s6-n2 harmonic 75.20 98.61 # SOURCE3 1
+ angle_coeff @angle:n2-s6-o harmonic 72.08 116.41 # SOURCE3 3 5.0830
+ angle_coeff @angle:n2-s6-oh harmonic 71.75 106.96 # SOURCE3 2 0.0000
+ angle_coeff @angle:n2-s6-os harmonic 73.30 103.25 # SOURCE3 1
+ angle_coeff @angle:n3-s6-n3 harmonic 71.49 98.57 # SOURCE4 7 0.2690
+ angle_coeff @angle:n3-s6-o harmonic 72.90 106.80 # SOURCE3 14 1.7908
+ angle_coeff @angle:n3-s6-os harmonic 72.84 99.26 # SOURCE4 8 0.5141
+ angle_coeff @angle:n4-s6-n4 harmonic 59.97 101.85 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-s6-o harmonic 65.83 102.92 # SOURCE3 10 1.5434
+ angle_coeff @angle:na-s6-na harmonic 67.74 98.04 # SOURCE3 1
+ angle_coeff @angle:na-s6-o harmonic 70.46 105.67 # SOURCE3 20 0.8019
+ angle_coeff @angle:nh-s6-nh harmonic 70.22 94.56 # SOURCE3 1 0.0000
+ angle_coeff @angle:nh-s6-o harmonic 70.23 109.12 # SOURCE3 6 0.9556
+ angle_coeff @angle:n-s6-n harmonic 66.18 104.16 # SOURCE3 1
+ angle_coeff @angle:n-s6-o harmonic 70.74 105.91 # SOURCE3 8 0.2953
+ angle_coeff @angle:no-s6-no harmonic 61.24 91.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-s6-o harmonic 62.67 107.43 # SOURCE3 6 1.5494
+ angle_coeff @angle:n-s6-os harmonic 70.81 99.23 # SOURCE4 5 0.9794
+ angle_coeff @angle:oh-s6-oh harmonic 73.67 100.34 # SOURCE3 6 0.0076
+ angle_coeff @angle:oh-s6-os harmonic 75.33 96.62 # SOURCE4 26 0.6688
+ angle_coeff @angle:oh-s6-p2 harmonic 75.13 109.67 # SOURCE3 2 0.0000
+ angle_coeff @angle:o-s6-o harmonic 74.58 119.73 # SOURCE4 324 2.0530
+ angle_coeff @angle:o-s6-oh harmonic 74.13 108.21 # SOURCE3 18 0.7437
+ angle_coeff @angle:o-s6-os harmonic 74.58 107.84 # SOURCE3 12 0.7025
+ angle_coeff @angle:o-s6-p2 harmonic 76.65 106.61 # SOURCE3 1
+ angle_coeff @angle:o-s6-p3 harmonic 80.16 107.07 # SOURCE3 22 1.0550
+ angle_coeff @angle:o-s6-p4 harmonic 73.92 105.67 # SOURCE3 1
+ angle_coeff @angle:o-s6-p5 harmonic 81.69 106.64 # SOURCE3 1
+ angle_coeff @angle:o-s6-s4 harmonic 63.02 107.85 # SOURCE3 1
+ angle_coeff @angle:o-s6-s harmonic 63.52 110.29 # SOURCE3 6 2.2405
+ angle_coeff @angle:o-s6-s6 harmonic 63.55 106.07 # SOURCE3 1
+ angle_coeff @angle:o-s6-sh harmonic 62.53 106.81 # SOURCE3 6 0.6292
+ angle_coeff @angle:os-s6-os harmonic 74.80 98.70 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-s6-ss harmonic 62.06 107.43 # SOURCE3 10 1.1423
+ angle_coeff @angle:p3-s6-p3 harmonic 94.93 110.17 # SOURCE3 4 5.3678
+ angle_coeff @angle:p5-s6-p5 harmonic 99.25 104.49 # SOURCE3 1
+ angle_coeff @angle:s4-s6-s4 harmonic 61.51 101.99 # SOURCE3 1
+ angle_coeff @angle:s4-s6-s6 harmonic 65.42 90.17 # SOURCE3 1
+ angle_coeff @angle:s6-s6-s6 harmonic 61.12 103.29 # SOURCE3 1
+ angle_coeff @angle:sh-s6-sh harmonic 59.41 106.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-s6-ss harmonic 60.36 102.64 # SOURCE3 1
+ angle_coeff @angle:s-s6-s harmonic 60.63 109.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:ss-s6-ss harmonic 60.46 101.82 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-sh-hs harmonic 43.54 95.64 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-sh-hs harmonic 48.23 95.99 # calculated_based_on_C#C-SH 0
+ angle_coeff @angle:c2-sh-hs harmonic 45.81 97.08 # SOURCE4 5 0.3132
+ angle_coeff @angle:c3-sh-hs harmonic 44.94 96.60 # SOURCE3 12 0.8009
+ angle_coeff @angle:ca-sh-hs harmonic 46.32 94.84 # SOURCE4 13 0.4130
+ angle_coeff @angle:cc-sh-hs harmonic 46.41 95.38 # SOURCE4 8 1.1410
+ angle_coeff @angle:c-sh-hs harmonic 45.96 96.07 # SOURCE3 6 1.1164
+ angle_coeff @angle:f-sh-hs harmonic 48.09 96.50 # SOURCE3 1 0.0000
+ angle_coeff @angle:hs-sh-hs harmonic 37.45 93.72 # SOURCE3 3 0.4777
+ angle_coeff @angle:hs-sh-i harmonic 37.09 96.44 # SOURCE3 1 0.0000
+ angle_coeff @angle:hs-sh-n1 harmonic 51.69 93.51 # HF/6-31G* 1
+ angle_coeff @angle:hs-sh-n2 harmonic 48.12 95.82 # SOURCE3 5 3.1495
+ angle_coeff @angle:hs-sh-n harmonic 48.41 95.59 # SOURCE3 4 3.9065
+ angle_coeff @angle:hs-sh-n3 harmonic 48.06 95.98 # SOURCE3 3 1.1735
+ angle_coeff @angle:hs-sh-n4 harmonic 47.15 93.13 # SOURCE3 3 0.1675
+ angle_coeff @angle:hs-sh-na harmonic 48.12 97.38 # SOURCE3 9 1.0223
+ angle_coeff @angle:hs-sh-nh harmonic 47.52 101.11 # SOURCE3 1 0.0000
+ angle_coeff @angle:hs-sh-no harmonic 47.35 92.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:hs-sh-o harmonic 48.22 109.23 # SOURCE3 2 0.0068
+ angle_coeff @angle:hs-sh-oh harmonic 48.75 98.64 # SOURCE3 2 0.0605
+ angle_coeff @angle:hs-sh-os harmonic 49.35 98.15 # SOURCE3 3 0.1661
+ angle_coeff @angle:hs-sh-p2 harmonic 56.52 99.12 # SOURCE3 10 5.4110
+ angle_coeff @angle:hs-sh-p3 harmonic 53.11 95.81 # SOURCE3 3 0.4396
+ angle_coeff @angle:hs-sh-p4 harmonic 54.01 94.22 # SOURCE3 4 0.7605
+ angle_coeff @angle:hs-sh-p5 harmonic 54.80 94.52 # SOURCE3 3 0.5589
+ angle_coeff @angle:hs-sh-s harmonic 40.94 102.87 # SOURCE3 2 0.0000
+ angle_coeff @angle:hs-sh-s4 harmonic 42.04 92.16 # SOURCE3 3 1.6519
+ angle_coeff @angle:hs-sh-s6 harmonic 42.91 93.83 # SOURCE3 3 1.2561
+ angle_coeff @angle:hs-sh-sh harmonic 42.80 99.07 # SOURCE3 2 0.0000
+ angle_coeff @angle:hs-sh-ss harmonic 42.59 99.17 # SOURCE3 3 0.2457
+ angle_coeff @angle:br-ss-br harmonic 67.00 102.92 # SOURCE3 1 0.0000
+ angle_coeff @angle:br-ss-c3 harmonic 63.06 99.03 # SOURCE3 1 0.0000
+ angle_coeff @angle:c1-ss-c1 harmonic 66.30 98.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:c1-ss-c3 harmonic 62.89 99.90 # SOURCE2 1 0.0000
+ angle_coeff @angle:c2-ss-c2 harmonic 63.71 99.56 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-ss-c3 harmonic 61.87 100.37 # SOURCE4 100 2.3280
+ angle_coeff @angle:c2-ss-cy harmonic 65.30 88.61 # SOURCE4 27 0.4481
+ angle_coeff @angle:c2-ss-n2 harmonic 64.45 106.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-ss-na harmonic 65.02 100.51 # SOURCE3 6 6.9702
+ angle_coeff @angle:c2-ss-os harmonic 69.78 89.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-ss-ss harmonic 64.78 92.26 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-c3 harmonic 60.63 99.92 # SOURCE3 14 2.0723
+ angle_coeff @angle:c3-ss-ca harmonic 60.80 102.12 # SOURCE4 161 1.3084
+ angle_coeff @angle:c3-ss-cc harmonic 61.74 100.75 # CORR 87
+ angle_coeff @angle:c3-ss-cd harmonic 61.74 100.75 # CORR 87
+ angle_coeff @angle:c3-ss-cl harmonic 56.40 99.40 # SOURCE2 1 0.0000
+ angle_coeff @angle:c3-ss-cy harmonic 61.94 94.32 # SOURCE4 62 0.3646
+ angle_coeff @angle:c3-ss-f harmonic 63.40 97.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-i harmonic 56.03 100.00 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-n1 harmonic 65.93 98.44 # HF/6-31G* 1
+ angle_coeff @angle:c3-ss-n2 harmonic 65.94 96.42 # SOURCE3 5 1.3604
+ angle_coeff @angle:c3-ss-n3 harmonic 64.10 98.83 # SOURCE3 3 0.2909
+ angle_coeff @angle:c3-ss-n harmonic 63.71 100.30 # SOURCE3 4 0.6579
+ angle_coeff @angle:c3-ss-n4 harmonic 62.94 97.79 # SOURCE3 3 0.2002
+ angle_coeff @angle:c3-ss-na harmonic 63.51 100.14 # SOURCE3 12 1.7415
+ angle_coeff @angle:c3-ss-nh harmonic 63.75 100.63 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-no harmonic 62.40 98.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-o harmonic 64.67 106.60 # SOURCE3 2 1.6714
+ angle_coeff @angle:c3-ss-oh harmonic 65.29 98.28 # SOURCE3 2 1.4326
+ angle_coeff @angle:c3-ss-os harmonic 64.97 98.21 # SOURCE3 4 1.7097
+ angle_coeff @angle:c3-ss-p2 harmonic 80.22 98.41 # SOURCE3 8 0.9454
+ angle_coeff @angle:c3-ss-p3 harmonic 76.29 98.70 # SOURCE3 3 0.0356
+ angle_coeff @angle:c3-ss-p4 harmonic 76.93 98.16 # SOURCE3 4 0.1361
+ angle_coeff @angle:c3-ss-p5 harmonic 75.86 100.22 # SOURCE4 23 1.1410
+ angle_coeff @angle:c3-ss-s4 harmonic 60.11 96.37 # SOURCE3 3 0.0202
+ angle_coeff @angle:c3-ss-s harmonic 59.94 101.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-s6 harmonic 60.94 96.76 # SOURCE3 3 1.5680
+ angle_coeff @angle:c3-ss-sh harmonic 60.36 101.93 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-ss-ss harmonic 60.34 103.10 # SOURCE4 70 1.3377
+ angle_coeff @angle:ca-ss-ca harmonic 62.76 98.71 # SOURCE4 97 1.2321
+ angle_coeff @angle:ca-ss-cc harmonic 66.53 89.47 # CORR 134
+ angle_coeff @angle:ca-ss-cd harmonic 66.53 89.47 # CORR 134
+ angle_coeff @angle:ca-ss-cl harmonic 56.45 101.05 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-ss-n harmonic 65.76 97.16 # SOURCE3 1
+ angle_coeff @angle:ca-ss-na harmonic 64.76 99.32 # SOURCE3 1
+ angle_coeff @angle:ca-ss-nc harmonic 69.21 94.76 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-ss-nd harmonic 69.21 94.76 # SOURCE3 1 same_as_ca-ss-nc
+ angle_coeff @angle:ca-ss-ss harmonic 60.39 104.90 # SOURCE4 19 0.8743
+ angle_coeff @angle:c-ss-c2 harmonic 65.63 92.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-ss-c3 harmonic 61.48 100.29 # SOURCE3 5 2.2127
+ angle_coeff @angle:c-ss-c harmonic 62.20 101.40 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-ss-cc harmonic 65.61 92.43 # SOURCE4 14 2.3600
+ angle_coeff @angle:cc-ss-cc harmonic 67.01 89.91 # SOURCE3 11 2.2164
+ angle_coeff @angle:cc-ss-cd harmonic 67.07 89.74 # SOURCE4 49 0.7509
+ angle_coeff @angle:cc-ss-n harmonic 66.42 97.16 # SOURCE3 1 same_as_cd-ss-n
+ angle_coeff @angle:cc-ss-na harmonic 65.39 99.33 # SOURCE3 18 same_as_cd-ss-na
+ angle_coeff @angle:cc-ss-nc harmonic 70.31 94.08 # CORR 13
+ angle_coeff @angle:cc-ss-os harmonic 66.48 98.81 # SOURCE3 2 2.1583
+ angle_coeff @angle:cc-ss-ss harmonic 63.91 94.76 # CORR 13
+ angle_coeff @angle:cd-ss-cd harmonic 67.01 89.91 # SOURCE3 11 2.2164
+ angle_coeff @angle:cd-ss-n harmonic 66.42 97.16 # SOURCE3 1 0.0000
+ angle_coeff @angle:cd-ss-na harmonic 65.39 99.33 # SOURCE3 18 2.5847
+ angle_coeff @angle:cd-ss-nd harmonic 70.31 94.08 # CORR 13
+ angle_coeff @angle:cd-ss-os harmonic 66.48 98.81 # SOURCE3 2 same_as_cc-ss-os
+ angle_coeff @angle:cd-ss-ss harmonic 63.91 94.76 # CORR 13
+ angle_coeff @angle:cl-ss-cl harmonic 52.39 103.37 # SOURCE3 1 0.0000
+ angle_coeff @angle:cx-ss-cx harmonic 87.49 48.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-ss-f harmonic 66.18 98.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:f-ss-ss harmonic 59.85 108.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:i-ss-i harmonic 58.15 106.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:n1-ss-n1 harmonic 73.07 96.96 # HF/6-31G* 1
+ angle_coeff @angle:n2-ss-n2 harmonic 71.12 96.75 # SOURCE3 1 0.0000
+ angle_coeff @angle:n3-ss-n3 harmonic 66.50 102.34 # SOURCE3 1 0.0000
+ angle_coeff @angle:n4-ss-n4 harmonic 63.55 101.19 # SOURCE3 1 0.0000
+ angle_coeff @angle:na-ss-na harmonic 65.92 102.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:nc-ss-nc harmonic 75.03 97.94 # CORR 9
+ angle_coeff @angle:nd-ss-nd harmonic 75.03 97.94 # CORR 9
+ angle_coeff @angle:nh-ss-nh harmonic 65.30 107.89 # SOURCE3 1 0.0000
+ angle_coeff @angle:n-ss-n harmonic 66.45 103.10 # SOURCE3 1 0.0000
+ angle_coeff @angle:no-ss-no harmonic 61.43 106.43 # SOURCE3 1 0.0000
+ angle_coeff @angle:oh-ss-oh harmonic 68.23 104.25 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-ss-o harmonic 69.80 119.30 # SOURCE2 1 0.0000
+ angle_coeff @angle:o-ss-p5 harmonic 78.64 106.41 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-ss-s6 harmonic 62.35 105.39 # SOURCE3 1
+ angle_coeff @angle:os-ss-os harmonic 67.76 102.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:o-ss-ss harmonic 62.04 112.70 # SOURCE2 1 0.0000
+ angle_coeff @angle:p2-ss-p2 harmonic 105.52 99.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:p3-ss-p3 harmonic 96.77 101.67 # SOURCE3 1
+ angle_coeff @angle:p5-ss-p5 harmonic 103.25 89.83 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-ss-s4 harmonic 60.86 96.08 # SOURCE3 1 0.0000
+ angle_coeff @angle:s4-ss-s6 harmonic 59.93 101.26 # SOURCE3 1
+ angle_coeff @angle:s6-ss-s6 harmonic 60.46 101.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-ss-sh harmonic 60.28 107.54 # SOURCE3 1 0.0000
+ angle_coeff @angle:sh-ss-ss harmonic 60.81 106.53 # SOURCE3 1
+ angle_coeff @angle:s-ss-s harmonic 57.67 115.04 # SOURCE3 1
+ angle_coeff @angle:ss-ss-ss harmonic 60.44 108.76 # SOURCE4 8 0.2385
+ angle_coeff @angle:c3-sx-ca harmonic 61.85 96.41 # SOURCE4 13 0.3130
+ angle_coeff @angle:c3-sx-cc harmonic 62.52 95.11 # SOURCE4 17 0.6557
+ angle_coeff @angle:c3-sx-ce harmonic 62.82 94.95 # SOURCE3 3 0.0007
+ angle_coeff @angle:c3-sx-cf harmonic 62.82 94.95 # SOURCE3 3 same_as_c3-sx-ce
+ angle_coeff @angle:c3-sx-ne harmonic 65.33 90.06 # SOURCE3 5 1.9627
+ angle_coeff @angle:c3-sx-nf harmonic 65.33 90.06 # SOURCE3 5 same_as_c3-sx-ne
+ angle_coeff @angle:c3-sx-o harmonic 64.94 107.88 # SOURCE3 30 0.8721
+ angle_coeff @angle:c3-sx-pe harmonic 76.99 94.32 # SOURCE3 7 0.5547
+ angle_coeff @angle:c3-sx-pf harmonic 76.99 94.32 # SOURCE3 7 same_as_c3-sx-pe
+ angle_coeff @angle:c3-sx-px harmonic 74.26 96.46 # SOURCE3 3 1.3351
+ angle_coeff @angle:c3-sx-py harmonic 74.13 95.67 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-sx-sx harmonic 57.22 91.47 # SOURCE3 4 1.9919
+ angle_coeff @angle:c3-sx-sy harmonic 58.71 95.47 # SOURCE3 3 2.8422
+ angle_coeff @angle:ca-sx-ca harmonic 61.97 95.21 # SOURCE3 1 0.0000
+ angle_coeff @angle:ca-sx-o harmonic 64.82 106.89 # SOURCE4 25 0.5562
+ angle_coeff @angle:c-sx-c3 harmonic 62.01 92.71 # SOURCE3 3 0.3095
+ angle_coeff @angle:c-sx-c harmonic 62.83 86.85 # SOURCE3 1 0.0000
+ angle_coeff @angle:cc-sx-o harmonic 65.92 104.49 # SOURCE4 17 1.7759
+ angle_coeff @angle:ce-sx-ce harmonic 63.02 94.96 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-sx-o harmonic 65.38 107.47 # SOURCE3 5 0.3128
+ angle_coeff @angle:cf-sx-cf harmonic 63.02 94.96 # SOURCE3 1 same_as_ce-sx-ce
+ angle_coeff @angle:cf-sx-o harmonic 65.38 107.47 # SOURCE3 5 same_as_ce-sx-o
+ angle_coeff @angle:c-sx-o harmonic 63.47 106.17 # SOURCE3 5 0.9477
+ angle_coeff @angle:ne-sx-ne harmonic 66.37 90.17 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-sx-o harmonic 65.36 109.20 # SOURCE3 7 1.4542
+ angle_coeff @angle:nf-sx-nf harmonic 66.37 90.17 # SOURCE3 1 same_as_ne-sx-ne
+ angle_coeff @angle:nf-sx-o harmonic 65.36 109.20 # SOURCE3 7 same_as_ne-sx-o
+ angle_coeff @angle:o-sx-pe harmonic 77.00 106.43 # SOURCE3 9 2.8345
+ angle_coeff @angle:o-sx-pf harmonic 77.00 106.43 # SOURCE3 9 same_as_o-sx-pe
+ angle_coeff @angle:o-sx-px harmonic 75.16 104.77 # SOURCE3 3 1.9810
+ angle_coeff @angle:o-sx-py harmonic 73.10 109.13 # SOURCE3 7 5.6840
+ angle_coeff @angle:o-sx-sx harmonic 55.68 104.65 # SOURCE3 6 3.0524
+ angle_coeff @angle:o-sx-sy harmonic 59.44 103.41 # SOURCE3 5 0.9618
+ angle_coeff @angle:pe-sx-pe harmonic 99.19 92.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:pf-sx-pf harmonic 99.19 92.62 # SOURCE3 1 same_as_pe-sx-pe
+ angle_coeff @angle:py-sx-py harmonic 110.11 69.23 # SOURCE3 3 17.4143
+ angle_coeff @angle:sx-sx-sx harmonic 58.65 84.90 # SOURCE3 1 0.0000
+ angle_coeff @angle:sy-sx-sy harmonic 59.25 93.52 # SOURCE3 1 0.0000
+ angle_coeff @angle:c3-sy-ca harmonic 60.74 103.86 # SOURCE4 54 0.3180
+ angle_coeff @angle:c3-sy-cc harmonic 61.24 102.19 # SOURCE4 12 1.5324
+ angle_coeff @angle:c3-sy-ce harmonic 60.79 103.81 # SOURCE3 3 0.3368
+ angle_coeff @angle:c3-sy-cf harmonic 60.79 103.81 # SOURCE3 3 same_as_c3-sy-ce
+ angle_coeff @angle:c3-sy-ne harmonic 63.01 103.12 # SOURCE3 5 4.1882
+ angle_coeff @angle:c3-sy-nf harmonic 63.01 103.12 # SOURCE3 5 same_as_c3-sy-ne
+ angle_coeff @angle:c3-sy-o harmonic 65.97 108.48 # SOURCE3 62 0.8576
+ angle_coeff @angle:c3-sy-pe harmonic 71.79 106.03 # SOURCE3 6 2.6117
+ angle_coeff @angle:c3-sy-pf harmonic 71.79 106.03 # SOURCE3 6 same_as_c3-sy-pe
+ angle_coeff @angle:c3-sy-px harmonic 71.71 103.62 # SOURCE3 3 0.7078
+ angle_coeff @angle:c3-sy-py harmonic 73.48 103.39 # SOURCE3 3 0.4563
+ angle_coeff @angle:c3-sy-sx harmonic 56.27 104.64 # SOURCE3 3 4.6276
+ angle_coeff @angle:c3-sy-sy harmonic 57.43 100.78 # SOURCE3 4 1.1633
+ angle_coeff @angle:ca-sy-ca harmonic 60.65 104.04 # SOURCE4 25 2.0762
+ angle_coeff @angle:ca-sy-cc harmonic 60.36 105.09 # SOURCE4 5 0.3628
+ angle_coeff @angle:ca-sy-n3 harmonic 64.10 102.48 # SOURCE4 180 1.0802
+ angle_coeff @angle:ca-sy-n harmonic 62.89 105.45 # SOURCE4 51 1.1497
+ angle_coeff @angle:ca-sy-ne harmonic 62.86 103.47 # SOURCE4 11 1.6071
+ angle_coeff @angle:ca-sy-nh harmonic 62.86 105.59 # SOURCE4 78 1.5805
+ angle_coeff @angle:ca-sy-o harmonic 65.84 108.73 # SOURCE3 26 1.2638
+ angle_coeff @angle:ca-sy-oh harmonic 65.64 101.25 # SOURCE4 23 0.9100
+ angle_coeff @angle:ca-sy-os harmonic 67.64 92.98 # SOURCE3 1 0.0000
+ angle_coeff @angle:c-sy-c3 harmonic 60.09 101.25 # SOURCE3 3 1.1850
+ angle_coeff @angle:c-sy-c harmonic 59.23 99.81 # SOURCE3 1 0.0000
+ angle_coeff @angle:cc-sy-n3 harmonic 64.10 102.54 # CORR 30
+ angle_coeff @angle:cc-sy-o harmonic 66.17 107.71 # CORR 100
+ angle_coeff @angle:cd-sy-n3 harmonic 64.10 102.54 # CORR 30
+ angle_coeff @angle:cd-sy-nh harmonic 65.53 97.20 # SOURCE4 6 0.2429
+ angle_coeff @angle:cd-sy-o harmonic 66.17 107.71 # CORR 100
+ angle_coeff @angle:ce-sy-ce harmonic 61.09 102.78 # SOURCE3 1 0.0000
+ angle_coeff @angle:ce-sy-o harmonic 66.35 107.25 # SOURCE3 10 0.5477
+ angle_coeff @angle:cf-sy-cf harmonic 61.09 102.78 # SOURCE3 1 same_as_ce-sy-ce
+ angle_coeff @angle:cf-sy-o harmonic 66.35 107.25 # SOURCE3 10 same_as_ce-sy-o
+ angle_coeff @angle:c-sy-o harmonic 64.07 107.23 # SOURCE3 10 0.8425
+ angle_coeff @angle:f-sy-o harmonic 63.64 105.60 # SOURCE4 7 0.2000
+ angle_coeff @angle:n2-sy-o harmonic 61.16 123.53 # SOURCE4 6 1.2388
+ angle_coeff @angle:n3-sy-ne harmonic 66.36 102.40 # SOURCE4 5 1.3390
+ angle_coeff @angle:n3-sy-o harmonic 70.45 107.11 # SOURCE4 375 1.1257
+ angle_coeff @angle:na-sy-na harmonic 67.74 98.04 # SOURCE3 1
+ angle_coeff @angle:nc-sy-nc harmonic 75.24 98.04 # SOURCE3 2
+ angle_coeff @angle:nd-sy-nd harmonic 75.24 98.04 # SOURCE3 2
+ angle_coeff @angle:ne-sy-ne harmonic 66.58 98.62 # SOURCE3 1 0.0000
+ angle_coeff @angle:ne-sy-o harmonic 68.89 107.06 # SOURCE3 14 2.2705
+ angle_coeff @angle:nf-sy-nf harmonic 66.58 98.62 # SOURCE3 1 same_as_ne-sy-ne
+ angle_coeff @angle:nf-sy-o harmonic 68.89 107.06 # SOURCE3 14 same_as_ne-sy-o
+ angle_coeff @angle:nh-sy-o harmonic 70.18 106.38 # SOURCE4 123 1.6517
+ angle_coeff @angle:n-sy-o harmonic 69.79 107.50 # SOURCE4 61 1.8720
+ angle_coeff @angle:o-sy-o harmonic 72.40 121.88 # SOURCE3 46 0.9495
+ angle_coeff @angle:o-sy-oh harmonic 72.26 106.93 # SOURCE3 8 0.7424
+ angle_coeff @angle:o-sy-os harmonic 70.39 108.31 # SOURCE4 7 0.1222
+ angle_coeff @angle:o-sy-pe harmonic 75.40 106.90 # SOURCE3 12 1.4524
+ angle_coeff @angle:o-sy-pf harmonic 75.40 106.90 # SOURCE3 12 same_as_o-sy-pe
+ angle_coeff @angle:o-sy-px harmonic 74.45 106.17 # SOURCE3 6 0.7059
+ angle_coeff @angle:o-sy-py harmonic 76.54 106.67 # SOURCE3 10 0.6478
+ angle_coeff @angle:o-sy-sx harmonic 58.62 106.33 # SOURCE3 10 2.0456
+ angle_coeff @angle:o-sy-sy harmonic 58.79 106.19 # SOURCE3 12 0.1754
+ angle_coeff @angle:py-sy-py harmonic 92.79 104.49 # SOURCE3 1 0.0000
+ angle_coeff @angle:sx-sy-sx harmonic 56.74 101.99 # SOURCE3 1 0.0000
+ angle_coeff @angle:sy-sy-sy harmonic 56.50 103.29 # SOURCE3 1 0.0000
+ angle_coeff @angle:c2-c1-cf harmonic 58.18 179.01 # NEW 6
+ angle_coeff @angle:c3-c1-ch harmonic 55.79 178.52 # NEW 39
+ angle_coeff @angle:nf-c1-s harmonic 57.59 175.81 # NEW 8
+ angle_coeff @angle:br-c2-cf harmonic 63.21 121.59 # NEW 7
+ angle_coeff @angle:cd-c2-h4 harmonic 49.19 120.33 # NEW 7
+ angle_coeff @angle:cd-c2-nh harmonic 69.46 122.96 # NEW 10
+ angle_coeff @angle:cd-c2-o harmonic 72.80 123.59 # NEW 6
+ angle_coeff @angle:cf-c2-cl harmonic 58.06 123.90 # NEW 11
+ angle_coeff @angle:cf-c2-h4 harmonic 49.38 122.29 # NEW 75
+ angle_coeff @angle:cf-c2-na harmonic 68.82 123.71 # NEW 6
+ angle_coeff @angle:cf-c2-nh harmonic 70.64 120.72 # NEW 93
+ angle_coeff @angle:cf-c2-no harmonic 68.45 119.65 # NEW 5
+ angle_coeff @angle:cf-c2-o harmonic 73.66 123.08 # NEW 5
+ angle_coeff @angle:cf-c2-oh harmonic 70.90 123.27 # NEW 42
+ angle_coeff @angle:cf-c2-os harmonic 70.47 122.52 # NEW 51
+ angle_coeff @angle:h4-c2-nf harmonic 52.87 119.63 # NEW 10
+ angle_coeff @angle:h5-c2-nf harmonic 52.76 119.62 # NEW 17
+ angle_coeff @angle:nf-c2-os harmonic 74.86 118.76 # NEW 5
+ angle_coeff @angle:nf-c2-ss harmonic 65.41 120.06 # NEW 9
+ angle_coeff @angle:n-c2-nf harmonic 70.89 125.38 # NEW 10
+ angle_coeff @angle:ca-c3-cf harmonic 63.81 112.33 # NEW 51
+ angle_coeff @angle:cd-c3-cx harmonic 63.85 112.55 # NEW 5
+ angle_coeff @angle:c-c3-cf harmonic 64.02 111.98 # NEW 16
+ angle_coeff @angle:cd-c3-hx harmonic 47.17 111.02 # NEW 9
+ angle_coeff @angle:cd-c3-n2 harmonic 66.85 110.47 # NEW 11
+ angle_coeff @angle:cd-c3-n4 harmonic 64.88 115.58 # NEW 6
+ angle_coeff @angle:cd-c3-na harmonic 66.43 113.39 # NEW 8
+ angle_coeff @angle:cd-c3-p5 harmonic 76.89 116.23 # NEW 6
+ angle_coeff @angle:cf-c3-cf harmonic 64.24 111.44 # NEW 18
+ angle_coeff @angle:cf-c3-n harmonic 67.09 110.41 # NEW 6
+ angle_coeff @angle:cf-c3-oh harmonic 68.00 111.05 # NEW 17
+ angle_coeff @angle:cf-c3-os harmonic 68.64 108.10 # NEW 16
+ angle_coeff @angle:cf-c3-ss harmonic 61.87 111.10 # NEW 7
+ angle_coeff @angle:cd-ca-cq harmonic 64.63 124.30 # NEW 10
+ angle_coeff @angle:cf-ca-na harmonic 67.44 119.85 # NEW 9
+ angle_coeff @angle:ch-ca-cq harmonic 65.26 121.53 # NEW 12
+ angle_coeff @angle:cl-ca-cq harmonic 58.19 120.31 # NEW 18
+ angle_coeff @angle:cq-ca-f harmonic 67.10 119.39 # NEW 16
+ angle_coeff @angle:cq-ca-h4 harmonic 48.15 120.03 # NEW 27
+ angle_coeff @angle:cq-ca-na harmonic 72.91 108.79 # NEW 165
+ angle_coeff @angle:cq-ca-nb harmonic 68.56 123.72 # NEW 50
+ angle_coeff @angle:cq-ca-nh harmonic 68.66 121.52 # NEW 11
+ angle_coeff @angle:cq-ca-oh harmonic 69.26 120.96 # NEW 12
+ angle_coeff @angle:cq-ca-ss harmonic 63.87 112.75 # NEW 8
+ angle_coeff @angle:ca-c-nf harmonic 67.74 114.39 # NEW 5
+ angle_coeff @angle:br-cd-c harmonic 63.98 115.68 # NEW 8
+ angle_coeff @angle:br-cd-cd harmonic 61.82 124.89 # NEW 8
+ angle_coeff @angle:br-cd-cc harmonic 62.26 124.56 # NEW 32
+ angle_coeff @angle:br-cd-na harmonic 64.60 121.42 # NEW 6
+ angle_coeff @angle:ca-cd-cf harmonic 62.51 127.87 # NEW 11
+ angle_coeff @angle:ca-cd-nh harmonic 67.46 122.45 # NEW 9
+ angle_coeff @angle:cd-c-cf harmonic 64.64 115.68 # NEW 6
+ angle_coeff @angle:cd-cd-f harmonic 66.35 119.41 # NEW 7
+ angle_coeff @angle:c-cd-ch harmonic 64.98 118.14 # NEW 7
+ angle_coeff @angle:cd-cd-sy harmonic 59.22 128.36 # NEW 8
+ angle_coeff @angle:cc-cd-f harmonic 67.42 121.08 # NEW 28
+ angle_coeff @angle:cc-cd-no harmonic 65.78 128.95 # NEW 117
+ angle_coeff @angle:c-cd-f harmonic 66.16 116.87 # NEW 16
+ angle_coeff @angle:ch-cd-na harmonic 67.51 122.35 # NEW 5
+ angle_coeff @angle:ch-cd-ss harmonic 62.33 120.70 # NEW 12
+ angle_coeff @angle:cd-c-h4 harmonic 47.13 115.45 # NEW 5
+ angle_coeff @angle:cl-cd-na harmonic 59.37 121.61 # NEW 12
+ angle_coeff @angle:cl-cd-ss harmonic 58.09 119.85 # NEW 11
+ angle_coeff @angle:c-cd-nf harmonic 67.11 119.88 # NEW 6
+ angle_coeff @angle:cd-c-s harmonic 61.67 127.94 # NEW 12
+ angle_coeff @angle:cd-c-ss harmonic 63.47 112.52 # NEW 10
+ angle_coeff @angle:cx-cd-nc harmonic 65.61 127.75 # NEW 12
+ angle_coeff @angle:cx-cd-os harmonic 67.94 118.08 # NEW 10
+ angle_coeff @angle:cc-c-cx harmonic 63.88 117.46 # NEW 13
+ angle_coeff @angle:cc-c-nc harmonic 68.65 113.75 # NEW 14
+ angle_coeff @angle:cf-c-cx harmonic 63.95 116.25 # NEW 6
+ angle_coeff @angle:cf-c-h4 harmonic 46.93 114.88 # NEW 19
+ angle_coeff @angle:cf-c-ss harmonic 63.94 110.39 # NEW 5
+ angle_coeff @angle:na-cd-no harmonic 68.48 124.90 # NEW 48
+ angle_coeff @angle:na-cd-oh harmonic 73.25 117.26 # NEW 16
+ angle_coeff @angle:na-cd-sx harmonic 63.25 117.04 # NEW 13
+ angle_coeff @angle:na-cd-sy harmonic 63.13 120.55 # NEW 7
+ angle_coeff @angle:nd-cd-no harmonic 69.31 121.54 # NEW 7
+ angle_coeff @angle:nc-cd-nc harmonic 70.88 128.17 # NEW 7
+ angle_coeff @angle:nc-cd-nf harmonic 69.29 129.66 # NEW 7
+ angle_coeff @angle:nc-cd-no harmonic 69.90 122.68 # NEW 16
+ angle_coeff @angle:nc-cd-sh harmonic 62.75 124.92 # NEW 5
+ angle_coeff @angle:nc-cd-sx harmonic 60.81 127.60 # NEW 14
+ angle_coeff @angle:nc-cd-sy harmonic 62.75 123.08 # NEW 13
+ angle_coeff @angle:nf-cd-ss harmonic 65.39 116.99 # NEW 7
+ angle_coeff @angle:n-cd-n2 harmonic 74.78 114.48 # NEW 15
+ angle_coeff @angle:no-cd-os harmonic 71.01 117.59 # NEW 62
+ angle_coeff @angle:no-cd-ss harmonic 63.76 121.10 # NEW 10
+ angle_coeff @angle:ca-cc-cf harmonic 65.09 125.10 # NEW 9
+ angle_coeff @angle:ca-cc-na harmonic 67.03 123.45 # NEW 39
+ angle_coeff @angle:cd-cc-cg harmonic 64.92 126.05 # NEW 30
+ angle_coeff @angle:cd-cc-cy harmonic 63.93 122.13 # NEW 10
+ angle_coeff @angle:cd-cc-nd harmonic 69.42 123.82 # NEW 14
+ angle_coeff @angle:cc-cc-cy harmonic 63.17 120.93 # NEW 6
+ angle_coeff @angle:cf-cc-nc harmonic 68.22 124.90 # NEW 5
+ angle_coeff @angle:c-cc-h4 harmonic 46.77 118.19 # NEW 8
+ angle_coeff @angle:na-cc-nh harmonic 72.43 116.98 # NEW 46
+ angle_coeff @angle:na-cc-ss harmonic 67.07 111.46 # NEW 20
+ angle_coeff @angle:nc-cc-nc harmonic 69.47 125.58 # NEW 13
+ angle_coeff @angle:oh-cc-os harmonic 75.54 111.61 # NEW 6
+ angle_coeff @angle:c2-cf-cl harmonic 57.87 119.51 # NEW 24
+ angle_coeff @angle:c2-cf-h4 harmonic 48.64 125.58 # NEW 11
+ angle_coeff @angle:c2-cf-n1 harmonic 72.67 117.85 # NEW 7
+ angle_coeff @angle:c2-cf-na harmonic 69.29 119.19 # NEW 5
+ angle_coeff @angle:c2-cf-oh harmonic 70.32 123.78 # NEW 10
+ angle_coeff @angle:c3-cf-ch harmonic 63.79 118.48 # NEW 8
+ angle_coeff @angle:c3-cf-ne harmonic 67.26 120.75 # NEW 6
+ angle_coeff @angle:c3-cf-nh harmonic 65.76 119.90 # NEW 5
+ angle_coeff @angle:ca-cf-cf harmonic 63.84 119.62 # NEW 14
+ angle_coeff @angle:ca-cf-cl harmonic 57.99 114.22 # NEW 6
+ angle_coeff @angle:ca-cf-h4 harmonic 46.71 116.86 # NEW 74
+ angle_coeff @angle:ca-cf-nh harmonic 67.87 115.51 # NEW 93
+ angle_coeff @angle:ca-cf-os harmonic 68.60 115.58 # NEW 8
+ angle_coeff @angle:ca-cf-ss harmonic 61.21 117.73 # NEW 5
+ angle_coeff @angle:c-cf-ca harmonic 63.79 117.98 # NEW 8
+ angle_coeff @angle:cd-cf-cc harmonic 63.28 130.36 # NEW 5
+ angle_coeff @angle:c-cf-cf harmonic 63.46 120.89 # NEW 16
+ angle_coeff @angle:c-cf-ch harmonic 64.57 118.32 # NEW 15
+ angle_coeff @angle:cd-cf-h4 harmonic 47.52 115.40 # NEW 29
+ angle_coeff @angle:c-cf-cl harmonic 57.67 115.40 # NEW 6
+ angle_coeff @angle:cd-cf-nh harmonic 67.31 119.17 # NEW 8
+ angle_coeff @angle:c-cf-cy harmonic 72.72 88.22 # NEW 19
+ angle_coeff @angle:cf-cf-cl harmonic 57.29 117.93 # NEW 12
+ angle_coeff @angle:cf-cf-oh harmonic 69.29 116.89 # NEW 11
+ angle_coeff @angle:ce-cf-cy harmonic 60.53 137.74 # NEW 13
+ angle_coeff @angle:ce-cf-h4 harmonic 49.02 123.76 # NEW 5
+ angle_coeff @angle:ce-cf-n1 harmonic 72.03 120.03 # NEW 6
+ angle_coeff @angle:ce-cf-nh harmonic 69.48 121.52 # NEW 12
+ angle_coeff @angle:ch-cf-n2 harmonic 69.59 121.43 # NEW 6
+ angle_coeff @angle:c-cf-oh harmonic 68.34 117.92 # NEW 5
+ angle_coeff @angle:c-cf-os harmonic 69.09 113.78 # NEW 21
+ angle_coeff @angle:h4-cf-n1 harmonic 52.58 116.36 # NEW 7
+ angle_coeff @angle:h4-cf-nf harmonic 49.72 115.81 # NEW 7
+ angle_coeff @angle:n2-cf-os harmonic 74.58 118.13 # NEW 6
+ angle_coeff @angle:n2-cf-ss harmonic 64.40 117.23 # NEW 6
+ angle_coeff @angle:nf-cf-nh harmonic 71.89 112.91 # NEW 12
+ angle_coeff @angle:ne-cf-nh harmonic 73.31 118.13 # NEW 6
+ angle_coeff @angle:ca-ce-cd harmonic 62.70 130.80 # NEW 12
+ angle_coeff @angle:c-ce-cc harmonic 64.25 117.76 # NEW 10
+ angle_coeff @angle:c-ce-n2 harmonic 70.16 114.88 # NEW 5
+ angle_coeff @angle:h4-ce-nf harmonic 52.29 120.21 # NEW 6
+ angle_coeff @angle:c1-ch-cd harmonic 56.97 178.60 # NEW 6
+ angle_coeff @angle:ch-cg-cg harmonic 58.68 179.67 # NEW 7
+ angle_coeff @angle:n-c-nf harmonic 74.43 110.37 # NEW 10
+ angle_coeff @angle:ca-cq-na harmonic 68.78 119.43 # NEW 21
+ angle_coeff @angle:nb-cq-nb harmonic 71.31 125.72 # NEW 5
+ angle_coeff @angle:cd-cx-hc harmonic 47.37 113.84 # NEW 15
+ angle_coeff @angle:cf-cy-h2 harmonic 45.50 117.25 # NEW 17
+ angle_coeff @angle:cf-cy-n harmonic 74.69 88.02 # NEW 14
+ angle_coeff @angle:cf-cy-ss harmonic 58.47 121.33 # NEW 13
+ angle_coeff @angle:cd-n2-na harmonic 73.01 108.92 # NEW 9
+ angle_coeff @angle:cd-n2-nh harmonic 70.37 118.47 # NEW 6
+ angle_coeff @angle:c3-n4-cd harmonic 62.84 111.09 # NEW 7
+ angle_coeff @angle:c3-na-cq harmonic 63.76 119.46 # NEW 7
+ angle_coeff @angle:ca-na-cq harmonic 65.88 120.96 # NEW 20
+ angle_coeff @angle:cd-na-cf harmonic 63.05 126.61 # NEW 8
+ angle_coeff @angle:cq-nb-nb harmonic 68.79 121.11 # NEW 12
+ angle_coeff @angle:c-n-cf harmonic 62.21 131.83 # NEW 146
+ angle_coeff @angle:ca-nc-nd harmonic 73.55 108.41 # NEW 9
+ angle_coeff @angle:c2-nf-ch harmonic 68.36 123.58 # NEW 12
+ angle_coeff @angle:c-nf-sy harmonic 61.66 116.05 # NEW 6
+ angle_coeff @angle:c3-nh-ce harmonic 63.47 119.92 # NEW 20
+ angle_coeff @angle:cd-nh-n2 harmonic 68.23 119.66 # NEW 5
+ angle_coeff @angle:cd-nh-sy harmonic 61.22 122.91 # NEW 23
+ angle_coeff @angle:cf-nh-sy harmonic 63.58 112.97 # NEW 7
+ angle_coeff @angle:hn-n-nd harmonic 50.74 115.24 # NEW 10
+ angle_coeff @angle:cd-no-o harmonic 70.34 117.52 # NEW 198
+ angle_coeff @angle:n3-py-nf harmonic 41.93 108.44 # NEW 12
+ angle_coeff @angle:cd-s6-o harmonic 70.23 103.63 # NEW 9
+ angle_coeff @angle:cd-sh-hs harmonic 46.41 95.38 # NEW 8
+ angle_coeff @angle:c-ss-cd harmonic 65.61 92.43 # NEW 14
+ angle_coeff @angle:c3-sx-cd harmonic 62.52 95.11 # NEW 17
+ angle_coeff @angle:cd-sx-o harmonic 65.92 104.49 # NEW 17
+ angle_coeff @angle:c3-sy-cd harmonic 61.24 102.19 # NEW 12
+ angle_coeff @angle:ca-sy-cd harmonic 60.36 105.09 # NEW 5
+ angle_coeff @angle:ca-sy-nf harmonic 62.86 103.47 # NEW 11
+ angle_coeff @angle:cc-sy-nh harmonic 65.53 97.20 # NEW 6
+ angle_coeff @angle:n3-sy-nf harmonic 66.36 102.40 # NEW 5
} # (end of angle_coeffs)
write_once("Data Angles By Type") {
@angle:hw-ow-hw @atom:hw @atom:ow @atom:hw
@angle:hw-hw-ow @atom:hw @atom:hw @atom:ow
@angle:br-c1-br @atom:br @atom:c1 @atom:br
@angle:br-c1-c1 @atom:br @atom:c1 @atom:c1
@angle:c1-c1-c1 @atom:c1 @atom:c1 @atom:c1
@angle:c1-c1-c2 @atom:c1 @atom:c1 @atom:c2
@angle:c1-c1-c3 @atom:c1 @atom:c1 @atom:c3
@angle:c1-c1-ca @atom:c1 @atom:c1 @atom:ca
@angle:c1-c1-cl @atom:c1 @atom:c1 @atom:cl
@angle:c1-c1-f @atom:c1 @atom:c1 @atom:f
@angle:c1-c1-ha @atom:c1 @atom:c1 @atom:ha
@angle:c1-c1-hc @atom:c1 @atom:c1 @atom:hc
@angle:c1-c1-i @atom:c1 @atom:c1 @atom:i
@angle:c1-c1-n1 @atom:c1 @atom:c1 @atom:n1
@angle:c1-c1-n2 @atom:c1 @atom:c1 @atom:n2
@angle:c1-c1-n3 @atom:c1 @atom:c1 @atom:n3
@angle:c1-c1-n4 @atom:c1 @atom:c1 @atom:n4
@angle:c1-c1-n @atom:c1 @atom:c1 @atom:n
@angle:c1-c1-na @atom:c1 @atom:c1 @atom:na
@angle:c1-c1-nh @atom:c1 @atom:c1 @atom:nh
@angle:c1-c1-no @atom:c1 @atom:c1 @atom:no
@angle:c1-c1-o @atom:c1 @atom:c1 @atom:o
@angle:c1-c1-oh @atom:c1 @atom:c1 @atom:oh
@angle:c1-c1-os @atom:c1 @atom:c1 @atom:os
@angle:c1-c1-p2 @atom:c1 @atom:c1 @atom:p2
@angle:c1-c1-p3 @atom:c1 @atom:c1 @atom:p3
@angle:c1-c1-p4 @atom:c1 @atom:c1 @atom:p4
@angle:c1-c1-p5 @atom:c1 @atom:c1 @atom:p5
@angle:c1-c1-s4 @atom:c1 @atom:c1 @atom:s4
@angle:c1-c1-s6 @atom:c1 @atom:c1 @atom:s6
@angle:c1-c1-s @atom:c1 @atom:c1 @atom:s
@angle:c1-c1-sh @atom:c1 @atom:c1 @atom:sh
@angle:c1-c1-ss @atom:c1 @atom:c1 @atom:ss
@angle:c2-c1-c2 @atom:c2 @atom:c1 @atom:c2
@angle:c2-c1-ce @atom:c2 @atom:c1 @atom:ce
@angle:c2-c1-n1 @atom:c2 @atom:c1 @atom:n1
@angle:c2-c1-o @atom:c2 @atom:c1 @atom:o
@angle:c2-c1-s2 @atom:c2 @atom:c1 @atom:s2
@angle:c3-c1-c3 @atom:c3 @atom:c1 @atom:c3
@angle:c3-c1-cg @atom:c3 @atom:c1 @atom:cg
@angle:c3-c1-n1 @atom:c3 @atom:c1 @atom:n1
@angle:ca-c1-ca @atom:ca @atom:c1 @atom:ca
@angle:c-c1-c1 @atom:c @atom:c1 @atom:c1
@angle:cg-c1-ha @atom:cg @atom:c1 @atom:ha
@angle:ch-c1-ha @atom:ch @atom:c1 @atom:ha
@angle:cl-c1-cl @atom:cl @atom:c1 @atom:cl
@angle:f-c1-f @atom:f @atom:c1 @atom:f
@angle:i-c1-i @atom:i @atom:c1 @atom:i
@angle:n1-c1-n1 @atom:n1 @atom:c1 @atom:n1
@angle:n1-c1-n3 @atom:n1 @atom:c1 @atom:n3
@angle:n1-c1-nh @atom:n1 @atom:c1 @atom:nh
@angle:n1-c1-os @atom:n1 @atom:c1 @atom:os
@angle:n1-c1-p3 @atom:n1 @atom:c1 @atom:p3
@angle:n1-c1-ss @atom:n1 @atom:c1 @atom:ss
@angle:n2-c1-n2 @atom:n2 @atom:c1 @atom:n2
@angle:n2-c1-o @atom:n2 @atom:c1 @atom:o
@angle:n2-c1-s @atom:n2 @atom:c1 @atom:s
@angle:n3-c1-n3 @atom:n3 @atom:c1 @atom:n3
@angle:n4-c1-n4 @atom:n4 @atom:c1 @atom:n4
@angle:na-c1-na @atom:na @atom:c1 @atom:na
@angle:ne-c1-o @atom:ne @atom:c1 @atom:o
@angle:ne-c1-s @atom:ne @atom:c1 @atom:s
@angle:nf-c1-o @atom:nf @atom:c1 @atom:o
@angle:nh-c1-nh @atom:nh @atom:c1 @atom:nh
@angle:n-c1-n @atom:n @atom:c1 @atom:n
@angle:no-c1-no @atom:no @atom:c1 @atom:no
@angle:oh-c1-oh @atom:oh @atom:c1 @atom:oh
@angle:o-c1-o @atom:o @atom:c1 @atom:o
@angle:os-c1-os @atom:os @atom:c1 @atom:os
@angle:p2-c1-p2 @atom:p2 @atom:c1 @atom:p2
@angle:p3-c1-p3 @atom:p3 @atom:c1 @atom:p3
@angle:p4-c1-p4 @atom:p4 @atom:c1 @atom:p4
@angle:p5-c1-p5 @atom:p5 @atom:c1 @atom:p5
@angle:s2-c1-s2 @atom:s2 @atom:c1 @atom:s2
@angle:s4-c1-s4 @atom:s4 @atom:c1 @atom:s4
@angle:s6-c1-s6 @atom:s6 @atom:c1 @atom:s6
@angle:sh-c1-sh @atom:sh @atom:c1 @atom:sh
@angle:s-c1-s @atom:s @atom:c1 @atom:s
@angle:ss-c1-ss @atom:ss @atom:c1 @atom:ss
@angle:br-c2-br @atom:br @atom:c2 @atom:br
@angle:br-c2-c2 @atom:br @atom:c2 @atom:c2
@angle:br-c2-c3 @atom:br @atom:c2 @atom:c3
@angle:br-c2-ce @atom:br @atom:c2 @atom:ce
@angle:br-c2-h4 @atom:br @atom:c2 @atom:h4
@angle:br-c2-ha @atom:br @atom:c2 @atom:ha
@angle:c1-c2-c1 @atom:c1 @atom:c2 @atom:c1
@angle:c1-c2-c2 @atom:c1 @atom:c2 @atom:c2
@angle:c1-c2-c3 @atom:c1 @atom:c2 @atom:c3
@angle:c1-c2-f @atom:c1 @atom:c2 @atom:f
@angle:c1-c2-ha @atom:c1 @atom:c2 @atom:ha
@angle:c2-c2-c2 @atom:c2 @atom:c2 @atom:c2
@angle:c2-c2-c3 @atom:c2 @atom:c2 @atom:c3
@angle:c2-c2-ca @atom:c2 @atom:c2 @atom:ca
@angle:c2-c2-cc @atom:c2 @atom:c2 @atom:cc
@angle:c2-c2-cd @atom:c2 @atom:c2 @atom:cd
@angle:c2-c2-cl @atom:c2 @atom:c2 @atom:cl
@angle:c2-c2-cx @atom:c2 @atom:c2 @atom:cx
@angle:c2-c2-cy @atom:c2 @atom:c2 @atom:cy
@angle:c2-c2-f @atom:c2 @atom:c2 @atom:f
@angle:c2-c2-h4 @atom:c2 @atom:c2 @atom:h4
@angle:c2-c2-ha @atom:c2 @atom:c2 @atom:ha
@angle:c2-c2-hc @atom:c2 @atom:c2 @atom:hc
@angle:c2-c2-hx @atom:c2 @atom:c2 @atom:hx
@angle:c2-c2-i @atom:c2 @atom:c2 @atom:i
@angle:c2-c2-n1 @atom:c2 @atom:c2 @atom:n1
@angle:c2-c2-n2 @atom:c2 @atom:c2 @atom:n2
@angle:c2-c2-n3 @atom:c2 @atom:c2 @atom:n3
@angle:c2-c2-n4 @atom:c2 @atom:c2 @atom:n4
@angle:c2-c2-n @atom:c2 @atom:c2 @atom:n
@angle:c2-c2-na @atom:c2 @atom:c2 @atom:na
@angle:c2-c2-nh @atom:c2 @atom:c2 @atom:nh
@angle:c2-c2-no @atom:c2 @atom:c2 @atom:no
@angle:c2-c2-o @atom:c2 @atom:c2 @atom:o
@angle:c2-c2-oh @atom:c2 @atom:c2 @atom:oh
@angle:c2-c2-os @atom:c2 @atom:c2 @atom:os
@angle:c2-c2-p2 @atom:c2 @atom:c2 @atom:p2
@angle:c2-c2-p3 @atom:c2 @atom:c2 @atom:p3
@angle:c2-c2-p4 @atom:c2 @atom:c2 @atom:p4
@angle:c2-c2-p5 @atom:c2 @atom:c2 @atom:p5
@angle:c2-c2-s4 @atom:c2 @atom:c2 @atom:s4
@angle:c2-c2-s6 @atom:c2 @atom:c2 @atom:s6
@angle:c2-c2-s @atom:c2 @atom:c2 @atom:s
@angle:c2-c2-sh @atom:c2 @atom:c2 @atom:sh
@angle:c2-c2-ss @atom:c2 @atom:c2 @atom:ss
@angle:c3-c2-c3 @atom:c3 @atom:c2 @atom:c3
@angle:c3-c2-cc @atom:c3 @atom:c2 @atom:cc
@angle:c3-c2-cd @atom:c3 @atom:c2 @atom:cd
@angle:c3-c2-ce @atom:c3 @atom:c2 @atom:ce
@angle:c3-c2-cf @atom:c3 @atom:c2 @atom:cf
@angle:c3-c2-h4 @atom:c3 @atom:c2 @atom:h4
@angle:c3-c2-ha @atom:c3 @atom:c2 @atom:ha
@angle:c3-c2-hc @atom:c3 @atom:c2 @atom:hc
@angle:c3-c2-n2 @atom:c3 @atom:c2 @atom:n2
@angle:c3-c2-n @atom:c3 @atom:c2 @atom:n
@angle:c3-c2-na @atom:c3 @atom:c2 @atom:na
@angle:c3-c2-ne @atom:c3 @atom:c2 @atom:ne
@angle:c3-c2-nf @atom:c3 @atom:c2 @atom:nf
@angle:c3-c2-nh @atom:c3 @atom:c2 @atom:nh
@angle:c3-c2-o @atom:c3 @atom:c2 @atom:o
@angle:c3-c2-oh @atom:c3 @atom:c2 @atom:oh
@angle:c3-c2-os @atom:c3 @atom:c2 @atom:os
@angle:c3-c2-p2 @atom:c3 @atom:c2 @atom:p2
@angle:c3-c2-s @atom:c3 @atom:c2 @atom:s
@angle:c3-c2-ss @atom:c3 @atom:c2 @atom:ss
@angle:ca-c2-ca @atom:ca @atom:c2 @atom:ca
@angle:ca-c2-hc @atom:ca @atom:c2 @atom:hc
@angle:c-c2-c2 @atom:c @atom:c2 @atom:c2
@angle:c-c2-c3 @atom:c @atom:c2 @atom:c3
@angle:c-c2-c @atom:c @atom:c2 @atom:c
@angle:cc-c2-h4 @atom:cc @atom:c2 @atom:h4
@angle:cc-c2-ha @atom:cc @atom:c2 @atom:ha
@angle:cc-c2-nh @atom:cc @atom:c2 @atom:nh
@angle:cc-c2-o @atom:cc @atom:c2 @atom:o
@angle:cd-c2-ha @atom:cd @atom:c2 @atom:ha
@angle:ce-c2-cl @atom:ce @atom:c2 @atom:cl
@angle:ce-c2-h4 @atom:ce @atom:c2 @atom:h4
@angle:ce-c2-ha @atom:ce @atom:c2 @atom:ha
@angle:ce-c2-na @atom:ce @atom:c2 @atom:na
@angle:ce-c2-nh @atom:ce @atom:c2 @atom:nh
@angle:ce-c2-no @atom:ce @atom:c2 @atom:no
@angle:ce-c2-o @atom:ce @atom:c2 @atom:o
@angle:ce-c2-oh @atom:ce @atom:c2 @atom:oh
@angle:ce-c2-os @atom:ce @atom:c2 @atom:os
@angle:cf-c2-ha @atom:cf @atom:c2 @atom:ha
@angle:c-c2-ha @atom:c @atom:c2 @atom:ha
@angle:c-c2-hc @atom:c @atom:c2 @atom:hc
@angle:cl-c2-cl @atom:cl @atom:c2 @atom:cl
@angle:cl-c2-h4 @atom:cl @atom:c2 @atom:h4
@angle:cl-c2-ha @atom:cl @atom:c2 @atom:ha
@angle:cx-c2-ha @atom:cx @atom:c2 @atom:ha
@angle:f-c2-f @atom:f @atom:c2 @atom:f
@angle:f-c2-ha @atom:f @atom:c2 @atom:ha
@angle:h4-c2-n2 @atom:h4 @atom:c2 @atom:n2
@angle:h4-c2-n @atom:h4 @atom:c2 @atom:n
@angle:h4-c2-na @atom:h4 @atom:c2 @atom:na
@angle:h4-c2-ne @atom:h4 @atom:c2 @atom:ne
@angle:h4-c2-nh @atom:h4 @atom:c2 @atom:nh
@angle:h4-c2-no @atom:h4 @atom:c2 @atom:no
@angle:h4-c2-os @atom:h4 @atom:c2 @atom:os
@angle:h4-c2-ss @atom:h4 @atom:c2 @atom:ss
@angle:h5-c2-n2 @atom:h5 @atom:c2 @atom:n2
@angle:h5-c2-na @atom:h5 @atom:c2 @atom:na
@angle:h5-c2-ne @atom:h5 @atom:c2 @atom:ne
@angle:h5-c2-nh @atom:h5 @atom:c2 @atom:nh
@angle:ha-c2-ha @atom:ha @atom:c2 @atom:ha
@angle:ha-c2-n1 @atom:ha @atom:c2 @atom:n1
@angle:ha-c2-n2 @atom:ha @atom:c2 @atom:n2
@angle:ha-c2-n3 @atom:ha @atom:c2 @atom:n3
@angle:ha-c2-n @atom:ha @atom:c2 @atom:n
@angle:ha-c2-na @atom:ha @atom:c2 @atom:na
@angle:ha-c2-ne @atom:ha @atom:c2 @atom:ne
@angle:ha-c2-nf @atom:ha @atom:c2 @atom:nf
@angle:ha-c2-nh @atom:ha @atom:c2 @atom:nh
@angle:ha-c2-no @atom:ha @atom:c2 @atom:no
@angle:ha-c2-o @atom:ha @atom:c2 @atom:o
@angle:ha-c2-oh @atom:ha @atom:c2 @atom:oh
@angle:ha-c2-os @atom:ha @atom:c2 @atom:os
@angle:ha-c2-p2 @atom:ha @atom:c2 @atom:p2
@angle:ha-c2-p3 @atom:ha @atom:c2 @atom:p3
@angle:ha-c2-p4 @atom:ha @atom:c2 @atom:p4
@angle:ha-c2-p5 @atom:ha @atom:c2 @atom:p5
@angle:ha-c2-pe @atom:ha @atom:c2 @atom:pe
@angle:ha-c2-pf @atom:ha @atom:c2 @atom:pf
@angle:ha-c2-s2 @atom:ha @atom:c2 @atom:s2
@angle:ha-c2-s4 @atom:ha @atom:c2 @atom:s4
@angle:ha-c2-s @atom:ha @atom:c2 @atom:s
@angle:ha-c2-s6 @atom:ha @atom:c2 @atom:s6
@angle:ha-c2-sh @atom:ha @atom:c2 @atom:sh
@angle:ha-c2-ss @atom:ha @atom:c2 @atom:ss
@angle:hc-c2-hc @atom:hc @atom:c2 @atom:hc
@angle:hc-c2-n2 @atom:hc @atom:c2 @atom:n2
@angle:hc-c2-n @atom:hc @atom:c2 @atom:n
@angle:hc-c2-na @atom:hc @atom:c2 @atom:na
@angle:hc-c2-nh @atom:hc @atom:c2 @atom:nh
@angle:hc-c2-no @atom:hc @atom:c2 @atom:no
@angle:hc-c2-oh @atom:hc @atom:c2 @atom:oh
@angle:hc-c2-os @atom:hc @atom:c2 @atom:os
@angle:hc-c2-p3 @atom:hc @atom:c2 @atom:p3
@angle:hc-c2-p5 @atom:hc @atom:c2 @atom:p5
@angle:hc-c2-s4 @atom:hc @atom:c2 @atom:s4
@angle:hc-c2-s6 @atom:hc @atom:c2 @atom:s6
@angle:hc-c2-sh @atom:hc @atom:c2 @atom:sh
@angle:hc-c2-ss @atom:hc @atom:c2 @atom:ss
@angle:hx-c2-n4 @atom:hx @atom:c2 @atom:n4
@angle:i-c2-i @atom:i @atom:c2 @atom:i
@angle:n1-c2-n1 @atom:n1 @atom:c2 @atom:n1
@angle:n2-c2-n2 @atom:n2 @atom:c2 @atom:n2
@angle:n2-c2-n4 @atom:n2 @atom:c2 @atom:n4
@angle:n2-c2-na @atom:n2 @atom:c2 @atom:na
@angle:n2-c2-nh @atom:n2 @atom:c2 @atom:nh
@angle:n2-c2-oh @atom:n2 @atom:c2 @atom:oh
@angle:n2-c2-os @atom:n2 @atom:c2 @atom:os
@angle:n2-c2-ss @atom:n2 @atom:c2 @atom:ss
@angle:n3-c2-n3 @atom:n3 @atom:c2 @atom:n3
@angle:n4-c2-n4 @atom:n4 @atom:c2 @atom:n4
@angle:n4-c2-ss @atom:n4 @atom:c2 @atom:ss
@angle:na-c2-na @atom:na @atom:c2 @atom:na
@angle:ne-c2-nh @atom:ne @atom:c2 @atom:nh
@angle:ne-c2-os @atom:ne @atom:c2 @atom:os
@angle:ne-c2-ss @atom:ne @atom:c2 @atom:ss
@angle:nf-c2-nh @atom:nf @atom:c2 @atom:nh
@angle:nh-c2-nh @atom:nh @atom:c2 @atom:nh
@angle:nh-c2-oh @atom:nh @atom:c2 @atom:oh
@angle:nh-c2-os @atom:nh @atom:c2 @atom:os
@angle:nh-c2-ss @atom:nh @atom:c2 @atom:ss
@angle:n-c2-n2 @atom:n @atom:c2 @atom:n2
@angle:n-c2-n @atom:n @atom:c2 @atom:n
@angle:n-c2-na @atom:n @atom:c2 @atom:na
@angle:n-c2-ne @atom:n @atom:c2 @atom:ne
@angle:n-c2-nh @atom:n @atom:c2 @atom:nh
@angle:no-c2-no @atom:no @atom:c2 @atom:no
@angle:n-c2-ss @atom:n @atom:c2 @atom:ss
@angle:oh-c2-oh @atom:oh @atom:c2 @atom:oh
@angle:o-c2-o @atom:o @atom:c2 @atom:o
@angle:o-c2-oh @atom:o @atom:c2 @atom:oh
@angle:o-c2-s @atom:o @atom:c2 @atom:s
@angle:os-c2-os @atom:os @atom:c2 @atom:os
@angle:p2-c2-p2 @atom:p2 @atom:c2 @atom:p2
@angle:p3-c2-p3 @atom:p3 @atom:c2 @atom:p3
@angle:p5-c2-p5 @atom:p5 @atom:c2 @atom:p5
@angle:s4-c2-s4 @atom:s4 @atom:c2 @atom:s4
@angle:s4-c2-s6 @atom:s4 @atom:c2 @atom:s6
@angle:s6-c2-s6 @atom:s6 @atom:c2 @atom:s6
@angle:sh-c2-sh @atom:sh @atom:c2 @atom:sh
@angle:sh-c2-ss @atom:sh @atom:c2 @atom:ss
@angle:s-c2-s @atom:s @atom:c2 @atom:s
@angle:ss-c2-ss @atom:ss @atom:c2 @atom:ss
@angle:br-c3-br @atom:br @atom:c3 @atom:br
@angle:br-c3-c1 @atom:br @atom:c3 @atom:c1
@angle:br-c3-c3 @atom:br @atom:c3 @atom:c3
@angle:br-c3-c @atom:br @atom:c3 @atom:c
@angle:br-c3-h1 @atom:br @atom:c3 @atom:h1
@angle:br-c3-h2 @atom:br @atom:c3 @atom:h2
@angle:br-c3-hc @atom:br @atom:c3 @atom:hc
@angle:c1-c3-c1 @atom:c1 @atom:c3 @atom:c1
@angle:c1-c3-c2 @atom:c1 @atom:c3 @atom:c2
@angle:c1-c3-c3 @atom:c1 @atom:c3 @atom:c3
@angle:c1-c3-ca @atom:c1 @atom:c3 @atom:ca
@angle:c1-c3-cc @atom:c1 @atom:c3 @atom:cc
@angle:c1-c3-cd @atom:c1 @atom:c3 @atom:cd
@angle:c1-c3-cl @atom:c1 @atom:c3 @atom:cl
@angle:c1-c3-h1 @atom:c1 @atom:c3 @atom:h1
@angle:c1-c3-hc @atom:c1 @atom:c3 @atom:hc
@angle:c1-c3-hx @atom:c1 @atom:c3 @atom:hx
@angle:c1-c3-n3 @atom:c1 @atom:c3 @atom:n3
@angle:c1-c3-n4 @atom:c1 @atom:c3 @atom:n4
@angle:c1-c3-n @atom:c1 @atom:c3 @atom:n
@angle:c1-c3-nh @atom:c1 @atom:c3 @atom:nh
@angle:c1-c3-oh @atom:c1 @atom:c3 @atom:oh
@angle:c1-c3-os @atom:c1 @atom:c3 @atom:os
@angle:c2-c3-c2 @atom:c2 @atom:c3 @atom:c2
@angle:c2-c3-c3 @atom:c2 @atom:c3 @atom:c3
@angle:c2-c3-ca @atom:c2 @atom:c3 @atom:ca
@angle:c2-c3-cc @atom:c2 @atom:c3 @atom:cc
@angle:c2-c3-cd @atom:c2 @atom:c3 @atom:cd
@angle:c2-c3-ce @atom:c2 @atom:c3 @atom:ce
@angle:c2-c3-cf @atom:c2 @atom:c3 @atom:cf
@angle:c2-c3-cl @atom:c2 @atom:c3 @atom:cl
@angle:c2-c3-cx @atom:c2 @atom:c3 @atom:cx
@angle:c2-c3-cy @atom:c2 @atom:c3 @atom:cy
@angle:c2-c3-f @atom:c2 @atom:c3 @atom:f
@angle:c2-c3-h1 @atom:c2 @atom:c3 @atom:h1
@angle:c2-c3-h2 @atom:c2 @atom:c3 @atom:h2
@angle:c2-c3-hc @atom:c2 @atom:c3 @atom:hc
@angle:c2-c3-hx @atom:c2 @atom:c3 @atom:hx
@angle:c2-c3-n2 @atom:c2 @atom:c3 @atom:n2
@angle:c2-c3-n3 @atom:c2 @atom:c3 @atom:n3
@angle:c2-c3-n @atom:c2 @atom:c3 @atom:n
@angle:c2-c3-na @atom:c2 @atom:c3 @atom:na
@angle:c2-c3-nh @atom:c2 @atom:c3 @atom:nh
@angle:c2-c3-oh @atom:c2 @atom:c3 @atom:oh
@angle:c2-c3-os @atom:c2 @atom:c3 @atom:os
@angle:c2-c3-s4 @atom:c2 @atom:c3 @atom:s4
@angle:c2-c3-ss @atom:c2 @atom:c3 @atom:ss
@angle:c3-c3-c3 @atom:c3 @atom:c3 @atom:c3
@angle:c3-c3-ca @atom:c3 @atom:c3 @atom:ca
@angle:c3-c3-cc @atom:c3 @atom:c3 @atom:cc
@angle:c3-c3-cd @atom:c3 @atom:c3 @atom:cd
@angle:c3-c3-ce @atom:c3 @atom:c3 @atom:ce
@angle:c3-c3-cf @atom:c3 @atom:c3 @atom:cf
@angle:c3-c3-cl @atom:c3 @atom:c3 @atom:cl
@angle:c3-c3-cx @atom:c3 @atom:c3 @atom:cx
@angle:c3-c3-cy @atom:c3 @atom:c3 @atom:cy
@angle:c3-c3-f @atom:c3 @atom:c3 @atom:f
@angle:c3-c3-h1 @atom:c3 @atom:c3 @atom:h1
@angle:c3-c3-h2 @atom:c3 @atom:c3 @atom:h2
@angle:c3-c3-hc @atom:c3 @atom:c3 @atom:hc
@angle:c3-c3-hx @atom:c3 @atom:c3 @atom:hx
@angle:c3-c3-i @atom:c3 @atom:c3 @atom:i
@angle:c3-c3-n1 @atom:c3 @atom:c3 @atom:n1
@angle:c3-c3-n2 @atom:c3 @atom:c3 @atom:n2
@angle:c3-c3-n3 @atom:c3 @atom:c3 @atom:n3
@angle:c3-c3-n4 @atom:c3 @atom:c3 @atom:n4
@angle:c3-c3-n @atom:c3 @atom:c3 @atom:n
@angle:c3-c3-na @atom:c3 @atom:c3 @atom:na
@angle:c3-c3-nh @atom:c3 @atom:c3 @atom:nh
@angle:c3-c3-no @atom:c3 @atom:c3 @atom:no
@angle:c3-c3-o @atom:c3 @atom:c3 @atom:o
@angle:c3-c3-oh @atom:c3 @atom:c3 @atom:oh
@angle:c3-c3-os @atom:c3 @atom:c3 @atom:os
@angle:c3-c3-p3 @atom:c3 @atom:c3 @atom:p3
@angle:c3-c3-p5 @atom:c3 @atom:c3 @atom:p5
@angle:c3-c3-s4 @atom:c3 @atom:c3 @atom:s4
@angle:c3-c3-s6 @atom:c3 @atom:c3 @atom:s6
@angle:c3-c3-sh @atom:c3 @atom:c3 @atom:sh
@angle:c3-c3-ss @atom:c3 @atom:c3 @atom:ss
@angle:c3-c3-sy @atom:c3 @atom:c3 @atom:sy
@angle:ca-c3-ca @atom:ca @atom:c3 @atom:ca
@angle:ca-c3-cc @atom:ca @atom:c3 @atom:cc
@angle:ca-c3-cd @atom:ca @atom:c3 @atom:cd
@angle:ca-c3-ce @atom:ca @atom:c3 @atom:ce
@angle:ca-c3-cl @atom:ca @atom:c3 @atom:cl
@angle:ca-c3-cx @atom:ca @atom:c3 @atom:cx
@angle:ca-c3-f @atom:ca @atom:c3 @atom:f
@angle:ca-c3-h1 @atom:ca @atom:c3 @atom:h1
@angle:ca-c3-h2 @atom:ca @atom:c3 @atom:h2
@angle:ca-c3-hc @atom:ca @atom:c3 @atom:hc
@angle:ca-c3-hx @atom:ca @atom:c3 @atom:hx
@angle:ca-c3-n2 @atom:ca @atom:c3 @atom:n2
@angle:ca-c3-n3 @atom:ca @atom:c3 @atom:n3
@angle:ca-c3-n4 @atom:ca @atom:c3 @atom:n4
@angle:ca-c3-n @atom:ca @atom:c3 @atom:n
@angle:ca-c3-na @atom:ca @atom:c3 @atom:na
@angle:ca-c3-nc @atom:ca @atom:c3 @atom:nc
@angle:ca-c3-nd @atom:ca @atom:c3 @atom:nd
@angle:ca-c3-nh @atom:ca @atom:c3 @atom:nh
@angle:ca-c3-oh @atom:ca @atom:c3 @atom:oh
@angle:ca-c3-os @atom:ca @atom:c3 @atom:os
@angle:ca-c3-p5 @atom:ca @atom:c3 @atom:p5
@angle:ca-c3-s6 @atom:ca @atom:c3 @atom:s6
@angle:ca-c3-ss @atom:ca @atom:c3 @atom:ss
@angle:ca-c3-sx @atom:ca @atom:c3 @atom:sx
@angle:c-c3-c1 @atom:c @atom:c3 @atom:c1
@angle:c-c3-c2 @atom:c @atom:c3 @atom:c2
@angle:c-c3-c3 @atom:c @atom:c3 @atom:c3
@angle:c-c3-c @atom:c @atom:c3 @atom:c
@angle:c-c3-ca @atom:c @atom:c3 @atom:ca
@angle:c-c3-cc @atom:c @atom:c3 @atom:cc
@angle:cc-c3-cc @atom:cc @atom:c3 @atom:cc
@angle:cc-c3-cd @atom:cc @atom:c3 @atom:cd
@angle:cc-c3-cx @atom:cc @atom:c3 @atom:cx
@angle:c-c3-cd @atom:c @atom:c3 @atom:cd
@angle:c-c3-ce @atom:c @atom:c3 @atom:ce
@angle:cc-c3-f @atom:cc @atom:c3 @atom:f
@angle:cc-c3-h1 @atom:cc @atom:c3 @atom:h1
@angle:cc-c3-hc @atom:cc @atom:c3 @atom:hc
@angle:cc-c3-hx @atom:cc @atom:c3 @atom:hx
@angle:c-c3-cl @atom:c @atom:c3 @atom:cl
@angle:cc-c3-n2 @atom:cc @atom:c3 @atom:n2
@angle:cc-c3-n3 @atom:cc @atom:c3 @atom:n3
@angle:cc-c3-n4 @atom:cc @atom:c3 @atom:n4
@angle:cc-c3-n @atom:cc @atom:c3 @atom:n
@angle:cc-c3-na @atom:cc @atom:c3 @atom:na
@angle:cc-c3-nc @atom:cc @atom:c3 @atom:nc
@angle:cc-c3-nh @atom:cc @atom:c3 @atom:nh
@angle:cc-c3-oh @atom:cc @atom:c3 @atom:oh
@angle:cc-c3-os @atom:cc @atom:c3 @atom:os
@angle:cc-c3-p5 @atom:cc @atom:c3 @atom:p5
@angle:cc-c3-sh @atom:cc @atom:c3 @atom:sh
@angle:cc-c3-ss @atom:cc @atom:c3 @atom:ss
@angle:c-c3-cx @atom:c @atom:c3 @atom:cx
@angle:cd-c3-cd @atom:cd @atom:c3 @atom:cd
@angle:cd-c3-f @atom:cd @atom:c3 @atom:f
@angle:cd-c3-h1 @atom:cd @atom:c3 @atom:h1
@angle:cd-c3-hc @atom:cd @atom:c3 @atom:hc
@angle:cd-c3-n3 @atom:cd @atom:c3 @atom:n3
@angle:cd-c3-n @atom:cd @atom:c3 @atom:n
@angle:cd-c3-nd @atom:cd @atom:c3 @atom:nd
@angle:cd-c3-nh @atom:cd @atom:c3 @atom:nh
@angle:cd-c3-oh @atom:cd @atom:c3 @atom:oh
@angle:cd-c3-os @atom:cd @atom:c3 @atom:os
@angle:cd-c3-sh @atom:cd @atom:c3 @atom:sh
@angle:cd-c3-ss @atom:cd @atom:c3 @atom:ss
@angle:ce-c3-ce @atom:ce @atom:c3 @atom:ce
@angle:ce-c3-cy @atom:ce @atom:c3 @atom:cy
@angle:ce-c3-h1 @atom:ce @atom:c3 @atom:h1
@angle:ce-c3-hc @atom:ce @atom:c3 @atom:hc
@angle:ce-c3-n3 @atom:ce @atom:c3 @atom:n3
@angle:ce-c3-n @atom:ce @atom:c3 @atom:n
@angle:ce-c3-oh @atom:ce @atom:c3 @atom:oh
@angle:ce-c3-os @atom:ce @atom:c3 @atom:os
@angle:ce-c3-ss @atom:ce @atom:c3 @atom:ss
@angle:c-c3-f @atom:c @atom:c3 @atom:f
@angle:cf-c3-cy @atom:cf @atom:c3 @atom:cy
@angle:cf-c3-h1 @atom:cf @atom:c3 @atom:h1
@angle:cf-c3-hc @atom:cf @atom:c3 @atom:hc
@angle:cf-c3-n3 @atom:cf @atom:c3 @atom:n3
@angle:c-c3-h1 @atom:c @atom:c3 @atom:h1
@angle:c-c3-h2 @atom:c @atom:c3 @atom:h2
@angle:c-c3-hc @atom:c @atom:c3 @atom:hc
@angle:c-c3-hx @atom:c @atom:c3 @atom:hx
@angle:cl-c3-cl @atom:cl @atom:c3 @atom:cl
@angle:cl-c3-f @atom:cl @atom:c3 @atom:f
@angle:cl-c3-h1 @atom:cl @atom:c3 @atom:h1
@angle:cl-c3-h2 @atom:cl @atom:c3 @atom:h2
@angle:cl-c3-hc @atom:cl @atom:c3 @atom:hc
@angle:cl-c3-os @atom:cl @atom:c3 @atom:os
@angle:cl-c3-ss @atom:cl @atom:c3 @atom:ss
@angle:c-c3-n2 @atom:c @atom:c3 @atom:n2
@angle:c-c3-n3 @atom:c @atom:c3 @atom:n3
@angle:c-c3-n4 @atom:c @atom:c3 @atom:n4
@angle:c-c3-n @atom:c @atom:c3 @atom:n
@angle:c-c3-na @atom:c @atom:c3 @atom:na
@angle:c-c3-nh @atom:c @atom:c3 @atom:nh
@angle:c-c3-oh @atom:c @atom:c3 @atom:oh
@angle:c-c3-os @atom:c @atom:c3 @atom:os
@angle:c-c3-p5 @atom:c @atom:c3 @atom:p5
@angle:c-c3-s6 @atom:c @atom:c3 @atom:s6
@angle:c-c3-sh @atom:c @atom:c3 @atom:sh
@angle:c-c3-ss @atom:c @atom:c3 @atom:ss
@angle:cx-c3-cx @atom:cx @atom:c3 @atom:cx
@angle:cx-c3-h1 @atom:cx @atom:c3 @atom:h1
@angle:cx-c3-hc @atom:cx @atom:c3 @atom:hc
@angle:cx-c3-hx @atom:cx @atom:c3 @atom:hx
@angle:cx-c3-n3 @atom:cx @atom:c3 @atom:n3
@angle:cx-c3-n4 @atom:cx @atom:c3 @atom:n4
@angle:cx-c3-n @atom:cx @atom:c3 @atom:n
@angle:cx-c3-oh @atom:cx @atom:c3 @atom:oh
@angle:cx-c3-os @atom:cx @atom:c3 @atom:os
@angle:cy-c3-h1 @atom:cy @atom:c3 @atom:h1
@angle:cy-c3-hc @atom:cy @atom:c3 @atom:hc
@angle:cy-c3-n3 @atom:cy @atom:c3 @atom:n3
@angle:cy-c3-oh @atom:cy @atom:c3 @atom:oh
@angle:cy-c3-os @atom:cy @atom:c3 @atom:os
@angle:f-c3-f @atom:f @atom:c3 @atom:f
@angle:f-c3-h1 @atom:f @atom:c3 @atom:h1
@angle:f-c3-h2 @atom:f @atom:c3 @atom:h2
@angle:f-c3-h3 @atom:f @atom:c3 @atom:h3
@angle:f-c3-hc @atom:f @atom:c3 @atom:hc
@angle:f-c3-n2 @atom:f @atom:c3 @atom:n2
@angle:f-c3-os @atom:f @atom:c3 @atom:os
@angle:f-c3-p5 @atom:f @atom:c3 @atom:p5
@angle:f-c3-s6 @atom:f @atom:c3 @atom:s6
@angle:f-c3-ss @atom:f @atom:c3 @atom:ss
@angle:h1-c3-h1 @atom:h1 @atom:c3 @atom:h1
@angle:h1-c3-n1 @atom:h1 @atom:c3 @atom:n1
@angle:h1-c3-n2 @atom:h1 @atom:c3 @atom:n2
@angle:h1-c3-n3 @atom:h1 @atom:c3 @atom:n3
@angle:h1-c3-n @atom:h1 @atom:c3 @atom:n
@angle:h1-c3-na @atom:h1 @atom:c3 @atom:na
@angle:h1-c3-nc @atom:h1 @atom:c3 @atom:nc
@angle:h1-c3-nd @atom:h1 @atom:c3 @atom:nd
@angle:h1-c3-nh @atom:h1 @atom:c3 @atom:nh
@angle:h1-c3-no @atom:h1 @atom:c3 @atom:no
@angle:h1-c3-o @atom:h1 @atom:c3 @atom:o
@angle:h1-c3-oh @atom:h1 @atom:c3 @atom:oh
@angle:h1-c3-os @atom:h1 @atom:c3 @atom:os
@angle:h1-c3-p5 @atom:h1 @atom:c3 @atom:p5
@angle:h1-c3-s4 @atom:h1 @atom:c3 @atom:s4
@angle:h1-c3-s @atom:h1 @atom:c3 @atom:s
@angle:h1-c3-s6 @atom:h1 @atom:c3 @atom:s6
@angle:h1-c3-sh @atom:h1 @atom:c3 @atom:sh
@angle:h1-c3-ss @atom:h1 @atom:c3 @atom:ss
@angle:h1-c3-sx @atom:h1 @atom:c3 @atom:sx
@angle:h1-c3-sy @atom:h1 @atom:c3 @atom:sy
@angle:h2-c3-h2 @atom:h2 @atom:c3 @atom:h2
@angle:h2-c3-i @atom:h2 @atom:c3 @atom:i
@angle:h2-c3-n2 @atom:h2 @atom:c3 @atom:n2
@angle:h2-c3-n3 @atom:h2 @atom:c3 @atom:n3
@angle:h2-c3-n @atom:h2 @atom:c3 @atom:n
@angle:h2-c3-na @atom:h2 @atom:c3 @atom:na
@angle:h2-c3-nc @atom:h2 @atom:c3 @atom:nc
@angle:h2-c3-nd @atom:h2 @atom:c3 @atom:nd
@angle:h2-c3-nh @atom:h2 @atom:c3 @atom:nh
@angle:h2-c3-no @atom:h2 @atom:c3 @atom:no
@angle:h2-c3-o @atom:h2 @atom:c3 @atom:o
@angle:h2-c3-oh @atom:h2 @atom:c3 @atom:oh
@angle:h2-c3-os @atom:h2 @atom:c3 @atom:os
@angle:h2-c3-s4 @atom:h2 @atom:c3 @atom:s4
@angle:h2-c3-s @atom:h2 @atom:c3 @atom:s
@angle:h2-c3-s6 @atom:h2 @atom:c3 @atom:s6
@angle:h2-c3-sh @atom:h2 @atom:c3 @atom:sh
@angle:h2-c3-ss @atom:h2 @atom:c3 @atom:ss
@angle:h3-c3-n3 @atom:h3 @atom:c3 @atom:n3
@angle:h3-c3-nc @atom:h3 @atom:c3 @atom:nc
@angle:h3-c3-nd @atom:h3 @atom:c3 @atom:nd
@angle:h3-c3-nh @atom:h3 @atom:c3 @atom:nh
@angle:h3-c3-os @atom:h3 @atom:c3 @atom:os
@angle:h3-c3-ss @atom:h3 @atom:c3 @atom:ss
@angle:hc-c3-hc @atom:hc @atom:c3 @atom:hc
@angle:hc-c3-i @atom:hc @atom:c3 @atom:i
@angle:hc-c3-n2 @atom:hc @atom:c3 @atom:n2
@angle:hc-c3-n3 @atom:hc @atom:c3 @atom:n3
@angle:hc-c3-n4 @atom:hc @atom:c3 @atom:n4
@angle:hc-c3-n @atom:hc @atom:c3 @atom:n
@angle:hc-c3-na @atom:hc @atom:c3 @atom:na
@angle:hc-c3-nh @atom:hc @atom:c3 @atom:nh
@angle:hc-c3-no @atom:hc @atom:c3 @atom:no
@angle:hc-c3-oh @atom:hc @atom:c3 @atom:oh
@angle:hc-c3-os @atom:hc @atom:c3 @atom:os
@angle:hc-c3-p2 @atom:hc @atom:c3 @atom:p2
@angle:hc-c3-p3 @atom:hc @atom:c3 @atom:p3
@angle:hc-c3-p4 @atom:hc @atom:c3 @atom:p4
@angle:hc-c3-p5 @atom:hc @atom:c3 @atom:p5
@angle:hc-c3-px @atom:hc @atom:c3 @atom:px
@angle:hc-c3-py @atom:hc @atom:c3 @atom:py
@angle:hc-c3-s4 @atom:hc @atom:c3 @atom:s4
@angle:hc-c3-s6 @atom:hc @atom:c3 @atom:s6
@angle:hc-c3-sh @atom:hc @atom:c3 @atom:sh
@angle:hc-c3-ss @atom:hc @atom:c3 @atom:ss
@angle:hx-c3-hx @atom:hx @atom:c3 @atom:hx
@angle:hx-c3-n4 @atom:hx @atom:c3 @atom:n4
@angle:i-c3-i @atom:i @atom:c3 @atom:i
@angle:n1-c3-n1 @atom:n1 @atom:c3 @atom:n1
@angle:n2-c3-n2 @atom:n2 @atom:c3 @atom:n2
@angle:n2-c3-nh @atom:n2 @atom:c3 @atom:nh
@angle:n2-c3-oh @atom:n2 @atom:c3 @atom:oh
@angle:n2-c3-os @atom:n2 @atom:c3 @atom:os
@angle:n3-c3-n3 @atom:n3 @atom:c3 @atom:n3
@angle:n3-c3-nc @atom:n3 @atom:c3 @atom:nc
@angle:n3-c3-nd @atom:n3 @atom:c3 @atom:nd
@angle:n3-c3-nh @atom:n3 @atom:c3 @atom:nh
@angle:n3-c3-oh @atom:n3 @atom:c3 @atom:oh
@angle:n3-c3-os @atom:n3 @atom:c3 @atom:os
@angle:n3-c3-p5 @atom:n3 @atom:c3 @atom:p5
@angle:n3-c3-ss @atom:n3 @atom:c3 @atom:ss
@angle:n4-c3-n4 @atom:n4 @atom:c3 @atom:n4
@angle:na-c3-na @atom:na @atom:c3 @atom:na
@angle:na-c3-os @atom:na @atom:c3 @atom:os
@angle:nc-c3-nc @atom:nc @atom:c3 @atom:nc
@angle:nc-c3-nh @atom:nc @atom:c3 @atom:nh
@angle:nc-c3-os @atom:nc @atom:c3 @atom:os
@angle:nd-c3-nd @atom:nd @atom:c3 @atom:nd
@angle:nd-c3-nh @atom:nd @atom:c3 @atom:nh
@angle:nd-c3-os @atom:nd @atom:c3 @atom:os
@angle:nh-c3-nh @atom:nh @atom:c3 @atom:nh
@angle:nh-c3-oh @atom:nh @atom:c3 @atom:oh
@angle:nh-c3-os @atom:nh @atom:c3 @atom:os
@angle:nh-c3-p5 @atom:nh @atom:c3 @atom:p5
@angle:nh-c3-ss @atom:nh @atom:c3 @atom:ss
@angle:n-c3-n2 @atom:n @atom:c3 @atom:n2
@angle:n-c3-n3 @atom:n @atom:c3 @atom:n3
@angle:n-c3-n @atom:n @atom:c3 @atom:n
@angle:n-c3-nh @atom:n @atom:c3 @atom:nh
@angle:n-c3-oh @atom:n @atom:c3 @atom:oh
@angle:no-c3-no @atom:no @atom:c3 @atom:no
@angle:n-c3-os @atom:n @atom:c3 @atom:os
@angle:n-c3-p5 @atom:n @atom:c3 @atom:p5
@angle:oh-c3-oh @atom:oh @atom:c3 @atom:oh
@angle:oh-c3-os @atom:oh @atom:c3 @atom:os
@angle:oh-c3-p5 @atom:oh @atom:c3 @atom:p5
@angle:oh-c3-sh @atom:oh @atom:c3 @atom:sh
@angle:o-c3-o @atom:o @atom:c3 @atom:o
@angle:os-c3-os @atom:os @atom:c3 @atom:os
@angle:os-c3-p5 @atom:os @atom:c3 @atom:p5
@angle:os-c3-ss @atom:os @atom:c3 @atom:ss
@angle:p2-c3-p2 @atom:p2 @atom:c3 @atom:p2
@angle:p3-c3-p3 @atom:p3 @atom:c3 @atom:p3
@angle:p5-c3-p5 @atom:p5 @atom:c3 @atom:p5
@angle:p5-c3-ss @atom:p5 @atom:c3 @atom:ss
@angle:s4-c3-s4 @atom:s4 @atom:c3 @atom:s4
@angle:s4-c3-s6 @atom:s4 @atom:c3 @atom:s6
@angle:s6-c3-s6 @atom:s6 @atom:c3 @atom:s6
@angle:sh-c3-sh @atom:sh @atom:c3 @atom:sh
@angle:sh-c3-ss @atom:sh @atom:c3 @atom:ss
@angle:s-c3-s @atom:s @atom:c3 @atom:s
@angle:ss-c3-ss @atom:ss @atom:c3 @atom:ss
@angle:br-ca-br @atom:br @atom:ca @atom:br
@angle:br-ca-ca @atom:br @atom:ca @atom:ca
@angle:c1-ca-c1 @atom:c1 @atom:ca @atom:c1
@angle:c1-ca-ca @atom:c1 @atom:ca @atom:ca
@angle:c2-ca-c2 @atom:c2 @atom:ca @atom:c2
@angle:c2-ca-ca @atom:c2 @atom:ca @atom:ca
@angle:c3-ca-c2 @atom:c3 @atom:ca @atom:c2
@angle:c3-ca-c3 @atom:c3 @atom:ca @atom:c3
@angle:c3-ca-ca @atom:c3 @atom:ca @atom:ca
@angle:c3-ca-cp @atom:c3 @atom:ca @atom:cp
@angle:c3-ca-cq @atom:c3 @atom:ca @atom:cq
@angle:c3-ca-na @atom:c3 @atom:ca @atom:na
@angle:c3-ca-nb @atom:c3 @atom:ca @atom:nb
@angle:ca-ca-ca @atom:ca @atom:ca @atom:ca
@angle:ca-ca-cc @atom:ca @atom:ca @atom:cc
@angle:ca-ca-cd @atom:ca @atom:ca @atom:cd
@angle:ca-ca-ce @atom:ca @atom:ca @atom:ce
@angle:ca-ca-cf @atom:ca @atom:ca @atom:cf
@angle:ca-ca-cg @atom:ca @atom:ca @atom:cg
@angle:ca-ca-ch @atom:ca @atom:ca @atom:ch
@angle:ca-ca-cl @atom:ca @atom:ca @atom:cl
@angle:ca-ca-cp @atom:ca @atom:ca @atom:cp
@angle:ca-ca-cq @atom:ca @atom:ca @atom:cq
@angle:ca-ca-cx @atom:ca @atom:ca @atom:cx
@angle:ca-ca-cy @atom:ca @atom:ca @atom:cy
@angle:ca-ca-f @atom:ca @atom:ca @atom:f
@angle:ca-ca-h4 @atom:ca @atom:ca @atom:h4
@angle:ca-ca-ha @atom:ca @atom:ca @atom:ha
@angle:ca-ca-i @atom:ca @atom:ca @atom:i
@angle:ca-ca-n1 @atom:ca @atom:ca @atom:n1
@angle:ca-ca-n2 @atom:ca @atom:ca @atom:n2
@angle:ca-ca-n4 @atom:ca @atom:ca @atom:n4
@angle:ca-ca-n @atom:ca @atom:ca @atom:n
@angle:ca-ca-na @atom:ca @atom:ca @atom:na
@angle:ca-ca-nb @atom:ca @atom:ca @atom:nb
@angle:ca-ca-nc @atom:ca @atom:ca @atom:nc
@angle:ca-ca-nd @atom:ca @atom:ca @atom:nd
@angle:ca-ca-ne @atom:ca @atom:ca @atom:ne
@angle:ca-ca-nf @atom:ca @atom:ca @atom:nf
@angle:ca-ca-nh @atom:ca @atom:ca @atom:nh
@angle:ca-ca-no @atom:ca @atom:ca @atom:no
@angle:ca-ca-o @atom:ca @atom:ca @atom:o
@angle:ca-ca-oh @atom:ca @atom:ca @atom:oh
@angle:ca-ca-os @atom:ca @atom:ca @atom:os
@angle:ca-ca-p2 @atom:ca @atom:ca @atom:p2
@angle:ca-ca-p3 @atom:ca @atom:ca @atom:p3
@angle:ca-ca-p4 @atom:ca @atom:ca @atom:p4
@angle:ca-ca-p5 @atom:ca @atom:ca @atom:p5
@angle:ca-ca-pe @atom:ca @atom:ca @atom:pe
@angle:ca-ca-pf @atom:ca @atom:ca @atom:pf
@angle:ca-ca-px @atom:ca @atom:ca @atom:px
@angle:ca-ca-py @atom:ca @atom:ca @atom:py
@angle:ca-ca-s4 @atom:ca @atom:ca @atom:s4
@angle:ca-ca-s6 @atom:ca @atom:ca @atom:s6
@angle:ca-ca-s @atom:ca @atom:ca @atom:s
@angle:ca-ca-sh @atom:ca @atom:ca @atom:sh
@angle:ca-ca-ss @atom:ca @atom:ca @atom:ss
@angle:ca-ca-sx @atom:ca @atom:ca @atom:sx
@angle:ca-ca-sy @atom:ca @atom:ca @atom:sy
@angle:c-ca-c3 @atom:c @atom:ca @atom:c3
@angle:c-ca-c @atom:c @atom:ca @atom:c
@angle:c-ca-ca @atom:c @atom:ca @atom:ca
@angle:cc-ca-cp @atom:cc @atom:ca @atom:cp
@angle:cc-ca-nb @atom:cc @atom:ca @atom:nb
@angle:cd-ca-nb @atom:cd @atom:ca @atom:nb
@angle:ce-ca-na @atom:ce @atom:ca @atom:na
@angle:ce-ca-nb @atom:ce @atom:ca @atom:nb
@angle:cf-ca-nb @atom:cf @atom:ca @atom:nb
@angle:cg-ca-cp @atom:cg @atom:ca @atom:cp
@angle:c-ca-ha @atom:c @atom:ca @atom:ha
@angle:cl-ca-cl @atom:cl @atom:ca @atom:cl
@angle:cl-ca-cp @atom:cl @atom:ca @atom:cp
@angle:cl-ca-nb @atom:cl @atom:ca @atom:nb
@angle:c-ca-nb @atom:c @atom:ca @atom:nb
@angle:c-ca-nc @atom:c @atom:ca @atom:nc
@angle:c-ca-nd @atom:c @atom:ca @atom:nd
@angle:cp-ca-f @atom:cp @atom:ca @atom:f
@angle:cp-ca-h4 @atom:cp @atom:ca @atom:h4
@angle:cp-ca-ha @atom:cp @atom:ca @atom:ha
@angle:cp-ca-na @atom:cp @atom:ca @atom:na
@angle:cp-ca-nb @atom:cp @atom:ca @atom:nb
@angle:cp-ca-nh @atom:cp @atom:ca @atom:nh
@angle:cp-ca-oh @atom:cp @atom:ca @atom:oh
@angle:cp-ca-ss @atom:cp @atom:ca @atom:ss
@angle:cp-ca-sy @atom:cp @atom:ca @atom:sy
@angle:cq-ca-ha @atom:cq @atom:ca @atom:ha
@angle:cq-ca-sy @atom:cq @atom:ca @atom:sy
@angle:f-ca-f @atom:f @atom:ca @atom:f
@angle:f-ca-nb @atom:f @atom:ca @atom:nb
@angle:h4-ca-n @atom:h4 @atom:ca @atom:n
@angle:h4-ca-na @atom:h4 @atom:ca @atom:na
@angle:h4-ca-nb @atom:h4 @atom:ca @atom:nb
@angle:h4-ca-nc @atom:h4 @atom:ca @atom:nc
@angle:h4-ca-nd @atom:h4 @atom:ca @atom:nd
@angle:h4-ca-os @atom:h4 @atom:ca @atom:os
@angle:h4-ca-ss @atom:h4 @atom:ca @atom:ss
@angle:h5-ca-nb @atom:h5 @atom:ca @atom:nb
@angle:h5-ca-nc @atom:h5 @atom:ca @atom:nc
@angle:h5-ca-nd @atom:h5 @atom:ca @atom:nd
@angle:ha-ca-n2 @atom:ha @atom:ca @atom:n2
@angle:ha-ca-p2 @atom:ha @atom:ca @atom:p2
@angle:i-ca-i @atom:i @atom:ca @atom:i
@angle:n1-ca-n1 @atom:n1 @atom:ca @atom:n1
@angle:n2-ca-n2 @atom:n2 @atom:ca @atom:n2
@angle:n2-ca-na @atom:n2 @atom:ca @atom:na
@angle:n4-ca-n4 @atom:n4 @atom:ca @atom:n4
@angle:na-ca-na @atom:na @atom:ca @atom:na
@angle:na-ca-nb @atom:na @atom:ca @atom:nb
@angle:na-ca-nh @atom:na @atom:ca @atom:nh
@angle:nb-ca-nb @atom:nb @atom:ca @atom:nb
@angle:nb-ca-nc @atom:nb @atom:ca @atom:nc
@angle:nb-ca-nd @atom:nb @atom:ca @atom:nd
@angle:nb-ca-nh @atom:nb @atom:ca @atom:nh
@angle:nb-ca-oh @atom:nb @atom:ca @atom:oh
@angle:nb-ca-os @atom:nb @atom:ca @atom:os
@angle:nb-ca-sh @atom:nb @atom:ca @atom:sh
@angle:nb-ca-ss @atom:nb @atom:ca @atom:ss
@angle:nc-ca-nc @atom:nc @atom:ca @atom:nc
@angle:nc-ca-nh @atom:nc @atom:ca @atom:nh
@angle:nd-ca-nd @atom:nd @atom:ca @atom:nd
@angle:nd-ca-nh @atom:nd @atom:ca @atom:nh
@angle:nh-ca-nh @atom:nh @atom:ca @atom:nh
@angle:n-ca-nc @atom:n @atom:ca @atom:nc
@angle:n-ca-nd @atom:n @atom:ca @atom:nd
@angle:n-ca-nh @atom:n @atom:ca @atom:nh
@angle:no-ca-no @atom:no @atom:ca @atom:no
@angle:oh-ca-oh @atom:oh @atom:ca @atom:oh
@angle:o-ca-o @atom:o @atom:ca @atom:o
@angle:os-ca-os @atom:os @atom:ca @atom:os
@angle:p2-ca-p2 @atom:p2 @atom:ca @atom:p2
@angle:p3-ca-p3 @atom:p3 @atom:ca @atom:p3
@angle:p5-ca-p5 @atom:p5 @atom:ca @atom:p5
@angle:s4-ca-s4 @atom:s4 @atom:ca @atom:s4
@angle:s6-ca-s6 @atom:s6 @atom:ca @atom:s6
@angle:sh-ca-sh @atom:sh @atom:ca @atom:sh
@angle:s-ca-s @atom:s @atom:ca @atom:s
@angle:ss-ca-ss @atom:ss @atom:ca @atom:ss
@angle:br-c-br @atom:br @atom:c @atom:br
@angle:br-c-c3 @atom:br @atom:c @atom:c3
@angle:br-c-o @atom:br @atom:c @atom:o
@angle:c1-c-c1 @atom:c1 @atom:c @atom:c1
@angle:c1-c-o @atom:c1 @atom:c @atom:o
@angle:c2-c-c2 @atom:c2 @atom:c @atom:c2
@angle:c2-c-ha @atom:c2 @atom:c @atom:ha
@angle:c2-c-o @atom:c2 @atom:c @atom:o
@angle:c2-c-s @atom:c2 @atom:c @atom:s
@angle:c3-c-c3 @atom:c3 @atom:c @atom:c3
@angle:c3-c-ca @atom:c3 @atom:c @atom:ca
@angle:c3-c-cc @atom:c3 @atom:c @atom:cc
@angle:c3-c-cd @atom:c3 @atom:c @atom:cd
@angle:c3-c-ce @atom:c3 @atom:c @atom:ce
@angle:c3-c-cf @atom:c3 @atom:c @atom:cf
@angle:c3-c-cg @atom:c3 @atom:c @atom:cg
@angle:c3-c-ch @atom:c3 @atom:c @atom:ch
@angle:c3-c-cl @atom:c3 @atom:c @atom:cl
@angle:c3-c-f @atom:c3 @atom:c @atom:f
@angle:c3-c-h4 @atom:c3 @atom:c @atom:h4
@angle:c3-c-ha @atom:c3 @atom:c @atom:ha
@angle:c3-c-i @atom:c3 @atom:c @atom:i
@angle:c3-c-n2 @atom:c3 @atom:c @atom:n2
@angle:c3-c-n4 @atom:c3 @atom:c @atom:n4
@angle:c3-c-n @atom:c3 @atom:c @atom:n
@angle:c3-c-ne @atom:c3 @atom:c @atom:ne
@angle:c3-c-nf @atom:c3 @atom:c @atom:nf
@angle:c3-c-o @atom:c3 @atom:c @atom:o
@angle:c3-c-oh @atom:c3 @atom:c @atom:oh
@angle:c3-c-os @atom:c3 @atom:c @atom:os
@angle:c3-c-p3 @atom:c3 @atom:c @atom:p3
@angle:c3-c-p5 @atom:c3 @atom:c @atom:p5
@angle:c3-c-pe @atom:c3 @atom:c @atom:pe
@angle:c3-c-pf @atom:c3 @atom:c @atom:pf
@angle:c3-c-px @atom:c3 @atom:c @atom:px
@angle:c3-c-py @atom:c3 @atom:c @atom:py
@angle:c3-c-s4 @atom:c3 @atom:c @atom:s4
@angle:c3-c-s6 @atom:c3 @atom:c @atom:s6
@angle:c3-c-s @atom:c3 @atom:c @atom:s
@angle:c3-c-sh @atom:c3 @atom:c @atom:sh
@angle:c3-c-ss @atom:c3 @atom:c @atom:ss
@angle:c3-c-sx @atom:c3 @atom:c @atom:sx
@angle:c3-c-sy @atom:c3 @atom:c @atom:sy
@angle:ca-c-ca @atom:ca @atom:c @atom:ca
@angle:ca-c-cc @atom:ca @atom:c @atom:cc
@angle:ca-c-cd @atom:ca @atom:c @atom:cd
@angle:ca-c-ce @atom:ca @atom:c @atom:ce
@angle:ca-c-cf @atom:ca @atom:c @atom:cf
@angle:ca-c-h4 @atom:ca @atom:c @atom:h4
@angle:ca-c-ha @atom:ca @atom:c @atom:ha
@angle:ca-c-n @atom:ca @atom:c @atom:n
@angle:ca-c-ne @atom:ca @atom:c @atom:ne
@angle:ca-c-o @atom:ca @atom:c @atom:o
@angle:ca-c-oh @atom:ca @atom:c @atom:oh
@angle:ca-c-os @atom:ca @atom:c @atom:os
@angle:ca-c-s @atom:ca @atom:c @atom:s
@angle:ca-c-sh @atom:ca @atom:c @atom:sh
@angle:ca-c-ss @atom:ca @atom:c @atom:ss
@angle:br-cc-c @atom:br @atom:cc @atom:c
@angle:br-cc-cc @atom:br @atom:cc @atom:cc
@angle:br-cc-cd @atom:br @atom:cc @atom:cd
@angle:br-cc-na @atom:br @atom:cc @atom:na
@angle:c2-cc-c3 @atom:c2 @atom:cc @atom:c3
@angle:c2-cc-ca @atom:c2 @atom:cc @atom:ca
@angle:c2-cc-cc @atom:c2 @atom:cc @atom:cc
@angle:c2-cc-cd @atom:c2 @atom:cc @atom:cd
@angle:c2-cc-ha @atom:c2 @atom:cc @atom:ha
@angle:c2-cc-n @atom:c2 @atom:cc @atom:n
@angle:c2-cc-os @atom:c2 @atom:cc @atom:os
@angle:c-c-c3 @atom:c @atom:c @atom:c3
@angle:c3-cc-ca @atom:c3 @atom:cc @atom:ca
@angle:c3-cc-cc @atom:c3 @atom:cc @atom:cc
@angle:c3-cc-cd @atom:c3 @atom:cc @atom:cd
@angle:c3-cc-cf @atom:c3 @atom:cc @atom:cf
@angle:c3-cc-ha @atom:c3 @atom:cc @atom:ha
@angle:c3-cc-n2 @atom:c3 @atom:cc @atom:n2
@angle:c3-cc-n @atom:c3 @atom:cc @atom:n
@angle:c3-cc-na @atom:c3 @atom:cc @atom:na
@angle:c3-cc-nc @atom:c3 @atom:cc @atom:nc
@angle:c3-cc-nd @atom:c3 @atom:cc @atom:nd
@angle:c3-cc-os @atom:c3 @atom:cc @atom:os
@angle:c3-cc-ss @atom:c3 @atom:cc @atom:ss
@angle:c-c-c @atom:c @atom:c @atom:c
@angle:c-c-ca @atom:c @atom:c @atom:ca
@angle:ca-cc-cc @atom:ca @atom:cc @atom:cc
@angle:ca-cc-cd @atom:ca @atom:cc @atom:cd
@angle:ca-cc-ce @atom:ca @atom:cc @atom:ce
@angle:ca-cc-h4 @atom:ca @atom:cc @atom:h4
@angle:ca-cc-ha @atom:ca @atom:cc @atom:ha
@angle:ca-cc-n @atom:ca @atom:cc @atom:n
@angle:ca-cc-nc @atom:ca @atom:cc @atom:nc
@angle:ca-cc-nd @atom:ca @atom:cc @atom:nd
@angle:ca-cc-nh @atom:ca @atom:cc @atom:nh
@angle:ca-cc-oh @atom:ca @atom:cc @atom:oh
@angle:ca-cc-os @atom:ca @atom:cc @atom:os
@angle:ca-cc-ss @atom:ca @atom:cc @atom:ss
@angle:c-cc-c2 @atom:c @atom:cc @atom:c2
@angle:c-cc-c3 @atom:c @atom:cc @atom:c3
@angle:c-cc-c @atom:c @atom:cc @atom:c
@angle:c-c-cc @atom:c @atom:c @atom:cc
@angle:c-cc-ca @atom:c @atom:cc @atom:ca
@angle:c-cc-cc @atom:c @atom:cc @atom:cc
@angle:cc-c-cc @atom:cc @atom:c @atom:cc
@angle:cc-cc-cc @atom:cc @atom:cc @atom:cc
@angle:cc-cc-cd @atom:cc @atom:cc @atom:cd
@angle:cc-cc-ce @atom:cc @atom:cc @atom:ce
@angle:cc-cc-cf @atom:cc @atom:cc @atom:cf
@angle:cc-cc-cg @atom:cc @atom:cc @atom:cg
@angle:c-cc-cd @atom:c @atom:cc @atom:cd
@angle:cc-c-cd @atom:cc @atom:c @atom:cd
@angle:c-cc-ce @atom:c @atom:cc @atom:ce
@angle:cc-c-ce @atom:cc @atom:c @atom:ce
@angle:cc-cc-f @atom:cc @atom:cc @atom:f
@angle:c-cc-cg @atom:c @atom:cc @atom:cg
@angle:cc-cc-h4 @atom:cc @atom:cc @atom:h4
@angle:cc-cc-ha @atom:cc @atom:cc @atom:ha
@angle:c-cc-cl @atom:c @atom:cc @atom:cl
@angle:cc-cc-n2 @atom:cc @atom:cc @atom:n2
@angle:cc-cc-n @atom:cc @atom:cc @atom:n
@angle:cc-cc-na @atom:cc @atom:cc @atom:na
@angle:cc-cc-nc @atom:cc @atom:cc @atom:nc
@angle:cc-cc-nd @atom:cc @atom:cc @atom:nd
@angle:cc-cc-nh @atom:cc @atom:cc @atom:nh
@angle:cc-cc-oh @atom:cc @atom:cc @atom:oh
@angle:cc-cc-os @atom:cc @atom:cc @atom:os
@angle:cc-cc-pd @atom:cc @atom:cc @atom:pd
@angle:cc-cc-ss @atom:cc @atom:cc @atom:ss
@angle:cc-cc-sy @atom:cc @atom:cc @atom:sy
@angle:c-c-cd @atom:c @atom:c @atom:cd
@angle:cd-cc-cd @atom:cd @atom:cc @atom:cd
@angle:cd-cc-ce @atom:cd @atom:cc @atom:ce
@angle:cd-cc-cl @atom:cd @atom:cc @atom:cl
@angle:cd-cc-f @atom:cd @atom:cc @atom:f
@angle:cd-cc-h4 @atom:cd @atom:cc @atom:h4
@angle:cd-cc-ha @atom:cd @atom:cc @atom:ha
@angle:cd-cc-n @atom:cd @atom:cc @atom:n
@angle:cd-cc-na @atom:cd @atom:cc @atom:na
@angle:cd-cc-nc @atom:cd @atom:cc @atom:nc
@angle:cd-cc-nh @atom:cd @atom:cc @atom:nh
@angle:cd-cc-no @atom:cd @atom:cc @atom:no
@angle:cd-cc-oh @atom:cd @atom:cc @atom:oh
@angle:cd-cc-os @atom:cd @atom:cc @atom:os
@angle:cd-cc-ss @atom:cd @atom:cc @atom:ss
@angle:cd-cc-sy @atom:cd @atom:cc @atom:sy
@angle:ce-cc-na @atom:ce @atom:cc @atom:na
@angle:ce-cc-nc @atom:ce @atom:cc @atom:nc
@angle:ce-cc-nd @atom:ce @atom:cc @atom:nd
@angle:ce-cc-os @atom:ce @atom:cc @atom:os
@angle:ce-cc-ss @atom:ce @atom:cc @atom:ss
@angle:c-cc-f @atom:c @atom:cc @atom:f
@angle:cg-cc-na @atom:cg @atom:cc @atom:na
@angle:cg-cc-ss @atom:cg @atom:cc @atom:ss
@angle:cc-c-h4 @atom:cc @atom:c @atom:h4
@angle:c-cc-ha @atom:c @atom:cc @atom:ha
@angle:cl-cc-na @atom:cl @atom:cc @atom:na
@angle:cl-cc-nd @atom:cl @atom:cc @atom:nd
@angle:cl-cc-ss @atom:cl @atom:cc @atom:ss
@angle:c-cc-n2 @atom:c @atom:cc @atom:n2
@angle:c-cc-n @atom:c @atom:cc @atom:n
@angle:cc-c-n @atom:cc @atom:c @atom:n
@angle:c-cc-nc @atom:c @atom:cc @atom:nc
@angle:cc-c-nd @atom:cc @atom:c @atom:nd
@angle:c-cc-nd @atom:c @atom:cc @atom:nd
@angle:c-cc-ne @atom:c @atom:cc @atom:ne
@angle:cc-c-o @atom:cc @atom:c @atom:o
@angle:c-cc-oh @atom:c @atom:cc @atom:oh
@angle:cc-c-oh @atom:cc @atom:c @atom:oh
@angle:c-cc-os @atom:c @atom:cc @atom:os
@angle:cc-c-os @atom:cc @atom:c @atom:os
@angle:cc-c-s @atom:cc @atom:c @atom:s
@angle:cc-c-ss @atom:cc @atom:c @atom:ss
@angle:cx-cc-nd @atom:cx @atom:cc @atom:nd
@angle:cx-cc-os @atom:cx @atom:cc @atom:os
@angle:cd-c-cd @atom:cd @atom:c @atom:cd
@angle:cd-c-cx @atom:cd @atom:c @atom:cx
@angle:cd-c-n @atom:cd @atom:c @atom:n
@angle:cd-c-nc @atom:cd @atom:c @atom:nc
@angle:cd-c-nd @atom:cd @atom:c @atom:nd
@angle:cd-c-o @atom:cd @atom:c @atom:o
@angle:cd-c-oh @atom:cd @atom:c @atom:oh
@angle:cd-c-os @atom:cd @atom:c @atom:os
@angle:ce-c-ce @atom:ce @atom:c @atom:ce
@angle:ce-c-cf @atom:ce @atom:c @atom:cf
@angle:ce-c-cx @atom:ce @atom:c @atom:cx
@angle:ce-c-h4 @atom:ce @atom:c @atom:h4
@angle:ce-c-ha @atom:ce @atom:c @atom:ha
@angle:ce-c-n @atom:ce @atom:c @atom:n
@angle:ce-c-o @atom:ce @atom:c @atom:o
@angle:ce-c-oh @atom:ce @atom:c @atom:oh
@angle:ce-c-os @atom:ce @atom:c @atom:os
@angle:ce-c-s @atom:ce @atom:c @atom:s
@angle:ce-c-ss @atom:ce @atom:c @atom:ss
@angle:cf-c-cf @atom:cf @atom:c @atom:cf
@angle:cf-c-ha @atom:cf @atom:c @atom:ha
@angle:cf-c-n @atom:cf @atom:c @atom:n
@angle:cf-c-o @atom:cf @atom:c @atom:o
@angle:cf-c-oh @atom:cf @atom:c @atom:oh
@angle:cf-c-os @atom:cf @atom:c @atom:os
@angle:cf-c-s @atom:cf @atom:c @atom:s
@angle:cg-c-cg @atom:cg @atom:c @atom:cg
@angle:cg-c-ha @atom:cg @atom:c @atom:ha
@angle:cg-c-o @atom:cg @atom:c @atom:o
@angle:c-c-h4 @atom:c @atom:c @atom:h4
@angle:h4-cc-n @atom:h4 @atom:cc @atom:n
@angle:h4-cc-na @atom:h4 @atom:cc @atom:na
@angle:h4-cc-nc @atom:h4 @atom:cc @atom:nc
@angle:h4-cc-nd @atom:h4 @atom:cc @atom:nd
@angle:h4-cc-os @atom:h4 @atom:cc @atom:os
@angle:h4-cc-ss @atom:h4 @atom:cc @atom:ss
@angle:h5-cc-n @atom:h5 @atom:cc @atom:n
@angle:h5-cc-na @atom:h5 @atom:cc @atom:na
@angle:h5-cc-nc @atom:h5 @atom:cc @atom:nc
@angle:h5-cc-nd @atom:h5 @atom:cc @atom:nd
@angle:h5-cc-os @atom:h5 @atom:cc @atom:os
@angle:h5-cc-ss @atom:h5 @atom:cc @atom:ss
@angle:c-c-ha @atom:c @atom:c @atom:ha
@angle:ha-cc-na @atom:ha @atom:cc @atom:na
@angle:ha-cc-nc @atom:ha @atom:cc @atom:nc
@angle:ha-cc-nd @atom:ha @atom:cc @atom:nd
@angle:ha-cc-os @atom:ha @atom:cc @atom:os
@angle:ha-cc-pd @atom:ha @atom:cc @atom:pd
@angle:ha-cc-ss @atom:ha @atom:cc @atom:ss
@angle:ch-c-ch @atom:ch @atom:c @atom:ch
@angle:ch-c-ha @atom:ch @atom:c @atom:ha
@angle:ch-c-o @atom:ch @atom:c @atom:o
@angle:cl-c-cl @atom:cl @atom:c @atom:cl
@angle:cl-c-f @atom:cl @atom:c @atom:f
@angle:cl-c-ha @atom:cl @atom:c @atom:ha
@angle:cl-c-o @atom:cl @atom:c @atom:o
@angle:cl-c-s @atom:cl @atom:c @atom:s
@angle:c-c-n @atom:c @atom:c @atom:n
@angle:na-cc-nc @atom:na @atom:cc @atom:nc
@angle:na-cc-nd @atom:na @atom:cc @atom:nd
@angle:na-cc-no @atom:na @atom:cc @atom:no
@angle:na-cc-oh @atom:na @atom:cc @atom:oh
@angle:na-cc-sx @atom:na @atom:cc @atom:sx
@angle:na-cc-sy @atom:na @atom:cc @atom:sy
- @angle:n-cc-c @atom:n @atom:cc @atom:c
@angle:nc-cc-nd @atom:nc @atom:cc @atom:nd
@angle:nc-cc-nh @atom:nc @atom:cc @atom:nh
@angle:nc-cc-no @atom:nc @atom:cc @atom:no
@angle:nc-cc-ss @atom:nc @atom:cc @atom:ss
@angle:nd-cc-nd @atom:nd @atom:cc @atom:nd
@angle:nd-cc-ne @atom:nd @atom:cc @atom:ne
@angle:nd-cc-nh @atom:nd @atom:cc @atom:nh
@angle:nd-cc-no @atom:nd @atom:cc @atom:no
@angle:nd-cc-oh @atom:nd @atom:cc @atom:oh
@angle:nd-cc-os @atom:nd @atom:cc @atom:os
@angle:nd-cc-sh @atom:nd @atom:cc @atom:sh
@angle:nd-cc-ss @atom:nd @atom:cc @atom:ss
@angle:nd-cc-sx @atom:nd @atom:cc @atom:sx
@angle:nd-cc-sy @atom:nd @atom:cc @atom:sy
@angle:ne-cc-ss @atom:ne @atom:cc @atom:ss
@angle:nh-cc-nh @atom:nh @atom:cc @atom:nh
@angle:nh-cc-os @atom:nh @atom:cc @atom:os
@angle:nh-cc-ss @atom:nh @atom:cc @atom:ss
@angle:n-cc-n2 @atom:n @atom:cc @atom:n2
@angle:n-cc-na @atom:n @atom:cc @atom:na
@angle:n-cc-nc @atom:n @atom:cc @atom:nc
@angle:n-cc-nd @atom:n @atom:cc @atom:nd
@angle:n-cc-nh @atom:n @atom:cc @atom:nh
@angle:no-cc-os @atom:no @atom:cc @atom:os
@angle:no-cc-ss @atom:no @atom:cc @atom:ss
@angle:n-cc-ss @atom:n @atom:cc @atom:ss
@angle:c-c-o @atom:c @atom:c @atom:o
@angle:c-c-oh @atom:c @atom:c @atom:oh
@angle:c-c-os @atom:c @atom:c @atom:os
@angle:os-cc-ss @atom:os @atom:cc @atom:ss
@angle:ss-cc-ss @atom:ss @atom:cc @atom:ss
@angle:ss-cc-sy @atom:ss @atom:cc @atom:sy
@angle:cx-c-cx @atom:cx @atom:c @atom:cx
@angle:cx-c-n @atom:cx @atom:c @atom:n
@angle:cx-c-o @atom:cx @atom:c @atom:o
@angle:cx-c-oh @atom:cx @atom:c @atom:oh
@angle:cx-c-os @atom:cx @atom:c @atom:os
@angle:cy-c-cy @atom:cy @atom:c @atom:cy
@angle:cy-c-n @atom:cy @atom:c @atom:n
@angle:cy-c-o @atom:cy @atom:c @atom:o
@angle:cy-c-oh @atom:cy @atom:c @atom:oh
@angle:cy-c-os @atom:cy @atom:c @atom:os
@angle:c2-cd-c3 @atom:c2 @atom:cd @atom:c3
@angle:c2-cd-ca @atom:c2 @atom:cd @atom:ca
@angle:c2-cd-cc @atom:c2 @atom:cd @atom:cc
@angle:c2-cd-cd @atom:c2 @atom:cd @atom:cd
@angle:c2-cd-ha @atom:c2 @atom:cd @atom:ha
@angle:c2-cd-n @atom:c2 @atom:cd @atom:n
@angle:c2-cd-os @atom:c2 @atom:cd @atom:os
@angle:c3-cd-ca @atom:c3 @atom:cd @atom:ca
@angle:c3-cd-cc @atom:c3 @atom:cd @atom:cc
@angle:c3-cd-cd @atom:c3 @atom:cd @atom:cd
@angle:c3-cd-ce @atom:c3 @atom:cd @atom:ce
@angle:c3-cd-ha @atom:c3 @atom:cd @atom:ha
@angle:c3-cd-n2 @atom:c3 @atom:cd @atom:n2
@angle:c3-cd-n @atom:c3 @atom:cd @atom:n
@angle:c3-cd-na @atom:c3 @atom:cd @atom:na
@angle:c3-cd-nc @atom:c3 @atom:cd @atom:nc
@angle:c3-cd-nd @atom:c3 @atom:cd @atom:nd
@angle:c3-cd-os @atom:c3 @atom:cd @atom:os
@angle:c3-cd-ss @atom:c3 @atom:cd @atom:ss
@angle:ca-cd-cc @atom:ca @atom:cd @atom:cc
@angle:ca-cd-cd @atom:ca @atom:cd @atom:cd
@angle:ca-cd-ce @atom:ca @atom:cd @atom:ce
@angle:ca-cd-h4 @atom:ca @atom:cd @atom:h4
@angle:ca-cd-ha @atom:ca @atom:cd @atom:ha
@angle:ca-cd-n @atom:ca @atom:cd @atom:n
@angle:ca-cd-na @atom:ca @atom:cd @atom:na
@angle:ca-cd-nc @atom:ca @atom:cd @atom:nc
@angle:ca-cd-nd @atom:ca @atom:cd @atom:nd
@angle:ca-cd-oh @atom:ca @atom:cd @atom:oh
@angle:ca-cd-os @atom:ca @atom:cd @atom:os
@angle:ca-cd-ss @atom:ca @atom:cd @atom:ss
@angle:c-cd-c2 @atom:c @atom:cd @atom:c2
@angle:c-cd-c3 @atom:c @atom:cd @atom:c3
@angle:c-cd-c @atom:c @atom:cd @atom:c
@angle:c-cd-ca @atom:c @atom:cd @atom:ca
@angle:c-cd-cc @atom:c @atom:cd @atom:cc
@angle:cc-cd-cc @atom:cc @atom:cd @atom:cc
@angle:cc-cd-cd @atom:cc @atom:cd @atom:cd
@angle:cc-cd-cf @atom:cc @atom:cd @atom:cf
@angle:cc-cd-ch @atom:cc @atom:cd @atom:ch
@angle:cc-cd-cl @atom:cc @atom:cd @atom:cl
@angle:cc-cd-cy @atom:cc @atom:cd @atom:cy
@angle:c-cd-cd @atom:c @atom:cd @atom:cd
@angle:c-cd-cf @atom:c @atom:cd @atom:cf
@angle:cc-cd-h4 @atom:cc @atom:cd @atom:h4
@angle:cc-cd-ha @atom:cc @atom:cd @atom:ha
@angle:c-cd-cl @atom:c @atom:cd @atom:cl
@angle:cc-cd-n @atom:cc @atom:cd @atom:n
@angle:cc-cd-na @atom:cc @atom:cd @atom:na
@angle:cc-cd-nc @atom:cc @atom:cd @atom:nc
@angle:cc-cd-nd @atom:cc @atom:cd @atom:nd
@angle:cc-cd-nh @atom:cc @atom:cd @atom:nh
@angle:cc-cd-oh @atom:cc @atom:cd @atom:oh
@angle:cc-cd-os @atom:cc @atom:cd @atom:os
@angle:cc-cd-ss @atom:cc @atom:cd @atom:ss
@angle:cc-cd-sy @atom:cc @atom:cd @atom:sy
@angle:cd-cd-cd @atom:cd @atom:cd @atom:cd
@angle:cd-cd-ce @atom:cd @atom:cd @atom:ce
@angle:cd-cd-cf @atom:cd @atom:cd @atom:cf
@angle:cd-cd-ch @atom:cd @atom:cd @atom:ch
@angle:cd-cd-cy @atom:cd @atom:cd @atom:cy
@angle:cd-cd-h4 @atom:cd @atom:cd @atom:h4
@angle:cd-cd-ha @atom:cd @atom:cd @atom:ha
@angle:cd-cd-n2 @atom:cd @atom:cd @atom:n2
@angle:cd-cd-n @atom:cd @atom:cd @atom:n
@angle:cd-cd-na @atom:cd @atom:cd @atom:na
@angle:cd-cd-nc @atom:cd @atom:cd @atom:nc
@angle:cd-cd-nd @atom:cd @atom:cd @atom:nd
@angle:cd-cd-nh @atom:cd @atom:cd @atom:nh
@angle:cd-cd-oh @atom:cd @atom:cd @atom:oh
@angle:cd-cd-os @atom:cd @atom:cd @atom:os
@angle:cd-cd-pc @atom:cd @atom:cd @atom:pc
@angle:cd-cd-ss @atom:cd @atom:cd @atom:ss
@angle:ce-cd-nd @atom:ce @atom:cd @atom:nd
@angle:cf-cd-na @atom:cf @atom:cd @atom:na
@angle:cf-cd-nc @atom:cf @atom:cd @atom:nc
@angle:cf-cd-nd @atom:cf @atom:cd @atom:nd
@angle:cf-cd-os @atom:cf @atom:cd @atom:os
@angle:cf-cd-ss @atom:cf @atom:cd @atom:ss
@angle:c-cd-h4 @atom:c @atom:cd @atom:h4
@angle:c-cd-ha @atom:c @atom:cd @atom:ha
@angle:cl-cd-nc @atom:cl @atom:cd @atom:nc
@angle:c-cd-n2 @atom:c @atom:cd @atom:n2
@angle:c-cd-n @atom:c @atom:cd @atom:n
@angle:c-cd-nc @atom:c @atom:cd @atom:nc
@angle:c-cd-nd @atom:c @atom:cd @atom:nd
@angle:c-cd-oh @atom:c @atom:cd @atom:oh
@angle:c-cd-os @atom:c @atom:cd @atom:os
@angle:h4-cd-n @atom:h4 @atom:cd @atom:n
@angle:h4-cd-na @atom:h4 @atom:cd @atom:na
@angle:h4-cd-nc @atom:h4 @atom:cd @atom:nc
@angle:h4-cd-nd @atom:h4 @atom:cd @atom:nd
@angle:h4-cd-os @atom:h4 @atom:cd @atom:os
@angle:h4-cd-ss @atom:h4 @atom:cd @atom:ss
@angle:h5-cd-n @atom:h5 @atom:cd @atom:n
@angle:h5-cd-na @atom:h5 @atom:cd @atom:na
@angle:h5-cd-nc @atom:h5 @atom:cd @atom:nc
@angle:h5-cd-nd @atom:h5 @atom:cd @atom:nd
@angle:h5-cd-os @atom:h5 @atom:cd @atom:os
@angle:h5-cd-ss @atom:h5 @atom:cd @atom:ss
@angle:ha-cd-na @atom:ha @atom:cd @atom:na
@angle:ha-cd-nc @atom:ha @atom:cd @atom:nc
@angle:ha-cd-nd @atom:ha @atom:cd @atom:nd
@angle:ha-cd-os @atom:ha @atom:cd @atom:os
@angle:ha-cd-pc @atom:ha @atom:cd @atom:pc
@angle:ha-cd-ss @atom:ha @atom:cd @atom:ss
@angle:na-cd-nc @atom:na @atom:cd @atom:nc
@angle:na-cd-nd @atom:na @atom:cd @atom:nd
@angle:na-cd-nh @atom:na @atom:cd @atom:nh
@angle:na-cd-ss @atom:na @atom:cd @atom:ss
@angle:nc-cd-nd @atom:nc @atom:cd @atom:nd
@angle:nc-cd-nh @atom:nc @atom:cd @atom:nh
@angle:nc-cd-oh @atom:nc @atom:cd @atom:oh
@angle:nc-cd-os @atom:nc @atom:cd @atom:os
@angle:nc-cd-ss @atom:nc @atom:cd @atom:ss
@angle:nd-cd-nd @atom:nd @atom:cd @atom:nd
@angle:nd-cd-nh @atom:nd @atom:cd @atom:nh
@angle:nd-cd-ss @atom:nd @atom:cd @atom:ss
@angle:nh-cd-nh @atom:nh @atom:cd @atom:nh
@angle:nh-cd-os @atom:nh @atom:cd @atom:os
@angle:nh-cd-ss @atom:nh @atom:cd @atom:ss
@angle:n-cd-na @atom:n @atom:cd @atom:na
@angle:n-cd-nc @atom:n @atom:cd @atom:nc
@angle:n-cd-nd @atom:n @atom:cd @atom:nd
@angle:n-cd-nh @atom:n @atom:cd @atom:nh
@angle:n-cd-ss @atom:n @atom:cd @atom:ss
@angle:oh-cd-os @atom:oh @atom:cd @atom:os
@angle:os-cd-ss @atom:os @atom:cd @atom:ss
@angle:ss-cd-ss @atom:ss @atom:cd @atom:ss
@angle:ss-cd-sy @atom:ss @atom:cd @atom:sy
@angle:c2-ce-c3 @atom:c2 @atom:ce @atom:c3
@angle:c2-ce-ca @atom:c2 @atom:ce @atom:ca
@angle:c2-ce-cc @atom:c2 @atom:ce @atom:cc
@angle:c2-ce-ce @atom:c2 @atom:ce @atom:ce
@angle:c2-ce-cg @atom:c2 @atom:ce @atom:cg
@angle:c2-ce-cl @atom:c2 @atom:ce @atom:cl
@angle:c2-ce-h4 @atom:c2 @atom:ce @atom:h4
@angle:c2-ce-ha @atom:c2 @atom:ce @atom:ha
@angle:c2-ce-n1 @atom:c2 @atom:ce @atom:n1
@angle:c2-ce-n2 @atom:c2 @atom:ce @atom:n2
@angle:c2-ce-na @atom:c2 @atom:ce @atom:na
@angle:c2-ce-ne @atom:c2 @atom:ce @atom:ne
@angle:c2-ce-oh @atom:c2 @atom:ce @atom:oh
@angle:c2-ce-p2 @atom:c2 @atom:ce @atom:p2
@angle:c2-ce-pe @atom:c2 @atom:ce @atom:pe
@angle:c2-ce-px @atom:c2 @atom:ce @atom:px
@angle:c2-ce-py @atom:c2 @atom:ce @atom:py
@angle:c2-ce-sx @atom:c2 @atom:ce @atom:sx
@angle:c2-ce-sy @atom:c2 @atom:ce @atom:sy
@angle:c3-ce-ca @atom:c3 @atom:ce @atom:ca
@angle:c3-ce-cc @atom:c3 @atom:ce @atom:cc
@angle:c3-ce-ce @atom:c3 @atom:ce @atom:ce
@angle:c3-ce-cf @atom:c3 @atom:ce @atom:cf
@angle:c3-ce-cg @atom:c3 @atom:ce @atom:cg
@angle:c3-ce-n2 @atom:c3 @atom:ce @atom:n2
@angle:c3-ce-nf @atom:c3 @atom:ce @atom:nf
@angle:c3-ce-nh @atom:c3 @atom:ce @atom:nh
@angle:ca-ce-ca @atom:ca @atom:ce @atom:ca
@angle:ca-ce-cc @atom:ca @atom:ce @atom:cc
@angle:ca-ce-ce @atom:ca @atom:ce @atom:ce
@angle:ca-ce-cf @atom:ca @atom:ce @atom:cf
@angle:ca-ce-cl @atom:ca @atom:ce @atom:cl
@angle:ca-ce-h4 @atom:ca @atom:ce @atom:h4
@angle:ca-ce-ha @atom:ca @atom:ce @atom:ha
@angle:ca-ce-n2 @atom:ca @atom:ce @atom:n2
@angle:ca-ce-nf @atom:ca @atom:ce @atom:nf
@angle:ca-ce-nh @atom:ca @atom:ce @atom:nh
@angle:ca-ce-oh @atom:ca @atom:ce @atom:oh
@angle:ca-ce-os @atom:ca @atom:ce @atom:os
@angle:ca-ce-ss @atom:ca @atom:ce @atom:ss
@angle:c-ce-c2 @atom:c @atom:ce @atom:c2
@angle:c-ce-c3 @atom:c @atom:ce @atom:c3
@angle:c-ce-c @atom:c @atom:ce @atom:c
@angle:c-ce-ca @atom:c @atom:ce @atom:ca
@angle:cc-ce-cd @atom:cc @atom:ce @atom:cd
@angle:cc-ce-cf @atom:cc @atom:ce @atom:cf
@angle:c-ce-cd @atom:c @atom:ce @atom:cd
@angle:c-ce-ce @atom:c @atom:ce @atom:ce
@angle:c-ce-cf @atom:c @atom:ce @atom:cf
@angle:c-ce-cg @atom:c @atom:ce @atom:cg
@angle:cc-ce-h4 @atom:cc @atom:ce @atom:h4
@angle:cc-ce-ha @atom:cc @atom:ce @atom:ha
@angle:c-ce-cl @atom:c @atom:ce @atom:cl
@angle:cc-ce-n2 @atom:cc @atom:ce @atom:n2
@angle:cc-ce-nh @atom:cc @atom:ce @atom:nh
@angle:c-ce-cy @atom:c @atom:ce @atom:cy
@angle:cd-ce-ce @atom:cd @atom:ce @atom:ce
@angle:cd-ce-ha @atom:cd @atom:ce @atom:ha
@angle:ce-ce-ce @atom:ce @atom:ce @atom:ce
@angle:ce-ce-cf @atom:ce @atom:ce @atom:cf
@angle:ce-ce-cl @atom:ce @atom:ce @atom:cl
@angle:ce-ce-h4 @atom:ce @atom:ce @atom:h4
@angle:ce-ce-ha @atom:ce @atom:ce @atom:ha
@angle:ce-ce-n1 @atom:ce @atom:ce @atom:n1
@angle:ce-ce-n2 @atom:ce @atom:ce @atom:n2
@angle:ce-ce-oh @atom:ce @atom:ce @atom:oh
@angle:cf-ce-cg @atom:cf @atom:ce @atom:cg
@angle:cf-ce-cy @atom:cf @atom:ce @atom:cy
@angle:cf-ce-h4 @atom:cf @atom:ce @atom:h4
@angle:cf-ce-ha @atom:cf @atom:ce @atom:ha
@angle:cf-ce-n1 @atom:cf @atom:ce @atom:n1
@angle:cf-ce-n @atom:cf @atom:ce @atom:n
@angle:cf-ce-nh @atom:cf @atom:ce @atom:nh
@angle:cf-ce-oh @atom:cf @atom:ce @atom:oh
@angle:cg-ce-cg @atom:cg @atom:ce @atom:cg
@angle:cg-ce-ha @atom:cg @atom:ce @atom:ha
@angle:cg-ce-n1 @atom:cg @atom:ce @atom:n1
@angle:cg-ce-n2 @atom:cg @atom:ce @atom:n2
@angle:c-ce-ha @atom:c @atom:ce @atom:ha
@angle:c-ce-n @atom:c @atom:ce @atom:n
@angle:c-ce-nh @atom:c @atom:ce @atom:nh
@angle:c-ce-oh @atom:c @atom:ce @atom:oh
@angle:c-ce-os @atom:c @atom:ce @atom:os
@angle:h4-ce-n1 @atom:h4 @atom:ce @atom:n1
@angle:h4-ce-n2 @atom:h4 @atom:ce @atom:n2
@angle:h4-ce-ne @atom:h4 @atom:ce @atom:ne
@angle:ha-ce-n1 @atom:ha @atom:ce @atom:n1
@angle:ha-ce-n2 @atom:ha @atom:ce @atom:n2
@angle:ha-ce-ne @atom:ha @atom:ce @atom:ne
@angle:ha-ce-nh @atom:ha @atom:ce @atom:nh
@angle:ha-ce-p2 @atom:ha @atom:ce @atom:p2
@angle:ha-ce-pe @atom:ha @atom:ce @atom:pe
@angle:ha-ce-px @atom:ha @atom:ce @atom:px
@angle:ha-ce-py @atom:ha @atom:ce @atom:py
@angle:ha-ce-sx @atom:ha @atom:ce @atom:sx
@angle:ha-ce-sy @atom:ha @atom:ce @atom:sy
@angle:n2-ce-nh @atom:n2 @atom:ce @atom:nh
@angle:n2-ce-os @atom:n2 @atom:ce @atom:os
@angle:n2-ce-ss @atom:n2 @atom:ce @atom:ss
@angle:ne-ce-ne @atom:ne @atom:ce @atom:ne
@angle:ne-ce-nh @atom:ne @atom:ce @atom:nh
@angle:nf-ce-nh @atom:nf @atom:ce @atom:nh
@angle:pe-ce-pe @atom:pe @atom:ce @atom:pe
@angle:py-ce-py @atom:py @atom:ce @atom:py
@angle:sx-ce-sx @atom:sx @atom:ce @atom:sx
@angle:sy-ce-sy @atom:sy @atom:ce @atom:sy
@angle:c2-cf-c3 @atom:c2 @atom:cf @atom:c3
@angle:c2-cf-ca @atom:c2 @atom:cf @atom:ca
@angle:c2-cf-cd @atom:c2 @atom:cf @atom:cd
@angle:c2-cf-cf @atom:c2 @atom:cf @atom:cf
@angle:c2-cf-ch @atom:c2 @atom:cf @atom:ch
@angle:c2-cf-ha @atom:c2 @atom:cf @atom:ha
@angle:c2-cf-n2 @atom:c2 @atom:cf @atom:n2
@angle:c2-cf-nf @atom:c2 @atom:cf @atom:nf
@angle:c2-cf-p2 @atom:c2 @atom:cf @atom:p2
@angle:c2-cf-pf @atom:c2 @atom:cf @atom:pf
@angle:c2-cf-px @atom:c2 @atom:cf @atom:px
@angle:c2-cf-py @atom:c2 @atom:cf @atom:py
@angle:c2-cf-sx @atom:c2 @atom:cf @atom:sx
@angle:c2-cf-sy @atom:c2 @atom:cf @atom:sy
@angle:c3-cf-ca @atom:c3 @atom:cf @atom:ca
@angle:c3-cf-cd @atom:c3 @atom:cf @atom:cd
@angle:c3-cf-ce @atom:c3 @atom:cf @atom:ce
@angle:c3-cf-cf @atom:c3 @atom:cf @atom:cf
@angle:c3-cf-n2 @atom:c3 @atom:cf @atom:n2
@angle:ca-cf-ca @atom:ca @atom:cf @atom:ca
@angle:ca-cf-cc @atom:ca @atom:cf @atom:cc
@angle:ca-cf-cd @atom:ca @atom:cf @atom:cd
@angle:ca-cf-ce @atom:ca @atom:cf @atom:ce
@angle:ca-cf-ha @atom:ca @atom:cf @atom:ha
@angle:ca-cf-n2 @atom:ca @atom:cf @atom:n2
@angle:ca-cf-ne @atom:ca @atom:cf @atom:ne
@angle:ca-cf-oh @atom:ca @atom:cf @atom:oh
@angle:c-cf-c2 @atom:c @atom:cf @atom:c2
@angle:c-cf-c3 @atom:c @atom:cf @atom:c3
@angle:c-cf-c @atom:c @atom:cf @atom:c
@angle:c-cf-cc @atom:c @atom:cf @atom:cc
@angle:cc-cf-cf @atom:cc @atom:cf @atom:cf
@angle:c-cf-cd @atom:c @atom:cf @atom:cd
@angle:c-cf-ce @atom:c @atom:cf @atom:ce
@angle:cc-cf-ha @atom:cc @atom:cf @atom:ha
@angle:cd-cf-ce @atom:cd @atom:cf @atom:ce
@angle:cd-cf-ha @atom:cd @atom:cf @atom:ha
@angle:cd-cf-n2 @atom:cd @atom:cf @atom:n2
@angle:ce-cf-cf @atom:ce @atom:cf @atom:cf
@angle:ce-cf-ch @atom:ce @atom:cf @atom:ch
@angle:ce-cf-ha @atom:ce @atom:cf @atom:ha
@angle:ce-cf-n @atom:ce @atom:cf @atom:n
@angle:ce-cf-oh @atom:ce @atom:cf @atom:oh
@angle:cf-cf-cf @atom:cf @atom:cf @atom:cf
@angle:cf-cf-h4 @atom:cf @atom:cf @atom:h4
@angle:cf-cf-ha @atom:cf @atom:cf @atom:ha
@angle:cf-cf-n1 @atom:cf @atom:cf @atom:n1
@angle:cf-cf-n2 @atom:cf @atom:cf @atom:n2
@angle:c-cf-ha @atom:c @atom:cf @atom:ha
@angle:ch-cf-ch @atom:ch @atom:cf @atom:ch
@angle:ch-cf-ha @atom:ch @atom:cf @atom:ha
@angle:ch-cf-n1 @atom:ch @atom:cf @atom:n1
@angle:c-cf-n2 @atom:c @atom:cf @atom:n2
@angle:c-cf-n @atom:c @atom:cf @atom:n
@angle:c-cf-nh @atom:c @atom:cf @atom:nh
@angle:f-c-f @atom:f @atom:c @atom:f
@angle:h4-cf-n2 @atom:h4 @atom:cf @atom:n2
@angle:h4-cf-ne @atom:h4 @atom:cf @atom:ne
@angle:ha-cf-n1 @atom:ha @atom:cf @atom:n1
@angle:ha-cf-n2 @atom:ha @atom:cf @atom:n2
@angle:ha-cf-nf @atom:ha @atom:cf @atom:nf
@angle:ha-cf-nh @atom:ha @atom:cf @atom:nh
@angle:ha-cf-p2 @atom:ha @atom:cf @atom:p2
@angle:ha-cf-pf @atom:ha @atom:cf @atom:pf
@angle:ha-cf-px @atom:ha @atom:cf @atom:px
@angle:ha-cf-py @atom:ha @atom:cf @atom:py
@angle:ha-cf-sx @atom:ha @atom:cf @atom:sx
@angle:ha-cf-sy @atom:ha @atom:cf @atom:sy
@angle:n2-cf-nh @atom:n2 @atom:cf @atom:nh
@angle:nf-cf-nf @atom:nf @atom:cf @atom:nf
@angle:f-c-o @atom:f @atom:c @atom:o
@angle:pf-cf-pf @atom:pf @atom:cf @atom:pf
@angle:py-cf-py @atom:py @atom:cf @atom:py
@angle:f-c-s @atom:f @atom:c @atom:s
@angle:sx-cf-sx @atom:sx @atom:cf @atom:sx
@angle:sy-cf-sy @atom:sy @atom:cf @atom:sy
@angle:c1-cg-ca @atom:c1 @atom:cg @atom:ca
@angle:c1-cg-cc @atom:c1 @atom:cg @atom:cc
@angle:c1-cg-ce @atom:c1 @atom:cg @atom:ce
@angle:c1-cg-cg @atom:c1 @atom:cg @atom:cg
@angle:c1-cg-ne @atom:c1 @atom:cg @atom:ne
@angle:c1-cg-pe @atom:c1 @atom:cg @atom:pe
@angle:ca-cg-ch @atom:ca @atom:cg @atom:ch
@angle:ca-cg-n1 @atom:ca @atom:cg @atom:n1
@angle:c-cg-c1 @atom:c @atom:cg @atom:c1
@angle:cc-cg-n1 @atom:cc @atom:cg @atom:n1
@angle:ce-cg-ch @atom:ce @atom:cg @atom:ch
@angle:ce-cg-n1 @atom:ce @atom:cg @atom:n1
@angle:n1-cg-ne @atom:n1 @atom:cg @atom:ne
@angle:h4-c-o @atom:h4 @atom:c @atom:o
@angle:h5-c-n @atom:h5 @atom:c @atom:n
@angle:h5-c-o @atom:h5 @atom:c @atom:o
@angle:ha-c-ha @atom:ha @atom:c @atom:ha
@angle:ha-c-i @atom:ha @atom:c @atom:i
@angle:ha-c-n @atom:ha @atom:c @atom:n
@angle:ha-c-o @atom:ha @atom:c @atom:o
@angle:ha-c-oh @atom:ha @atom:c @atom:oh
@angle:ha-c-os @atom:ha @atom:c @atom:os
@angle:ha-c-s @atom:ha @atom:c @atom:s
@angle:c1-ch-ca @atom:c1 @atom:ch @atom:ca
@angle:c1-ch-cf @atom:c1 @atom:ch @atom:cf
@angle:c1-ch-ch @atom:c1 @atom:ch @atom:ch
@angle:c1-ch-nf @atom:c1 @atom:ch @atom:nf
@angle:c1-ch-pf @atom:c1 @atom:ch @atom:pf
@angle:ca-ch-cg @atom:ca @atom:ch @atom:cg
@angle:ca-ch-n1 @atom:ca @atom:ch @atom:n1
@angle:c-ch-c1 @atom:c @atom:ch @atom:c1
@angle:cd-ch-n1 @atom:cd @atom:ch @atom:n1
@angle:cf-ch-cg @atom:cf @atom:ch @atom:cg
@angle:cf-ch-n1 @atom:cf @atom:ch @atom:n1
@angle:cg-ch-ch @atom:cg @atom:ch @atom:ch
@angle:n1-ch-nf @atom:n1 @atom:ch @atom:nf
@angle:i-c-i @atom:i @atom:c @atom:i
@angle:i-c-o @atom:i @atom:c @atom:o
@angle:f-cl-f @atom:f @atom:cl @atom:f
@angle:n2-c-n2 @atom:n2 @atom:c @atom:n2
@angle:n2-c-o @atom:n2 @atom:c @atom:o
@angle:n4-c-n4 @atom:n4 @atom:c @atom:n4
@angle:n4-c-o @atom:n4 @atom:c @atom:o
@angle:nc-c-o @atom:nc @atom:c @atom:o
@angle:nd-c-o @atom:nd @atom:c @atom:o
@angle:ne-c-ne @atom:ne @atom:c @atom:ne
@angle:ne-c-o @atom:ne @atom:c @atom:o
@angle:nf-c-nf @atom:nf @atom:c @atom:nf
@angle:nf-c-o @atom:nf @atom:c @atom:o
@angle:n-c-n @atom:n @atom:c @atom:n
@angle:n-c-nc @atom:n @atom:c @atom:nc
@angle:n-c-nd @atom:n @atom:c @atom:nd
@angle:n-c-ne @atom:n @atom:c @atom:ne
@angle:n-c-o @atom:n @atom:c @atom:o
@angle:n-c-oh @atom:n @atom:c @atom:oh
@angle:no-c-no @atom:no @atom:c @atom:no
@angle:no-c-o @atom:no @atom:c @atom:o
@angle:n-c-os @atom:n @atom:c @atom:os
@angle:n-c-s @atom:n @atom:c @atom:s
@angle:n-c-sh @atom:n @atom:c @atom:sh
@angle:n-c-ss @atom:n @atom:c @atom:ss
@angle:oh-c-oh @atom:oh @atom:c @atom:oh
@angle:oh-c-s @atom:oh @atom:c @atom:s
@angle:o-c-o @atom:o @atom:c @atom:o
@angle:o-c-oh @atom:o @atom:c @atom:oh
@angle:o-c-os @atom:o @atom:c @atom:os
@angle:o-c-p2 @atom:o @atom:c @atom:p2
@angle:o-c-p3 @atom:o @atom:c @atom:p3
@angle:o-c-p5 @atom:o @atom:c @atom:p5
@angle:o-c-pe @atom:o @atom:c @atom:pe
@angle:o-c-pf @atom:o @atom:c @atom:pf
@angle:o-c-px @atom:o @atom:c @atom:px
@angle:o-c-py @atom:o @atom:c @atom:py
@angle:o-c-s4 @atom:o @atom:c @atom:s4
@angle:o-c-s6 @atom:o @atom:c @atom:s6
@angle:o-c-s @atom:o @atom:c @atom:s
@angle:o-c-sh @atom:o @atom:c @atom:sh
@angle:os-c-os @atom:os @atom:c @atom:os
@angle:o-c-ss @atom:o @atom:c @atom:ss
@angle:os-c-s @atom:os @atom:c @atom:s
@angle:os-c-ss @atom:os @atom:c @atom:ss
@angle:o-c-sx @atom:o @atom:c @atom:sx
@angle:o-c-sy @atom:o @atom:c @atom:sy
@angle:p2-c-p2 @atom:p2 @atom:c @atom:p2
@angle:p3-c-p3 @atom:p3 @atom:c @atom:p3
@angle:p3-c-py @atom:p3 @atom:c @atom:py
@angle:p5-c-p5 @atom:p5 @atom:c @atom:p5
@angle:ca-cp-ca @atom:ca @atom:cp @atom:ca
@angle:ca-cp-cp @atom:ca @atom:cp @atom:cp
@angle:ca-cp-na @atom:ca @atom:cp @atom:na
@angle:ca-cp-nb @atom:ca @atom:cp @atom:nb
@angle:cp-cp-cp @atom:cp @atom:cp @atom:cp
@angle:cp-cp-cq @atom:cp @atom:cp @atom:cq
@angle:cp-cp-nb @atom:cp @atom:cp @atom:nb
@angle:pe-c-pe @atom:pe @atom:c @atom:pe
@angle:pf-c-pf @atom:pf @atom:c @atom:pf
@angle:nb-cp-nb @atom:nb @atom:cp @atom:nb
@angle:py-c-py @atom:py @atom:c @atom:py
@angle:ca-cq-ca @atom:ca @atom:cq @atom:ca
@angle:ca-cq-cq @atom:ca @atom:cq @atom:cq
@angle:ca-cq-nb @atom:ca @atom:cq @atom:nb
@angle:cp-cq-cq @atom:cp @atom:cq @atom:cq
@angle:cq-cq-cq @atom:cq @atom:cq @atom:cq
@angle:cq-cq-nb @atom:cq @atom:cq @atom:nb
@angle:s4-c-s4 @atom:s4 @atom:c @atom:s4
@angle:s6-c-s6 @atom:s6 @atom:c @atom:s6
@angle:sh-c-sh @atom:sh @atom:c @atom:sh
@angle:s-c-s @atom:s @atom:c @atom:s
@angle:s-c-sh @atom:s @atom:c @atom:sh
@angle:s-c-ss @atom:s @atom:c @atom:ss
@angle:ss-c-ss @atom:ss @atom:c @atom:ss
@angle:sx-c-sx @atom:sx @atom:c @atom:sx
@angle:sy-c-sy @atom:sy @atom:c @atom:sy
@angle:c2-cu-cx @atom:c2 @atom:cu @atom:cx
@angle:c-cu-cu @atom:c @atom:cu @atom:cu
@angle:cu-cu-cx @atom:cu @atom:cu @atom:cx
@angle:cu-cu-ha @atom:cu @atom:cu @atom:ha
@angle:cv-cv-cy @atom:cv @atom:cv @atom:cy
@angle:cv-cv-ha @atom:cv @atom:cv @atom:ha
@angle:cx-cv-cx @atom:cx @atom:cv @atom:cx
@angle:cy-cv-ha @atom:cy @atom:cv @atom:ha
@angle:c1-cx-cx @atom:c1 @atom:cx @atom:cx
@angle:c2-cx-cx @atom:c2 @atom:cx @atom:cx
@angle:c2-cx-h1 @atom:c2 @atom:cx @atom:h1
@angle:c2-cx-hc @atom:c2 @atom:cx @atom:hc
@angle:c2-cx-os @atom:c2 @atom:cx @atom:os
@angle:c3-cx-c3 @atom:c3 @atom:cx @atom:c3
@angle:c3-cx-cx @atom:c3 @atom:cx @atom:cx
@angle:c3-cx-h1 @atom:c3 @atom:cx @atom:h1
@angle:c3-cx-hc @atom:c3 @atom:cx @atom:hc
@angle:c3-cx-n3 @atom:c3 @atom:cx @atom:n3
@angle:c3-cx-os @atom:c3 @atom:cx @atom:os
@angle:ca-cx-cx @atom:ca @atom:cx @atom:cx
@angle:ca-cx-h1 @atom:ca @atom:cx @atom:h1
@angle:ca-cx-hc @atom:ca @atom:cx @atom:hc
@angle:ca-cx-oh @atom:ca @atom:cx @atom:oh
@angle:ca-cx-os @atom:ca @atom:cx @atom:os
@angle:c-cx-c3 @atom:c @atom:cx @atom:c3
@angle:cc-cx-cx @atom:cc @atom:cx @atom:cx
@angle:cc-cx-hc @atom:cc @atom:cx @atom:hc
@angle:c-cx-cx @atom:c @atom:cx @atom:cx
@angle:cd-cx-cx @atom:cd @atom:cx @atom:cx
@angle:c-cx-h1 @atom:c @atom:cx @atom:h1
@angle:c-cx-hc @atom:c @atom:cx @atom:hc
@angle:cl-cx-cl @atom:cl @atom:cx @atom:cl
@angle:cl-cx-cx @atom:cl @atom:cx @atom:cx
@angle:cl-cx-h1 @atom:cl @atom:cx @atom:h1
@angle:cl-cx-hc @atom:cl @atom:cx @atom:hc
@angle:c-cx-os @atom:c @atom:cx @atom:os
@angle:cu-cx-cu @atom:cu @atom:cx @atom:cu
@angle:cu-cx-cx @atom:cu @atom:cx @atom:cx
@angle:cu-cx-hc @atom:cu @atom:cx @atom:hc
@angle:cx-cx-cx @atom:cx @atom:cx @atom:cx
@angle:cx-cx-cy @atom:cx @atom:cx @atom:cy
@angle:cx-cx-f @atom:cx @atom:cx @atom:f
@angle:cx-cx-h1 @atom:cx @atom:cx @atom:h1
@angle:cx-cx-hc @atom:cx @atom:cx @atom:hc
@angle:cx-cx-hx @atom:cx @atom:cx @atom:hx
@angle:cx-cx-n3 @atom:cx @atom:cx @atom:n3
@angle:cx-cx-na @atom:cx @atom:cx @atom:na
@angle:cx-cx-nh @atom:cx @atom:cx @atom:nh
@angle:cx-cx-os @atom:cx @atom:cx @atom:os
@angle:cy-cx-hc @atom:cy @atom:cx @atom:hc
@angle:f-cx-f @atom:f @atom:cx @atom:f
@angle:f-cx-h1 @atom:f @atom:cx @atom:h1
@angle:f-cx-hc @atom:f @atom:cx @atom:hc
@angle:h1-cx-h1 @atom:h1 @atom:cx @atom:h1
@angle:h1-cx-n3 @atom:h1 @atom:cx @atom:n3
@angle:h1-cx-n @atom:h1 @atom:cx @atom:n
@angle:h1-cx-na @atom:h1 @atom:cx @atom:na
@angle:h1-cx-nh @atom:h1 @atom:cx @atom:nh
@angle:h1-cx-os @atom:h1 @atom:cx @atom:os
@angle:h2-cx-h2 @atom:h2 @atom:cx @atom:h2
@angle:h2-cx-n2 @atom:h2 @atom:cx @atom:n2
@angle:hc-cx-hc @atom:hc @atom:cx @atom:hc
@angle:hc-cx-os @atom:hc @atom:cx @atom:os
@angle:hx-cx-n4 @atom:hx @atom:cx @atom:n4
@angle:n2-cx-n2 @atom:n2 @atom:cx @atom:n2
@angle:n-cx-oh @atom:n @atom:cx @atom:oh
@angle:n-cx-os @atom:n @atom:cx @atom:os
@angle:oh-cx-oh @atom:oh @atom:cx @atom:oh
@angle:oh-cx-os @atom:oh @atom:cx @atom:os
@angle:os-cx-os @atom:os @atom:cx @atom:os
@angle:c2-cy-cy @atom:c2 @atom:cy @atom:cy
@angle:c3-cy-c3 @atom:c3 @atom:cy @atom:c3
@angle:c3-cy-cy @atom:c3 @atom:cy @atom:cy
@angle:c3-cy-h1 @atom:c3 @atom:cy @atom:h1
@angle:c3-cy-hc @atom:c3 @atom:cy @atom:hc
@angle:c3-cy-n3 @atom:c3 @atom:cy @atom:n3
@angle:c3-cy-n @atom:c3 @atom:cy @atom:n
@angle:c3-cy-os @atom:c3 @atom:cy @atom:os
@angle:c-cy-c3 @atom:c @atom:cy @atom:c3
@angle:cc-cy-cy @atom:cc @atom:cy @atom:cy
@angle:c-cy-cy @atom:c @atom:cy @atom:cy
@angle:cd-cy-cy @atom:cd @atom:cy @atom:cy
@angle:ce-cy-h2 @atom:ce @atom:cy @atom:h2
@angle:ce-cy-n @atom:ce @atom:cy @atom:n
@angle:ce-cy-ss @atom:ce @atom:cy @atom:ss
@angle:c-cy-h1 @atom:c @atom:cy @atom:h1
@angle:c-cy-hc @atom:c @atom:cy @atom:hc
@angle:cl-cy-cy @atom:cl @atom:cy @atom:cy
@angle:cl-cy-h1 @atom:cl @atom:cy @atom:h1
@angle:cl-cy-hc @atom:cl @atom:cy @atom:hc
@angle:c-cy-n @atom:c @atom:cy @atom:n
@angle:c-cy-os @atom:c @atom:cy @atom:os
@angle:cv-cy-cy @atom:cv @atom:cy @atom:cy
@angle:cv-cy-hc @atom:cv @atom:cy @atom:hc
@angle:cx-cy-cy @atom:cx @atom:cy @atom:cy
@angle:cx-cy-hc @atom:cx @atom:cy @atom:hc
@angle:cy-cy-cy @atom:cy @atom:cy @atom:cy
@angle:cy-cy-f @atom:cy @atom:cy @atom:f
@angle:cy-cy-h1 @atom:cy @atom:cy @atom:h1
@angle:cy-cy-h2 @atom:cy @atom:cy @atom:h2
@angle:cy-cy-hc @atom:cy @atom:cy @atom:hc
@angle:cy-cy-n3 @atom:cy @atom:cy @atom:n3
@angle:cy-cy-n @atom:cy @atom:cy @atom:n
@angle:cy-cy-na @atom:cy @atom:cy @atom:na
@angle:cy-cy-oh @atom:cy @atom:cy @atom:oh
@angle:cy-cy-os @atom:cy @atom:cy @atom:os
@angle:cy-cy-s6 @atom:cy @atom:cy @atom:s6
@angle:cy-cy-ss @atom:cy @atom:cy @atom:ss
@angle:h1-cy-h1 @atom:h1 @atom:cy @atom:h1
@angle:h1-cy-n3 @atom:h1 @atom:cy @atom:n3
@angle:h1-cy-n @atom:h1 @atom:cy @atom:n
@angle:h1-cy-oh @atom:h1 @atom:cy @atom:oh
@angle:h1-cy-os @atom:h1 @atom:cy @atom:os
@angle:h1-cy-s6 @atom:h1 @atom:cy @atom:s6
@angle:h2-cy-n @atom:h2 @atom:cy @atom:n
@angle:h2-cy-os @atom:h2 @atom:cy @atom:os
@angle:h2-cy-s6 @atom:h2 @atom:cy @atom:s6
@angle:h2-cy-ss @atom:h2 @atom:cy @atom:ss
@angle:hc-cy-hc @atom:hc @atom:cy @atom:hc
@angle:n-cy-os @atom:n @atom:cy @atom:os
@angle:n-cy-s6 @atom:n @atom:cy @atom:s6
@angle:n-cy-ss @atom:n @atom:cy @atom:ss
@angle:nh-cz-nh @atom:nh @atom:cz @atom:nh
@angle:br-n1-c1 @atom:br @atom:n1 @atom:c1
@angle:c1-n1-c1 @atom:c1 @atom:n1 @atom:c1
@angle:c1-n1-c2 @atom:c1 @atom:n1 @atom:c2
@angle:c1-n1-c3 @atom:c1 @atom:n1 @atom:c3
@angle:c1-n1-ca @atom:c1 @atom:n1 @atom:ca
@angle:c1-n1-cl @atom:c1 @atom:n1 @atom:cl
@angle:c1-n1-f @atom:c1 @atom:n1 @atom:f
@angle:c1-n1-hn @atom:c1 @atom:n1 @atom:hn
@angle:c1-n1-i @atom:c1 @atom:n1 @atom:i
@angle:c1-n1-n1 @atom:c1 @atom:n1 @atom:n1
@angle:c1-n1-n2 @atom:c1 @atom:n1 @atom:n2
@angle:c1-n1-n3 @atom:c1 @atom:n1 @atom:n3
@angle:c1-n1-n4 @atom:c1 @atom:n1 @atom:n4
@angle:c1-n1-na @atom:c1 @atom:n1 @atom:na
@angle:c1-n1-nh @atom:c1 @atom:n1 @atom:nh
@angle:c1-n1-o @atom:c1 @atom:n1 @atom:o
@angle:c1-n1-oh @atom:c1 @atom:n1 @atom:oh
@angle:c1-n1-os @atom:c1 @atom:n1 @atom:os
@angle:c1-n1-p2 @atom:c1 @atom:n1 @atom:p2
@angle:c1-n1-p3 @atom:c1 @atom:n1 @atom:p3
@angle:c1-n1-p4 @atom:c1 @atom:n1 @atom:p4
@angle:c1-n1-p5 @atom:c1 @atom:n1 @atom:p5
@angle:c1-n1-s2 @atom:c1 @atom:n1 @atom:s2
@angle:c1-n1-s4 @atom:c1 @atom:n1 @atom:s4
@angle:c1-n1-s @atom:c1 @atom:n1 @atom:s
@angle:c1-n1-s6 @atom:c1 @atom:n1 @atom:s6
@angle:c1-n1-sh @atom:c1 @atom:n1 @atom:sh
@angle:c1-n1-ss @atom:c1 @atom:n1 @atom:ss
@angle:c2-n1-n1 @atom:c2 @atom:n1 @atom:n1
@angle:c2-n1-o @atom:c2 @atom:n1 @atom:o
@angle:c2-n1-s @atom:c2 @atom:n1 @atom:s
@angle:c3-n1-n1 @atom:c3 @atom:n1 @atom:n1
@angle:ca-n1-n1 @atom:ca @atom:n1 @atom:n1
@angle:ce-n1-o @atom:ce @atom:n1 @atom:o
@angle:ce-n1-s @atom:ce @atom:n1 @atom:s
@angle:cf-n1-o @atom:cf @atom:n1 @atom:o
@angle:cf-n1-s @atom:cf @atom:n1 @atom:s
@angle:cl-n1-n1 @atom:cl @atom:n1 @atom:n1
@angle:f-n1-n1 @atom:f @atom:n1 @atom:n1
@angle:hn-n1-n1 @atom:hn @atom:n1 @atom:n1
@angle:i-n1-n1 @atom:i @atom:n1 @atom:n1
@angle:n1-n1-n1 @atom:n1 @atom:n1 @atom:n1
@angle:n1-n1-n2 @atom:n1 @atom:n1 @atom:n2
@angle:n1-n1-n3 @atom:n1 @atom:n1 @atom:n3
@angle:n1-n1-n4 @atom:n1 @atom:n1 @atom:n4
@angle:n1-n1-na @atom:n1 @atom:n1 @atom:na
@angle:n1-n1-nh @atom:n1 @atom:n1 @atom:nh
@angle:n1-n1-o @atom:n1 @atom:n1 @atom:o
@angle:n1-n1-oh @atom:n1 @atom:n1 @atom:oh
@angle:n1-n1-os @atom:n1 @atom:n1 @atom:os
@angle:n1-n1-p2 @atom:n1 @atom:n1 @atom:p2
@angle:n1-n1-p3 @atom:n1 @atom:n1 @atom:p3
@angle:n1-n1-s @atom:n1 @atom:n1 @atom:s
@angle:n1-n1-sh @atom:n1 @atom:n1 @atom:sh
@angle:n1-n1-ss @atom:n1 @atom:n1 @atom:ss
@angle:o-n1-p2 @atom:o @atom:n1 @atom:p2
@angle:p2-n1-s @atom:p2 @atom:n1 @atom:s
@angle:br-n2-br @atom:br @atom:n2 @atom:br
@angle:br-n2-c2 @atom:br @atom:n2 @atom:c2
@angle:br-n2-n2 @atom:br @atom:n2 @atom:n2
@angle:br-n2-o @atom:br @atom:n2 @atom:o
@angle:br-n2-p2 @atom:br @atom:n2 @atom:p2
@angle:br-n2-s @atom:br @atom:n2 @atom:s
@angle:c1-n2-c1 @atom:c1 @atom:n2 @atom:c1
@angle:c1-n2-c3 @atom:c1 @atom:n2 @atom:c3
@angle:c1-n2-cl @atom:c1 @atom:n2 @atom:cl
@angle:c1-n2-hn @atom:c1 @atom:n2 @atom:hn
@angle:c1-n2-n2 @atom:c1 @atom:n2 @atom:n2
@angle:c1-n2-o @atom:c1 @atom:n2 @atom:o
@angle:c1-n2-p2 @atom:c1 @atom:n2 @atom:p2
@angle:c1-n2-s @atom:c1 @atom:n2 @atom:s
@angle:c2-n2-c2 @atom:c2 @atom:n2 @atom:c2
@angle:c2-n2-c3 @atom:c2 @atom:n2 @atom:c3
@angle:c2-n2-ca @atom:c2 @atom:n2 @atom:ca
@angle:c2-n2-cl @atom:c2 @atom:n2 @atom:cl
@angle:c2-n2-f @atom:c2 @atom:n2 @atom:f
@angle:c2-n2-hn @atom:c2 @atom:n2 @atom:hn
@angle:c2-n2-i @atom:c2 @atom:n2 @atom:i
@angle:c2-n2-n1 @atom:c2 @atom:n2 @atom:n1
@angle:c2-n2-n2 @atom:c2 @atom:n2 @atom:n2
@angle:c2-n2-n3 @atom:c2 @atom:n2 @atom:n3
@angle:c2-n2-n4 @atom:c2 @atom:n2 @atom:n4
@angle:c2-n2-n @atom:c2 @atom:n2 @atom:n
@angle:c2-n2-na @atom:c2 @atom:n2 @atom:na
@angle:c2-n2-nh @atom:c2 @atom:n2 @atom:nh
@angle:c2-n2-no @atom:c2 @atom:n2 @atom:no
@angle:c2-n2-o @atom:c2 @atom:n2 @atom:o
@angle:c2-n2-oh @atom:c2 @atom:n2 @atom:oh
@angle:c2-n2-os @atom:c2 @atom:n2 @atom:os
@angle:c2-n2-p2 @atom:c2 @atom:n2 @atom:p2
@angle:c2-n2-p3 @atom:c2 @atom:n2 @atom:p3
@angle:c2-n2-p4 @atom:c2 @atom:n2 @atom:p4
@angle:c2-n2-s4 @atom:c2 @atom:n2 @atom:s4
@angle:c2-n2-s6 @atom:c2 @atom:n2 @atom:s6
@angle:c2-n2-s @atom:c2 @atom:n2 @atom:s
@angle:c2-n2-sh @atom:c2 @atom:n2 @atom:sh
@angle:c2-n2-ss @atom:c2 @atom:n2 @atom:ss
@angle:c3-n2-c3 @atom:c3 @atom:n2 @atom:c3
@angle:c3-n2-ca @atom:c3 @atom:n2 @atom:ca
@angle:c3-n2-ce @atom:c3 @atom:n2 @atom:ce
@angle:c3-n2-cf @atom:c3 @atom:n2 @atom:cf
@angle:c3-n2-hn @atom:c3 @atom:n2 @atom:hn
@angle:c3-n2-n1 @atom:c3 @atom:n2 @atom:n1
@angle:c3-n2-n2 @atom:c3 @atom:n2 @atom:n2
@angle:c3-n2-nh @atom:c3 @atom:n2 @atom:nh
@angle:c3-n2-o @atom:c3 @atom:n2 @atom:o
@angle:c3-n2-p2 @atom:c3 @atom:n2 @atom:p2
@angle:c3-n2-s6 @atom:c3 @atom:n2 @atom:s6
@angle:c3-n2-s @atom:c3 @atom:n2 @atom:s
@angle:ca-n2-ca @atom:ca @atom:n2 @atom:ca
@angle:ca-n2-hn @atom:ca @atom:n2 @atom:hn
@angle:ca-n2-n2 @atom:ca @atom:n2 @atom:n2
@angle:ca-n2-o @atom:ca @atom:n2 @atom:o
@angle:ca-n2-p2 @atom:ca @atom:n2 @atom:p2
@angle:ca-n2-s @atom:ca @atom:n2 @atom:s
@angle:c-n2-c2 @atom:c @atom:n2 @atom:c2
@angle:c-n2-c @atom:c @atom:n2 @atom:c
@angle:c-n2-ca @atom:c @atom:n2 @atom:ca
@angle:cc-n2-cl @atom:cc @atom:n2 @atom:cl
@angle:cc-n2-hn @atom:cc @atom:n2 @atom:hn
@angle:cc-n2-na @atom:cc @atom:n2 @atom:na
@angle:cc-n2-nh @atom:cc @atom:n2 @atom:nh
@angle:cd-n2-cl @atom:cd @atom:n2 @atom:cl
@angle:cd-n2-hn @atom:cd @atom:n2 @atom:hn
@angle:ce-n2-hn @atom:ce @atom:n2 @atom:hn
@angle:ce-n2-n @atom:ce @atom:n2 @atom:n
@angle:ce-n2-nh @atom:ce @atom:n2 @atom:nh
@angle:ce-n2-o @atom:ce @atom:n2 @atom:o
@angle:ce-n2-oh @atom:ce @atom:n2 @atom:oh
@angle:ce-n2-os @atom:ce @atom:n2 @atom:os
@angle:ce-n2-s @atom:ce @atom:n2 @atom:s
@angle:cf-n2-hn @atom:cf @atom:n2 @atom:hn
@angle:cf-n2-n @atom:cf @atom:n2 @atom:n
@angle:cf-n2-nh @atom:cf @atom:n2 @atom:nh
@angle:cf-n2-o @atom:cf @atom:n2 @atom:o
@angle:cf-n2-oh @atom:cf @atom:n2 @atom:oh
@angle:cf-n2-os @atom:cf @atom:n2 @atom:os
@angle:cf-n2-s @atom:cf @atom:n2 @atom:s
@angle:cl-n2-n1 @atom:cl @atom:n2 @atom:n1
@angle:cl-n2-n2 @atom:cl @atom:n2 @atom:n2
@angle:cl-n2-o @atom:cl @atom:n2 @atom:o
@angle:cl-n2-p2 @atom:cl @atom:n2 @atom:p2
@angle:cl-n2-s @atom:cl @atom:n2 @atom:s
@angle:cx-n2-n2 @atom:cx @atom:n2 @atom:n2
@angle:f-n2-n2 @atom:f @atom:n2 @atom:n2
@angle:f-n2-o @atom:f @atom:n2 @atom:o
@angle:f-n2-p2 @atom:f @atom:n2 @atom:p2
@angle:f-n2-s @atom:f @atom:n2 @atom:s
@angle:hn-n2-hn @atom:hn @atom:n2 @atom:hn
@angle:hn-n2-n1 @atom:hn @atom:n2 @atom:n1
@angle:hn-n2-n2 @atom:hn @atom:n2 @atom:n2
@angle:hn-n2-ne @atom:hn @atom:n2 @atom:ne
@angle:hn-n2-nf @atom:hn @atom:n2 @atom:nf
@angle:hn-n2-o @atom:hn @atom:n2 @atom:o
@angle:hn-n2-p2 @atom:hn @atom:n2 @atom:p2
@angle:hn-n2-p4 @atom:hn @atom:n2 @atom:p4
@angle:hn-n2-p5 @atom:hn @atom:n2 @atom:p5
@angle:hn-n2-pe @atom:hn @atom:n2 @atom:pe
@angle:hn-n2-pf @atom:hn @atom:n2 @atom:pf
@angle:hn-n2-s2 @atom:hn @atom:n2 @atom:s2
@angle:hn-n2-s4 @atom:hn @atom:n2 @atom:s4
@angle:hn-n2-s @atom:hn @atom:n2 @atom:s
@angle:hn-n2-s6 @atom:hn @atom:n2 @atom:s6
@angle:i-n2-n2 @atom:i @atom:n2 @atom:n2
@angle:i-n2-o @atom:i @atom:n2 @atom:o
@angle:i-n2-p2 @atom:i @atom:n2 @atom:p2
@angle:i-n2-s @atom:i @atom:n2 @atom:s
@angle:n1-n2-n1 @atom:n1 @atom:n2 @atom:n1
@angle:n2-n2-n1 @atom:n2 @atom:n2 @atom:n1
@angle:n2-n2-n2 @atom:n2 @atom:n2 @atom:n2
@angle:n2-n2-n3 @atom:n2 @atom:n2 @atom:n3
@angle:n2-n2-n4 @atom:n2 @atom:n2 @atom:n4
@angle:n2-n2-na @atom:n2 @atom:n2 @atom:na
@angle:n2-n2-nh @atom:n2 @atom:n2 @atom:nh
@angle:n2-n2-no @atom:n2 @atom:n2 @atom:no
@angle:n2-n2-o @atom:n2 @atom:n2 @atom:o
@angle:n2-n2-oh @atom:n2 @atom:n2 @atom:oh
@angle:n2-n2-os @atom:n2 @atom:n2 @atom:os
@angle:n2-n2-p2 @atom:n2 @atom:n2 @atom:p2
@angle:n2-n2-p3 @atom:n2 @atom:n2 @atom:p3
@angle:n2-n2-p4 @atom:n2 @atom:n2 @atom:p4
@angle:n2-n2-p5 @atom:n2 @atom:n2 @atom:p5
@angle:n2-n2-s4 @atom:n2 @atom:n2 @atom:s4
@angle:n2-n2-s6 @atom:n2 @atom:n2 @atom:s6
@angle:n2-n2-s @atom:n2 @atom:n2 @atom:s
@angle:n2-n2-sh @atom:n2 @atom:n2 @atom:sh
@angle:n2-n2-ss @atom:n2 @atom:n2 @atom:ss
@angle:n3-n2-n3 @atom:n3 @atom:n2 @atom:n3
@angle:n3-n2-o @atom:n3 @atom:n2 @atom:o
@angle:n3-n2-p2 @atom:n3 @atom:n2 @atom:p2
@angle:n3-n2-s @atom:n3 @atom:n2 @atom:s
@angle:n4-n2-n4 @atom:n4 @atom:n2 @atom:n4
@angle:n4-n2-o @atom:n4 @atom:n2 @atom:o
@angle:n4-n2-p2 @atom:n4 @atom:n2 @atom:p2
@angle:n4-n2-s @atom:n4 @atom:n2 @atom:s
@angle:na-n2-na @atom:na @atom:n2 @atom:na
@angle:na-n2-o @atom:na @atom:n2 @atom:o
@angle:na-n2-p2 @atom:na @atom:n2 @atom:p2
@angle:na-n2-s @atom:na @atom:n2 @atom:s
@angle:ne-n2-nh @atom:ne @atom:n2 @atom:nh
@angle:ne-n2-o @atom:ne @atom:n2 @atom:o
@angle:ne-n2-s @atom:ne @atom:n2 @atom:s
@angle:nf-n2-nh @atom:nf @atom:n2 @atom:nh
@angle:nf-n2-o @atom:nf @atom:n2 @atom:o
@angle:nf-n2-s @atom:nf @atom:n2 @atom:s
@angle:nh-n2-nh @atom:nh @atom:n2 @atom:nh
@angle:nh-n2-o @atom:nh @atom:n2 @atom:o
@angle:nh-n2-p2 @atom:nh @atom:n2 @atom:p2
@angle:nh-n2-s @atom:nh @atom:n2 @atom:s
@angle:n-n2-n2 @atom:n @atom:n2 @atom:n2
@angle:n-n2-o @atom:n @atom:n2 @atom:o
@angle:no-n2-no @atom:no @atom:n2 @atom:no
@angle:no-n2-o @atom:no @atom:n2 @atom:o
@angle:no-n2-p2 @atom:no @atom:n2 @atom:p2
@angle:n-n2-p2 @atom:n @atom:n2 @atom:p2
@angle:n-n2-s @atom:n @atom:n2 @atom:s
@angle:oh-n2-oh @atom:oh @atom:n2 @atom:oh
@angle:oh-n2-p2 @atom:oh @atom:n2 @atom:p2
@angle:oh-n2-s @atom:oh @atom:n2 @atom:s
@angle:o-n2-o @atom:o @atom:n2 @atom:o
@angle:o-n2-oh @atom:o @atom:n2 @atom:oh
@angle:o-n2-os @atom:o @atom:n2 @atom:os
@angle:o-n2-p2 @atom:o @atom:n2 @atom:p2
@angle:o-n2-p3 @atom:o @atom:n2 @atom:p3
@angle:o-n2-p4 @atom:o @atom:n2 @atom:p4
@angle:o-n2-p5 @atom:o @atom:n2 @atom:p5
@angle:o-n2-pe @atom:o @atom:n2 @atom:pe
@angle:o-n2-pf @atom:o @atom:n2 @atom:pf
@angle:o-n2-s4 @atom:o @atom:n2 @atom:s4
@angle:o-n2-s6 @atom:o @atom:n2 @atom:s6
@angle:o-n2-s @atom:o @atom:n2 @atom:s
@angle:o-n2-sh @atom:o @atom:n2 @atom:sh
@angle:os-n2-os @atom:os @atom:n2 @atom:os
@angle:os-n2-p2 @atom:os @atom:n2 @atom:p2
@angle:o-n2-ss @atom:o @atom:n2 @atom:ss
@angle:os-n2-s @atom:os @atom:n2 @atom:s
@angle:p2-n2-p2 @atom:p2 @atom:n2 @atom:p2
@angle:p2-n2-p3 @atom:p2 @atom:n2 @atom:p3
@angle:p2-n2-p4 @atom:p2 @atom:n2 @atom:p4
@angle:p2-n2-p5 @atom:p2 @atom:n2 @atom:p5
@angle:p2-n2-s4 @atom:p2 @atom:n2 @atom:s4
@angle:p2-n2-s6 @atom:p2 @atom:n2 @atom:s6
@angle:p2-n2-s @atom:p2 @atom:n2 @atom:s
@angle:p2-n2-sh @atom:p2 @atom:n2 @atom:sh
@angle:p2-n2-ss @atom:p2 @atom:n2 @atom:ss
@angle:p3-n2-p3 @atom:p3 @atom:n2 @atom:p3
@angle:p3-n2-s @atom:p3 @atom:n2 @atom:s
@angle:p4-n2-s @atom:p4 @atom:n2 @atom:s
@angle:p5-n2-p5 @atom:p5 @atom:n2 @atom:p5
@angle:p5-n2-s @atom:p5 @atom:n2 @atom:s
@angle:pe-n2-s @atom:pe @atom:n2 @atom:s
@angle:pf-n2-s @atom:pf @atom:n2 @atom:s
@angle:s4-n2-s4 @atom:s4 @atom:n2 @atom:s4
@angle:s4-n2-s6 @atom:s4 @atom:n2 @atom:s6
@angle:s6-n2-s6 @atom:s6 @atom:n2 @atom:s6
@angle:sh-n2-sh @atom:sh @atom:n2 @atom:sh
@angle:sh-n2-ss @atom:sh @atom:n2 @atom:ss
@angle:s-n2-s @atom:s @atom:n2 @atom:s
@angle:s-n2-s4 @atom:s @atom:n2 @atom:s4
@angle:s-n2-s6 @atom:s @atom:n2 @atom:s6
@angle:s-n2-sh @atom:s @atom:n2 @atom:sh
@angle:s-n2-ss @atom:s @atom:n2 @atom:ss
@angle:ss-n2-ss @atom:ss @atom:n2 @atom:ss
@angle:br-n3-br @atom:br @atom:n3 @atom:br
@angle:br-n3-c3 @atom:br @atom:n3 @atom:c3
@angle:c1-n3-c1 @atom:c1 @atom:n3 @atom:c1
@angle:c1-n3-f @atom:c1 @atom:n3 @atom:f
@angle:c1-n3-hn @atom:c1 @atom:n3 @atom:hn
@angle:c1-n3-o @atom:c1 @atom:n3 @atom:o
@angle:c2-n3-c2 @atom:c2 @atom:n3 @atom:c2
@angle:c2-n3-hn @atom:c2 @atom:n3 @atom:hn
@angle:c3-n3-c3 @atom:c3 @atom:n3 @atom:c3
@angle:c3-n3-cl @atom:c3 @atom:n3 @atom:cl
@angle:c3-n3-cx @atom:c3 @atom:n3 @atom:cx
@angle:c3-n3-cy @atom:c3 @atom:n3 @atom:cy
@angle:c3-n3-f @atom:c3 @atom:n3 @atom:f
@angle:c3-n3-hn @atom:c3 @atom:n3 @atom:hn
@angle:c3-n3-i @atom:c3 @atom:n3 @atom:i
@angle:c3-n3-n2 @atom:c3 @atom:n3 @atom:n2
@angle:c3-n3-n3 @atom:c3 @atom:n3 @atom:n3
@angle:c3-n3-n4 @atom:c3 @atom:n3 @atom:n4
@angle:c3-n3-n @atom:c3 @atom:n3 @atom:n
@angle:c3-n3-nh @atom:c3 @atom:n3 @atom:nh
@angle:c3-n3-no @atom:c3 @atom:n3 @atom:no
@angle:c3-n3-o @atom:c3 @atom:n3 @atom:o
@angle:c3-n3-oh @atom:c3 @atom:n3 @atom:oh
@angle:c3-n3-os @atom:c3 @atom:n3 @atom:os
@angle:c3-n3-p3 @atom:c3 @atom:n3 @atom:p3
@angle:c3-n3-p5 @atom:c3 @atom:n3 @atom:p5
@angle:c3-n3-s4 @atom:c3 @atom:n3 @atom:s4
@angle:c3-n3-s6 @atom:c3 @atom:n3 @atom:s6
@angle:c3-n3-s @atom:c3 @atom:n3 @atom:s
@angle:c3-n3-sh @atom:c3 @atom:n3 @atom:sh
@angle:c3-n3-ss @atom:c3 @atom:n3 @atom:ss
@angle:c3-n3-sy @atom:c3 @atom:n3 @atom:sy
@angle:cl-n3-cl @atom:cl @atom:n3 @atom:cl
@angle:cl-n3-hn @atom:cl @atom:n3 @atom:hn
@angle:cl-n3-n3 @atom:cl @atom:n3 @atom:n3
@angle:cx-n3-cx @atom:cx @atom:n3 @atom:cx
@angle:cx-n3-hn @atom:cx @atom:n3 @atom:hn
@angle:cx-n3-p5 @atom:cx @atom:n3 @atom:p5
@angle:cx-n3-py @atom:cx @atom:n3 @atom:py
@angle:cy-n3-cy @atom:cy @atom:n3 @atom:cy
@angle:cy-n3-hn @atom:cy @atom:n3 @atom:hn
@angle:f-n3-f @atom:f @atom:n3 @atom:f
@angle:f-n3-hn @atom:f @atom:n3 @atom:hn
@angle:hn-n3-hn @atom:hn @atom:n3 @atom:hn
@angle:hn-n3-i @atom:hn @atom:n3 @atom:i
@angle:hn-n3-n1 @atom:hn @atom:n3 @atom:n1
@angle:hn-n3-n2 @atom:hn @atom:n3 @atom:n2
@angle:hn-n3-n3 @atom:hn @atom:n3 @atom:n3
@angle:hn-n3-n4 @atom:hn @atom:n3 @atom:n4
@angle:hn-n3-n @atom:hn @atom:n3 @atom:n
@angle:hn-n3-na @atom:hn @atom:n3 @atom:na
@angle:hn-n3-nh @atom:hn @atom:n3 @atom:nh
@angle:hn-n3-no @atom:hn @atom:n3 @atom:no
@angle:hn-n3-o @atom:hn @atom:n3 @atom:o
@angle:hn-n3-oh @atom:hn @atom:n3 @atom:oh
@angle:hn-n3-os @atom:hn @atom:n3 @atom:os
@angle:hn-n3-p2 @atom:hn @atom:n3 @atom:p2
@angle:hn-n3-p3 @atom:hn @atom:n3 @atom:p3
@angle:hn-n3-p4 @atom:hn @atom:n3 @atom:p4
@angle:hn-n3-p5 @atom:hn @atom:n3 @atom:p5
@angle:hn-n3-s4 @atom:hn @atom:n3 @atom:s4
@angle:hn-n3-s @atom:hn @atom:n3 @atom:s
@angle:hn-n3-s6 @atom:hn @atom:n3 @atom:s6
@angle:hn-n3-sh @atom:hn @atom:n3 @atom:sh
@angle:hn-n3-ss @atom:hn @atom:n3 @atom:ss
@angle:hn-n3-sy @atom:hn @atom:n3 @atom:sy
@angle:i-n3-i @atom:i @atom:n3 @atom:i
@angle:n1-n3-n1 @atom:n1 @atom:n3 @atom:n1
@angle:n2-n3-n2 @atom:n2 @atom:n3 @atom:n2
@angle:n2-n3-o @atom:n2 @atom:n3 @atom:o
@angle:n3-n3-n3 @atom:n3 @atom:n3 @atom:n3
@angle:n4-n3-n4 @atom:n4 @atom:n3 @atom:n4
@angle:n4-n3-nh @atom:n4 @atom:n3 @atom:nh
@angle:na-n3-na @atom:na @atom:n3 @atom:na
@angle:nh-n3-nh @atom:nh @atom:n3 @atom:nh
@angle:n-n3-n @atom:n @atom:n3 @atom:n
@angle:no-n3-no @atom:no @atom:n3 @atom:no
@angle:oh-n3-oh @atom:oh @atom:n3 @atom:oh
@angle:o-n3-o @atom:o @atom:n3 @atom:o
@angle:o-n3-p2 @atom:o @atom:n3 @atom:p2
@angle:o-n3-p4 @atom:o @atom:n3 @atom:p4
@angle:o-n3-s4 @atom:o @atom:n3 @atom:s4
@angle:o-n3-s6 @atom:o @atom:n3 @atom:s6
@angle:o-n3-s @atom:o @atom:n3 @atom:s
@angle:os-n3-os @atom:os @atom:n3 @atom:os
@angle:p2-n3-p2 @atom:p2 @atom:n3 @atom:p2
@angle:p3-n3-p3 @atom:p3 @atom:n3 @atom:p3
@angle:p4-n3-p4 @atom:p4 @atom:n3 @atom:p4
@angle:p5-n3-p5 @atom:p5 @atom:n3 @atom:p5
@angle:s4-n3-s4 @atom:s4 @atom:n3 @atom:s4
@angle:s4-n3-s6 @atom:s4 @atom:n3 @atom:s6
@angle:s6-n3-s6 @atom:s6 @atom:n3 @atom:s6
@angle:sh-n3-sh @atom:sh @atom:n3 @atom:sh
@angle:sh-n3-ss @atom:sh @atom:n3 @atom:ss
@angle:s-n3-s @atom:s @atom:n3 @atom:s
@angle:ss-n3-ss @atom:ss @atom:n3 @atom:ss
@angle:br-n4-br @atom:br @atom:n4 @atom:br
@angle:br-n4-hn @atom:br @atom:n4 @atom:hn
@angle:c1-n4-c1 @atom:c1 @atom:n4 @atom:c1
@angle:c1-n4-hn @atom:c1 @atom:n4 @atom:hn
@angle:c2-n4-c2 @atom:c2 @atom:n4 @atom:c2
@angle:c2-n4-c3 @atom:c2 @atom:n4 @atom:c3
@angle:c2-n4-hn @atom:c2 @atom:n4 @atom:hn
@angle:c3-n4-c3 @atom:c3 @atom:n4 @atom:c3
@angle:c3-n4-ca @atom:c3 @atom:n4 @atom:ca
@angle:c3-n4-cc @atom:c3 @atom:n4 @atom:cc
@angle:c3-n4-cl @atom:c3 @atom:n4 @atom:cl
@angle:c3-n4-hn @atom:c3 @atom:n4 @atom:hn
@angle:c3-n4-n3 @atom:c3 @atom:n4 @atom:n3
@angle:c3-n4-n4 @atom:c3 @atom:n4 @atom:n4
@angle:c3-n4-n @atom:c3 @atom:n4 @atom:n
@angle:c3-n4-nh @atom:c3 @atom:n4 @atom:nh
@angle:c3-n4-no @atom:c3 @atom:n4 @atom:no
@angle:c3-n4-o @atom:c3 @atom:n4 @atom:o
@angle:c3-n4-oh @atom:c3 @atom:n4 @atom:oh
@angle:c3-n4-os @atom:c3 @atom:n4 @atom:os
@angle:c3-n4-p2 @atom:c3 @atom:n4 @atom:p2
@angle:c3-n4-p3 @atom:c3 @atom:n4 @atom:p3
@angle:c3-n4-p5 @atom:c3 @atom:n4 @atom:p5
@angle:c3-n4-s4 @atom:c3 @atom:n4 @atom:s4
@angle:c3-n4-s6 @atom:c3 @atom:n4 @atom:s6
@angle:c3-n4-s @atom:c3 @atom:n4 @atom:s
@angle:c3-n4-sh @atom:c3 @atom:n4 @atom:sh
@angle:c3-n4-ss @atom:c3 @atom:n4 @atom:ss
@angle:ca-n4-ca @atom:ca @atom:n4 @atom:ca
@angle:ca-n4-hn @atom:ca @atom:n4 @atom:hn
@angle:c-n4-c @atom:c @atom:n4 @atom:c
@angle:c-n4-hn @atom:c @atom:n4 @atom:hn
@angle:cl-n4-cl @atom:cl @atom:n4 @atom:cl
@angle:cl-n4-hn @atom:cl @atom:n4 @atom:hn
@angle:f-n4-f @atom:f @atom:n4 @atom:f
@angle:f-n4-hn @atom:f @atom:n4 @atom:hn
@angle:hn-n4-hn @atom:hn @atom:n4 @atom:hn
@angle:hn-n4-i @atom:hn @atom:n4 @atom:i
@angle:hn-n4-n1 @atom:hn @atom:n4 @atom:n1
@angle:hn-n4-n2 @atom:hn @atom:n4 @atom:n2
@angle:hn-n4-n3 @atom:hn @atom:n4 @atom:n3
@angle:hn-n4-n4 @atom:hn @atom:n4 @atom:n4
@angle:hn-n4-n @atom:hn @atom:n4 @atom:n
@angle:hn-n4-na @atom:hn @atom:n4 @atom:na
@angle:hn-n4-nh @atom:hn @atom:n4 @atom:nh
@angle:hn-n4-no @atom:hn @atom:n4 @atom:no
@angle:hn-n4-o @atom:hn @atom:n4 @atom:o
@angle:hn-n4-oh @atom:hn @atom:n4 @atom:oh
@angle:hn-n4-os @atom:hn @atom:n4 @atom:os
@angle:hn-n4-p2 @atom:hn @atom:n4 @atom:p2
@angle:hn-n4-p3 @atom:hn @atom:n4 @atom:p3
@angle:hn-n4-p4 @atom:hn @atom:n4 @atom:p4
@angle:hn-n4-p5 @atom:hn @atom:n4 @atom:p5
@angle:hn-n4-py @atom:hn @atom:n4 @atom:py
@angle:hn-n4-s4 @atom:hn @atom:n4 @atom:s4
@angle:hn-n4-s @atom:hn @atom:n4 @atom:s
@angle:hn-n4-s6 @atom:hn @atom:n4 @atom:s6
@angle:hn-n4-sh @atom:hn @atom:n4 @atom:sh
@angle:hn-n4-ss @atom:hn @atom:n4 @atom:ss
@angle:i-n4-i @atom:i @atom:n4 @atom:i
@angle:n1-n4-n1 @atom:n1 @atom:n4 @atom:n1
@angle:n2-n4-n2 @atom:n2 @atom:n4 @atom:n2
@angle:n3-n4-n3 @atom:n3 @atom:n4 @atom:n3
@angle:n4-n4-n4 @atom:n4 @atom:n4 @atom:n4
@angle:na-n4-na @atom:na @atom:n4 @atom:na
@angle:nh-n4-nh @atom:nh @atom:n4 @atom:nh
@angle:n-n4-n @atom:n @atom:n4 @atom:n
@angle:oh-n4-oh @atom:oh @atom:n4 @atom:oh
@angle:o-n4-o @atom:o @atom:n4 @atom:o
@angle:os-n4-os @atom:os @atom:n4 @atom:os
@angle:p2-n4-p2 @atom:p2 @atom:n4 @atom:p2
@angle:p3-n4-p3 @atom:p3 @atom:n4 @atom:p3
@angle:p5-n4-p5 @atom:p5 @atom:n4 @atom:p5
@angle:py-n4-py @atom:py @atom:n4 @atom:py
@angle:s4-n4-s4 @atom:s4 @atom:n4 @atom:s4
@angle:s6-n4-s6 @atom:s6 @atom:n4 @atom:s6
@angle:sh-n4-sh @atom:sh @atom:n4 @atom:sh
@angle:s-n4-s @atom:s @atom:n4 @atom:s
@angle:ss-n4-ss @atom:ss @atom:n4 @atom:ss
@angle:br-na-br @atom:br @atom:na @atom:br
@angle:br-na-c2 @atom:br @atom:na @atom:c2
@angle:br-na-ca @atom:br @atom:na @atom:ca
@angle:br-na-cc @atom:br @atom:na @atom:cc
@angle:br-na-cd @atom:br @atom:na @atom:cd
@angle:br-na-nc @atom:br @atom:na @atom:nc
@angle:br-na-nd @atom:br @atom:na @atom:nd
@angle:br-na-os @atom:br @atom:na @atom:os
@angle:br-na-p2 @atom:br @atom:na @atom:p2
@angle:br-na-pc @atom:br @atom:na @atom:pc
@angle:br-na-pd @atom:br @atom:na @atom:pd
@angle:br-na-ss @atom:br @atom:na @atom:ss
@angle:c1-na-c1 @atom:c1 @atom:na @atom:c1
@angle:c1-na-c2 @atom:c1 @atom:na @atom:c2
@angle:c1-na-ca @atom:c1 @atom:na @atom:ca
@angle:c1-na-cc @atom:c1 @atom:na @atom:cc
@angle:c1-na-cd @atom:c1 @atom:na @atom:cd
@angle:c1-na-nc @atom:c1 @atom:na @atom:nc
@angle:c1-na-nd @atom:c1 @atom:na @atom:nd
@angle:c1-na-os @atom:c1 @atom:na @atom:os
@angle:c1-na-p2 @atom:c1 @atom:na @atom:p2
@angle:c1-na-pc @atom:c1 @atom:na @atom:pc
@angle:c1-na-pd @atom:c1 @atom:na @atom:pd
@angle:c1-na-ss @atom:c1 @atom:na @atom:ss
@angle:c2-na-c2 @atom:c2 @atom:na @atom:c2
@angle:c2-na-c3 @atom:c2 @atom:na @atom:c3
@angle:c2-na-ca @atom:c2 @atom:na @atom:ca
@angle:c2-na-cc @atom:c2 @atom:na @atom:cc
@angle:c2-na-cd @atom:c2 @atom:na @atom:cd
@angle:c2-na-cl @atom:c2 @atom:na @atom:cl
@angle:c2-na-f @atom:c2 @atom:na @atom:f
@angle:c2-na-hn @atom:c2 @atom:na @atom:hn
@angle:c2-na-i @atom:c2 @atom:na @atom:i
@angle:c2-na-n1 @atom:c2 @atom:na @atom:n1
@angle:c2-na-n2 @atom:c2 @atom:na @atom:n2
@angle:c2-na-n3 @atom:c2 @atom:na @atom:n3
@angle:c2-na-n4 @atom:c2 @atom:na @atom:n4
@angle:c2-na-n @atom:c2 @atom:na @atom:n
@angle:c2-na-na @atom:c2 @atom:na @atom:na
@angle:c2-na-nc @atom:c2 @atom:na @atom:nc
@angle:c2-na-nd @atom:c2 @atom:na @atom:nd
@angle:c2-na-nh @atom:c2 @atom:na @atom:nh
@angle:c2-na-no @atom:c2 @atom:na @atom:no
@angle:c2-na-o @atom:c2 @atom:na @atom:o
@angle:c2-na-oh @atom:c2 @atom:na @atom:oh
@angle:c2-na-os @atom:c2 @atom:na @atom:os
@angle:c2-na-p2 @atom:c2 @atom:na @atom:p2
@angle:c2-na-p3 @atom:c2 @atom:na @atom:p3
@angle:c2-na-p4 @atom:c2 @atom:na @atom:p4
@angle:c2-na-p5 @atom:c2 @atom:na @atom:p5
@angle:c2-na-pc @atom:c2 @atom:na @atom:pc
@angle:c2-na-pd @atom:c2 @atom:na @atom:pd
@angle:c2-na-s4 @atom:c2 @atom:na @atom:s4
@angle:c2-na-s6 @atom:c2 @atom:na @atom:s6
@angle:c2-na-s @atom:c2 @atom:na @atom:s
@angle:c2-na-sh @atom:c2 @atom:na @atom:sh
@angle:c2-na-ss @atom:c2 @atom:na @atom:ss
@angle:c3-na-c3 @atom:c3 @atom:na @atom:c3
@angle:c3-na-ca @atom:c3 @atom:na @atom:ca
@angle:c3-na-cc @atom:c3 @atom:na @atom:cc
@angle:c3-na-cd @atom:c3 @atom:na @atom:cd
@angle:c3-na-cp @atom:c3 @atom:na @atom:cp
@angle:c3-na-n2 @atom:c3 @atom:na @atom:n2
@angle:c3-na-n @atom:c3 @atom:na @atom:n
@angle:c3-na-nc @atom:c3 @atom:na @atom:nc
@angle:c3-na-nd @atom:c3 @atom:na @atom:nd
@angle:c3-na-os @atom:c3 @atom:na @atom:os
@angle:c3-na-p2 @atom:c3 @atom:na @atom:p2
@angle:c3-na-pc @atom:c3 @atom:na @atom:pc
@angle:c3-na-pd @atom:c3 @atom:na @atom:pd
@angle:c3-na-sh @atom:c3 @atom:na @atom:sh
@angle:c3-na-ss @atom:c3 @atom:na @atom:ss
@angle:ca-na-ca @atom:ca @atom:na @atom:ca
@angle:ca-na-cc @atom:ca @atom:na @atom:cc
@angle:ca-na-cd @atom:ca @atom:na @atom:cd
@angle:ca-na-cl @atom:ca @atom:na @atom:cl
@angle:ca-na-cp @atom:ca @atom:na @atom:cp
@angle:ca-na-cx @atom:ca @atom:na @atom:cx
@angle:ca-na-f @atom:ca @atom:na @atom:f
@angle:ca-na-hn @atom:ca @atom:na @atom:hn
@angle:ca-na-i @atom:ca @atom:na @atom:i
@angle:ca-na-n2 @atom:ca @atom:na @atom:n2
@angle:ca-na-n4 @atom:ca @atom:na @atom:n4
@angle:ca-na-n @atom:ca @atom:na @atom:n
@angle:ca-na-na @atom:ca @atom:na @atom:na
@angle:ca-na-nb @atom:ca @atom:na @atom:nb
@angle:ca-na-nc @atom:ca @atom:na @atom:nc
@angle:ca-na-nd @atom:ca @atom:na @atom:nd
@angle:ca-na-nh @atom:ca @atom:na @atom:nh
@angle:ca-na-o @atom:ca @atom:na @atom:o
@angle:ca-na-oh @atom:ca @atom:na @atom:oh
@angle:ca-na-os @atom:ca @atom:na @atom:os
@angle:ca-na-p2 @atom:ca @atom:na @atom:p2
@angle:ca-na-p3 @atom:ca @atom:na @atom:p3
@angle:ca-na-p4 @atom:ca @atom:na @atom:p4
@angle:ca-na-p5 @atom:ca @atom:na @atom:p5
@angle:ca-na-pc @atom:ca @atom:na @atom:pc
@angle:ca-na-pd @atom:ca @atom:na @atom:pd
@angle:ca-na-py @atom:ca @atom:na @atom:py
@angle:ca-na-s4 @atom:ca @atom:na @atom:s4
@angle:ca-na-s6 @atom:ca @atom:na @atom:s6
@angle:ca-na-s @atom:ca @atom:na @atom:s
@angle:ca-na-sh @atom:ca @atom:na @atom:sh
@angle:ca-na-ss @atom:ca @atom:na @atom:ss
@angle:cc-na-cc @atom:cc @atom:na @atom:cc
@angle:cc-na-cd @atom:cc @atom:na @atom:cd
@angle:cc-na-ce @atom:cc @atom:na @atom:ce
@angle:cc-na-cl @atom:cc @atom:na @atom:cl
@angle:cc-na-f @atom:cc @atom:na @atom:f
@angle:cc-na-hn @atom:cc @atom:na @atom:hn
@angle:cc-na-i @atom:cc @atom:na @atom:i
@angle:cc-na-n2 @atom:cc @atom:na @atom:n2
@angle:cc-na-n4 @atom:cc @atom:na @atom:n4
@angle:cc-na-n @atom:cc @atom:na @atom:n
@angle:cc-na-na @atom:cc @atom:na @atom:na
@angle:cc-na-nc @atom:cc @atom:na @atom:nc
@angle:cc-na-nd @atom:cc @atom:na @atom:nd
@angle:cc-na-nh @atom:cc @atom:na @atom:nh
@angle:cc-na-no @atom:cc @atom:na @atom:no
@angle:cc-na-o @atom:cc @atom:na @atom:o
@angle:cc-na-oh @atom:cc @atom:na @atom:oh
@angle:cc-na-os @atom:cc @atom:na @atom:os
@angle:cc-na-p2 @atom:cc @atom:na @atom:p2
@angle:cc-na-p3 @atom:cc @atom:na @atom:p3
@angle:cc-na-p4 @atom:cc @atom:na @atom:p4
@angle:cc-na-p5 @atom:cc @atom:na @atom:p5
@angle:cc-na-s4 @atom:cc @atom:na @atom:s4
@angle:cc-na-s6 @atom:cc @atom:na @atom:s6
@angle:cc-na-s @atom:cc @atom:na @atom:s
@angle:cc-na-sh @atom:cc @atom:na @atom:sh
@angle:cc-na-ss @atom:cc @atom:na @atom:ss
@angle:cd-na-cd @atom:cd @atom:na @atom:cd
@angle:cd-na-cl @atom:cd @atom:na @atom:cl
@angle:cd-na-f @atom:cd @atom:na @atom:f
@angle:cd-na-hn @atom:cd @atom:na @atom:hn
@angle:cd-na-i @atom:cd @atom:na @atom:i
@angle:cd-na-n2 @atom:cd @atom:na @atom:n2
@angle:cd-na-n4 @atom:cd @atom:na @atom:n4
@angle:cd-na-n @atom:cd @atom:na @atom:n
@angle:cd-na-na @atom:cd @atom:na @atom:na
@angle:cd-na-nc @atom:cd @atom:na @atom:nc
@angle:cd-na-nd @atom:cd @atom:na @atom:nd
@angle:cd-na-nh @atom:cd @atom:na @atom:nh
@angle:cd-na-no @atom:cd @atom:na @atom:no
@angle:cd-na-o @atom:cd @atom:na @atom:o
@angle:cd-na-oh @atom:cd @atom:na @atom:oh
@angle:cd-na-os @atom:cd @atom:na @atom:os
@angle:cd-na-p2 @atom:cd @atom:na @atom:p2
@angle:cd-na-p3 @atom:cd @atom:na @atom:p3
@angle:cd-na-p4 @atom:cd @atom:na @atom:p4
@angle:cd-na-p5 @atom:cd @atom:na @atom:p5
@angle:cd-na-s4 @atom:cd @atom:na @atom:s4
@angle:cd-na-s6 @atom:cd @atom:na @atom:s6
@angle:cd-na-s @atom:cd @atom:na @atom:s
@angle:cd-na-sh @atom:cd @atom:na @atom:sh
@angle:cd-na-ss @atom:cd @atom:na @atom:ss
@angle:cl-na-cl @atom:cl @atom:na @atom:cl
@angle:cl-na-nc @atom:cl @atom:na @atom:nc
@angle:cl-na-nd @atom:cl @atom:na @atom:nd
@angle:cl-na-os @atom:cl @atom:na @atom:os
@angle:cl-na-p2 @atom:cl @atom:na @atom:p2
@angle:cl-na-pc @atom:cl @atom:na @atom:pc
@angle:cl-na-pd @atom:cl @atom:na @atom:pd
@angle:cl-na-ss @atom:cl @atom:na @atom:ss
@angle:f-na-f @atom:f @atom:na @atom:f
@angle:f-na-nc @atom:f @atom:na @atom:nc
@angle:f-na-nd @atom:f @atom:na @atom:nd
@angle:f-na-os @atom:f @atom:na @atom:os
@angle:f-na-p2 @atom:f @atom:na @atom:p2
@angle:f-na-pc @atom:f @atom:na @atom:pc
@angle:f-na-pd @atom:f @atom:na @atom:pd
@angle:f-na-ss @atom:f @atom:na @atom:ss
@angle:hn-na-hn @atom:hn @atom:na @atom:hn
@angle:hn-na-n @atom:hn @atom:na @atom:n
@angle:hn-na-nc @atom:hn @atom:na @atom:nc
@angle:hn-na-nd @atom:hn @atom:na @atom:nd
@angle:hn-na-os @atom:hn @atom:na @atom:os
@angle:hn-na-p2 @atom:hn @atom:na @atom:p2
@angle:hn-na-pc @atom:hn @atom:na @atom:pc
@angle:hn-na-pd @atom:hn @atom:na @atom:pd
@angle:hn-na-ss @atom:hn @atom:na @atom:ss
@angle:i-na-i @atom:i @atom:na @atom:i
@angle:i-na-nc @atom:i @atom:na @atom:nc
@angle:i-na-nd @atom:i @atom:na @atom:nd
@angle:i-na-os @atom:i @atom:na @atom:os
@angle:i-na-p2 @atom:i @atom:na @atom:p2
@angle:i-na-pc @atom:i @atom:na @atom:pc
@angle:i-na-pd @atom:i @atom:na @atom:pd
@angle:i-na-ss @atom:i @atom:na @atom:ss
@angle:n2-na-n2 @atom:n2 @atom:na @atom:n2
@angle:n2-na-nc @atom:n2 @atom:na @atom:nc
@angle:n2-na-nd @atom:n2 @atom:na @atom:nd
@angle:n2-na-os @atom:n2 @atom:na @atom:os
@angle:n2-na-p2 @atom:n2 @atom:na @atom:p2
@angle:n2-na-pc @atom:n2 @atom:na @atom:pc
@angle:n2-na-pd @atom:n2 @atom:na @atom:pd
@angle:n2-na-ss @atom:n2 @atom:na @atom:ss
@angle:n3-na-n3 @atom:n3 @atom:na @atom:n3
@angle:n4-na-n4 @atom:n4 @atom:na @atom:n4
@angle:n4-na-nc @atom:n4 @atom:na @atom:nc
@angle:n4-na-nd @atom:n4 @atom:na @atom:nd
@angle:n4-na-os @atom:n4 @atom:na @atom:os
@angle:n4-na-p2 @atom:n4 @atom:na @atom:p2
@angle:n4-na-pc @atom:n4 @atom:na @atom:pc
@angle:n4-na-pd @atom:n4 @atom:na @atom:pd
@angle:na-na-na @atom:na @atom:na @atom:na
@angle:na-na-nc @atom:na @atom:na @atom:nc
@angle:na-na-nd @atom:na @atom:na @atom:nd
@angle:na-na-os @atom:na @atom:na @atom:os
@angle:na-na-p2 @atom:na @atom:na @atom:p2
@angle:na-na-pc @atom:na @atom:na @atom:pc
@angle:na-na-pd @atom:na @atom:na @atom:pd
@angle:na-na-ss @atom:na @atom:na @atom:ss
@angle:nc-na-nc @atom:nc @atom:na @atom:nc
@angle:nc-na-nd @atom:nc @atom:na @atom:nd
@angle:nc-na-nh @atom:nc @atom:na @atom:nh
@angle:nc-na-no @atom:nc @atom:na @atom:no
@angle:nc-na-o @atom:nc @atom:na @atom:o
@angle:nc-na-oh @atom:nc @atom:na @atom:oh
@angle:nc-na-os @atom:nc @atom:na @atom:os
@angle:nc-na-p2 @atom:nc @atom:na @atom:p2
@angle:nc-na-p3 @atom:nc @atom:na @atom:p3
@angle:nc-na-p4 @atom:nc @atom:na @atom:p4
@angle:nc-na-p5 @atom:nc @atom:na @atom:p5
@angle:nc-na-pc @atom:nc @atom:na @atom:pc
@angle:nc-na-s4 @atom:nc @atom:na @atom:s4
@angle:nc-na-s6 @atom:nc @atom:na @atom:s6
@angle:nc-na-s @atom:nc @atom:na @atom:s
@angle:nc-na-sh @atom:nc @atom:na @atom:sh
@angle:nc-na-ss @atom:nc @atom:na @atom:ss
@angle:nd-na-nd @atom:nd @atom:na @atom:nd
@angle:nd-na-nh @atom:nd @atom:na @atom:nh
@angle:nd-na-no @atom:nd @atom:na @atom:no
@angle:nd-na-o @atom:nd @atom:na @atom:o
@angle:nd-na-oh @atom:nd @atom:na @atom:oh
@angle:nd-na-os @atom:nd @atom:na @atom:os
@angle:nd-na-p2 @atom:nd @atom:na @atom:p2
@angle:nd-na-p3 @atom:nd @atom:na @atom:p3
@angle:nd-na-p4 @atom:nd @atom:na @atom:p4
@angle:nd-na-p5 @atom:nd @atom:na @atom:p5
@angle:nd-na-pd @atom:nd @atom:na @atom:pd
@angle:nd-na-s4 @atom:nd @atom:na @atom:s4
@angle:nd-na-s6 @atom:nd @atom:na @atom:s6
@angle:nd-na-s @atom:nd @atom:na @atom:s
@angle:nd-na-sh @atom:nd @atom:na @atom:sh
@angle:nd-na-ss @atom:nd @atom:na @atom:ss
@angle:nh-na-nh @atom:nh @atom:na @atom:nh
@angle:nh-na-os @atom:nh @atom:na @atom:os
@angle:nh-na-p2 @atom:nh @atom:na @atom:p2
@angle:nh-na-pc @atom:nh @atom:na @atom:pc
@angle:nh-na-pd @atom:nh @atom:na @atom:pd
@angle:nh-na-ss @atom:nh @atom:na @atom:ss
@angle:n-na-n @atom:n @atom:na @atom:n
@angle:n-na-nc @atom:n @atom:na @atom:nc
@angle:n-na-nd @atom:n @atom:na @atom:nd
@angle:no-na-no @atom:no @atom:na @atom:no
@angle:no-na-os @atom:no @atom:na @atom:os
@angle:no-na-pc @atom:no @atom:na @atom:pc
@angle:no-na-pd @atom:no @atom:na @atom:pd
@angle:n-na-os @atom:n @atom:na @atom:os
@angle:no-na-ss @atom:no @atom:na @atom:ss
@angle:n-na-p2 @atom:n @atom:na @atom:p2
@angle:n-na-pc @atom:n @atom:na @atom:pc
@angle:n-na-pd @atom:n @atom:na @atom:pd
@angle:n-na-ss @atom:n @atom:na @atom:ss
@angle:oh-na-oh @atom:oh @atom:na @atom:oh
@angle:oh-na-p2 @atom:oh @atom:na @atom:p2
@angle:oh-na-pc @atom:oh @atom:na @atom:pc
@angle:oh-na-pd @atom:oh @atom:na @atom:pd
@angle:oh-na-ss @atom:oh @atom:na @atom:ss
@angle:o-na-o @atom:o @atom:na @atom:o
@angle:o-na-os @atom:o @atom:na @atom:os
@angle:o-na-p2 @atom:o @atom:na @atom:p2
@angle:o-na-pc @atom:o @atom:na @atom:pc
@angle:o-na-pd @atom:o @atom:na @atom:pd
@angle:os-na-os @atom:os @atom:na @atom:os
@angle:os-na-p2 @atom:os @atom:na @atom:p2
@angle:os-na-p3 @atom:os @atom:na @atom:p3
@angle:os-na-p5 @atom:os @atom:na @atom:p5
@angle:os-na-pc @atom:os @atom:na @atom:pc
@angle:os-na-pd @atom:os @atom:na @atom:pd
@angle:os-na-s4 @atom:os @atom:na @atom:s4
@angle:os-na-s6 @atom:os @atom:na @atom:s6
@angle:os-na-ss @atom:os @atom:na @atom:ss
@angle:p2-na-p2 @atom:p2 @atom:na @atom:p2
@angle:p2-na-p3 @atom:p2 @atom:na @atom:p3
@angle:p2-na-p5 @atom:p2 @atom:na @atom:p5
@angle:p2-na-pc @atom:p2 @atom:na @atom:pc
@angle:p2-na-pd @atom:p2 @atom:na @atom:pd
@angle:p2-na-s4 @atom:p2 @atom:na @atom:s4
@angle:p2-na-s6 @atom:p2 @atom:na @atom:s6
@angle:p2-na-s @atom:p2 @atom:na @atom:s
@angle:p2-na-sh @atom:p2 @atom:na @atom:sh
@angle:p2-na-ss @atom:p2 @atom:na @atom:ss
@angle:p3-na-p3 @atom:p3 @atom:na @atom:p3
@angle:p3-na-pc @atom:p3 @atom:na @atom:pc
@angle:p3-na-pd @atom:p3 @atom:na @atom:pd
@angle:p5-na-p5 @atom:p5 @atom:na @atom:p5
@angle:p5-na-pc @atom:p5 @atom:na @atom:pc
@angle:p5-na-pd @atom:p5 @atom:na @atom:pd
@angle:p5-na-ss @atom:p5 @atom:na @atom:ss
@angle:pc-na-pc @atom:pc @atom:na @atom:pc
@angle:pc-na-s4 @atom:pc @atom:na @atom:s4
@angle:pc-na-s6 @atom:pc @atom:na @atom:s6
@angle:pc-na-s @atom:pc @atom:na @atom:s
@angle:pc-na-sh @atom:pc @atom:na @atom:sh
@angle:pc-na-ss @atom:pc @atom:na @atom:ss
@angle:pd-na-pd @atom:pd @atom:na @atom:pd
@angle:pd-na-s4 @atom:pd @atom:na @atom:s4
@angle:pd-na-s6 @atom:pd @atom:na @atom:s6
@angle:pd-na-s @atom:pd @atom:na @atom:s
@angle:pd-na-sh @atom:pd @atom:na @atom:sh
@angle:pd-na-ss @atom:pd @atom:na @atom:ss
@angle:py-na-py @atom:py @atom:na @atom:py
@angle:s4-na-s4 @atom:s4 @atom:na @atom:s4
@angle:s4-na-s6 @atom:s4 @atom:na @atom:s6
@angle:s4-na-ss @atom:s4 @atom:na @atom:ss
@angle:s6-na-s6 @atom:s6 @atom:na @atom:s6
@angle:s6-na-ss @atom:s6 @atom:na @atom:ss
@angle:sh-na-sh @atom:sh @atom:na @atom:sh
@angle:sh-na-ss @atom:sh @atom:na @atom:ss
@angle:s-na-s @atom:s @atom:na @atom:s
@angle:s-na-ss @atom:s @atom:na @atom:ss
@angle:ss-na-ss @atom:ss @atom:na @atom:ss
@angle:sy-na-sy @atom:sy @atom:na @atom:sy
@angle:ca-nb-ca @atom:ca @atom:nb @atom:ca
@angle:ca-nb-cp @atom:ca @atom:nb @atom:cp
@angle:ca-nb-cq @atom:ca @atom:nb @atom:cq
@angle:ca-nb-nb @atom:ca @atom:nb @atom:nb
@angle:cp-nb-nb @atom:cp @atom:nb @atom:nb
@angle:nb-nb-nb @atom:nb @atom:nb @atom:nb
@angle:br-n-br @atom:br @atom:n @atom:br
@angle:br-n-c @atom:br @atom:n @atom:c
@angle:br-n-ca @atom:br @atom:n @atom:ca
@angle:br-n-cc @atom:br @atom:n @atom:cc
@angle:br-n-cd @atom:br @atom:n @atom:cd
@angle:c1-n-c1 @atom:c1 @atom:n @atom:c1
@angle:c1-n-ca @atom:c1 @atom:n @atom:ca
@angle:c1-n-cc @atom:c1 @atom:n @atom:cc
@angle:c1-n-cd @atom:c1 @atom:n @atom:cd
@angle:c2-n-c2 @atom:c2 @atom:n @atom:c2
@angle:c2-n-c3 @atom:c2 @atom:n @atom:c3
@angle:c2-n-ca @atom:c2 @atom:n @atom:ca
@angle:c2-n-cc @atom:c2 @atom:n @atom:cc
@angle:c2-n-cd @atom:c2 @atom:n @atom:cd
@angle:c2-n-hn @atom:c2 @atom:n @atom:hn
@angle:c3-n-c3 @atom:c3 @atom:n @atom:c3
@angle:c3-n-ca @atom:c3 @atom:n @atom:ca
@angle:c3-n-cc @atom:c3 @atom:n @atom:cc
@angle:c3-n-cd @atom:c3 @atom:n @atom:cd
@angle:c3-n-cy @atom:c3 @atom:n @atom:cy
@angle:c3-n-hn @atom:c3 @atom:n @atom:hn
@angle:c3-n-n2 @atom:c3 @atom:n @atom:n2
@angle:c3-n-n @atom:c3 @atom:n @atom:n
@angle:c3-n-nc @atom:c3 @atom:n @atom:nc
@angle:c3-n-nd @atom:c3 @atom:n @atom:nd
@angle:c3-n-oh @atom:c3 @atom:n @atom:oh
@angle:c3-n-os @atom:c3 @atom:n @atom:os
@angle:c3-n-sy @atom:c3 @atom:n @atom:sy
@angle:ca-n-ca @atom:ca @atom:n @atom:ca
@angle:ca-n-cc @atom:ca @atom:n @atom:cc
@angle:ca-n-cd @atom:ca @atom:n @atom:cd
@angle:ca-n-cl @atom:ca @atom:n @atom:cl
@angle:ca-n-f @atom:ca @atom:n @atom:f
@angle:ca-n-hn @atom:ca @atom:n @atom:hn
@angle:ca-n-i @atom:ca @atom:n @atom:i
@angle:ca-n-n2 @atom:ca @atom:n @atom:n2
@angle:ca-n-n4 @atom:ca @atom:n @atom:n4
@angle:ca-n-n @atom:ca @atom:n @atom:n
@angle:ca-n-na @atom:ca @atom:n @atom:na
@angle:ca-n-nc @atom:ca @atom:n @atom:nc
@angle:ca-n-nd @atom:ca @atom:n @atom:nd
@angle:ca-n-nh @atom:ca @atom:n @atom:nh
@angle:ca-n-p2 @atom:ca @atom:n @atom:p2
@angle:ca-n-p3 @atom:ca @atom:n @atom:p3
@angle:ca-n-s4 @atom:ca @atom:n @atom:s4
@angle:ca-n-s6 @atom:ca @atom:n @atom:s6
@angle:ca-n-ss @atom:ca @atom:n @atom:ss
@angle:c-n-c1 @atom:c @atom:n @atom:c1
@angle:c-n-c2 @atom:c @atom:n @atom:c2
@angle:c-n-c3 @atom:c @atom:n @atom:c3
@angle:c3-nc-cd @atom:c3 @atom:nc @atom:cd
@angle:c-n-c @atom:c @atom:n @atom:c
@angle:c-n-ca @atom:c @atom:n @atom:ca
@angle:ca-nc-ca @atom:ca @atom:nc @atom:ca
@angle:ca-nc-cd @atom:ca @atom:nc @atom:cd
@angle:ca-nc-n @atom:ca @atom:nc @atom:n
@angle:ca-nc-na @atom:ca @atom:nc @atom:na
@angle:ca-nc-os @atom:ca @atom:nc @atom:os
@angle:ca-nc-ss @atom:ca @atom:nc @atom:ss
@angle:c-n-cc @atom:c @atom:n @atom:cc
@angle:c-nc-ca @atom:c @atom:nc @atom:ca
@angle:cc-n-cc @atom:cc @atom:n @atom:cc
@angle:cc-nc-cc @atom:cc @atom:nc @atom:cc
@angle:cc-nc-cd @atom:cc @atom:nc @atom:cd
@angle:c-nc-cd @atom:c @atom:nc @atom:cd
@angle:cc-n-cl @atom:cc @atom:n @atom:cl
@angle:cc-nc-na @atom:cc @atom:nc @atom:na
@angle:cc-nc-nd @atom:cc @atom:nc @atom:nd
@angle:c-n-cd @atom:c @atom:n @atom:cd
@angle:cd-nc-cd @atom:cd @atom:nc @atom:cd
@angle:cd-nc-n @atom:cd @atom:nc @atom:n
@angle:cd-nc-na @atom:cd @atom:nc @atom:na
@angle:cd-nc-nc @atom:cd @atom:nc @atom:nc
@angle:cd-nc-os @atom:cd @atom:nc @atom:os
@angle:cd-nc-ss @atom:cd @atom:nc @atom:ss
@angle:c-n-ce @atom:c @atom:n @atom:ce
@angle:cc-n-f @atom:cc @atom:n @atom:f
@angle:cc-n-hn @atom:cc @atom:n @atom:hn
@angle:cc-n-i @atom:cc @atom:n @atom:i
@angle:c-n-cl @atom:c @atom:n @atom:cl
@angle:cc-n-n2 @atom:cc @atom:n @atom:n2
@angle:cc-n-n @atom:cc @atom:n @atom:n
@angle:cc-n-na @atom:cc @atom:n @atom:na
@angle:cc-n-nc @atom:cc @atom:n @atom:nc
@angle:cc-n-nh @atom:cc @atom:n @atom:nh
@angle:cc-n-no @atom:cc @atom:n @atom:no
@angle:cc-n-o @atom:cc @atom:n @atom:o
@angle:cc-n-oh @atom:cc @atom:n @atom:oh
@angle:cc-n-os @atom:cc @atom:n @atom:os
@angle:cc-n-p2 @atom:cc @atom:n @atom:p2
@angle:cc-n-p3 @atom:cc @atom:n @atom:p3
@angle:cc-n-p5 @atom:cc @atom:n @atom:p5
@angle:cc-n-s4 @atom:cc @atom:n @atom:s4
@angle:cc-n-s6 @atom:cc @atom:n @atom:s6
@angle:cc-n-s @atom:cc @atom:n @atom:s
@angle:cc-n-sh @atom:cc @atom:n @atom:sh
@angle:cc-n-ss @atom:cc @atom:n @atom:ss
@angle:c-n-cx @atom:c @atom:n @atom:cx
@angle:c-n-cy @atom:c @atom:n @atom:cy
@angle:cd-n-cd @atom:cd @atom:n @atom:cd
@angle:cd-n-cl @atom:cd @atom:n @atom:cl
@angle:cd-n-f @atom:cd @atom:n @atom:f
@angle:cd-n-hn @atom:cd @atom:n @atom:hn
@angle:cd-n-i @atom:cd @atom:n @atom:i
@angle:cd-n-n2 @atom:cd @atom:n @atom:n2
@angle:cd-n-n @atom:cd @atom:n @atom:n
@angle:cd-n-na @atom:cd @atom:n @atom:na
@angle:cd-n-nd @atom:cd @atom:n @atom:nd
@angle:cd-n-nh @atom:cd @atom:n @atom:nh
@angle:cd-n-no @atom:cd @atom:n @atom:no
@angle:cd-n-o @atom:cd @atom:n @atom:o
@angle:cd-n-oh @atom:cd @atom:n @atom:oh
@angle:cd-n-os @atom:cd @atom:n @atom:os
@angle:cd-n-p2 @atom:cd @atom:n @atom:p2
@angle:cd-n-p3 @atom:cd @atom:n @atom:p3
@angle:cd-n-p5 @atom:cd @atom:n @atom:p5
@angle:cd-n-s4 @atom:cd @atom:n @atom:s4
@angle:cd-n-s6 @atom:cd @atom:n @atom:s6
@angle:cd-n-s @atom:cd @atom:n @atom:s
@angle:cd-n-sh @atom:cd @atom:n @atom:sh
@angle:cd-n-ss @atom:cd @atom:n @atom:ss
@angle:ce-n-cy @atom:ce @atom:n @atom:cy
@angle:c-n-f @atom:c @atom:n @atom:f
@angle:cf-n-cy @atom:cf @atom:n @atom:cy
@angle:c-n-hn @atom:c @atom:n @atom:hn
@angle:c-n-i @atom:c @atom:n @atom:i
@angle:cl-n-cl @atom:cl @atom:n @atom:cl
@angle:c-n-n2 @atom:c @atom:n @atom:n2
@angle:c-n-n3 @atom:c @atom:n @atom:n3
@angle:c-n-n4 @atom:c @atom:n @atom:n4
@angle:c-n-n @atom:c @atom:n @atom:n
@angle:c-n-na @atom:c @atom:n @atom:na
@angle:na-nc-nd @atom:na @atom:nc @atom:nd
@angle:c-n-nc @atom:c @atom:n @atom:nc
@angle:nc-nc-nd @atom:nc @atom:nc @atom:nd
@angle:c-n-nd @atom:c @atom:n @atom:nd
@angle:nd-nc-os @atom:nd @atom:nc @atom:os
@angle:c-n-nh @atom:c @atom:n @atom:nh
@angle:c-n-no @atom:c @atom:n @atom:no
@angle:c-n-o @atom:c @atom:n @atom:o
@angle:c-n-oh @atom:c @atom:n @atom:oh
@angle:c-n-os @atom:c @atom:n @atom:os
@angle:c-n-p2 @atom:c @atom:n @atom:p2
@angle:c-n-p3 @atom:c @atom:n @atom:p3
@angle:c-n-p4 @atom:c @atom:n @atom:p4
@angle:c-n-p5 @atom:c @atom:n @atom:p5
@angle:c-n-pc @atom:c @atom:n @atom:pc
@angle:c-n-pd @atom:c @atom:n @atom:pd
@angle:c-n-s4 @atom:c @atom:n @atom:s4
@angle:c-n-s6 @atom:c @atom:n @atom:s6
@angle:c-n-s @atom:c @atom:n @atom:s
@angle:c-n-sh @atom:c @atom:n @atom:sh
@angle:c-n-ss @atom:c @atom:n @atom:ss
@angle:c-n-sy @atom:c @atom:n @atom:sy
@angle:cx-n-hn @atom:cx @atom:n @atom:hn
@angle:cx-n-os @atom:cx @atom:n @atom:os
@angle:cy-n-hn @atom:cy @atom:n @atom:hn
@angle:c3-nd-cc @atom:c3 @atom:nd @atom:cc
@angle:ca-nd-ca @atom:ca @atom:nd @atom:ca
@angle:ca-nd-cc @atom:ca @atom:nd @atom:cc
@angle:ca-nd-n @atom:ca @atom:nd @atom:n
@angle:ca-nd-na @atom:ca @atom:nd @atom:na
@angle:ca-nd-nc @atom:ca @atom:nd @atom:nc
@angle:ca-nd-os @atom:ca @atom:nd @atom:os
@angle:ca-nd-ss @atom:ca @atom:nd @atom:ss
@angle:c-nd-ca @atom:c @atom:nd @atom:ca
@angle:c-nd-cc @atom:c @atom:nd @atom:cc
@angle:cc-nd-cc @atom:cc @atom:nd @atom:cc
@angle:cc-nd-cd @atom:cc @atom:nd @atom:cd
@angle:cc-nd-n @atom:cc @atom:nd @atom:n
@angle:cc-nd-na @atom:cc @atom:nd @atom:na
@angle:cc-nd-nd @atom:cc @atom:nd @atom:nd
@angle:cc-nd-os @atom:cc @atom:nd @atom:os
@angle:cc-nd-ss @atom:cc @atom:nd @atom:ss
@angle:cd-nd-cd @atom:cd @atom:nd @atom:cd
@angle:cd-nd-na @atom:cd @atom:nd @atom:na
@angle:cd-nd-nc @atom:cd @atom:nd @atom:nc
@angle:na-nd-nc @atom:na @atom:nd @atom:nc
@angle:nc-nd-nd @atom:nc @atom:nd @atom:nd
@angle:nc-nd-os @atom:nc @atom:nd @atom:os
@angle:c1-ne-ca @atom:c1 @atom:ne @atom:ca
@angle:c1-ne-cg @atom:c1 @atom:ne @atom:cg
@angle:c2-ne-ca @atom:c2 @atom:ne @atom:ca
@angle:c2-ne-ce @atom:c2 @atom:ne @atom:ce
@angle:c2-ne-cg @atom:c2 @atom:ne @atom:cg
@angle:c2-ne-n2 @atom:c2 @atom:ne @atom:n2
@angle:c2-ne-ne @atom:c2 @atom:ne @atom:ne
@angle:c2-ne-p2 @atom:c2 @atom:ne @atom:p2
@angle:c2-ne-pe @atom:c2 @atom:ne @atom:pe
@angle:c2-ne-px @atom:c2 @atom:ne @atom:px
@angle:c2-ne-py @atom:c2 @atom:ne @atom:py
@angle:c2-ne-sx @atom:c2 @atom:ne @atom:sx
@angle:c2-ne-sy @atom:c2 @atom:ne @atom:sy
@angle:ca-ne-cf @atom:ca @atom:ne @atom:cf
@angle:ca-ne-n2 @atom:ca @atom:ne @atom:n2
@angle:ca-ne-nf @atom:ca @atom:ne @atom:nf
@angle:ca-ne-o @atom:ca @atom:ne @atom:o
@angle:ca-ne-p2 @atom:ca @atom:ne @atom:p2
@angle:ca-ne-s @atom:ca @atom:ne @atom:s
@angle:c-ne-c2 @atom:c @atom:ne @atom:c2
@angle:ce-ne-n2 @atom:ce @atom:ne @atom:n2
@angle:ce-ne-o @atom:ce @atom:ne @atom:o
@angle:ce-ne-p2 @atom:ce @atom:ne @atom:p2
@angle:ce-ne-s @atom:ce @atom:ne @atom:s
@angle:cg-ne-n1 @atom:cg @atom:ne @atom:n1
@angle:cg-ne-n2 @atom:cg @atom:ne @atom:n2
@angle:cg-ne-o @atom:cg @atom:ne @atom:o
@angle:cg-ne-p2 @atom:cg @atom:ne @atom:p2
@angle:cg-ne-s @atom:cg @atom:ne @atom:s
@angle:c-ne-sy @atom:c @atom:ne @atom:sy
@angle:n2-ne-n2 @atom:n2 @atom:ne @atom:n2
@angle:n2-ne-ne @atom:n2 @atom:ne @atom:ne
@angle:n2-ne-o @atom:n2 @atom:ne @atom:o
@angle:n2-ne-p2 @atom:n2 @atom:ne @atom:p2
@angle:n2-ne-pe @atom:n2 @atom:ne @atom:pe
@angle:n2-ne-px @atom:n2 @atom:ne @atom:px
@angle:n2-ne-py @atom:n2 @atom:ne @atom:py
@angle:n2-ne-s @atom:n2 @atom:ne @atom:s
@angle:n2-ne-sx @atom:n2 @atom:ne @atom:sx
@angle:n2-ne-sy @atom:n2 @atom:ne @atom:sy
@angle:ne-ne-o @atom:ne @atom:ne @atom:o
@angle:ne-ne-p2 @atom:ne @atom:ne @atom:p2
@angle:ne-ne-s @atom:ne @atom:ne @atom:s
@angle:o-ne-o @atom:o @atom:ne @atom:o
@angle:o-ne-pe @atom:o @atom:ne @atom:pe
@angle:o-ne-px @atom:o @atom:ne @atom:px
@angle:o-ne-py @atom:o @atom:ne @atom:py
@angle:o-ne-s @atom:o @atom:ne @atom:s
@angle:o-ne-sx @atom:o @atom:ne @atom:sx
@angle:o-ne-sy @atom:o @atom:ne @atom:sy
@angle:p2-ne-pe @atom:p2 @atom:ne @atom:pe
@angle:p2-ne-px @atom:p2 @atom:ne @atom:px
@angle:p2-ne-py @atom:p2 @atom:ne @atom:py
@angle:p2-ne-sx @atom:p2 @atom:ne @atom:sx
@angle:p2-ne-sy @atom:p2 @atom:ne @atom:sy
@angle:pe-ne-s @atom:pe @atom:ne @atom:s
@angle:px-ne-s @atom:px @atom:ne @atom:s
@angle:py-ne-s @atom:py @atom:ne @atom:s
@angle:s-ne-s @atom:s @atom:ne @atom:s
@angle:s-ne-sx @atom:s @atom:ne @atom:sx
@angle:s-ne-sy @atom:s @atom:ne @atom:sy
@angle:c1-nf-ca @atom:c1 @atom:nf @atom:ca
@angle:c1-nf-ch @atom:c1 @atom:nf @atom:ch
@angle:c2-nf-ca @atom:c2 @atom:nf @atom:ca
@angle:c2-nf-cf @atom:c2 @atom:nf @atom:cf
@angle:c2-nf-n2 @atom:c2 @atom:nf @atom:n2
@angle:c2-nf-nf @atom:c2 @atom:nf @atom:nf
@angle:c2-nf-p2 @atom:c2 @atom:nf @atom:p2
@angle:c2-nf-pf @atom:c2 @atom:nf @atom:pf
@angle:c2-nf-px @atom:c2 @atom:nf @atom:px
@angle:c2-nf-py @atom:c2 @atom:nf @atom:py
@angle:c2-nf-sx @atom:c2 @atom:nf @atom:sx
@angle:c2-nf-sy @atom:c2 @atom:nf @atom:sy
@angle:ca-nf-ce @atom:ca @atom:nf @atom:ce
@angle:ca-nf-n2 @atom:ca @atom:nf @atom:n2
@angle:ca-nf-ne @atom:ca @atom:nf @atom:ne
@angle:ca-nf-o @atom:ca @atom:nf @atom:o
@angle:ca-nf-p2 @atom:ca @atom:nf @atom:p2
@angle:ca-nf-s @atom:ca @atom:nf @atom:s
@angle:c-nf-c2 @atom:c @atom:nf @atom:c2
@angle:cf-nf-n2 @atom:cf @atom:nf @atom:n2
@angle:cf-nf-o @atom:cf @atom:nf @atom:o
@angle:cf-nf-p2 @atom:cf @atom:nf @atom:p2
@angle:cf-nf-s @atom:cf @atom:nf @atom:s
@angle:ch-nf-n1 @atom:ch @atom:nf @atom:n1
@angle:ch-nf-n2 @atom:ch @atom:nf @atom:n2
@angle:ch-nf-o @atom:ch @atom:nf @atom:o
@angle:ch-nf-p2 @atom:ch @atom:nf @atom:p2
@angle:ch-nf-s @atom:ch @atom:nf @atom:s
@angle:f-n-f @atom:f @atom:n @atom:f
@angle:n2-nf-n2 @atom:n2 @atom:nf @atom:n2
@angle:n2-nf-nf @atom:n2 @atom:nf @atom:nf
@angle:n2-nf-o @atom:n2 @atom:nf @atom:o
@angle:n2-nf-p2 @atom:n2 @atom:nf @atom:p2
@angle:n2-nf-pf @atom:n2 @atom:nf @atom:pf
@angle:n2-nf-px @atom:n2 @atom:nf @atom:px
@angle:n2-nf-py @atom:n2 @atom:nf @atom:py
@angle:n2-nf-s @atom:n2 @atom:nf @atom:s
@angle:n2-nf-sx @atom:n2 @atom:nf @atom:sx
@angle:n2-nf-sy @atom:n2 @atom:nf @atom:sy
@angle:nf-nf-o @atom:nf @atom:nf @atom:o
@angle:nf-nf-p2 @atom:nf @atom:nf @atom:p2
@angle:nf-nf-s @atom:nf @atom:nf @atom:s
@angle:o-nf-o @atom:o @atom:nf @atom:o
@angle:o-nf-pf @atom:o @atom:nf @atom:pf
@angle:o-nf-px @atom:o @atom:nf @atom:px
@angle:o-nf-py @atom:o @atom:nf @atom:py
@angle:o-nf-s @atom:o @atom:nf @atom:s
@angle:o-nf-sx @atom:o @atom:nf @atom:sx
@angle:o-nf-sy @atom:o @atom:nf @atom:sy
@angle:p2-nf-pf @atom:p2 @atom:nf @atom:pf
@angle:p2-nf-px @atom:p2 @atom:nf @atom:px
@angle:p2-nf-py @atom:p2 @atom:nf @atom:py
@angle:p2-nf-sx @atom:p2 @atom:nf @atom:sx
@angle:p2-nf-sy @atom:p2 @atom:nf @atom:sy
@angle:pf-nf-s @atom:pf @atom:nf @atom:s
@angle:px-nf-s @atom:px @atom:nf @atom:s
@angle:py-nf-s @atom:py @atom:nf @atom:s
@angle:s-nf-s @atom:s @atom:nf @atom:s
@angle:s-nf-sx @atom:s @atom:nf @atom:sx
@angle:s-nf-sy @atom:s @atom:nf @atom:sy
@angle:br-nh-br @atom:br @atom:nh @atom:br
@angle:br-nh-ca @atom:br @atom:nh @atom:ca
@angle:br-nh-hn @atom:br @atom:nh @atom:hn
@angle:c1-nh-c1 @atom:c1 @atom:nh @atom:c1
@angle:c1-nh-c2 @atom:c1 @atom:nh @atom:c2
@angle:c1-nh-ca @atom:c1 @atom:nh @atom:ca
@angle:c1-nh-hn @atom:c1 @atom:nh @atom:hn
@angle:c2-nh-c2 @atom:c2 @atom:nh @atom:c2
@angle:c2-nh-c3 @atom:c2 @atom:nh @atom:c3
@angle:c2-nh-ca @atom:c2 @atom:nh @atom:ca
@angle:c2-nh-cc @atom:c2 @atom:nh @atom:cc
@angle:c2-nh-cd @atom:c2 @atom:nh @atom:cd
@angle:c2-nh-cx @atom:c2 @atom:nh @atom:cx
@angle:c2-nh-hn @atom:c2 @atom:nh @atom:hn
@angle:c2-nh-n2 @atom:c2 @atom:nh @atom:n2
@angle:c2-nh-n3 @atom:c2 @atom:nh @atom:n3
@angle:c2-nh-no @atom:c2 @atom:nh @atom:no
@angle:c2-nh-oh @atom:c2 @atom:nh @atom:oh
@angle:c2-nh-os @atom:c2 @atom:nh @atom:os
@angle:c2-nh-sy @atom:c2 @atom:nh @atom:sy
@angle:c3-nh-c3 @atom:c3 @atom:nh @atom:c3
@angle:c3-nh-ca @atom:c3 @atom:nh @atom:ca
@angle:c3-nh-cc @atom:c3 @atom:nh @atom:cc
@angle:c3-nh-cd @atom:c3 @atom:nh @atom:cd
@angle:c3-nh-cf @atom:c3 @atom:nh @atom:cf
@angle:c3-nh-cz @atom:c3 @atom:nh @atom:cz
@angle:c3-nh-hn @atom:c3 @atom:nh @atom:hn
@angle:c3-nh-n2 @atom:c3 @atom:nh @atom:n2
@angle:c3-nh-n @atom:c3 @atom:nh @atom:n
@angle:c3-nh-na @atom:c3 @atom:nh @atom:na
@angle:c3-nh-p2 @atom:c3 @atom:nh @atom:p2
@angle:c3-nh-sy @atom:c3 @atom:nh @atom:sy
@angle:ca-nh-ca @atom:ca @atom:nh @atom:ca
@angle:ca-nh-cc @atom:ca @atom:nh @atom:cc
@angle:ca-nh-cd @atom:ca @atom:nh @atom:cd
@angle:ca-nh-cl @atom:ca @atom:nh @atom:cl
@angle:ca-nh-cx @atom:ca @atom:nh @atom:cx
@angle:ca-nh-f @atom:ca @atom:nh @atom:f
@angle:ca-nh-hn @atom:ca @atom:nh @atom:hn
@angle:ca-nh-i @atom:ca @atom:nh @atom:i
@angle:ca-nh-n1 @atom:ca @atom:nh @atom:n1
@angle:ca-nh-n2 @atom:ca @atom:nh @atom:n2
@angle:ca-nh-n3 @atom:ca @atom:nh @atom:n3
@angle:ca-nh-n4 @atom:ca @atom:nh @atom:n4
@angle:ca-nh-n @atom:ca @atom:nh @atom:n
@angle:ca-nh-na @atom:ca @atom:nh @atom:na
@angle:ca-nh-nh @atom:ca @atom:nh @atom:nh
@angle:ca-nh-no @atom:ca @atom:nh @atom:no
@angle:ca-nh-o @atom:ca @atom:nh @atom:o
@angle:ca-nh-oh @atom:ca @atom:nh @atom:oh
@angle:ca-nh-os @atom:ca @atom:nh @atom:os
@angle:ca-nh-p2 @atom:ca @atom:nh @atom:p2
@angle:ca-nh-p3 @atom:ca @atom:nh @atom:p3
@angle:ca-nh-p4 @atom:ca @atom:nh @atom:p4
@angle:ca-nh-p5 @atom:ca @atom:nh @atom:p5
@angle:ca-nh-s4 @atom:ca @atom:nh @atom:s4
@angle:ca-nh-s6 @atom:ca @atom:nh @atom:s6
@angle:ca-nh-s @atom:ca @atom:nh @atom:s
@angle:ca-nh-sh @atom:ca @atom:nh @atom:sh
@angle:ca-nh-ss @atom:ca @atom:nh @atom:ss
@angle:ca-nh-sy @atom:ca @atom:nh @atom:sy
@angle:cc-nh-cx @atom:cc @atom:nh @atom:cx
@angle:cc-nh-hn @atom:cc @atom:nh @atom:hn
@angle:cc-nh-n2 @atom:cc @atom:nh @atom:n2
@angle:cc-nh-sy @atom:cc @atom:nh @atom:sy
@angle:cd-nh-cx @atom:cd @atom:nh @atom:cx
@angle:cd-nh-hn @atom:cd @atom:nh @atom:hn
@angle:ce-nh-hn @atom:ce @atom:nh @atom:hn
@angle:ce-nh-o @atom:ce @atom:nh @atom:o
@angle:ce-nh-sy @atom:ce @atom:nh @atom:sy
@angle:cf-nh-hn @atom:cf @atom:nh @atom:hn
@angle:cf-nh-o @atom:cf @atom:nh @atom:o
@angle:cl-nh-cl @atom:cl @atom:nh @atom:cl
@angle:cl-nh-hn @atom:cl @atom:nh @atom:hn
@angle:cx-nh-cx @atom:cx @atom:nh @atom:cx
@angle:cx-nh-hn @atom:cx @atom:nh @atom:hn
@angle:cz-nh-hn @atom:cz @atom:nh @atom:hn
@angle:f-nh-f @atom:f @atom:nh @atom:f
@angle:f-nh-hn @atom:f @atom:nh @atom:hn
@angle:hn-nh-hn @atom:hn @atom:nh @atom:hn
@angle:hn-nh-i @atom:hn @atom:nh @atom:i
@angle:hn-nh-n1 @atom:hn @atom:nh @atom:n1
@angle:hn-nh-n2 @atom:hn @atom:nh @atom:n2
@angle:hn-nh-n3 @atom:hn @atom:nh @atom:n3
@angle:hn-nh-n4 @atom:hn @atom:nh @atom:n4
@angle:hn-nh-n @atom:hn @atom:nh @atom:n
@angle:hn-nh-na @atom:hn @atom:nh @atom:na
@angle:hn-nh-nh @atom:hn @atom:nh @atom:nh
@angle:hn-nh-no @atom:hn @atom:nh @atom:no
@angle:hn-nh-o @atom:hn @atom:nh @atom:o
@angle:hn-nh-oh @atom:hn @atom:nh @atom:oh
@angle:hn-nh-os @atom:hn @atom:nh @atom:os
@angle:hn-nh-p2 @atom:hn @atom:nh @atom:p2
@angle:hn-nh-p3 @atom:hn @atom:nh @atom:p3
@angle:hn-nh-p4 @atom:hn @atom:nh @atom:p4
@angle:hn-nh-p5 @atom:hn @atom:nh @atom:p5
@angle:hn-nh-s4 @atom:hn @atom:nh @atom:s4
@angle:hn-nh-s @atom:hn @atom:nh @atom:s
@angle:hn-nh-s6 @atom:hn @atom:nh @atom:s6
@angle:hn-nh-sh @atom:hn @atom:nh @atom:sh
@angle:hn-nh-ss @atom:hn @atom:nh @atom:ss
@angle:hn-nh-sy @atom:hn @atom:nh @atom:sy
@angle:i-nh-i @atom:i @atom:nh @atom:i
@angle:n1-nh-n1 @atom:n1 @atom:nh @atom:n1
@angle:n2-nh-n2 @atom:n2 @atom:nh @atom:n2
@angle:n2-nh-n3 @atom:n2 @atom:nh @atom:n3
@angle:n2-nh-o @atom:n2 @atom:nh @atom:o
@angle:n3-nh-n3 @atom:n3 @atom:nh @atom:n3
@angle:n4-nh-n4 @atom:n4 @atom:nh @atom:n4
@angle:na-nh-na @atom:na @atom:nh @atom:na
@angle:hn-n-hn @atom:hn @atom:n @atom:hn
@angle:nh-nh-nh @atom:nh @atom:nh @atom:nh
@angle:hn-n-i @atom:hn @atom:n @atom:i
@angle:hn-n-n2 @atom:hn @atom:n @atom:n2
@angle:hn-n-n3 @atom:hn @atom:n @atom:n3
@angle:hn-n-n4 @atom:hn @atom:n @atom:n4
@angle:hn-n-n @atom:hn @atom:n @atom:n
@angle:hn-n-na @atom:hn @atom:n @atom:na
@angle:hn-n-nc @atom:hn @atom:n @atom:nc
@angle:hn-n-nh @atom:hn @atom:n @atom:nh
@angle:hn-n-no @atom:hn @atom:n @atom:no
@angle:hn-n-o @atom:hn @atom:n @atom:o
@angle:n-nh-o @atom:n @atom:nh @atom:o
@angle:hn-n-oh @atom:hn @atom:n @atom:oh
@angle:no-nh-no @atom:no @atom:nh @atom:no
@angle:hn-n-os @atom:hn @atom:n @atom:os
@angle:hn-n-p2 @atom:hn @atom:n @atom:p2
@angle:hn-n-p3 @atom:hn @atom:n @atom:p3
@angle:hn-n-p4 @atom:hn @atom:n @atom:p4
@angle:hn-n-p5 @atom:hn @atom:n @atom:p5
@angle:hn-n-s4 @atom:hn @atom:n @atom:s4
@angle:hn-n-s @atom:hn @atom:n @atom:s
@angle:hn-n-s6 @atom:hn @atom:n @atom:s6
@angle:hn-n-sh @atom:hn @atom:n @atom:sh
@angle:hn-n-ss @atom:hn @atom:n @atom:ss
@angle:hn-n-sy @atom:hn @atom:n @atom:sy
@angle:oh-nh-oh @atom:oh @atom:nh @atom:oh
@angle:o-nh-o @atom:o @atom:nh @atom:o
@angle:os-nh-os @atom:os @atom:nh @atom:os
@angle:p2-nh-p2 @atom:p2 @atom:nh @atom:p2
@angle:p3-nh-p3 @atom:p3 @atom:nh @atom:p3
@angle:p5-nh-p5 @atom:p5 @atom:nh @atom:p5
@angle:s4-nh-s4 @atom:s4 @atom:nh @atom:s4
@angle:s6-nh-s6 @atom:s6 @atom:nh @atom:s6
@angle:sh-nh-sh @atom:sh @atom:nh @atom:sh
@angle:s-nh-s @atom:s @atom:nh @atom:s
@angle:ss-nh-ss @atom:ss @atom:nh @atom:ss
@angle:i-n-i @atom:i @atom:n @atom:i
@angle:n2-n-n2 @atom:n2 @atom:n @atom:n2
@angle:n3-n-n3 @atom:n3 @atom:n @atom:n3
@angle:n4-n-n4 @atom:n4 @atom:n @atom:n4
@angle:na-n-na @atom:na @atom:n @atom:na
@angle:nc-n-nc @atom:nc @atom:n @atom:nc
@angle:nc-n-p2 @atom:nc @atom:n @atom:p2
@angle:nc-n-pc @atom:nc @atom:n @atom:pc
@angle:nd-n-nd @atom:nd @atom:n @atom:nd
@angle:nd-n-p2 @atom:nd @atom:n @atom:p2
@angle:nd-n-pd @atom:nd @atom:n @atom:pd
@angle:nh-n-nh @atom:nh @atom:n @atom:nh
@angle:n-n-n @atom:n @atom:n @atom:n
@angle:no-n-no @atom:no @atom:n @atom:no
@angle:br-no-o @atom:br @atom:no @atom:o
@angle:c1-no-o @atom:c1 @atom:no @atom:o
@angle:c2-no-o @atom:c2 @atom:no @atom:o
@angle:c3-no-o @atom:c3 @atom:no @atom:o
@angle:ca-no-o @atom:ca @atom:no @atom:o
@angle:cc-no-o @atom:cc @atom:no @atom:o
@angle:cl-no-o @atom:cl @atom:no @atom:o
@angle:c-no-o @atom:c @atom:no @atom:o
@angle:hn-no-o @atom:hn @atom:no @atom:o
@angle:oh-n-oh @atom:oh @atom:n @atom:oh
@angle:i-no-o @atom:i @atom:no @atom:o
@angle:n1-no-o @atom:n1 @atom:no @atom:o
@angle:n2-no-o @atom:n2 @atom:no @atom:o
@angle:n3-no-o @atom:n3 @atom:no @atom:o
@angle:n4-no-o @atom:n4 @atom:no @atom:o
@angle:na-no-o @atom:na @atom:no @atom:o
@angle:nh-no-o @atom:nh @atom:no @atom:o
@angle:n-no-o @atom:n @atom:no @atom:o
@angle:no-no-o @atom:no @atom:no @atom:o
@angle:o-n-o @atom:o @atom:n @atom:o
@angle:o-no-o @atom:o @atom:no @atom:o
@angle:o-no-oh @atom:o @atom:no @atom:oh
@angle:o-no-os @atom:o @atom:no @atom:os
@angle:o-no-p2 @atom:o @atom:no @atom:p2
@angle:o-no-p3 @atom:o @atom:no @atom:p3
@angle:o-no-p4 @atom:o @atom:no @atom:p4
@angle:o-no-p5 @atom:o @atom:no @atom:p5
@angle:o-no-s4 @atom:o @atom:no @atom:s4
@angle:o-no-s6 @atom:o @atom:no @atom:s6
@angle:o-no-s @atom:o @atom:no @atom:s
@angle:o-no-sh @atom:o @atom:no @atom:sh
@angle:o-no-ss @atom:o @atom:no @atom:ss
@angle:os-n-os @atom:os @atom:n @atom:os
@angle:p2-n-p2 @atom:p2 @atom:n @atom:p2
@angle:p3-n-p3 @atom:p3 @atom:n @atom:p3
@angle:p4-n-p4 @atom:p4 @atom:n @atom:p4
@angle:p5-n-p5 @atom:p5 @atom:n @atom:p5
@angle:pc-n-pc @atom:pc @atom:n @atom:pc
@angle:pd-n-pd @atom:pd @atom:n @atom:pd
@angle:s4-n-s4 @atom:s4 @atom:n @atom:s4
@angle:s6-n-s6 @atom:s6 @atom:n @atom:s6
@angle:sh-n-sh @atom:sh @atom:n @atom:sh
@angle:s-n-s @atom:s @atom:n @atom:s
@angle:ss-n-ss @atom:ss @atom:n @atom:ss
@angle:br-oh-ho @atom:br @atom:oh @atom:ho
@angle:c1-oh-ho @atom:c1 @atom:oh @atom:ho
@angle:c2-oh-ho @atom:c2 @atom:oh @atom:ho
@angle:c3-oh-ho @atom:c3 @atom:oh @atom:ho
@angle:ca-oh-ho @atom:ca @atom:oh @atom:ho
@angle:cc-oh-ho @atom:cc @atom:oh @atom:ho
@angle:cd-oh-ho @atom:cd @atom:oh @atom:ho
@angle:ce-oh-ho @atom:ce @atom:oh @atom:ho
@angle:cf-oh-ho @atom:cf @atom:oh @atom:ho
@angle:c-oh-ho @atom:c @atom:oh @atom:ho
@angle:cl-oh-ho @atom:cl @atom:oh @atom:ho
@angle:cx-oh-ho @atom:cx @atom:oh @atom:ho
@angle:cy-oh-ho @atom:cy @atom:oh @atom:ho
@angle:f-oh-ho @atom:f @atom:oh @atom:ho
@angle:ho-oh-ho @atom:ho @atom:oh @atom:ho
@angle:ho-oh-i @atom:ho @atom:oh @atom:i
@angle:ho-oh-n1 @atom:ho @atom:oh @atom:n1
@angle:ho-oh-n2 @atom:ho @atom:oh @atom:n2
@angle:ho-oh-n3 @atom:ho @atom:oh @atom:n3
@angle:ho-oh-n4 @atom:ho @atom:oh @atom:n4
@angle:ho-oh-n @atom:ho @atom:oh @atom:n
@angle:ho-oh-na @atom:ho @atom:oh @atom:na
@angle:ho-oh-nh @atom:ho @atom:oh @atom:nh
@angle:ho-oh-no @atom:ho @atom:oh @atom:no
@angle:ho-oh-o @atom:ho @atom:oh @atom:o
@angle:ho-oh-oh @atom:ho @atom:oh @atom:oh
@angle:ho-oh-os @atom:ho @atom:oh @atom:os
@angle:ho-oh-p2 @atom:ho @atom:oh @atom:p2
@angle:ho-oh-p3 @atom:ho @atom:oh @atom:p3
@angle:ho-oh-p4 @atom:ho @atom:oh @atom:p4
@angle:ho-oh-p5 @atom:ho @atom:oh @atom:p5
@angle:ho-oh-py @atom:ho @atom:oh @atom:py
@angle:ho-oh-s4 @atom:ho @atom:oh @atom:s4
@angle:ho-oh-s @atom:ho @atom:oh @atom:s
@angle:ho-oh-s6 @atom:ho @atom:oh @atom:s6
@angle:ho-oh-sh @atom:ho @atom:oh @atom:sh
@angle:ho-oh-ss @atom:ho @atom:oh @atom:ss
@angle:ho-oh-sy @atom:ho @atom:oh @atom:sy
@angle:br-os-br @atom:br @atom:os @atom:br
@angle:c1-os-c1 @atom:c1 @atom:os @atom:c1
@angle:c1-os-c3 @atom:c1 @atom:os @atom:c3
@angle:c2-os-c2 @atom:c2 @atom:os @atom:c2
@angle:c2-os-c3 @atom:c2 @atom:os @atom:c3
@angle:c2-os-ca @atom:c2 @atom:os @atom:ca
@angle:c2-os-n2 @atom:c2 @atom:os @atom:n2
@angle:c2-os-na @atom:c2 @atom:os @atom:na
@angle:c2-os-os @atom:c2 @atom:os @atom:os
@angle:c2-os-p5 @atom:c2 @atom:os @atom:p5
@angle:c2-os-ss @atom:c2 @atom:os @atom:ss
@angle:c3-os-c3 @atom:c3 @atom:os @atom:c3
@angle:c3-os-ca @atom:c3 @atom:os @atom:ca
@angle:c3-os-cc @atom:c3 @atom:os @atom:cc
@angle:c3-os-cd @atom:c3 @atom:os @atom:cd
@angle:c3-os-ce @atom:c3 @atom:os @atom:ce
@angle:c3-os-cf @atom:c3 @atom:os @atom:cf
@angle:c3-os-cl @atom:c3 @atom:os @atom:cl
@angle:c3-os-cy @atom:c3 @atom:os @atom:cy
@angle:c3-os-i @atom:c3 @atom:os @atom:i
@angle:c3-os-n1 @atom:c3 @atom:os @atom:n1
@angle:c3-os-n2 @atom:c3 @atom:os @atom:n2
@angle:c3-os-n3 @atom:c3 @atom:os @atom:n3
@angle:c3-os-n4 @atom:c3 @atom:os @atom:n4
@angle:c3-os-n @atom:c3 @atom:os @atom:n
@angle:c3-os-na @atom:c3 @atom:os @atom:na
@angle:c3-os-nc @atom:c3 @atom:os @atom:nc
@angle:c3-os-nd @atom:c3 @atom:os @atom:nd
@angle:c3-os-nh @atom:c3 @atom:os @atom:nh
@angle:c3-os-no @atom:c3 @atom:os @atom:no
@angle:c3-os-o @atom:c3 @atom:os @atom:o
@angle:c3-os-oh @atom:c3 @atom:os @atom:oh
@angle:c3-os-os @atom:c3 @atom:os @atom:os
@angle:c3-os-p2 @atom:c3 @atom:os @atom:p2
@angle:c3-os-p3 @atom:c3 @atom:os @atom:p3
@angle:c3-os-p4 @atom:c3 @atom:os @atom:p4
@angle:c3-os-p5 @atom:c3 @atom:os @atom:p5
@angle:c3-os-py @atom:c3 @atom:os @atom:py
@angle:c3-os-s4 @atom:c3 @atom:os @atom:s4
@angle:c3-os-s6 @atom:c3 @atom:os @atom:s6
@angle:c3-os-s @atom:c3 @atom:os @atom:s
@angle:c3-os-sh @atom:c3 @atom:os @atom:sh
@angle:c3-os-ss @atom:c3 @atom:os @atom:ss
@angle:ca-os-ca @atom:ca @atom:os @atom:ca
@angle:ca-os-cc @atom:ca @atom:os @atom:cc
@angle:ca-os-cd @atom:ca @atom:os @atom:cd
@angle:ca-os-n3 @atom:ca @atom:os @atom:n3
@angle:ca-os-na @atom:ca @atom:os @atom:na
@angle:ca-os-nc @atom:ca @atom:os @atom:nc
@angle:ca-os-nd @atom:ca @atom:os @atom:nd
@angle:ca-os-p5 @atom:ca @atom:os @atom:p5
@angle:ca-os-s6 @atom:ca @atom:os @atom:s6
@angle:c-os-c2 @atom:c @atom:os @atom:c2
@angle:c-os-c3 @atom:c @atom:os @atom:c3
@angle:c-os-c @atom:c @atom:os @atom:c
@angle:c-os-ca @atom:c @atom:os @atom:ca
@angle:c-os-cc @atom:c @atom:os @atom:cc
@angle:cc-os-cc @atom:cc @atom:os @atom:cc
@angle:cc-os-cd @atom:cc @atom:os @atom:cd
@angle:c-os-cd @atom:c @atom:os @atom:cd
@angle:cc-os-na @atom:cc @atom:os @atom:na
@angle:cc-os-nc @atom:cc @atom:os @atom:nc
@angle:cc-os-os @atom:cc @atom:os @atom:os
@angle:cc-os-ss @atom:cc @atom:os @atom:ss
@angle:c-os-cy @atom:c @atom:os @atom:cy
@angle:cd-os-cd @atom:cd @atom:os @atom:cd
@angle:cd-os-na @atom:cd @atom:os @atom:na
@angle:cd-os-nd @atom:cd @atom:os @atom:nd
@angle:cd-os-os @atom:cd @atom:os @atom:os
@angle:cd-os-ss @atom:cd @atom:os @atom:ss
@angle:cl-os-cl @atom:cl @atom:os @atom:cl
@angle:c-os-n2 @atom:c @atom:os @atom:n2
@angle:c-os-n @atom:c @atom:os @atom:n
@angle:c-os-oh @atom:c @atom:os @atom:oh
@angle:c-os-os @atom:c @atom:os @atom:os
@angle:c-os-p5 @atom:c @atom:os @atom:p5
@angle:c-os-sy @atom:c @atom:os @atom:sy
@angle:cx-os-cx @atom:cx @atom:os @atom:cx
@angle:cx-os-n @atom:cx @atom:os @atom:n
@angle:cx-os-os @atom:cx @atom:os @atom:os
@angle:cy-os-cy @atom:cy @atom:os @atom:cy
@angle:f-os-f @atom:f @atom:os @atom:f
@angle:f-os-os @atom:f @atom:os @atom:os
@angle:i-os-i @atom:i @atom:os @atom:i
@angle:n1-os-n1 @atom:n1 @atom:os @atom:n1
@angle:n2-os-n2 @atom:n2 @atom:os @atom:n2
@angle:n2-os-s6 @atom:n2 @atom:os @atom:s6
@angle:n3-os-n3 @atom:n3 @atom:os @atom:n3
@angle:n4-os-n4 @atom:n4 @atom:os @atom:n4
@angle:na-os-na @atom:na @atom:os @atom:na
@angle:na-os-ss @atom:na @atom:os @atom:ss
@angle:nc-os-nc @atom:nc @atom:os @atom:nc
@angle:nc-os-ss @atom:nc @atom:os @atom:ss
@angle:nd-os-nd @atom:nd @atom:os @atom:nd
@angle:nd-os-ss @atom:nd @atom:os @atom:ss
@angle:nh-os-nh @atom:nh @atom:os @atom:nh
@angle:n-os-n @atom:n @atom:os @atom:n
@angle:no-os-no @atom:no @atom:os @atom:no
@angle:n-os-s6 @atom:n @atom:os @atom:s6
@angle:o-os-o @atom:o @atom:os @atom:o
@angle:p2-os-p2 @atom:p2 @atom:os @atom:p2
@angle:p2-os-p5 @atom:p2 @atom:os @atom:p5
@angle:p3-os-p3 @atom:p3 @atom:os @atom:p3
@angle:p3-os-py @atom:p3 @atom:os @atom:py
@angle:p5-os-p5 @atom:p5 @atom:os @atom:p5
@angle:s4-os-s4 @atom:s4 @atom:os @atom:s4
@angle:s6-os-s6 @atom:s6 @atom:os @atom:s6
@angle:sh-os-sh @atom:sh @atom:os @atom:sh
@angle:s-os-s @atom:s @atom:os @atom:s
@angle:ss-os-ss @atom:ss @atom:os @atom:ss
@angle:br-p2-br @atom:br @atom:p2 @atom:br
@angle:br-p2-c2 @atom:br @atom:p2 @atom:c2
@angle:br-p2-n2 @atom:br @atom:p2 @atom:n2
@angle:br-p2-o @atom:br @atom:p2 @atom:o
@angle:br-p2-p2 @atom:br @atom:p2 @atom:p2
@angle:br-p2-s @atom:br @atom:p2 @atom:s
@angle:c1-p2-c1 @atom:c1 @atom:p2 @atom:c1
@angle:c1-p2-c2 @atom:c1 @atom:p2 @atom:c2
@angle:c1-p2-n2 @atom:c1 @atom:p2 @atom:n2
@angle:c1-p2-o @atom:c1 @atom:p2 @atom:o
@angle:c1-p2-p2 @atom:c1 @atom:p2 @atom:p2
@angle:c1-p2-s @atom:c1 @atom:p2 @atom:s
@angle:c2-p2-c2 @atom:c2 @atom:p2 @atom:c2
@angle:c2-p2-c3 @atom:c2 @atom:p2 @atom:c3
@angle:c2-p2-ca @atom:c2 @atom:p2 @atom:ca
@angle:c2-p2-cl @atom:c2 @atom:p2 @atom:cl
@angle:c2-p2-f @atom:c2 @atom:p2 @atom:f
@angle:c2-p2-hp @atom:c2 @atom:p2 @atom:hp
@angle:c2-p2-i @atom:c2 @atom:p2 @atom:i
@angle:c2-p2-n2 @atom:c2 @atom:p2 @atom:n2
@angle:c2-p2-n3 @atom:c2 @atom:p2 @atom:n3
@angle:c2-p2-n4 @atom:c2 @atom:p2 @atom:n4
@angle:c2-p2-n @atom:c2 @atom:p2 @atom:n
@angle:c2-p2-na @atom:c2 @atom:p2 @atom:na
@angle:c2-p2-nh @atom:c2 @atom:p2 @atom:nh
@angle:c2-p2-no @atom:c2 @atom:p2 @atom:no
@angle:c2-p2-o @atom:c2 @atom:p2 @atom:o
@angle:c2-p2-oh @atom:c2 @atom:p2 @atom:oh
@angle:c2-p2-os @atom:c2 @atom:p2 @atom:os
@angle:c2-p2-p2 @atom:c2 @atom:p2 @atom:p2
@angle:c2-p2-p3 @atom:c2 @atom:p2 @atom:p3
@angle:c2-p2-p4 @atom:c2 @atom:p2 @atom:p4
@angle:c2-p2-p5 @atom:c2 @atom:p2 @atom:p5
@angle:c2-p2-s4 @atom:c2 @atom:p2 @atom:s4
@angle:c2-p2-s6 @atom:c2 @atom:p2 @atom:s6
@angle:c2-p2-s @atom:c2 @atom:p2 @atom:s
@angle:c2-p2-sh @atom:c2 @atom:p2 @atom:sh
@angle:c2-p2-ss @atom:c2 @atom:p2 @atom:ss
@angle:c3-p2-c3 @atom:c3 @atom:p2 @atom:c3
@angle:c3-p2-n2 @atom:c3 @atom:p2 @atom:n2
@angle:c3-p2-o @atom:c3 @atom:p2 @atom:o
@angle:c3-p2-os @atom:c3 @atom:p2 @atom:os
@angle:c3-p2-p2 @atom:c3 @atom:p2 @atom:p2
@angle:c3-p2-s @atom:c3 @atom:p2 @atom:s
@angle:ca-p2-ca @atom:ca @atom:p2 @atom:ca
@angle:ca-p2-n2 @atom:ca @atom:p2 @atom:n2
@angle:ca-p2-n @atom:ca @atom:p2 @atom:n
@angle:ca-p2-na @atom:ca @atom:p2 @atom:na
@angle:ca-p2-o @atom:ca @atom:p2 @atom:o
@angle:ca-p2-s @atom:ca @atom:p2 @atom:s
@angle:c-p2-c2 @atom:c @atom:p2 @atom:c2
@angle:c-p2-c @atom:c @atom:p2 @atom:c
@angle:ce-p2-o @atom:ce @atom:p2 @atom:o
@angle:ce-p2-s @atom:ce @atom:p2 @atom:s
@angle:cf-p2-o @atom:cf @atom:p2 @atom:o
@angle:cf-p2-s @atom:cf @atom:p2 @atom:s
@angle:cl-p2-cl @atom:cl @atom:p2 @atom:cl
@angle:cl-p2-n2 @atom:cl @atom:p2 @atom:n2
@angle:cl-p2-o @atom:cl @atom:p2 @atom:o
@angle:cl-p2-p2 @atom:cl @atom:p2 @atom:p2
@angle:cl-p2-s @atom:cl @atom:p2 @atom:s
@angle:f-p2-f @atom:f @atom:p2 @atom:f
@angle:f-p2-n2 @atom:f @atom:p2 @atom:n2
@angle:f-p2-o @atom:f @atom:p2 @atom:o
@angle:f-p2-p2 @atom:f @atom:p2 @atom:p2
@angle:f-p2-s @atom:f @atom:p2 @atom:s
@angle:hp-p2-hp @atom:hp @atom:p2 @atom:hp
@angle:hp-p2-n1 @atom:hp @atom:p2 @atom:n1
@angle:hp-p2-n2 @atom:hp @atom:p2 @atom:n2
@angle:hp-p2-ne @atom:hp @atom:p2 @atom:ne
@angle:hp-p2-nf @atom:hp @atom:p2 @atom:nf
@angle:hp-p2-o @atom:hp @atom:p2 @atom:o
@angle:hp-p2-p2 @atom:hp @atom:p2 @atom:p2
@angle:hp-p2-p4 @atom:hp @atom:p2 @atom:p4
@angle:hp-p2-p5 @atom:hp @atom:p2 @atom:p5
@angle:hp-p2-pe @atom:hp @atom:p2 @atom:pe
@angle:hp-p2-pf @atom:hp @atom:p2 @atom:pf
@angle:hp-p2-s4 @atom:hp @atom:p2 @atom:s4
@angle:hp-p2-s @atom:hp @atom:p2 @atom:s
@angle:hp-p2-s6 @atom:hp @atom:p2 @atom:s6
@angle:i-p2-i @atom:i @atom:p2 @atom:i
@angle:i-p2-n2 @atom:i @atom:p2 @atom:n2
@angle:i-p2-o @atom:i @atom:p2 @atom:o
@angle:i-p2-p2 @atom:i @atom:p2 @atom:p2
@angle:i-p2-s @atom:i @atom:p2 @atom:s
@angle:n1-p2-n1 @atom:n1 @atom:p2 @atom:n1
@angle:n2-p2-n2 @atom:n2 @atom:p2 @atom:n2
@angle:n2-p2-n3 @atom:n2 @atom:p2 @atom:n3
@angle:n2-p2-n4 @atom:n2 @atom:p2 @atom:n4
@angle:n2-p2-na @atom:n2 @atom:p2 @atom:na
@angle:n2-p2-nh @atom:n2 @atom:p2 @atom:nh
@angle:n2-p2-no @atom:n2 @atom:p2 @atom:no
@angle:n2-p2-o @atom:n2 @atom:p2 @atom:o
@angle:n2-p2-oh @atom:n2 @atom:p2 @atom:oh
@angle:n2-p2-os @atom:n2 @atom:p2 @atom:os
@angle:n2-p2-p3 @atom:n2 @atom:p2 @atom:p3
@angle:n2-p2-p4 @atom:n2 @atom:p2 @atom:p4
@angle:n2-p2-p5 @atom:n2 @atom:p2 @atom:p5
@angle:n2-p2-s4 @atom:n2 @atom:p2 @atom:s4
@angle:n2-p2-s6 @atom:n2 @atom:p2 @atom:s6
@angle:n2-p2-s @atom:n2 @atom:p2 @atom:s
@angle:n2-p2-sh @atom:n2 @atom:p2 @atom:sh
@angle:n2-p2-ss @atom:n2 @atom:p2 @atom:ss
@angle:n3-p2-n3 @atom:n3 @atom:p2 @atom:n3
@angle:n3-p2-o @atom:n3 @atom:p2 @atom:o
@angle:n3-p2-p2 @atom:n3 @atom:p2 @atom:p2
@angle:n3-p2-s @atom:n3 @atom:p2 @atom:s
@angle:n4-p2-n4 @atom:n4 @atom:p2 @atom:n4
@angle:n4-p2-o @atom:n4 @atom:p2 @atom:o
@angle:n4-p2-p2 @atom:n4 @atom:p2 @atom:p2
@angle:n4-p2-s @atom:n4 @atom:p2 @atom:s
@angle:na-p2-na @atom:na @atom:p2 @atom:na
@angle:na-p2-o @atom:na @atom:p2 @atom:o
@angle:na-p2-s @atom:na @atom:p2 @atom:s
@angle:ne-p2-o @atom:ne @atom:p2 @atom:o
@angle:ne-p2-s @atom:ne @atom:p2 @atom:s
@angle:nf-p2-o @atom:nf @atom:p2 @atom:o
@angle:nf-p2-s @atom:nf @atom:p2 @atom:s
@angle:nh-p2-nh @atom:nh @atom:p2 @atom:nh
@angle:nh-p2-o @atom:nh @atom:p2 @atom:o
@angle:nh-p2-p2 @atom:nh @atom:p2 @atom:p2
@angle:nh-p2-s @atom:nh @atom:p2 @atom:s
@angle:n-p2-n2 @atom:n @atom:p2 @atom:n2
@angle:n-p2-o @atom:n @atom:p2 @atom:o
@angle:no-p2-no @atom:no @atom:p2 @atom:no
@angle:no-p2-o @atom:no @atom:p2 @atom:o
@angle:no-p2-p2 @atom:no @atom:p2 @atom:p2
@angle:no-p2-s @atom:no @atom:p2 @atom:s
@angle:n-p2-p2 @atom:n @atom:p2 @atom:p2
@angle:n-p2-s @atom:n @atom:p2 @atom:s
@angle:oh-p2-oh @atom:oh @atom:p2 @atom:oh
@angle:oh-p2-p2 @atom:oh @atom:p2 @atom:p2
@angle:oh-p2-s @atom:oh @atom:p2 @atom:s
@angle:o-p2-o @atom:o @atom:p2 @atom:o
@angle:o-p2-oh @atom:o @atom:p2 @atom:oh
@angle:o-p2-os @atom:o @atom:p2 @atom:os
@angle:o-p2-p2 @atom:o @atom:p2 @atom:p2
@angle:o-p2-p3 @atom:o @atom:p2 @atom:p3
@angle:o-p2-p4 @atom:o @atom:p2 @atom:p4
@angle:o-p2-p5 @atom:o @atom:p2 @atom:p5
@angle:o-p2-pe @atom:o @atom:p2 @atom:pe
@angle:o-p2-pf @atom:o @atom:p2 @atom:pf
@angle:o-p2-s4 @atom:o @atom:p2 @atom:s4
@angle:o-p2-s6 @atom:o @atom:p2 @atom:s6
@angle:o-p2-s @atom:o @atom:p2 @atom:s
@angle:o-p2-sh @atom:o @atom:p2 @atom:sh
@angle:os-p2-os @atom:os @atom:p2 @atom:os
@angle:os-p2-p2 @atom:os @atom:p2 @atom:p2
@angle:o-p2-ss @atom:o @atom:p2 @atom:ss
@angle:os-p2-s @atom:os @atom:p2 @atom:s
@angle:p2-p2-n2 @atom:p2 @atom:p2 @atom:n2
@angle:p2-p2-p3 @atom:p2 @atom:p2 @atom:p3
@angle:p2-p2-p4 @atom:p2 @atom:p2 @atom:p4
@angle:p2-p2-p5 @atom:p2 @atom:p2 @atom:p5
@angle:p2-p2-s4 @atom:p2 @atom:p2 @atom:s4
@angle:p2-p2-s6 @atom:p2 @atom:p2 @atom:s6
@angle:p2-p2-s @atom:p2 @atom:p2 @atom:s
@angle:p2-p2-sh @atom:p2 @atom:p2 @atom:sh
@angle:p3-p2-p3 @atom:p3 @atom:p2 @atom:p3
@angle:p3-p2-s @atom:p3 @atom:p2 @atom:s
@angle:p4-p2-s @atom:p4 @atom:p2 @atom:s
@angle:p5-p2-p5 @atom:p5 @atom:p2 @atom:p5
@angle:p5-p2-s @atom:p5 @atom:p2 @atom:s
@angle:pe-p2-s @atom:pe @atom:p2 @atom:s
@angle:pf-p2-s @atom:pf @atom:p2 @atom:s
@angle:s4-p2-s4 @atom:s4 @atom:p2 @atom:s4
@angle:s6-p2-s6 @atom:s6 @atom:p2 @atom:s6
@angle:sh-p2-sh @atom:sh @atom:p2 @atom:sh
@angle:s-p2-s @atom:s @atom:p2 @atom:s
@angle:s-p2-s4 @atom:s @atom:p2 @atom:s4
@angle:s-p2-s6 @atom:s @atom:p2 @atom:s6
@angle:s-p2-sh @atom:s @atom:p2 @atom:sh
@angle:s-p2-ss @atom:s @atom:p2 @atom:ss
@angle:ss-p2-ss @atom:ss @atom:p2 @atom:ss
@angle:br-p3-br @atom:br @atom:p3 @atom:br
@angle:br-p3-hp @atom:br @atom:p3 @atom:hp
@angle:c1-p3-c1 @atom:c1 @atom:p3 @atom:c1
@angle:c1-p3-f @atom:c1 @atom:p3 @atom:f
@angle:c1-p3-hp @atom:c1 @atom:p3 @atom:hp
@angle:c2-p3-c2 @atom:c2 @atom:p3 @atom:c2
@angle:c2-p3-hp @atom:c2 @atom:p3 @atom:hp
@angle:c3-p3-c3 @atom:c3 @atom:p3 @atom:c3
@angle:c3-p3-ca @atom:c3 @atom:p3 @atom:ca
@angle:c3-p3-cl @atom:c3 @atom:p3 @atom:cl
@angle:c3-p3-f @atom:c3 @atom:p3 @atom:f
@angle:c3-p3-hp @atom:c3 @atom:p3 @atom:hp
@angle:c3-p3-n2 @atom:c3 @atom:p3 @atom:n2
@angle:c3-p3-n3 @atom:c3 @atom:p3 @atom:n3
@angle:c3-p3-n4 @atom:c3 @atom:p3 @atom:n4
@angle:c3-p3-n @atom:c3 @atom:p3 @atom:n
@angle:c3-p3-na @atom:c3 @atom:p3 @atom:na
@angle:c3-p3-nh @atom:c3 @atom:p3 @atom:nh
@angle:c3-p3-no @atom:c3 @atom:p3 @atom:no
@angle:c3-p3-o @atom:c3 @atom:p3 @atom:o
@angle:c3-p3-oh @atom:c3 @atom:p3 @atom:oh
@angle:c3-p3-os @atom:c3 @atom:p3 @atom:os
@angle:c3-p3-p3 @atom:c3 @atom:p3 @atom:p3
@angle:c3-p3-p5 @atom:c3 @atom:p3 @atom:p5
@angle:c3-p3-s4 @atom:c3 @atom:p3 @atom:s4
@angle:c3-p3-s6 @atom:c3 @atom:p3 @atom:s6
@angle:c3-p3-sh @atom:c3 @atom:p3 @atom:sh
@angle:c3-p3-ss @atom:c3 @atom:p3 @atom:ss
@angle:ca-p3-ca @atom:ca @atom:p3 @atom:ca
@angle:ca-p3-hp @atom:ca @atom:p3 @atom:hp
@angle:c-p3-c3 @atom:c @atom:p3 @atom:c3
@angle:c-p3-c @atom:c @atom:p3 @atom:c
@angle:c-p3-hp @atom:c @atom:p3 @atom:hp
@angle:cl-p3-cl @atom:cl @atom:p3 @atom:cl
@angle:cl-p3-f @atom:cl @atom:p3 @atom:f
@angle:cl-p3-hp @atom:cl @atom:p3 @atom:hp
@angle:c-p3-os @atom:c @atom:p3 @atom:os
@angle:cx-p3-hp @atom:cx @atom:p3 @atom:hp
@angle:f-p3-f @atom:f @atom:p3 @atom:f
@angle:f-p3-hp @atom:f @atom:p3 @atom:hp
@angle:f-p3-n3 @atom:f @atom:p3 @atom:n3
@angle:f-p3-os @atom:f @atom:p3 @atom:os
@angle:f-p3-p3 @atom:f @atom:p3 @atom:p3
@angle:hp-p3-hp @atom:hp @atom:p3 @atom:hp
@angle:hp-p3-i @atom:hp @atom:p3 @atom:i
@angle:hp-p3-n1 @atom:hp @atom:p3 @atom:n1
@angle:hp-p3-n2 @atom:hp @atom:p3 @atom:n2
@angle:hp-p3-n3 @atom:hp @atom:p3 @atom:n3
@angle:hp-p3-n4 @atom:hp @atom:p3 @atom:n4
@angle:hp-p3-n @atom:hp @atom:p3 @atom:n
@angle:hp-p3-na @atom:hp @atom:p3 @atom:na
@angle:hp-p3-nh @atom:hp @atom:p3 @atom:nh
@angle:hp-p3-no @atom:hp @atom:p3 @atom:no
@angle:hp-p3-o @atom:hp @atom:p3 @atom:o
@angle:hp-p3-oh @atom:hp @atom:p3 @atom:oh
@angle:hp-p3-os @atom:hp @atom:p3 @atom:os
@angle:hp-p3-p2 @atom:hp @atom:p3 @atom:p2
@angle:hp-p3-p3 @atom:hp @atom:p3 @atom:p3
@angle:hp-p3-p4 @atom:hp @atom:p3 @atom:p4
@angle:hp-p3-p5 @atom:hp @atom:p3 @atom:p5
@angle:hp-p3-s4 @atom:hp @atom:p3 @atom:s4
@angle:hp-p3-s6 @atom:hp @atom:p3 @atom:s6
@angle:hp-p3-sh @atom:hp @atom:p3 @atom:sh
@angle:hp-p3-ss @atom:hp @atom:p3 @atom:ss
@angle:i-p3-i @atom:i @atom:p3 @atom:i
@angle:n1-p3-n1 @atom:n1 @atom:p3 @atom:n1
@angle:n2-p3-n2 @atom:n2 @atom:p3 @atom:n2
@angle:n3-p3-n3 @atom:n3 @atom:p3 @atom:n3
@angle:n3-p3-o @atom:n3 @atom:p3 @atom:o
@angle:n3-p3-oh @atom:n3 @atom:p3 @atom:oh
@angle:n4-p3-n4 @atom:n4 @atom:p3 @atom:n4
@angle:na-p3-na @atom:na @atom:p3 @atom:na
@angle:nh-p3-nh @atom:nh @atom:p3 @atom:nh
@angle:n-p3-n @atom:n @atom:p3 @atom:n
@angle:n-p3-o @atom:n @atom:p3 @atom:o
@angle:no-p3-no @atom:no @atom:p3 @atom:no
@angle:oh-p3-oh @atom:oh @atom:p3 @atom:oh
@angle:o-p3-o @atom:o @atom:p3 @atom:o
@angle:o-p3-p3 @atom:o @atom:p3 @atom:p3
@angle:o-p3-p5 @atom:o @atom:p3 @atom:p5
@angle:o-p3-s4 @atom:o @atom:p3 @atom:s4
@angle:o-p3-s6 @atom:o @atom:p3 @atom:s6
@angle:os-p3-os @atom:os @atom:p3 @atom:os
@angle:p2-p3-p2 @atom:p2 @atom:p3 @atom:p2
@angle:p3-p3-p3 @atom:p3 @atom:p3 @atom:p3
@angle:p4-p3-p4 @atom:p4 @atom:p3 @atom:p4
@angle:p5-p3-p5 @atom:p5 @atom:p3 @atom:p5
@angle:s4-p3-s4 @atom:s4 @atom:p3 @atom:s4
@angle:s6-p3-s6 @atom:s6 @atom:p3 @atom:s6
@angle:sh-p3-sh @atom:sh @atom:p3 @atom:sh
@angle:s-p3-s @atom:s @atom:p3 @atom:s
@angle:ss-p3-ss @atom:ss @atom:p3 @atom:ss
@angle:br-p4-br @atom:br @atom:p4 @atom:br
@angle:br-p4-o @atom:br @atom:p4 @atom:o
@angle:c2-p4-c2 @atom:c2 @atom:p4 @atom:c2
@angle:c2-p4-hp @atom:c2 @atom:p4 @atom:hp
@angle:c2-p4-o @atom:c2 @atom:p4 @atom:o
@angle:c3-p4-c3 @atom:c3 @atom:p4 @atom:c3
@angle:c3-p4-n2 @atom:c3 @atom:p4 @atom:n2
@angle:c3-p4-n3 @atom:c3 @atom:p4 @atom:n3
@angle:c3-p4-n4 @atom:c3 @atom:p4 @atom:n4
@angle:c3-p4-n @atom:c3 @atom:p4 @atom:n
@angle:c3-p4-na @atom:c3 @atom:p4 @atom:na
@angle:c3-p4-nh @atom:c3 @atom:p4 @atom:nh
@angle:c3-p4-no @atom:c3 @atom:p4 @atom:no
@angle:c3-p4-o @atom:c3 @atom:p4 @atom:o
@angle:c3-p4-oh @atom:c3 @atom:p4 @atom:oh
@angle:c3-p4-os @atom:c3 @atom:p4 @atom:os
@angle:c3-p4-p2 @atom:c3 @atom:p4 @atom:p2
@angle:c3-p4-p3 @atom:c3 @atom:p4 @atom:p3
@angle:c3-p4-p4 @atom:c3 @atom:p4 @atom:p4
@angle:c3-p4-p5 @atom:c3 @atom:p4 @atom:p5
@angle:c3-p4-sh @atom:c3 @atom:p4 @atom:sh
@angle:c3-p4-ss @atom:c3 @atom:p4 @atom:ss
@angle:ca-p4-ca @atom:ca @atom:p4 @atom:ca
@angle:ca-p4-o @atom:ca @atom:p4 @atom:o
@angle:cl-p4-cl @atom:cl @atom:p4 @atom:cl
@angle:cl-p4-o @atom:cl @atom:p4 @atom:o
@angle:hp-p4-hp @atom:hp @atom:p4 @atom:hp
@angle:hp-p4-n1 @atom:hp @atom:p4 @atom:n1
@angle:hp-p4-o @atom:hp @atom:p4 @atom:o
@angle:hp-p4-p3 @atom:hp @atom:p4 @atom:p3
@angle:hp-p4-s @atom:hp @atom:p4 @atom:s
@angle:i-p4-i @atom:i @atom:p4 @atom:i
@angle:i-p4-o @atom:i @atom:p4 @atom:o
@angle:n1-p4-n1 @atom:n1 @atom:p4 @atom:n1
@angle:n1-p4-o @atom:n1 @atom:p4 @atom:o
@angle:n2-p4-n2 @atom:n2 @atom:p4 @atom:n2
@angle:n2-p4-o @atom:n2 @atom:p4 @atom:o
@angle:n3-p4-o @atom:n3 @atom:p4 @atom:o
@angle:n4-p4-o @atom:n4 @atom:p4 @atom:o
@angle:na-p4-o @atom:na @atom:p4 @atom:o
@angle:nh-p4-nh @atom:nh @atom:p4 @atom:nh
@angle:nh-p4-o @atom:nh @atom:p4 @atom:o
@angle:n-p4-o @atom:n @atom:p4 @atom:o
@angle:no-p4-o @atom:no @atom:p4 @atom:o
@angle:oh-p4-oh @atom:oh @atom:p4 @atom:oh
@angle:o-p4-o @atom:o @atom:p4 @atom:o
@angle:o-p4-oh @atom:o @atom:p4 @atom:oh
@angle:o-p4-os @atom:o @atom:p4 @atom:os
@angle:o-p4-p2 @atom:o @atom:p4 @atom:p2
@angle:o-p4-p3 @atom:o @atom:p4 @atom:p3
@angle:o-p4-p4 @atom:o @atom:p4 @atom:p4
@angle:o-p4-p5 @atom:o @atom:p4 @atom:p5
@angle:o-p4-s4 @atom:o @atom:p4 @atom:s4
@angle:o-p4-s6 @atom:o @atom:p4 @atom:s6
@angle:o-p4-s @atom:o @atom:p4 @atom:s
@angle:o-p4-sh @atom:o @atom:p4 @atom:sh
@angle:os-p4-os @atom:os @atom:p4 @atom:os
@angle:o-p4-ss @atom:o @atom:p4 @atom:ss
@angle:p2-p4-p2 @atom:p2 @atom:p4 @atom:p2
@angle:p3-p4-p3 @atom:p3 @atom:p4 @atom:p3
@angle:p4-p4-p4 @atom:p4 @atom:p4 @atom:p4
@angle:p5-p4-p5 @atom:p5 @atom:p4 @atom:p5
@angle:s4-p4-s4 @atom:s4 @atom:p4 @atom:s4
@angle:s6-p4-s6 @atom:s6 @atom:p4 @atom:s6
@angle:sh-p4-sh @atom:sh @atom:p4 @atom:sh
@angle:s-p4-s @atom:s @atom:p4 @atom:s
@angle:ss-p4-ss @atom:ss @atom:p4 @atom:ss
@angle:br-p5-br @atom:br @atom:p5 @atom:br
@angle:br-p5-o @atom:br @atom:p5 @atom:o
@angle:br-p5-oh @atom:br @atom:p5 @atom:oh
@angle:c1-p5-c1 @atom:c1 @atom:p5 @atom:c1
@angle:c1-p5-o @atom:c1 @atom:p5 @atom:o
@angle:c1-p5-oh @atom:c1 @atom:p5 @atom:oh
@angle:c2-p5-c2 @atom:c2 @atom:p5 @atom:c2
@angle:c2-p5-o @atom:c2 @atom:p5 @atom:o
@angle:c2-p5-oh @atom:c2 @atom:p5 @atom:oh
@angle:c2-p5-os @atom:c2 @atom:p5 @atom:os
@angle:c3-p5-c3 @atom:c3 @atom:p5 @atom:c3
@angle:c3-p5-hp @atom:c3 @atom:p5 @atom:hp
@angle:c3-p5-n3 @atom:c3 @atom:p5 @atom:n3
@angle:c3-p5-o @atom:c3 @atom:p5 @atom:o
@angle:c3-p5-oh @atom:c3 @atom:p5 @atom:oh
@angle:c3-p5-os @atom:c3 @atom:p5 @atom:os
@angle:c3-p5-p4 @atom:c3 @atom:p5 @atom:p4
@angle:c3-p5-s @atom:c3 @atom:p5 @atom:s
@angle:c3-p5-ss @atom:c3 @atom:p5 @atom:ss
@angle:ca-p5-ca @atom:ca @atom:p5 @atom:ca
@angle:ca-p5-o @atom:ca @atom:p5 @atom:o
@angle:ca-p5-oh @atom:ca @atom:p5 @atom:oh
@angle:ca-p5-os @atom:ca @atom:p5 @atom:os
@angle:c-p5-c @atom:c @atom:p5 @atom:c
@angle:cl-p5-cl @atom:cl @atom:p5 @atom:cl
@angle:cl-p5-o @atom:cl @atom:p5 @atom:o
@angle:cl-p5-oh @atom:cl @atom:p5 @atom:oh
@angle:c-p5-o @atom:c @atom:p5 @atom:o
@angle:c-p5-oh @atom:c @atom:p5 @atom:oh
@angle:f-p5-f @atom:f @atom:p5 @atom:f
@angle:f-p5-o @atom:f @atom:p5 @atom:o
@angle:f-p5-oh @atom:f @atom:p5 @atom:oh
@angle:f-p5-os @atom:f @atom:p5 @atom:os
@angle:f-p5-s @atom:f @atom:p5 @atom:s
@angle:hp-p5-hp @atom:hp @atom:p5 @atom:hp
@angle:hp-p5-n1 @atom:hp @atom:p5 @atom:n1
@angle:hp-p5-o @atom:hp @atom:p5 @atom:o
@angle:hp-p5-oh @atom:hp @atom:p5 @atom:oh
@angle:hp-p5-s @atom:hp @atom:p5 @atom:s
@angle:i-p5-i @atom:i @atom:p5 @atom:i
@angle:i-p5-o @atom:i @atom:p5 @atom:o
@angle:i-p5-oh @atom:i @atom:p5 @atom:oh
@angle:n1-p5-n1 @atom:n1 @atom:p5 @atom:n1
@angle:n1-p5-o @atom:n1 @atom:p5 @atom:o
@angle:n2-p5-n2 @atom:n2 @atom:p5 @atom:n2
@angle:n2-p5-o @atom:n2 @atom:p5 @atom:o
@angle:n2-p5-oh @atom:n2 @atom:p5 @atom:oh
@angle:n3-p5-n3 @atom:n3 @atom:p5 @atom:n3
@angle:n3-p5-nh @atom:n3 @atom:p5 @atom:nh
@angle:n3-p5-o @atom:n3 @atom:p5 @atom:o
@angle:n3-p5-oh @atom:n3 @atom:p5 @atom:oh
@angle:n3-p5-os @atom:n3 @atom:p5 @atom:os
@angle:n3-p5-s @atom:n3 @atom:p5 @atom:s
@angle:n4-p5-n4 @atom:n4 @atom:p5 @atom:n4
@angle:n4-p5-o @atom:n4 @atom:p5 @atom:o
@angle:n4-p5-oh @atom:n4 @atom:p5 @atom:oh
@angle:n4-p5-os @atom:n4 @atom:p5 @atom:os
@angle:na-p5-na @atom:na @atom:p5 @atom:na
@angle:na-p5-o @atom:na @atom:p5 @atom:o
@angle:na-p5-oh @atom:na @atom:p5 @atom:oh
@angle:na-p5-os @atom:na @atom:p5 @atom:os
@angle:nh-p5-nh @atom:nh @atom:p5 @atom:nh
@angle:nh-p5-o @atom:nh @atom:p5 @atom:o
@angle:nh-p5-oh @atom:nh @atom:p5 @atom:oh
@angle:nh-p5-os @atom:nh @atom:p5 @atom:os
@angle:n-p5-n3 @atom:n @atom:p5 @atom:n3
@angle:n-p5-n @atom:n @atom:p5 @atom:n
@angle:n-p5-o @atom:n @atom:p5 @atom:o
@angle:n-p5-oh @atom:n @atom:p5 @atom:oh
@angle:no-p5-no @atom:no @atom:p5 @atom:no
@angle:no-p5-o @atom:no @atom:p5 @atom:o
@angle:no-p5-oh @atom:no @atom:p5 @atom:oh
@angle:no-p5-os @atom:no @atom:p5 @atom:os
@angle:n-p5-os @atom:n @atom:p5 @atom:os
@angle:oh-p5-oh @atom:oh @atom:p5 @atom:oh
@angle:oh-p5-os @atom:oh @atom:p5 @atom:os
@angle:oh-p5-p2 @atom:oh @atom:p5 @atom:p2
@angle:oh-p5-p3 @atom:oh @atom:p5 @atom:p3
@angle:oh-p5-p4 @atom:oh @atom:p5 @atom:p4
@angle:oh-p5-p5 @atom:oh @atom:p5 @atom:p5
@angle:oh-p5-s4 @atom:oh @atom:p5 @atom:s4
@angle:oh-p5-s6 @atom:oh @atom:p5 @atom:s6
@angle:oh-p5-s @atom:oh @atom:p5 @atom:s
@angle:oh-p5-sh @atom:oh @atom:p5 @atom:sh
@angle:oh-p5-ss @atom:oh @atom:p5 @atom:ss
@angle:o-p5-o @atom:o @atom:p5 @atom:o
@angle:o-p5-oh @atom:o @atom:p5 @atom:oh
@angle:o-p5-os @atom:o @atom:p5 @atom:os
@angle:o-p5-p2 @atom:o @atom:p5 @atom:p2
@angle:o-p5-p3 @atom:o @atom:p5 @atom:p3
@angle:o-p5-p4 @atom:o @atom:p5 @atom:p4
@angle:o-p5-p5 @atom:o @atom:p5 @atom:p5
@angle:o-p5-s4 @atom:o @atom:p5 @atom:s4
@angle:o-p5-s6 @atom:o @atom:p5 @atom:s6
@angle:o-p5-s @atom:o @atom:p5 @atom:s
@angle:o-p5-sh @atom:o @atom:p5 @atom:sh
@angle:os-p5-os @atom:os @atom:p5 @atom:os
@angle:os-p5-p3 @atom:os @atom:p5 @atom:p3
@angle:os-p5-p5 @atom:os @atom:p5 @atom:p5
@angle:os-p5-s4 @atom:os @atom:p5 @atom:s4
@angle:os-p5-s6 @atom:os @atom:p5 @atom:s6
@angle:o-p5-ss @atom:o @atom:p5 @atom:ss
@angle:os-p5-s @atom:os @atom:p5 @atom:s
@angle:os-p5-sh @atom:os @atom:p5 @atom:sh
@angle:os-p5-ss @atom:os @atom:p5 @atom:ss
@angle:p2-p5-p2 @atom:p2 @atom:p5 @atom:p2
@angle:p3-p5-p3 @atom:p3 @atom:p5 @atom:p3
@angle:p4-p5-p4 @atom:p4 @atom:p5 @atom:p4
@angle:p5-p5-p5 @atom:p5 @atom:p5 @atom:p5
@angle:s6-p5-s6 @atom:s6 @atom:p5 @atom:s6
@angle:sh-p5-sh @atom:sh @atom:p5 @atom:sh
@angle:sh-p5-ss @atom:sh @atom:p5 @atom:ss
@angle:s-p5-s @atom:s @atom:p5 @atom:s
@angle:ss-p5-ss @atom:ss @atom:p5 @atom:ss
@angle:cd-pc-n @atom:cd @atom:pc @atom:n
@angle:cd-pc-na @atom:cd @atom:pc @atom:na
@angle:cc-pd-n @atom:cc @atom:pd @atom:n
@angle:cc-pd-na @atom:cc @atom:pd @atom:na
@angle:c2-pe-ca @atom:c2 @atom:pe @atom:ca
@angle:c2-pe-ce @atom:c2 @atom:pe @atom:ce
@angle:c2-pe-cg @atom:c2 @atom:pe @atom:cg
@angle:c2-pe-n2 @atom:c2 @atom:pe @atom:n2
@angle:c2-pe-ne @atom:c2 @atom:pe @atom:ne
@angle:c2-pe-o @atom:c2 @atom:pe @atom:o
@angle:c2-pe-p2 @atom:c2 @atom:pe @atom:p2
@angle:c2-pe-pe @atom:c2 @atom:pe @atom:pe
@angle:c2-pe-px @atom:c2 @atom:pe @atom:px
@angle:c2-pe-py @atom:c2 @atom:pe @atom:py
@angle:c2-pe-s @atom:c2 @atom:pe @atom:s
@angle:c2-pe-sx @atom:c2 @atom:pe @atom:sx
@angle:c2-pe-sy @atom:c2 @atom:pe @atom:sy
@angle:ca-pe-n2 @atom:ca @atom:pe @atom:n2
@angle:ca-pe-o @atom:ca @atom:pe @atom:o
@angle:ca-pe-p2 @atom:ca @atom:pe @atom:p2
@angle:ca-pe-pf @atom:ca @atom:pe @atom:pf
@angle:ca-pe-s @atom:ca @atom:pe @atom:s
@angle:c-pe-c2 @atom:c @atom:pe @atom:c2
@angle:ce-pe-n2 @atom:ce @atom:pe @atom:n2
@angle:ce-pe-o @atom:ce @atom:pe @atom:o
@angle:ce-pe-p2 @atom:ce @atom:pe @atom:p2
@angle:ce-pe-s @atom:ce @atom:pe @atom:s
@angle:cg-pe-n2 @atom:cg @atom:pe @atom:n2
@angle:cg-pe-o @atom:cg @atom:pe @atom:o
@angle:cg-pe-p2 @atom:cg @atom:pe @atom:p2
@angle:cg-pe-s @atom:cg @atom:pe @atom:s
@angle:n2-pe-n2 @atom:n2 @atom:pe @atom:n2
@angle:n2-pe-ne @atom:n2 @atom:pe @atom:ne
@angle:n2-pe-o @atom:n2 @atom:pe @atom:o
@angle:n2-pe-p2 @atom:n2 @atom:pe @atom:p2
@angle:n2-pe-pe @atom:n2 @atom:pe @atom:pe
@angle:n2-pe-px @atom:n2 @atom:pe @atom:px
@angle:n2-pe-py @atom:n2 @atom:pe @atom:py
@angle:n2-pe-s @atom:n2 @atom:pe @atom:s
@angle:n2-pe-sx @atom:n2 @atom:pe @atom:sx
@angle:n2-pe-sy @atom:n2 @atom:pe @atom:sy
@angle:ne-pe-o @atom:ne @atom:pe @atom:o
@angle:ne-pe-p2 @atom:ne @atom:pe @atom:p2
@angle:ne-pe-s @atom:ne @atom:pe @atom:s
@angle:o-pe-o @atom:o @atom:pe @atom:o
@angle:o-pe-p2 @atom:o @atom:pe @atom:p2
@angle:o-pe-pe @atom:o @atom:pe @atom:pe
@angle:o-pe-px @atom:o @atom:pe @atom:px
@angle:o-pe-py @atom:o @atom:pe @atom:py
@angle:o-pe-s @atom:o @atom:pe @atom:s
@angle:o-pe-sx @atom:o @atom:pe @atom:sx
@angle:o-pe-sy @atom:o @atom:pe @atom:sy
@angle:p2-pe-pe @atom:p2 @atom:pe @atom:pe
@angle:p2-pe-px @atom:p2 @atom:pe @atom:px
@angle:p2-pe-py @atom:p2 @atom:pe @atom:py
@angle:p2-pe-s @atom:p2 @atom:pe @atom:s
@angle:p2-pe-sx @atom:p2 @atom:pe @atom:sx
@angle:p2-pe-sy @atom:p2 @atom:pe @atom:sy
@angle:pe-pe-s @atom:pe @atom:pe @atom:s
@angle:px-pe-s @atom:px @atom:pe @atom:s
@angle:py-pe-s @atom:py @atom:pe @atom:s
@angle:s-pe-s @atom:s @atom:pe @atom:s
@angle:s-pe-sx @atom:s @atom:pe @atom:sx
@angle:s-pe-sy @atom:s @atom:pe @atom:sy
@angle:c2-pf-ca @atom:c2 @atom:pf @atom:ca
@angle:c2-pf-cf @atom:c2 @atom:pf @atom:cf
@angle:c2-pf-ch @atom:c2 @atom:pf @atom:ch
@angle:c2-pf-n2 @atom:c2 @atom:pf @atom:n2
@angle:c2-pf-nf @atom:c2 @atom:pf @atom:nf
@angle:c2-pf-o @atom:c2 @atom:pf @atom:o
@angle:c2-pf-p2 @atom:c2 @atom:pf @atom:p2
@angle:c2-pf-pf @atom:c2 @atom:pf @atom:pf
@angle:c2-pf-px @atom:c2 @atom:pf @atom:px
@angle:c2-pf-py @atom:c2 @atom:pf @atom:py
@angle:c2-pf-s @atom:c2 @atom:pf @atom:s
@angle:c2-pf-sx @atom:c2 @atom:pf @atom:sx
@angle:c2-pf-sy @atom:c2 @atom:pf @atom:sy
@angle:ca-pf-n2 @atom:ca @atom:pf @atom:n2
@angle:ca-pf-o @atom:ca @atom:pf @atom:o
@angle:ca-pf-p2 @atom:ca @atom:pf @atom:p2
@angle:ca-pf-pe @atom:ca @atom:pf @atom:pe
@angle:ca-pf-s @atom:ca @atom:pf @atom:s
@angle:c-pf-c2 @atom:c @atom:pf @atom:c2
@angle:cf-pf-n2 @atom:cf @atom:pf @atom:n2
@angle:cf-pf-o @atom:cf @atom:pf @atom:o
@angle:cf-pf-p2 @atom:cf @atom:pf @atom:p2
@angle:cf-pf-s @atom:cf @atom:pf @atom:s
@angle:ch-pf-n2 @atom:ch @atom:pf @atom:n2
@angle:ch-pf-o @atom:ch @atom:pf @atom:o
@angle:ch-pf-p2 @atom:ch @atom:pf @atom:p2
@angle:ch-pf-s @atom:ch @atom:pf @atom:s
@angle:n2-pf-n2 @atom:n2 @atom:pf @atom:n2
@angle:n2-pf-nf @atom:n2 @atom:pf @atom:nf
@angle:n2-pf-o @atom:n2 @atom:pf @atom:o
@angle:n2-pf-p2 @atom:n2 @atom:pf @atom:p2
@angle:n2-pf-pf @atom:n2 @atom:pf @atom:pf
@angle:n2-pf-px @atom:n2 @atom:pf @atom:px
@angle:n2-pf-py @atom:n2 @atom:pf @atom:py
@angle:n2-pf-s @atom:n2 @atom:pf @atom:s
@angle:n2-pf-sx @atom:n2 @atom:pf @atom:sx
@angle:n2-pf-sy @atom:n2 @atom:pf @atom:sy
@angle:nf-pf-o @atom:nf @atom:pf @atom:o
@angle:nf-pf-p2 @atom:nf @atom:pf @atom:p2
@angle:nf-pf-s @atom:nf @atom:pf @atom:s
@angle:o-pf-o @atom:o @atom:pf @atom:o
@angle:o-pf-p2 @atom:o @atom:pf @atom:p2
@angle:o-pf-pf @atom:o @atom:pf @atom:pf
@angle:o-pf-px @atom:o @atom:pf @atom:px
@angle:o-pf-py @atom:o @atom:pf @atom:py
@angle:o-pf-s @atom:o @atom:pf @atom:s
@angle:o-pf-sx @atom:o @atom:pf @atom:sx
@angle:o-pf-sy @atom:o @atom:pf @atom:sy
@angle:p2-pf-pf @atom:p2 @atom:pf @atom:pf
@angle:p2-pf-px @atom:p2 @atom:pf @atom:px
@angle:p2-pf-py @atom:p2 @atom:pf @atom:py
@angle:p2-pf-s @atom:p2 @atom:pf @atom:s
@angle:p2-pf-sx @atom:p2 @atom:pf @atom:sx
@angle:p2-pf-sy @atom:p2 @atom:pf @atom:sy
@angle:pf-pf-s @atom:pf @atom:pf @atom:s
@angle:px-pf-s @atom:px @atom:pf @atom:s
@angle:py-pf-s @atom:py @atom:pf @atom:s
@angle:s-pf-s @atom:s @atom:pf @atom:s
@angle:s-pf-sx @atom:s @atom:pf @atom:sx
@angle:s-pf-sy @atom:s @atom:pf @atom:sy
@angle:c3-px-ca @atom:c3 @atom:px @atom:ca
@angle:c3-px-ce @atom:c3 @atom:px @atom:ce
@angle:c3-px-cf @atom:c3 @atom:px @atom:cf
@angle:c3-px-ne @atom:c3 @atom:px @atom:ne
@angle:c3-px-nf @atom:c3 @atom:px @atom:nf
@angle:c3-px-o @atom:c3 @atom:px @atom:o
@angle:c3-px-pe @atom:c3 @atom:px @atom:pe
@angle:c3-px-pf @atom:c3 @atom:px @atom:pf
@angle:c3-px-py @atom:c3 @atom:px @atom:py
@angle:c3-px-sx @atom:c3 @atom:px @atom:sx
@angle:c3-px-sy @atom:c3 @atom:px @atom:sy
@angle:ca-px-ca @atom:ca @atom:px @atom:ca
@angle:ca-px-o @atom:ca @atom:px @atom:o
@angle:c-px-c3 @atom:c @atom:px @atom:c3
@angle:ce-px-ce @atom:ce @atom:px @atom:ce
@angle:ce-px-o @atom:ce @atom:px @atom:o
@angle:cf-px-cf @atom:cf @atom:px @atom:cf
@angle:cf-px-o @atom:cf @atom:px @atom:o
@angle:c-px-o @atom:c @atom:px @atom:o
@angle:ne-px-ne @atom:ne @atom:px @atom:ne
@angle:ne-px-o @atom:ne @atom:px @atom:o
@angle:nf-px-nf @atom:nf @atom:px @atom:nf
@angle:nf-px-o @atom:nf @atom:px @atom:o
@angle:o-px-pe @atom:o @atom:px @atom:pe
@angle:o-px-pf @atom:o @atom:px @atom:pf
@angle:o-px-py @atom:o @atom:px @atom:py
@angle:o-px-sx @atom:o @atom:px @atom:sx
@angle:o-px-sy @atom:o @atom:px @atom:sy
@angle:pe-px-pe @atom:pe @atom:px @atom:pe
@angle:pf-px-pf @atom:pf @atom:px @atom:pf
@angle:py-px-py @atom:py @atom:px @atom:py
@angle:sx-px-sx @atom:sx @atom:px @atom:sx
@angle:sy-px-sy @atom:sy @atom:px @atom:sy
@angle:c3-py-n4 @atom:c3 @atom:py @atom:n4
@angle:c3-py-na @atom:c3 @atom:py @atom:na
@angle:c3-py-o @atom:c3 @atom:py @atom:o
@angle:c3-py-oh @atom:c3 @atom:py @atom:oh
@angle:c3-py-os @atom:c3 @atom:py @atom:os
@angle:c3-py-px @atom:c3 @atom:py @atom:px
@angle:c3-py-py @atom:c3 @atom:py @atom:py
@angle:c3-py-sx @atom:c3 @atom:py @atom:sx
@angle:ca-py-ca @atom:ca @atom:py @atom:ca
@angle:ca-py-o @atom:ca @atom:py @atom:o
@angle:ca-py-oh @atom:ca @atom:py @atom:oh
@angle:ca-py-os @atom:ca @atom:py @atom:os
@angle:c-py-c3 @atom:c @atom:py @atom:c3
@angle:c-py-c @atom:c @atom:py @atom:c
@angle:ce-py-ce @atom:ce @atom:py @atom:ce
@angle:ce-py-o @atom:ce @atom:py @atom:o
@angle:ce-py-oh @atom:ce @atom:py @atom:oh
@angle:ce-py-os @atom:ce @atom:py @atom:os
@angle:cf-py-cf @atom:cf @atom:py @atom:cf
@angle:cf-py-o @atom:cf @atom:py @atom:o
@angle:cf-py-oh @atom:cf @atom:py @atom:oh
@angle:cf-py-os @atom:cf @atom:py @atom:os
@angle:c-py-o @atom:c @atom:py @atom:o
@angle:c-py-oh @atom:c @atom:py @atom:oh
@angle:c-py-os @atom:c @atom:py @atom:os
@angle:n3-py-ne @atom:n3 @atom:py @atom:ne
@angle:n4-py-o @atom:n4 @atom:py @atom:o
@angle:n4-py-py @atom:n4 @atom:py @atom:py
@angle:na-py-o @atom:na @atom:py @atom:o
@angle:na-py-py @atom:na @atom:py @atom:py
@angle:ne-py-ne @atom:ne @atom:py @atom:ne
@angle:ne-py-o @atom:ne @atom:py @atom:o
@angle:ne-py-oh @atom:ne @atom:py @atom:oh
@angle:ne-py-os @atom:ne @atom:py @atom:os
@angle:nf-py-nf @atom:nf @atom:py @atom:nf
@angle:nf-py-o @atom:nf @atom:py @atom:o
@angle:nf-py-oh @atom:nf @atom:py @atom:oh
@angle:nf-py-os @atom:nf @atom:py @atom:os
@angle:oh-py-oh @atom:oh @atom:py @atom:oh
@angle:oh-py-pe @atom:oh @atom:py @atom:pe
@angle:oh-py-pf @atom:oh @atom:py @atom:pf
@angle:oh-py-px @atom:oh @atom:py @atom:px
@angle:oh-py-py @atom:oh @atom:py @atom:py
@angle:oh-py-sx @atom:oh @atom:py @atom:sx
@angle:oh-py-sy @atom:oh @atom:py @atom:sy
@angle:o-py-oh @atom:o @atom:py @atom:oh
@angle:o-py-os @atom:o @atom:py @atom:os
@angle:o-py-pe @atom:o @atom:py @atom:pe
@angle:o-py-pf @atom:o @atom:py @atom:pf
@angle:o-py-px @atom:o @atom:py @atom:px
@angle:o-py-py @atom:o @atom:py @atom:py
@angle:os-py-os @atom:os @atom:py @atom:os
@angle:os-py-py @atom:os @atom:py @atom:py
@angle:os-py-sx @atom:os @atom:py @atom:sx
@angle:os-py-sy @atom:os @atom:py @atom:sy
@angle:o-py-sx @atom:o @atom:py @atom:sx
@angle:o-py-sy @atom:o @atom:py @atom:sy
@angle:pe-py-pe @atom:pe @atom:py @atom:pe
@angle:pf-py-pf @atom:pf @atom:py @atom:pf
@angle:py-py-py @atom:py @atom:py @atom:py
@angle:py-py-sx @atom:py @atom:py @atom:sx
@angle:sy-py-sy @atom:sy @atom:py @atom:sy
@angle:c1-s2-o @atom:c1 @atom:s2 @atom:o
@angle:c2-s2-n2 @atom:c2 @atom:s2 @atom:n2
@angle:c2-s2-o @atom:c2 @atom:s2 @atom:o
@angle:cl-s2-n1 @atom:cl @atom:s2 @atom:n1
@angle:f-s2-n1 @atom:f @atom:s2 @atom:n1
@angle:n1-s2-o @atom:n1 @atom:s2 @atom:o
@angle:n2-s2-o @atom:n2 @atom:s2 @atom:o
@angle:o-s2-o @atom:o @atom:s2 @atom:o
@angle:o-s2-s @atom:o @atom:s2 @atom:s
@angle:s-s2-s @atom:s @atom:s2 @atom:s
@angle:br-s4-br @atom:br @atom:s4 @atom:br
@angle:br-s4-c3 @atom:br @atom:s4 @atom:c3
@angle:br-s4-o @atom:br @atom:s4 @atom:o
@angle:c1-s4-c1 @atom:c1 @atom:s4 @atom:c1
@angle:c1-s4-o @atom:c1 @atom:s4 @atom:o
@angle:c2-s4-c2 @atom:c2 @atom:s4 @atom:c2
@angle:c2-s4-c3 @atom:c2 @atom:s4 @atom:c3
@angle:c2-s4-o @atom:c2 @atom:s4 @atom:o
@angle:c3-s4-c3 @atom:c3 @atom:s4 @atom:c3
@angle:c3-s4-ca @atom:c3 @atom:s4 @atom:ca
@angle:c3-s4-f @atom:c3 @atom:s4 @atom:f
@angle:c3-s4-hs @atom:c3 @atom:s4 @atom:hs
@angle:c3-s4-i @atom:c3 @atom:s4 @atom:i
@angle:c3-s4-n2 @atom:c3 @atom:s4 @atom:n2
@angle:c3-s4-n3 @atom:c3 @atom:s4 @atom:n3
@angle:c3-s4-n @atom:c3 @atom:s4 @atom:n
@angle:c3-s4-n4 @atom:c3 @atom:s4 @atom:n4
@angle:c3-s4-na @atom:c3 @atom:s4 @atom:na
@angle:c3-s4-nh @atom:c3 @atom:s4 @atom:nh
@angle:c3-s4-no @atom:c3 @atom:s4 @atom:no
@angle:c3-s4-o @atom:c3 @atom:s4 @atom:o
@angle:c3-s4-oh @atom:c3 @atom:s4 @atom:oh
@angle:c3-s4-os @atom:c3 @atom:s4 @atom:os
@angle:c3-s4-p2 @atom:c3 @atom:s4 @atom:p2
@angle:c3-s4-p3 @atom:c3 @atom:s4 @atom:p3
@angle:c3-s4-p4 @atom:c3 @atom:s4 @atom:p4
@angle:c3-s4-p5 @atom:c3 @atom:s4 @atom:p5
@angle:c3-s4-s4 @atom:c3 @atom:s4 @atom:s4
@angle:c3-s4-s @atom:c3 @atom:s4 @atom:s
@angle:c3-s4-s6 @atom:c3 @atom:s4 @atom:s6
@angle:c3-s4-sh @atom:c3 @atom:s4 @atom:sh
@angle:c3-s4-ss @atom:c3 @atom:s4 @atom:ss
@angle:ca-s4-ca @atom:ca @atom:s4 @atom:ca
@angle:ca-s4-o @atom:ca @atom:s4 @atom:o
@angle:c-s4-c3 @atom:c @atom:s4 @atom:c3
@angle:c-s4-c @atom:c @atom:s4 @atom:c
@angle:cl-s4-cl @atom:cl @atom:s4 @atom:cl
@angle:cl-s4-o @atom:cl @atom:s4 @atom:o
@angle:c-s4-o @atom:c @atom:s4 @atom:o
@angle:cx-s4-cx @atom:cx @atom:s4 @atom:cx
@angle:cx-s4-o @atom:cx @atom:s4 @atom:o
@angle:f-s4-f @atom:f @atom:s4 @atom:f
@angle:f-s4-o @atom:f @atom:s4 @atom:o
@angle:f-s4-s @atom:f @atom:s4 @atom:s
@angle:hs-s4-hs @atom:hs @atom:s4 @atom:hs
@angle:hs-s4-n1 @atom:hs @atom:s4 @atom:n1
@angle:hs-s4-o @atom:hs @atom:s4 @atom:o
@angle:i-s4-i @atom:i @atom:s4 @atom:i
@angle:i-s4-o @atom:i @atom:s4 @atom:o
@angle:n1-s4-n1 @atom:n1 @atom:s4 @atom:n1
@angle:n1-s4-o @atom:n1 @atom:s4 @atom:o
@angle:n2-s4-n2 @atom:n2 @atom:s4 @atom:n2
@angle:n2-s4-o @atom:n2 @atom:s4 @atom:o
@angle:n3-s4-n3 @atom:n3 @atom:s4 @atom:n3
@angle:n3-s4-o @atom:n3 @atom:s4 @atom:o
@angle:n4-s4-n4 @atom:n4 @atom:s4 @atom:n4
@angle:n4-s4-o @atom:n4 @atom:s4 @atom:o
@angle:na-s4-na @atom:na @atom:s4 @atom:na
@angle:na-s4-o @atom:na @atom:s4 @atom:o
@angle:nh-s4-nh @atom:nh @atom:s4 @atom:nh
@angle:nh-s4-o @atom:nh @atom:s4 @atom:o
@angle:n-s4-n @atom:n @atom:s4 @atom:n
@angle:n-s4-o @atom:n @atom:s4 @atom:o
@angle:no-s4-no @atom:no @atom:s4 @atom:no
@angle:no-s4-o @atom:no @atom:s4 @atom:o
@angle:oh-s4-oh @atom:oh @atom:s4 @atom:oh
@angle:o-s4-o @atom:o @atom:s4 @atom:o
@angle:o-s4-oh @atom:o @atom:s4 @atom:oh
@angle:o-s4-os @atom:o @atom:s4 @atom:os
@angle:o-s4-p2 @atom:o @atom:s4 @atom:p2
@angle:o-s4-p3 @atom:o @atom:s4 @atom:p3
@angle:o-s4-p4 @atom:o @atom:s4 @atom:p4
@angle:o-s4-p5 @atom:o @atom:s4 @atom:p5
@angle:o-s4-s4 @atom:o @atom:s4 @atom:s4
@angle:o-s4-s @atom:o @atom:s4 @atom:s
@angle:o-s4-s6 @atom:o @atom:s4 @atom:s6
@angle:o-s4-sh @atom:o @atom:s4 @atom:sh
@angle:os-s4-os @atom:os @atom:s4 @atom:os
@angle:o-s4-ss @atom:o @atom:s4 @atom:ss
@angle:p2-s4-p2 @atom:p2 @atom:s4 @atom:p2
@angle:p3-s4-p3 @atom:p3 @atom:s4 @atom:p3
@angle:p5-s4-p5 @atom:p5 @atom:s4 @atom:p5
@angle:s4-s4-s4 @atom:s4 @atom:s4 @atom:s4
@angle:s4-s4-s6 @atom:s4 @atom:s4 @atom:s6
@angle:s6-s4-s6 @atom:s6 @atom:s4 @atom:s6
@angle:sh-s4-sh @atom:sh @atom:s4 @atom:sh
@angle:sh-s4-ss @atom:sh @atom:s4 @atom:ss
@angle:s-s4-s @atom:s @atom:s4 @atom:s
@angle:ss-s4-ss @atom:ss @atom:s4 @atom:ss
@angle:br-s6-br @atom:br @atom:s6 @atom:br
@angle:br-s6-c3 @atom:br @atom:s6 @atom:c3
@angle:br-s6-f @atom:br @atom:s6 @atom:f
@angle:br-s6-o @atom:br @atom:s6 @atom:o
@angle:c1-s6-c1 @atom:c1 @atom:s6 @atom:c1
@angle:c1-s6-o @atom:c1 @atom:s6 @atom:o
@angle:c2-s6-c2 @atom:c2 @atom:s6 @atom:c2
@angle:c2-s6-c3 @atom:c2 @atom:s6 @atom:c3
@angle:c2-s6-o @atom:c2 @atom:s6 @atom:o
@angle:c3-s6-c3 @atom:c3 @atom:s6 @atom:c3
@angle:c3-s6-ca @atom:c3 @atom:s6 @atom:ca
@angle:c3-s6-cy @atom:c3 @atom:s6 @atom:cy
@angle:c3-s6-f @atom:c3 @atom:s6 @atom:f
@angle:c3-s6-hs @atom:c3 @atom:s6 @atom:hs
@angle:c3-s6-i @atom:c3 @atom:s6 @atom:i
@angle:c3-s6-n2 @atom:c3 @atom:s6 @atom:n2
@angle:c3-s6-n3 @atom:c3 @atom:s6 @atom:n3
@angle:c3-s6-n @atom:c3 @atom:s6 @atom:n
@angle:c3-s6-n4 @atom:c3 @atom:s6 @atom:n4
@angle:c3-s6-na @atom:c3 @atom:s6 @atom:na
@angle:c3-s6-nh @atom:c3 @atom:s6 @atom:nh
@angle:c3-s6-no @atom:c3 @atom:s6 @atom:no
@angle:c3-s6-o @atom:c3 @atom:s6 @atom:o
@angle:c3-s6-oh @atom:c3 @atom:s6 @atom:oh
@angle:c3-s6-os @atom:c3 @atom:s6 @atom:os
@angle:c3-s6-p2 @atom:c3 @atom:s6 @atom:p2
@angle:c3-s6-p3 @atom:c3 @atom:s6 @atom:p3
@angle:c3-s6-p4 @atom:c3 @atom:s6 @atom:p4
@angle:c3-s6-p5 @atom:c3 @atom:s6 @atom:p5
@angle:c3-s6-s4 @atom:c3 @atom:s6 @atom:s4
@angle:c3-s6-s @atom:c3 @atom:s6 @atom:s
@angle:c3-s6-s6 @atom:c3 @atom:s6 @atom:s6
@angle:c3-s6-sh @atom:c3 @atom:s6 @atom:sh
@angle:c3-s6-ss @atom:c3 @atom:s6 @atom:ss
@angle:ca-s6-ca @atom:ca @atom:s6 @atom:ca
@angle:ca-s6-o @atom:ca @atom:s6 @atom:o
@angle:c-s6-c3 @atom:c @atom:s6 @atom:c3
@angle:c-s6-c @atom:c @atom:s6 @atom:c
@angle:cc-s6-o @atom:cc @atom:s6 @atom:o
@angle:cl-s6-cl @atom:cl @atom:s6 @atom:cl
@angle:cl-s6-f @atom:cl @atom:s6 @atom:f
@angle:cl-s6-o @atom:cl @atom:s6 @atom:o
@angle:c-s6-o @atom:c @atom:s6 @atom:o
@angle:c-s6-os @atom:c @atom:s6 @atom:os
@angle:cx-s6-cx @atom:cx @atom:s6 @atom:cx
@angle:cy-s6-o @atom:cy @atom:s6 @atom:o
@angle:f-s6-f @atom:f @atom:s6 @atom:f
@angle:f-s6-o @atom:f @atom:s6 @atom:o
@angle:hs-s6-hs @atom:hs @atom:s6 @atom:hs
@angle:hs-s6-n1 @atom:hs @atom:s6 @atom:n1
@angle:hs-s6-o @atom:hs @atom:s6 @atom:o
@angle:i-s6-i @atom:i @atom:s6 @atom:i
@angle:i-s6-o @atom:i @atom:s6 @atom:o
@angle:n1-s6-n1 @atom:n1 @atom:s6 @atom:n1
@angle:n1-s6-o @atom:n1 @atom:s6 @atom:o
@angle:n2-s6-n2 @atom:n2 @atom:s6 @atom:n2
@angle:n2-s6-o @atom:n2 @atom:s6 @atom:o
@angle:n2-s6-oh @atom:n2 @atom:s6 @atom:oh
@angle:n2-s6-os @atom:n2 @atom:s6 @atom:os
@angle:n3-s6-n3 @atom:n3 @atom:s6 @atom:n3
@angle:n3-s6-o @atom:n3 @atom:s6 @atom:o
@angle:n3-s6-os @atom:n3 @atom:s6 @atom:os
@angle:n4-s6-n4 @atom:n4 @atom:s6 @atom:n4
@angle:n4-s6-o @atom:n4 @atom:s6 @atom:o
@angle:na-s6-na @atom:na @atom:s6 @atom:na
@angle:na-s6-o @atom:na @atom:s6 @atom:o
@angle:nh-s6-nh @atom:nh @atom:s6 @atom:nh
@angle:nh-s6-o @atom:nh @atom:s6 @atom:o
@angle:n-s6-n @atom:n @atom:s6 @atom:n
@angle:n-s6-o @atom:n @atom:s6 @atom:o
@angle:no-s6-no @atom:no @atom:s6 @atom:no
@angle:no-s6-o @atom:no @atom:s6 @atom:o
@angle:n-s6-os @atom:n @atom:s6 @atom:os
@angle:oh-s6-oh @atom:oh @atom:s6 @atom:oh
@angle:oh-s6-os @atom:oh @atom:s6 @atom:os
@angle:oh-s6-p2 @atom:oh @atom:s6 @atom:p2
@angle:o-s6-o @atom:o @atom:s6 @atom:o
@angle:o-s6-oh @atom:o @atom:s6 @atom:oh
@angle:o-s6-os @atom:o @atom:s6 @atom:os
@angle:o-s6-p2 @atom:o @atom:s6 @atom:p2
@angle:o-s6-p3 @atom:o @atom:s6 @atom:p3
@angle:o-s6-p4 @atom:o @atom:s6 @atom:p4
@angle:o-s6-p5 @atom:o @atom:s6 @atom:p5
@angle:o-s6-s4 @atom:o @atom:s6 @atom:s4
@angle:o-s6-s @atom:o @atom:s6 @atom:s
@angle:o-s6-s6 @atom:o @atom:s6 @atom:s6
@angle:o-s6-sh @atom:o @atom:s6 @atom:sh
@angle:os-s6-os @atom:os @atom:s6 @atom:os
@angle:o-s6-ss @atom:o @atom:s6 @atom:ss
@angle:p3-s6-p3 @atom:p3 @atom:s6 @atom:p3
@angle:p5-s6-p5 @atom:p5 @atom:s6 @atom:p5
@angle:s4-s6-s4 @atom:s4 @atom:s6 @atom:s4
@angle:s4-s6-s6 @atom:s4 @atom:s6 @atom:s6
@angle:s6-s6-s6 @atom:s6 @atom:s6 @atom:s6
@angle:sh-s6-sh @atom:sh @atom:s6 @atom:sh
@angle:sh-s6-ss @atom:sh @atom:s6 @atom:ss
@angle:s-s6-s @atom:s @atom:s6 @atom:s
@angle:ss-s6-ss @atom:ss @atom:s6 @atom:ss
@angle:br-sh-hs @atom:br @atom:sh @atom:hs
@angle:c1-sh-hs @atom:c1 @atom:sh @atom:hs
@angle:c2-sh-hs @atom:c2 @atom:sh @atom:hs
@angle:c3-sh-hs @atom:c3 @atom:sh @atom:hs
@angle:ca-sh-hs @atom:ca @atom:sh @atom:hs
@angle:cc-sh-hs @atom:cc @atom:sh @atom:hs
@angle:c-sh-hs @atom:c @atom:sh @atom:hs
@angle:f-sh-hs @atom:f @atom:sh @atom:hs
@angle:hs-sh-hs @atom:hs @atom:sh @atom:hs
@angle:hs-sh-i @atom:hs @atom:sh @atom:i
@angle:hs-sh-n1 @atom:hs @atom:sh @atom:n1
@angle:hs-sh-n2 @atom:hs @atom:sh @atom:n2
@angle:hs-sh-n @atom:hs @atom:sh @atom:n
@angle:hs-sh-n3 @atom:hs @atom:sh @atom:n3
@angle:hs-sh-n4 @atom:hs @atom:sh @atom:n4
@angle:hs-sh-na @atom:hs @atom:sh @atom:na
@angle:hs-sh-nh @atom:hs @atom:sh @atom:nh
@angle:hs-sh-no @atom:hs @atom:sh @atom:no
@angle:hs-sh-o @atom:hs @atom:sh @atom:o
@angle:hs-sh-oh @atom:hs @atom:sh @atom:oh
@angle:hs-sh-os @atom:hs @atom:sh @atom:os
@angle:hs-sh-p2 @atom:hs @atom:sh @atom:p2
@angle:hs-sh-p3 @atom:hs @atom:sh @atom:p3
@angle:hs-sh-p4 @atom:hs @atom:sh @atom:p4
@angle:hs-sh-p5 @atom:hs @atom:sh @atom:p5
@angle:hs-sh-s @atom:hs @atom:sh @atom:s
@angle:hs-sh-s4 @atom:hs @atom:sh @atom:s4
@angle:hs-sh-s6 @atom:hs @atom:sh @atom:s6
@angle:hs-sh-sh @atom:hs @atom:sh @atom:sh
@angle:hs-sh-ss @atom:hs @atom:sh @atom:ss
@angle:br-ss-br @atom:br @atom:ss @atom:br
@angle:br-ss-c3 @atom:br @atom:ss @atom:c3
@angle:c1-ss-c1 @atom:c1 @atom:ss @atom:c1
@angle:c1-ss-c3 @atom:c1 @atom:ss @atom:c3
@angle:c2-ss-c2 @atom:c2 @atom:ss @atom:c2
@angle:c2-ss-c3 @atom:c2 @atom:ss @atom:c3
@angle:c2-ss-cy @atom:c2 @atom:ss @atom:cy
@angle:c2-ss-n2 @atom:c2 @atom:ss @atom:n2
@angle:c2-ss-na @atom:c2 @atom:ss @atom:na
@angle:c2-ss-os @atom:c2 @atom:ss @atom:os
@angle:c2-ss-ss @atom:c2 @atom:ss @atom:ss
@angle:c3-ss-c3 @atom:c3 @atom:ss @atom:c3
@angle:c3-ss-ca @atom:c3 @atom:ss @atom:ca
@angle:c3-ss-cc @atom:c3 @atom:ss @atom:cc
@angle:c3-ss-cd @atom:c3 @atom:ss @atom:cd
@angle:c3-ss-cl @atom:c3 @atom:ss @atom:cl
@angle:c3-ss-cy @atom:c3 @atom:ss @atom:cy
@angle:c3-ss-f @atom:c3 @atom:ss @atom:f
@angle:c3-ss-i @atom:c3 @atom:ss @atom:i
@angle:c3-ss-n1 @atom:c3 @atom:ss @atom:n1
@angle:c3-ss-n2 @atom:c3 @atom:ss @atom:n2
@angle:c3-ss-n3 @atom:c3 @atom:ss @atom:n3
@angle:c3-ss-n @atom:c3 @atom:ss @atom:n
@angle:c3-ss-n4 @atom:c3 @atom:ss @atom:n4
@angle:c3-ss-na @atom:c3 @atom:ss @atom:na
@angle:c3-ss-nh @atom:c3 @atom:ss @atom:nh
@angle:c3-ss-no @atom:c3 @atom:ss @atom:no
@angle:c3-ss-o @atom:c3 @atom:ss @atom:o
@angle:c3-ss-oh @atom:c3 @atom:ss @atom:oh
@angle:c3-ss-os @atom:c3 @atom:ss @atom:os
@angle:c3-ss-p2 @atom:c3 @atom:ss @atom:p2
@angle:c3-ss-p3 @atom:c3 @atom:ss @atom:p3
@angle:c3-ss-p4 @atom:c3 @atom:ss @atom:p4
@angle:c3-ss-p5 @atom:c3 @atom:ss @atom:p5
@angle:c3-ss-s4 @atom:c3 @atom:ss @atom:s4
@angle:c3-ss-s @atom:c3 @atom:ss @atom:s
@angle:c3-ss-s6 @atom:c3 @atom:ss @atom:s6
@angle:c3-ss-sh @atom:c3 @atom:ss @atom:sh
@angle:c3-ss-ss @atom:c3 @atom:ss @atom:ss
@angle:ca-ss-ca @atom:ca @atom:ss @atom:ca
@angle:ca-ss-cc @atom:ca @atom:ss @atom:cc
@angle:ca-ss-cd @atom:ca @atom:ss @atom:cd
@angle:ca-ss-cl @atom:ca @atom:ss @atom:cl
@angle:ca-ss-n @atom:ca @atom:ss @atom:n
@angle:ca-ss-na @atom:ca @atom:ss @atom:na
@angle:ca-ss-nc @atom:ca @atom:ss @atom:nc
@angle:ca-ss-nd @atom:ca @atom:ss @atom:nd
@angle:ca-ss-ss @atom:ca @atom:ss @atom:ss
@angle:c-ss-c2 @atom:c @atom:ss @atom:c2
@angle:c-ss-c3 @atom:c @atom:ss @atom:c3
@angle:c-ss-c @atom:c @atom:ss @atom:c
@angle:c-ss-cc @atom:c @atom:ss @atom:cc
@angle:cc-ss-cc @atom:cc @atom:ss @atom:cc
@angle:cc-ss-cd @atom:cc @atom:ss @atom:cd
@angle:cc-ss-n @atom:cc @atom:ss @atom:n
@angle:cc-ss-na @atom:cc @atom:ss @atom:na
@angle:cc-ss-nc @atom:cc @atom:ss @atom:nc
@angle:cc-ss-os @atom:cc @atom:ss @atom:os
@angle:cc-ss-ss @atom:cc @atom:ss @atom:ss
@angle:cd-ss-cd @atom:cd @atom:ss @atom:cd
@angle:cd-ss-n @atom:cd @atom:ss @atom:n
@angle:cd-ss-na @atom:cd @atom:ss @atom:na
@angle:cd-ss-nd @atom:cd @atom:ss @atom:nd
@angle:cd-ss-os @atom:cd @atom:ss @atom:os
@angle:cd-ss-ss @atom:cd @atom:ss @atom:ss
@angle:cl-ss-cl @atom:cl @atom:ss @atom:cl
@angle:cx-ss-cx @atom:cx @atom:ss @atom:cx
@angle:f-ss-f @atom:f @atom:ss @atom:f
@angle:f-ss-ss @atom:f @atom:ss @atom:ss
@angle:i-ss-i @atom:i @atom:ss @atom:i
@angle:n1-ss-n1 @atom:n1 @atom:ss @atom:n1
@angle:n2-ss-n2 @atom:n2 @atom:ss @atom:n2
@angle:n3-ss-n3 @atom:n3 @atom:ss @atom:n3
@angle:n4-ss-n4 @atom:n4 @atom:ss @atom:n4
@angle:na-ss-na @atom:na @atom:ss @atom:na
@angle:nc-ss-nc @atom:nc @atom:ss @atom:nc
@angle:nd-ss-nd @atom:nd @atom:ss @atom:nd
@angle:nh-ss-nh @atom:nh @atom:ss @atom:nh
@angle:n-ss-n @atom:n @atom:ss @atom:n
@angle:no-ss-no @atom:no @atom:ss @atom:no
@angle:oh-ss-oh @atom:oh @atom:ss @atom:oh
@angle:o-ss-o @atom:o @atom:ss @atom:o
@angle:o-ss-p5 @atom:o @atom:ss @atom:p5
@angle:o-ss-s6 @atom:o @atom:ss @atom:s6
@angle:os-ss-os @atom:os @atom:ss @atom:os
@angle:o-ss-ss @atom:o @atom:ss @atom:ss
@angle:p2-ss-p2 @atom:p2 @atom:ss @atom:p2
@angle:p3-ss-p3 @atom:p3 @atom:ss @atom:p3
@angle:p5-ss-p5 @atom:p5 @atom:ss @atom:p5
@angle:s4-ss-s4 @atom:s4 @atom:ss @atom:s4
@angle:s4-ss-s6 @atom:s4 @atom:ss @atom:s6
@angle:s6-ss-s6 @atom:s6 @atom:ss @atom:s6
@angle:sh-ss-sh @atom:sh @atom:ss @atom:sh
@angle:sh-ss-ss @atom:sh @atom:ss @atom:ss
@angle:s-ss-s @atom:s @atom:ss @atom:s
@angle:ss-ss-ss @atom:ss @atom:ss @atom:ss
@angle:c3-sx-ca @atom:c3 @atom:sx @atom:ca
@angle:c3-sx-cc @atom:c3 @atom:sx @atom:cc
@angle:c3-sx-ce @atom:c3 @atom:sx @atom:ce
@angle:c3-sx-cf @atom:c3 @atom:sx @atom:cf
@angle:c3-sx-ne @atom:c3 @atom:sx @atom:ne
@angle:c3-sx-nf @atom:c3 @atom:sx @atom:nf
@angle:c3-sx-o @atom:c3 @atom:sx @atom:o
@angle:c3-sx-pe @atom:c3 @atom:sx @atom:pe
@angle:c3-sx-pf @atom:c3 @atom:sx @atom:pf
@angle:c3-sx-px @atom:c3 @atom:sx @atom:px
@angle:c3-sx-py @atom:c3 @atom:sx @atom:py
@angle:c3-sx-sx @atom:c3 @atom:sx @atom:sx
@angle:c3-sx-sy @atom:c3 @atom:sx @atom:sy
@angle:ca-sx-ca @atom:ca @atom:sx @atom:ca
@angle:ca-sx-o @atom:ca @atom:sx @atom:o
@angle:c-sx-c3 @atom:c @atom:sx @atom:c3
@angle:c-sx-c @atom:c @atom:sx @atom:c
@angle:cc-sx-o @atom:cc @atom:sx @atom:o
@angle:ce-sx-ce @atom:ce @atom:sx @atom:ce
@angle:ce-sx-o @atom:ce @atom:sx @atom:o
@angle:cf-sx-cf @atom:cf @atom:sx @atom:cf
@angle:cf-sx-o @atom:cf @atom:sx @atom:o
@angle:c-sx-o @atom:c @atom:sx @atom:o
@angle:ne-sx-ne @atom:ne @atom:sx @atom:ne
@angle:ne-sx-o @atom:ne @atom:sx @atom:o
@angle:nf-sx-nf @atom:nf @atom:sx @atom:nf
@angle:nf-sx-o @atom:nf @atom:sx @atom:o
@angle:o-sx-pe @atom:o @atom:sx @atom:pe
@angle:o-sx-pf @atom:o @atom:sx @atom:pf
@angle:o-sx-px @atom:o @atom:sx @atom:px
@angle:o-sx-py @atom:o @atom:sx @atom:py
@angle:o-sx-sx @atom:o @atom:sx @atom:sx
@angle:o-sx-sy @atom:o @atom:sx @atom:sy
@angle:pe-sx-pe @atom:pe @atom:sx @atom:pe
@angle:pf-sx-pf @atom:pf @atom:sx @atom:pf
@angle:py-sx-py @atom:py @atom:sx @atom:py
@angle:sx-sx-sx @atom:sx @atom:sx @atom:sx
@angle:sy-sx-sy @atom:sy @atom:sx @atom:sy
@angle:c3-sy-ca @atom:c3 @atom:sy @atom:ca
@angle:c3-sy-cc @atom:c3 @atom:sy @atom:cc
@angle:c3-sy-ce @atom:c3 @atom:sy @atom:ce
@angle:c3-sy-cf @atom:c3 @atom:sy @atom:cf
@angle:c3-sy-ne @atom:c3 @atom:sy @atom:ne
@angle:c3-sy-nf @atom:c3 @atom:sy @atom:nf
@angle:c3-sy-o @atom:c3 @atom:sy @atom:o
@angle:c3-sy-pe @atom:c3 @atom:sy @atom:pe
@angle:c3-sy-pf @atom:c3 @atom:sy @atom:pf
@angle:c3-sy-px @atom:c3 @atom:sy @atom:px
@angle:c3-sy-py @atom:c3 @atom:sy @atom:py
@angle:c3-sy-sx @atom:c3 @atom:sy @atom:sx
@angle:c3-sy-sy @atom:c3 @atom:sy @atom:sy
@angle:ca-sy-ca @atom:ca @atom:sy @atom:ca
@angle:ca-sy-cc @atom:ca @atom:sy @atom:cc
@angle:ca-sy-n3 @atom:ca @atom:sy @atom:n3
@angle:ca-sy-n @atom:ca @atom:sy @atom:n
@angle:ca-sy-ne @atom:ca @atom:sy @atom:ne
@angle:ca-sy-nh @atom:ca @atom:sy @atom:nh
@angle:ca-sy-o @atom:ca @atom:sy @atom:o
@angle:ca-sy-oh @atom:ca @atom:sy @atom:oh
@angle:ca-sy-os @atom:ca @atom:sy @atom:os
@angle:c-sy-c3 @atom:c @atom:sy @atom:c3
@angle:c-sy-c @atom:c @atom:sy @atom:c
@angle:cc-sy-n3 @atom:cc @atom:sy @atom:n3
@angle:cc-sy-o @atom:cc @atom:sy @atom:o
@angle:cd-sy-n3 @atom:cd @atom:sy @atom:n3
@angle:cd-sy-nh @atom:cd @atom:sy @atom:nh
@angle:cd-sy-o @atom:cd @atom:sy @atom:o
@angle:ce-sy-ce @atom:ce @atom:sy @atom:ce
@angle:ce-sy-o @atom:ce @atom:sy @atom:o
@angle:cf-sy-cf @atom:cf @atom:sy @atom:cf
@angle:cf-sy-o @atom:cf @atom:sy @atom:o
@angle:c-sy-o @atom:c @atom:sy @atom:o
@angle:f-sy-o @atom:f @atom:sy @atom:o
@angle:n2-sy-o @atom:n2 @atom:sy @atom:o
@angle:n3-sy-ne @atom:n3 @atom:sy @atom:ne
@angle:n3-sy-o @atom:n3 @atom:sy @atom:o
@angle:na-sy-na @atom:na @atom:sy @atom:na
@angle:nc-sy-nc @atom:nc @atom:sy @atom:nc
@angle:nd-sy-nd @atom:nd @atom:sy @atom:nd
@angle:ne-sy-ne @atom:ne @atom:sy @atom:ne
@angle:ne-sy-o @atom:ne @atom:sy @atom:o
@angle:nf-sy-nf @atom:nf @atom:sy @atom:nf
@angle:nf-sy-o @atom:nf @atom:sy @atom:o
@angle:nh-sy-o @atom:nh @atom:sy @atom:o
@angle:n-sy-o @atom:n @atom:sy @atom:o
@angle:o-sy-o @atom:o @atom:sy @atom:o
@angle:o-sy-oh @atom:o @atom:sy @atom:oh
@angle:o-sy-os @atom:o @atom:sy @atom:os
@angle:o-sy-pe @atom:o @atom:sy @atom:pe
@angle:o-sy-pf @atom:o @atom:sy @atom:pf
@angle:o-sy-px @atom:o @atom:sy @atom:px
@angle:o-sy-py @atom:o @atom:sy @atom:py
@angle:o-sy-sx @atom:o @atom:sy @atom:sx
@angle:o-sy-sy @atom:o @atom:sy @atom:sy
@angle:py-sy-py @atom:py @atom:sy @atom:py
@angle:sx-sy-sx @atom:sx @atom:sy @atom:sx
@angle:sy-sy-sy @atom:sy @atom:sy @atom:sy
+ @angle:c2-c1-cf @atom:c2 @atom:c1 @atom:cf
+ @angle:c3-c1-ch @atom:c3 @atom:c1 @atom:ch
+ @angle:nf-c1-s @atom:nf @atom:c1 @atom:s
+ @angle:br-c2-cf @atom:br @atom:c2 @atom:cf
+ @angle:cd-c2-h4 @atom:cd @atom:c2 @atom:h4
+ @angle:cd-c2-nh @atom:cd @atom:c2 @atom:nh
+ @angle:cd-c2-o @atom:cd @atom:c2 @atom:o
+ @angle:cf-c2-cl @atom:cf @atom:c2 @atom:cl
+ @angle:cf-c2-h4 @atom:cf @atom:c2 @atom:h4
+ @angle:cf-c2-na @atom:cf @atom:c2 @atom:na
+ @angle:cf-c2-nh @atom:cf @atom:c2 @atom:nh
+ @angle:cf-c2-no @atom:cf @atom:c2 @atom:no
+ @angle:cf-c2-o @atom:cf @atom:c2 @atom:o
+ @angle:cf-c2-oh @atom:cf @atom:c2 @atom:oh
+ @angle:cf-c2-os @atom:cf @atom:c2 @atom:os
+ @angle:h4-c2-nf @atom:h4 @atom:c2 @atom:nf
+ @angle:h5-c2-nf @atom:h5 @atom:c2 @atom:nf
+ @angle:nf-c2-os @atom:nf @atom:c2 @atom:os
+ @angle:nf-c2-ss @atom:nf @atom:c2 @atom:ss
+ @angle:n-c2-nf @atom:n @atom:c2 @atom:nf
+ @angle:ca-c3-cf @atom:ca @atom:c3 @atom:cf
+ @angle:cd-c3-cx @atom:cd @atom:c3 @atom:cx
+ @angle:c-c3-cf @atom:c @atom:c3 @atom:cf
+ @angle:cd-c3-hx @atom:cd @atom:c3 @atom:hx
+ @angle:cd-c3-n2 @atom:cd @atom:c3 @atom:n2
+ @angle:cd-c3-n4 @atom:cd @atom:c3 @atom:n4
+ @angle:cd-c3-na @atom:cd @atom:c3 @atom:na
+ @angle:cd-c3-p5 @atom:cd @atom:c3 @atom:p5
+ @angle:cf-c3-cf @atom:cf @atom:c3 @atom:cf
+ @angle:cf-c3-n @atom:cf @atom:c3 @atom:n
+ @angle:cf-c3-oh @atom:cf @atom:c3 @atom:oh
+ @angle:cf-c3-os @atom:cf @atom:c3 @atom:os
+ @angle:cf-c3-ss @atom:cf @atom:c3 @atom:ss
+ @angle:cd-ca-cq @atom:cd @atom:ca @atom:cq
+ @angle:cf-ca-na @atom:cf @atom:ca @atom:na
+ @angle:ch-ca-cq @atom:ch @atom:ca @atom:cq
+ @angle:cl-ca-cq @atom:cl @atom:ca @atom:cq
+ @angle:cq-ca-f @atom:cq @atom:ca @atom:f
+ @angle:cq-ca-h4 @atom:cq @atom:ca @atom:h4
+ @angle:cq-ca-na @atom:cq @atom:ca @atom:na
+ @angle:cq-ca-nb @atom:cq @atom:ca @atom:nb
+ @angle:cq-ca-nh @atom:cq @atom:ca @atom:nh
+ @angle:cq-ca-oh @atom:cq @atom:ca @atom:oh
+ @angle:cq-ca-ss @atom:cq @atom:ca @atom:ss
+ @angle:ca-c-nf @atom:ca @atom:c @atom:nf
+ @angle:br-cd-c @atom:br @atom:cd @atom:c
+ @angle:br-cd-cd @atom:br @atom:cd @atom:cd
+ @angle:br-cd-cc @atom:br @atom:cd @atom:cc
+ @angle:br-cd-na @atom:br @atom:cd @atom:na
+ @angle:ca-cd-cf @atom:ca @atom:cd @atom:cf
+ @angle:ca-cd-nh @atom:ca @atom:cd @atom:nh
+ @angle:cd-c-cf @atom:cd @atom:c @atom:cf
+ @angle:cd-cd-f @atom:cd @atom:cd @atom:f
+ @angle:c-cd-ch @atom:c @atom:cd @atom:ch
+ @angle:cd-cd-sy @atom:cd @atom:cd @atom:sy
+ @angle:cc-cd-f @atom:cc @atom:cd @atom:f
+ @angle:cc-cd-no @atom:cc @atom:cd @atom:no
+ @angle:c-cd-f @atom:c @atom:cd @atom:f
+ @angle:ch-cd-na @atom:ch @atom:cd @atom:na
+ @angle:ch-cd-ss @atom:ch @atom:cd @atom:ss
+ @angle:cd-c-h4 @atom:cd @atom:c @atom:h4
+ @angle:cl-cd-na @atom:cl @atom:cd @atom:na
+ @angle:cl-cd-ss @atom:cl @atom:cd @atom:ss
+ @angle:c-cd-nf @atom:c @atom:cd @atom:nf
+ @angle:cd-c-s @atom:cd @atom:c @atom:s
+ @angle:cd-c-ss @atom:cd @atom:c @atom:ss
+ @angle:cx-cd-nc @atom:cx @atom:cd @atom:nc
+ @angle:cx-cd-os @atom:cx @atom:cd @atom:os
+ @angle:cc-c-cx @atom:cc @atom:c @atom:cx
+ @angle:cc-c-nc @atom:cc @atom:c @atom:nc
+ @angle:cf-c-cx @atom:cf @atom:c @atom:cx
+ @angle:cf-c-h4 @atom:cf @atom:c @atom:h4
+ @angle:cf-c-ss @atom:cf @atom:c @atom:ss
+ @angle:na-cd-no @atom:na @atom:cd @atom:no
+ @angle:na-cd-oh @atom:na @atom:cd @atom:oh
+ @angle:na-cd-sx @atom:na @atom:cd @atom:sx
+ @angle:na-cd-sy @atom:na @atom:cd @atom:sy
+ @angle:nd-cd-no @atom:nd @atom:cd @atom:no
+ @angle:nc-cd-nc @atom:nc @atom:cd @atom:nc
+ @angle:nc-cd-nf @atom:nc @atom:cd @atom:nf
+ @angle:nc-cd-no @atom:nc @atom:cd @atom:no
+ @angle:nc-cd-sh @atom:nc @atom:cd @atom:sh
+ @angle:nc-cd-sx @atom:nc @atom:cd @atom:sx
+ @angle:nc-cd-sy @atom:nc @atom:cd @atom:sy
+ @angle:nf-cd-ss @atom:nf @atom:cd @atom:ss
+ @angle:n-cd-n2 @atom:n @atom:cd @atom:n2
+ @angle:no-cd-os @atom:no @atom:cd @atom:os
+ @angle:no-cd-ss @atom:no @atom:cd @atom:ss
+ @angle:ca-cc-cf @atom:ca @atom:cc @atom:cf
+ @angle:ca-cc-na @atom:ca @atom:cc @atom:na
+ @angle:cd-cc-cg @atom:cd @atom:cc @atom:cg
+ @angle:cd-cc-cy @atom:cd @atom:cc @atom:cy
+ @angle:cd-cc-nd @atom:cd @atom:cc @atom:nd
+ @angle:cc-cc-cy @atom:cc @atom:cc @atom:cy
+ @angle:cf-cc-nc @atom:cf @atom:cc @atom:nc
+ @angle:c-cc-h4 @atom:c @atom:cc @atom:h4
+ @angle:na-cc-nh @atom:na @atom:cc @atom:nh
+ @angle:na-cc-ss @atom:na @atom:cc @atom:ss
+ @angle:nc-cc-nc @atom:nc @atom:cc @atom:nc
+ @angle:oh-cc-os @atom:oh @atom:cc @atom:os
+ @angle:c2-cf-cl @atom:c2 @atom:cf @atom:cl
+ @angle:c2-cf-h4 @atom:c2 @atom:cf @atom:h4
+ @angle:c2-cf-n1 @atom:c2 @atom:cf @atom:n1
+ @angle:c2-cf-na @atom:c2 @atom:cf @atom:na
+ @angle:c2-cf-oh @atom:c2 @atom:cf @atom:oh
+ @angle:c3-cf-ch @atom:c3 @atom:cf @atom:ch
+ @angle:c3-cf-ne @atom:c3 @atom:cf @atom:ne
+ @angle:c3-cf-nh @atom:c3 @atom:cf @atom:nh
+ @angle:ca-cf-cf @atom:ca @atom:cf @atom:cf
+ @angle:ca-cf-cl @atom:ca @atom:cf @atom:cl
+ @angle:ca-cf-h4 @atom:ca @atom:cf @atom:h4
+ @angle:ca-cf-nh @atom:ca @atom:cf @atom:nh
+ @angle:ca-cf-os @atom:ca @atom:cf @atom:os
+ @angle:ca-cf-ss @atom:ca @atom:cf @atom:ss
+ @angle:c-cf-ca @atom:c @atom:cf @atom:ca
+ @angle:cd-cf-cc @atom:cd @atom:cf @atom:cc
+ @angle:c-cf-cf @atom:c @atom:cf @atom:cf
+ @angle:c-cf-ch @atom:c @atom:cf @atom:ch
+ @angle:cd-cf-h4 @atom:cd @atom:cf @atom:h4
+ @angle:c-cf-cl @atom:c @atom:cf @atom:cl
+ @angle:cd-cf-nh @atom:cd @atom:cf @atom:nh
+ @angle:c-cf-cy @atom:c @atom:cf @atom:cy
+ @angle:cf-cf-cl @atom:cf @atom:cf @atom:cl
+ @angle:cf-cf-oh @atom:cf @atom:cf @atom:oh
+ @angle:ce-cf-cy @atom:ce @atom:cf @atom:cy
+ @angle:ce-cf-h4 @atom:ce @atom:cf @atom:h4
+ @angle:ce-cf-n1 @atom:ce @atom:cf @atom:n1
+ @angle:ce-cf-nh @atom:ce @atom:cf @atom:nh
+ @angle:ch-cf-n2 @atom:ch @atom:cf @atom:n2
+ @angle:c-cf-oh @atom:c @atom:cf @atom:oh
+ @angle:c-cf-os @atom:c @atom:cf @atom:os
+ @angle:h4-cf-n1 @atom:h4 @atom:cf @atom:n1
+ @angle:h4-cf-nf @atom:h4 @atom:cf @atom:nf
+ @angle:n2-cf-os @atom:n2 @atom:cf @atom:os
+ @angle:n2-cf-ss @atom:n2 @atom:cf @atom:ss
+ @angle:nf-cf-nh @atom:nf @atom:cf @atom:nh
+ @angle:ne-cf-nh @atom:ne @atom:cf @atom:nh
+ @angle:ca-ce-cd @atom:ca @atom:ce @atom:cd
+ @angle:c-ce-cc @atom:c @atom:ce @atom:cc
+ @angle:c-ce-n2 @atom:c @atom:ce @atom:n2
+ @angle:h4-ce-nf @atom:h4 @atom:ce @atom:nf
+ @angle:c1-ch-cd @atom:c1 @atom:ch @atom:cd
+ @angle:ch-cg-cg @atom:ch @atom:cg @atom:cg
+ @angle:n-c-nf @atom:n @atom:c @atom:nf
+ @angle:ca-cq-na @atom:ca @atom:cq @atom:na
+ @angle:nb-cq-nb @atom:nb @atom:cq @atom:nb
+ @angle:cd-cx-hc @atom:cd @atom:cx @atom:hc
+ @angle:cf-cy-h2 @atom:cf @atom:cy @atom:h2
+ @angle:cf-cy-n @atom:cf @atom:cy @atom:n
+ @angle:cf-cy-ss @atom:cf @atom:cy @atom:ss
+ @angle:cd-n2-na @atom:cd @atom:n2 @atom:na
+ @angle:cd-n2-nh @atom:cd @atom:n2 @atom:nh
+ @angle:c3-n4-cd @atom:c3 @atom:n4 @atom:cd
+ @angle:c3-na-cq @atom:c3 @atom:na @atom:cq
+ @angle:ca-na-cq @atom:ca @atom:na @atom:cq
+ @angle:cd-na-cf @atom:cd @atom:na @atom:cf
+ @angle:cq-nb-nb @atom:cq @atom:nb @atom:nb
+ @angle:c-n-cf @atom:c @atom:n @atom:cf
+ @angle:ca-nc-nd @atom:ca @atom:nc @atom:nd
+ @angle:c2-nf-ch @atom:c2 @atom:nf @atom:ch
+ @angle:c-nf-sy @atom:c @atom:nf @atom:sy
+ @angle:c3-nh-ce @atom:c3 @atom:nh @atom:ce
+ @angle:cd-nh-n2 @atom:cd @atom:nh @atom:n2
+ @angle:cd-nh-sy @atom:cd @atom:nh @atom:sy
+ @angle:cf-nh-sy @atom:cf @atom:nh @atom:sy
+ @angle:hn-n-nd @atom:hn @atom:n @atom:nd
+ @angle:cd-no-o @atom:cd @atom:no @atom:o
+ @angle:n3-py-nf @atom:n3 @atom:py @atom:nf
+ @angle:cd-s6-o @atom:cd @atom:s6 @atom:o
+ @angle:cd-sh-hs @atom:cd @atom:sh @atom:hs
+ @angle:c-ss-cd @atom:c @atom:ss @atom:cd
+ @angle:c3-sx-cd @atom:c3 @atom:sx @atom:cd
+ @angle:cd-sx-o @atom:cd @atom:sx @atom:o
+ @angle:c3-sy-cd @atom:c3 @atom:sy @atom:cd
+ @angle:ca-sy-cd @atom:ca @atom:sy @atom:cd
+ @angle:ca-sy-nf @atom:ca @atom:sy @atom:nf
+ @angle:cc-sy-nh @atom:cc @atom:sy @atom:nh
+ @angle:n3-sy-nf @atom:n3 @atom:sy @atom:nf
} # (end of Angles By Type)
write_once("In Settings") {
dihedral_coeff @dihedral:X-c-c-X fourier 1 0.3 2 180.0 #
dihedral_coeff @dihedral:X-c-c1-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c-cg-X fourier 1 0.0 2 180.0 # same as X-c-c1-X
dihedral_coeff @dihedral:X-c-ch-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c-c2-X fourier 1 2.175 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c-cu-X fourier 1 2.175 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c-cv-X fourier 1 2.175 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c-ce-X fourier 1 2.175 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c-cf-X fourier 1 2.175 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c-c3-X fourier 1 0.0 2 180.0 # JCC, 7, (1986), 230
dihedral_coeff @dihedral:X-c-cx-X fourier 1 0.0 2 180.0 # JCC, 7, (1986), 230
dihedral_coeff @dihedral:X-c-cy-X fourier 1 0.0 2 180.0 # JCC, 7, (1986), 230
dihedral_coeff @dihedral:X-c-ca-X fourier 1 1.0 2 180.0 # optimized by Junmei Wang, Jan-2013
dihedral_coeff @dihedral:X-c-cc-X fourier 1 2.875 2 180.0 # statistic value
dihedral_coeff @dihedral:X-c-cd-X fourier 1 2.875 2 180.0 # statistic value
dihedral_coeff @dihedral:X-c-n-X fourier 1 2.5 2 180.0 # AA,NMA (no c-n3, c-n4, c-nh)
dihedral_coeff @dihedral:X-c-n2-X fourier 1 4.15 2 180.0 # double bond, same as X-c2-n2-X
dihedral_coeff @dihedral:X-c-nc-X fourier 1 4.0 2 180.0 # same as X-C-NC-X
dihedral_coeff @dihedral:X-c-nd-X fourier 1 4.0 2 180.0 # same as X-C-NC-X
dihedral_coeff @dihedral:X-c-ne-X fourier 1 0.2 2 180.0 # single bond
dihedral_coeff @dihedral:X-c-nf-X fourier 1 0.2 2 180.0 # single bond
dihedral_coeff @dihedral:X-c-na-X fourier 2 1.45 2 180.0 0.35 4 180.0 #
dihedral_coeff @dihedral:X-c-no-X fourier 1 0.45 2 180.0 #
dihedral_coeff @dihedral:X-c-oh-X fourier 1 2.3 2 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:X-c-os-X fourier 1 2.7 2 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:X-c-p2-X fourier 1 6.65 2 180.0 # double bond, same as X-c2-p2-X
dihedral_coeff @dihedral:X-c-pc-X fourier 1 2.0 2 180.0 # estimated
dihedral_coeff @dihedral:X-c-pd-X fourier 1 2.0 2 180.0 # estimated
dihedral_coeff @dihedral:X-c-pe-X fourier 1 0.0 2 180.0 # single bond
dihedral_coeff @dihedral:X-c-pf-X fourier 1 0.0 2 180.0 # single bond
dihedral_coeff @dihedral:X-c-p3-X fourier 1 1.55 2 180.0 #
dihedral_coeff @dihedral:X-c-p4-X fourier 1 1.35 2 180.0 #
dihedral_coeff @dihedral:X-c-px-X fourier 1 1.35 2 180.0 #
dihedral_coeff @dihedral:X-c-p5-X fourier 1 1.0 2 0.0 #
dihedral_coeff @dihedral:X-c-py-X fourier 1 1.0 2 0.0 #
dihedral_coeff @dihedral:X-c-sh-X fourier 1 2.25 2 180.0 #
dihedral_coeff @dihedral:X-c-ss-X fourier 1 3.1 2 180.0 #
dihedral_coeff @dihedral:X-c-s4-X fourier 1 0.2 2 180.0 #
dihedral_coeff @dihedral:X-c-sx-X fourier 1 0.2 2 180.0 #
dihedral_coeff @dihedral:X-c-s6-X fourier 1 0.5 2 0.0 #
dihedral_coeff @dihedral:X-c-sy-X fourier 1 0.5 2 0.0 #
dihedral_coeff @dihedral:X-c1-c1-X fourier 1 0.0 2 180.0 # for both triple and single bonds
dihedral_coeff @dihedral:X-c1-cg-X fourier 1 0.0 2 180.0 # for both triple and single bonds
dihedral_coeff @dihedral:X-c1-ch-X fourier 1 0.0 2 180.0 # for both triple and single bonds
dihedral_coeff @dihedral:X-cg-cg-X fourier 1 0.0 2 180.0 # for both triple and single bonds
dihedral_coeff @dihedral:X-ch-ch-X fourier 1 0.0 2 180.0 # for both triple and single bonds
dihedral_coeff @dihedral:X-cg-ch-X fourier 1 0.0 2 180.0 # for both triple and single bonds
dihedral_coeff @dihedral:X-c1-c2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-c3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-ca-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cc-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cd-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-ce-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cf-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cu-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cv-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cx-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-cy-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-n-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-n2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-n3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-n4-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-na-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-nb-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-nc-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-nd-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-ne-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-nf-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-nh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-no-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-oh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-os-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-p2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-pb-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-pc-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-pd-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-pe-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-pf-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-p3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-p4-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-px-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-p5-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-py-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-s2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-sh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-ss-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-s4-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-sx-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-s6-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c1-sy-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-c2-c2-X fourier 1 6.65 2 180.0 # c2=c2 double bond, intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c2-ce-X fourier 1 6.65 2 180.0 # c2=c2 double bond, intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-c2-cf-X fourier 1 6.65 2 180.0 # c2=c2 double bond, intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-ce-cf-X fourier 1 6.65 2 180.0 # c2=c2 double bond, intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-ce-ce-X fourier 1 1.0 2 180.0 # c2-c2 single bond, parm99
dihedral_coeff @dihedral:X-cf-cf-X fourier 1 1.0 2 180.0 # c2-c2 single bond, parm99
dihedral_coeff @dihedral:X-cc-cd-X fourier 1 4.0 2 180.0 # statistic value of parm94
dihedral_coeff @dihedral:X-cc-cc-X fourier 1 4.0 2 180.0 # statistic value of parm94
dihedral_coeff @dihedral:X-cd-cd-X fourier 1 4.0 2 180.0 # statistic value of parm94
dihedral_coeff @dihedral:X-c2-c3-X fourier 1 0.0 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c2-ca-X fourier 1 0.7 2 180.0 # optimized by Junmei Wang, March 2013
dihedral_coeff @dihedral:X-c2-n-X fourier 1 0.65 2 180.0 #
dihedral_coeff @dihedral:X-c2-n2-X fourier 1 4.15 2 180.0 # double bond, parm99
dihedral_coeff @dihedral:X-c2-ne-X fourier 1 4.15 2 180.0 # double bond, parm99
dihedral_coeff @dihedral:X-c2-nf-X fourier 1 4.15 2 180.0 # double bond, parm99
dihedral_coeff @dihedral:X-ce-ne-X fourier 1 0.8 2 180.0 # single bond
dihedral_coeff @dihedral:X-cf-nf-X fourier 1 0.8 2 180.0 # single bond
dihedral_coeff @dihedral:X-c2-nc-X fourier 1 4.75 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-c2-nd-X fourier 1 4.75 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-cc-nd-X fourier 1 4.75 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-cd-nc-X fourier 1 4.75 2 180.0 # statistiv value from parm94
dihedral_coeff @dihedral:X-cc-nc-X fourier 1 4.75 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-cd-nd-X fourier 1 4.75 2 180.0 # statistiv value from parm94
dihedral_coeff @dihedral:X-c2-n3-X fourier 1 0.3 2 180.0 # intrpol.
dihedral_coeff @dihedral:X-c2-n4-X fourier 1 0.0 3 180.0 # intrpol.
dihedral_coeff @dihedral:X-c2-na-X fourier 1 0.625 2 180.0 #
dihedral_coeff @dihedral:X-cc-na-X fourier 1 1.7 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-cd-na-X fourier 1 1.7 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-c2-nh-X fourier 1 0.675 2 180.0 #
dihedral_coeff @dihedral:X-c2-no-X fourier 1 0.75 2 180.0 #
dihedral_coeff @dihedral:X-c2-oh-X fourier 1 1.05 2 180.0 # parm99
dihedral_coeff @dihedral:X-c2-os-X fourier 1 1.05 2 180.0 # parm99
dihedral_coeff @dihedral:X-c2-p2-X fourier 1 6.65 2 180.0 # double bond
dihedral_coeff @dihedral:X-c2-pe-X fourier 1 6.65 2 180.0 # double bond
dihedral_coeff @dihedral:X-c2-pf-X fourier 1 6.65 2 180.0 # double bond
dihedral_coeff @dihedral:X-ce-pf-X fourier 1 6.65 2 180.0 # double bond
dihedral_coeff @dihedral:X-ce-pe-X fourier 1 0.95 2 180.0 # single bond
dihedral_coeff @dihedral:X-cf-pf-X fourier 1 0.95 2 180.0 # single bond
dihedral_coeff @dihedral:X-c2-pc-X fourier 1 4.75 2 180.0 # estimated
dihedral_coeff @dihedral:X-c2-pd-X fourier 1 4.75 2 180.0 # estimated
dihedral_coeff @dihedral:X-cc-pc-X fourier 1 4.75 2 180.0 # estimated
dihedral_coeff @dihedral:X-cc-pd-X fourier 1 4.75 2 180.0 # estimated
dihedral_coeff @dihedral:X-cd-pc-X fourier 1 4.75 2 180.0 # estimated
dihedral_coeff @dihedral:X-cd-pd-X fourier 1 4.75 2 180.0 # estimated
dihedral_coeff @dihedral:X-c2-p3-X fourier 1 0.45 2 180.0 #
dihedral_coeff @dihedral:X-c2-p4-X fourier 1 6.65 2 180.0 # c2=p4 double bond !!!
dihedral_coeff @dihedral:X-ce-p4-X fourier 1 6.65 2 180.0 # c2=p4 double bond !!!
dihedral_coeff @dihedral:X-cf-p4-X fourier 1 6.65 2 180.0 # c2=p4 double bond !!!
dihedral_coeff @dihedral:X-c2-px-X fourier 1 0.325 2 0.0 #
dihedral_coeff @dihedral:X-ce-px-X fourier 1 0.325 2 0.0 #
dihedral_coeff @dihedral:X-cf-px-X fourier 1 0.325 2 0.0 #
dihedral_coeff @dihedral:X-c2-p5-X fourier 1 6.65 2 180.0 # c2=p5 double bond !!!
dihedral_coeff @dihedral:X-ce-p5-X fourier 1 6.65 2 180.0 # c2=p5 double bond !!!
dihedral_coeff @dihedral:X-cf-p5-X fourier 1 6.65 2 180.0 # c2=p5 double bond !!!
dihedral_coeff @dihedral:X-c2-py-X fourier 1 1.43333333333 2 180.0 #
dihedral_coeff @dihedral:X-ce-py-X fourier 1 1.43333333333 2 180.0 #
dihedral_coeff @dihedral:X-cf-py-X fourier 1 1.43333333333 2 180.0 #
dihedral_coeff @dihedral:X-c2-sh-X fourier 1 0.5 2 180.0 #
dihedral_coeff @dihedral:X-c2-ss-X fourier 1 1.1 2 180.0 #
dihedral_coeff @dihedral:X-c2-s4-X fourier 1 6.65 2 180.0 # c2=s4 double bond !!!
dihedral_coeff @dihedral:X-ce-s4-X fourier 1 6.65 2 180.0 # c2=s4 double bond !!!
dihedral_coeff @dihedral:X-cf-s4-X fourier 1 6.65 2 180.0 # c2=s4 double bond !!!
dihedral_coeff @dihedral:X-c2-sx-X fourier 1 0.6 2 0.0 #
dihedral_coeff @dihedral:X-ce-sx-X fourier 1 0.6 2 0.0 #
dihedral_coeff @dihedral:X-cf-sx-X fourier 1 0.6 2 0.0 #
dihedral_coeff @dihedral:X-c2-s6-X fourier 1 6.65 2 180.0 # c2=s6 double bond !!!
dihedral_coeff @dihedral:X-ce-s6-X fourier 1 6.65 2 180.0 # c2=s6 double bond !!!
dihedral_coeff @dihedral:X-cf-s6-X fourier 1 6.65 2 180.0 # c2=s6 double bond !!!
dihedral_coeff @dihedral:X-c2-sy-X fourier 1 1.26666666667 2 180.0 #
dihedral_coeff @dihedral:X-ce-sy-X fourier 1 1.26666666667 2 180.0 #
dihedral_coeff @dihedral:X-cf-sy-X fourier 1 1.26666666667 2 180.0 #
dihedral_coeff @dihedral:X-c3-c3-X fourier 1 0.155555555556 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-cx-cx-X fourier 1 0.155555555556 3 0.0 # same as X-c3-c3-X
dihedral_coeff @dihedral:X-cy-cy-X fourier 1 0.155555555556 3 0.0 # same as X-c3-c3-X
dihedral_coeff @dihedral:X-c3-ca-X fourier 1 0.0 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-n-X fourier 1 0.0 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-cx-n-X fourier 1 0.0 2 0.0 # same as X-c3-n-X
dihedral_coeff @dihedral:X-cy-n-X fourier 1 0.0 2 0.0 # same as X-c3-n-X
dihedral_coeff @dihedral:X-c3-n2-X fourier 1 0.0 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-ne-X fourier 1 0.0 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-nf-X fourier 1 0.0 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-n3-X fourier 1 0.3 3 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:X-c3-n4-X fourier 1 0.155555555556 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-na-X fourier 1 0.0 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-nh-X fourier 1 0.0 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-no-X fourier 1 0.0 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-oh-X fourier 1 0.166666666667 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-os-X fourier 1 0.383333333333 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-p2-X fourier 1 0.266666666667 2 180.0 #
dihedral_coeff @dihedral:X-c3-pe-X fourier 1 0.266666666667 2 180.0 #
dihedral_coeff @dihedral:X-c3-pf-X fourier 1 0.266666666667 2 180.0 #
dihedral_coeff @dihedral:X-c3-p3-X fourier 1 0.133333333333 3 0.0 #
dihedral_coeff @dihedral:X-c3-p4-X fourier 1 0.133333333333 3 0.0 #
dihedral_coeff @dihedral:X-c3-px-X fourier 1 0.133333333333 3 0.0 #
dihedral_coeff @dihedral:X-c3-p5-X fourier 1 0.0222222222222 3 0.0 #
dihedral_coeff @dihedral:X-c3-py-X fourier 1 0.0222222222222 3 0.0 #
dihedral_coeff @dihedral:X-c3-sh-X fourier 1 0.25 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-ss-X fourier 1 0.333333333333 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:X-c3-s4-X fourier 1 0.2 3 0.0 #
dihedral_coeff @dihedral:X-c3-sx-X fourier 1 0.2 3 0.0 #
dihedral_coeff @dihedral:X-c3-s6-X fourier 1 0.144444444444 3 0.0 #
dihedral_coeff @dihedral:X-c3-sy-X fourier 1 0.144444444444 3 0.0 #
dihedral_coeff @dihedral:X-c3-cc-X fourier 1 0.0 3 0.0 # same as X-c3-ca-X
dihedral_coeff @dihedral:X-c3-cd-X fourier 1 0.0 3 0.0 # same as X-c3-ca-X
dihedral_coeff @dihedral:X-ca-ca-X fourier 1 3.625 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-ca-cp-X fourier 1 3.625 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-ca-cq-X fourier 1 3.625 2 180.0 # intrpol.bsd.on C6H6
dihedral_coeff @dihedral:X-cp-cp-X fourier 1 1.0 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-cq-cq-X fourier 1 1.0 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-ca-n-X fourier 1 0.45 2 180.0 #
dihedral_coeff @dihedral:X-ca-n2-X fourier 1 0.0 3 180.0 #
dihedral_coeff @dihedral:X-ca-ne-X fourier 1 0.0 3 180.0 #
dihedral_coeff @dihedral:X-ca-nf-X fourier 1 0.0 3 180.0 #
dihedral_coeff @dihedral:X-ca-n4-X fourier 1 1.75 2 0.0 #
dihedral_coeff @dihedral:X-ca-na-X fourier 1 0.3 2 180.0 #
dihedral_coeff @dihedral:X-ca-nb-X fourier 1 4.8 2 180.0 # same as X-CA-NC-X
dihedral_coeff @dihedral:X-ca-nc-X fourier 1 4.8 2 180.0 # same as X-CA-NC-X
dihedral_coeff @dihedral:X-ca-nd-X fourier 1 4.8 2 180.0 # same as X-CA-NC-X
dihedral_coeff @dihedral:X-ca-nh-X fourier 1 1.05 2 180.0 #
dihedral_coeff @dihedral:X-cc-nh-X fourier 1 1.05 2 180.0 # same as X-ca-nh-X
dihedral_coeff @dihedral:X-cd-nh-X fourier 1 1.05 2 180.0 # same as X-ca-nh-X
dihedral_coeff @dihedral:X-ca-no-X fourier 1 0.6 2 180.0 #
dihedral_coeff @dihedral:X-ca-oh-X fourier 1 0.9 2 180.0 # Junmei et al, 99
dihedral_coeff @dihedral:X-ca-os-X fourier 1 0.9 2 180.0 # same as X-ca-oh-X
dihedral_coeff @dihedral:X-ca-p2-X fourier 1 0.6 2 180.0 #
dihedral_coeff @dihedral:X-ca-pe-X fourier 1 0.6 2 180.0 # same as X-ca-p2-X
dihedral_coeff @dihedral:X-ca-pf-X fourier 1 0.6 2 180.0 # same as X-ca-p2-X
dihedral_coeff @dihedral:X-ca-pc-X fourier 1 4.8 2 180.0 # estimated, intrpol
dihedral_coeff @dihedral:X-ca-pd-X fourier 1 4.8 2 180.0 # estimated, intrpol
dihedral_coeff @dihedral:X-ca-p3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-ca-p4-X fourier 1 0.525 2 180.0 #
dihedral_coeff @dihedral:X-ca-px-X fourier 1 0.525 2 180.0 # estimated, same as X-ca-p4-X
dihedral_coeff @dihedral:X-ca-p5-X fourier 1 1.46666666667 2 180.0 #
dihedral_coeff @dihedral:X-ca-py-X fourier 1 1.46666666667 2 180.0 # estimated, same as X-ca-p5-X
dihedral_coeff @dihedral:X-ca-sh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-ca-ss-X fourier 1 0.4 2 180.0 #
dihedral_coeff @dihedral:X-ca-s4-X fourier 1 0.3 2 0.0 #
dihedral_coeff @dihedral:X-ca-sx-X fourier 1 0.3 2 0.0 # estimated, same as X-ca-s4-X
dihedral_coeff @dihedral:X-ca-s6-X fourier 1 1.3 2 180.0 #
dihedral_coeff @dihedral:X-ca-sy-X fourier 1 1.3 2 180.0 # estimated, same as X-ca-s6-X
dihedral_coeff @dihedral:X-n-cc-X fourier 1 1.65 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-n-cd-X fourier 1 1.65 2 180.0 # statistic value from parm94
dihedral_coeff @dihedral:X-n-n-X fourier 1 1.15 2 0.0 #
dihedral_coeff @dihedral:X-n-n2-X fourier 1 0.4 2 0.0 #
dihedral_coeff @dihedral:X-n-ne-X fourier 1 0.4 2 0.0 #
dihedral_coeff @dihedral:X-n-nf-X fourier 1 0.4 2 0.0 #
dihedral_coeff @dihedral:X-n-n3-X fourier 1 1.075 2 0.0 #
dihedral_coeff @dihedral:X-n-n4-X fourier 1 0.95 2 0.0 #
dihedral_coeff @dihedral:X-n-na-X fourier 1 0.7 2 0.0 #
dihedral_coeff @dihedral:X-n-nc-X fourier 1 4.8 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n-nd-X fourier 1 4.8 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n-nh-X fourier 1 1.1 2 0.0 #
dihedral_coeff @dihedral:X-n-no-X fourier 1 1.375 2 180.0 #
dihedral_coeff @dihedral:X-n-oh-X fourier 1 1.5 2 0.0 #
dihedral_coeff @dihedral:X-n-os-X fourier 1 1.1 2 0.0 #
dihedral_coeff @dihedral:X-n-p2-X fourier 1 1.0 2 180.0 #
dihedral_coeff @dihedral:X-n-pe-X fourier 1 1.0 2 180.0 #
- dihedral_coeff @dihedral:X-n-pf-X fourier 1 4.8 2 180.0 # estimated, intrpol.
+ dihedral_coeff @dihedral:X-n-pf-X fourier 1 1.0 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n-pc-X fourier 1 4.8 2 180.0 # estimated, intrpol.
- dihedral_coeff @dihedral:X-n-pd-X fourier 1 1.0 2 180.0 #
+ dihedral_coeff @dihedral:X-n-pd-X fourier 1 4.8 2 180.0 #
dihedral_coeff @dihedral:X-n-p3-X fourier 1 2.25 2 0.0 #
dihedral_coeff @dihedral:X-n-p4-X fourier 1 0.325 2 0.0 #
dihedral_coeff @dihedral:X-n-px-X fourier 1 0.325 2 0.0 #
dihedral_coeff @dihedral:X-n-p5-X fourier 1 2.2 2 180.0 #
dihedral_coeff @dihedral:X-n-py-X fourier 1 2.2 2 180.0 #
dihedral_coeff @dihedral:X-n-sh-X fourier 1 1.1 2 0.0 #
dihedral_coeff @dihedral:X-n-ss-X fourier 1 1.5 2 0.0 #
dihedral_coeff @dihedral:X-n-s4-X fourier 1 1.5 3 0.0 #
dihedral_coeff @dihedral:X-n-sx-X fourier 1 1.5 3 0.0 #
dihedral_coeff @dihedral:X-n-s6-X fourier 1 1.1 2 180.0 #
dihedral_coeff @dihedral:X-n-sy-X fourier 1 1.1 2 180.0 #
dihedral_coeff @dihedral:X-n1-c2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-c3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-ca-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cc-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cd-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-ce-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cf-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cu-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cv-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cx-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-cy-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-n-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-n1-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-n2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-n3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-n4-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-na-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-nb-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-nc-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-nd-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-ne-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-nf-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-nh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-no-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-oh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-os-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-p2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-pb-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-pc-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-pd-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-pe-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-pf-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-p3-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-p4-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-px-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-p5-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-py-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-s2-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-sh-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-ss-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-s4-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-sx-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-s6-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n1-sy-X fourier 1 0.0 2 180.0 #
dihedral_coeff @dihedral:X-n2-n2-X fourier 2 3.0 2 180.0 2.8 1 0.0 # double bond
dihedral_coeff @dihedral:X-n2-ne-X fourier 2 3.0 2 180.0 2.8 1 0.0 # double bond
dihedral_coeff @dihedral:X-n2-nf-X fourier 2 3.0 2 180.0 2.8 1 0.0 # double bond
dihedral_coeff @dihedral:X-ne-nf-X fourier 2 3.0 2 180.0 2.8 1 0.0 # double bond
dihedral_coeff @dihedral:X-ne-ne-X fourier 1 1.2 2 180.0 # single bond, intrpol
dihedral_coeff @dihedral:X-nf-nf-X fourier 1 1.2 2 180.0 # single bond, intrpol
dihedral_coeff @dihedral:X-nc-nc-X fourier 1 4.0 2 180.0 # estimated, intrpol
dihedral_coeff @dihedral:X-nd-nd-X fourier 1 4.0 2 180.0 # estimated, intrpol
dihedral_coeff @dihedral:X-nc-nd-X fourier 1 4.0 2 180.0 # estimated, intrpol
dihedral_coeff @dihedral:X-n2-nc-X fourier 2 3.0 2 180.0 2.8 1 0.0 # same as X-n2-n2-X
dihedral_coeff @dihedral:X-n2-nd-X fourier 2 3.0 2 180.0 2.8 1 0.0 # same as X-n2-n2-X
dihedral_coeff @dihedral:X-n2-n3-X fourier 1 6.1 2 180.0 #
dihedral_coeff @dihedral:X-ne-n3-X fourier 1 6.1 2 180.0 #
dihedral_coeff @dihedral:X-nf-n3-X fourier 1 6.1 2 180.0 #
dihedral_coeff @dihedral:X-n2-n4-X fourier 1 8.0 2 180.0 #
dihedral_coeff @dihedral:X-ne-n4-X fourier 1 8.0 2 180.0 #
dihedral_coeff @dihedral:X-nf-n4-X fourier 1 8.0 2 180.0 #
dihedral_coeff @dihedral:X-n2-na-X fourier 1 1.7 2 180.0 #
dihedral_coeff @dihedral:X-ne-na-X fourier 1 1.7 2 180.0 #
dihedral_coeff @dihedral:X-nf-na-X fourier 1 1.7 2 180.0 #
dihedral_coeff @dihedral:X-na-nc-X fourier 1 4.8 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-na-nd-X fourier 1 4.8 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n2-nh-X fourier 1 2.8 2 180.0 #
dihedral_coeff @dihedral:X-ne-nh-X fourier 1 2.8 2 180.0 #
dihedral_coeff @dihedral:X-nf-nh-X fourier 1 2.8 2 180.0 #
dihedral_coeff @dihedral:X-n2-no-X fourier 1 0.75 2 180.0 #
dihedral_coeff @dihedral:X-ne-no-X fourier 1 0.75 2 180.0 #
dihedral_coeff @dihedral:X-nf-no-X fourier 1 0.75 2 180.0 #
dihedral_coeff @dihedral:X-n2-oh-X fourier 1 3.2 2 180.0 #
dihedral_coeff @dihedral:X-ne-oh-X fourier 1 3.2 2 180.0 #
dihedral_coeff @dihedral:X-nf-oh-X fourier 1 3.2 2 180.0 #
dihedral_coeff @dihedral:X-n2-os-X fourier 1 3.0 2 180.0 #
dihedral_coeff @dihedral:X-ne-os-X fourier 1 3.0 2 180.0 #
dihedral_coeff @dihedral:X-nf-os-X fourier 1 3.0 2 180.0 #
dihedral_coeff @dihedral:X-nc-os-X fourier 1 4.8 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nc-ss-X fourier 1 4.8 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n2-p2-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n2-pe-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n2-pf-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-ne-pf-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n2-pc-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-n2-pd-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nc-p2-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nd-p2-X fourier 1 5.4 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nc-pc-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nd-pd-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nd-pc-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-nc-pd-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-ne-pe-X fourier 1 0.6 1 0.0 # single bond
dihedral_coeff @dihedral:X-nf-pf-X fourier 1 0.6 1 0.0 # single bond
dihedral_coeff @dihedral:X-n2-p3-X fourier 1 2.1 2 180.0 #
dihedral_coeff @dihedral:X-n2-p4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-ne-p4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-nf-p4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-n2-p5-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-ne-p5-X fourier 1 1.0 3 180.0 #
dihedral_coeff @dihedral:X-nf-p5-X fourier 1 1.0 3 180.0 #
dihedral_coeff @dihedral:X-ne-px-X fourier 1 1.0 3 180.0 #
dihedral_coeff @dihedral:X-nf-px-X fourier 1 1.0 3 180.0 #
dihedral_coeff @dihedral:X-n2-sh-X fourier 1 2.1 2 180.0 #
dihedral_coeff @dihedral:X-ne-sh-X fourier 1 2.1 2 180.0 #
dihedral_coeff @dihedral:X-nf-sh-X fourier 1 2.1 2 180.0 #
dihedral_coeff @dihedral:X-n2-ss-X fourier 2 2.8 2 180.0 1.3 1 180.0 #
dihedral_coeff @dihedral:X-ne-ss-X fourier 2 2.8 2 180.0 1.3 1 180.0 #
dihedral_coeff @dihedral:X-nf-ss-X fourier 2 2.8 2 180.0 1.3 1 180.0 #
dihedral_coeff @dihedral:X-n2-s4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-ne-sx-X fourier 1 1.5 3 180.0 #
dihedral_coeff @dihedral:X-nf-sx-X fourier 1 1.5 3 180.0 #
dihedral_coeff @dihedral:X-n2-s6-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-ne-sy-X fourier 2 0.5 3 180.0 6.8 1 180.0 #
dihedral_coeff @dihedral:X-nf-sy-X fourier 2 0.5 3 180.0 6.8 1 180.0 #
dihedral_coeff @dihedral:X-n3-n3-X fourier 1 2.25 2 0.0 #
dihedral_coeff @dihedral:X-n3-n4-X fourier 1 0.25 3 0.0 #
dihedral_coeff @dihedral:X-n3-na-X fourier 1 1.6 2 0.0 #
dihedral_coeff @dihedral:X-n3-nh-X fourier 1 1.9 2 0.0 #
dihedral_coeff @dihedral:X-n3-no-X fourier 1 4.0 2 180.0 #
dihedral_coeff @dihedral:X-n3-oh-X fourier 1 2.2 2 0.0 #
dihedral_coeff @dihedral:X-n3-os-X fourier 1 1.8 2 0.0 #
dihedral_coeff @dihedral:X-n3-p2-X fourier 1 3.2 2 180.0 #
dihedral_coeff @dihedral:X-n3-pe-X fourier 1 3.2 2 180.0 #
dihedral_coeff @dihedral:X-n3-pf-X fourier 1 3.2 2 180.0 #
dihedral_coeff @dihedral:X-n3-p3-X fourier 1 2.35 2 0.0 #
dihedral_coeff @dihedral:X-n3-p4-X fourier 1 2.1 2 180.0 #
dihedral_coeff @dihedral:X-n3-px-X fourier 1 2.1 2 180.0 #
dihedral_coeff @dihedral:X-n3-p5-X fourier 1 3.0 2 180.0 #
dihedral_coeff @dihedral:X-n3-py-X fourier 1 3.0 2 180.0 #
dihedral_coeff @dihedral:X-n3-sh-X fourier 1 3.1 2 0.0 #
dihedral_coeff @dihedral:X-n3-ss-X fourier 1 2.6 2 0.0 #
dihedral_coeff @dihedral:X-n3-s4-X fourier 1 3.75 2 0.0 #
dihedral_coeff @dihedral:X-n3-sx-X fourier 1 3.75 2 0.0 #
dihedral_coeff @dihedral:X-n3-s6-X fourier 1 3.13333333333 2 0.0 #
dihedral_coeff @dihedral:X-n3-sy-X fourier 1 3.13333333333 2 0.0 #
dihedral_coeff @dihedral:X-n4-n4-X fourier 1 0.188888888889 3 0.0 #
dihedral_coeff @dihedral:X-n4-na-X fourier 1 0.233333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-nh-X fourier 1 0.183333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-no-X fourier 1 0.0833333333333 3 180.0 #
dihedral_coeff @dihedral:X-n4-oh-X fourier 1 0.333333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-os-X fourier 1 0.566666666667 3 0.0 #
dihedral_coeff @dihedral:X-n4-p2-X fourier 1 0.166666666667 3 180.0 #
dihedral_coeff @dihedral:X-n4-pe-X fourier 1 0.166666666667 3 180.0 #
dihedral_coeff @dihedral:X-n4-pf-X fourier 1 0.166666666667 3 180.0 #
dihedral_coeff @dihedral:X-n4-p3-X fourier 1 0.15 3 0.0 #
dihedral_coeff @dihedral:X-n4-p4-X fourier 1 0.05 3 0.0 #
dihedral_coeff @dihedral:X-n4-px-X fourier 1 0.05 3 0.0 #
dihedral_coeff @dihedral:X-n4-p5-X fourier 1 0.0888888888889 3 0.0 #
dihedral_coeff @dihedral:X-n4-py-X fourier 1 0.0888888888889 3 0.0 #
dihedral_coeff @dihedral:X-n4-sh-X fourier 1 0.666666666667 3 0.0 #
dihedral_coeff @dihedral:X-n4-ss-X fourier 1 0.333333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-s4-X fourier 1 0.283333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-sx-X fourier 1 0.283333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-s6-X fourier 1 0.133333333333 3 0.0 #
dihedral_coeff @dihedral:X-n4-sy-X fourier 1 0.133333333333 3 0.0 #
dihedral_coeff @dihedral:X-na-na-X fourier 1 0.9 2 0.0 #
dihedral_coeff @dihedral:X-na-nh-X fourier 1 1.2 2 0.0 #
dihedral_coeff @dihedral:X-na-no-X fourier 1 6.0 2 180.0 #
dihedral_coeff @dihedral:X-na-oh-X fourier 1 1.0 2 0.0 #
dihedral_coeff @dihedral:X-na-os-X fourier 1 0.65 2 0.0 #
dihedral_coeff @dihedral:X-na-p2-X fourier 1 1.0 2 180.0 #
dihedral_coeff @dihedral:X-na-pe-X fourier 1 1.0 2 180.0 #
dihedral_coeff @dihedral:X-na-pf-X fourier 1 1.0 2 180.0 #
dihedral_coeff @dihedral:X-na-p3-X fourier 1 1.45 2 0.0 #
dihedral_coeff @dihedral:X-na-p4-X fourier 1 1.1 3 0.0 #
dihedral_coeff @dihedral:X-na-px-X fourier 1 1.1 3 0.0 #
dihedral_coeff @dihedral:X-na-p5-X fourier 1 0.833333333333 2 180.0 #
dihedral_coeff @dihedral:X-na-py-X fourier 1 0.833333333333 2 180.0 #
dihedral_coeff @dihedral:X-na-sh-X fourier 1 1.8 2 0.0 #
dihedral_coeff @dihedral:X-na-ss-X fourier 1 7.8 2 0.0 #
dihedral_coeff @dihedral:X-na-s4-X fourier 1 1.05 2 0.0 #
dihedral_coeff @dihedral:X-na-sx-X fourier 1 1.05 2 0.0 #
dihedral_coeff @dihedral:X-na-s6-X fourier 1 3.66666666667 2 180.0 #
dihedral_coeff @dihedral:X-na-sy-X fourier 1 3.66666666667 2 180.0 #
dihedral_coeff @dihedral:X-nh-nh-X fourier 1 1.8 3 180.0 #
dihedral_coeff @dihedral:X-nh-no-X fourier 1 2.55 2 180.0 #
dihedral_coeff @dihedral:X-nh-oh-X fourier 1 1.5 2 0.0 #
dihedral_coeff @dihedral:X-nh-os-X fourier 1 1.5 1 0.0 #
dihedral_coeff @dihedral:X-nh-p2-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-nh-pe-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-nh-pf-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-nh-p3-X fourier 1 2.35 2 0.0 #
dihedral_coeff @dihedral:X-nh-p4-X fourier 1 1.175 3 0.0 #
dihedral_coeff @dihedral:X-nh-px-X fourier 1 1.175 3 0.0 #
dihedral_coeff @dihedral:X-nh-p5-X fourier 1 0.8 2 0.0 #
dihedral_coeff @dihedral:X-nh-py-X fourier 1 0.8 2 0.0 #
dihedral_coeff @dihedral:X-nh-sh-X fourier 1 1.6 2 0.0 #
dihedral_coeff @dihedral:X-nh-ss-X fourier 1 2.1 2 0.0 #
dihedral_coeff @dihedral:X-nh-s4-X fourier 2 0.75 2 0.0 0.1 3 180.0 #
dihedral_coeff @dihedral:X-nh-sx-X fourier 2 0.75 2 0.0 0.1 3 180.0 #
dihedral_coeff @dihedral:X-nh-s6-X fourier 1 0.1 2 180.0 #
dihedral_coeff @dihedral:X-nh-sy-X fourier 1 0.1 2 180.0 #
dihedral_coeff @dihedral:X-no-no-X fourier 2 0.4 4 180.0 1.8 2 180.0 #
dihedral_coeff @dihedral:X-no-oh-X fourier 1 3.9 2 180.0 #
dihedral_coeff @dihedral:X-no-os-X fourier 1 3.0 2 180.0 #
dihedral_coeff @dihedral:X-no-p2-X fourier 1 0.3 2 180.0 #
dihedral_coeff @dihedral:X-no-pe-X fourier 1 0.3 2 180.0 #
dihedral_coeff @dihedral:X-no-pf-X fourier 1 0.3 2 180.0 #
dihedral_coeff @dihedral:X-no-p3-X fourier 1 1.9 2 180.0 #
dihedral_coeff @dihedral:X-no-p4-X fourier 1 0.575 2 180.0 #
dihedral_coeff @dihedral:X-no-px-X fourier 1 0.575 2 180.0 #
dihedral_coeff @dihedral:X-no-p5-X fourier 2 2.4 2 0.0 0.4 3 0.0 #
dihedral_coeff @dihedral:X-no-py-X fourier 2 2.4 2 0.0 0.4 3 0.0 #
dihedral_coeff @dihedral:X-no-sh-X fourier 1 2.3 2 180.0 #
dihedral_coeff @dihedral:X-no-ss-X fourier 1 2.7 2 180.0 #
dihedral_coeff @dihedral:X-no-s4-X fourier 1 2.6 2 180.0 #
dihedral_coeff @dihedral:X-no-sx-X fourier 1 2.6 2 180.0 #
dihedral_coeff @dihedral:X-no-s6-X fourier 1 0.333333333333 2 0.0 #
dihedral_coeff @dihedral:X-no-sy-X fourier 1 0.333333333333 2 0.0 #
dihedral_coeff @dihedral:X-oh-oh-X fourier 1 1.6 2 0.0 #
dihedral_coeff @dihedral:X-oh-os-X fourier 1 1.6 2 0.0 #
dihedral_coeff @dihedral:X-oh-p2-X fourier 1 1.5 2 180.0 #
dihedral_coeff @dihedral:X-oh-pe-X fourier 1 1.5 2 180.0 #
dihedral_coeff @dihedral:X-oh-pf-X fourier 1 1.5 2 180.0 #
dihedral_coeff @dihedral:X-oh-p3-X fourier 1 0.4 3 180.0 #
dihedral_coeff @dihedral:X-oh-p4-X fourier 1 0.7 1 0.0 #
dihedral_coeff @dihedral:X-oh-px-X fourier 1 0.7 1 0.0 #
dihedral_coeff @dihedral:X-oh-p5-X fourier 1 0.533333333333 3 0.0 #
dihedral_coeff @dihedral:X-oh-py-X fourier 1 0.533333333333 3 0.0 #
dihedral_coeff @dihedral:X-oh-sh-X fourier 1 2.4 2 0.0 #
dihedral_coeff @dihedral:X-oh-ss-X fourier 1 2.4 2 0.0 #
dihedral_coeff @dihedral:X-oh-s4-X fourier 1 5.0 1 0.0 #
dihedral_coeff @dihedral:X-oh-sx-X fourier 1 5.0 1 0.0 #
dihedral_coeff @dihedral:X-oh-s6-X fourier 1 9.5 1 180.0 #
dihedral_coeff @dihedral:X-oh-sy-X fourier 1 9.5 1 180.0 #
dihedral_coeff @dihedral:X-os-os-X fourier 1 1.0 1 0.0 #
dihedral_coeff @dihedral:X-os-ss-X fourier 1 2.2 2 0.0 #
dihedral_coeff @dihedral:X-os-sh-X fourier 1 1.8 2 0.0 #
dihedral_coeff @dihedral:X-os-s4-X fourier 1 1.65 3 0.0 #
dihedral_coeff @dihedral:X-os-sx-X fourier 1 1.65 3 0.0 #
dihedral_coeff @dihedral:X-os-s6-X fourier 1 1.2 2 180.0 #
dihedral_coeff @dihedral:X-os-sy-X fourier 1 1.2 2 180.0 #
dihedral_coeff @dihedral:X-os-p2-X fourier 2 3.0 2 180.0 2.0 1 180.0 #
dihedral_coeff @dihedral:X-os-pe-X fourier 2 3.0 2 180.0 2.0 1 180.0 #
dihedral_coeff @dihedral:X-os-pf-X fourier 2 3.0 2 180.0 2.0 1 180.0 #
dihedral_coeff @dihedral:X-os-p3-X fourier 1 2.2 2 0.0 #
dihedral_coeff @dihedral:X-os-p4-X fourier 1 1.05 2 180.0 #
dihedral_coeff @dihedral:X-os-px-X fourier 1 1.05 2 180.0 #
dihedral_coeff @dihedral:X-os-p5-X fourier 1 0.8 2 0.0 #
dihedral_coeff @dihedral:X-os-py-X fourier 1 0.8 2 0.0 #
dihedral_coeff @dihedral:X-p2-p2-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-p2-pe-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-p2-pf-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-p2-pc-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-p2-pd-X fourier 1 6.6 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-pe-pe-X fourier 1 1.2 2 180.0 # single bond
dihedral_coeff @dihedral:X-pf-pf-X fourier 1 1.2 2 180.0 # single bond
dihedral_coeff @dihedral:X-pc-pc-X fourier 1 7.2 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-pd-pd-X fourier 1 7.2 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-pc-pd-X fourier 1 7.2 2 180.0 # estimated, intrpol.
dihedral_coeff @dihedral:X-p2-p3-X fourier 1 1.2 1 0.0 #
dihedral_coeff @dihedral:X-pe-p3-X fourier 1 1.2 1 0.0 #
dihedral_coeff @dihedral:X-pf-p3-X fourier 1 1.2 1 0.0 #
dihedral_coeff @dihedral:X-p2-p4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-pe-px-X fourier 1 2.45 2 0.0 #
dihedral_coeff @dihedral:X-pf-px-X fourier 1 2.45 2 0.0 #
dihedral_coeff @dihedral:X-p2-p5-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-pe-py-X fourier 1 1.9 1 0.0 #
dihedral_coeff @dihedral:X-pf-py-X fourier 1 1.9 1 0.0 #
dihedral_coeff @dihedral:X-p2-sh-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-pe-sh-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-pf-sh-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-p2-ss-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-pe-ss-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-pf-ss-X fourier 1 1.4 2 180.0 #
dihedral_coeff @dihedral:X-p2-s4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-pe-sx-X fourier 1 1.5 2 0.0 #
dihedral_coeff @dihedral:X-pf-sx-X fourier 1 1.5 2 0.0 #
dihedral_coeff @dihedral:X-p2-s6-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-pe-sy-X fourier 1 0.4 3 180.0 #
dihedral_coeff @dihedral:X-pf-sy-X fourier 1 0.4 3 180.0 #
dihedral_coeff @dihedral:X-p3-p3-X fourier 1 0.5 3 0.0 #
dihedral_coeff @dihedral:X-p3-p4-X fourier 1 0.9 1 0.0 #
dihedral_coeff @dihedral:X-p3-px-X fourier 1 0.9 1 0.0 #
dihedral_coeff @dihedral:X-p3-p5-X fourier 1 1.83333333333 2 180.0 #
dihedral_coeff @dihedral:X-p3-py-X fourier 1 1.83333333333 2 180.0 #
dihedral_coeff @dihedral:X-p3-sh-X fourier 1 4.6 2 0.0 #
dihedral_coeff @dihedral:X-p3-ss-X fourier 1 1.15 3 0.0 #
dihedral_coeff @dihedral:X-p3-s4-X fourier 1 3.85 2 0.0 #
dihedral_coeff @dihedral:X-p3-sx-X fourier 1 3.85 2 0.0 #
dihedral_coeff @dihedral:X-p3-s6-X fourier 1 0.266666666667 3 0.0 #
dihedral_coeff @dihedral:X-p3-sy-X fourier 1 0.266666666667 3 0.0 #
dihedral_coeff @dihedral:X-p4-p4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-px-px-X fourier 1 1.45 2 180.0 #
dihedral_coeff @dihedral:X-p4-p5-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-px-py-X fourier 1 0.316666666667 2 180.0 #
dihedral_coeff @dihedral:X-p4-s4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-px-sx-X fourier 1 0.85 1 0.0 #
dihedral_coeff @dihedral:X-p4-s6-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-px-sy-X fourier 1 0.116666666667 3 0.0 #
dihedral_coeff @dihedral:X-p4-sh-X fourier 1 0.25 1 180.0 #
dihedral_coeff @dihedral:X-px-sh-X fourier 1 0.25 1 180.0 #
dihedral_coeff @dihedral:X-p4-ss-X fourier 1 0.6 2 180.0 #
dihedral_coeff @dihedral:X-px-ss-X fourier 1 0.6 2 180.0 #
dihedral_coeff @dihedral:X-p5-p5-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-py-py-X fourier 1 0.6 2 0.0 #
dihedral_coeff @dihedral:X-p5-sh-X fourier 1 0.3 3 0.0 #
dihedral_coeff @dihedral:X-py-sh-X fourier 1 0.3 3 0.0 #
dihedral_coeff @dihedral:X-p5-ss-X fourier 1 3.8 2 180.0 #
dihedral_coeff @dihedral:X-py-ss-X fourier 1 3.8 2 180.0 #
dihedral_coeff @dihedral:X-p5-s4-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-py-sx-X fourier 1 0.266666666667 3 0.0 #
dihedral_coeff @dihedral:X-p5-s6-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-py-sy-X fourier 1 0.277777777778 3 0.0 #
dihedral_coeff @dihedral:X-sh-sh-X fourier 1 5.6 3 0.0 #
dihedral_coeff @dihedral:X-sh-ss-X fourier 1 5.3 3 0.0 #
dihedral_coeff @dihedral:X-sh-s4-X fourier 1 0.7 3 0.0 #
dihedral_coeff @dihedral:X-sh-sx-X fourier 1 0.7 3 0.0 #
dihedral_coeff @dihedral:X-sh-s6-X fourier 1 4.66666666667 2 180.0 #
dihedral_coeff @dihedral:X-sh-sy-X fourier 1 4.66666666667 2 180.0 #
dihedral_coeff @dihedral:X-ss-ss-X fourier 1 0.0 3 0.0 #
dihedral_coeff @dihedral:X-ss-s4-X fourier 1 0.3 3 0.0 #
dihedral_coeff @dihedral:X-ss-sx-X fourier 1 0.3 3 0.0 #
dihedral_coeff @dihedral:X-ss-s6-X fourier 1 3.06666666667 2 180.0 #
dihedral_coeff @dihedral:X-ss-sy-X fourier 1 3.06666666667 2 180.0 #
dihedral_coeff @dihedral:X-s4-s4-X fourier 1 6.65 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-sx-sx-X fourier 1 0.625 3 0.0 #
dihedral_coeff @dihedral:X-s4-s6-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-sx-sy-X fourier 1 4.33333333333 2 180.0 #
dihedral_coeff @dihedral:X-s6-s6-X fourier 1 6.66666666667 2 180.0 # estimated !!!
dihedral_coeff @dihedral:X-sy-sy-X fourier 1 0.155555555556 2 180.0 #
+ dihedral_coeff @dihedral:X-cf-pe-X fourier 1 6.65 2 180.0 # NEW
+ dihedral_coeff @dihedral:X-nd-os-X fourier 1 4.8 2 180.0 # NEW
+ dihedral_coeff @dihedral:X-nd-ss-X fourier 1 4.8 2 180.0 # NEW
+ dihedral_coeff @dihedral:X-nf-pe-X fourier 1 5.4 2 180.0 # NEW
dihedral_coeff @dihedral:c3-c-sh-hs fourier 2 2.25 2 180.0 1.3 1 180.0 #
dihedral_coeff @dihedral:c2-c2-ss-c3 fourier 2 1.1 2 180.0 0.7 3 180.0 #
dihedral_coeff @dihedral:c2-c2-n-c fourier 2 0.65 2 180.0 1.2 1 180.0 #
dihedral_coeff @dihedral:c-n-p2-c2 fourier 2 1.0 2 180.0 1.9 1 180.0 #
dihedral_coeff @dihedral:n-c3-c-n fourier 2 1.7 1 180.0 2.0 2 180.0 #
dihedral_coeff @dihedral:c-n-c3-c fourier 2 0.85 2 180.0 0.8 1 0.0 #
dihedral_coeff @dihedral:c3-c3-n-c fourier 3 0.5 4 180.0 0.15 3 180.0 0.53 1 0.0 # phi,psi,parm94
dihedral_coeff @dihedral:c3-c3-c-n fourier 2 0.1 4 0.0 0.07 2 0.0 # phi,psi,parm94
dihedral_coeff @dihedral:c2-ne-p5-o fourier 2 0.0 3 0.0 2.3 1 0.0 #
dihedral_coeff @dihedral:c2-nf-p5-o fourier 2 0.0 3 0.0 2.3 1 0.0 #
dihedral_coeff @dihedral:ce-ne-p5-o fourier 2 0.0 3 0.0 2.3 1 0.0 #
dihedral_coeff @dihedral:ce-nf-p5-o fourier 2 0.0 3 0.0 2.3 1 0.0 #
dihedral_coeff @dihedral:cf-ne-p5-o fourier 2 0.0 3 0.0 2.3 1 0.0 #
dihedral_coeff @dihedral:cf-nf-p5-o fourier 2 0.0 3 0.0 2.3 1 0.0 #
dihedral_coeff @dihedral:hn-n-c-o fourier 2 2.5 2 180.0 2.0 1 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:c3-ss-ss-c3 fourier 2 3.5 2 0.0 0.6 3 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:c3-n3-nh-ca fourier 2 1.9 2 0.0 1.9 3 0.0 #
dihedral_coeff @dihedral:c3-n3-p5-o fourier 2 3.0 2 180.0 2.3 3 0.0 #
dihedral_coeff @dihedral:ca-nh-oh-ho fourier 2 1.2 1 0.0 1.5 2 0.0 #
dihedral_coeff @dihedral:oh-p5-os-c3 fourier 2 0.25 3 0.0 1.2 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:os-p5-os-c3 fourier 2 0.25 3 0.0 1.2 2 0.0 # JCC,7,(1986),230
dihedral_coeff @dihedral:h1-c3-c-o fourier 2 0.8 1 0.0 0.08 3 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c-o fourier 2 0.8 1 0.0 0.08 3 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-hc fourier 1 0.15 3 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-c3 fourier 1 0.16 3 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c2-c2 fourier 2 0.38 3 180.0 1.15 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:ho-oh-c3-c3 fourier 2 0.16 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:ho-oh-c-o fourier 2 2.3 2 180.0 1.9 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c2-c2-c-o fourier 2 2.175 2 180.0 0.3 3 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c3-c2-c2-c3 fourier 2 6.65 2 180.0 1.9 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c3-c3-c3-c3 fourier 3 0.18 3 0.0 0.25 2 180.0 0.2 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c3-c3-n3-c3 fourier 2 0.3 3 0.0 0.48 2 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c3-c3-os-c3 fourier 2 0.383 3 0.0 0.1 2 180.0 #
dihedral_coeff @dihedral:c3-c3-os-c fourier 2 0.383 3 0.0 0.8 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c3-os-c3-os fourier 3 0.1 3 0.0 0.85 2 180.0 1.35 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:c3-os-c3-na fourier 2 0.383 3 0.0 0.65 2 0.0 # parm98.dat, TC,PC,PAK
dihedral_coeff @dihedral:o-c-os-c3 fourier 2 2.7 2 180.0 1.4 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:os-c3-na-c2 fourier 2 0.0 2 0.0 2.5 1 0.0 # parm98, TC,PC,PAK
dihedral_coeff @dihedral:os-c3-c3-os fourier 2 0.144 3 0.0 1.175 2 0.0 # parm98, TC,PC,PAK
dihedral_coeff @dihedral:os-c3-c3-oh fourier 2 0.144 3 0.0 1.175 2 0.0 # parm98, TC,PC,PAK
dihedral_coeff @dihedral:oh-c3-c3-oh fourier 2 0.144 3 0.0 1.175 2 0.0 # parm98, TC,PC,PAK
dihedral_coeff @dihedral:f-c3-c3-f fourier 2 0.0 3 0.0 1.2 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:cl-c3-c3-cl fourier 2 0.0 3 0.0 0.45 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:br-c3-c3-br fourier 2 0.0 3 0.0 0.0 1 180.0 # Junmei et al, 1999
dihedral_coeff @dihedral:h1-c3-c3-os fourier 2 0.0 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:h1-c3-c3-oh fourier 2 0.0 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:h1-c3-c3-f fourier 2 0.0 3 0.0 0.19 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:h1-c3-c3-cl fourier 2 0.0 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:h1-c3-c3-br fourier 2 0.0 3 0.0 0.55 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-os fourier 2 0.0 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-oh fourier 2 0.0 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-f fourier 2 0.0 3 0.0 0.19 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-cl fourier 2 0.0 3 0.0 0.25 1 0.0 # Junmei et al, 1999
dihedral_coeff @dihedral:hc-c3-c3-br fourier 2 0.0 3 0.0 0.55 1 0.0 # Junmei et al, 1999
} # (end of dihedral_coeffs)
write_once("Data Dihedrals By Type") {
@dihedral:X-c-c-X @atom:* @atom:c @atom:c @atom:*
@dihedral:X-c-c1-X @atom:* @atom:c @atom:c1 @atom:*
@dihedral:X-c-cg-X @atom:* @atom:c @atom:cg @atom:*
@dihedral:X-c-ch-X @atom:* @atom:c @atom:ch @atom:*
@dihedral:X-c-c2-X @atom:* @atom:c @atom:c2 @atom:*
@dihedral:X-c-cu-X @atom:* @atom:c @atom:cu @atom:*
@dihedral:X-c-cv-X @atom:* @atom:c @atom:cv @atom:*
@dihedral:X-c-ce-X @atom:* @atom:c @atom:ce @atom:*
@dihedral:X-c-cf-X @atom:* @atom:c @atom:cf @atom:*
@dihedral:X-c-c3-X @atom:* @atom:c @atom:c3 @atom:*
@dihedral:X-c-cx-X @atom:* @atom:c @atom:cx @atom:*
@dihedral:X-c-cy-X @atom:* @atom:c @atom:cy @atom:*
@dihedral:X-c-ca-X @atom:* @atom:c @atom:ca @atom:*
@dihedral:X-c-cc-X @atom:* @atom:c @atom:cc @atom:*
@dihedral:X-c-cd-X @atom:* @atom:c @atom:cd @atom:*
@dihedral:X-c-n-X @atom:* @atom:c @atom:n @atom:*
@dihedral:X-c-n2-X @atom:* @atom:c @atom:n2 @atom:*
@dihedral:X-c-nc-X @atom:* @atom:c @atom:nc @atom:*
@dihedral:X-c-nd-X @atom:* @atom:c @atom:nd @atom:*
@dihedral:X-c-ne-X @atom:* @atom:c @atom:ne @atom:*
@dihedral:X-c-nf-X @atom:* @atom:c @atom:nf @atom:*
@dihedral:X-c-na-X @atom:* @atom:c @atom:na @atom:*
@dihedral:X-c-na-X @atom:* @atom:c @atom:na @atom:*
@dihedral:X-c-no-X @atom:* @atom:c @atom:no @atom:*
@dihedral:X-c-oh-X @atom:* @atom:c @atom:oh @atom:*
@dihedral:X-c-os-X @atom:* @atom:c @atom:os @atom:*
@dihedral:X-c-p2-X @atom:* @atom:c @atom:p2 @atom:*
@dihedral:X-c-pc-X @atom:* @atom:c @atom:pc @atom:*
@dihedral:X-c-pd-X @atom:* @atom:c @atom:pd @atom:*
@dihedral:X-c-pe-X @atom:* @atom:c @atom:pe @atom:*
@dihedral:X-c-pf-X @atom:* @atom:c @atom:pf @atom:*
@dihedral:X-c-p3-X @atom:* @atom:c @atom:p3 @atom:*
@dihedral:X-c-p4-X @atom:* @atom:c @atom:p4 @atom:*
@dihedral:X-c-px-X @atom:* @atom:c @atom:px @atom:*
@dihedral:X-c-p5-X @atom:* @atom:c @atom:p5 @atom:*
@dihedral:X-c-py-X @atom:* @atom:c @atom:py @atom:*
@dihedral:X-c-sh-X @atom:* @atom:c @atom:sh @atom:*
@dihedral:X-c-ss-X @atom:* @atom:c @atom:ss @atom:*
@dihedral:X-c-s4-X @atom:* @atom:c @atom:s4 @atom:*
@dihedral:X-c-sx-X @atom:* @atom:c @atom:sx @atom:*
@dihedral:X-c-s6-X @atom:* @atom:c @atom:s6 @atom:*
@dihedral:X-c-sy-X @atom:* @atom:c @atom:sy @atom:*
@dihedral:X-c1-c1-X @atom:* @atom:c1 @atom:c1 @atom:*
@dihedral:X-c1-cg-X @atom:* @atom:c1 @atom:cg @atom:*
@dihedral:X-c1-ch-X @atom:* @atom:c1 @atom:ch @atom:*
@dihedral:X-cg-cg-X @atom:* @atom:cg @atom:cg @atom:*
@dihedral:X-ch-ch-X @atom:* @atom:ch @atom:ch @atom:*
@dihedral:X-cg-ch-X @atom:* @atom:cg @atom:ch @atom:*
@dihedral:X-c1-c2-X @atom:* @atom:c1 @atom:c2 @atom:*
@dihedral:X-c1-c3-X @atom:* @atom:c1 @atom:c3 @atom:*
@dihedral:X-c1-ca-X @atom:* @atom:c1 @atom:ca @atom:*
@dihedral:X-c1-cc-X @atom:* @atom:c1 @atom:cc @atom:*
@dihedral:X-c1-cd-X @atom:* @atom:c1 @atom:cd @atom:*
@dihedral:X-c1-ce-X @atom:* @atom:c1 @atom:ce @atom:*
@dihedral:X-c1-cf-X @atom:* @atom:c1 @atom:cf @atom:*
@dihedral:X-c1-cu-X @atom:* @atom:c1 @atom:cu @atom:*
@dihedral:X-c1-cv-X @atom:* @atom:c1 @atom:cv @atom:*
@dihedral:X-c1-cx-X @atom:* @atom:c1 @atom:cx @atom:*
@dihedral:X-c1-cy-X @atom:* @atom:c1 @atom:cy @atom:*
@dihedral:X-c1-n-X @atom:* @atom:c1 @atom:n @atom:*
@dihedral:X-c1-n2-X @atom:* @atom:c1 @atom:n2 @atom:*
@dihedral:X-c1-n3-X @atom:* @atom:c1 @atom:n3 @atom:*
@dihedral:X-c1-n4-X @atom:* @atom:c1 @atom:n4 @atom:*
@dihedral:X-c1-na-X @atom:* @atom:c1 @atom:na @atom:*
@dihedral:X-c1-nb-X @atom:* @atom:c1 @atom:nb @atom:*
@dihedral:X-c1-nc-X @atom:* @atom:c1 @atom:nc @atom:*
@dihedral:X-c1-nd-X @atom:* @atom:c1 @atom:nd @atom:*
@dihedral:X-c1-ne-X @atom:* @atom:c1 @atom:ne @atom:*
@dihedral:X-c1-nf-X @atom:* @atom:c1 @atom:nf @atom:*
@dihedral:X-c1-nh-X @atom:* @atom:c1 @atom:nh @atom:*
@dihedral:X-c1-no-X @atom:* @atom:c1 @atom:no @atom:*
@dihedral:X-c1-oh-X @atom:* @atom:c1 @atom:oh @atom:*
@dihedral:X-c1-os-X @atom:* @atom:c1 @atom:os @atom:*
@dihedral:X-c1-p2-X @atom:* @atom:c1 @atom:p2 @atom:*
@dihedral:X-c1-pb-X @atom:* @atom:c1 @atom:pb @atom:*
@dihedral:X-c1-pc-X @atom:* @atom:c1 @atom:pc @atom:*
@dihedral:X-c1-pd-X @atom:* @atom:c1 @atom:pd @atom:*
@dihedral:X-c1-pe-X @atom:* @atom:c1 @atom:pe @atom:*
@dihedral:X-c1-pf-X @atom:* @atom:c1 @atom:pf @atom:*
@dihedral:X-c1-p3-X @atom:* @atom:c1 @atom:p3 @atom:*
@dihedral:X-c1-p4-X @atom:* @atom:c1 @atom:p4 @atom:*
@dihedral:X-c1-px-X @atom:* @atom:c1 @atom:px @atom:*
@dihedral:X-c1-p5-X @atom:* @atom:c1 @atom:p5 @atom:*
@dihedral:X-c1-py-X @atom:* @atom:c1 @atom:py @atom:*
@dihedral:X-c1-s2-X @atom:* @atom:c1 @atom:s2 @atom:*
@dihedral:X-c1-sh-X @atom:* @atom:c1 @atom:sh @atom:*
@dihedral:X-c1-ss-X @atom:* @atom:c1 @atom:ss @atom:*
@dihedral:X-c1-s4-X @atom:* @atom:c1 @atom:s4 @atom:*
@dihedral:X-c1-sx-X @atom:* @atom:c1 @atom:sx @atom:*
@dihedral:X-c1-s6-X @atom:* @atom:c1 @atom:s6 @atom:*
@dihedral:X-c1-sy-X @atom:* @atom:c1 @atom:sy @atom:*
@dihedral:X-c2-c2-X @atom:* @atom:c2 @atom:c2 @atom:*
@dihedral:X-c2-ce-X @atom:* @atom:c2 @atom:ce @atom:*
@dihedral:X-c2-cf-X @atom:* @atom:c2 @atom:cf @atom:*
@dihedral:X-ce-cf-X @atom:* @atom:ce @atom:cf @atom:*
@dihedral:X-ce-ce-X @atom:* @atom:ce @atom:ce @atom:*
@dihedral:X-cf-cf-X @atom:* @atom:cf @atom:cf @atom:*
@dihedral:X-cc-cd-X @atom:* @atom:cc @atom:cd @atom:*
@dihedral:X-cc-cc-X @atom:* @atom:cc @atom:cc @atom:*
@dihedral:X-cd-cd-X @atom:* @atom:cd @atom:cd @atom:*
@dihedral:X-c2-c3-X @atom:* @atom:c2 @atom:c3 @atom:*
@dihedral:X-c2-ca-X @atom:* @atom:c2 @atom:ca @atom:*
@dihedral:X-c2-n-X @atom:* @atom:c2 @atom:n @atom:*
@dihedral:X-c2-n2-X @atom:* @atom:c2 @atom:n2 @atom:*
@dihedral:X-c2-ne-X @atom:* @atom:c2 @atom:ne @atom:*
@dihedral:X-c2-nf-X @atom:* @atom:c2 @atom:nf @atom:*
@dihedral:X-ce-ne-X @atom:* @atom:ce @atom:ne @atom:*
@dihedral:X-cf-nf-X @atom:* @atom:cf @atom:nf @atom:*
@dihedral:X-c2-nc-X @atom:* @atom:c2 @atom:nc @atom:*
@dihedral:X-c2-nd-X @atom:* @atom:c2 @atom:nd @atom:*
@dihedral:X-cc-nd-X @atom:* @atom:cc @atom:nd @atom:*
@dihedral:X-cd-nc-X @atom:* @atom:cd @atom:nc @atom:*
@dihedral:X-cc-nc-X @atom:* @atom:cc @atom:nc @atom:*
@dihedral:X-cd-nd-X @atom:* @atom:cd @atom:nd @atom:*
@dihedral:X-c2-n3-X @atom:* @atom:c2 @atom:n3 @atom:*
@dihedral:X-c2-n4-X @atom:* @atom:c2 @atom:n4 @atom:*
@dihedral:X-c2-na-X @atom:* @atom:c2 @atom:na @atom:*
@dihedral:X-cc-na-X @atom:* @atom:cc @atom:na @atom:*
@dihedral:X-cd-na-X @atom:* @atom:cd @atom:na @atom:*
@dihedral:X-c2-nh-X @atom:* @atom:c2 @atom:nh @atom:*
@dihedral:X-c2-no-X @atom:* @atom:c2 @atom:no @atom:*
@dihedral:X-c2-oh-X @atom:* @atom:c2 @atom:oh @atom:*
@dihedral:X-c2-os-X @atom:* @atom:c2 @atom:os @atom:*
@dihedral:X-c2-p2-X @atom:* @atom:c2 @atom:p2 @atom:*
@dihedral:X-c2-pe-X @atom:* @atom:c2 @atom:pe @atom:*
@dihedral:X-c2-pf-X @atom:* @atom:c2 @atom:pf @atom:*
@dihedral:X-ce-pf-X @atom:* @atom:ce @atom:pf @atom:*
@dihedral:X-ce-pe-X @atom:* @atom:ce @atom:pe @atom:*
@dihedral:X-cf-pf-X @atom:* @atom:cf @atom:pf @atom:*
@dihedral:X-c2-pc-X @atom:* @atom:c2 @atom:pc @atom:*
@dihedral:X-c2-pd-X @atom:* @atom:c2 @atom:pd @atom:*
@dihedral:X-cc-pc-X @atom:* @atom:cc @atom:pc @atom:*
@dihedral:X-cc-pd-X @atom:* @atom:cc @atom:pd @atom:*
@dihedral:X-cd-pc-X @atom:* @atom:cd @atom:pc @atom:*
@dihedral:X-cd-pd-X @atom:* @atom:cd @atom:pd @atom:*
@dihedral:X-c2-p3-X @atom:* @atom:c2 @atom:p3 @atom:*
@dihedral:X-c2-p4-X @atom:* @atom:c2 @atom:p4 @atom:*
@dihedral:X-ce-p4-X @atom:* @atom:ce @atom:p4 @atom:*
@dihedral:X-cf-p4-X @atom:* @atom:cf @atom:p4 @atom:*
@dihedral:X-c2-px-X @atom:* @atom:c2 @atom:px @atom:*
@dihedral:X-ce-px-X @atom:* @atom:ce @atom:px @atom:*
@dihedral:X-cf-px-X @atom:* @atom:cf @atom:px @atom:*
@dihedral:X-c2-p5-X @atom:* @atom:c2 @atom:p5 @atom:*
@dihedral:X-ce-p5-X @atom:* @atom:ce @atom:p5 @atom:*
@dihedral:X-cf-p5-X @atom:* @atom:cf @atom:p5 @atom:*
@dihedral:X-c2-py-X @atom:* @atom:c2 @atom:py @atom:*
@dihedral:X-ce-py-X @atom:* @atom:ce @atom:py @atom:*
@dihedral:X-cf-py-X @atom:* @atom:cf @atom:py @atom:*
@dihedral:X-c2-sh-X @atom:* @atom:c2 @atom:sh @atom:*
@dihedral:X-c2-ss-X @atom:* @atom:c2 @atom:ss @atom:*
@dihedral:X-c2-s4-X @atom:* @atom:c2 @atom:s4 @atom:*
@dihedral:X-ce-s4-X @atom:* @atom:ce @atom:s4 @atom:*
@dihedral:X-cf-s4-X @atom:* @atom:cf @atom:s4 @atom:*
@dihedral:X-c2-sx-X @atom:* @atom:c2 @atom:sx @atom:*
@dihedral:X-ce-sx-X @atom:* @atom:ce @atom:sx @atom:*
@dihedral:X-cf-sx-X @atom:* @atom:cf @atom:sx @atom:*
@dihedral:X-c2-s6-X @atom:* @atom:c2 @atom:s6 @atom:*
@dihedral:X-ce-s6-X @atom:* @atom:ce @atom:s6 @atom:*
@dihedral:X-cf-s6-X @atom:* @atom:cf @atom:s6 @atom:*
@dihedral:X-c2-sy-X @atom:* @atom:c2 @atom:sy @atom:*
@dihedral:X-ce-sy-X @atom:* @atom:ce @atom:sy @atom:*
@dihedral:X-cf-sy-X @atom:* @atom:cf @atom:sy @atom:*
@dihedral:X-c3-c3-X @atom:* @atom:c3 @atom:c3 @atom:*
@dihedral:X-cx-cx-X @atom:* @atom:cx @atom:cx @atom:*
@dihedral:X-cy-cy-X @atom:* @atom:cy @atom:cy @atom:*
@dihedral:X-c3-ca-X @atom:* @atom:c3 @atom:ca @atom:*
@dihedral:X-c3-n-X @atom:* @atom:c3 @atom:n @atom:*
@dihedral:X-cx-n-X @atom:* @atom:cx @atom:n @atom:*
@dihedral:X-cy-n-X @atom:* @atom:cy @atom:n @atom:*
@dihedral:X-c3-n2-X @atom:* @atom:c3 @atom:n2 @atom:*
@dihedral:X-c3-ne-X @atom:* @atom:c3 @atom:ne @atom:*
@dihedral:X-c3-nf-X @atom:* @atom:c3 @atom:nf @atom:*
@dihedral:X-c3-n3-X @atom:* @atom:c3 @atom:n3 @atom:*
@dihedral:X-c3-n4-X @atom:* @atom:c3 @atom:n4 @atom:*
@dihedral:X-c3-na-X @atom:* @atom:c3 @atom:na @atom:*
@dihedral:X-c3-nh-X @atom:* @atom:c3 @atom:nh @atom:*
@dihedral:X-c3-no-X @atom:* @atom:c3 @atom:no @atom:*
@dihedral:X-c3-oh-X @atom:* @atom:c3 @atom:oh @atom:*
@dihedral:X-c3-os-X @atom:* @atom:c3 @atom:os @atom:*
@dihedral:X-c3-p2-X @atom:* @atom:c3 @atom:p2 @atom:*
@dihedral:X-c3-pe-X @atom:* @atom:c3 @atom:pe @atom:*
@dihedral:X-c3-pf-X @atom:* @atom:c3 @atom:pf @atom:*
@dihedral:X-c3-p3-X @atom:* @atom:c3 @atom:p3 @atom:*
@dihedral:X-c3-p4-X @atom:* @atom:c3 @atom:p4 @atom:*
@dihedral:X-c3-px-X @atom:* @atom:c3 @atom:px @atom:*
@dihedral:X-c3-p5-X @atom:* @atom:c3 @atom:p5 @atom:*
@dihedral:X-c3-py-X @atom:* @atom:c3 @atom:py @atom:*
@dihedral:X-c3-sh-X @atom:* @atom:c3 @atom:sh @atom:*
@dihedral:X-c3-ss-X @atom:* @atom:c3 @atom:ss @atom:*
@dihedral:X-c3-s4-X @atom:* @atom:c3 @atom:s4 @atom:*
@dihedral:X-c3-sx-X @atom:* @atom:c3 @atom:sx @atom:*
@dihedral:X-c3-s6-X @atom:* @atom:c3 @atom:s6 @atom:*
@dihedral:X-c3-sy-X @atom:* @atom:c3 @atom:sy @atom:*
@dihedral:X-c3-cc-X @atom:* @atom:c3 @atom:cc @atom:*
@dihedral:X-c3-cd-X @atom:* @atom:c3 @atom:cd @atom:*
@dihedral:X-ca-ca-X @atom:* @atom:ca @atom:ca @atom:*
@dihedral:X-ca-cp-X @atom:* @atom:ca @atom:cp @atom:*
@dihedral:X-ca-cq-X @atom:* @atom:ca @atom:cq @atom:*
@dihedral:X-cp-cp-X @atom:* @atom:cp @atom:cp @atom:*
@dihedral:X-cq-cq-X @atom:* @atom:cq @atom:cq @atom:*
@dihedral:X-ca-n-X @atom:* @atom:ca @atom:n @atom:*
@dihedral:X-ca-n2-X @atom:* @atom:ca @atom:n2 @atom:*
@dihedral:X-ca-ne-X @atom:* @atom:ca @atom:ne @atom:*
@dihedral:X-ca-nf-X @atom:* @atom:ca @atom:nf @atom:*
@dihedral:X-ca-n4-X @atom:* @atom:ca @atom:n4 @atom:*
@dihedral:X-ca-na-X @atom:* @atom:ca @atom:na @atom:*
@dihedral:X-ca-nb-X @atom:* @atom:ca @atom:nb @atom:*
@dihedral:X-ca-nc-X @atom:* @atom:ca @atom:nc @atom:*
@dihedral:X-ca-nd-X @atom:* @atom:ca @atom:nd @atom:*
@dihedral:X-ca-nh-X @atom:* @atom:ca @atom:nh @atom:*
@dihedral:X-cc-nh-X @atom:* @atom:cc @atom:nh @atom:*
@dihedral:X-cd-nh-X @atom:* @atom:cd @atom:nh @atom:*
@dihedral:X-ca-no-X @atom:* @atom:ca @atom:no @atom:*
@dihedral:X-ca-oh-X @atom:* @atom:ca @atom:oh @atom:*
@dihedral:X-ca-os-X @atom:* @atom:ca @atom:os @atom:*
@dihedral:X-ca-p2-X @atom:* @atom:ca @atom:p2 @atom:*
@dihedral:X-ca-pe-X @atom:* @atom:ca @atom:pe @atom:*
@dihedral:X-ca-pf-X @atom:* @atom:ca @atom:pf @atom:*
@dihedral:X-ca-pc-X @atom:* @atom:ca @atom:pc @atom:*
@dihedral:X-ca-pd-X @atom:* @atom:ca @atom:pd @atom:*
@dihedral:X-ca-p3-X @atom:* @atom:ca @atom:p3 @atom:*
@dihedral:X-ca-p4-X @atom:* @atom:ca @atom:p4 @atom:*
@dihedral:X-ca-px-X @atom:* @atom:ca @atom:px @atom:*
@dihedral:X-ca-p5-X @atom:* @atom:ca @atom:p5 @atom:*
@dihedral:X-ca-py-X @atom:* @atom:ca @atom:py @atom:*
@dihedral:X-ca-sh-X @atom:* @atom:ca @atom:sh @atom:*
@dihedral:X-ca-ss-X @atom:* @atom:ca @atom:ss @atom:*
@dihedral:X-ca-s4-X @atom:* @atom:ca @atom:s4 @atom:*
@dihedral:X-ca-sx-X @atom:* @atom:ca @atom:sx @atom:*
@dihedral:X-ca-s6-X @atom:* @atom:ca @atom:s6 @atom:*
@dihedral:X-ca-sy-X @atom:* @atom:ca @atom:sy @atom:*
@dihedral:X-n-cc-X @atom:* @atom:n @atom:cc @atom:*
@dihedral:X-n-cd-X @atom:* @atom:n @atom:cd @atom:*
@dihedral:X-n-n-X @atom:* @atom:n @atom:n @atom:*
@dihedral:X-n-n2-X @atom:* @atom:n @atom:n2 @atom:*
@dihedral:X-n-ne-X @atom:* @atom:n @atom:ne @atom:*
@dihedral:X-n-nf-X @atom:* @atom:n @atom:nf @atom:*
@dihedral:X-n-n3-X @atom:* @atom:n @atom:n3 @atom:*
@dihedral:X-n-n4-X @atom:* @atom:n @atom:n4 @atom:*
@dihedral:X-n-na-X @atom:* @atom:n @atom:na @atom:*
@dihedral:X-n-nc-X @atom:* @atom:n @atom:nc @atom:*
@dihedral:X-n-nd-X @atom:* @atom:n @atom:nd @atom:*
@dihedral:X-n-nh-X @atom:* @atom:n @atom:nh @atom:*
@dihedral:X-n-no-X @atom:* @atom:n @atom:no @atom:*
@dihedral:X-n-oh-X @atom:* @atom:n @atom:oh @atom:*
@dihedral:X-n-os-X @atom:* @atom:n @atom:os @atom:*
@dihedral:X-n-p2-X @atom:* @atom:n @atom:p2 @atom:*
@dihedral:X-n-pe-X @atom:* @atom:n @atom:pe @atom:*
@dihedral:X-n-pf-X @atom:* @atom:n @atom:pf @atom:*
@dihedral:X-n-pc-X @atom:* @atom:n @atom:pc @atom:*
@dihedral:X-n-pd-X @atom:* @atom:n @atom:pd @atom:*
@dihedral:X-n-p3-X @atom:* @atom:n @atom:p3 @atom:*
@dihedral:X-n-p4-X @atom:* @atom:n @atom:p4 @atom:*
@dihedral:X-n-px-X @atom:* @atom:n @atom:px @atom:*
@dihedral:X-n-p5-X @atom:* @atom:n @atom:p5 @atom:*
@dihedral:X-n-py-X @atom:* @atom:n @atom:py @atom:*
@dihedral:X-n-sh-X @atom:* @atom:n @atom:sh @atom:*
@dihedral:X-n-ss-X @atom:* @atom:n @atom:ss @atom:*
@dihedral:X-n-s4-X @atom:* @atom:n @atom:s4 @atom:*
@dihedral:X-n-sx-X @atom:* @atom:n @atom:sx @atom:*
@dihedral:X-n-s6-X @atom:* @atom:n @atom:s6 @atom:*
@dihedral:X-n-sy-X @atom:* @atom:n @atom:sy @atom:*
@dihedral:X-n1-c2-X @atom:* @atom:n1 @atom:c2 @atom:*
@dihedral:X-n1-c3-X @atom:* @atom:n1 @atom:c3 @atom:*
@dihedral:X-n1-ca-X @atom:* @atom:n1 @atom:ca @atom:*
@dihedral:X-n1-cc-X @atom:* @atom:n1 @atom:cc @atom:*
@dihedral:X-n1-cd-X @atom:* @atom:n1 @atom:cd @atom:*
@dihedral:X-n1-ce-X @atom:* @atom:n1 @atom:ce @atom:*
@dihedral:X-n1-cf-X @atom:* @atom:n1 @atom:cf @atom:*
@dihedral:X-n1-cu-X @atom:* @atom:n1 @atom:cu @atom:*
@dihedral:X-n1-cv-X @atom:* @atom:n1 @atom:cv @atom:*
@dihedral:X-n1-cx-X @atom:* @atom:n1 @atom:cx @atom:*
@dihedral:X-n1-cy-X @atom:* @atom:n1 @atom:cy @atom:*
@dihedral:X-n1-n-X @atom:* @atom:n1 @atom:n @atom:*
@dihedral:X-n1-n1-X @atom:* @atom:n1 @atom:n1 @atom:*
@dihedral:X-n1-n2-X @atom:* @atom:n1 @atom:n2 @atom:*
@dihedral:X-n1-n3-X @atom:* @atom:n1 @atom:n3 @atom:*
@dihedral:X-n1-n4-X @atom:* @atom:n1 @atom:n4 @atom:*
@dihedral:X-n1-na-X @atom:* @atom:n1 @atom:na @atom:*
@dihedral:X-n1-nb-X @atom:* @atom:n1 @atom:nb @atom:*
@dihedral:X-n1-nc-X @atom:* @atom:n1 @atom:nc @atom:*
@dihedral:X-n1-nd-X @atom:* @atom:n1 @atom:nd @atom:*
@dihedral:X-n1-ne-X @atom:* @atom:n1 @atom:ne @atom:*
@dihedral:X-n1-nf-X @atom:* @atom:n1 @atom:nf @atom:*
@dihedral:X-n1-nh-X @atom:* @atom:n1 @atom:nh @atom:*
@dihedral:X-n1-no-X @atom:* @atom:n1 @atom:no @atom:*
@dihedral:X-n1-oh-X @atom:* @atom:n1 @atom:oh @atom:*
@dihedral:X-n1-os-X @atom:* @atom:n1 @atom:os @atom:*
@dihedral:X-n1-p2-X @atom:* @atom:n1 @atom:p2 @atom:*
@dihedral:X-n1-pb-X @atom:* @atom:n1 @atom:pb @atom:*
@dihedral:X-n1-pc-X @atom:* @atom:n1 @atom:pc @atom:*
@dihedral:X-n1-pd-X @atom:* @atom:n1 @atom:pd @atom:*
@dihedral:X-n1-pe-X @atom:* @atom:n1 @atom:pe @atom:*
@dihedral:X-n1-pf-X @atom:* @atom:n1 @atom:pf @atom:*
@dihedral:X-n1-p3-X @atom:* @atom:n1 @atom:p3 @atom:*
@dihedral:X-n1-p4-X @atom:* @atom:n1 @atom:p4 @atom:*
@dihedral:X-n1-px-X @atom:* @atom:n1 @atom:px @atom:*
@dihedral:X-n1-p5-X @atom:* @atom:n1 @atom:p5 @atom:*
@dihedral:X-n1-py-X @atom:* @atom:n1 @atom:py @atom:*
@dihedral:X-n1-s2-X @atom:* @atom:n1 @atom:s2 @atom:*
@dihedral:X-n1-sh-X @atom:* @atom:n1 @atom:sh @atom:*
@dihedral:X-n1-ss-X @atom:* @atom:n1 @atom:ss @atom:*
@dihedral:X-n1-s4-X @atom:* @atom:n1 @atom:s4 @atom:*
@dihedral:X-n1-sx-X @atom:* @atom:n1 @atom:sx @atom:*
@dihedral:X-n1-s6-X @atom:* @atom:n1 @atom:s6 @atom:*
@dihedral:X-n1-sy-X @atom:* @atom:n1 @atom:sy @atom:*
@dihedral:X-n2-n2-X @atom:* @atom:n2 @atom:n2 @atom:*
@dihedral:X-n2-n2-X @atom:* @atom:n2 @atom:n2 @atom:*
@dihedral:X-n2-ne-X @atom:* @atom:n2 @atom:ne @atom:*
@dihedral:X-n2-ne-X @atom:* @atom:n2 @atom:ne @atom:*
@dihedral:X-n2-nf-X @atom:* @atom:n2 @atom:nf @atom:*
@dihedral:X-n2-nf-X @atom:* @atom:n2 @atom:nf @atom:*
@dihedral:X-ne-nf-X @atom:* @atom:ne @atom:nf @atom:*
@dihedral:X-ne-nf-X @atom:* @atom:ne @atom:nf @atom:*
@dihedral:X-ne-ne-X @atom:* @atom:ne @atom:ne @atom:*
@dihedral:X-nf-nf-X @atom:* @atom:nf @atom:nf @atom:*
@dihedral:X-nc-nc-X @atom:* @atom:nc @atom:nc @atom:*
@dihedral:X-nd-nd-X @atom:* @atom:nd @atom:nd @atom:*
@dihedral:X-nc-nd-X @atom:* @atom:nc @atom:nd @atom:*
@dihedral:X-n2-nc-X @atom:* @atom:n2 @atom:nc @atom:*
@dihedral:X-n2-nc-X @atom:* @atom:n2 @atom:nc @atom:*
@dihedral:X-n2-nd-X @atom:* @atom:n2 @atom:nd @atom:*
@dihedral:X-n2-nd-X @atom:* @atom:n2 @atom:nd @atom:*
@dihedral:X-n2-n3-X @atom:* @atom:n2 @atom:n3 @atom:*
@dihedral:X-ne-n3-X @atom:* @atom:ne @atom:n3 @atom:*
@dihedral:X-nf-n3-X @atom:* @atom:nf @atom:n3 @atom:*
@dihedral:X-n2-n4-X @atom:* @atom:n2 @atom:n4 @atom:*
@dihedral:X-ne-n4-X @atom:* @atom:ne @atom:n4 @atom:*
@dihedral:X-nf-n4-X @atom:* @atom:nf @atom:n4 @atom:*
@dihedral:X-n2-na-X @atom:* @atom:n2 @atom:na @atom:*
@dihedral:X-ne-na-X @atom:* @atom:ne @atom:na @atom:*
@dihedral:X-nf-na-X @atom:* @atom:nf @atom:na @atom:*
@dihedral:X-na-nc-X @atom:* @atom:na @atom:nc @atom:*
@dihedral:X-na-nd-X @atom:* @atom:na @atom:nd @atom:*
@dihedral:X-n2-nh-X @atom:* @atom:n2 @atom:nh @atom:*
@dihedral:X-ne-nh-X @atom:* @atom:ne @atom:nh @atom:*
@dihedral:X-nf-nh-X @atom:* @atom:nf @atom:nh @atom:*
@dihedral:X-n2-no-X @atom:* @atom:n2 @atom:no @atom:*
@dihedral:X-ne-no-X @atom:* @atom:ne @atom:no @atom:*
@dihedral:X-nf-no-X @atom:* @atom:nf @atom:no @atom:*
@dihedral:X-n2-oh-X @atom:* @atom:n2 @atom:oh @atom:*
@dihedral:X-ne-oh-X @atom:* @atom:ne @atom:oh @atom:*
@dihedral:X-nf-oh-X @atom:* @atom:nf @atom:oh @atom:*
@dihedral:X-n2-os-X @atom:* @atom:n2 @atom:os @atom:*
@dihedral:X-ne-os-X @atom:* @atom:ne @atom:os @atom:*
@dihedral:X-nf-os-X @atom:* @atom:nf @atom:os @atom:*
@dihedral:X-nc-os-X @atom:* @atom:nc @atom:os @atom:*
@dihedral:X-nc-ss-X @atom:* @atom:nc @atom:ss @atom:*
@dihedral:X-n2-p2-X @atom:* @atom:n2 @atom:p2 @atom:*
@dihedral:X-n2-pe-X @atom:* @atom:n2 @atom:pe @atom:*
@dihedral:X-n2-pf-X @atom:* @atom:n2 @atom:pf @atom:*
@dihedral:X-ne-pf-X @atom:* @atom:ne @atom:pf @atom:*
@dihedral:X-n2-pc-X @atom:* @atom:n2 @atom:pc @atom:*
@dihedral:X-n2-pd-X @atom:* @atom:n2 @atom:pd @atom:*
@dihedral:X-nc-p2-X @atom:* @atom:nc @atom:p2 @atom:*
@dihedral:X-nd-p2-X @atom:* @atom:nd @atom:p2 @atom:*
@dihedral:X-nc-pc-X @atom:* @atom:nc @atom:pc @atom:*
@dihedral:X-nd-pd-X @atom:* @atom:nd @atom:pd @atom:*
@dihedral:X-nd-pc-X @atom:* @atom:nd @atom:pc @atom:*
@dihedral:X-nc-pd-X @atom:* @atom:nc @atom:pd @atom:*
@dihedral:X-ne-pe-X @atom:* @atom:ne @atom:pe @atom:*
@dihedral:X-nf-pf-X @atom:* @atom:nf @atom:pf @atom:*
@dihedral:X-n2-p3-X @atom:* @atom:n2 @atom:p3 @atom:*
@dihedral:X-n2-p4-X @atom:* @atom:n2 @atom:p4 @atom:*
@dihedral:X-ne-p4-X @atom:* @atom:ne @atom:p4 @atom:*
@dihedral:X-nf-p4-X @atom:* @atom:nf @atom:p4 @atom:*
@dihedral:X-n2-p5-X @atom:* @atom:n2 @atom:p5 @atom:*
@dihedral:X-ne-p5-X @atom:* @atom:ne @atom:p5 @atom:*
@dihedral:X-nf-p5-X @atom:* @atom:nf @atom:p5 @atom:*
@dihedral:X-ne-px-X @atom:* @atom:ne @atom:px @atom:*
@dihedral:X-nf-px-X @atom:* @atom:nf @atom:px @atom:*
@dihedral:X-n2-sh-X @atom:* @atom:n2 @atom:sh @atom:*
@dihedral:X-ne-sh-X @atom:* @atom:ne @atom:sh @atom:*
@dihedral:X-nf-sh-X @atom:* @atom:nf @atom:sh @atom:*
@dihedral:X-n2-ss-X @atom:* @atom:n2 @atom:ss @atom:*
@dihedral:X-n2-ss-X @atom:* @atom:n2 @atom:ss @atom:*
@dihedral:X-ne-ss-X @atom:* @atom:ne @atom:ss @atom:*
@dihedral:X-ne-ss-X @atom:* @atom:ne @atom:ss @atom:*
@dihedral:X-nf-ss-X @atom:* @atom:nf @atom:ss @atom:*
@dihedral:X-nf-ss-X @atom:* @atom:nf @atom:ss @atom:*
@dihedral:X-n2-s4-X @atom:* @atom:n2 @atom:s4 @atom:*
@dihedral:X-ne-sx-X @atom:* @atom:ne @atom:sx @atom:*
@dihedral:X-nf-sx-X @atom:* @atom:nf @atom:sx @atom:*
@dihedral:X-n2-s6-X @atom:* @atom:n2 @atom:s6 @atom:*
@dihedral:X-ne-sy-X @atom:* @atom:ne @atom:sy @atom:*
@dihedral:X-ne-sy-X @atom:* @atom:ne @atom:sy @atom:*
@dihedral:X-nf-sy-X @atom:* @atom:nf @atom:sy @atom:*
@dihedral:X-nf-sy-X @atom:* @atom:nf @atom:sy @atom:*
@dihedral:X-n3-n3-X @atom:* @atom:n3 @atom:n3 @atom:*
@dihedral:X-n3-n4-X @atom:* @atom:n3 @atom:n4 @atom:*
@dihedral:X-n3-na-X @atom:* @atom:n3 @atom:na @atom:*
@dihedral:X-n3-nh-X @atom:* @atom:n3 @atom:nh @atom:*
@dihedral:X-n3-no-X @atom:* @atom:n3 @atom:no @atom:*
@dihedral:X-n3-oh-X @atom:* @atom:n3 @atom:oh @atom:*
@dihedral:X-n3-os-X @atom:* @atom:n3 @atom:os @atom:*
@dihedral:X-n3-p2-X @atom:* @atom:n3 @atom:p2 @atom:*
@dihedral:X-n3-pe-X @atom:* @atom:n3 @atom:pe @atom:*
@dihedral:X-n3-pf-X @atom:* @atom:n3 @atom:pf @atom:*
@dihedral:X-n3-p3-X @atom:* @atom:n3 @atom:p3 @atom:*
@dihedral:X-n3-p4-X @atom:* @atom:n3 @atom:p4 @atom:*
@dihedral:X-n3-px-X @atom:* @atom:n3 @atom:px @atom:*
@dihedral:X-n3-p5-X @atom:* @atom:n3 @atom:p5 @atom:*
@dihedral:X-n3-py-X @atom:* @atom:n3 @atom:py @atom:*
@dihedral:X-n3-sh-X @atom:* @atom:n3 @atom:sh @atom:*
@dihedral:X-n3-ss-X @atom:* @atom:n3 @atom:ss @atom:*
@dihedral:X-n3-s4-X @atom:* @atom:n3 @atom:s4 @atom:*
@dihedral:X-n3-sx-X @atom:* @atom:n3 @atom:sx @atom:*
@dihedral:X-n3-s6-X @atom:* @atom:n3 @atom:s6 @atom:*
@dihedral:X-n3-sy-X @atom:* @atom:n3 @atom:sy @atom:*
@dihedral:X-n4-n4-X @atom:* @atom:n4 @atom:n4 @atom:*
@dihedral:X-n4-na-X @atom:* @atom:n4 @atom:na @atom:*
@dihedral:X-n4-nh-X @atom:* @atom:n4 @atom:nh @atom:*
@dihedral:X-n4-no-X @atom:* @atom:n4 @atom:no @atom:*
@dihedral:X-n4-oh-X @atom:* @atom:n4 @atom:oh @atom:*
@dihedral:X-n4-os-X @atom:* @atom:n4 @atom:os @atom:*
@dihedral:X-n4-p2-X @atom:* @atom:n4 @atom:p2 @atom:*
@dihedral:X-n4-pe-X @atom:* @atom:n4 @atom:pe @atom:*
@dihedral:X-n4-pf-X @atom:* @atom:n4 @atom:pf @atom:*
@dihedral:X-n4-p3-X @atom:* @atom:n4 @atom:p3 @atom:*
@dihedral:X-n4-p4-X @atom:* @atom:n4 @atom:p4 @atom:*
@dihedral:X-n4-px-X @atom:* @atom:n4 @atom:px @atom:*
@dihedral:X-n4-p5-X @atom:* @atom:n4 @atom:p5 @atom:*
@dihedral:X-n4-py-X @atom:* @atom:n4 @atom:py @atom:*
@dihedral:X-n4-sh-X @atom:* @atom:n4 @atom:sh @atom:*
@dihedral:X-n4-ss-X @atom:* @atom:n4 @atom:ss @atom:*
@dihedral:X-n4-s4-X @atom:* @atom:n4 @atom:s4 @atom:*
@dihedral:X-n4-sx-X @atom:* @atom:n4 @atom:sx @atom:*
@dihedral:X-n4-s6-X @atom:* @atom:n4 @atom:s6 @atom:*
@dihedral:X-n4-sy-X @atom:* @atom:n4 @atom:sy @atom:*
@dihedral:X-na-na-X @atom:* @atom:na @atom:na @atom:*
@dihedral:X-na-nh-X @atom:* @atom:na @atom:nh @atom:*
@dihedral:X-na-no-X @atom:* @atom:na @atom:no @atom:*
@dihedral:X-na-oh-X @atom:* @atom:na @atom:oh @atom:*
@dihedral:X-na-os-X @atom:* @atom:na @atom:os @atom:*
@dihedral:X-na-p2-X @atom:* @atom:na @atom:p2 @atom:*
@dihedral:X-na-pe-X @atom:* @atom:na @atom:pe @atom:*
@dihedral:X-na-pf-X @atom:* @atom:na @atom:pf @atom:*
@dihedral:X-na-p3-X @atom:* @atom:na @atom:p3 @atom:*
@dihedral:X-na-p4-X @atom:* @atom:na @atom:p4 @atom:*
@dihedral:X-na-px-X @atom:* @atom:na @atom:px @atom:*
@dihedral:X-na-p5-X @atom:* @atom:na @atom:p5 @atom:*
@dihedral:X-na-py-X @atom:* @atom:na @atom:py @atom:*
@dihedral:X-na-sh-X @atom:* @atom:na @atom:sh @atom:*
@dihedral:X-na-ss-X @atom:* @atom:na @atom:ss @atom:*
@dihedral:X-na-s4-X @atom:* @atom:na @atom:s4 @atom:*
@dihedral:X-na-sx-X @atom:* @atom:na @atom:sx @atom:*
@dihedral:X-na-s6-X @atom:* @atom:na @atom:s6 @atom:*
@dihedral:X-na-sy-X @atom:* @atom:na @atom:sy @atom:*
@dihedral:X-nh-nh-X @atom:* @atom:nh @atom:nh @atom:*
@dihedral:X-nh-no-X @atom:* @atom:nh @atom:no @atom:*
@dihedral:X-nh-oh-X @atom:* @atom:nh @atom:oh @atom:*
@dihedral:X-nh-os-X @atom:* @atom:nh @atom:os @atom:*
@dihedral:X-nh-p2-X @atom:* @atom:nh @atom:p2 @atom:*
@dihedral:X-nh-pe-X @atom:* @atom:nh @atom:pe @atom:*
@dihedral:X-nh-pf-X @atom:* @atom:nh @atom:pf @atom:*
@dihedral:X-nh-p3-X @atom:* @atom:nh @atom:p3 @atom:*
@dihedral:X-nh-p4-X @atom:* @atom:nh @atom:p4 @atom:*
@dihedral:X-nh-px-X @atom:* @atom:nh @atom:px @atom:*
@dihedral:X-nh-p5-X @atom:* @atom:nh @atom:p5 @atom:*
@dihedral:X-nh-py-X @atom:* @atom:nh @atom:py @atom:*
@dihedral:X-nh-sh-X @atom:* @atom:nh @atom:sh @atom:*
@dihedral:X-nh-ss-X @atom:* @atom:nh @atom:ss @atom:*
@dihedral:X-nh-s4-X @atom:* @atom:nh @atom:s4 @atom:*
@dihedral:X-nh-s4-X @atom:* @atom:nh @atom:s4 @atom:*
@dihedral:X-nh-sx-X @atom:* @atom:nh @atom:sx @atom:*
@dihedral:X-nh-sx-X @atom:* @atom:nh @atom:sx @atom:*
@dihedral:X-nh-s6-X @atom:* @atom:nh @atom:s6 @atom:*
@dihedral:X-nh-sy-X @atom:* @atom:nh @atom:sy @atom:*
@dihedral:X-no-no-X @atom:* @atom:no @atom:no @atom:*
@dihedral:X-no-no-X @atom:* @atom:no @atom:no @atom:*
@dihedral:X-no-oh-X @atom:* @atom:no @atom:oh @atom:*
@dihedral:X-no-os-X @atom:* @atom:no @atom:os @atom:*
@dihedral:X-no-p2-X @atom:* @atom:no @atom:p2 @atom:*
@dihedral:X-no-pe-X @atom:* @atom:no @atom:pe @atom:*
@dihedral:X-no-pf-X @atom:* @atom:no @atom:pf @atom:*
@dihedral:X-no-p3-X @atom:* @atom:no @atom:p3 @atom:*
@dihedral:X-no-p4-X @atom:* @atom:no @atom:p4 @atom:*
@dihedral:X-no-px-X @atom:* @atom:no @atom:px @atom:*
@dihedral:X-no-p5-X @atom:* @atom:no @atom:p5 @atom:*
@dihedral:X-no-p5-X @atom:* @atom:no @atom:p5 @atom:*
@dihedral:X-no-py-X @atom:* @atom:no @atom:py @atom:*
@dihedral:X-no-py-X @atom:* @atom:no @atom:py @atom:*
@dihedral:X-no-sh-X @atom:* @atom:no @atom:sh @atom:*
@dihedral:X-no-ss-X @atom:* @atom:no @atom:ss @atom:*
@dihedral:X-no-s4-X @atom:* @atom:no @atom:s4 @atom:*
@dihedral:X-no-sx-X @atom:* @atom:no @atom:sx @atom:*
@dihedral:X-no-s6-X @atom:* @atom:no @atom:s6 @atom:*
@dihedral:X-no-sy-X @atom:* @atom:no @atom:sy @atom:*
@dihedral:X-oh-oh-X @atom:* @atom:oh @atom:oh @atom:*
@dihedral:X-oh-os-X @atom:* @atom:oh @atom:os @atom:*
@dihedral:X-oh-p2-X @atom:* @atom:oh @atom:p2 @atom:*
@dihedral:X-oh-pe-X @atom:* @atom:oh @atom:pe @atom:*
@dihedral:X-oh-pf-X @atom:* @atom:oh @atom:pf @atom:*
@dihedral:X-oh-p3-X @atom:* @atom:oh @atom:p3 @atom:*
@dihedral:X-oh-p4-X @atom:* @atom:oh @atom:p4 @atom:*
@dihedral:X-oh-px-X @atom:* @atom:oh @atom:px @atom:*
@dihedral:X-oh-p5-X @atom:* @atom:oh @atom:p5 @atom:*
@dihedral:X-oh-py-X @atom:* @atom:oh @atom:py @atom:*
@dihedral:X-oh-sh-X @atom:* @atom:oh @atom:sh @atom:*
@dihedral:X-oh-ss-X @atom:* @atom:oh @atom:ss @atom:*
@dihedral:X-oh-s4-X @atom:* @atom:oh @atom:s4 @atom:*
@dihedral:X-oh-sx-X @atom:* @atom:oh @atom:sx @atom:*
@dihedral:X-oh-s6-X @atom:* @atom:oh @atom:s6 @atom:*
@dihedral:X-oh-sy-X @atom:* @atom:oh @atom:sy @atom:*
@dihedral:X-os-os-X @atom:* @atom:os @atom:os @atom:*
@dihedral:X-os-ss-X @atom:* @atom:os @atom:ss @atom:*
@dihedral:X-os-sh-X @atom:* @atom:os @atom:sh @atom:*
@dihedral:X-os-s4-X @atom:* @atom:os @atom:s4 @atom:*
@dihedral:X-os-sx-X @atom:* @atom:os @atom:sx @atom:*
@dihedral:X-os-s6-X @atom:* @atom:os @atom:s6 @atom:*
@dihedral:X-os-sy-X @atom:* @atom:os @atom:sy @atom:*
@dihedral:X-os-p2-X @atom:* @atom:os @atom:p2 @atom:*
@dihedral:X-os-p2-X @atom:* @atom:os @atom:p2 @atom:*
@dihedral:X-os-pe-X @atom:* @atom:os @atom:pe @atom:*
@dihedral:X-os-pe-X @atom:* @atom:os @atom:pe @atom:*
@dihedral:X-os-pf-X @atom:* @atom:os @atom:pf @atom:*
@dihedral:X-os-pf-X @atom:* @atom:os @atom:pf @atom:*
@dihedral:X-os-p3-X @atom:* @atom:os @atom:p3 @atom:*
@dihedral:X-os-p4-X @atom:* @atom:os @atom:p4 @atom:*
@dihedral:X-os-px-X @atom:* @atom:os @atom:px @atom:*
@dihedral:X-os-p5-X @atom:* @atom:os @atom:p5 @atom:*
@dihedral:X-os-py-X @atom:* @atom:os @atom:py @atom:*
@dihedral:X-p2-p2-X @atom:* @atom:p2 @atom:p2 @atom:*
@dihedral:X-p2-pe-X @atom:* @atom:p2 @atom:pe @atom:*
@dihedral:X-p2-pf-X @atom:* @atom:p2 @atom:pf @atom:*
@dihedral:X-p2-pc-X @atom:* @atom:p2 @atom:pc @atom:*
@dihedral:X-p2-pd-X @atom:* @atom:p2 @atom:pd @atom:*
@dihedral:X-pe-pe-X @atom:* @atom:pe @atom:pe @atom:*
@dihedral:X-pf-pf-X @atom:* @atom:pf @atom:pf @atom:*
@dihedral:X-pc-pc-X @atom:* @atom:pc @atom:pc @atom:*
@dihedral:X-pd-pd-X @atom:* @atom:pd @atom:pd @atom:*
@dihedral:X-pc-pd-X @atom:* @atom:pc @atom:pd @atom:*
@dihedral:X-p2-p3-X @atom:* @atom:p2 @atom:p3 @atom:*
@dihedral:X-pe-p3-X @atom:* @atom:pe @atom:p3 @atom:*
@dihedral:X-pf-p3-X @atom:* @atom:pf @atom:p3 @atom:*
@dihedral:X-p2-p4-X @atom:* @atom:p2 @atom:p4 @atom:*
@dihedral:X-pe-px-X @atom:* @atom:pe @atom:px @atom:*
@dihedral:X-pf-px-X @atom:* @atom:pf @atom:px @atom:*
@dihedral:X-p2-p5-X @atom:* @atom:p2 @atom:p5 @atom:*
@dihedral:X-pe-py-X @atom:* @atom:pe @atom:py @atom:*
@dihedral:X-pf-py-X @atom:* @atom:pf @atom:py @atom:*
@dihedral:X-p2-sh-X @atom:* @atom:p2 @atom:sh @atom:*
@dihedral:X-pe-sh-X @atom:* @atom:pe @atom:sh @atom:*
@dihedral:X-pf-sh-X @atom:* @atom:pf @atom:sh @atom:*
@dihedral:X-p2-ss-X @atom:* @atom:p2 @atom:ss @atom:*
@dihedral:X-pe-ss-X @atom:* @atom:pe @atom:ss @atom:*
@dihedral:X-pf-ss-X @atom:* @atom:pf @atom:ss @atom:*
@dihedral:X-p2-s4-X @atom:* @atom:p2 @atom:s4 @atom:*
@dihedral:X-pe-sx-X @atom:* @atom:pe @atom:sx @atom:*
@dihedral:X-pf-sx-X @atom:* @atom:pf @atom:sx @atom:*
@dihedral:X-p2-s6-X @atom:* @atom:p2 @atom:s6 @atom:*
@dihedral:X-pe-sy-X @atom:* @atom:pe @atom:sy @atom:*
@dihedral:X-pf-sy-X @atom:* @atom:pf @atom:sy @atom:*
@dihedral:X-p3-p3-X @atom:* @atom:p3 @atom:p3 @atom:*
@dihedral:X-p3-p4-X @atom:* @atom:p3 @atom:p4 @atom:*
@dihedral:X-p3-px-X @atom:* @atom:p3 @atom:px @atom:*
@dihedral:X-p3-p5-X @atom:* @atom:p3 @atom:p5 @atom:*
@dihedral:X-p3-py-X @atom:* @atom:p3 @atom:py @atom:*
@dihedral:X-p3-sh-X @atom:* @atom:p3 @atom:sh @atom:*
@dihedral:X-p3-ss-X @atom:* @atom:p3 @atom:ss @atom:*
@dihedral:X-p3-s4-X @atom:* @atom:p3 @atom:s4 @atom:*
@dihedral:X-p3-sx-X @atom:* @atom:p3 @atom:sx @atom:*
@dihedral:X-p3-s6-X @atom:* @atom:p3 @atom:s6 @atom:*
@dihedral:X-p3-sy-X @atom:* @atom:p3 @atom:sy @atom:*
@dihedral:X-p4-p4-X @atom:* @atom:p4 @atom:p4 @atom:*
@dihedral:X-px-px-X @atom:* @atom:px @atom:px @atom:*
@dihedral:X-p4-p5-X @atom:* @atom:p4 @atom:p5 @atom:*
@dihedral:X-px-py-X @atom:* @atom:px @atom:py @atom:*
@dihedral:X-p4-s4-X @atom:* @atom:p4 @atom:s4 @atom:*
@dihedral:X-px-sx-X @atom:* @atom:px @atom:sx @atom:*
@dihedral:X-p4-s6-X @atom:* @atom:p4 @atom:s6 @atom:*
@dihedral:X-px-sy-X @atom:* @atom:px @atom:sy @atom:*
@dihedral:X-p4-sh-X @atom:* @atom:p4 @atom:sh @atom:*
@dihedral:X-px-sh-X @atom:* @atom:px @atom:sh @atom:*
@dihedral:X-p4-ss-X @atom:* @atom:p4 @atom:ss @atom:*
@dihedral:X-px-ss-X @atom:* @atom:px @atom:ss @atom:*
@dihedral:X-p5-p5-X @atom:* @atom:p5 @atom:p5 @atom:*
@dihedral:X-py-py-X @atom:* @atom:py @atom:py @atom:*
@dihedral:X-p5-sh-X @atom:* @atom:p5 @atom:sh @atom:*
@dihedral:X-py-sh-X @atom:* @atom:py @atom:sh @atom:*
@dihedral:X-p5-ss-X @atom:* @atom:p5 @atom:ss @atom:*
@dihedral:X-py-ss-X @atom:* @atom:py @atom:ss @atom:*
@dihedral:X-p5-s4-X @atom:* @atom:p5 @atom:s4 @atom:*
@dihedral:X-py-sx-X @atom:* @atom:py @atom:sx @atom:*
@dihedral:X-p5-s6-X @atom:* @atom:p5 @atom:s6 @atom:*
@dihedral:X-py-sy-X @atom:* @atom:py @atom:sy @atom:*
@dihedral:X-sh-sh-X @atom:* @atom:sh @atom:sh @atom:*
@dihedral:X-sh-ss-X @atom:* @atom:sh @atom:ss @atom:*
@dihedral:X-sh-s4-X @atom:* @atom:sh @atom:s4 @atom:*
@dihedral:X-sh-sx-X @atom:* @atom:sh @atom:sx @atom:*
@dihedral:X-sh-s6-X @atom:* @atom:sh @atom:s6 @atom:*
@dihedral:X-sh-sy-X @atom:* @atom:sh @atom:sy @atom:*
@dihedral:X-ss-ss-X @atom:* @atom:ss @atom:ss @atom:*
@dihedral:X-ss-s4-X @atom:* @atom:ss @atom:s4 @atom:*
@dihedral:X-ss-sx-X @atom:* @atom:ss @atom:sx @atom:*
@dihedral:X-ss-s6-X @atom:* @atom:ss @atom:s6 @atom:*
@dihedral:X-ss-sy-X @atom:* @atom:ss @atom:sy @atom:*
@dihedral:X-s4-s4-X @atom:* @atom:s4 @atom:s4 @atom:*
@dihedral:X-sx-sx-X @atom:* @atom:sx @atom:sx @atom:*
@dihedral:X-s4-s6-X @atom:* @atom:s4 @atom:s6 @atom:*
@dihedral:X-sx-sy-X @atom:* @atom:sx @atom:sy @atom:*
@dihedral:X-s6-s6-X @atom:* @atom:s6 @atom:s6 @atom:*
@dihedral:X-sy-sy-X @atom:* @atom:sy @atom:sy @atom:*
+ @dihedral:X-cf-pe-X @atom:* @atom:cf @atom:pe @atom:*
+ @dihedral:X-nd-os-X @atom:* @atom:nd @atom:os @atom:*
+ @dihedral:X-nd-ss-X @atom:* @atom:nd @atom:ss @atom:*
+ @dihedral:X-nf-pe-X @atom:* @atom:nf @atom:pe @atom:*
@dihedral:c3-c-sh-hs @atom:c3 @atom:c @atom:sh @atom:hs
@dihedral:c3-c-sh-hs @atom:c3 @atom:c @atom:sh @atom:hs
@dihedral:c2-c2-ss-c3 @atom:c2 @atom:c2 @atom:ss @atom:c3
@dihedral:c2-c2-ss-c3 @atom:c2 @atom:c2 @atom:ss @atom:c3
@dihedral:c2-c2-n-c @atom:c2 @atom:c2 @atom:n @atom:c
@dihedral:c2-c2-n-c @atom:c2 @atom:c2 @atom:n @atom:c
@dihedral:c-n-p2-c2 @atom:c @atom:n @atom:p2 @atom:c2
@dihedral:c-n-p2-c2 @atom:c @atom:n @atom:p2 @atom:c2
@dihedral:n-c3-c-n @atom:n @atom:c3 @atom:c @atom:n
@dihedral:n-c3-c-n @atom:n @atom:c3 @atom:c @atom:n
@dihedral:c-n-c3-c @atom:c @atom:n @atom:c3 @atom:c
@dihedral:c-n-c3-c @atom:c @atom:n @atom:c3 @atom:c
@dihedral:c3-c3-n-c @atom:c3 @atom:c3 @atom:n @atom:c
@dihedral:c3-c3-n-c @atom:c3 @atom:c3 @atom:n @atom:c
@dihedral:c3-c3-n-c @atom:c3 @atom:c3 @atom:n @atom:c
@dihedral:c3-c3-c-n @atom:c3 @atom:c3 @atom:c @atom:n
@dihedral:c3-c3-c-n @atom:c3 @atom:c3 @atom:c @atom:n
@dihedral:c2-ne-p5-o @atom:c2 @atom:ne @atom:p5 @atom:o
@dihedral:c2-ne-p5-o @atom:c2 @atom:ne @atom:p5 @atom:o
@dihedral:c2-nf-p5-o @atom:c2 @atom:nf @atom:p5 @atom:o
@dihedral:c2-nf-p5-o @atom:c2 @atom:nf @atom:p5 @atom:o
@dihedral:ce-ne-p5-o @atom:ce @atom:ne @atom:p5 @atom:o
@dihedral:ce-ne-p5-o @atom:ce @atom:ne @atom:p5 @atom:o
@dihedral:ce-nf-p5-o @atom:ce @atom:nf @atom:p5 @atom:o
@dihedral:ce-nf-p5-o @atom:ce @atom:nf @atom:p5 @atom:o
@dihedral:cf-ne-p5-o @atom:cf @atom:ne @atom:p5 @atom:o
@dihedral:cf-ne-p5-o @atom:cf @atom:ne @atom:p5 @atom:o
@dihedral:cf-nf-p5-o @atom:cf @atom:nf @atom:p5 @atom:o
@dihedral:cf-nf-p5-o @atom:cf @atom:nf @atom:p5 @atom:o
@dihedral:hn-n-c-o @atom:hn @atom:n @atom:c @atom:o
@dihedral:hn-n-c-o @atom:hn @atom:n @atom:c @atom:o
@dihedral:c3-ss-ss-c3 @atom:c3 @atom:ss @atom:ss @atom:c3
@dihedral:c3-ss-ss-c3 @atom:c3 @atom:ss @atom:ss @atom:c3
@dihedral:c3-n3-nh-ca @atom:c3 @atom:n3 @atom:nh @atom:ca
@dihedral:c3-n3-nh-ca @atom:c3 @atom:n3 @atom:nh @atom:ca
@dihedral:c3-n3-p5-o @atom:c3 @atom:n3 @atom:p5 @atom:o
@dihedral:c3-n3-p5-o @atom:c3 @atom:n3 @atom:p5 @atom:o
@dihedral:ca-nh-oh-ho @atom:ca @atom:nh @atom:oh @atom:ho
@dihedral:ca-nh-oh-ho @atom:ca @atom:nh @atom:oh @atom:ho
@dihedral:oh-p5-os-c3 @atom:oh @atom:p5 @atom:os @atom:c3
@dihedral:oh-p5-os-c3 @atom:oh @atom:p5 @atom:os @atom:c3
@dihedral:os-p5-os-c3 @atom:os @atom:p5 @atom:os @atom:c3
@dihedral:os-p5-os-c3 @atom:os @atom:p5 @atom:os @atom:c3
@dihedral:h1-c3-c-o @atom:h1 @atom:c3 @atom:c @atom:o
@dihedral:h1-c3-c-o @atom:h1 @atom:c3 @atom:c @atom:o
@dihedral:hc-c3-c-o @atom:hc @atom:c3 @atom:c @atom:o
@dihedral:hc-c3-c-o @atom:hc @atom:c3 @atom:c @atom:o
@dihedral:hc-c3-c3-hc @atom:hc @atom:c3 @atom:c3 @atom:hc
@dihedral:hc-c3-c3-c3 @atom:hc @atom:c3 @atom:c3 @atom:c3
@dihedral:hc-c3-c2-c2 @atom:hc @atom:c3 @atom:c2 @atom:c2
@dihedral:hc-c3-c2-c2 @atom:hc @atom:c3 @atom:c2 @atom:c2
@dihedral:ho-oh-c3-c3 @atom:ho @atom:oh @atom:c3 @atom:c3
@dihedral:ho-oh-c3-c3 @atom:ho @atom:oh @atom:c3 @atom:c3
@dihedral:ho-oh-c-o @atom:ho @atom:oh @atom:c @atom:o
@dihedral:ho-oh-c-o @atom:ho @atom:oh @atom:c @atom:o
@dihedral:c2-c2-c-o @atom:c2 @atom:c2 @atom:c @atom:o
@dihedral:c2-c2-c-o @atom:c2 @atom:c2 @atom:c @atom:o
@dihedral:c3-c2-c2-c3 @atom:c3 @atom:c2 @atom:c2 @atom:c3
@dihedral:c3-c2-c2-c3 @atom:c3 @atom:c2 @atom:c2 @atom:c3
@dihedral:c3-c3-c3-c3 @atom:c3 @atom:c3 @atom:c3 @atom:c3
@dihedral:c3-c3-c3-c3 @atom:c3 @atom:c3 @atom:c3 @atom:c3
@dihedral:c3-c3-c3-c3 @atom:c3 @atom:c3 @atom:c3 @atom:c3
@dihedral:c3-c3-n3-c3 @atom:c3 @atom:c3 @atom:n3 @atom:c3
@dihedral:c3-c3-n3-c3 @atom:c3 @atom:c3 @atom:n3 @atom:c3
@dihedral:c3-c3-os-c3 @atom:c3 @atom:c3 @atom:os @atom:c3
@dihedral:c3-c3-os-c3 @atom:c3 @atom:c3 @atom:os @atom:c3
@dihedral:c3-c3-os-c @atom:c3 @atom:c3 @atom:os @atom:c
@dihedral:c3-c3-os-c @atom:c3 @atom:c3 @atom:os @atom:c
@dihedral:c3-os-c3-os @atom:c3 @atom:os @atom:c3 @atom:os
@dihedral:c3-os-c3-os @atom:c3 @atom:os @atom:c3 @atom:os
@dihedral:c3-os-c3-os @atom:c3 @atom:os @atom:c3 @atom:os
@dihedral:c3-os-c3-na @atom:c3 @atom:os @atom:c3 @atom:na
@dihedral:c3-os-c3-na @atom:c3 @atom:os @atom:c3 @atom:na
@dihedral:o-c-os-c3 @atom:o @atom:c @atom:os @atom:c3
@dihedral:o-c-os-c3 @atom:o @atom:c @atom:os @atom:c3
@dihedral:os-c3-na-c2 @atom:os @atom:c3 @atom:na @atom:c2
@dihedral:os-c3-na-c2 @atom:os @atom:c3 @atom:na @atom:c2
@dihedral:os-c3-c3-os @atom:os @atom:c3 @atom:c3 @atom:os
@dihedral:os-c3-c3-os @atom:os @atom:c3 @atom:c3 @atom:os
@dihedral:os-c3-c3-oh @atom:os @atom:c3 @atom:c3 @atom:oh
@dihedral:os-c3-c3-oh @atom:os @atom:c3 @atom:c3 @atom:oh
@dihedral:oh-c3-c3-oh @atom:oh @atom:c3 @atom:c3 @atom:oh
@dihedral:oh-c3-c3-oh @atom:oh @atom:c3 @atom:c3 @atom:oh
@dihedral:f-c3-c3-f @atom:f @atom:c3 @atom:c3 @atom:f
@dihedral:f-c3-c3-f @atom:f @atom:c3 @atom:c3 @atom:f
@dihedral:cl-c3-c3-cl @atom:cl @atom:c3 @atom:c3 @atom:cl
@dihedral:cl-c3-c3-cl @atom:cl @atom:c3 @atom:c3 @atom:cl
@dihedral:br-c3-c3-br @atom:br @atom:c3 @atom:c3 @atom:br
@dihedral:br-c3-c3-br @atom:br @atom:c3 @atom:c3 @atom:br
@dihedral:h1-c3-c3-os @atom:h1 @atom:c3 @atom:c3 @atom:os
@dihedral:h1-c3-c3-os @atom:h1 @atom:c3 @atom:c3 @atom:os
@dihedral:h1-c3-c3-oh @atom:h1 @atom:c3 @atom:c3 @atom:oh
@dihedral:h1-c3-c3-oh @atom:h1 @atom:c3 @atom:c3 @atom:oh
@dihedral:h1-c3-c3-f @atom:h1 @atom:c3 @atom:c3 @atom:f
@dihedral:h1-c3-c3-f @atom:h1 @atom:c3 @atom:c3 @atom:f
@dihedral:h1-c3-c3-cl @atom:h1 @atom:c3 @atom:c3 @atom:cl
@dihedral:h1-c3-c3-cl @atom:h1 @atom:c3 @atom:c3 @atom:cl
@dihedral:h1-c3-c3-br @atom:h1 @atom:c3 @atom:c3 @atom:br
@dihedral:h1-c3-c3-br @atom:h1 @atom:c3 @atom:c3 @atom:br
@dihedral:hc-c3-c3-os @atom:hc @atom:c3 @atom:c3 @atom:os
@dihedral:hc-c3-c3-os @atom:hc @atom:c3 @atom:c3 @atom:os
@dihedral:hc-c3-c3-oh @atom:hc @atom:c3 @atom:c3 @atom:oh
@dihedral:hc-c3-c3-oh @atom:hc @atom:c3 @atom:c3 @atom:oh
@dihedral:hc-c3-c3-f @atom:hc @atom:c3 @atom:c3 @atom:f
@dihedral:hc-c3-c3-f @atom:hc @atom:c3 @atom:c3 @atom:f
@dihedral:hc-c3-c3-cl @atom:hc @atom:c3 @atom:c3 @atom:cl
@dihedral:hc-c3-c3-cl @atom:hc @atom:c3 @atom:c3 @atom:cl
@dihedral:hc-c3-c3-br @atom:hc @atom:c3 @atom:c3 @atom:br
@dihedral:hc-c3-c3-br @atom:hc @atom:c3 @atom:c3 @atom:br
} # (end of Dihedrals By Type)
write_once("In Settings") {
- improper_coeff @improper:X-o-c-o cvff 1.1 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:X-X-c-o cvff 10.5 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:X-X-ca-ha cvff 1.1 -1 2 # bsd.on C6H6 nmodes
- improper_coeff @improper:X-X-n-hn cvff 1.1 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:X-X-n2-hn cvff 1.1 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:X-X-na-hn cvff 1.1 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:X-c3-n-c3 cvff 1.1 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:X-n2-ca-n2 cvff 10.5 -1 2 # JCC,7,(1986),230
- improper_coeff @improper:c-c2-c2-c3 cvff 1.1 -1 2 # dac guess, 9/94
- improper_coeff @improper:c-ca-ca-c3 cvff 1.1 -1 2 # dac guess, 9/94
- improper_coeff @improper:c-c3-n-hn cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:c-c3-n-o cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:c2-c2-na-c3 cvff 1.1 -1 2 #
- improper_coeff @improper:c2-c-c2-c3 cvff 1.1 -1 2 #
- improper_coeff @improper:c2-c3-c2-hc cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:c2-c3-ca-hc cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:c2-hc-c-o cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:c3-o-c-oh cvff 1.1 -1 2 #
- improper_coeff @improper:c3-c2-c2-n2 cvff 1.1 -1 2 #
- improper_coeff @improper:c3-c2-c2-na cvff 1.1 -1 2 #
- improper_coeff @improper:c3-ca-ca-n2 cvff 1.1 -1 2 #
- improper_coeff @improper:c3-ca-ca-na cvff 1.1 -1 2 #
+ improper_coeff @improper:c-X-X-o cvff 10.5 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:c-X-o-o cvff 1.1 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:ca-X-X-ha cvff 1.1 -1 2 # bsd.on C6H6 nmodes
+ improper_coeff @improper:n-X-X-hn cvff 1.1 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:n2-X-X-hn cvff 1.1 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:na-X-X-hn cvff 1.1 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:n-X-c3-c3 cvff 1.1 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:ca-X-n2-n2 cvff 10.5 -1 2 # JCC,7,(1986),230
+ improper_coeff @improper:c2-c-c2-c3 cvff 1.1 -1 2 # dac guess, 9/94
+ improper_coeff @improper:ca-c-ca-c3 cvff 1.1 -1 2 # dac guess, 9/94
+ improper_coeff @improper:n-c-c3-hn cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:n-c-c3-o cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:na-c2-c2-c3 cvff 1.1 -1 2 #
+ improper_coeff @improper:c2-c2-c-c3 cvff 1.1 -1 2 #
+ improper_coeff @improper:c2-c2-c3-hc cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:ca-c2-c3-hc cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:c-c2-hc-o cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:c-c3-o-oh cvff 1.1 -1 2 #
+ improper_coeff @improper:c2-c3-c2-n2 cvff 1.1 -1 2 #
+ improper_coeff @improper:c2-c3-c2-na cvff 1.1 -1 2 #
+ improper_coeff @improper:ca-c3-ca-n2 cvff 1.1 -1 2 #
+ improper_coeff @improper:ca-c3-ca-na cvff 1.1 -1 2 #
improper_coeff @improper:ca-ca-ca-c2 cvff 1.1 -1 2 #
improper_coeff @improper:ca-ca-ca-c3 cvff 1.1 -1 2 #
improper_coeff @improper:ca-ca-ca-f cvff 1.1 -1 2 # Junmei et al.1999
improper_coeff @improper:ca-ca-ca-cl cvff 1.1 -1 2 # Junmei et al.1999
improper_coeff @improper:ca-ca-ca-br cvff 1.1 -1 2 # Junmei et al.1999
improper_coeff @improper:ca-ca-ca-i cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:ca-ca-c-oh cvff 1.1 -1 2 # (not used in tyr!)
- improper_coeff @improper:ca-ca-na-c3 cvff 1.1 -1 2 #
- improper_coeff @improper:ca-c-ca-c3 cvff 1.1 -1 2 #
- improper_coeff @improper:ca-hc-c-o cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:ca-n2-ca-n2 cvff 1.1 -1 2 # dac, 10/94
- improper_coeff @improper:hc-o-c-oh cvff 1.1 -1 2 # Junmei et al.1999
- improper_coeff @improper:hc-o-c-os cvff 1.1 -1 2 #
- improper_coeff @improper:n2-c2-ca-n2 cvff 1.1 -1 2 # dac guess, 9/94
- improper_coeff @improper:n2-ca-ca-n2 cvff 1.1 -1 2 # dac guess, 9/94
- improper_coeff @improper:na-n2-ca-n2 cvff 1.1 -1 2 # dac, 10/94
+ improper_coeff @improper:c-ca-ca-oh cvff 1.1 -1 2 # (not used in tyr!)
+ improper_coeff @improper:na-ca-ca-c3 cvff 1.1 -1 2 #
+ improper_coeff @improper:ca-ca-c-c3 cvff 1.1 -1 2 #
+ improper_coeff @improper:c-ca-hc-o cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:ca-ca-n2-n2 cvff 1.1 -1 2 # dac, 10/94
+ improper_coeff @improper:c-hc-o-oh cvff 1.1 -1 2 # Junmei et al.1999
+ improper_coeff @improper:c-hc-o-os cvff 1.1 -1 2 #
+ improper_coeff @improper:ca-n2-c2-n2 cvff 1.1 -1 2 # dac guess, 9/94
+ improper_coeff @improper:ca-n2-ca-n2 cvff 1.1 -1 2 # dac guess, 9/94
+ improper_coeff @improper:ca-na-n2-n2 cvff 1.1 -1 2 # dac, 10/94
} # (end of improper_coeffs)
write_once("Data Impropers By Type") {
- @improper:X-o-c-o @atom:* @atom:o @atom:c @atom:o
- @improper:X-X-c-o @atom:* @atom:* @atom:c @atom:o
- @improper:X-X-ca-ha @atom:* @atom:* @atom:ca @atom:ha
- @improper:X-X-n-hn @atom:* @atom:* @atom:n @atom:hn
- @improper:X-X-n2-hn @atom:* @atom:* @atom:n2 @atom:hn
- @improper:X-X-na-hn @atom:* @atom:* @atom:na @atom:hn
- @improper:X-c3-n-c3 @atom:* @atom:c3 @atom:n @atom:c3
- @improper:X-n2-ca-n2 @atom:* @atom:n2 @atom:ca @atom:n2
- @improper:c-c2-c2-c3 @atom:c @atom:c2 @atom:c2 @atom:c3
- @improper:c-ca-ca-c3 @atom:c @atom:ca @atom:ca @atom:c3
- @improper:c-c3-n-hn @atom:c @atom:c3 @atom:n @atom:hn
- @improper:c-c3-n-o @atom:c @atom:c3 @atom:n @atom:o
- @improper:c2-c2-na-c3 @atom:c2 @atom:c2 @atom:na @atom:c3
+ @improper:c-X-X-o @atom:c @atom:* @atom:* @atom:o
+ @improper:c-X-o-o @atom:c @atom:* @atom:o @atom:o
+ @improper:ca-X-X-ha @atom:ca @atom:* @atom:* @atom:ha
+ @improper:n-X-X-hn @atom:n @atom:* @atom:* @atom:hn
+ @improper:n2-X-X-hn @atom:n2 @atom:* @atom:* @atom:hn
+ @improper:na-X-X-hn @atom:na @atom:* @atom:* @atom:hn
+ @improper:n-X-c3-c3 @atom:n @atom:* @atom:c3 @atom:c3
+ @improper:ca-X-n2-n2 @atom:ca @atom:* @atom:n2 @atom:n2
@improper:c2-c-c2-c3 @atom:c2 @atom:c @atom:c2 @atom:c3
- @improper:c2-c3-c2-hc @atom:c2 @atom:c3 @atom:c2 @atom:hc
- @improper:c2-c3-ca-hc @atom:c2 @atom:c3 @atom:ca @atom:hc
- @improper:c2-hc-c-o @atom:c2 @atom:hc @atom:c @atom:o
- @improper:c3-o-c-oh @atom:c3 @atom:o @atom:c @atom:oh
- @improper:c3-c2-c2-n2 @atom:c3 @atom:c2 @atom:c2 @atom:n2
- @improper:c3-c2-c2-na @atom:c3 @atom:c2 @atom:c2 @atom:na
- @improper:c3-ca-ca-n2 @atom:c3 @atom:ca @atom:ca @atom:n2
- @improper:c3-ca-ca-na @atom:c3 @atom:ca @atom:ca @atom:na
+ @improper:ca-c-ca-c3 @atom:ca @atom:c @atom:ca @atom:c3
+ @improper:n-c-c3-hn @atom:n @atom:c @atom:c3 @atom:hn
+ @improper:n-c-c3-o @atom:n @atom:c @atom:c3 @atom:o
+ @improper:na-c2-c2-c3 @atom:na @atom:c2 @atom:c2 @atom:c3
+ @improper:c2-c2-c-c3 @atom:c2 @atom:c2 @atom:c @atom:c3
+ @improper:c2-c2-c3-hc @atom:c2 @atom:c2 @atom:c3 @atom:hc
+ @improper:ca-c2-c3-hc @atom:ca @atom:c2 @atom:c3 @atom:hc
+ @improper:c-c2-hc-o @atom:c @atom:c2 @atom:hc @atom:o
+ @improper:c-c3-o-oh @atom:c @atom:c3 @atom:o @atom:oh
+ @improper:c2-c3-c2-n2 @atom:c2 @atom:c3 @atom:c2 @atom:n2
+ @improper:c2-c3-c2-na @atom:c2 @atom:c3 @atom:c2 @atom:na
+ @improper:ca-c3-ca-n2 @atom:ca @atom:c3 @atom:ca @atom:n2
+ @improper:ca-c3-ca-na @atom:ca @atom:c3 @atom:ca @atom:na
@improper:ca-ca-ca-c2 @atom:ca @atom:ca @atom:ca @atom:c2
@improper:ca-ca-ca-c3 @atom:ca @atom:ca @atom:ca @atom:c3
@improper:ca-ca-ca-f @atom:ca @atom:ca @atom:ca @atom:f
@improper:ca-ca-ca-cl @atom:ca @atom:ca @atom:ca @atom:cl
@improper:ca-ca-ca-br @atom:ca @atom:ca @atom:ca @atom:br
@improper:ca-ca-ca-i @atom:ca @atom:ca @atom:ca @atom:i
- @improper:ca-ca-c-oh @atom:ca @atom:ca @atom:c @atom:oh
- @improper:ca-ca-na-c3 @atom:ca @atom:ca @atom:na @atom:c3
- @improper:ca-c-ca-c3 @atom:ca @atom:c @atom:ca @atom:c3
- @improper:ca-hc-c-o @atom:ca @atom:hc @atom:c @atom:o
+ @improper:c-ca-ca-oh @atom:c @atom:ca @atom:ca @atom:oh
+ @improper:na-ca-ca-c3 @atom:na @atom:ca @atom:ca @atom:c3
+ @improper:ca-ca-c-c3 @atom:ca @atom:ca @atom:c @atom:c3
+ @improper:c-ca-hc-o @atom:c @atom:ca @atom:hc @atom:o
+ @improper:ca-ca-n2-n2 @atom:ca @atom:ca @atom:n2 @atom:n2
+ @improper:c-hc-o-oh @atom:c @atom:hc @atom:o @atom:oh
+ @improper:c-hc-o-os @atom:c @atom:hc @atom:o @atom:os
+ @improper:ca-n2-c2-n2 @atom:ca @atom:n2 @atom:c2 @atom:n2
@improper:ca-n2-ca-n2 @atom:ca @atom:n2 @atom:ca @atom:n2
- @improper:hc-o-c-oh @atom:hc @atom:o @atom:c @atom:oh
- @improper:hc-o-c-os @atom:hc @atom:o @atom:c @atom:os
- @improper:n2-c2-ca-n2 @atom:n2 @atom:c2 @atom:ca @atom:n2
- @improper:n2-ca-ca-n2 @atom:n2 @atom:ca @atom:ca @atom:n2
- @improper:na-n2-ca-n2 @atom:na @atom:n2 @atom:ca @atom:n2
+ @improper:ca-na-n2-n2 @atom:ca @atom:na @atom:n2 @atom:n2
} # (end of Impropers By Type)
write_once("In Init") {
# Default styles and settings for AMBER based force-fields:
units real
atom_style full
bond_style hybrid harmonic
angle_style hybrid harmonic
dihedral_style hybrid fourier
improper_style hybrid cvff
- pair_style hybrid lj/charmm/coul/charmm 9.0 10.0
+ pair_style hybrid lj/charmm/coul/long 9.0 10.0 10.0
+ kspace_style pppm 0.0001
- # NOTE: Long-range coulombic forces were disabled intentionally. (See below)
- # If you want to use long-range electrostatics, uncomment these lines:
- #
- #pair_style hybrid lj/charmm/coul/long 9.0 10.0 10.0
- #kspace_style pppm 0.0001
- #
- # Instead I use hybrid lj/charmm/coul/charmm by default, because
- # LAMMPS complains if you attempt to use lj/charmm/coul/long on a
- # system if it does not contain any charged particles.
- # Currently, moltemplate does not assign atomic charge,
- # so this problem occurs frequently.
+ # NOTE: If you do not want to use long-range coulombic forces,
+ # comment out the two lines above and uncomment this line:
+ # pair_style hybrid lj/charmm/coul/charmm 9.0 10.0
pair_modify mix arithmetic
special_bonds amber
}
}
diff --git a/tools/moltemplate/common/oplsaa/README.TXT b/tools/moltemplate/common/oplsaa/README.TXT
index ae9879bd8..e90ca955b 100644
--- a/tools/moltemplate/common/oplsaa/README.TXT
+++ b/tools/moltemplate/common/oplsaa/README.TXT
@@ -1,82 +1,118 @@
-This directory contains instructions for creating a a moltemplate file
-("oplsaa.lt") containing force-field definitions relevant to ethylene example.
-Create "oplsaa.lt" this way:
+Unfortunately, moltemplate does not come with a file containing OPLSAA
+paramters which is ready to use. You must build it yourself.
+This directory has tools and instructions to explain how to do this.
-./oplsaa_moltemplate.py oplsaa_subset.txt
+-----------------------------
-Then move the newly created opls.lt file to the directory
-where you plan to run moltemplate.
+When you want to run a new simulation, you must download the full
+"oplsaa.prm" force-field file (from the TINKER web site) and manually
+delete all the atom types which you do not need. (See below.)
+Then you must use the "oplsaa_moltemplate.py" script to create
+"oplsaa.lt" file which moltemplate.sh needs. Then you must run moltemplate.sh.
+You must do this for each new simulation you plan to run which uses OPLSAA.
-There is a directory containing an example how to use this code located here:
-examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/
+---- Details: ----
+
+ Download the original "oplsaa.prm" file here:
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+ or here:
+http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
------------ GENERAL DOCUMENTATION -----------
-The "oplsaa_subset.txt" file should contain force-field information
-for a subset of the atoms in the oplsaa forcefield. This directory
-also contains the python code ("oplsaa_moltemplate.py") used to
-generate that file, as well as the full oplsaa force field file: "oplsaa.txt".
+and save this file as "oplsaa_subset.prm". Then you must EDIT THIS FILE
+so that it only contains atom types you plan to have in your simulation
+(see below). Finally, you must run the opls_moltemplate.py script this way:
-NOTE: THE ORIGINAL "oplsaa.txt" FILE IS LOCATED IN THE "common/opls/" DIRECTORY.
- (I deleted it here to save space.)
-python oplsaa_moltemplate.py <force field file name>
+python oplsaa_moltemplate.py oplsaa_subset.prm
-First, back-up the oplsaa.txt file and then delete all the unnecessary atoms
-from the file.
-It is ideal for you to run this on a subset of the OPLS forcefield relevant
-to your problem. (It is possible for you to generate a full OPLS force field
-moltemplate file but that demands a lot of time and generates a file that is
-on the order 100 gigabytes, which moltemplate can not read.)
-Save yourself time and energy, and make a copy of the oplsaa.txt. Then edit
-this file and delete or comment out any line beginning with the word "atom"
-which is not relevant to your problem. (However keep the rest of the file.)
+This will create a file named "oplsaa.lt"
+Look over the newly created "oplsaa.lt" file.
+Then, if necessary, move this file to wherever you plan to run moltemplate.
+
+There is a directory containing an example how to use this code located here:
+examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/README.TXT
+
+----- DETAILS: Editing the "oplsaa_subset.prm" file -------
+
+Again, before you run "oplsaa_moltemplate.py", you must edit the "oplsaa.prm"
+file (or "oplsaa_subset.prm file) and eliminate atom types which do not
+correspond to any of the atoms in your simulation. This means you must
+look for lines near the beginning of this file which begin with the word "atom"
+and refer to atom types which appear in the simulation you plan to run. All
+other lines (beginning with the word "atom") must be deleted or commented out.
+(Leave the rest of the file alone.)
For example:
-Let's assume this new file is called "oplsaa_subset.txt". If you were
-working with ethylene you would delete every atom except for atom 85(C=)
-and 86(H-C=) and use that as the input file for oplsaa_moltemplate.py
+If you were working with ethylene and benzene you would delete every line
+beginning with the word "atom", except for these four lines:
-atom 85 37 CM "Alkene H2-C=" 6 12.011 3
-atom 86 36 HC "Alkene H-C=" 1 1.008 1
+# for ethylene:
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+# for benzene:
+atom 90 48 CA "Aromatic C" 6 12.011 3
+atom 91 49 HA "Aromatic H-C" 1 1.008 1
-You do not need to make any other changes other than that. Then run:
+Then you are ready to run oplsaa_moltemplate.py on this file.
-python oplsaa_moltemplate.py oplsaa_subset.txt
+(You can try to delete more irrelevant information, but be careful.
+ It is not necessary, and it is easy to make mistakes.)
- ...this will create a file named "oplsaa.lt"
-Look over the newly created "oplsaa.lt" file. Then copy it to the "common" directory (where other force-field files like gaff.lt are located, ...or just copy it to wherever you plan to run moltemplate).
+----- Using the "oplsaa.lt" file -----
-Then you can create molecules that refer to it using:
+Once you have created the "oplsaa.lt" file, you can create files (like
+ethylene.lt) which define molecules that refer to these atom types.
+Here is an excerpt from "ethyelene.lt":
Ethylene inherits OPLSAA {
- # Definition of Ethylene molecule goes here.
+ write('Data Atoms') {
+ list of atoms goes here ...
+ }
+ write('Data Bond List') {
+ list of bonds goes here ...
+ }
}
-CHARGE:
+And then run moltemplate.
+
+
+----------- CHARGE: -----------
By default, the OPLSAA force-field assigns atom charge according to atom type.
When you run moltemplate, it will create a file named "system.in.charges",
containing commands like:
set type 2 charge -0.42
set type 3 charge 0.21
(This assumes your main moltemplate file is named "system.lt". If it was
named something else, eg "polymer.lt", then the file created by moltemplate
will be named "polymer.in.charges".)
Include these commands somewhere in your LAMMPS input script
(or use the LAMMPS "include" command to load the commands in system.in.charges)
Note that the atom numbers (eg "2", "3") in this file will not match the
OPLS atom numbers. (Check the output_ttree/ttree_assignments.txt file,
created by moltemplate, to see a table of "@atom" type numbers translated
from OPLSAA into LAMMPS.)
--Jason Lambert
-February, 2014
+----------- CREDIT -----------
+
+If you use these tools and you publish a paper using OPLSAA, please also cite
+the TINKER program. (Because the original "oplsaa.prm" file which we depend on
+is distributed with TINKER.) I think these are the relevant citations:
+
+1) Ponder, J. W., & Richards, F. M. (1987). "An efficient newton‐like method for molecular mechanics energy minimization of large molecules. Journal of Computational Chemistry", 8(7), 1016-1024.
+
+2) Ponder, J. W, (2004) "TINKER: Software tools for molecular design", http://dasher.wustl.edu/tinker/
+
+-------------------------------
+
+Jason Lambert and Andrew Jewett
+April, 2014
-Please email bugs to jewett.aij@gmail.com
+Please email bugs to jewett.aij@gmail.com and jlamber9@gmail.com
diff --git a/tools/moltemplate/common/oplsaa/alternate_oplsaa_file/README_alternate_atom_numbers.txt b/tools/moltemplate/common/oplsaa/alternate_oplsaa_file/README_alternate_atom_numbers.txt
new file mode 100644
index 000000000..a5ce2304a
--- /dev/null
+++ b/tools/moltemplate/common/oplsaa/alternate_oplsaa_file/README_alternate_atom_numbers.txt
@@ -0,0 +1,52 @@
+MOST USERS CAN IGNORE THIS DIRECTORY.
+
+This is the original version of oplsaa.txt released with
+moltemplate version 1.20. Later on I decided to direct
+users to the (hopefully current) version of the "oplsaa.prm"
+file distributed with TINKER's force-field-explorer program.
+
+http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+
+The original oplsaa.txt from moltemplate version 1.20 file is located here.
+Feel free to pick whichever one works well for your application, but
+if you publish a paper using these parameters please cite TINKER,
+since that appears to be the source of all of these files.
+I think these are the relevant citations:
+
+Ponder, J. W., & Richards, F. M. (1987). "An efficient newton‐like method for molecular mechanics energy minimization of large molecules. Journal of Computational Chemistry", 8(7), 1016-1024.
+
+Ponder, J. W, (2004) "TINKER: Software tools for molecular design", http://dasher.wustl.edu/tinker/
+
+
+Here is a discussion of a difference between these two files:
+
+>> On Fri, Apr 11, 2014 at 6:44 PM, Andrew Jewett <jewett.aij@gmail.com> wrote:
+>> Jason
+>> Lambert graciously wrote the "oplsaa_moltemplate.py" script and
+>> provided the "oplsaa.txt" file which it reads as an input file (after
+>> some minor manual editing on the part of the user). I did some
+>> googling, and I noticed that this file is very similar to the
+>> "oplsaa.prm" file located at this web site:
+>>
+>> http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
+>>
+>> I suspect it uses the same parameter conventions.
+>>
+>> However I just realized that the two files are not identical. (I am
+>> emailing Jason now to ask about the difference.)
+>>
+>> Where did you get the data for the "oplsaa.txt" file? More
+>> specifically, where do the atom numbers come from?
+
+>On Tue, Apr 15, 2014 at 6:06 PM, jason Lambert <jlamber9@gmail.com> wrote:
+>To be honest I do not know the original source of the OPLSA force
+> field file. The file was provided by a graduate student from a group
+> I worked with and I did not question it other than spot checking with
+> values that were published. I am surprised that the files are different.
+> Anyways, I am not aware of any logic to the observed switches in
+> the parameters. I did a diff -y on the two files and the difference is
+> primarily atom switching. The code works with either one though
+> so it is not a problem. We can provide a link to the prm file as well.
+> I know I added some dihedrals explicitly but the ones I added were
+> already encompassed by the dihedrals containing wild cards.
diff --git a/tools/moltemplate/common/oplsaa/oplsaa.txt b/tools/moltemplate/common/oplsaa/alternate_oplsaa_file/oplsaa.txt
similarity index 99%
rename from tools/moltemplate/common/oplsaa/oplsaa.txt
rename to tools/moltemplate/common/oplsaa/alternate_oplsaa_file/oplsaa.txt
index 01d1b6296..d39a40030 100644
--- a/tools/moltemplate/common/oplsaa/oplsaa.txt
+++ b/tools/moltemplate/common/oplsaa/alternate_oplsaa_file/oplsaa.txt
@@ -1,5968 +1,5971 @@
-# This text appears to be taken from the "oplsaa.prm" file here:
+# This text is similar but not identical to this file:
# http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
+# The difference appears to be the atom numbering and switching.
+# If you can help us figure out which numbering convention we should use
+# please email us at jewett.aij@gmail.com and jlamber9@gmail.com
##############################
## ##
## Force Field Definition ##
## ##
##############################
#forcefield OPLS-AA
#vdwindex TYPE
#vdwtype LENNARD-JONES
#radiusrule GEOMETRIC
#radiustype SIGMA
#radiussize DIAMETER
#epsilonrule GEOMETRIC
#torsionunit 0.5
#imptorunit 0.5
#vdw-14-scale 2.0
#chg-14-scale 2.0
#electric 332.06
#dielectric 1.0
#############################
## ##
## Literature References ##
## ##
#############################
#The parameters supplied with TINKER are from "OPLS All-Atom Parameters
#for Organic Molecules, Ions, Peptides & Nucleic Acids, July 2008" as
#provided by W. L. Jorgensen, Yale University during June 2009. These
#parameters are taken from those distributed with BOSS Version 4.8.
#Note that "atom type" numbers and not "atom class" numbers are used
#to index van der Waals parameters, see the "vdwindex" keyword above
#The atom types with (UA) in the description are "united atom" values,
#ie, OPLS-UA, where any nonpolar hydrogen atoms are combined onto their
#attached atoms. All other parameters are "all-atom", OPLS-AA, including
#explicit hydrogen atoms.
#############################
## ##
## Atom Type Definitions ##
## ##
#############################
atom 1 1 F "Fluoride -CH2-F (UA)" 9 18.998 1
atom 2 2 C2 "Fluoride -CH2-F (UA)" 6 14.027 2
atom 3 3 C "Acetic Acid -COOH (UA)" 6 12.011 3
atom 4 4 O "Acetic Acid >C=O (UA)" 8 15.999 1
atom 5 5 OH "Acetic Acid -OH (UA)" 8 15.999 2
atom 6 6 C3 "Acetic Acid CH3- (UA)" 6 15.035 1
atom 7 7 HO "Acetic Acid -OH (UA)" 1 1.008 1
atom 8 8 C4 "Methane CH4 (UA)" 6 16.043 0
atom 9 6 C3 "Ethane CH3- (UA)" 6 15.035 1
atom 10 6 C3 "N-Alkane CH3- (UA)" 6 15.035 1
atom 11 6 C3 "Isobutane CH3- (UA)" 6 15.035 1
atom 12 6 C3 "Neopentane CH3- (UA)" 6 15.035 1
atom 13 2 C2 "Alkanes -CH2- (UA)" 6 14.027 2
atom 14 9 C9 "1-Alkene CH2= (UA)" 6 14.027 1
atom 15 10 CH "Isobutane CH (UA)" 6 13.019 3
atom 16 11 C8 "2-Alkene -CH= (UA)" 6 13.019 2
atom 17 12 CD "Aromatic CH (UA)" 6 13.019 2
atom 18 13 CT "Neopentane C (UA)" 6 12.011 4
atom 19 14 C7 "Isobutene >C= (UA)" 6 12.011 3
atom 20 5 OH "Alcohol OH (UA)" 8 15.999 2
atom 21 7 HO "Alcohol OH (UA)" 1 1.008 1
atom 22 6 C3 "Methanol CH3- (UA)" 6 15.035 1
atom 23 2 C2 "Ethanol -CH2OH (UA)" 6 14.027 2
atom 24 15 SH "Hydrogen Sulfide H2S" 16 32.060 2
atom 25 15 SH "Alkyl Sulfide RSH (UA)" 16 32.060 2
atom 26 16 S "Thioether RSR (UA)" 16 32.060 2
atom 27 16 S "Disulfide RSSR (UA)" 16 32.060 2
atom 28 17 HS "Hydrogen Sulfide H2S" 1 1.008 1
atom 29 17 HS "Alkyl Sulfide RSH (UA)" 1 1.008 1
atom 30 6 C3 "Methyl Sulfide CH3 (UA)" 6 15.035 1
atom 31 2 C2 "Alkyl Sulfide CH2 (UA)" 6 14.027 2
atom 32 6 C3 "Thioether CH3 (UA)" 6 15.035 1
atom 33 2 C2 "Thioether CH2 (UA)" 6 14.027 2
atom 34 6 C3 "Disulfide CH3 (UA)" 6 15.035 1
atom 35 2 C2 "Disulfide CH2 (UA)" 6 14.027 2
atom 36 18 NZ "Acetonitrile -CN (UA)" 7 14.007 1
atom 37 19 CZ "Acetonitrile -CN (UA)" 6 12.011 2
atom 38 6 C3 "Acetonitrile CH3 (UA)" 6 15.035 1
atom 39 20 OW "TIP5P Water O" 8 15.999 4
atom 40 21 HW "TIP5P Water H" 1 1.008 1
atom 41 22 LP "TIP5P Water M" 99 0.000 1
atom 42 23 DM "Dummy Atom" 99 0.000 0
atom 43 24 He "Helium Atom" 2 4.003 0
atom 44 25 Ne "Neon Atom" 10 20.179 0
atom 45 26 Ar "Argon Atom" 18 39.948 0
atom 46 27 Kr "Krypton Atom" 36 83.800 0
atom 47 28 Xe "Xenon Atom" 54 131.300 0
atom 48 10 CH "Isopropanol >CHOH (UA)" 6 13.019 3
atom 49 13 CT "t-Butanol COH (UA)" 6 12.011 4
atom 50 29 OS "Ether ROR (UA)" 8 15.999 2
atom 51 6 C3 "Ether CH3-OR (UA)" 6 15.035 1
atom 52 2 C2 "Ether -CH2-OR (UA)" 6 14.027 2
atom 53 20 OW "TIP3P Water O" 8 15.999 2
atom 54 21 HW "TIP3P Water H" 1 1.008 1
atom 55 20 OW "TIP4P Water O" 8 15.999 3
atom 56 21 HW "TIP4P Water H" 1 1.008 1
atom 57 22 LP "TIP4P Water M" 99 0.000 1
atom 58 20 OW "TIP3F Water O" 8 15.999 2
atom 59 21 HW "TIP3F Water H" 1 1.008 1
atom 60 2 C2 "Methylene Chloride (UA)" 6 14.027 2
atom 61 30 Cl "Methylene Chloride (UA)" 17 35.453 1
atom 62 10 CH "Chloroform CHCl3 (UA)" 6 12.011 3
atom 63 30 Cl "Chloroform CHCl3 (UA)" 17 35.453 1
atom 64 13 CT "Carbon Tetrachloride" 6 12.011 4
atom 65 30 Cl "Carbon Tetrachloride" 17 35.453 1
atom 66 31 SZ "DMSO >S=O (UA)" 16 32.060 3
atom 67 32 OY "DMSO >S=O (UA)" 8 15.999 1
atom 68 6 C3 "DMSO CH3- (UA)" 6 15.035 1
atom 69 33 NT "Ammonia NH3" 7 14.007 3
atom 70 34 H "Ammonia NH3" 1 1.008 1
atom 71 4 O "DMF C=O (UA)" 8 15.999 1
atom 72 35 N "DMF CON< (UA)" 7 14.007 3
atom 73 3 C "DMF C=O (UA)" 6 12.011 3
atom 74 6 C3 "DMF CH3- (UA)" 6 15.035 1
atom 75 20 OW "SPC Water O" 8 15.999 2
atom 76 21 HW "SPC Water H" 1 1.008 1
atom 77 13 CT "Alkane CH3-" 6 12.011 4
atom 78 13 CT "Alkane -CH2-" 6 12.011 4
atom 79 13 CT "Alkane >CH-" 6 12.011 4
atom 80 13 CT "Methane CH4" 6 12.011 4
atom 81 13 CT "Alkane >C<" 6 12.011 4
atom 82 36 HC "Alkane H-C" 1 1.008 1
atom 83 37 CM "Alkene R2-C=" 6 12.011 3
atom 84 37 CM "Alkene RH-C=" 6 12.011 3
atom 85 37 CM "Alkene H2-C=" 6 12.011 3
atom 86 36 HC "Alkene H-C=" 1 1.008 1
atom 87 38 CA "Aromatic C" 6 12.011 3
atom 88 39 HA "Aromatic H-C" 1 1.008 1
atom 89 38 CA "Naphthalene Fusion C" 6 12.011 3
atom 90 13 CT "Ethyl Benzene CH3-" 6 12.011 4
atom 91 13 CT "Ethyl Benzene -CH2-" 6 12.011 4
atom 92 40 C= "Diene =CH-CH=" 6 12.011 3
atom 93 5 OH "Alcohol -OH" 8 15.999 2
atom 94 7 HO "Alcohol -OH" 1 1.008 1
atom 95 36 HC "Methanol CH3-" 1 1.008 1
atom 96 13 CT "Alcohol CH3OH & RCH2OH" 6 12.011 4
atom 97 13 CT "Alcohol R2CHOH" 6 12.011 4
atom 98 13 CT "Alcohol R3COH" 6 12.011 4
atom 99 13 CT "Trifluoroethanol -CH2-" 6 12.011 4
atom 100 13 CT "Trifluoroethanol CF3-" 6 12.011 4
atom 101 5 OH "Trifluoroethanol -OH" 8 15.999 2
atom 102 7 HO "Trifluoroethanol -OH" 1 1.008 1
atom 103 1 F "Trifluoroethanol F" 9 18.998 1
atom 104 36 HC "Trifluoroethanol -CH2-" 1 1.008 1
atom 105 38 CA "Phenol C-OH" 6 12.011 3
atom 106 5 OH "Phenol -OH" 8 15.999 2
atom 107 7 HO "Phenol -OH" 1 1.008 1
atom 108 5 OH "Diol -OH" 8 15.999 2
atom 109 7 HO "Diol -OH" 1 1.008 1
atom 110 5 OH "Triol -OH" 8 15.999 2
atom 111 7 HO "Triol -OH" 1 1.008 1
atom 112 13 CT "Diol & Triol -CH2OH" 6 12.011 4
atom 113 13 CT "Diol & Triol -CHROH" 6 12.011 4
atom 114 13 CT "Diol & Triol -CR2OH" 6 12.011 4
atom 115 36 HC "Diol & Triol H-COH" 1 1.008 1
atom 116 29 OS "Diphenyl Ether" 8 15.999 2
atom 117 40 C= "Diene =CR-CR=" 6 12.011 3
atom 118 29 OS "Anisole -OCH3" 8 15.999 1
atom 119 29 OS "Dialkyl Ether -O-" 8 15.999 2
atom 120 13 CT "Methyl Ether CH3OR" 6 12.011 4
atom 121 13 CT "Ethyl Ether -CH2OR" 6 12.011 4
atom 122 13 CT "Isopropyl Ether >CHOR" 6 12.011 4
atom 123 13 CT "t-Butyl Ether COR" 6 12.011 4
atom 124 36 HC "Alkyl Ether H-COR" 1 1.008 1
atom 125 29 OS "Acetal RO-CR2OX" 8 15.999 4
atom 126 5 OH "Hemiacetal -OH" 8 15.999 2
atom 127 7 HO "Hemiacetal -OH" 1 1.008 1
atom 128 41 CO "Acetal RO-CH2-OR" 6 12.011 4
atom 129 36 HC "Acetal RO-CH2-OR" 1 1.008 1
atom 130 41 CO "Hemiacetal RO-CH2-OH" 6 12.011 4
atom 131 36 HC "Hemiacetal RO-CH2-OH" 1 1.008 1
atom 132 41 CO "Acetal RO-CHR-OR" 6 12.011 4
atom 133 36 HC "Acetal RO-CHR-OR" 1 1.008 1
atom 134 41 CO "Hemiacetal RO-CHR-OH" 6 12.011 4
atom 135 36 HC "Hemiacetal RO-CHR-OH" 1 1.008 1
atom 136 41 CO "Acetal RO-CR2-OR" 6 12.011 4
atom 137 41 CO "Hemiacetal RO-CR2-OH" 6 12.011 4
atom 138 38 CA "Anisole C-OCH3" 6 12.011 4
atom 139 15 SH "Thiol -SH" 16 32.060 2
atom 140 15 SH "Hydrogen Sulfide H2S" 16 32.060 2
atom 141 16 S "Sulfide -S-" 16 32.060 2
atom 142 16 S "Disulfide -S-S-" 16 32.060 2
atom 143 17 HS "Thiol -SH" 1 1.008 1
atom 144 17 HS "Hydrogen Sulfide H2S" 1 1.008 1
atom 145 13 CT "Thiol -CH2-SH" 6 12.011 4
atom 146 13 CT "Thiol >CH-SH" 6 12.011 4
atom 147 13 CT "Thiol C-SH" 6 12.011 4
atom 148 13 CT "Methyl Sulfide CH3-SR" 6 12.011 4
atom 149 13 CT "Sulfide RCH2-SR" 6 12.011 4
atom 150 13 CT "Sulfide R2CH-SR" 6 12.011 4
atom 151 13 CT "Sulfide R3C-SR" 6 12.011 4
atom 152 13 CT "Disulfide CH3-S-SR" 6 12.011 4
atom 153 13 CT "Disulfide RCH2-S-SR" 6 12.011 4
atom 154 13 CT "Disulfide R2CH-S-SR" 6 12.011 4
atom 155 13 CT "Disulfide R3C-S-SR" 6 12.011 4
atom 156 13 CT "Methanethiol CH3-SH" 6 12.011 4
atom 157 13 CT "Benzyl Alcohol -CH2OH" 6 12.011 4
atom 158 13 CT "Benzyl Alcohol -CHROH" 6 12.011 4
atom 159 13 CT "Benzyl Alcohol -CR2OH" 6 12.011 4
atom 160 38 CA "Benzyl Alcohol/Nitrile" 6 12.011 3
atom 161 16 S "Thioanisole -SCH3" 16 32.060 2
atom 162 13 CT "RCH2-NH2 & GLY CA" 6 12.011 4
atom 163 13 CT "RCHR-NH2 & ALA CA" 6 12.011 4
atom 164 13 CT "R3C-NH2 & AIB CA" 6 12.011 4
atom 165 30 Cl "Chloroalkene Cl-CH=" 17 35.453 1
atom 166 37 CM "Chloroalkene Cl-CH=" 6 12.011 3
atom 167 38 CA "Thioanisole C-SCH3" 6 12.011 3
atom 168 13 CT "Amide -NH-CHR2" 6 12.011 4
atom 169 13 CT "Amide -NH-CR3" 6 12.011 4
atom 170 3 C "Benzophenone C=O" 6 12.011 3
atom 171 3 C "Benzaldehyde C=O" 6 12.011 3
atom 172 3 C "Acetophenone C=O" 6 12.011 3
atom 173 3 C "Benzamide C=O" 6 12.011 3
atom 174 3 C "Amide C=O" 6 12.011 3
atom 175 4 O "Amide C=O" 8 15.999 1
atom 176 35 N "Amide -CO-NH2" 7 14.007 3
atom 177 35 N "Amide -CO-NHR" 7 14.007 3
atom 178 35 N "Amide -CO-NR2" 7 14.007 3
atom 179 34 H "Amide -CO-NH2" 1 1.008 1
atom 180 34 H "Amide -CO-NHR" 1 1.008 1
atom 181 13 CT "Amide -NH-CH3" 6 12.011 4
atom 182 13 CT "Amide -NR-CH3" 6 12.011 4
atom 183 13 CT "Amide -NH-CH2R" 6 12.011 4
atom 184 13 CT "Amide -NR-CH2R & PRO CD" 6 12.011 4
atom 185 13 CT "Amide -NR-CHR2 & PRO CA" 6 12.011 4
atom 186 3 C "Urea C=O" 6 12.011 3
atom 187 4 O "Urea C=O" 8 15.999 1
atom 188 35 N "Urea -NH2" 7 14.007 3
atom 189 34 H "Urea -NH2" 1 1.008 1
atom 190 35 N "Imide -NH-" 7 14.007 3
atom 191 3 C "Imide C=O" 6 12.011 3
atom 192 4 O "Imide C=O" 8 15.999 1
atom 193 34 H "Imide -NH-" 1 1.008 1
atom 194 36 HC "Formimide H-C=O" 1 1.008 1
atom 195 13 CT "Imide CH3-CONHCO-" 6 12.011 4
atom 196 13 CT "Imide -CH2-CONHCO-" 6 12.011 4
atom 197 13 CT "Imide >CH-CONHCO-" 6 12.011 4
atom 198 13 CT "Imide C-CONHCO-" 6 12.011 4
atom 199 38 CA "Benzonitrile C-CN" 6 12.011 3
atom 200 19 CZ "Benzonitrile -CN" 6 12.011 2
atom 201 18 NZ "Benzonitrile -CN" 7 14.007 1
atom 202 38 CA "Chlorobenzene C-Cl" 6 12.011 3
atom 203 30 Cl "Chlorobenzene C-Cl" 17 35.453 1
atom 204 35 N "N-Phenylacetamide N" 7 14.007 3
atom 205 38 CA "N-Phenylacetamide N-CA" 6 12.011 3
atom 206 3 C "Carboxylic Acid -COOH" 6 12.011 3
atom 207 5 OH "Carboxylic Acid C=O" 8 15.999 1
atom 208 4 O "Carboxylic Acid -OH" 8 15.999 2
atom 209 7 HO "Carboxylic Acid -COOH" 1 1.008 1
atom 210 3 C "Carboxylate COO-" 6 12.011 3
atom 211 42 O2 "Carboxylate COO-" 8 15.999 1
atom 212 13 CT "Carboxylate CH3-COO-" 6 12.011 4
atom 213 13 CT "Carboxylate RCH2-COO-" 6 12.011 4
atom 214 13 CT "Carboxylate R2CH-COO-" 6 12.011 4
atom 215 13 CT "Carboxylate R3C-COO-" 6 12.011 4
atom 216 3 C "Aldehyde/Acyl Halide C=O" 6 12.011 3
atom 217 4 O "Aldyhyde/Acyl Halide C=O" 8 15.999 1
atom 218 36 HC "Aldehyde/Formamide HCO-" 1 1.008 1
atom 219 3 C "Ketone C=O" 6 12.011 3
atom 220 4 O "Ketone C=O" 8 15.999 1
atom 221 36 HC "Acyl H-C-COX" 1 1.008 1
atom 222 13 CT "C-Terminal ALA CA" 6 12.011 4
atom 223 13 CT "C-Terminal GLY CA" 6 12.011 4
atom 224 13 CT "C-Terminal AIB CA" 6 12.011 4
atom 225 13 CT "C-Terminal PRO CA" 6 12.011 4
atom 226 43 N3 "Ammonium NH4+" 7 14.007 4
atom 227 43 N3 "Ammonium RNH3+" 7 14.007 4
atom 228 43 N3 "Ammonium R4N+" 7 14.007 4
atom 229 44 H3 "Ammonium NH4+" 1 1.008 1
atom 230 44 H3 "Ammonium RNH3+" 1 1.008 1
atom 231 13 CT "Ammonium CH3-NH3+" 6 12.011 4
atom 232 13 CT "CH3NH3+/N-Term GLY CA" 6 12.011 4
atom 233 13 CT "RCH2NH3+/N-Term ALA CA" 6 12.011 4
atom 234 13 CT "R3C-NH3+/N-Term AIB CA" 6 12.011 4
atom 235 13 CT "N-Terminal PRO CA" 6 12.011 4
atom 236 13 CT "N-Terminal PRO CD" 6 12.011 4
atom 237 13 CT "Ammonium CH3-NH2R+" 6 12.011 4
atom 238 13 CT "GLY Zwitterion CA" 6 12.011 4
atom 239 13 CT "ALA Zwitterion CA" 6 12.011 4
atom 240 45 N2 "Guanidinium -NH2" 7 14.007 3
atom 241 44 H3 "Guanidinium -NH2" 1 1.008 1
atom 242 38 CA "Guanidinium C+" 6 12.011 3
atom 243 45 N2 "Guanidinium -NHR" 7 14.007 3
atom 244 44 H3 "Guanidinium -NHR" 1 1.008 1
atom 245 13 CT "Me Guanidinium CH3-" 6 12.011 4
atom 246 13 CT "Et Guanidinium CH3-" 6 12.011 4
atom 247 13 CT "Et Guan -CH2- & ARG CD" 6 12.011 4
atom 248 13 CT "Pr Guan -CH2- & ARG CG" 6 12.011 4
atom 249 43 N3 "Ammonium R2NH2+" 7 14.007 4
atom 250 44 H3 "Ammonium R2NH2+" 1 1.008 1
atom 251 46 NC "Diaminopyridine N1" 7 14.007 2
atom 252 38 CA "Diaminopyridine C2" 6 12.011 3
atom 253 45 N2 "Diaminopyridine -NH2" 7 14.007 3
atom 254 34 H "Diaminopyridine -NH2" 1 1.008 3
atom 255 38 CA "Diaminopyridine C3" 6 12.011 3
atom 256 39 HA "Diaminopyridine H3" 1 1.008 1
atom 257 38 CA "Diaminopyridine C4" 6 12.011 3
atom 258 39 HA "Diaminopyridine H4" 1 1.008 1
atom 259 47 NA "Uracil & Thymine N1" 7 14.007 3
atom 260 3 C "Uracil & Thymine C2" 6 12.011 3
atom 261 47 NA "Uracil & Thymine N3" 7 14.007 3
atom 262 3 C "Uracil & Thymine C4" 6 12.011 3
atom 263 37 CM "Uracil & Thymine C5" 6 12.011 3
atom 264 37 CM "Uracil & Thymine C6" 6 12.011 3
atom 265 34 H "Uracil & Thymine HN1" 1 1.008 1
atom 266 4 O "Uracil & Thymine O2" 8 15.999 1
atom 267 34 H "Uracil & Thymine HN3" 1 1.008 1
atom 268 4 O "Uracil & Thymine O4" 8 15.999 1
atom 269 36 HC "Uracil & Thymine HC5" 1 1.008 1
atom 270 36 HC "Uracil & Thymine HC6" 1 1.008 1
atom 271 13 CT "Thymine CH3-" 6 12.011 4
atom 272 36 HC "Thymine CH3-" 1 1.008 1
atom 273 47 NA "Cytosine N1" 7 14.007 3
atom 274 3 C "Cytosine C2" 6 12.011 3
atom 275 46 NC "Cytosine N3" 7 14.007 2
atom 276 38 CA "Cytosine C4" 6 12.011 3
atom 277 37 CM "Cytosine C5" 6 12.011 3
atom 278 37 CM "Cytosine C6" 6 12.011 3
atom 279 34 H "Cytosine HN1" 1 1.008 1
atom 280 4 O "Cytosine O2" 8 15.999 1
atom 281 45 N2 "Cytosine NH2-" 7 14.007 3
atom 282 34 H "Cytosine NH2- (N3)" 1 1.008 1
atom 283 34 H "Cytosine NH2- (C5)" 1 1.008 1
atom 284 36 HC "Cytosine HC5" 1 1.008 1
atom 285 48 H4 "Cytosine HC6" 1 1.008 1
atom 286 46 NC "Adenine N1" 7 14.007 2
atom 287 49 CQ "Adenine C2" 6 12.011 3
atom 288 46 NC "Adenine N3" 7 14.007 2
atom 289 50 CB "Adenine C4" 6 12.011 3
atom 290 50 CB "Adenine C5" 6 12.011 3
atom 291 38 CA "Adenine C6" 6 12.011 3
atom 292 51 NB "Adenine & Guanine N7" 7 14.007 2
atom 293 52 CK "Adenine & Guanine C8" 6 12.011 3
atom 294 47 NA "Adenine & Guanine N9" 7 14.007 2
atom 295 53 H5 "Adenine HC2" 1 1.008 1
atom 296 45 N2 "Adenine NH2-" 7 14.007 3
atom 297 34 H "Adenine NH2- (N1)" 1 1.008 1
atom 298 34 H "Adenine NH2- (C5)" 1 1.008 1
atom 299 53 H5 "Adenine & Guanine HC8" 1 1.008 1
atom 300 34 H "Adenine & Guanine HN9" 1 1.008 1
atom 301 47 NA "Guanine N1" 7 14.007 3
atom 302 38 CA "Guanine C2" 6 12.011 3
atom 303 46 NC "Guanine N3" 7 14.007 2
atom 304 50 CB "Guanine C4" 6 12.011 3
atom 305 50 CB "Guanine C5" 6 12.011 3
atom 306 3 C "Guanine C6" 6 12.011 3
atom 307 34 H "Guanine HN1" 1 1.008 1
atom 308 45 N2 "Guanine NH2-" 7 14.007 3
atom 309 34 H "Guanine NH2-" 1 1.008 1
atom 310 4 O "Guanine O6" 8 15.999 1
atom 311 13 CT "9-Me A & 9-Me-G CH3-" 6 12.011 4
atom 312 36 HC "9-Me-A & 9-Me-G CH3-" 1 1.008 1
atom 313 13 CT "1-Me-U & 1-Me-T CH3-" 6 12.011 4
atom 314 36 HC "1-Me-U & 1-Me-T CH3-" 1 1.008 1
atom 315 13 CT "1-Me-Cytosine CH3-" 6 12.011 4
atom 316 36 HC "1-Me-Cytosine CH3-" 1 1.008 1
atom 317 47 NA "CytosineH+ N1" 7 14.007 3
atom 318 3 C "CytosineH+ C2" 6 12.011 3
atom 319 47 NA "CytosineH+ N3" 7 14.007 3
atom 320 38 CA "CytosineH+ C4" 6 12.011 3
atom 321 37 CM "CytosineH+ C5" 6 12.011 3
atom 322 37 CM "CytosineH+ C6" 6 12.011 3
atom 323 34 H "CytosineH+ HN1" 1 1.008 1
atom 324 4 O "CytosineH+ O2" 8 15.999 1
atom 325 34 H "CytosineH+ HN3" 1 1.008 1
atom 326 45 N2 "CytosineH+ NH2-" 7 14.007 3
atom 327 34 H "CytosineH+ NH2- (N3)" 1 1.008 1
atom 328 34 H "CytosineH+ NH2- (C5)" 1 1.008 1
atom 329 39 HA "CytosineH+ HC5" 1 1.008 1
atom 330 48 H4 "CytosineH+ HC6" 1 1.008 1
atom 331 13 CT "1-Me-CytosineH+ CH3-" 6 12.011 4
atom 332 36 HC "1-Me-CytosineH+ CH3-" 1 1.008 1
atom 333 54 P "DiMePhosphate P (UA)" 15 30.974 4
atom 334 42 O2 "DiMePhosphate O=P-O (UA)" 8 15.999 1
atom 335 29 OS "DiMePhosphate CH3-O (UA)" 8 15.999 2
atom 336 13 CT "DiMePhosphate CH3-O (UA)" 6 15.035 1
atom 337 37 CM "Trifluorothymine CF3-" 6 12.011 4
atom 338 30 Cl "Chloroalkene Cl2-C=" 17 35.453 1
atom 339 37 CM "Chloroalkene Cl2-C=" 6 12.011 3
atom 340 1 F "Fluoride Ion F-" 9 18.998 0
atom 341 30 Cl "Chloride Ion Cl-" 17 35.453 0
atom 342 55 Br "Bromide Ion Br-" 35 79.904 0
atom 343 56 I "Iodide Ion I-" 53 126.905 0
atom 344 57 N4 "Ammonium Ion NH4+ (UA)" 7 18.039 0
atom 345 58 Li "Lithium Ion Li+" 3 6.941 0
atom 346 59 Na "Sodium Ion Na+" 11 22.990 0
atom 347 60 K "Potassium Ion K+" 19 39.098 0
atom 348 61 Rb "Rubidium Ion Rb+" 37 85.468 0
atom 349 62 Cs "Cesium Ion Cs+" 55 132.905 0
atom 350 63 Mg "Magnesium Ion Mg+2" 12 24.305 0
atom 351 64 Ca "Calcium Ion Ca+2" 20 40.080 0
atom 352 65 Sr "Strontium Ion Sr+2" 38 87.620 0
atom 353 66 Ba "Barium Ion Ba+2" 56 137.330 0
atom 354 6 C3 "Methyl Thiolate CH3S-" 6 12.011 4
atom 355 36 HC "Methyl Thiolate CH3S-" 1 1.008 1
atom 356 15 SH "Methyl Thiolate CH3S-" 16 32.060 1
atom 357 6 C3 "Methoxide CH3O-" 6 12.011 4
atom 358 36 HC "Methoxide CH3O-" 1 1.008 1
atom 359 5 OH "Methoxide CH3O-" 8 15.999 1
atom 360 13 CT "Nitrile Anion CNCH2-" 6 12.011 3
atom 361 36 HC "Nitrile Anion CNCH2-" 1 1.008 1
atom 362 19 CZ "Nitrile Anion CNCH2-" 6 12.011 2
atom 363 18 NZ "Nitrile Anion CNCH2-" 7 14.007 1
atom 364 6 C3 "Me Amine Anion CH3NH-" 6 12.011 4
atom 365 36 HC "Me Amine Anion CH3NH-" 1 1.008 1
atom 366 43 N3 "Me Amine Anion CH3NH-" 7 14.007 2
atom 367 34 H "Methyl Amine Anion" 1 1.008 1
atom 368 6 C3 "Ethyl Anion CH3-CH2-" 6 12.011 4
atom 369 36 HC "Ethyl Anion CH3-CH2-" 1 1.008 1
atom 370 13 CT "Ethyl Anion CH3-CH2-" 6 12.011 4
atom 371 36 HC "Ethyl Anion CH3-CH2-" 1 1.008 1
atom 372 22 LP "Ethyl Anion CH3-CH2-" 99 0.000 1
atom 373 5 OH "Hydroxide Ion OH-" 8 15.999 1
atom 374 7 HO "Hydroxide Ion OH-" 1 1.008 1
atom 375 67 U "Uranyl Ion UO2+" 92 238.029 2
atom 376 68 OU "Uranyl Ion UO2+" 8 15.999 1
atom 377 29 OS "GTP O-(POn)2" 8 15.999 2
atom 378 54 P "DiMe Phosphate P" 15 30.974 4
atom 379 42 O2 "DiMe Phosphate O=P-O" 8 15.999 1
atom 380 29 OS "DiMe Phosphate CH3-O" 8 15.999 1
atom 381 13 CT "DiMe Phosphate CH3-O" 6 12.011 4
atom 382 36 HC "DiMe Phosphate CH3-O" 1 1.008 1
atom 383 54 P "Me Phosphate P" 15 30.974 4
atom 384 42 O2 "Me Phosphate O=PO2" 8 15.999 1
atom 385 29 OS "Me Phosphate CH3-O" 8 15.999 1
atom 386 13 CT "Me Phosphate CH3-O" 6 12.011 4
atom 387 36 HC "Me Phosphate CH3-O" 1 1.008 1
atom 388 54 P "Me MePhosphonate P" 15 30.974 4
atom 389 42 O2 "Me MePhosphonate O=P-O" 8 15.999 1
atom 390 29 OS "Me MePhosphonate CH3-O" 8 15.999 1
atom 391 13 CT "Me MePhosphonate CH3-O" 6 12.011 4
atom 392 36 HC "Me MePhosphonate CH3-O" 1 1.008 1
atom 393 13 CT "Me MePhosphonate CH3-P" 6 12.011 4
atom 394 36 HC "Me MePhosphonate CH3-P" 1 1.008 1
atom 395 38 CA "Bz MePhosphonate Cipso" 6 12.011 3
atom 396 13 CT "Bz MePhosphonate CH3-O" 6 12.011 4
atom 397 36 HC "Bz MePhosphonate CH3-O" 1 1.008 1
atom 398 38 CA "Me BzPhosphonate Cipso" 6 12.011 3
atom 399 13 CT "Me BzPhosphonate CH3-P" 6 12.011 4
atom 400 36 HC "Me BzPhosphonate CH3-P" 1 1.008 1
atom 401 38 CA "Ph Phosphate Cipso" 6 12.011 3
atom 402 13 CT "Barbiturate C6(R2)" 6 12.011 4
atom 403 3 C "Ester -COOR" 6 12.011 3
atom 404 4 O "Ester C=O" 8 15.999 1
atom 405 29 OS "Ester CO-O-R" 8 15.999 2
atom 406 13 CT "Methyl Ester -OCH3" 6 12.011 4
atom 407 36 HC "Methyl Ester -OCH3" 1 1.008 1
atom 408 3 C "Benzoic Acid -COOH" 6 12.011 3
atom 409 3 C "Aryl Ester -COOR" 6 12.011 3
atom 410 38 CA "Phenyl Ester Cipso" 6 12.011 3
atom 411 29 OS "Phenyl Ester -OPh" 8 15.999 2
atom 412 69 SY "Sulfonamide -SO2N<" 16 32.060 4
atom 413 32 OY "Sulfonamide -SO2N<" 8 15.999 1
atom 414 13 CT "Sulfonamide CH3-S" 6 12.011 4
atom 415 36 HC "Sulfonamide CH3-S" 1 1.008 1
atom 416 35 N "Sulfonamide -SO2NH2" 7 14.007 3
atom 417 34 H "Sulfonamide -SO2NH2" 1 1.008 1
atom 418 35 N "Sulfonamide -SO2NHR" 7 14.007 3
atom 419 34 H "Sulfonamide -SO2NHR" 1 1.008 1
atom 420 13 CT "N-Me Sulfonamide CH3-" 6 12.011 4
atom 421 36 HC "N-Me Sulfonamide CH3-" 1 1.008 1
atom 422 13 CT "Sulfonamide N-CH2-R" 6 12.011 4
atom 423 36 HC "Sulfonamide N-CH2-R" 1 1.008 1
atom 424 13 CT "N-Et Sulfonamide CH3-" 6 12.011 4
atom 425 36 HC "N-Et Sulfonamide CH3-" 1 1.008 1
atom 426 38 CA "Aryl Sulfonamide C-SO2N" 6 12.011 3
atom 427 38 CA "Aryl Sulfoxide C-S=O" 6 12.011 3
atom 428 13 CT "Et Ester -OCH2R" 6 12.011 4
atom 429 13 CT "i-Pr Ester -OCHR2" 6 12.011 4
atom 430 13 CT "t-Bu Ester -OCR3" 6 12.011 4
atom 431 69 SY "Sulfone R-SO2-R" 16 32.060 4
atom 432 32 OY "Sulfone R-SO2-R" 8 15.999 1
atom 433 31 SZ "Alkyl Aryl Sulfoxide" 16 32.060 3
atom 434 31 SZ "Dialkyl Sulfoxide" 16 32.060 3
atom 435 32 OY "Sulfoxide R-SO-R" 8 15.999 1
atom 436 13 CT "Sulfoxide CH3-SO-R" 6 12.011 4
atom 437 13 CT "Sulfoxide -CH2-SO-R" 6 12.011 4
atom 438 70 C* "TRP CG" 6 12.011 3
atom 439 50 CB "TRP CD" 6 12.011 3
atom 440 71 CN "TRP CE" 6 12.011 3
atom 441 47 NA "TRP NE, HID ND & HIE NE" 7 14.007 3
atom 442 34 H "TRP HNE & HID/HIE HN" 1 1.008 1
atom 443 13 CT "HIS CB" 6 12.011 4
atom 444 72 CR "HID & HIE CE1" 6 12.011 3
atom 445 73 CV "HID CD2 & HIE CG" 6 12.011 3
atom 446 74 CW "HID CG & HIE CD2" 6 12.011 3
atom 447 72 CR "HIP CE1" 6 12.011 3
atom 448 75 CX "HIP CG & CD2" 6 12.011 3
atom 449 51 NB "HID NE & HIE ND" 7 14.007 2
atom 450 47 NA "HIP ND & NE" 7 14.007 3
atom 451 34 H "HIP HND & HNE" 1 1.008 1
atom 452 74 CW "TRP CD1" 6 12.011 3
atom 453 13 CT "i-Pr Benzene -CHMe2" 6 12.011 4
atom 454 13 CT "t-Bu Benzene -CMe3" 6 12.011 4
atom 455 37 CM "Vinyl Ether =CH-OR" 6 12.011 3
atom 456 37 CM "Vinyl Ether =CR-OR" 6 12.011 3
atom 457 76 C! "Biphenyl C1" 6 12.011 3
atom 458 46 NC "Pyridine N" 7 14.007 2
atom 459 38 CA "Pyridine C1" 6 12.011 3
atom 460 38 CA "Pyridine C2" 6 12.011 3
atom 461 38 CA "Pyridine C3" 6 12.011 3
atom 462 39 HA "Pyridine H1" 1 1.008 1
atom 463 39 HA "Pyridine H2" 1 1.008 1
atom 464 39 HA "Pyridine H3" 1 1.008 1
atom 465 46 NC "Pyrazine N" 7 14.007 2
atom 466 38 CA "Pyrazine CH" 6 12.011 3
atom 467 39 HA "Pyrazine CH" 1 1.008 1
atom 468 46 NC "Pyrimidine N" 7 14.007 2
atom 469 49 CQ "Pyrimidine C2" 6 12.011 3
atom 470 38 CA "Pyrimidine C4" 6 12.011 3
atom 471 38 CA "Pyrimidine C5" 6 12.011 3
atom 472 39 HA "Pyrimidine HC2" 1 1.008 1
atom 473 39 HA "Pyrimidine HC4" 1 1.008 1
atom 474 39 HA "Pyrimidine HC5" 1 1.008 1
atom 475 46 NC "Pyridazine N" 7 14.007 2
atom 476 38 CA "Pyridazine C3" 6 12.011 3
atom 477 38 CA "Pyridazine C4" 6 12.011 3
atom 478 39 HA "Pyridazine HC3" 1 1.008 1
atom 479 39 HA "Pyridazine HC4" 1 1.008 1
atom 480 47 NA "Pyrrole N" 7 14.007 3
atom 481 74 CW "Pyrrole C2" 6 12.011 3
atom 482 77 CS "Pyrrole C3" 6 12.011 3
atom 483 34 H "Pyrrole HN" 1 1.008 1
atom 484 39 HA "Pyrrole HC2" 1 1.008 1
atom 485 39 HA "Pyrrole HC3" 1 1.008 1
atom 486 47 NA "Pyrazole N1" 7 14.007 3
atom 487 51 NB "Pyrazole N2" 7 14.007 2
atom 488 78 CU "Pyrazole C3" 6 12.011 3
atom 489 77 CS "Pyrazole C4" 6 12.011 3
atom 490 74 CW "Pyrazole C5" 6 12.011 3
atom 491 34 H "Pyrazole HN1" 1 1.008 1
atom 492 39 HA "Pyrazole HC3" 1 1.008 1
atom 493 39 HA "Pyrazole HC4" 1 1.008 1
atom 494 39 HA "Pyrazole HC5" 1 1.008 1
atom 495 47 NA "Imidazole N1" 7 14.007 3
atom 496 72 CR "Imidazole C2" 6 12.011 3
atom 497 51 NB "Imidazole N3" 7 14.007 2
atom 498 73 CV "Imidazole C4" 6 12.011 3
atom 499 74 CW "Imidazole C5" 6 12.011 3
atom 500 34 H "Imidazole HN1" 1 1.008 1
atom 501 39 HA "Imidazole HC2" 1 1.008 1
atom 502 39 HA "Imidazole HC4" 1 1.008 1
atom 503 39 HA "Imidazole HC5" 1 1.008 1
atom 504 29 OS "Furan O" 8 15.999 2
atom 505 74 CW "Furan C2" 6 12.011 3
atom 506 77 CS "Furan C3" 6 12.011 3
atom 507 39 HA "Furan HC2" 1 1.008 1
atom 508 39 HA "Furan HC3" 1 1.008 1
atom 509 29 OS "Oxazole O" 8 15.999 2
atom 510 72 CR "Oxazole C2" 6 12.011 3
atom 511 51 NB "Oxazole N" 7 14.007 2
atom 512 73 CV "Oxazole C4" 6 12.011 3
atom 513 74 CW "Oxazole C5" 6 12.011 3
atom 514 39 HA "Oxazole HC2" 1 1.008 1
atom 515 39 HA "Oxazole HC4" 1 1.008 1
atom 516 39 HA "Oxazole HC5" 1 1.008 1
atom 517 29 OS "Isoxazole O" 8 15.999 2
atom 518 51 NB "Isoxazole N" 7 14.007 2
atom 519 78 CU "Isoxazole C3" 6 12.011 3
atom 520 77 CS "Isoxazole C4" 6 12.011 3
atom 521 74 CW "Isoxazole C5" 6 12.011 3
atom 522 39 HA "Isoxazole HC3" 1 1.008 1
atom 523 39 HA "Isoxazole HC4" 1 1.008 1
atom 524 39 HA "Isoxazole HC5" 1 1.008 1
atom 525 47 NA "Indole N1" 7 14.007 3
atom 526 74 CW "Indole C2" 6 12.011 3
atom 527 77 CS "Indole C3" 6 12.011 3
atom 528 38 CA "Indole C4" 6 12.011 3
atom 529 38 CA "Indole C5" 6 12.011 3
atom 530 38 CA "Indole C6" 6 12.011 3
atom 531 38 CA "Indole C7" 6 12.011 3
atom 532 71 CN "Indole C8" 6 12.011 3
atom 533 50 CB "Indole C9" 6 12.011 3
atom 534 34 H "Indole HN1" 1 1.008 1
atom 535 39 HA "Indole HC2" 1 1.008 1
atom 536 39 HA "Indole HC3" 1 1.008 1
atom 537 39 HA "Indole HC4" 1 1.008 1
atom 538 39 HA "Indole HC5" 1 1.008 1
atom 539 39 HA "Indole HC6" 1 1.008 1
atom 540 39 HA "Indole HC7" 1 1.008 1
atom 541 46 NC "Quinoline N1" 7 14.007 2
atom 542 38 CA "Quinoline C2" 6 12.011 3
atom 543 38 CA "Quinoline C3" 6 12.011 3
atom 544 38 CA "Quinoline C4" 6 12.011 3
atom 545 38 CA "Quinoline C5" 6 12.011 3
atom 546 38 CA "Quinoline C6" 6 12.011 3
atom 547 38 CA "Quinoline C7" 6 12.011 3
atom 548 38 CA "Quinoline C8" 6 12.011 3
atom 549 38 CA "Quinoline C9" 6 12.011 3
atom 550 38 CA "Quinoline C10" 6 12.011 3
atom 551 39 HA "Quinoline HC2" 1 1.008 1
atom 552 39 HA "Quinoline HC3" 1 1.008 1
atom 553 39 HA "Quinoline HC4" 1 1.008 1
atom 554 39 HA "Quinoline HC5" 1 1.008 1
atom 555 39 HA "Quinoline HC6" 1 1.008 1
atom 556 39 HA "Quinoline HC7" 1 1.008 1
atom 557 39 HA "Quinoline HC8" 1 1.008 1
atom 558 46 NC "Purine N1" 7 14.007 2
atom 559 49 CQ "Purine C2" 6 12.011 3
atom 560 46 NC "Purine N3" 7 14.007 2
atom 561 50 CB "Purine C4" 6 12.011 3
atom 562 50 CB "Purine C5" 6 12.011 3
atom 563 38 CA "Purine C6" 6 12.011 3
atom 564 51 NB "Purine N7" 7 14.007 2
atom 565 52 CK "Purine C8" 6 12.011 3
atom 566 47 NA "Purine N9" 7 14.007 3
atom 567 39 HA "Purine HC2" 1 1.008 1
atom 568 39 HA "Purine HC6" 1 1.008 1
atom 569 39 HA "Purine HC8" 1 1.008 1
atom 570 34 H "Purine HN9" 1 1.008 1
atom 571 16 S "Thiazole S" 16 32.060 2
atom 572 72 CR "Thiazole C2" 6 12.011 3
atom 573 51 NB "Thiazole N" 7 14.007 2
atom 574 73 CV "Thiazole C4" 6 12.011 3
atom 575 74 CW "Thiazole C5" 6 12.011 3
atom 576 39 HA "Thiazole HC2" 1 1.008 1
atom 577 39 HA "Thiazole HC4" 1 1.008 1
atom 578 39 HA "Thiazole HC5" 1 1.008 1
atom 579 46 NC "1,3,5-Triazine N" 7 14.007 2
atom 580 49 CQ "1,3,5-Triazine CH" 6 12.011 3
atom 581 39 HA "1,3,5-Triazine CH" 1 1.008 1
atom 582 38 CA "Serotonin C5-OH" 6 12.011 3
atom 583 13 CT "Serotonin CH2 on C3" 6 12.011 4
atom 584 46 NC "1,10-Phenanthroline N" 7 14.007 2
atom 585 38 CA "1,10-Phenanthroline C2" 6 12.011 3
atom 586 38 CA "1,10-Phenanthroline C3" 6 12.011 3
atom 587 38 CA "1,10-Phenanthroline C4" 6 12.011 3
atom 588 38 CA "1,10-Phenanthroline C12" 6 12.011 3
atom 589 38 CA "1,10-Phenanthroline C11" 6 12.011 3
atom 590 38 CA "1,10-Phenanthroline C5" 6 12.011 3
atom 591 39 HA "1,10-Phenanthroline HC2" 1 1.008 1
atom 592 39 HA "1,10-Phenanthroline HC3" 1 1.008 1
atom 593 39 HA "1,10-Phenanthroline HC4" 1 1.008 1
atom 594 39 HA "1,10-Phenanthroline HC5" 1 1.008 1
atom 595 47 NA "1-Methylimidazole N1" 7 14.007 3
atom 596 72 CR "1-Methylimidazole C2" 6 12.011 3
atom 597 51 NB "1-Methylimidazole N3" 7 14.007 2
atom 598 73 CV "1-Methylimidazole C4" 6 12.011 3
atom 599 74 CW "1-Methylimidazole C5" 6 12.011 3
atom 600 13 CT "1-Methylimidazole CH3-" 6 12.011 4
atom 601 39 HA "1-Methylimidazole HC2" 1 1.008 1
atom 602 39 HA "1-Methylimidazole HC4" 1 1.008 1
atom 603 39 HA "1-Methylimidazole HC5" 1 1.008 1
atom 604 36 HC "1-Methylimidazole CH3-" 1 1.008 1
atom 605 13 CT "1-Et Imidazole RCH2-" 6 12.011 4
atom 606 13 CT "1-iPr Imidazole R2CH-" 6 12.011 4
atom 607 13 CT "1-MeO-Me-Imidazole CH2" 6 12.011 4
atom 608 13 CT "2-Me Pyridine CH3" 6 12.011 4
atom 609 13 CT "2-Et Pyridine CH2" 6 12.011 4
atom 610 13 CT "3-Me Pyridazine CH3" 6 12.011 4
atom 611 13 CT "3-Et Pyridazine CH2" 6 12.011 4
atom 612 13 CT "4-Me Pyrimidine CH3" 6 12.011 4
atom 613 13 CT "4-Et Pyrimidine CH2" 6 12.011 4
atom 614 13 CT "2-Me Pyrazine CH3" 6 12.011 4
atom 615 13 CT "2-Et Pyrazine CH2" 6 12.011 4
atom 616 13 CT "2-Me Pyrrole CH3" 6 12.011 4
atom 617 13 CT "2-Et Pyrrole CH2" 6 12.011 4
atom 618 13 CT "2-Me Furan CH3" 6 12.011 4
atom 619 13 CT "2-Et Furan CH2" 6 12.011 4
atom 620 15 SH "6-Mercaptopurine SH" 16 32.060 2
atom 621 17 HS "6-Mercaptopurine SH" 1 1.008 1
atom 622 38 CA "6-Mercaptopurine C6" 6 12.011 3
atom 623 79 C$ "Beta-Lactam N-C=O" 6 12.011 3
atom 624 80 N$ "Beta-Lactam N-C=O" 7 14.007 4
atom 625 81 CY "Penicillin CH-N" 6 12.011 4
atom 626 81 CY "Penicillin CH-CO" 6 12.011 4
atom 627 13 CT "3-Me Indole CH3" 6 12.011 4
atom 628 76 C! "2-Phenyl Pyridine C2" 6 12.011 3
atom 629 76 C! "2-Phenyl Pyridine C2'" 6 12.011 3
atom 630 76 C! "2-Phenyl Pyridine C3" 6 12.011 3
atom 631 76 C! "2-Phenyl Pyridine C3'" 6 12.011 3
atom 632 76 C! "2-Phenyl Pyridine C4" 6 12.011 3
atom 633 76 C! "2-Phenyl Pyridine C4'" 6 12.011 3
atom 634 16 S "Diphenyl Thioether S" 16 32.060 2
atom 635 82 Ac "Actinium Ion Ac+3" 89 227.000 0
atom 636 83 Th "Thorium Ion Th+4" 90 232.038 0
atom 637 84 Am "Americium Ion Am+3" 95 243.000 0
atom 638 85 C+ "t-Butyl Cation C+" 6 12.011 3
atom 639 13 CT "t-Butyl Cation CH3-" 6 12.011 4
atom 640 36 HC "t-Butyl Cation CH3-" 1 1.008 1
atom 641 86 La "Lanthanum Ion La+3" 57 138.906 0
atom 642 87 Nd "Neodymium Ion Nd+3" 60 144.240 0
atom 643 88 Eu "Europium Ion Eu+3" 63 151.960 0
atom 644 89 Gd "Gadolinium Ion Gd+3" 64 157.250 0
atom 645 90 Yb "Ytterbium Ion Yb+3" 70 173.040 0
atom 646 37 CM "Cl..CH3..Cl- Sn2 TS" 6 12.011 5
atom 647 30 Cl "Cl..CH3..Cl- Sn2 TS" 17 35.453 1
atom 648 36 HC "Cl..CH3..Cl- Sn2 TS" 1 1.008 1
atom 649 81 CY "Cyclopropane -CH2-" 6 12.011 4
atom 650 81 CY "Cyclopropane -CHR-" 6 12.011 4
atom 651 81 CY "Cyclopropane -CR2-" 6 12.011 4
atom 652 38 CA "Cyclopentadienyl Anion" 6 12.011 3
atom 653 39 HA "Cyclopentadienyl Anion" 1 1.008 1
atom 654 38 CA "Cyclopentadienyl Radical" 6 12.011 3
atom 655 39 HA "Cyclopentadienyl Radical" 1 1.008 1
atom 656 38 CA "Fluorobenzene CF" 6 12.011 3
atom 657 1 F "Fluorobenzene CF" 9 18.998 1
atom 658 38 CA "Hexafluorobenzene CF" 6 12.011 3
atom 659 1 F "Hexafluorobenzene CF" 9 18.998 1
atom 660 55 Br "Bromide -CH2-Br (UA)" 35 79.904 1
atom 661 2 C2 "Bromide -CH2-Br (UA)" 6 14.027 0
atom 662 38 CA "TrifluoroMeBenzene C-CF3" 6 12.011 3
atom 663 13 CT "TrifluoroMeBenzene CF3-" 6 12.011 4
atom 664 1 F "TrifluoroMeBenzene CF3-" 9 18.998 1
atom 665 38 CA "Difluorobenzene CF" 6 12.011 3
atom 666 1 F "Difluorobenzene CF" 9 18.998 1
atom 667 38 CA "Bromobenzene CBr" 6 12.011 3
atom 668 55 Br "Bromobenzene CBr" 35 79.904 1
atom 669 38 CA "Iodobenzene CI" 6 12.011 3
atom 670 56 I "Iodobenzene CI" 53 126.905 1
atom 671 81 CY "cProp/cBut Benzene C-Ar" 6 12.011 4
atom 672 15 SH "Thiophenol SH" 16 32.060 2
atom 673 38 CA "Thiophenol C-SH" 6 12.011 3
atom 674 38 CA "Benzamidine CG" 6 12.011 3
atom 675 38 CA "Benzamidine CD" 6 12.011 3
atom 676 38 CA "Benzamidine CE" 6 12.011 3
atom 677 38 CA "Benzamidine CZ" 6 12.011 3
atom 678 39 HA "Benzamidine HCD" 1 1.008 1
atom 679 39 HA "Benzamidine HCE" 1 1.008 1
atom 680 38 CA "Benzamidine C+" 6 12.011 3
atom 681 45 N2 "Benzamidine -NH2" 7 14.007 3
atom 682 34 H "Benzamidine H1-N" 1 1.008 1
atom 683 34 H "Benzamidine H2-N" 1 1.008 1
atom 684 39 HA "Benzamidine HCG" 1 1.008 1
atom 685 13 CT "Neutral MeGdn CH3-" 6 12.011 4
atom 686 13 CT "Neutral ARG CD" 6 12.011 4
atom 687 91 NY "Neutral ARG NE" 7 14.007 3
atom 688 46 NC "Neutral ARG N1 (HN=C)" 7 14.007 2
atom 689 91 NY "Neutral ARG N2 (H2N-C)" 7 14.007 3
atom 690 38 CA "Neutral ARG CZ (>C=)" 6 12.011 3
atom 691 18 NZ "Alkyl Nitrile -CN" 7 14.007 1
atom 692 19 CZ "Alkyl Nitrile -CN" 6 12.011 2
atom 693 13 CT "Acetonitrile CH3-CN" 6 12.011 4
atom 694 13 CT "Alkyl Nitrile RCH2-CN" 6 12.011 4
atom 695 13 CT "Alkyl Nitrile R2CH-CN" 6 12.011 4
atom 696 13 CT "Alkyl Nitrile R3C-CN" 6 12.011 4
atom 697 36 HC "Alkyl Nitrile H-C-CN" 1 1.008 1
atom 698 92 NO "Nitroalkane -NO2" 7 14.007 3
atom 699 93 ON "Nitroalkane -NO2" 8 15.999 1
atom 700 13 CT "Nitromethane CH3-NO2" 6 12.011 4
atom 701 36 HC "Nitroalkane H-C-NO2" 1 1.008 1
atom 702 13 CT "Nitroalkane RCH2-NO2" 6 12.011 4
atom 703 13 CT "Nitroalkane R2CH-NO2" 6 12.011 4
atom 704 13 CT "Nitroalkane R3C-NO2" 6 12.011 4
atom 705 92 NO "Nitrobenzene -NO2" 7 14.007 3
atom 706 38 CA "Nitrobenzene C-NO2" 6 12.011 3
atom 707 13 CT "Benzonitrile -CH2-" 6 12.011 0
atom 708 46 NC "Neutral Benzamidine N" 7 14.007 2
atom 709 4 O "Propylene Carbonate C=O" 8 15.999 1
atom 710 3 C "Propylene Carbonate C=O" 6 12.011 3
atom 711 29 OS "Propylene Carbonate C-O" 8 15.999 2
atom 712 13 CT "Propylene Carbonate CH2" 6 12.011 4
atom 713 13 CT "Propylene Carbonate CH" 6 12.011 4
atom 714 13 CT "Propylene Carbonate CH3" 6 12.011 4
atom 715 36 HC "Propylene Carbonate CH2" 1 1.008 1
atom 716 36 HC "Propylene Carbonate CH" 1 1.008 1
atom 717 36 HC "Propylene Carbonate CH3" 1 1.008 1
atom 718 29 OS "GTP O-(POn)2" 8 15.999 2
atom 719 94 P+ "Phosphonium R4P+" 15 30.974 4
atom 720 13 CT "Phosphonium CH3-PR3+" 6 12.011 4
atom 721 13 CT "Phosphonium RCH2-PR3+" 6 12.011 4
atom 722 36 HC "Phosphonium CH3-PR3+" 1 1.008 1
atom 723 54 P "Hexafluorophosphate Ion" 15 30.974 6
atom 724 1 F "Hexafluorophosphate Ion" 9 18.998 1
atom 725 35 N "Nitrate Ion NO3-" 7 14.007 3
atom 726 4 O "Nitrate Ion NO3-" 8 15.999 1
atom 727 20 OW "TIP4F Water O" 8 15.999 3
atom 728 21 HW "TIP4F Water H" 1 1.008 1
atom 729 22 LP "TIP4F Water M" 99 0.000 1
atom 730 33 NT "Amine RNH2" 7 14.007 3
atom 731 33 NT "Amine R2NH" 7 14.007 3
atom 732 33 NT "Amine R3N" 7 14.007 3
atom 733 13 CT "Amine CH3-NH2" 6 12.011 4
atom 734 13 CT "Amine CH3-NHR" 6 12.011 4
atom 735 13 CT "Amine CH3-NR2" 6 12.011 4
atom 736 13 CT "Amine RCH2-NH2" 6 12.011 4
atom 737 13 CT "Amine RCH2-NHR" 6 12.011 4
atom 738 13 CT "Amine RCH2-NR2" 6 12.011 4
atom 739 34 H "Amine RNH2" 1 1.008 1
atom 740 34 H "Amine R2NH" 1 1.008 1
atom 741 36 HC "Amine H-C-N" 1 1.008 1
atom 742 13 CT "Amine R2CH-NH2" 6 12.011 4
atom 743 13 CT "Amine R3C-NH2" 6 12.011 4
atom 744 13 CT "Amine R2CH-NHR" 6 12.011 4
atom 745 13 CT "Amine R2CH-NR2" 6 12.011 4
atom 746 38 CA "Aniline C-NH2" 6 12.011 3
atom 747 38 CA "N-Me Aniline C-NHR" 6 12.011 3
atom 748 38 CA "N-DiMe Aniline C-NR2" 6 12.011 3
atom 749 13 CT "Benzyl Amine -CH2NH2" 6 12.011 4
atom 750 13 CT "Benzyl Amine -CHRNH2" 6 12.011 4
atom 751 13 CT "Benzyl Amine -CR2NH2" 6 12.011 4
atom 752 13 CT "Benzyl Ether -CH2OR" 6 12.011 4
atom 753 13 CT "Benzyl Sulfide -CH2SH" 6 12.011 4
atom 754 13 CT "Benzyl Amine -CH2NHR" 6 12.011 4
atom 755 19 CZ "Alkyne HCC-" 6 12.011 2
atom 756 36 HC "Alkyne HCC-" 1 1.008 1
atom 757 19 CZ "Alkyne RCCH R w/ 2/3 H" 6 12.011 2
atom 758 19 CZ "Alkyne RCCH R w/ 1 H" 6 12.011 2
atom 759 19 CZ "Alkyne RCCH R w/ O H/Ph" 6 12.011 2
atom 760 36 HC "Alkyne H-C-CC-" 1 1.008 1
atom 761 41 CO "A & G Sugar C1'" 6 12.011 4
atom 762 41 CO "C Sugar C1'" 6 12.011 4
atom 763 41 CO "U & T Sugar C1'" 6 12.011 4
atom 764 5 OH "Sugar O5'" 8 15.999 5
atom 765 7 HO "Sugar H3' (-OH)" 1 1.008 1
atom 766 95 N* "A & G Nucleoside N9" 7 14.007 3
atom 767 95 N* "C Nucleoside N1" 7 14.007 3
atom 768 95 N* "U & T Nucleoside N1" 7 14.007 3
atom 769 19 CZ "Alkyne RCCR" 6 12.011 2
atom 770 43 N3 "Ammonium R3NH+" 7 14.007 4
atom 771 44 H3 "Ammonium R3NH+" 1 1.008 1
atom 772 13 CT "Ammonium CH3-NHR2+" 6 12.011 4
atom 773 13 CT "Ammonium RCH2-NHR2+" 6 12.011 4
atom 774 13 CT "Ammonium R2CH-NHR2+" 6 12.011 4
atom 775 13 CT "Ammonium R3C-NHR2+" 6 12.011 4
atom 776 74 CW "2-Phenyl Furan C2" 6 12.011 3
atom 777 77 CS "2-Phenyl Furan C3" 6 12.011 3
atom 778 76 C! "2-Phenyl Furan C2'" 6 12.011 3
atom 779 76 C! "2-Phenyl Furan C3'" 6 12.011 3
atom 780 36 HC "GLY Zwitterion HA" 1 1.008 1
atom 781 13 CT "GLY Zwitterion CA" 6 12.011 4
atom 782 3 C "GLY Zwitterion C" 6 12.011 3
atom 783 43 N3 "GLY Zwitterion N" 7 14.007 4
atom 784 42 O2 "GLY Zwitterion O" 8 15.999 1
atom 785 44 H3 "GLY Zwitterion HN" 1 1.008 1
atom 786 1 F "Alkyl Fluoride C-F" 9 18.998 1
atom 787 13 CT "Alkyl Fluoride RCH2-F" 6 12.011 4
atom 788 36 HC "Alkyl Fluoride H-C-F" 1 1.008 1
atom 789 13 CT "Alkyl Fluoride R2CH-F" 6 12.011 4
atom 790 13 CT "Alkyl Fluoride R3C-F" 6 12.011 4
atom 791 13 CT "Perfluoroalkane CF3-" 6 12.011 4
atom 792 13 CT "Perfluoroalkane -CF2-" 6 12.011 4
atom 793 13 CT "Perfluoroalkane >CF-" 6 12.011 4
atom 794 13 CT "Tetrafluoromethane CF4" 6 12.011 4
atom 795 1 F "Perfluoroalkane C-F" 9 18.998 1
atom 796 13 CT "DifluoroMeBenzene -CHF2" 6 12.011 4
atom 797 36 HC "DifluoroMeBenzene -CHF2" 1 1.008 1
atom 798 13 CT "Fluoroacetate FCH2-COO-" 6 12.011 4
atom 799 13 CT "Chloroacetate ClCH2-COO-" 6 12.011 4
atom 800 30 Cl "Alkyl Chloride C-Cl" 17 35.453 1
atom 801 13 CT "Alkyl Chloride RCH2-Cl" 6 12.011 4
atom 802 36 HC "Alkyl Chloride H-C-Cl" 1 1.008 1
atom 803 13 CT "Alkyl Chloride R2CH-Cl" 6 12.011 4
atom 804 13 CT "Alkyl Chloride R3C-Cl" 6 12.011 4
atom 805 55 Br "Alkyl Bromide C-Br" 35 79.904 1
atom 806 13 CT "Alkyl Bromide RCH2-Br" 6 12.011 4
atom 807 36 HC "Alkyl Bromide H-C-Br" 1 1.008 1
atom 808 13 CT "Alkyl Bromide R2CH-Br" 6 12.011 4
atom 809 13 CT "Alkyl Bromide R3C-Br" 6 12.011 4
atom 810 1 F "Acyl Fluoride F-C=O" 9 18.998 1
atom 811 30 Cl "Acyl Chloride Cl-C=O" 17 35.453 1
atom 812 55 Br "Acyl Bromide Br-C=O" 35 79.904 1
atom 813 38 CA "Trifluoroanisole C-OCF3" 6 12.011 3
atom 814 29 OS "Trifluoroanisole -OCF3" 8 15.999 2
atom 815 13 CT "Trifluoroanisole -OCF3" 6 12.011 4
atom 816 1 F "Trifluoroanisole -OCF3" 9 18.998 1
atom 817 35 N "N-Me,N-PhAcetamide N" 7 14.007 3
atom 818 38 CA "N-Me,N-PhAcetamide Cipso" 6 12.011 3
atom 819 13 CT "Benzyl Amine -CH2NR2" 6 12.011 4
atom 820 3 C "Alkyl Hydroxamic Acid C" 6 12.011 3
atom 821 3 C "Aryl Hydroxamic Acid C" 6 12.011 3
atom 822 4 O "Hydroxamic Acid C=O" 8 15.999 1
atom 823 35 N "Hydroxamic Acid N" 7 14.007 3
atom 824 34 H "Hydroxamic Acid HN" 1 1.008 1
atom 825 5 OH "Hydroxamic Acid OH" 8 15.999 2
atom 826 7 HO "Hydroxamic Acid OH" 1 1.008 1
atom 827 13 CT "Benzyl Ether -CHROR" 6 12.011 4
atom 828 13 CT "Benzyl Ether -CR2OR" 6 12.011 4
atom 829 76 C! "3-Phenyl Pyrrole C3" 6 12.011 3
atom 830 76 C! "3-Phenyl Pyrrole C3'" 6 12.011 3
atom 831 76 C! "4-Phenyl Imidazole C4" 6 12.011 3
atom 832 76 C! "4-Phenyl Imidazole C4'" 6 12.011 3
atom 833 38 CA "Diphenylmethane Cipso" 6 12.011 3
atom 834 96 Zn "Zinc Ion Zn+2" 30 0.000 0
atom 835 13 CT "Alkyl Iodide RCH2-I" 6 12.011 4
atom 836 13 CT "Alkyl Iodide R2CH-I" 6 12.011 4
atom 837 13 CT "Alkyl Iodide R3C-I" 6 12.011 4
atom 838 56 I "Alkyl Iodide C-I" 53 126.905 1
atom 839 36 HC "Alkyl Iodide H-C-I" 1 1.008 1
atom 840 35 N "N-Ph Sulfonamide -NHPh" 7 14.007 3
atom 841 38 CA "N-Ph Sulfonamide Cipso" 6 12.011 3
atom 842 38 CA "Benzoate C-COO-" 6 12.011 3
atom 843 35 N "N-Phenyl Urea N" 7 14.007 3
atom 844 38 CA "N-Phenyl Urea Cipso" 6 12.011 3
atom 845 3 C "Tertiary Amide -CO-NR2" 6 12.011 3
atom 846 4 O "Tertiary Amide -CO-NR2" 8 15.999 1
atom 847 97 NM "Tertiary Amide -CO-NR2" 7 14.007 3
atom 848 13 CT "Tertiary Amide -NRCH3" 6 12.011 4
atom 849 13 CT "Tertiary Amide -NRCH2R" 6 12.011 4
atom 850 13 CT "Tertiary Amide -NRCHR2" 6 12.011 4
atom 851 13 CT "Tertiary Amide -NRCR3" 6 12.011 4
atom 852 36 HC "Tertiary Amide H-C-N" 1 1.008 2
atom 853 3 C "Tertiary Formamide C=O" 6 12.011 3
atom 854 4 O "Tertiary Formamide C=O" 8 15.999 1
atom 855 36 HC "Tertiary Formamide H-C=O" 1 1.008 1
atom 856 13 CT "B2-Peptide CA" 6 12.011 4
atom 857 13 CT "B3-Peptide CA Main/N-Ter" 6 12.011 4
atom 858 13 CT "B3-Pep CB GLY Main/C-Ter" 6 12.011 4
atom 859 13 CT "B3-Pep CB ALA Main/C-Ter" 6 12.011 4
atom 860 13 CT "B3-Pep CB PRO Main/C-Ter" 6 12.011 4
atom 861 13 CT "B3-Peptide CA C-Ter" 6 12.011 4
atom 862 13 CT "B3-Peptide CB ALA N-Ter" 6 12.011 4
atom 863 13 CT "B3-Peptide CB GLY N-Ter" 6 12.011 4
atom 864 13 CT "B3-Peptide CB PRO N-Ter" 6 12.011 4
atom 865 13 CT "B3-Peptide CE PRO N-Ter" 6 12.011 4
atom 866 98 Si "Alkyl Silane R4Si" 14 28.086 4
atom 867 98 Si "Alkyl Silane R3SiH" 14 28.086 4
atom 868 98 Si "Alkyl Silane R2SiH2" 14 28.086 4
atom 869 98 Si "Alkyl Silane RSiH3" 14 28.086 4
atom 870 34 H "Alkyl Silane H-C-Si" 1 1.008 1
atom 871 13 CT "Methyl Silane CH3-Si" 6 12.011 4
atom 872 13 CT "Alkyl Silane RCH2-Si" 6 12.011 4
atom 873 13 CT "Alkyl Silane R2CH-Si" 6 12.011 4
atom 874 13 CT "Alkyl Silane R3C-Si" 6 12.011 4
atom 875 1 F "Fluoride Ion (GBSA)" 9 18.998 0
atom 876 30 Cl "Chloride Ion (GBSA)" 17 35.453 0
atom 877 55 Br "Bromide Ion (GBSA)" 35 79.904 0
atom 878 56 I "Iodide Ion (GBSA)" 53 126.905 0
atom 879 58 Li "Lithium Ion (GBSA)" 3 6.941 0
atom 880 59 Na "Sodium Ion (GBSA)" 11 22.990 0
atom 881 60 K "Potassium Ion (GBSA)" 19 39.098 0
atom 882 61 Rb "Rubidium Ion (GBSA)" 37 85.468 0
atom 883 62 Cs "Cesium Ion (GBSA)" 55 132.905 0
atom 884 63 Mg "Magnesium Ion (GBSA)" 12 24.305 0
atom 885 64 Ca "Calcium Ion (GBSA)" 20 40.080 0
atom 886 65 Sr "Strontium Ion (GBSA)" 38 87.620 0
atom 887 66 Ba "Barium Ion (GBSA)" 56 137.330 0
atom 888 13 CT "Ammonium CH3-NR3+" 6 12.011 4
atom 889 13 CT "Ammonium RCH2-NR3+" 6 12.011 4
atom 890 13 CT "Ammonium R2CH-NR3+" 6 12.011 4
atom 891 13 CT "Ammonium R3C-NR3+" 6 12.011 4
atom 892 36 HC "Ammonium CH3-NR3+" 1 1.008 1
atom 893 43 N3 "Anilinium Ar-NR3+" 7 14.007 4
atom 894 38 CA "Anilinium C-NR3+" 6 12.011 3
atom 895 43 N3 "Anilinium Ar-NHR2+" 7 14.007 4
atom 896 38 CA "Anilinium C-NHR2+" 6 12.011 3
atom 897 99 Ctr "Triene R2-C= (mid C=C)" 6 12.011 3
atom 898 99 Ctr "Triene RH-C= (mid C=C)" 6 12.011 3
atom 899 36 HC "Allene/Ketene H-C=C=X" 1 1.008 1
atom 900 37 CM "Allene/Ketene H2C=C=X" 6 12.011 3
atom 901 37 CM "Allene/Ketene HRC=C=X" 6 12.011 3
atom 902 37 CM "Allene/Ketene R2C=C=X" 6 12.011 3
atom 903 100 C: "Allene =C=" 6 12.011 2
atom 904 100 C: "Ketene =C=" 6 12.011 2
atom 905 4 O "Ketene C=O" 8 15.999 1
atom 906 13 CT "N-Me-HIS CB" 6 12.011 4
################################
## ##
## Van der Waals Parameters ##
## ##
################################
vdw 1 2.9400 0.0610
vdw 2 3.9050 0.1180
vdw 3 3.7500 0.1050
vdw 4 2.9600 0.2100
vdw 5 3.0000 0.1700
vdw 6 3.9100 0.1600
vdw 7 0.0000 0.0000
vdw 8 3.7300 0.2940
vdw 9 3.7750 0.2070
vdw 10 3.9050 0.1750
vdw 11 3.9100 0.1600
vdw 12 3.9600 0.1450
vdw 13 3.9050 0.1180
vdw 14 3.8500 0.1400
vdw 15 3.8500 0.0800
vdw 16 3.8000 0.1150
vdw 17 3.7500 0.1100
vdw 18 3.8000 0.0500
vdw 19 3.7500 0.1050
vdw 20 3.0700 0.1700
vdw 21 0.0000 0.0000
vdw 22 3.7750 0.2070
vdw 23 3.9050 0.1180
vdw 24 3.7000 0.2500
vdw 25 3.5500 0.2500
vdw 26 3.5500 0.2500
vdw 27 3.5500 0.2500
vdw 28 0.0000 0.0000
vdw 29 0.0000 0.0000
vdw 30 3.7750 0.2070
vdw 31 3.9050 0.1180
vdw 32 3.8000 0.1700
vdw 33 3.8000 0.1180
vdw 34 3.8000 0.1700
vdw 35 3.8000 0.1180
vdw 36 3.2000 0.1700
vdw 37 3.6500 0.1500
vdw 38 3.7750 0.2070
vdw 39 3.1200 0.1600
vdw 40 0.0000 0.0000
vdw 41 0.0000 0.0000
vdw 42 0.0000 0.0000
vdw 43 2.5560 0.0200
vdw 44 2.7800 0.0690
vdw 45 3.4010 0.2339
vdw 46 3.6240 0.3170
vdw 47 3.9350 0.4330
vdw 48 3.8500 0.0800
vdw 49 3.8000 0.0500
vdw 50 3.0000 0.1700
vdw 51 3.8000 0.1700
vdw 52 3.8000 0.1180
vdw 53 3.15061 0.1521
vdw 54 0.0000 0.0000
vdw 55 3.15365 0.1550
vdw 56 0.0000 0.0000
vdw 57 0.0000 0.0000
vdw 58 3.1760 0.1500
vdw 59 0.0000 0.0000
vdw 60 3.8000 0.1180
vdw 61 3.4000 0.3000
vdw 62 3.8000 0.0800
vdw 63 3.4700 0.3000
vdw 64 3.8000 0.0500
vdw 65 3.4700 0.2660
vdw 66 3.5600 0.3950
vdw 67 2.9300 0.2800
vdw 68 3.8100 0.1600
vdw 69 3.4200 0.1700
vdw 70 0.0000 0.0000
vdw 71 2.9600 0.2100
vdw 72 3.2500 0.1700
vdw 73 3.8000 0.1150
vdw 74 3.8000 0.1700
vdw 75 3.16557 0.1554
vdw 76 0.0000 0.0000
vdw 77 3.5000 0.0660
vdw 78 3.5000 0.0660
vdw 79 3.5000 0.0660
vdw 80 3.5000 0.0660
vdw 81 3.5000 0.0660
vdw 82 2.5000 0.0300
vdw 83 3.5500 0.0760
vdw 84 3.5500 0.0760
vdw 85 3.5500 0.0760
vdw 86 2.4200 0.0300
vdw 87 3.5500 0.0700
vdw 88 2.4200 0.0300
vdw 89 3.5500 0.0700
vdw 90 3.5000 0.0660
vdw 91 3.5000 0.0660
vdw 92 3.5500 0.0760
vdw 93 3.1200 0.1700
vdw 94 0.0000 0.0000
vdw 95 2.5000 0.0300
vdw 96 3.5000 0.0660
vdw 97 3.5000 0.0660
vdw 98 3.5000 0.0660
vdw 99 3.5000 0.0660
vdw 100 3.2500 0.0620
vdw 101 3.0700 0.1700
vdw 102 0.0000 0.0000
vdw 103 2.9400 0.0610
vdw 104 2.5000 0.0300
vdw 105 3.5500 0.0700
vdw 106 3.0700 0.1700
vdw 107 0.0000 0.0000
vdw 108 3.0700 0.1700
vdw 109 0.0000 0.0000
vdw 110 3.0700 0.1700
vdw 111 0.0000 0.0000
vdw 112 3.5000 0.0660
vdw 113 3.5000 0.0660
vdw 114 3.5000 0.0660
vdw 115 2.5000 0.0300
vdw 116 2.9000 0.1400
vdw 117 3.5500 0.0760
vdw 118 2.9000 0.1400
vdw 119 2.9000 0.1400
vdw 120 3.5000 0.0660
vdw 121 3.5000 0.0660
vdw 122 3.5000 0.0660
vdw 123 3.5000 0.0660
vdw 124 2.5000 0.0300
vdw 125 2.9000 0.1400
vdw 126 3.0700 0.1700
vdw 127 0.0000 0.0000
vdw 128 3.5000 0.0660
vdw 129 2.5000 0.0300
vdw 130 3.5000 0.0660
vdw 131 2.5000 0.0300
vdw 132 3.5000 0.0660
vdw 133 2.5000 0.0300
vdw 134 3.5000 0.0660
vdw 135 2.5000 0.0300
vdw 136 3.5000 0.0660
vdw 137 3.5000 0.0660
vdw 138 3.5500 0.0700
vdw 139 3.5500 0.2500
vdw 140 3.7000 0.2500
vdw 141 3.5500 0.2500
vdw 142 3.5500 0.2500
vdw 143 0.0000 0.0000
vdw 144 0.0000 0.0000
vdw 145 3.5000 0.0660
vdw 146 3.5000 0.0660
vdw 147 3.5000 0.0660
vdw 148 3.5000 0.0660
vdw 149 3.5000 0.0660
vdw 150 3.5000 0.0660
vdw 151 3.5000 0.0660
vdw 152 3.5000 0.0660
vdw 153 3.5000 0.0660
vdw 154 3.5000 0.0660
vdw 155 3.5000 0.0660
vdw 156 3.5000 0.0660
vdw 157 3.5000 0.0660
vdw 158 3.5000 0.0660
vdw 159 3.5000 0.0660
vdw 160 3.5500 0.0700
vdw 161 3.5500 0.2500
vdw 162 3.5000 0.0660
vdw 163 3.5000 0.0660
vdw 164 3.5000 0.0660
vdw 165 3.4000 0.3000
vdw 166 3.5500 0.0760
vdw 167 3.5500 0.0700
vdw 168 3.5000 0.0660
vdw 169 3.5000 0.0660
vdw 170 3.7500 0.1050
vdw 171 3.7500 0.1050
vdw 172 3.7500 0.1050
vdw 173 3.7500 0.1050
vdw 174 3.7500 0.1050
vdw 175 2.9600 0.2100
vdw 176 3.2500 0.1700
vdw 177 3.2500 0.1700
vdw 178 3.2500 0.1700
vdw 179 0.0000 0.0000
vdw 180 0.0000 0.0000
vdw 181 3.5000 0.0660
vdw 182 3.5000 0.0660
vdw 183 3.5000 0.0660
vdw 184 3.5000 0.0660
vdw 185 3.5000 0.0660
vdw 186 3.7500 0.1050
vdw 187 2.9600 0.2100
vdw 188 3.2500 0.1700
vdw 189 0.0000 0.0000
vdw 190 3.2500 0.1700
vdw 191 3.7500 0.1050
vdw 192 2.9600 0.2100
vdw 193 0.0000 0.0000
vdw 194 2.5000 0.0200
vdw 195 3.5000 0.0660
vdw 196 3.5000 0.0660
vdw 197 3.5000 0.0660
vdw 198 3.5000 0.0660
vdw 199 3.5500 0.0700
vdw 200 3.6500 0.1500
vdw 201 3.2000 0.1700
vdw 202 3.5500 0.0700
vdw 203 3.4000 0.3000
vdw 204 3.2500 0.1700
vdw 205 3.5500 0.0700
vdw 206 3.7500 0.1050
vdw 207 3.0000 0.1700
vdw 208 2.9600 0.2100
vdw 209 0.0000 0.0000
vdw 210 3.7500 0.1050
vdw 211 2.9600 0.2100
vdw 212 3.5000 0.0660
vdw 213 3.5000 0.0660
vdw 214 3.5000 0.0660
vdw 215 3.5000 0.0660
vdw 216 3.7500 0.1050
vdw 217 2.9600 0.2100
vdw 218 2.4200 0.0150
vdw 219 3.7500 0.1050
vdw 220 2.9600 0.2100
vdw 221 2.4200 0.0150
vdw 222 3.5000 0.0660
vdw 223 3.5000 0.0660
vdw 224 3.5000 0.0660
vdw 225 3.5000 0.0660
vdw 226 3.2500 0.1700
vdw 227 3.2500 0.1700
vdw 228 3.2500 0.1700
vdw 229 0.0000 0.0000
vdw 230 0.0000 0.0000
vdw 231 3.5000 0.0660
vdw 232 3.5000 0.0660
vdw 233 3.5000 0.0660
vdw 234 3.5000 0.0660
vdw 235 3.5000 0.0660
vdw 236 3.5000 0.0660
vdw 237 3.5000 0.0660
vdw 238 3.5000 0.0660
vdw 239 3.5000 0.0660
vdw 240 3.2500 0.1700
vdw 241 0.0000 0.0000
vdw 242 3.5500 0.0500
vdw 243 3.2500 0.1700
vdw 244 0.0000 0.0000
vdw 245 3.5000 0.0660
vdw 246 3.5000 0.0660
vdw 247 3.5000 0.0660
vdw 248 3.5000 0.0660
vdw 249 3.2500 0.1700
vdw 250 0.0000 0.0000
vdw 251 3.2500 0.1700
vdw 252 3.5000 0.0800
vdw 253 3.2500 0.1700
vdw 254 0.0000 0.0000
vdw 255 3.5000 0.0800
vdw 256 2.5000 0.0500
vdw 257 3.5000 0.0800
vdw 258 2.5000 0.0500
vdw 259 3.2500 0.1700
vdw 260 3.7500 0.1050
vdw 261 3.2500 0.1700
vdw 262 3.7500 0.1050
vdw 263 3.5000 0.0800
vdw 264 3.5000 0.0800
vdw 265 0.0000 0.0000
vdw 266 2.9600 0.2100
vdw 267 0.0000 0.0000
vdw 268 2.9600 0.2100
vdw 269 2.5000 0.0500
vdw 270 2.5000 0.0500
vdw 271 3.5000 0.0800
vdw 272 2.5000 0.0500
vdw 273 3.2500 0.1700
vdw 274 3.7500 0.1050
vdw 275 3.2500 0.1700
vdw 276 3.5000 0.0800
vdw 277 3.5000 0.0800
vdw 278 3.5000 0.0800
vdw 279 0.0000 0.0000
vdw 280 2.9600 0.2100
vdw 281 3.2500 0.1700
vdw 282 0.0000 0.0000
vdw 283 0.0000 0.0000
vdw 284 2.5000 0.0500
vdw 285 2.5000 0.0500
vdw 286 3.2500 0.1700
vdw 287 3.5000 0.0800
vdw 288 3.2500 0.1700
vdw 289 3.5000 0.0800
vdw 290 3.5000 0.0800
vdw 291 3.5000 0.0800
vdw 292 3.2500 0.1700
vdw 293 3.5000 0.0800
vdw 294 3.2500 0.1700
vdw 295 2.5000 0.0500
vdw 296 3.2500 0.1700
vdw 297 0.0000 0.0000
vdw 298 0.0000 0.0000
vdw 299 2.5000 0.0500
vdw 300 0.0000 0.0000
vdw 301 3.2500 0.1700
vdw 302 3.5000 0.0800
vdw 303 3.2500 0.1700
vdw 304 3.5000 0.0800
vdw 305 3.5000 0.0800
vdw 306 3.7500 0.1050
vdw 307 0.0000 0.0000
vdw 308 3.2500 0.1700
vdw 309 0.0000 0.0000
vdw 310 2.9600 0.2100
vdw 311 3.5000 0.0800
vdw 312 2.5000 0.0500
vdw 313 3.5000 0.0800
vdw 314 2.5000 0.0500
vdw 315 3.5000 0.0800
vdw 316 2.5000 0.0500
vdw 317 3.2500 0.1700
vdw 318 3.7500 0.1050
vdw 319 3.2500 0.1700
vdw 320 3.5000 0.0800
vdw 321 3.5000 0.0800
vdw 322 3.5000 0.0800
vdw 323 0.0000 0.0000
vdw 324 2.9600 0.2100
vdw 325 0.0000 0.0000
vdw 326 3.2500 0.1700
vdw 327 0.0000 0.0000
vdw 328 0.0000 0.0000
vdw 329 2.5000 0.0500
vdw 330 2.5000 0.0500
vdw 331 3.5000 0.0800
vdw 332 2.5000 0.0500
vdw 333 3.7400 0.2000
vdw 334 2.9600 0.2100
vdw 335 3.0000 0.1700
vdw 336 3.5500 0.0660
vdw 337 3.5000 0.0800
vdw 338 3.4000 0.3000
vdw 339 3.5500 0.0760
vdw 340 3.0500 0.7100
vdw 341 4.0200 0.7100
vdw 342 4.2800 0.7100
vdw 343 4.8100 0.7100
vdw 344 5.3400 0.0005
vdw 345 2.8700 0.0005
vdw 346 4.0700 0.0005
vdw 347 5.1700 0.0005
vdw 348 5.6000 0.0005
vdw 349 6.2000 0.0005
vdw 350 1.644471 0.875044
vdw 351 2.412031 0.449657
vdw 352 3.102688 0.118226
vdw 353 3.816610 0.047096
vdw 354 4.2000 0.3000
vdw 355 2.5000 0.0500
vdw 356 4.2500 0.5000
vdw 357 4.2000 0.3000
vdw 358 2.5000 0.0500
vdw 359 3.1500 0.2500
vdw 360 4.2000 0.3000
vdw 361 2.5000 0.0500
vdw 362 3.6500 0.1500
vdw 363 3.4000 0.2500
vdw 364 4.2000 0.3000
vdw 365 2.5000 0.0500
vdw 366 3.4000 0.2500
vdw 367 2.5000 0.0500
vdw 368 4.2000 0.3000
vdw 369 2.5000 0.0500
vdw 370 4.2000 0.3000
vdw 371 2.5000 0.0500
vdw 372 0.0000 0.0000
vdw 373 3.2000 0.2500
vdw 374 0.0000 0.0000
vdw 375 2.81524 0.4000
vdw 376 3.11815 0.2000
vdw 377 2.9000 0.1400
vdw 378 3.7400 0.2000
vdw 379 3.1500 0.2000
vdw 380 2.9000 0.1400
vdw 381 3.5000 0.0660
vdw 382 2.5000 0.0300
vdw 383 3.7400 0.2000
vdw 384 3.1500 0.2000
vdw 385 2.9000 0.1400
vdw 386 3.5000 0.0660
vdw 387 2.5000 0.0300
vdw 388 3.7400 0.2000
vdw 389 3.1500 0.2000
vdw 390 2.9000 0.1400
vdw 391 3.5000 0.0660
vdw 392 2.5000 0.0300
vdw 393 3.5000 0.0660
vdw 394 2.5000 0.0300
vdw 395 3.5500 0.0700
vdw 396 3.5000 0.0660
vdw 397 2.5000 0.0300
vdw 398 3.5500 0.0700
vdw 399 3.5000 0.0660
vdw 400 2.5000 0.0300
vdw 401 3.5500 0.0700
vdw 402 3.5000 0.0660
vdw 403 3.7500 0.1050
vdw 404 2.9600 0.2100
vdw 405 3.0000 0.1700
vdw 406 3.5000 0.0660
vdw 407 2.4200 0.0150
vdw 408 3.7500 0.1050
vdw 409 3.7500 0.1050
vdw 410 3.5500 0.0700
vdw 411 3.0000 0.1700
vdw 412 3.5500 0.2500
vdw 413 2.9600 0.1700
vdw 414 3.5000 0.0660
vdw 415 2.5000 0.0300
vdw 416 3.2500 0.1700
vdw 417 0.0000 0.0000
vdw 418 3.2500 0.1700
vdw 419 0.0000 0.0000
vdw 420 3.5000 0.0660
vdw 421 2.5000 0.0300
vdw 422 3.5000 0.0660
vdw 423 2.5000 0.0300
vdw 424 3.5000 0.0660
vdw 425 2.5000 0.0300
vdw 426 3.5500 0.0700
vdw 427 3.5500 0.0700
vdw 428 3.5000 0.0660
vdw 429 3.5000 0.0660
vdw 430 3.5000 0.0660
vdw 431 3.5500 0.2500
vdw 432 2.9600 0.1700
vdw 433 3.5600 0.3950
vdw 434 3.5600 0.3950
vdw 435 2.9300 0.2800
vdw 436 3.5000 0.0660
vdw 437 3.5000 0.0660
vdw 438 3.5500 0.0700
vdw 439 3.5500 0.0700
vdw 440 3.5500 0.0700
vdw 441 3.2500 0.1700
vdw 442 0.0000 0.0000
vdw 443 3.5000 0.0660
vdw 444 3.5500 0.0700
vdw 445 3.5500 0.0700
vdw 446 3.5500 0.0700
vdw 447 3.5500 0.0700
vdw 448 3.5500 0.0700
vdw 449 3.2500 0.1700
vdw 450 3.2500 0.1700
vdw 451 0.0000 0.0000
vdw 452 3.5500 0.0700
vdw 453 3.5000 0.0660
vdw 454 3.5000 0.0660
vdw 455 3.5500 0.0760
vdw 456 3.5500 0.0760
vdw 457 3.5500 0.0700
vdw 458 3.2500 0.1700
vdw 459 3.5500 0.0700
vdw 460 3.5500 0.0700
vdw 461 3.5500 0.0700
vdw 462 2.4200 0.0300
vdw 463 2.4200 0.0300
vdw 464 2.4200 0.0300
vdw 465 3.2500 0.1700
vdw 466 3.5500 0.0700
vdw 467 2.4200 0.0300
vdw 468 3.2500 0.1700
vdw 469 3.5500 0.0700
vdw 470 3.5500 0.0700
vdw 471 3.5500 0.0700
vdw 472 2.4200 0.0300
vdw 473 2.4200 0.0300
vdw 474 2.4200 0.0300
vdw 475 3.2500 0.1700
vdw 476 3.5500 0.0700
vdw 477 3.5500 0.0700
vdw 478 2.4200 0.0300
vdw 479 2.4200 0.0300
vdw 480 3.2500 0.1700
vdw 481 3.5500 0.0700
vdw 482 3.5500 0.0700
vdw 483 0.0000 0.0000
vdw 484 2.4200 0.0300
vdw 485 2.4200 0.0300
vdw 486 3.2500 0.1700
vdw 487 3.2500 0.1700
vdw 488 3.5500 0.0700
vdw 489 3.5500 0.0700
vdw 490 3.5500 0.0700
vdw 491 0.0000 0.0000
vdw 492 2.4200 0.0300
vdw 493 2.4200 0.0300
vdw 494 2.4200 0.0300
vdw 495 3.2500 0.1700
vdw 496 3.5500 0.0700
vdw 497 3.2500 0.1700
vdw 498 3.5500 0.0700
vdw 499 3.5500 0.0700
vdw 500 0.0000 0.0000
vdw 501 2.4200 0.0300
vdw 502 2.4200 0.0300
vdw 503 2.4200 0.0300
vdw 504 2.9000 0.1400
vdw 505 3.5500 0.0700
vdw 506 3.5500 0.0760
vdw 507 2.4200 0.0300
vdw 508 2.4200 0.0300
vdw 509 2.9000 0.1400
vdw 510 3.5500 0.0700
vdw 511 3.2500 0.1700
vdw 512 3.5500 0.0700
vdw 513 3.5500 0.0700
vdw 514 2.4200 0.0300
vdw 515 2.4200 0.0300
vdw 516 2.4200 0.0300
vdw 517 2.9000 0.1400
vdw 518 3.2500 0.1700
vdw 519 3.5500 0.0700
vdw 520 3.5500 0.0700
vdw 521 3.5500 0.0700
vdw 522 2.4200 0.0300
vdw 523 2.4200 0.0300
vdw 524 2.4200 0.0300
vdw 525 3.2500 0.1700
vdw 526 3.5500 0.0700
vdw 527 3.5500 0.0700
vdw 528 3.5500 0.0700
vdw 529 3.5500 0.0700
vdw 530 3.5500 0.0700
vdw 531 3.5500 0.0700
vdw 532 3.5500 0.0700
vdw 533 3.5500 0.0700
vdw 534 0.0000 0.0000
vdw 535 2.4200 0.0300
vdw 536 2.4200 0.0300
vdw 537 2.4200 0.0300
vdw 538 2.4200 0.0300
vdw 539 2.4200 0.0300
vdw 540 2.4200 0.0300
vdw 541 3.2500 0.1700
vdw 542 3.5500 0.0700
vdw 543 3.5500 0.0700
vdw 544 3.5500 0.0700
vdw 545 3.5500 0.0700
vdw 546 3.5500 0.0700
vdw 547 3.5500 0.0700
vdw 548 3.5500 0.0700
vdw 549 3.5500 0.0700
vdw 550 3.5500 0.0700
vdw 551 2.4200 0.0300
vdw 552 2.4200 0.0300
vdw 553 2.4200 0.0300
vdw 554 2.4200 0.0300
vdw 555 2.4200 0.0300
vdw 556 2.4200 0.0300
vdw 557 2.4200 0.0300
vdw 558 3.2500 0.1700
vdw 559 3.5500 0.0700
vdw 560 3.2500 0.1700
vdw 561 3.5500 0.0700
vdw 562 3.5500 0.0700
vdw 563 3.5500 0.0700
vdw 564 3.2500 0.1700
vdw 565 3.5500 0.0700
vdw 566 3.2500 0.1700
vdw 567 2.4200 0.0300
vdw 568 2.4200 0.0300
vdw 569 2.4200 0.0300
vdw 570 0.0000 0.0000
vdw 571 3.5500 0.2500
vdw 572 3.5500 0.0700
vdw 573 3.2500 0.1700
vdw 574 3.5500 0.0700
vdw 575 3.5500 0.0700
vdw 576 2.4200 0.0300
vdw 577 2.4200 0.0300
vdw 578 2.4200 0.0300
vdw 579 3.2500 0.1700
vdw 580 3.5500 0.0700
vdw 581 2.4200 0.0300
vdw 582 3.5500 0.0700
vdw 583 3.5000 0.0660
vdw 584 3.2500 0.1700
vdw 585 3.5500 0.0700
vdw 586 3.5500 0.0700
vdw 587 3.5500 0.0700
vdw 588 3.5500 0.0700
vdw 589 3.5500 0.0700
vdw 590 3.5500 0.0700
vdw 591 2.4200 0.0300
vdw 592 2.4200 0.0300
vdw 593 2.4200 0.0300
vdw 594 2.4200 0.0300
vdw 595 3.2500 0.1700
vdw 596 3.5500 0.0700
vdw 597 3.2500 0.1700
vdw 598 3.5500 0.0700
vdw 599 3.5500 0.0700
vdw 600 3.5000 0.0660
vdw 601 2.4200 0.0300
vdw 602 2.4200 0.0300
vdw 603 2.4200 0.0300
vdw 604 2.5000 0.0300
vdw 605 3.5000 0.0660
vdw 606 3.5000 0.0660
vdw 607 3.5000 0.0660
vdw 608 3.5000 0.0660
vdw 609 3.5000 0.0660
vdw 610 3.5000 0.0660
vdw 611 3.5000 0.0660
vdw 612 3.5000 0.0660
vdw 613 3.5000 0.0660
vdw 614 3.5000 0.0660
vdw 615 3.5000 0.0660
vdw 616 3.5000 0.0660
vdw 617 3.5000 0.0660
vdw 618 3.5000 0.0660
vdw 619 3.5000 0.0660
vdw 620 3.5500 0.2500
vdw 621 0.0000 0.0000
vdw 622 3.5500 0.0700
vdw 623 3.7500 0.1050
vdw 624 3.2500 0.1700
vdw 625 3.5000 0.0660
vdw 626 3.5000 0.0660
vdw 627 3.5000 0.0660
vdw 628 3.5500 0.0700
vdw 629 3.5500 0.0700
vdw 630 3.5500 0.0700
vdw 631 3.5500 0.0700
vdw 632 3.5500 0.0700
vdw 633 3.5500 0.0700
vdw 634 3.5500 0.2500
vdw 635 3.4730 0.0540
vdw 636 3.3000 0.0500
vdw 637 3.3000 0.0500
vdw 638 3.5500 0.0760
vdw 639 3.5000 0.0660
vdw 640 2.5000 0.0300
vdw 641 3.7500 0.0600
vdw 642 3.4730 0.0540
vdw 643 3.3000 0.0500
vdw 644 3.3000 0.0500
vdw 645 2.9500 0.0400
vdw 646 3.5500 0.0760
vdw 647 3.4000 0.3000
vdw 648 2.4200 0.0300
vdw 649 3.5000 0.0660
vdw 650 3.5000 0.0660
vdw 651 3.5000 0.0660
vdw 652 3.5500 0.0700
vdw 653 2.4200 0.0300
vdw 654 3.5500 0.0700
vdw 655 2.4200 0.0300
vdw 656 3.5500 0.0700
vdw 657 2.8500 0.0610
vdw 658 3.5500 0.0700
vdw 659 2.8500 0.0610
vdw 660 3.4700 0.4700
vdw 661 3.9050 0.1180
vdw 662 3.5500 0.0700
vdw 663 3.2500 0.0620
vdw 664 2.9400 0.0610
vdw 665 3.5500 0.0700
vdw 666 2.8500 0.0610
vdw 667 3.5500 0.0700
vdw 668 3.4700 0.4700
vdw 669 3.5500 0.0700
vdw 670 3.7500 0.6000
vdw 671 3.5000 0.0660
vdw 672 3.5500 0.2500
vdw 673 3.5500 0.0700
vdw 674 3.5500 0.0700
vdw 675 3.5500 0.0700
vdw 676 3.5500 0.0700
vdw 677 3.5500 0.0700
vdw 678 2.4200 0.0300
vdw 679 2.4200 0.0300
vdw 680 3.5500 0.0500
vdw 681 3.2500 0.1700
vdw 682 0.0000 0.0000
vdw 683 0.0000 0.0000
vdw 684 2.4200 0.0300
vdw 685 3.5000 0.0660
vdw 686 3.5000 0.0660
vdw 687 3.2500 0.1700
vdw 688 3.2500 0.1700
vdw 689 3.2500 0.1700
vdw 690 3.5500 0.0500
vdw 691 3.2000 0.1700
vdw 692 3.3000 0.0660
vdw 693 3.3000 0.0660
vdw 694 3.3000 0.0660
vdw 695 3.3000 0.0660
vdw 696 3.3000 0.0660
vdw 697 2.5000 0.0150
vdw 698 3.2500 0.1200
vdw 699 2.9600 0.1700
vdw 700 3.5000 0.0660
vdw 701 2.5000 0.0150
vdw 702 3.5000 0.0660
vdw 703 3.5000 0.0660
vdw 704 3.5000 0.0660
vdw 705 3.2500 0.1200
vdw 706 3.5500 0.0700
vdw 707 3.3000 0.0660
vdw 708 3.2500 0.1700
vdw 709 2.9600 0.2100
vdw 710 3.7500 0.1050
vdw 711 3.0000 0.1700
vdw 712 3.5000 0.0660
vdw 713 3.5000 0.0660
vdw 714 3.5000 0.0660
vdw 715 2.4200 0.0150
vdw 716 2.4200 0.0150
vdw 717 2.4200 0.0150
vdw 718 2.9000 0.1400
vdw 719 3.7400 0.2000
vdw 720 3.5000 0.0660
vdw 721 3.5000 0.0660
vdw 722 2.5000 0.0300
vdw 723 3.7400 0.2000
vdw 724 3.1181 0.0610
vdw 725 3.1500 0.1700
vdw 726 2.8600 0.2100
vdw 727 3.2700 0.1000
vdw 728 0.0000 0.0000
vdw 729 0.0000 0.0000
vdw 730 3.3000 0.1700
vdw 731 3.3000 0.1700
vdw 732 3.3000 0.1700
vdw 733 3.5000 0.0660
vdw 734 3.5000 0.0660
vdw 735 3.5000 0.0660
vdw 736 3.5000 0.0660
vdw 737 3.5000 0.0660
vdw 738 3.5000 0.0660
vdw 739 0.0000 0.0000
vdw 740 0.0000 0.0000
vdw 741 2.5000 0.0150
vdw 742 3.5000 0.0660
vdw 743 3.5000 0.0660
vdw 744 3.5000 0.0660
vdw 745 3.5000 0.0660
vdw 746 3.5500 0.0700
vdw 747 3.5500 0.0700
vdw 748 3.5500 0.0700
vdw 749 3.5000 0.0660
vdw 750 3.5000 0.0660
vdw 751 3.5000 0.0660
vdw 752 3.5000 0.0660
vdw 753 3.5000 0.0660
vdw 754 3.5000 0.0660
vdw 755 3.3000 0.0860
vdw 756 2.4200 0.0150
vdw 757 3.3000 0.2100
vdw 758 3.3000 0.1350
vdw 759 3.3000 0.1000
vdw 760 2.5000 0.0150
vdw 761 3.5000 0.0660
vdw 762 3.5000 0.0660
vdw 763 3.5000 0.0660
vdw 764 3.1200 0.1700
vdw 765 0.0000 0.0000
vdw 766 3.2500 0.1700
vdw 767 3.2500 0.1700
vdw 768 3.2500 0.1700
vdw 769 3.3000 0.2100
vdw 770 3.2500 0.1700
vdw 771 0.0000 0.0000
vdw 772 3.5000 0.0660
vdw 773 3.5000 0.0660
vdw 774 3.5000 0.0660
vdw 775 3.5000 0.0660
vdw 776 3.5500 0.0700
vdw 777 3.5500 0.0760
vdw 778 3.5500 0.0700
vdw 779 3.5500 0.0700
vdw 780 2.5000 0.0300
vdw 781 3.5000 0.0660
vdw 782 3.7500 0.1050
vdw 783 3.2500 0.1700
vdw 784 2.9600 0.2100
vdw 785 0.0000 0.0000
vdw 786 2.9400 0.0610
vdw 787 3.5000 0.0660
vdw 788 2.5000 0.0300
vdw 789 3.5000 0.0660
vdw 790 3.5000 0.0660
vdw 791 3.5000 0.0660
vdw 792 3.5000 0.0660
vdw 793 3.5000 0.0660
vdw 794 3.5000 0.0970
vdw 795 2.9500 0.0530
vdw 796 3.2500 0.0620
vdw 797 2.5000 0.0300
vdw 798 3.5000 0.0660
vdw 799 3.5000 0.0660
vdw 800 3.4000 0.3000
vdw 801 3.5000 0.0660
vdw 802 2.5000 0.0300
vdw 803 3.5000 0.0660
vdw 804 3.5000 0.0660
vdw 805 3.4700 0.4700
vdw 806 3.5000 0.0660
vdw 807 2.5000 0.0300
vdw 808 3.5000 0.0660
vdw 809 3.5000 0.0660
vdw 810 2.9400 0.0610
vdw 811 3.4000 0.3000
vdw 812 3.4700 0.4700
vdw 813 3.5500 0.0700
vdw 814 2.9000 0.1400
vdw 815 3.5000 0.0660
vdw 816 2.9000 0.0600
vdw 817 3.2500 0.1700
vdw 818 3.5500 0.0700
vdw 819 3.5000 0.0660
vdw 820 3.7500 0.1050
vdw 821 3.7500 0.1050
vdw 822 2.9600 0.2100
vdw 823 3.2500 0.1700
vdw 824 0.0000 0.0000
vdw 825 3.1200 0.1700
vdw 826 0.0000 0.0000
vdw 827 3.5000 0.0660
vdw 828 3.5000 0.0660
vdw 829 3.5500 0.0700
vdw 830 3.5500 0.0700
vdw 831 3.5500 0.0700
vdw 832 3.5500 0.0700
vdw 833 3.5500 0.0700
vdw 834 1.9600 0.0125
vdw 835 3.5000 0.0660
vdw 836 3.5000 0.0660
vdw 837 3.5000 0.0660
vdw 838 3.7500 0.6000
vdw 839 2.5000 0.0300
vdw 840 3.2500 0.1700
vdw 841 3.5500 0.0700
vdw 842 3.5500 0.0700
vdw 843 3.2500 0.1700
vdw 844 3.5500 0.0700
vdw 845 3.7500 0.1050
vdw 846 2.9600 0.2100
vdw 847 3.2500 0.1700
vdw 848 3.5000 0.0660
vdw 849 3.5000 0.0660
vdw 850 3.5000 0.0660
vdw 851 3.5000 0.0660
vdw 852 2.4200 0.0150
vdw 853 3.7500 0.1050
vdw 854 2.9600 0.2100
vdw 855 2.4200 0.0150
vdw 856 3.5000 0.0660
vdw 857 3.5000 0.0660
vdw 858 3.5000 0.0660
vdw 859 3.5000 0.0660
vdw 860 3.5000 0.0660
vdw 861 3.5000 0.0660
vdw 862 3.5000 0.0660
vdw 863 3.5000 0.0660
vdw 864 3.5000 0.0660
vdw 865 3.5000 0.0660
vdw 866 4.0000 0.1000
vdw 867 4.0000 0.1000
vdw 868 4.0000 0.1000
vdw 869 4.0000 0.1000
vdw 870 2.5000 0.0300
vdw 871 3.5000 0.0660
vdw 872 3.5000 0.0660
vdw 873 3.5000 0.0660
vdw 874 3.5000 0.0660
vdw 875 3.0800 0.7200
vdw 876 4.1800 0.11779
vdw 877 4.5100 0.0900
vdw 878 5.1500 0.0700
vdw 879 2.7000 0.018279
vdw 880 3.3500 0.002772
vdw 881 4.0600 0.000328
vdw 882 4.3200 0.000171
vdw 883 4.8200 0.000081
vdw 884 2.9100 0.875044
vdw 885 3.4700 0.449657
vdw 886 3.8200 0.118226
vdw 887 4.1800 0.047096
vdw 888 3.5000 0.0660
vdw 889 3.5000 0.0660
vdw 890 3.5000 0.0660
vdw 891 3.5000 0.0660
vdw 892 2.5000 0.0300
vdw 893 3.2500 0.1700
vdw 894 3.5500 0.0700
vdw 895 3.2500 0.1700
vdw 896 3.5500 0.0700
vdw 897 3.5500 0.0760
vdw 898 3.5500 0.0760
vdw 899 2.4200 0.0300
vdw 900 3.3000 0.0860
vdw 901 3.3000 0.0860
vdw 902 3.3000 0.0860
vdw 903 3.3000 0.0860
vdw 904 3.3000 0.0860
vdw 905 2.9600 0.2100
vdw 906 3.5000 0.0660
##################################
## ##
## Bond Stretching Parameters ##
## ##
##################################
bond 1 2 367.00 1.3800
bond 1 3 420.00 1.3570
bond 1 13 367.00 1.3600
bond 1 19 450.00 1.2790
bond 1 23 300.00 0.3000
bond 1 37 420.00 1.3400
bond 1 38 420.00 1.3540
bond 1 72 420.00 1.3540
bond 1 73 420.00 1.3540
bond 1 74 420.00 1.3540
bond 1 77 420.00 1.3540
bond 1 78 420.00 1.3540
bond 1 98 461.00 1.5700
bond 2 2 260.00 1.5260
bond 2 3 317.00 1.5220
bond 2 5 386.00 1.4250
bond 2 6 260.00 1.5260
bond 2 10 260.00 1.5260
bond 2 11 317.00 1.5000
bond 2 12 317.00 1.5100
bond 2 13 260.00 1.5260
bond 2 14 317.00 1.5000
bond 2 15 222.00 1.8100
bond 2 16 222.00 1.8100
bond 2 29 320.00 1.4250
bond 2 33 382.00 1.4480
bond 2 35 337.00 1.4490
bond 2 38 317.00 1.5100
bond 2 41 260.00 1.5260
bond 2 43 367.00 1.4710
bond 2 45 337.00 1.4630
bond 2 70 317.00 1.4950
bond 3 3 350.00 1.5100
bond 3 4 570.00 1.2290
bond 3 5 450.00 1.3640
bond 3 6 317.00 1.5220
bond 3 10 317.00 1.5220
bond 3 12 469.00 1.4000
bond 3 13 317.00 1.5220
bond 3 19 400.00 1.4440
bond 3 29 214.00 1.3270
bond 3 30 300.00 1.7900
bond 3 33 317.00 1.5220
bond 3 35 490.00 1.3350
bond 3 36 340.00 1.0900
bond 3 37 410.00 1.4440
bond 3 38 400.00 1.4900
bond 3 40 385.00 1.4600
bond 3 42 656.00 1.2500
bond 3 46 457.00 1.3580
bond 3 47 418.00 1.3880
bond 3 50 447.00 1.4190
bond 3 55 300.00 1.9800
bond 3 74 400.00 1.4900
bond 3 76 385.00 1.4600
bond 3 95 424.00 1.3830
bond 3 97 490.00 1.3350
bond 4 23 553.00 0.3000
bond 4 54 525.00 1.4800
bond 4 79 570.00 1.2290
bond 4 100 700.00 1.1710
bond 5 6 386.00 1.4250
bond 5 7 553.00 0.9450
bond 5 10 386.00 1.4250
bond 5 13 320.00 1.4100
bond 5 23 340.00 0.3000
bond 5 29 250.00 1.4700
bond 5 33 320.00 1.4500
bond 5 35 400.00 1.3800
bond 5 37 450.00 1.3700
bond 5 38 450.00 1.3640
bond 5 41 320.00 1.3800
bond 5 54 230.00 1.6100
bond 5 69 450.00 1.6700
bond 5 96 94.00 1.8000
bond 5 98 374.00 1.6400
bond 6 6 260.00 1.5260
bond 6 10 260.00 1.5260
bond 6 11 317.00 1.5000
bond 6 13 260.00 1.5260
bond 6 14 317.00 1.5000
bond 6 15 222.00 1.8100
bond 6 16 222.00 1.8100
bond 6 29 320.00 1.4250
bond 6 33 382.00 1.4480
bond 6 35 337.00 1.4490
bond 6 37 317.00 1.5100
bond 6 41 260.00 1.5260
bond 6 43 367.00 1.4710
bond 6 45 337.00 1.4630
bond 6 69 222.00 1.8100
bond 6 95 337.00 1.4750
bond 7 23 340.00 0.1000
bond 7 29 553.00 0.9450
bond 9 9 530.00 1.3400
bond 9 11 530.00 1.3400
bond 9 14 530.00 1.3400
bond 10 10 260.00 1.5260
bond 10 11 317.00 1.5000
bond 10 14 317.00 1.5000
bond 10 29 320.00 1.4250
bond 10 33 382.00 1.4480
bond 10 35 337.00 1.4490
bond 10 95 337.00 1.4750
bond 11 11 530.00 1.3400
bond 11 13 317.00 1.5000
bond 11 14 530.00 1.3400
bond 11 69 222.00 1.7600
bond 12 12 469.00 1.4000
bond 12 38 469.00 1.4000
bond 12 50 469.00 1.4000
bond 12 71 469.00 1.4000
bond 13 13 268.00 1.5290
bond 13 14 317.00 1.5000
bond 13 15 222.00 1.8100
bond 13 16 222.00 1.8100
bond 13 18 390.00 1.4300
bond 13 19 390.00 1.4700
bond 13 23 340.00 0.3000
bond 13 29 320.00 1.4100
bond 13 30 245.00 1.7810
bond 13 31 340.00 1.7900
bond 13 33 382.00 1.4480
bond 13 35 337.00 1.4490
bond 13 36 340.00 1.0900
bond 13 37 317.00 1.5100
bond 13 38 317.00 1.5100
bond 13 40 317.00 1.5100
bond 13 41 268.00 1.5290
bond 13 43 367.00 1.4710
bond 13 45 337.00 1.4630
bond 13 46 337.00 1.4490
bond 13 47 337.00 1.4750
bond 13 50 317.00 1.5100
bond 13 54 212.00 1.8430
bond 13 55 245.00 1.9450
bond 13 56 200.00 2.1900
bond 13 69 340.00 1.7700
bond 13 70 317.00 1.4950
bond 13 73 317.00 1.5040
bond 13 74 317.00 1.5040
bond 13 75 317.00 1.5040
bond 13 77 317.00 1.4950
bond 13 80 337.00 1.4490
bond 13 81 280.00 1.5100
bond 13 85 532.80 1.4600
bond 13 91 382.00 1.4480
bond 13 92 375.00 1.4900
bond 13 94 212.00 1.8200
bond 13 95 337.00 1.4750
bond 13 97 337.00 1.4490
bond 13 98 187.00 1.8600
bond 13 99 317.00 1.5100
bond 14 14 530.00 1.3400
bond 15 17 274.00 1.3360
bond 15 38 250.00 1.7400
bond 16 16 166.00 2.0380
bond 16 19 300.00 1.6850
bond 16 23 340.00 0.5000
bond 16 35 250.00 1.7300
bond 16 37 250.00 1.7600
bond 16 38 250.00 1.7600
bond 16 51 250.00 1.7300
bond 16 72 250.00 1.7600
bond 16 74 250.00 1.7400
bond 16 81 222.00 1.8100
bond 16 98 144.00 2.1500
bond 17 23 340.00 0.1000
bond 18 18 550.00 1.1200
bond 18 19 650.00 1.1570
bond 18 38 400.00 1.4100
bond 18 46 550.00 1.2400
bond 19 19 1150.00 1.2100
bond 19 30 330.00 1.6370
bond 19 36 420.00 1.0800
bond 19 37 400.00 1.4260
bond 19 38 400.00 1.4510
bond 19 40 400.00 1.4260
bond 19 55 330.00 1.7840
bond 19 78 400.00 1.4510
bond 19 81 400.00 1.4510
bond 20 21 600.00 0.9572
bond 20 22 900.00 0.1750
bond 20 96 40.00 2.0500
bond 23 23 340.00 0.3000
bond 23 29 340.00 0.3000
bond 23 30 300.00 0.3000
bond 23 31 340.00 0.5000
bond 23 32 340.00 0.3000
bond 23 33 340.00 0.3000
bond 23 34 340.00 0.1000
bond 23 35 367.00 0.3000
bond 23 36 340.00 0.3000
bond 23 37 340.00 0.3000
bond 23 38 367.00 0.3000
bond 23 39 340.00 0.3000
bond 23 43 340.00 0.3000
bond 23 46 367.00 0.3000
bond 23 51 367.00 0.3000
bond 23 55 300.00 0.3000
bond 23 93 340.00 0.1000
bond 29 29 250.00 1.4700
bond 29 30 200.00 1.6900
bond 29 33 320.00 1.4500
bond 29 35 320.00 1.4500
bond 29 37 450.00 1.3700
bond 29 38 450.00 1.3640
bond 29 41 320.00 1.3800
bond 29 50 340.00 1.3600
bond 29 51 462.00 1.3990
bond 29 54 230.00 1.6100
bond 29 72 462.00 1.3570
bond 29 74 340.00 1.3600
bond 29 98 374.00 1.6400
bond 30 37 300.00 1.7250
bond 30 38 300.00 1.7250
bond 30 72 300.00 1.7250
bond 30 73 300.00 1.7250
bond 30 74 300.00 1.7250
bond 30 77 300.00 1.7250
bond 30 78 300.00 1.7250
bond 30 98 223.00 2.0200
bond 31 32 700.00 1.5300
bond 32 69 700.00 1.4400
bond 33 33 350.00 1.4450
bond 33 34 434.00 1.0100
bond 33 38 481.00 1.3400
bond 33 69 340.00 1.7700
bond 33 81 382.00 1.4480
bond 33 98 266.00 1.7400
bond 34 35 434.00 1.0100
bond 34 43 434.00 1.0100
bond 34 45 434.00 1.0100
bond 34 46 434.00 1.0100
bond 34 47 434.00 1.0100
bond 34 91 434.00 1.0100
bond 34 95 434.00 1.0100
bond 34 98 166.00 1.4800
bond 35 38 427.00 1.3810
bond 35 49 427.00 1.3810
bond 35 69 434.00 1.6700
bond 35 74 427.00 1.3810
bond 35 78 427.00 1.3810
bond 35 81 337.00 1.4490
bond 35 93 500.00 1.2700
bond 35 96 40.00 2.0500
bond 36 37 340.00 1.0800
bond 36 40 340.00 1.0800
bond 36 41 340.00 1.0900
bond 36 70 340.00 1.0800
bond 36 81 340.00 1.0880
bond 36 85 532.80 1.0840
bond 36 98 166.00 1.4800
bond 36 99 340.00 1.0800
bond 37 37 549.00 1.3400
bond 37 38 427.00 1.4330
bond 37 40 549.00 1.3400
bond 37 47 448.00 1.3650
bond 37 48 367.00 1.0800
bond 37 55 300.00 1.9000
bond 37 56 250.00 2.0800
bond 37 76 385.00 1.4600
bond 37 81 317.00 1.5100
bond 37 95 448.00 1.3650
bond 37 100 700.00 1.3050
bond 38 38 469.00 1.4000
bond 38 39 367.00 1.0800
bond 38 40 427.00 1.4330
bond 38 43 400.00 1.4500
bond 38 45 481.00 1.3400
bond 38 46 483.00 1.3390
bond 38 47 427.00 1.3810
bond 38 50 469.00 1.4040
bond 38 51 414.00 1.3910
bond 38 54 220.00 1.7800
bond 38 55 300.00 1.8700
bond 38 56 250.00 2.0800
bond 38 69 340.00 1.7700
bond 38 71 469.00 1.4000
bond 38 74 546.00 1.3670
bond 38 76 469.00 1.4000
bond 38 78 469.00 1.4210
bond 38 81 317.00 1.4900
bond 38 91 382.00 1.3850
bond 38 92 400.00 1.4600
bond 38 99 427.00 1.4330
bond 39 49 367.00 1.0800
bond 39 52 340.00 1.0800
bond 39 72 367.00 1.0800
bond 39 73 367.00 1.0800
bond 39 74 367.00 1.0800
bond 39 75 367.00 1.0800
bond 39 77 367.00 1.0800
bond 39 78 367.00 1.0800
bond 40 40 385.00 1.4600
bond 40 46 457.00 1.2900
bond 40 74 549.00 1.3650
bond 40 99 385.00 1.4600
bond 41 95 337.00 1.4750
bond 42 54 525.00 1.4800
bond 43 44 434.00 1.0100
bond 44 45 434.00 1.0100
bond 45 49 481.00 1.3400
bond 45 72 481.00 1.3400
bond 46 46 500.00 1.3200
bond 46 49 502.00 1.3240
bond 46 50 461.00 1.3540
bond 46 72 461.00 1.3540
bond 46 76 483.00 1.3390
bond 46 93 550.00 1.2100
bond 46 99 457.00 1.2900
bond 47 50 436.00 1.3740
bond 47 51 400.00 1.3490
bond 47 52 440.00 1.3710
bond 47 71 428.00 1.3800
bond 47 72 477.00 1.3430
bond 47 74 427.00 1.3810
bond 47 75 427.00 1.3810
bond 47 76 385.00 1.4400
bond 48 73 367.00 1.0800
bond 48 74 367.00 1.0800
bond 49 53 367.00 1.0800
bond 50 50 520.00 1.3700
bond 50 51 414.00 1.3910
bond 50 70 388.00 1.4590
bond 50 71 447.00 1.4190
bond 50 77 469.00 1.4240
bond 50 95 436.00 1.3740
bond 51 51 400.00 1.2800
bond 51 52 529.00 1.3040
bond 51 72 488.00 1.3350
bond 51 73 410.00 1.3940
bond 51 74 410.00 1.3940
bond 51 78 410.00 1.3200
bond 52 53 367.00 1.0800
bond 52 95 440.00 1.3710
bond 53 72 367.00 1.0800
bond 54 98 108.00 2.2500
bond 55 72 300.00 1.8700
bond 55 73 300.00 1.8700
bond 55 74 300.00 1.8700
bond 55 77 300.00 1.8700
bond 55 78 300.00 1.8700
bond 55 98 151.00 2.1900
bond 56 72 250.00 2.0800
bond 56 73 250.00 2.0800
bond 56 74 250.00 2.0800
bond 56 77 250.00 2.0800
bond 56 78 250.00 2.0800
bond 56 98 108.00 2.4400
bond 67 68 500.00 1.8000
bond 70 74 546.00 1.3520
bond 72 76 385.00 1.4600
bond 72 77 520.00 1.3700
bond 73 74 520.00 1.3700
bond 73 76 385.00 1.4600
bond 74 74 512.00 1.3750
bond 74 76 385.00 1.4600
bond 74 77 546.00 1.3670
bond 74 78 520.00 1.3700
bond 75 75 520.00 1.3700
bond 76 76 385.00 1.4600
bond 76 77 385.00 1.4600
bond 76 78 385.00 1.4600
bond 77 77 469.00 1.4240
bond 77 78 469.00 1.4240
bond 79 80 490.00 1.3350
bond 79 81 317.00 1.5220
bond 80 81 337.00 1.4490
bond 81 81 260.00 1.5200
bond 92 93 550.00 1.2250
bond 98 98 94.00 2.3200
bond 99 99 549.00 1.3450
################################
## ##
## Angle Bending Parameters ##
## ##
################################
angle 23 1 23 33.00 109.47
angle 1 2 2 50.00 109.50
angle 2 2 2 63.00 112.40
angle 2 2 3 63.00 112.40
angle 2 2 5 80.00 109.50
angle 2 2 6 63.00 112.40
angle 2 2 10 63.00 112.40
angle 2 2 16 50.00 114.70
angle 2 2 29 80.00 109.50
angle 2 2 33 56.20 109.47
angle 2 2 35 80.00 111.20
angle 2 2 38 63.00 112.40
angle 2 2 41 63.00 112.40
angle 2 2 43 80.00 111.20
angle 2 2 45 80.00 111.20
angle 3 2 10 63.00 112.40
angle 3 2 33 80.00 111.20
angle 3 2 35 80.00 110.30
angle 5 2 6 80.00 109.50
angle 5 2 10 80.00 109.50
angle 6 2 6 63.00 112.40
angle 6 2 10 63.00 112.40
angle 6 2 13 63.00 112.40
angle 6 2 29 80.00 109.50
angle 6 2 33 56.20 109.47
angle 6 2 41 63.00 112.40
angle 10 2 10 63.00 112.40
angle 10 2 12 63.00 114.00
angle 10 2 15 50.00 108.60
angle 10 2 16 50.00 114.70
angle 10 2 29 80.00 109.50
angle 10 2 33 56.20 109.47
angle 10 2 38 63.00 114.00
angle 10 2 70 63.00 115.60
angle 13 2 33 56.20 109.47
angle 1 3 4 80.00 121.00
angle 1 3 13 80.00 111.00
angle 2 3 4 80.00 120.40
angle 2 3 35 70.00 116.60
angle 2 3 42 70.00 117.00
angle 3 3 4 80.00 121.40
angle 3 3 13 80.00 117.20
angle 3 3 35 70.00 116.60
angle 4 3 4 80.00 126.00
angle 4 3 5 80.00 121.00
angle 4 3 6 80.00 120.40
angle 4 3 10 80.00 120.40
angle 4 3 13 80.00 120.40
angle 4 3 29 83.00 123.40
angle 4 3 30 75.00 119.00
angle 4 3 33 80.00 120.40
angle 4 3 35 80.00 122.90
angle 4 3 36 35.00 123.00
angle 4 3 37 80.00 125.30
angle 4 3 38 80.00 120.40
angle 4 3 40 80.00 124.00
angle 4 3 42 80.00 126.00
angle 4 3 46 80.00 122.50
angle 4 3 47 80.00 120.60
angle 4 3 50 80.00 128.80
angle 4 3 55 75.00 119.00
angle 4 3 74 80.00 120.40
angle 4 3 77 80.00 128.20
angle 4 3 95 80.00 120.90
angle 4 3 97 80.00 122.90
angle 5 3 10 70.00 115.00
angle 5 3 12 70.00 120.00
angle 5 3 13 70.00 108.00
angle 5 3 36 40.00 115.00
angle 5 3 38 70.00 120.00
angle 6 3 35 70.00 116.60
angle 6 3 42 70.00 117.00
angle 10 3 29 81.00 111.40
angle 10 3 35 70.00 116.60
angle 10 3 42 65.00 117.00
angle 12 3 12 85.00 120.00
angle 13 3 13 70.00 116.00
angle 13 3 29 81.00 111.40
angle 13 3 30 75.00 109.00
angle 13 3 33 70.00 116.00
angle 13 3 35 70.00 116.60
angle 13 3 36 35.00 115.00
angle 13 3 38 70.00 116.00
angle 13 3 40 70.00 116.00
angle 13 3 42 70.00 117.00
angle 13 3 55 75.00 109.00
angle 13 3 97 70.00 116.60
angle 29 3 35 81.00 111.40
angle 29 3 36 40.00 115.00
angle 29 3 38 81.00 111.40
angle 33 3 74 70.00 116.00
angle 35 3 35 70.00 114.20
angle 35 3 36 40.00 114.00
angle 35 3 37 70.00 115.50
angle 35 3 38 70.00 115.50
angle 35 3 50 70.00 111.30
angle 36 3 36 35.00 115.00
angle 36 3 38 35.00 115.00
angle 36 3 40 80.00 116.00
angle 36 3 46 35.00 116.00
angle 36 3 46 35.00 122.00
angle 37 3 47 70.00 114.10
angle 38 3 38 85.00 120.00
angle 38 3 42 70.00 117.00
angle 42 3 42 80.00 126.00
angle 46 3 47 70.00 118.60
angle 46 3 95 70.00 118.60
angle 47 3 47 70.00 118.60
angle 47 3 50 70.00 111.30
angle 47 3 95 70.00 115.40
angle 3 4 23 35.00 113.00
angle 23 4 23 10.00 117.00
angle 2 5 7 55.00 108.50
angle 3 5 7 35.00 113.00
angle 6 5 7 55.00 108.50
angle 7 5 10 55.00 108.50
angle 7 5 13 55.00 108.50
angle 7 5 23 10.00 109.47
angle 7 5 35 49.00 105.40
angle 7 5 37 35.00 109.00
angle 7 5 38 35.00 113.00
angle 7 5 41 55.00 108.50
angle 7 5 54 55.00 108.50
angle 7 5 69 74.00 110.00
angle 7 5 96 100.00 126.00
angle 13 5 23 10.00 109.47
angle 13 5 54 100.00 120.50
angle 23 5 23 5.00 109.47
angle 23 5 38 10.00 109.47
angle 5 7 23 10.00 109.47
angle 23 7 23 33.00 109.47
angle 2 10 2 63.00 112.40
angle 2 10 3 63.00 111.10
angle 2 10 5 80.00 109.50
angle 2 10 6 63.00 112.40
angle 2 10 10 63.00 111.50
angle 2 10 29 80.00 109.50
angle 2 10 33 56.20 109.47
angle 2 10 35 80.00 109.70
angle 2 10 38 63.00 112.40
angle 2 10 95 80.00 109.50
angle 3 10 6 63.00 111.10
angle 3 10 10 63.00 111.10
angle 3 10 33 80.00 109.70
angle 3 10 35 63.00 110.10
angle 5 10 6 80.00 109.50
angle 5 10 10 80.00 109.50
angle 6 10 6 63.00 111.50
angle 6 10 10 63.00 111.50
angle 6 10 29 80.00 109.50
angle 6 10 33 56.20 109.47
angle 6 10 35 80.00 109.50
angle 10 10 10 63.00 111.50
angle 10 10 29 80.00 109.50
angle 10 10 33 56.20 109.47
angle 10 10 35 80.00 109.70
angle 10 10 95 80.00 109.50
angle 13 10 33 56.20 109.47
angle 29 10 38 80.00 109.50
angle 29 10 95 80.00 109.50
angle 2 11 2 70.00 124.00
angle 2 11 6 70.00 124.00
angle 2 11 9 70.00 118.00
angle 2 11 10 70.00 124.00
angle 2 11 11 70.00 118.00
angle 2 11 13 70.00 124.00
angle 6 11 6 70.00 124.00
angle 6 11 9 70.00 118.00
angle 6 11 10 70.00 124.00
angle 6 11 11 70.00 118.00
angle 6 11 13 70.00 124.00
angle 9 11 10 70.00 118.00
angle 9 11 11 70.00 118.00
angle 9 11 13 70.00 118.00
angle 9 11 14 70.00 118.00
angle 9 11 69 70.00 118.00
angle 10 11 10 70.00 124.00
angle 10 11 11 70.00 118.00
angle 10 11 13 70.00 124.00
angle 11 11 11 70.00 118.00
angle 11 11 13 70.00 118.00
angle 11 11 14 70.00 118.00
angle 13 11 13 70.00 124.00
angle 2 12 12 70.00 120.00
angle 3 12 12 85.00 120.00
angle 12 12 12 85.00 120.00
angle 12 12 38 85.00 120.00
angle 12 12 50 85.00 120.00
angle 12 12 71 85.00 120.00
angle 1 13 1 77.00 109.10
angle 1 13 3 50.00 109.50
angle 1 13 13 50.00 109.50
angle 1 13 36 40.00 107.00
angle 1 13 37 50.00 109.50
angle 1 13 38 50.00 109.50
angle 1 13 69 50.00 109.50
angle 2 13 2 40.00 109.50
angle 2 13 3 63.00 111.10
angle 2 13 6 40.00 109.50
angle 2 13 33 56.20 109.47
angle 2 13 35 80.00 109.70
angle 2 13 36 35.00 109.50
angle 2 13 38 63.00 114.00
angle 3 13 3 63.00 111.10
angle 3 13 6 63.00 109.50
angle 3 13 13 63.00 111.10
angle 3 13 29 50.00 109.50
angle 3 13 30 69.00 109.80
angle 3 13 33 80.00 111.20
angle 3 13 35 63.00 110.10
angle 3 13 36 35.00 109.50
angle 3 13 38 63.00 112.00
angle 3 13 43 80.00 111.20
angle 3 13 46 63.00 110.10
angle 3 13 55 69.00 109.80
angle 3 13 80 80.00 113.00
angle 5 13 13 50.00 109.50
angle 5 13 36 35.00 109.50
angle 5 13 38 50.00 109.50
angle 5 13 41 50.00 109.50
angle 6 13 6 40.00 109.50
angle 6 13 33 56.20 109.47
angle 10 13 33 56.20 109.47
angle 13 13 13 58.35 112.70
angle 13 13 15 50.00 108.60
angle 13 13 16 50.00 114.70
angle 13 13 19 58.35 112.70
angle 13 13 29 50.00 109.50
angle 13 13 30 69.00 109.80
angle 13 13 31 50.00 108.60
angle 13 13 33 56.20 109.47
angle 13 13 35 80.00 109.70
angle 13 13 36 37.50 110.70
angle 13 13 37 63.00 111.10
angle 13 13 38 63.00 114.00
angle 13 13 41 58.35 112.70
angle 13 13 43 80.00 111.20
angle 13 13 45 80.00 111.20
angle 13 13 46 65.00 109.00
angle 13 13 50 63.00 114.00
angle 13 13 54 43.00 109.50
angle 13 13 55 69.00 110.00
angle 13 13 56 75.00 112.00
angle 13 13 69 50.00 108.60
angle 13 13 70 63.00 115.60
angle 13 13 73 63.00 114.00
angle 13 13 74 63.00 114.00
angle 13 13 75 63.00 114.00
angle 13 13 77 63.00 115.60
angle 13 13 80 80.00 110.00
angle 13 13 85 63.00 105.00
angle 13 13 91 80.00 111.20
angle 13 13 92 63.00 111.10
angle 13 13 94 43.00 109.50
angle 13 13 95 50.00 109.50
angle 13 13 97 80.00 109.70
angle 13 13 98 60.00 112.00
angle 15 13 36 35.00 109.50
angle 16 13 33 50.00 114.70
angle 16 13 36 35.00 109.50
angle 16 13 38 50.00 114.70
angle 16 13 74 50.00 114.70
angle 18 13 36 35.00 108.50
angle 19 13 36 35.00 108.50
angle 29 13 35 50.00 109.50
angle 29 13 36 35.00 109.50
angle 29 13 38 50.00 109.50
angle 29 13 95 50.00 109.50
angle 30 13 30 78.00 111.70
angle 30 13 36 51.00 107.60
angle 31 13 36 35.00 109.50
angle 33 13 36 35.00 109.50
angle 33 13 38 80.00 111.20
angle 35 13 36 35.00 109.50
angle 36 13 36 33.00 107.80
angle 36 13 37 35.00 109.50
angle 36 13 38 35.00 109.50
angle 36 13 40 35.00 109.50
angle 36 13 41 37.50 110.70
angle 36 13 43 35.00 109.50
angle 36 13 45 35.00 109.50
angle 36 13 46 35.00 109.50
angle 36 13 47 35.00 109.50
angle 36 13 50 35.00 109.50
angle 36 13 54 41.00 109.50
angle 36 13 55 51.00 107.60
angle 36 13 56 75.00 111.00
angle 36 13 69 35.00 109.50
angle 36 13 70 35.00 109.50
angle 36 13 73 35.00 109.50
angle 36 13 74 35.00 109.50
angle 36 13 75 35.00 109.50
angle 36 13 77 35.00 109.50
angle 36 13 80 35.00 109.50
angle 36 13 81 37.50 110.70
angle 36 13 85 35.00 105.00
angle 36 13 91 35.00 109.50
angle 36 13 92 35.00 105.00
angle 36 13 94 41.00 109.50
angle 36 13 95 35.00 109.50
angle 36 13 97 35.00 109.50
angle 36 13 98 35.00 109.50
angle 37 13 37 63.00 112.40
angle 37 13 38 40.00 109.50
angle 38 13 38 40.00 109.50
angle 38 13 47 80.00 111.20
angle 38 13 54 43.00 109.50
angle 38 13 55 69.00 110.00
angle 55 13 55 78.00 111.70
angle 2 14 2 70.00 124.00
angle 2 14 6 70.00 124.00
angle 2 14 9 70.00 118.00
angle 2 14 10 70.00 124.00
angle 2 14 11 70.00 118.00
angle 2 14 13 70.00 124.00
angle 2 14 14 70.00 118.00
angle 6 14 6 70.00 124.00
angle 6 14 9 70.00 118.00
angle 6 14 10 70.00 124.00
angle 6 14 11 70.00 118.00
angle 6 14 13 70.00 124.00
angle 6 14 14 70.00 118.00
angle 9 14 10 70.00 118.00
angle 9 14 11 70.00 118.00
angle 9 14 13 70.00 118.00
angle 9 14 14 70.00 118.00
angle 10 14 10 70.00 124.00
angle 10 14 11 70.00 118.00
angle 10 14 13 70.00 124.00
angle 10 14 14 70.00 118.00
angle 11 14 11 70.00 118.00
angle 11 14 13 70.00 118.00
angle 11 14 14 70.00 118.00
angle 13 14 13 70.00 124.00
angle 13 14 14 70.00 118.00
angle 14 14 14 70.00 118.00
angle 2 15 17 44.00 96.00
angle 2 15 22 150.00 96.70
angle 6 15 17 44.00 96.00
angle 6 15 22 150.00 96.70
angle 13 15 17 44.00 96.00
angle 13 15 22 150.00 96.70
angle 13 15 23 10.00 109.47
angle 17 15 17 35.00 92.07
angle 17 15 22 150.00 96.70
angle 17 15 38 50.00 96.00
angle 22 15 22 10.00 160.00
angle 23 15 23 5.00 109.47
angle 2 16 6 62.00 98.90
angle 2 16 16 68.00 103.70
angle 2 16 22 150.00 96.70
angle 6 16 16 68.00 103.70
angle 6 16 22 150.00 96.70
angle 13 16 13 62.00 98.90
angle 13 16 16 68.00 103.70
angle 13 16 19 65.00 100.00
angle 13 16 22 150.00 96.70
angle 13 16 23 10.00 109.47
angle 13 16 38 62.00 104.20
angle 13 16 81 62.00 94.00
angle 16 16 22 150.00 96.70
angle 22 16 22 10.00 160.00
angle 23 16 23 5.00 109.47
angle 23 16 51 10.00 130.00
angle 23 16 72 10.00 130.00
angle 23 16 74 10.00 130.00
angle 35 16 50 74.00 92.40
angle 37 16 38 62.00 104.20
angle 50 16 72 74.00 97.00
angle 50 16 74 74.00 97.00
angle 72 16 74 74.00 90.00
angle 74 16 74 74.00 97.00
angle 15 17 23 10.00 109.47
angle 23 17 23 33.00 109.47
angle 13 18 19 150.00 180.00
angle 18 18 46 100.00 180.00
angle 19 18 38 170.00 180.00
angle 13 19 18 150.00 180.00
angle 13 19 19 150.00 180.00
angle 16 19 19 140.00 180.00
angle 18 19 23 10.00 90.00
angle 18 19 37 150.00 180.00
angle 18 19 38 150.00 180.00
angle 18 19 45 150.00 180.00
angle 18 19 78 150.00 180.00
angle 19 19 36 112.00 180.00
angle 19 19 37 160.00 180.00
angle 19 19 38 160.00 180.00
angle 19 19 40 160.00 180.00
angle 21 20 21 75.00 109.50
angle 21 20 22 50.00 54.75
angle 23 23 23 33.00 109.47
angle 2 29 2 100.00 111.80
angle 2 29 3 83.00 116.90
angle 2 29 6 100.00 111.80
angle 2 29 7 55.00 108.50
angle 2 29 38 100.00 111.80
angle 2 29 41 100.00 113.00
angle 2 29 54 100.00 120.50
angle 3 29 6 83.00 116.90
angle 3 29 10 83.00 116.90
angle 3 29 13 83.00 116.90
angle 3 29 38 83.00 116.90
angle 6 29 41 100.00 113.00
angle 6 29 54 100.00 120.50
angle 7 29 10 55.00 108.50
angle 10 29 10 100.00 111.80
angle 10 29 41 100.00 113.00
angle 10 29 54 100.00 120.50
angle 13 29 13 60.00 109.50
angle 13 29 23 10.00 109.47
angle 13 29 37 75.00 111.00
angle 13 29 38 75.00 111.00
angle 13 29 41 60.00 109.50
angle 13 29 54 100.00 120.50
angle 13 29 98 40.00 130.00
angle 23 29 23 5.00 109.47
angle 23 29 38 10.00 109.47
angle 23 29 51 10.00 125.00
angle 23 29 72 10.00 125.00
angle 23 29 74 10.00 125.00
angle 35 29 50 70.00 104.50
angle 37 29 38 75.00 111.00
angle 38 29 38 75.00 111.00
angle 38 29 54 100.00 120.50
angle 50 29 72 70.00 106.50
angle 50 29 74 70.00 106.50
angle 51 29 74 70.00 108.90
angle 54 29 54 100.00 120.50
angle 72 29 72 70.00 107.00
angle 72 29 74 70.00 104.00
angle 74 29 74 70.00 106.50
angle 98 29 98 20.00 145.00
angle 23 30 23 33.00 109.47
angle 13 31 13 62.00 96.00
angle 13 31 32 74.00 107.00
angle 23 31 32 10.00 90.00
angle 2 33 2 51.80 107.20
angle 2 33 6 51.80 107.20
angle 2 33 10 51.80 107.20
angle 2 33 13 51.80 107.20
angle 2 33 34 43.20 108.10
angle 3 33 13 63.00 111.10
angle 3 33 38 63.00 112.00
angle 6 33 6 51.80 107.20
angle 6 33 10 51.80 107.20
angle 6 33 13 51.80 107.20
angle 6 33 34 43.20 108.10
angle 10 33 10 51.80 107.20
angle 10 33 13 51.80 107.20
angle 10 33 34 43.20 108.10
angle 13 33 13 51.80 107.20
angle 13 33 34 35.00 109.50
angle 13 33 38 50.00 116.00
angle 13 33 69 50.00 108.60
angle 23 33 34 10.00 100.00
angle 23 33 38 10.00 109.50
angle 34 33 34 43.60 106.40
angle 34 33 38 35.00 116.00
angle 34 33 69 35.00 115.00
angle 38 33 38 50.00 116.00
angle 38 33 69 50.00 108.60
angle 38 33 81 50.00 109.50
angle 23 34 23 33.00 109.47
angle 23 34 33 10.00 109.50
angle 2 35 3 50.00 121.90
angle 2 35 6 50.00 121.90
angle 2 35 10 50.00 118.00
angle 2 35 34 38.00 118.40
angle 3 35 3 70.00 126.40
angle 3 35 5 46.00 115.70
angle 3 35 6 50.00 121.90
angle 3 35 10 50.00 121.90
angle 3 35 13 50.00 121.90
angle 3 35 16 70.00 112.00
angle 3 35 23 10.00 109.50
angle 3 35 29 70.00 108.60
angle 3 35 34 35.00 119.80
angle 3 35 38 50.00 121.90
angle 3 35 49 70.00 125.20
angle 3 35 81 55.00 128.00
angle 3 35 96 20.00 126.00
angle 5 35 34 35.00 110.20
angle 6 35 34 38.00 118.40
angle 10 35 34 38.00 118.40
angle 13 35 13 50.00 118.00
angle 13 35 34 38.00 118.40
angle 13 35 38 50.00 118.00
angle 13 35 69 50.00 120.00
angle 16 35 76 70.00 117.00
angle 23 35 34 10.00 100.00
angle 34 35 34 35.00 120.00
angle 34 35 38 35.00 119.80
angle 34 35 49 35.00 118.00
angle 34 35 69 100.00 111.00
angle 34 35 74 35.00 119.80
angle 34 35 77 35.00 119.80
angle 34 35 78 35.00 119.80
angle 34 35 81 40.00 113.00
angle 38 35 38 70.00 118.00
angle 38 35 74 70.00 118.00
angle 38 35 77 70.00 118.00
angle 38 35 78 70.00 118.00
angle 38 35 93 70.00 121.00
angle 44 35 44 35.00 120.00
angle 13 36 23 37.50 109.47
angle 23 36 23 33.00 109.47
angle 1 37 1 80.00 108.00
angle 1 37 3 80.00 121.50
angle 1 37 36 50.00 112.00
angle 1 37 37 80.00 121.50
angle 1 37 100 80.00 125.00
angle 3 37 6 85.00 119.70
angle 3 37 13 70.00 119.70
angle 3 37 36 35.00 119.70
angle 3 37 37 85.00 120.70
angle 3 37 81 70.00 119.70
angle 5 37 37 70.00 123.00
angle 5 37 40 70.00 123.00
angle 13 37 13 70.00 130.00
angle 13 37 36 35.00 117.00
angle 13 37 37 70.00 124.00
angle 13 37 38 85.00 119.70
angle 13 37 40 70.00 124.00
angle 13 37 47 70.00 120.00
angle 13 37 95 70.00 120.00
angle 13 37 100 80.00 122.00
angle 16 37 37 85.00 119.40
angle 16 37 47 85.00 119.40
angle 16 37 95 85.00 119.40
angle 19 37 36 35.00 120.00
angle 19 37 37 70.00 124.00
angle 23 37 36 10.00 90.00
angle 23 37 37 2.00 90.00
angle 23 37 40 2.00 90.00
angle 29 37 36 35.00 114.50
angle 29 37 37 70.00 123.00
angle 29 37 40 70.00 123.00
angle 29 37 47 70.00 120.00
angle 29 37 95 70.00 120.00
angle 30 37 36 60.00 114.00
angle 30 37 37 75.00 121.50
angle 36 37 36 35.00 117.00
angle 36 37 37 35.00 120.00
angle 36 37 38 35.00 123.30
angle 36 37 40 35.00 120.00
angle 36 37 47 35.00 119.10
angle 36 37 55 60.00 114.00
angle 36 37 81 35.00 135.00
angle 36 37 95 35.00 119.10
angle 36 37 100 40.00 121.00
angle 37 37 38 85.00 117.00
angle 37 37 47 70.00 121.20
angle 37 37 48 35.00 119.70
angle 37 37 55 75.00 120.00
angle 37 37 81 70.00 124.00
angle 37 37 95 70.00 121.20
angle 38 37 100 80.00 122.00
angle 47 37 48 35.00 119.10
angle 48 37 95 35.00 119.10
angle 1 38 38 80.00 120.00
angle 2 38 12 70.00 120.00
angle 2 38 38 70.00 120.00
angle 2 38 50 70.00 128.60
angle 3 38 13 70.00 119.70
angle 3 38 38 85.00 120.00
angle 3 38 39 35.00 120.00
angle 5 38 38 70.00 120.00
angle 5 38 46 70.00 120.00
angle 10 38 38 70.00 120.00
angle 12 38 12 85.00 120.00
angle 13 38 38 70.00 120.00
angle 13 38 46 70.00 116.00
angle 13 38 47 70.00 120.00
angle 13 38 50 70.00 128.60
angle 15 38 38 70.00 120.00
angle 16 38 38 85.00 119.40
angle 18 38 38 80.00 120.00
angle 19 38 38 70.00 120.00
angle 23 38 38 10.00 90.00
angle 23 38 39 2.00 90.00
angle 29 38 38 70.00 120.00
angle 30 38 38 75.00 120.00
angle 30 38 46 75.00 120.00
angle 33 38 38 70.00 120.00
angle 33 38 46 70.00 116.00
angle 35 38 38 70.00 120.00
angle 35 38 39 35.00 119.10
angle 37 38 38 70.00 124.00
angle 37 38 45 70.00 120.10
angle 37 38 46 70.00 121.50
angle 37 38 47 70.00 121.50
angle 38 38 38 63.00 120.00
angle 38 38 39 35.00 120.00
angle 38 38 40 70.00 124.00
angle 38 38 43 70.00 120.00
angle 38 38 45 70.00 120.10
angle 38 38 46 70.00 124.00
angle 38 38 47 70.00 108.70
angle 38 38 50 63.00 120.00
angle 38 38 51 70.00 108.70
angle 38 38 54 85.00 119.40
angle 38 38 55 75.00 120.00
angle 38 38 56 75.00 120.00
angle 38 38 69 85.00 119.40
angle 38 38 71 85.00 120.00
angle 38 38 74 70.00 107.40
angle 38 38 76 63.00 120.00
angle 38 38 92 85.00 120.00
angle 38 38 99 70.00 124.00
angle 39 38 46 35.00 116.00
angle 39 38 47 35.00 120.00
angle 39 38 50 35.00 120.00
angle 39 38 51 35.00 119.10
angle 39 38 71 35.00 120.00
angle 39 38 74 35.00 126.90
angle 39 38 76 35.00 120.00
angle 39 38 78 35.00 128.20
angle 40 38 46 70.00 121.50
angle 45 38 45 70.00 120.00
angle 45 38 46 70.00 119.30
angle 45 38 47 70.00 116.00
angle 45 38 50 70.00 123.50
angle 46 38 47 70.00 123.30
angle 46 38 50 70.00 117.30
angle 46 38 76 70.00 124.00
angle 46 38 91 70.00 124.10
angle 47 38 50 70.00 108.70
angle 47 38 51 70.00 123.30
angle 50 38 74 63.00 106.40
angle 91 38 91 70.00 111.80
angle 3 40 37 70.00 118.70
angle 13 40 37 70.00 124.00
angle 13 40 40 70.00 124.00
angle 13 40 99 70.00 124.00
angle 19 40 36 35.00 120.00
angle 23 40 36 10.00 90.00
angle 23 40 37 2.00 90.00
angle 23 40 40 2.00 90.00
angle 36 40 37 35.00 120.00
angle 36 40 38 35.00 123.30
angle 36 40 40 35.00 120.00
angle 36 40 74 35.00 122.00
angle 36 40 99 35.00 120.00
angle 37 40 38 85.00 117.00
angle 37 40 40 70.00 124.00
angle 37 40 99 70.00 124.00
angle 40 40 74 35.00 106.00
angle 2 41 29 80.00 109.50
angle 5 41 13 50.00 109.50
angle 5 41 29 92.60 111.55
angle 5 41 36 35.00 109.50
angle 6 41 6 40.00 109.50
angle 6 41 29 80.00 109.50
angle 13 41 29 50.00 109.50
angle 13 41 36 37.50 110.70
angle 13 41 95 50.00 109.50
angle 29 41 29 92.60 111.55
angle 29 41 36 35.00 109.50
angle 29 41 95 50.00 109.50
angle 36 41 36 33.00 109.50
angle 36 41 95 35.00 109.50
angle 2 43 44 35.00 109.50
angle 6 43 44 35.00 109.50
angle 13 43 13 50.00 113.00
angle 13 43 23 10.00 100.00
angle 13 43 38 55.00 114.00
angle 13 43 44 35.00 109.50
angle 23 43 38 10.00 100.00
angle 23 43 72 10.00 100.00
angle 34 43 34 43.60 109.50
angle 38 43 44 35.00 109.50
angle 44 43 44 35.00 109.50
angle 2 45 38 50.00 123.20
angle 2 45 44 35.00 118.40
angle 6 45 38 50.00 123.20
angle 13 45 13 50.00 118.00
angle 13 45 34 35.00 118.40
angle 13 45 38 50.00 123.20
angle 13 45 44 35.00 118.40
angle 34 45 34 35.00 113.00
angle 34 45 38 35.00 120.00
angle 34 45 49 35.00 120.00
angle 38 45 44 35.00 120.00
angle 44 45 44 35.00 120.00
angle 3 46 13 70.00 120.50
angle 3 46 38 70.00 120.50
angle 13 46 18 70.00 120.00
angle 13 46 38 50.00 118.00
angle 13 46 46 70.00 117.00
angle 13 46 93 70.00 114.00
angle 23 46 38 5.00 120.00
angle 23 46 49 5.00 119.80
angle 34 46 38 35.00 113.00
angle 38 46 38 70.00 117.00
angle 38 46 46 70.00 117.00
angle 38 46 49 70.00 118.60
angle 38 46 50 70.00 112.20
angle 38 46 76 70.00 117.00
angle 49 46 49 70.00 118.60
angle 49 46 50 70.00 111.00
angle 49 46 72 70.00 111.00
angle 3 47 3 70.00 126.40
angle 3 47 34 35.00 116.80
angle 3 47 37 70.00 121.60
angle 3 47 38 70.00 125.20
angle 13 47 50 70.00 125.80
angle 13 47 51 70.00 118.40
angle 13 47 52 70.00 128.80
angle 34 47 37 35.00 119.20
angle 34 47 38 35.00 118.00
angle 34 47 50 30.00 125.80
angle 34 47 51 56.00 118.40
angle 34 47 52 30.00 128.80
angle 34 47 71 35.00 123.10
angle 34 47 72 35.00 120.00
angle 34 47 74 35.00 120.00
angle 34 47 75 35.00 120.00
angle 38 47 38 70.00 125.20
angle 38 47 51 70.00 118.40
angle 38 47 52 70.00 109.80
angle 50 47 51 56.00 113.10
angle 50 47 52 70.00 105.40
angle 50 47 72 70.00 109.80
angle 50 47 74 70.00 109.80
angle 51 47 72 56.00 113.10
angle 51 47 74 56.00 113.10
angle 71 47 74 70.00 111.60
angle 72 47 74 70.00 109.80
angle 72 47 75 70.00 109.80
angle 74 47 74 70.00 109.80
angle 13 49 46 70.00 115.50
angle 35 49 45 70.00 116.00
angle 35 49 46 70.00 123.30
angle 39 49 46 35.00 115.45
angle 45 49 46 70.00 119.30
angle 46 49 46 70.00 129.10
angle 46 49 53 35.00 115.45
angle 3 50 50 85.00 119.20
angle 3 50 51 70.00 130.00
angle 3 50 74 70.00 130.00
angle 12 50 70 85.00 134.90
angle 12 50 71 85.00 116.20
angle 12 50 77 85.00 134.90
angle 13 50 38 70.00 120.00
angle 13 50 50 70.00 120.00
angle 16 50 50 70.00 111.00
angle 29 50 50 70.00 110.60
angle 35 50 50 70.00 127.70
angle 35 50 51 70.00 126.20
angle 38 50 38 85.00 134.90
angle 38 50 50 85.00 117.30
angle 38 50 51 70.00 132.40
angle 38 50 70 85.00 134.90
angle 38 50 71 85.00 116.20
angle 38 50 77 85.00 134.90
angle 46 50 47 70.00 126.20
angle 46 50 50 70.00 127.70
angle 46 50 95 70.00 126.20
angle 47 50 50 70.00 106.20
angle 47 50 77 70.00 107.70
angle 50 50 51 70.00 111.00
angle 50 50 77 70.00 107.30
angle 50 50 95 70.00 106.20
angle 70 50 71 85.00 108.80
angle 71 50 77 85.00 108.80
angle 23 51 47 10.00 125.00
angle 23 51 51 10.00 125.00
angle 23 51 72 10.00 125.00
angle 29 51 78 70.00 105.30
angle 38 51 38 70.00 125.20
angle 47 51 74 70.00 104.10
angle 47 51 78 70.00 104.10
angle 50 51 52 70.00 103.80
angle 50 51 72 70.00 110.00
angle 51 51 72 70.00 109.00
angle 72 51 73 70.00 110.00
angle 72 51 74 70.00 110.00
angle 39 52 47 35.00 120.00
angle 39 52 51 35.00 120.00
angle 39 52 95 35.00 120.00
angle 47 52 51 70.00 113.90
angle 47 52 53 35.00 123.05
angle 51 52 53 35.00 123.05
angle 51 52 95 70.00 113.90
angle 53 52 95 35.00 123.05
angle 4 54 5 100.00 108.23
angle 4 54 13 45.00 109.50
angle 4 54 29 100.00 108.23
angle 4 54 38 45.00 109.50
angle 5 54 5 45.00 102.60
angle 5 54 29 45.00 102.60
angle 5 54 38 45.00 109.50
angle 5 54 42 45.00 108.23
angle 13 54 29 45.00 109.50
angle 13 54 42 45.00 109.50
angle 29 54 29 45.00 102.60
angle 29 54 38 45.00 109.50
angle 29 54 42 100.00 108.23
angle 42 54 42 140.00 119.90
angle 23 55 23 33.00 109.47
angle 23 56 23 33.00 109.47
angle 68 67 68 150.00 180.00
angle 5 69 13 75.00 96.40
angle 5 69 32 74.00 108.70
angle 5 69 38 75.00 96.40
angle 6 69 11 62.00 98.90
angle 13 69 13 62.00 102.00
angle 13 69 32 74.00 108.90
angle 13 69 33 62.00 102.00
angle 13 69 35 100.00 103.00
angle 13 69 38 62.00 102.00
angle 13 69 72 62.00 102.00
angle 32 69 32 104.00 119.00
angle 32 69 33 74.00 108.90
angle 32 69 35 120.00 107.00
angle 32 69 38 74.00 107.20
angle 35 69 38 100.00 103.00
angle 2 70 50 70.00 128.60
angle 2 70 74 70.00 125.00
angle 13 70 50 70.00 128.60
angle 13 70 74 70.00 125.00
angle 36 70 50 35.00 126.80
angle 36 70 74 35.00 126.80
angle 50 70 74 85.00 106.40
angle 12 71 47 70.00 132.80
angle 12 71 50 85.00 122.70
angle 38 71 47 70.00 132.80
angle 38 71 50 85.00 122.70
angle 47 71 50 70.00 104.40
angle 13 72 16 70.00 125.00
angle 13 72 47 70.00 125.00
angle 13 72 51 70.00 125.00
angle 16 72 33 70.00 120.20
angle 16 72 35 70.00 125.00
angle 16 72 39 35.00 125.00
angle 16 72 51 70.00 113.60
angle 16 72 51 70.00 115.00
angle 29 72 39 35.00 117.00
angle 29 72 51 70.00 115.00
angle 29 72 76 70.00 122.00
angle 33 72 51 70.00 126.10
angle 35 72 51 70.00 126.20
angle 38 72 47 70.00 125.00
angle 39 72 47 35.00 120.00
angle 39 72 51 35.00 120.00
angle 46 72 47 70.00 126.20
angle 46 72 77 70.00 127.70
angle 47 72 47 70.00 120.00
angle 47 72 51 70.00 120.00
angle 47 72 69 70.00 120.00
angle 47 72 77 70.00 106.20
angle 51 72 69 70.00 120.00
angle 51 72 76 70.00 130.00
angle 13 73 51 70.00 124.50
angle 13 73 74 70.00 130.70
angle 38 73 51 70.00 111.00
angle 39 73 51 35.00 120.00
angle 39 73 74 35.00 128.20
angle 51 73 74 70.00 111.00
angle 3 74 47 85.00 120.00
angle 3 74 77 85.00 120.00
angle 13 74 16 70.00 125.00
angle 13 74 29 70.00 121.60
angle 13 74 47 70.00 121.60
angle 13 74 51 70.00 118.90
angle 13 74 73 70.00 130.70
angle 13 74 74 70.00 120.00
angle 13 74 77 70.00 132.10
angle 16 74 35 70.00 125.00
angle 16 74 39 35.00 125.00
angle 16 74 73 70.00 111.00
angle 16 74 77 70.00 111.00
angle 29 74 39 35.00 113.40
angle 29 74 40 70.00 110.00
angle 29 74 73 70.00 108.00
angle 29 74 76 70.00 121.60
angle 29 74 77 70.00 110.60
angle 38 74 39 35.00 130.70
angle 38 74 47 70.00 121.60
angle 38 74 77 70.00 132.10
angle 39 74 40 35.00 130.70
angle 39 74 47 35.00 121.60
angle 39 74 70 35.00 120.00
angle 39 74 73 35.00 130.70
angle 39 74 77 35.00 132.10
angle 47 74 48 35.00 120.00
angle 47 74 70 70.00 108.70
angle 47 74 73 70.00 106.30
angle 47 74 74 70.00 120.00
angle 47 74 76 70.00 121.60
angle 47 74 77 70.00 107.70
angle 51 74 74 70.00 120.00
angle 51 74 77 70.00 111.90
angle 76 74 77 70.00 132.10
angle 13 75 47 70.00 121.60
angle 13 75 75 70.00 130.70
angle 39 75 47 35.00 120.00
angle 39 75 75 35.00 130.70
angle 47 75 75 70.00 106.30
angle 38 76 38 63.00 120.00
angle 38 76 46 70.00 124.00
angle 38 76 72 63.00 120.00
angle 38 76 73 63.00 120.00
angle 38 76 74 63.00 120.00
angle 38 76 76 63.00 120.00
angle 38 76 77 63.00 120.00
angle 38 76 78 63.00 120.00
angle 46 76 76 70.00 124.00
angle 2 77 74 70.00 125.00
angle 3 77 74 70.00 130.00
angle 13 77 50 70.00 128.60
angle 13 77 74 70.00 125.00
angle 36 77 50 35.00 126.80
angle 36 77 74 35.00 126.80
angle 39 77 50 35.00 120.00
angle 39 77 74 35.00 125.70
angle 39 77 77 35.00 127.50
angle 50 77 74 85.00 106.40
angle 50 77 77 70.00 107.30
angle 72 77 74 70.00 110.40
angle 74 77 74 70.00 103.80
angle 74 77 76 70.00 125.70
angle 74 77 77 70.00 107.30
angle 74 77 78 70.00 103.80
angle 76 77 77 70.00 127.50
angle 13 78 51 70.00 118.90
angle 19 78 51 70.00 118.90
angle 38 78 39 35.00 128.60
angle 39 78 51 35.00 118.90
angle 51 78 77 70.00 111.90
angle 4 79 80 80.00 134.00
angle 4 79 81 80.00 134.00
angle 80 79 81 70.00 91.00
angle 13 80 79 55.00 127.00
angle 13 80 81 50.00 126.00
angle 79 80 81 50.00 94.00
angle 13 81 36 35.00 114.30
angle 13 81 81 37.50 117.20
angle 16 81 36 37.50 108.00
angle 16 81 80 55.00 109.00
angle 16 81 81 55.00 128.00
angle 33 81 36 35.00 114.30
angle 33 81 81 37.50 117.20
angle 35 81 36 35.00 108.00
angle 35 81 79 70.00 117.00
angle 35 81 81 37.50 126.00
angle 36 81 36 35.00 114.30
angle 36 81 37 35.00 109.50
angle 36 81 79 37.50 110.00
angle 36 81 80 35.00 111.00
angle 36 81 81 37.50 117.20
angle 37 81 81 63.00 114.00
angle 79 81 81 63.00 85.00
angle 80 81 81 80.00 89.00
angle 81 81 81 30.00 79.20
angle 13 85 13 172.80 120.00
angle 13 85 36 144.00 120.00
angle 13 91 34 35.00 109.50
angle 13 91 38 50.00 120.50
angle 34 91 34 43.60 106.40
angle 34 91 38 50.00 112.50
angle 13 92 93 80.00 117.50
angle 38 92 93 80.00 117.50
angle 93 92 93 80.00 125.00
angle 23 93 23 10.00 109.50
angle 23 93 92 10.00 109.50
angle 13 94 13 45.00 109.50
angle 3 95 10 70.00 117.60
angle 3 95 13 70.00 117.60
angle 3 95 34 35.00 119.20
angle 3 95 37 70.00 121.60
angle 3 95 41 70.00 117.60
angle 6 95 50 70.00 125.80
angle 6 95 52 70.00 128.80
angle 10 95 50 70.00 125.80
angle 10 95 52 70.00 128.80
angle 13 95 37 70.00 121.20
angle 13 95 50 70.00 125.80
angle 13 95 52 70.00 128.80
angle 34 95 37 35.00 119.20
angle 34 95 50 30.00 125.80
angle 34 95 52 30.00 128.80
angle 37 95 41 70.00 121.20
angle 41 95 50 70.00 125.80
angle 41 95 52 70.00 128.80
angle 50 95 52 70.00 105.40
angle 4 96 35 20.00 109.50
angle 35 96 35 20.00 109.50
angle 3 97 13 50.00 121.90
angle 13 97 13 50.00 118.00
angle 1 98 13 35.00 110.50
angle 13 98 13 60.00 110.00
angle 13 98 29 60.00 100.00
angle 13 98 30 35.00 110.50
angle 13 98 34 35.00 110.50
angle 13 98 36 35.00 110.50
angle 13 98 55 35.00 110.50
angle 13 98 56 35.00 110.50
angle 13 98 98 50.00 112.00
angle 29 98 29 60.00 110.00
angle 34 98 34 35.00 109.50
angle 36 98 36 35.00 109.50
angle 13 99 40 70.00 124.00
angle 13 99 99 70.00 124.00
angle 36 99 38 35.00 123.30
angle 36 99 40 35.00 120.00
angle 36 99 99 35.00 120.00
angle 38 99 99 85.00 117.00
angle 40 99 99 70.00 124.00
angle 4 100 37 160.00 180.00
angle 37 100 37 160.00 180.00
#####################################
## ##
## Improper Torsional Parameters ##
## ##
#####################################
imptors 0 0 3 4 21.000 180.0 2
imptors 0 0 3 42 21.000 180.0 2
imptors 0 0 35 0 5.000 180.0 2
imptors 0 0 37 0 30.000 180.0 2
imptors 0 0 38 0 5.000 180.0 2
############################
## ##
## Torsional Parameters ##
## ##
############################
###################################################################
## ##
## Alternative Torsional Parameter Values for Use with OPLS-AA ##
## ##
## For some torsions, OPLS-AA has multiple possible parameter ##
## values; the list below shows functional groups for which ##
## these alternate (commented) values should be preferred; the ##
## values are in the same order as in the full parameter list ##
## ##
## 4 3 3 36 generic (default) ##
## 4 3 3 36 dicarbonyls ##
## 36 3 3 36 hydrocarbon (default) ##
## 36 3 3 36 dicarbonyls ##
## 13 3 5 7 carboxylic acid (default) ##
## 13 3 5 7 1,2-diacid monoanion ##
## 4 3 13 13 peptide (default) ##
## 4 3 13 13 propanamide ##
## 4 3 13 13 carboxylic acid ##
## 4 3 13 13 dicarboxylic acid ##
## 4 3 13 13 aldyhyde, ketone, acyl halide ##
## 4 3 13 13 1,2-diacid monoanion ##
## 5 3 13 13 carboxylic acid (default) ##
## 5 3 13 13 dicarboxylic acid ##
## 35 3 13 13 peptide psi' (default) ##
## 35 3 13 13 propanamide ##
## 35 3 13 13 beta-3-peptide, last psi ##
## 4 3 29 13 esters (default) ##
## 4 3 29 13 benzoic esters ##
## 7 5 13 13 alcohols (default) ##
## 7 5 13 13 trifluoroethanol ##
## 7 5 13 13 hexopyranoses ##
## 7 5 13 36 alcohols (default) ##
## 7 5 13 36 axial cyclohexanol ##
## 7 5 13 36 trifluoroethanol ##
## 0 13 13 13 alcohols, ethers (default) ##
## 0 13 13 13 hexopyranoses ##
## 3 13 13 3 dicarboxylic acid (default) ##
## 3 13 13 3 1,2-diacid monoanion ##
## 3 13 13 13 butanamide (default) ##
## 3 13 13 13 carboxylate ion ##
## 3 13 13 13 aldyhyde, ketone, acyl halide ##
## 3 13 13 36 all carbonyls (default) ##
## 3 13 13 36 dicarboxylic acid ##
## 3 13 13 36 aldehyde, ketone, acyl halide ##
## 5 13 13 5 diols only (default) ##
## 5 13 13 5 triols only ##
## 5 13 13 5 hexopyranoses ##
## 13 13 13 13 hydrocarbon (default) ##
## 13 13 13 13 perfluoroalkane ##
## 13 13 13 35 peptide chi-1 (default) ##
## 13 13 13 35 N-propylformamide ##
## 36 13 13 69 generic (default) ##
## 36 13 13 69 sulfone ##
## 13 13 33 13 amine (default) ##
## 13 13 33 13 exocyclic amine ##
## 13 13 33 13 exocyclic 1,4-diamine ##
## 13 13 33 34 amine (default) ##
## 13 13 33 34 azetidine, 4-ring ##
## 13 13 33 34 pyrrolidine, 5-ring ##
## 13 13 33 34 cyclic amine ##
## 13 13 33 34 cyclic 1,4-diamine ##
## 13 13 35 3 peptide phi' (default) ##
## 13 13 35 3 N-ethylformamide ##
## 13 13 35 3 beta-3-peptide, first theta tors ##
## 13 13 35 13 proline, CD-N-CA-CB (default) ##
## 13 13 35 13 proline, CG-CD-N-CA ##
## 36 13 35 3 peptide phi'' (default) ##
## 36 13 35 3 N-methylformamide ##
## 13 13 47 0 imidazole, indole, purine (default) ##
## 13 13 47 0 nucleoside chi ##
## 13 13 47 52 nucleoside (default) ##
## 13 13 47 52 imidazole, indole, purine ##
## 29 13 47 0 imidazole, indole, purine (default) ##
## 29 13 47 0 nucleoside chi ##
## 29 13 95 52 nucleoside (default) ##
## 29 13 95 52 imidazole, indole, purine ##
## 13 13 97 13 generic (default) ##
## 13 13 97 13 generic ##
## 17 15 38 0 aromatic thiol (default) ##
## 17 15 38 0 aromatic thiol, N-C-S-H ##
## 13 29 54 42 phosphonates (default) ##
## 13 29 54 42 dimethyl phosphate ##
## 34 35 72 16 diaryl amine (default) ##
## 34 35 72 16 aniline-like ##
## 34 35 72 29 diaryl amine (default) ##
## 34 35 72 29 aniline-like ##
## 13 40 40 37 diene (default) ##
## 13 40 40 37 2-methyl-1,3-butadiene ##
## 0 46 72 0 generic (default) ##
## 0 46 72 0 generic ##
## 0 47 72 0 generic (default) ##
## 0 47 72 0 generic ##
## 0 47 74 0 generic (default) ##
## 0 47 74 0 generic ##
## 0 47 74 0 generic ##
## 0 51 72 0 generic (default) ##
## 0 51 72 0 HA-CR-NB-?? or N?-CR-NB-?? ##
## 0 72 77 0 generic (default) ##
## 0 72 77 0 biphenyl-like, N-C-C-C ##
## ##
###################################################################
torsion 0 2 2 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 0 2 2 6 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 1 2 2 2 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
torsion 1 2 2 6 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
torsion 2 2 2 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 2 13 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 2 55 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
torsion 6 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 6 2 2 55 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
torsion 10 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
torsion 6 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
torsion 10 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
torsion 0 2 10 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 10 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 2 2 13 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
torsion 6 2 29 2 -7.400 0.0 1 3.000 180.0 2 1.800 0.0 3
torsion 6 2 29 6 -8.400 0.0 1 3.000 180.0 2 1.800 0.0 3
torsion 4 3 3 4 1.600 0.0 1 3.200 180.0 2 0.000 0.0 3
torsion 4 3 3 13 0.000 0.0 1 0.500 180.0 2 0.000 0.0 3
torsion 4 3 3 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 3 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
#torsion 4 3 3 36 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
torsion 13 3 3 13 0.700 0.0 1 -1.500 180.0 2 0.000 0.0 3
torsion 13 3 3 35 -0.500 0.0 1 0.200 180.0 2 0.000 0.0 3
torsion 13 3 3 36 0.800 0.0 1 -0.760 180.0 2 0.000 0.0 3
torsion 35 3 3 36 -0.900 0.0 1 0.300 180.0 2 0.000 0.0 3
torsion 36 3 3 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
#torsion 36 3 3 36 0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 3 3 5 7 3.000 0.0 1 5.500 180.0 2 0.000 0.0 3
torsion 4 3 5 7 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 13 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
#torsion 13 3 5 7 3.200 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 35 3 5 7 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 36 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
torsion 38 3 5 7 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 1 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 1 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
torsion 3 3 13 36 0.000 0.0 1 0.000 180.0 2 0.085 0.0 3
torsion 4 3 13 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
#torsion 4 3 13 13 0.000 0.0 1 1.166 180.0 2 0.000 0.0 3
#torsion 4 3 13 13 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
#torsion 4 3 13 13 -0.750 0.0 1 -0.550 180.0 2 -0.250 0.0 3
#torsion 4 3 13 13 -0.277 0.0 1 1.228 180.0 2 -0.694 0.0 3
#torsion 4 3 13 13 -1.000 0.0 1 -1.900 180.0 2 -0.900 0.0 3
torsion 4 3 13 30 -0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 13 33 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
torsion 4 3 13 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 13 38 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
torsion 5 3 13 13 0.000 0.0 1 1.412 180.0 2 0.000 0.0 3
#torsion 5 3 13 13 1.000 0.0 1 0.546 180.0 2 0.450 0.0 3
torsion 5 3 13 33 5.260 0.0 1 0.820 180.0 2 0.000 0.0 3
torsion 5 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 3 13 13 1.454 0.0 1 -0.144 180.0 2 -0.775 0.0 3
torsion 13 3 13 36 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
torsion 29 3 13 13 0.000 0.0 1 0.000 180.0 2 -0.553 0.0 3
torsion 29 3 13 36 0.000 0.0 1 0.000 180.0 2 0.132 0.0 3
torsion 30 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 30 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
torsion 35 3 13 13 1.173 0.0 1 0.189 180.0 2 -1.200 0.0 3
#torsion 35 3 13 13 3.250 0.0 1 -0.402 180.0 2 -0.136 0.0 3
#torsion 35 3 13 13 3.260 0.0 1 0.440 180.0 2 0.600 0.0 3
torsion 35 3 13 30 0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 35 3 13 35 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
torsion 35 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
torsion 38 3 13 36 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
torsion 42 3 13 13 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
torsion 42 3 13 33 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
torsion 42 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 55 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 55 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
torsion 97 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 29 13 0.000 0.0 1 5.124 180.0 2 0.000 0.0 3
#torsion 4 3 29 13 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 4 3 29 38 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 13 3 29 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
torsion 13 3 29 38 1.500 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 35 3 29 13 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 36 3 29 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
torsion 38 3 29 13 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 3 3 35 13 0.400 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 3 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 4 3 35 5 0.000 0.0 1 6.603 180.0 2 0.000 0.0 3
torsion 4 3 35 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 4 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 4 3 35 37 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 4 3 35 38 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 4 3 35 81 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 5 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 5 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 13 3 35 5 4.542 0.0 1 6.603 180.0 2 1.045 0.0 3
torsion 13 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 13 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 13 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 29 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 29 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 35 3 35 3 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 35 3 35 13 4.600 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 35 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 36 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 36 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 37 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 38 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 38 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 38 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 38 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 74 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 74 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 74 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 77 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 77 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 77 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 77 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 0 3 37 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
torsion 4 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 37 37 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
torsion 5 3 37 37 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
torsion 35 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 35 3 37 37 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 97 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 97 3 37 37 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 5 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 13 3 38 38 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
torsion 29 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 35 3 38 38 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
torsion 36 3 38 38 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
torsion 0 3 40 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
torsion 4 3 40 37 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
torsion 5 3 40 37 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
torsion 13 3 40 37 0.800 0.0 1 -3.000 180.0 2 0.000 0.0 3
torsion 13 3 46 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 3 46 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 3 46 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 3 46 34 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 0 3 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
torsion 4 3 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
torsion 4 3 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 3 72 47 2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
torsion 4 3 72 51 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
torsion 72 3 72 47 -2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
torsion 72 3 72 51 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
torsion 4 3 74 29 -0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
torsion 4 3 74 77 0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
torsion 74 3 74 29 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
torsion 74 3 74 77 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
torsion 38 3 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 3 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 4 3 77 74 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 4 3 77 77 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 35 3 77 74 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
torsion 35 3 77 77 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
torsion 4 3 97 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 13 3 97 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 4 3 99 99 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
torsion 5 3 99 99 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
torsion 0 4 96 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 10 2 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
torsion 7 5 10 6 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
torsion 7 5 13 2 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
torsion 7 5 13 6 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
torsion 7 5 13 13 -0.356 0.0 1 -0.174 180.0 2 0.492 0.0 3
#torsion 7 5 13 13 4.478 0.0 1 -2.175 180.0 2 0.000 0.0 3
#torsion 7 5 13 13 2.674 0.0 1 -2.883 180.0 2 1.026 0.0 3
torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.352 0.0 3
#torsion 7 5 13 36 -2.589 0.0 1 -1.123 180.0 2 0.270 0.0 3
#torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.476 0.0 3
torsion 7 5 13 37 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 13 38 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 13 40 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 7 5 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 7 5 35 3 5.519 0.0 1 -6.700 180.0 2 0.581 0.0 3
torsion 7 5 35 34 2.722 0.0 1 -5.154 180.0 2 0.000 0.0 3
torsion 7 5 37 37 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
torsion 7 5 38 38 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
torsion 7 5 41 29 -1.257 0.0 1 -1.806 180.0 2 0.003 0.0 3
torsion 7 5 46 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 7 5 54 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 54 5 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 69 13 -0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 69 32 0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 7 5 69 38 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 13 3 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
torsion 0 13 13 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
#torsion 0 13 13 13 -1.336 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 13 35 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
torsion 1 13 13 1 -2.500 0.0 1 0.000 180.0 2 0.250 0.0 3
torsion 1 13 13 5 0.000 0.0 1 0.000 180.0 2 0.540 0.0 3
torsion 1 13 13 13 0.300 0.0 1 -0.400 180.0 2 0.400 0.0 3
torsion 1 13 13 36 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 3 13 13 3 -0.550 0.0 1 0.000 180.0 2 1.000 0.0 3
#torsion 3 13 13 3 0.800 0.0 1 0.000 180.0 2 0.900 0.0 3
torsion 3 13 13 5 -6.180 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 3 13 13 13 -2.060 0.0 1 -0.313 180.0 2 0.315 0.0 3
#torsion 3 13 13 13 -3.185 0.0 1 -0.825 180.0 2 0.493 0.0 3
#torsion 3 13 13 13 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
torsion 3 13 13 15 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
torsion 3 13 13 16 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
torsion 3 13 13 35 -9.000 0.0 1 2.000 180.0 2 0.800 0.0 3
torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.100 0.0 3
#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 0.074 0.0 3
#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.076 0.0 3
torsion 3 13 13 38 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
torsion 3 13 13 70 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
torsion 5 13 13 5 9.508 0.0 1 0.000 180.0 2 0.000 0.0 3
#torsion 5 13 13 5 12.234 0.0 1 0.000 180.0 2 0.000 0.0 3
#torsion 5 13 13 5 9.066 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 5 13 13 13 -1.552 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 5 13 13 29 4.319 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 5 13 13 33 8.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 5 13 13 35 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
torsion 5 13 13 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
torsion 13 13 13 13 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
#torsion 13 13 13 13 6.622 0. 1 0.948 180. 2 -1.388 0. 3 -2.118 180. 4
torsion 13 13 13 15 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
torsion 13 13 13 16 2.619 0.0 1 -0.620 180.0 2 0.258 0.0 3
torsion 13 13 13 19 0.000 0.0 1 -0.650 180.0 2 0.000 0.0 3
torsion 13 13 13 30 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 13 13 13 33 2.392 0.0 1 -0.674 180.0 2 0.550 0.0 3
torsion 13 13 13 35 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
#torsion 13 13 13 35 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
torsion 13 13 13 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
#the parameter was added because it did not exist.
torsion 13 13 13 37 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
torsion 13 13 13 41 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
torsion 13 13 13 43 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
torsion 13 13 13 55 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 13 13 13 56 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 13 13 13 69 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
torsion 13 13 13 97 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
torsion 13 13 13 98 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 15 13 13 36 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
torsion 16 13 13 36 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
torsion 19 13 13 36 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
torsion 29 13 13 29 -0.550 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 29 13 13 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
torsion 30 13 13 30 -0.250 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 30 13 13 33 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 30 13 13 36 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 33 13 13 33 11.035 0.0 1 -0.968 180.0 2 0.270 0.0 3
torsion 33 13 13 36 -1.013 0.0 1 -0.709 180.0 2 0.473 0.0 3
torsion 33 13 13 38 -0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 35 13 13 36 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
torsion 35 13 13 38 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
torsion 35 13 13 70 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
torsion 36 13 13 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 13 13 37 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
torsion 36 13 13 38 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 41 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 13 13 43 0.000 0.0 1 0.000 180.0 2 0.384 0.0 3
torsion 36 13 13 45 0.000 0.0 1 0.000 180.0 2 -0.582 0.0 3
torsion 36 13 13 49 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 52 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 55 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 36 13 13 56 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
#torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
torsion 36 13 13 70 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 72 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 73 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 74 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 77 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 78 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 13 92 0.000 0.0 1 0.000 180.0 2 -0.225 0.0 3
torsion 36 13 13 94 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 13 13 97 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
torsion 36 13 13 98 0.000 0.0 1 0.000 180.0 2 0.450 0.0 3
torsion 36 13 13 99 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
torsion 38 13 13 43 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 98 13 13 98 5.200 0.0 1 -0.500 180.0 2 0.000 0.0 3
torsion 13 13 15 17 -0.759 0.0 1 -0.282 180.0 2 0.680 0.0 3
torsion 36 13 15 17 0.000 0.0 1 0.000 180.0 2 0.480 0.0 3
torsion 13 13 16 13 0.925 0.0 1 -0.576 180.0 2 0.677 0.0 3
torsion 13 13 16 16 1.941 0.0 1 -0.836 180.0 2 0.935 0.0 3
torsion 36 13 16 13 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
torsion 36 13 16 16 0.000 0.0 1 0.000 180.0 2 0.558 0.0 3
torsion 36 13 16 38 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
torsion 0 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 19 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 29 13 -0.521 0.0 1 -2.018 180.0 2 1.996 0.0 3
torsion 46 13 29 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
torsion 47 13 29 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
torsion 13 13 29 3 -1.220 0.0 1 -0.126 180.0 2 0.422 0.0 3
torsion 13 13 29 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
torsion 13 13 29 54 -1.420 0.0 1 -0.620 180.0 2 0.100 0.0 3
torsion 36 13 29 0 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
torsion 36 13 29 3 0.000 0.0 1 0.000 180.0 2 0.198 0.0 3
torsion 36 13 29 37 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
torsion 36 13 29 38 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
torsion 36 13 29 41 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
torsion 36 13 29 54 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 13 33 13 0.416 0.0 1 -0.128 180.0 2 0.695 0.0 3
#torsion 13 13 33 13 1.536 0.0 1 -0.128 180.0 2 0.695 0.0 3
#torsion 13 13 33 13 1.464 0.0 1 -0.128 180.0 2 0.695 0.0 3
torsion 13 13 33 34 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
#torsion 13 13 33 34 0.000 0.0 1 4.000 180.0 2 0.000 0.0 3
#torsion 13 13 33 34 0.200 0.0 1 -0.417 180.0 2 0.418 0.0 3
#torsion 13 13 33 34 0.819 0.0 1 -0.417 180.0 2 0.418 0.0 3
#torsion 13 13 33 34 1.522 0.0 1 -0.417 180.0 2 0.418 0.0 3
torsion 36 13 33 13 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
torsion 36 13 33 34 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 36 13 33 38 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
torsion 0 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 3 13 35 3 -2.365 0.0 1 0.912 180.0 2 -0.850 0.0 3
torsion 3 13 35 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
torsion 3 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 35 3 0.000 0.0 1 0.462 180.0 2 0.000 0.0 3
#torsion 13 13 35 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
#torsion 13 13 35 3 1.130 0.0 1 -1.420 180.0 2 0.440 0.0 3
torsion 13 13 35 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
#torsion 13 13 35 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
torsion 13 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 35 49 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 35 69 2.929 0.0 1 -2.533 180.0 2 0.497 0.0 3
torsion 13 13 35 81 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
#torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
torsion 36 13 35 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 35 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 35 69 1.362 0.0 1 -1.457 180.0 2 0.149 0.0 3
torsion 38 13 35 49 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 37 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
torsion 0 13 37 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
torsion 0 13 37 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 37 40 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 1 13 37 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 37 13 2.817 0.0 1 -0.169 180.0 2 0.543 0.0 3
torsion 13 13 37 37 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
torsion 13 13 37 40 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
torsion 36 13 37 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 13 37 36 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
torsion 36 13 37 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 36 13 37 40 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 36 13 37 100 0.000 0.0 1 0.000 180.0 2 -0.250 0.0 3
torsion 37 13 37 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
torsion 37 13 37 36 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
torsion 0 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 1 13 38 38 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
torsion 13 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 38 46 -0.500 0.0 1 0.500 180.0 2 -0.500 0.0 3
torsion 30 13 38 38 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
torsion 36 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 54 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 55 13 38 38 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
torsion 0 13 40 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 40 40 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
torsion 36 13 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 36 13 40 40 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 36 13 40 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 13 13 41 0 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
torsion 13 13 41 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 13 41 29 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
torsion 13 13 43 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
torsion 13 13 43 34 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
torsion 36 13 43 13 0.000 0.0 1 0.000 180.0 2 0.302 0.0 3
torsion 36 13 43 34 0.000 0.0 1 0.000 180.0 2 0.261 0.0 3
torsion 36 13 43 38 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 36 13 43 44 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 13 45 34 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
torsion 13 13 45 38 1.829 0.0 1 0.243 180.0 2 -0.498 0.0 3
torsion 13 13 45 44 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
torsion 36 13 45 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 45 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 45 38 0.000 0.0 1 0.000 180.0 2 0.177 0.0 3
torsion 13 13 46 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 47 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 47 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
#torsion 13 13 47 0 0.000 0.0 1 -0.576 180.0 2 0.000 0.0 3
torsion 13 13 47 52 2.756 0.0 1 -0.872 180.0 2 -3.680 0.0 3
#torsion 13 13 47 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
torsion 13 13 47 72 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
torsion 29 13 47 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
#torsion 29 13 47 0 0.000 0.0 1 -1.876 180.0 2 0.000 0.0 3
torsion 29 13 47 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
torsion 29 13 47 72 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
torsion 13 13 49 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 49 46 0.000 0.0 1 0.500 180.0 2 -0.500 0.0 3
torsion 36 13 49 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 52 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 52 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 54 29 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
torsion 36 13 54 42 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
torsion 38 13 54 29 2.250 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 38 13 54 42 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 69 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 69 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 69 5 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
torsion 36 13 69 13 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
torsion 36 13 69 32 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
torsion 36 13 69 38 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
torsion 13 13 70 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 70 50 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 70 74 -0.714 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 70 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 70 50 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 70 74 0.000 0.0 1 0.000 180.0 2 -0.480 0.0 3
torsion 13 13 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 73 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 73 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 1 13 74 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
torsion 13 13 74 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 74 47 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
torsion 30 13 74 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
torsion 36 13 74 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 1 13 77 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
torsion 13 13 77 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 30 13 77 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
torsion 36 13 77 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 78 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 78 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 81 81 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 13 85 13 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
torsion 13 13 85 36 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
torsion 13 13 92 93 0.000 0.0 1 0.400 180.0 2 0.000 0.0 3
torsion 36 13 92 93 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 94 13 1.000 0.0 1 -0.500 180.0 2 0.500 0.0 3
torsion 36 13 94 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 0 13 95 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 95 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
torsion 13 13 95 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
torsion 13 13 95 72 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
torsion 29 13 95 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
torsion 29 13 95 52 3.132 0.0 1 -1.491 180.0 2 2.744 0.0 3
#torsion 29 13 95 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
torsion 29 13 95 72 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
torsion 3 13 97 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
torsion 13 13 97 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
torsion 13 13 97 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
#torsion 13 13 97 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
torsion 36 13 97 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
torsion 36 13 97 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 97 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 98 13 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 98 34 0.000 0.0 1 0.000 180.0 2 0.260 0.0 3
torsion 36 13 98 13 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
torsion 36 13 98 29 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 13 98 34 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
torsion 13 13 99 99 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
torsion 36 13 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 13 99 36 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
torsion 36 13 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 17 15 38 0 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
#torsion 17 15 38 0 -3.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 17 15 38 38 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
torsion 13 16 16 13 0.000 0.0 1 -7.414 180.0 2 1.705 0.0 3
torsion 13 16 38 38 0.000 0.0 1 0.600 180.0 2 0.000 0.0 3
torsion 13 16 38 46 1.600 0.0 1 5.100 180.0 2 0.000 0.0 3
torsion 13 16 49 46 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
torsion 74 16 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 74 16 72 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 72 16 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 72 16 74 73 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 72 16 74 78 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 16 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 19 18 38 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 19 18 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 18 18 46 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 18 18 46 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 19 19 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 19 19 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 19 19 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 19 19 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 19 19 99 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 19 19 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 19 19 99 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 19 19 37 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 19 19 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 19 19 37 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 29 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 29 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 29 37 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
torsion 13 29 37 36 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
torsion 13 29 37 37 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 13 29 37 40 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 3 29 38 38 0.000 0.0 1 2.500 180.0 2 0.000 0.0 3
torsion 13 29 38 38 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 13 29 38 46 0.400 0.0 1 5.500 180.0 2 0.000 0.0 3
torsion 54 29 38 38 0.000 0.0 1 2.990 180.0 2 0.000 0.0 3
torsion 13 29 41 5 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
torsion 13 29 41 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
torsion 13 29 41 29 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
torsion 13 29 41 36 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
torsion 13 29 46 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 13 29 49 46 0.000 0.0 1 5.200 180.0 2 0.000 0.0 3
torsion 0 29 54 42 0.000 0.0 1 0.000 180.0 2 0.562 0.0 3
torsion 13 29 54 13 3.500 0.0 1 -3.300 180.0 2 1.500 0.0 3
torsion 13 29 54 42 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
#torsion 13 29 54 42 0.900 0.0 1 -2.930 180.0 2 2.640 0.0 3
torsion 38 29 54 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 74 29 72 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 72 29 74 78 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 74 29 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 74 29 74 77 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 98 29 98 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 98 29 98 29 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 33 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 33 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 34 33 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 33 38 38 -7.582 0.0 1 3.431 180.0 2 3.198 0.0 3
torsion 34 33 38 38 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
torsion 49 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 72 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 74 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 34 33 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 34 33 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 33 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 33 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 0 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 3 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 13 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 34 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 49 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 72 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 74 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 0 35 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 35 49 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 34 35 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 35 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 35 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 35 69 38 2.074 0.0 1 -2.966 180.0 2 2.473 0.0 3
torsion 34 35 69 38 1.671 0.0 1 -4.901 180.0 2 0.669 0.0 3
torsion 13 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 34 35 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
#torsion 34 35 72 16 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
torsion 34 35 72 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
#torsion 34 35 72 29 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
torsion 34 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 35 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 35 72 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 0 35 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 3 35 74 74 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 34 35 74 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 34 35 74 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 35 74 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 35 74 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 3 35 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 3 35 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 3 35 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 37 35 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 37 35 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 35 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 35 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 3 35 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 3 35 81 79 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
torsion 3 35 81 81 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
torsion 34 35 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 34 35 81 79 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 34 35 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 35 96 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 37 36 37 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
torsion 37 36 37 36 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
torsion 0 37 37 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 0 37 37 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 3 37 37 35 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 3 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 5 37 37 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 5 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 37 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 37 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 37 29 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 19 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 29 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 30 37 37 30 -1.600 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 30 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 37 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 38 38 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
torsion 36 37 38 38 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 36 37 38 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 37 37 38 38 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
torsion 13 37 40 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 40 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 40 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 40 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 37 40 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 35 37 40 3 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 40 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 40 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 40 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 40 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 37 40 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 0 37 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 37 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 3 37 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 37 76 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 37 76 35 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 37 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 37 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 13 37 100 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 37 100 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 38 38 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 38 38 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 1 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 1 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 13 38 38 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 13 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 13 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 13 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 30 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 30 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 33 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 37 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 45 0.0 0. 1 1.62 180. 2 0.0 0. 3 -0.44 180. 4
torsion 38 38 38 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 55 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 38 99 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 55 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 38 99 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 46 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 40 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 38 38 40 37 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
torsion 46 38 40 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 46 38 40 37 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
torsion 38 38 43 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 38 38 43 44 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 38 45 34 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
torsion 38 38 45 34 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
torsion 45 38 45 13 0.000 0.0 1 7.936 180.0 2 0.000 0.0 3
torsion 45 38 45 34 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
torsion 50 38 45 34 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
torsion 0 38 46 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 38 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
torsion 0 38 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 38 38 69 13 0.000 0.0 1 -0.900 180.0 2 0.000 0.0 3
torsion 38 38 69 35 1.656 0.0 1 -0.768 180.0 2 -0.117 0.0 3
torsion 38 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 76 46 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 76 46 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 46 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 46 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 38 78 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 46 38 91 13 0.000 0.0 1 3.651 180.0 2 0.000 0.0 3
torsion 38 38 92 93 0.000 0.0 1 1.150 180.0 2 0.000 0.0 3
torsion 38 38 99 13 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
torsion 38 38 99 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 38 38 99 99 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
torsion 0 40 40 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 3 40 40 3 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 13 40 40 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 40 40 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 40 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
#torsion 13 40 40 37 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
torsion 36 40 40 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 40 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 37 40 40 37 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
torsion 13 40 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 13 40 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 36 40 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 40 99 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
torsion 36 40 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 37 40 99 13 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 37 40 99 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
torsion 37 40 99 99 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
torsion 13 43 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 38 43 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
torsion 34 45 49 0 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
torsion 13 46 46 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 13 46 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 46 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 46 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 46 49 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 46 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 46 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 46 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
#torsion 0 46 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 38 46 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 46 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 47 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 34 47 50 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 0 47 51 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 47 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 47 71 0 0.000 0.0 1 3.050 180.0 2 0.000 0.0 3
torsion 0 47 72 0 0.000 0.0 1 4.650 180.0 2 0.000 0.0 3
#torsion 0 47 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 47 72 39 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 34 47 72 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 0 47 74 0 0.000 0.0 1 2.800 180.0 2 0.000 0.0 3
#torsion 0 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
#torsion 0 47 74 0 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
torsion 34 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 51 47 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 74 47 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 50 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 50 51 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 50 70 0 0.000 0.0 1 3.350 180.0 2 0.000 0.0 3
torsion 0 50 71 0 0.000 0.0 1 6.000 180.0 2 0.000 0.0 3
torsion 0 50 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 50 77 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 50 50 77 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 51 51 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 51 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 51 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
#torsion 0 51 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 51 72 39 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 73 51 72 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 78 51 72 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 78 51 72 29 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 51 73 0 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
torsion 72 51 73 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 72 51 73 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 51 74 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
torsion 0 51 78 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 72 51 78 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 70 74 0 0.000 0.0 1 13.050 180.0 2 0.000 0.0 3
torsion 0 72 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 16 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 29 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 47 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 51 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 72 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
#torsion 0 72 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 73 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 0 73 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 39 73 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 39 73 74 16 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 39 73 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 51 73 74 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 51 73 74 29 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 51 73 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 73 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 51 73 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 51 73 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 74 73 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 74 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 0 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 16 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 39 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 0 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 16 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 29 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 47 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 74 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 74 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 74 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 74 78 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 16 74 78 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
torsion 16 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 29 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 74 78 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 39 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 38 76 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 38 76 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 38 76 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 38 76 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 38 76 78 51 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 46 76 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 77 77 29 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 77 77 47 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 0 77 77 77 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
torsion 39 77 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 4 79 80 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 4 79 80 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 4 79 80 38 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 4 79 80 81 0.000 0.0 1 20.000 180.0 2 0.000 0.0 3
torsion 81 79 80 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 81 79 80 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
torsion 81 79 80 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 81 79 80 81 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
torsion 0 79 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 79 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 4 79 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 80 79 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 80 79 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 80 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 80 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 80 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 81 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 81 81 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 81 81 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 81 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 81 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 36 81 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 81 81 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 0 99 99 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 99 99 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 99 99 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 13 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 99 99 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 36 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 38 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 38 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 38 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 40 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 40 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
torsion 99 99 99 99 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
################################################################
## ##
## Additional Torsional Parameter Values Used with OPLS-AA ##
## ##
## The torsions listed below were added to official OPLS-AA ##
## to complete the set needed for proteins; the values were ##
## obtained by analogy from the closest OPLS-AA torsions; ##
## most of the added values are for HIP or N-terminal AAs ##
## ##
################################################################
torsion 35 3 13 43 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
torsion 42 3 13 35 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
torsion 3 13 13 43 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 3 13 13 73 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
torsion 3 13 13 74 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
torsion 3 13 13 75 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
torsion 5 13 13 43 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
torsion 15 13 13 43 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
torsion 16 13 13 43 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
torsion 13 13 13 45 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
torsion 35 13 13 73 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
torsion 43 13 13 73 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 35 13 13 74 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
torsion 43 13 13 74 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 35 13 13 75 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
torsion 36 13 13 75 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
torsion 43 13 13 75 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 3 13 43 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
torsion 3 13 43 44 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
torsion 13 13 43 44 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
torsion 36 13 45 44 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 75 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 13 13 75 47 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
torsion 36 13 75 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
torsion 45 38 45 44 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
torsion 0 38 71 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
torsion 0 47 75 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
torsion 0 75 75 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
########################################
## ##
## Atomic Partial Charge Parameters ##
## ##
########################################
charge 1 -0.2200
charge 2 0.2200
charge 3 0.5500
charge 4 -0.5000
charge 5 -0.5800
charge 6 0.0800
charge 7 0.4500
charge 8 0.0000
charge 9 0.0000
charge 10 0.0000
charge 11 0.0000
charge 12 0.0000
charge 13 0.0000
charge 14 0.0000
charge 15 0.0000
charge 16 0.0000
charge 17 0.0000
charge 18 0.0000
charge 19 0.0000
charge 20 -0.7000
charge 21 0.4350
charge 22 0.2650
charge 23 0.2650
charge 24 -0.4700
charge 25 -0.4500
charge 26 -0.4700
charge 27 -0.3000
charge 28 0.2350
charge 29 0.2700
charge 30 0.1800
charge 31 0.1800
charge 32 0.2350
charge 33 0.2350
charge 34 0.3000
charge 35 0.3000
charge 36 -0.4300
charge 37 0.2800
charge 38 0.1500
charge 39 0.0000
charge 40 0.2410
charge 41 -0.2410
charge 42 0.0000
charge 43 0.0000
charge 44 0.0000
charge 45 0.0000
charge 46 0.0000
charge 47 0.0000
charge 48 0.2650
charge 49 0.2650
charge 50 -0.5000
charge 51 0.2500
charge 52 0.2500
charge 53 -0.8340
charge 54 0.4170
charge 55 0.0000
charge 56 0.5200
charge 57 -1.0400
charge 58 -0.8220
charge 59 0.4110
charge 60 0.5000
charge 61 -0.2500
charge 62 0.4200
charge 63 -0.1400
charge 64 0.2480
charge 65 -0.0620
charge 66 0.1390
charge 67 -0.4590
charge 68 0.1600
charge 69 -1.0200
charge 70 0.3400
charge 71 -0.5000
charge 72 -0.5700
charge 73 0.5000
charge 74 0.2850
charge 75 -0.8200
charge 76 0.4100
charge 77 -0.1800
charge 78 -0.1200
charge 79 -0.0600
charge 80 -0.2400
charge 81 0.0000
charge 82 0.0600
charge 83 0.0000
charge 84 -0.1150
charge 85 -0.2300
charge 86 0.1150
charge 87 -0.1150
charge 88 0.1150
charge 89 0.0000
charge 90 -0.0650
charge 91 -0.0050
charge 92 -0.1150
charge 93 -0.6830
charge 94 0.4180
charge 95 0.0400
charge 96 0.1450
charge 97 0.2050
charge 98 0.2650
charge 99 0.1263
charge 100 0.5323
charge 101 -0.6351
charge 102 0.4286
charge 103 -0.2057
charge 104 0.0825
charge 105 0.1500
charge 106 -0.5850
charge 107 0.4350
charge 108 -0.7000
charge 109 0.4350
charge 110 -0.7300
charge 111 0.4650
charge 112 0.1450
charge 113 0.2050
charge 114 0.2650
charge 115 0.0600
charge 116 -0.1700
charge 117 0.0000
charge 118 -0.2850
charge 119 -0.4000
charge 120 0.1100
charge 121 0.1400
charge 122 0.1700
charge 123 0.2000
charge 124 0.0300
charge 125 -0.4000
charge 126 -0.7000
charge 127 0.4350
charge 128 0.2000
charge 129 0.1000
charge 130 0.2650
charge 131 0.1000
charge 132 0.3000
charge 133 0.1000
charge 134 0.3650
charge 135 0.1000
charge 136 0.4000
charge 137 0.4650
charge 138 0.0850
charge 139 -0.3350
charge 140 -0.4700
charge 141 -0.4350
charge 142 -0.2175
charge 143 0.1550
charge 144 0.2350
charge 145 0.0600
charge 146 0.1200
charge 147 0.1800
charge 148 0.0375
charge 149 0.0975
charge 150 0.1575
charge 151 0.2175
charge 152 0.0375
charge 153 0.0975
charge 154 0.1575
charge 155 0.2175
charge 156 0.0000
charge 157 0.2000
charge 158 0.2600
charge 159 0.3200
charge 160 -0.0550
charge 161 -0.3200
charge 162 0.0800
charge 163 0.1400
charge 164 0.2000
charge 165 -0.1200
charge 166 0.0050
charge 167 0.1025
charge 168 0.1400
charge 169 0.2000
charge 170 0.7000
charge 171 0.5650
charge 172 0.5850
charge 173 0.6150
charge 174 0.5000
charge 175 -0.5000
charge 176 -0.7600
charge 177 -0.5000
charge 178 -0.1400
charge 179 0.3800
charge 180 0.3000
charge 181 0.0200
charge 182 -0.1100
charge 183 0.0800
charge 184 -0.0500
charge 185 0.0100
charge 186 0.1420
charge 187 -0.3900
charge 188 -0.5420
charge 189 0.3330
charge 190 -0.4900
charge 191 0.4200
charge 192 -0.4200
charge 193 0.3700
charge 194 0.0600
charge 195 -0.1200
charge 196 -0.0600
charge 197 0.0000
charge 198 0.0600
charge 199 0.0350
charge 200 0.3950
charge 201 -0.4300
charge 202 0.1800
charge 203 -0.1800
charge 204 -0.3850
charge 205 0.0850
charge 206 0.5200
charge 207 -0.5300
charge 208 -0.4400
charge 209 0.4500
charge 210 0.7000
charge 211 -0.8000
charge 212 -0.2800
charge 213 -0.2200
charge 214 -0.1600
charge 215 -0.1000
charge 216 0.4500
charge 217 -0.4500
charge 218 0.0000
charge 219 0.4700
charge 220 -0.4700
charge 221 0.0600
charge 222 0.0400
charge 223 -0.0200
charge 224 0.1000
charge 225 -0.0900
charge 226 -0.4000
charge 227 -0.3000
charge 228 0.0000
charge 229 0.3500
charge 230 0.3300
charge 231 0.1300
charge 232 0.1900
charge 233 0.2500
charge 234 0.3100
charge 235 0.2300
charge 236 0.1700
charge 237 0.1100
charge 238 0.0900
charge 239 0.1500
charge 240 -0.8000
charge 241 0.4600
charge 242 0.6400
charge 243 -0.7000
charge 244 0.4400
charge 245 0.2000
charge 246 -0.1100
charge 247 0.1900
charge 248 -0.0500
charge 249 -0.2000
charge 250 0.3100
charge 251 -0.4600
charge 252 0.3600
charge 253 -0.8500
charge 254 0.3700
charge 255 -0.1500
charge 256 0.1000
charge 257 -0.0400
charge 258 0.1000
charge 259 -0.6000
charge 260 0.5000
charge 261 -0.5100
charge 262 0.4500
charge 263 -0.0700
charge 264 0.0800
charge 265 0.4100
charge 266 -0.4000
charge 267 0.3600
charge 268 -0.4200
charge 269 0.1000
charge 270 0.1000
charge 271 -0.1400
charge 272 0.0800
charge 273 -0.5600
charge 274 0.5500
charge 275 -0.5400
charge 276 0.4600
charge 277 -0.0600
charge 278 0.1000
charge 279 0.3800
charge 280 -0.4800
charge 281 -0.7900
charge 282 0.3850
charge 283 0.3550
charge 284 0.1000
charge 285 0.1000
charge 286 -0.5300
charge 287 0.2200
charge 288 -0.5500
charge 289 0.3800
charge 290 0.1500
charge 291 0.4400
charge 292 -0.4900
charge 293 0.2000
charge 294 -0.5000
charge 295 0.2000
charge 296 -0.8100
charge 297 0.3850
charge 298 0.3550
charge 299 0.2000
charge 300 0.3500
charge 301 -0.5600
charge 302 0.4600
charge 303 -0.5100
charge 304 0.3400
charge 305 0.1200
charge 306 0.5200
charge 307 0.3800
charge 308 -0.8000
charge 309 0.4000
charge 310 -0.5100
charge 311 -0.0100
charge 312 0.1200
charge 313 -0.0100
charge 314 0.1400
charge 315 -0.0100
charge 316 0.1300
charge 317 -0.6400
charge 318 0.6500
charge 319 -0.7400
charge 320 0.6600
charge 321 -0.0600
charge 322 0.1000
charge 323 0.4900
charge 324 -0.3000
charge 325 0.4800
charge 326 -0.8100
charge 327 0.4600
charge 328 0.4300
charge 329 0.1400
charge 330 0.1400
charge 331 0.0100
charge 332 0.1600
charge 333 0.7800
charge 334 -0.6600
charge 335 -0.4300
charge 336 0.2000
charge 337 0.1800
charge 338 -0.0600
charge 339 0.1200
charge 340 -1.0000
charge 341 -1.0000
charge 342 -1.0000
charge 343 -1.0000
charge 344 1.0000
charge 345 1.0000
charge 346 1.0000
charge 347 1.0000
charge 348 1.0000
charge 349 1.0000
charge 350 2.0000
charge 351 2.0000
charge 352 2.0000
charge 353 2.0000
charge 354 -0.4000
charge 355 0.1000
charge 356 -0.9000
charge 357 -0.2000
charge 358 0.0600
charge 359 -0.9800
charge 360 -1.0700
charge 361 0.1900
charge 362 0.5100
charge 363 -0.8200
charge 364 -0.3000
charge 365 0.0700
charge 366 -1.3100
charge 367 0.4000
charge 368 -0.4000
charge 369 0.0800
charge 370 0.0000
charge 371 0.0700
charge 372 -0.9800
charge 373 -1.3000
charge 374 0.3000
charge 375 2.5000
charge 376 -0.2500
charge 377 -0.8650
charge 378 1.6200
charge 379 -0.9200
charge 380 -0.6000
charge 381 0.3000
charge 382 -0.0300
charge 383 1.9200
charge 384 -1.1200
charge 385 -0.7000
charge 386 0.4400
charge 387 -0.1000
charge 388 1.6200
charge 389 -0.9700
charge 390 -0.6300
charge 391 0.2800
charge 392 -0.0200
charge 393 -0.5100
charge 394 0.0800
charge 395 -0.1400
charge 396 0.3200
charge 397 0.0200
charge 398 -0.0400
charge 399 -0.4700
charge 400 0.1200
charge 401 0.1400
charge 402 0.2400
charge 403 0.5100
charge 404 -0.4300
charge 405 -0.3300
charge 406 0.1600
charge 407 0.0300
charge 408 0.6350
charge 409 0.6250
charge 410 0.1350
charge 411 -0.2150
charge 412 1.4800
charge 413 -0.6800
charge 414 -0.5400
charge 415 0.1800
charge 416 -1.0000
charge 417 0.4400
charge 418 -0.8000
charge 419 0.4100
charge 420 0.1800
charge 421 0.0300
charge 422 0.3900
charge 423 -0.0600
charge 424 -0.1800
charge 425 0.0600
charge 426 0.0000
charge 427 0.0300
charge 428 0.1900
charge 429 0.2200
charge 430 0.2500
charge 431 1.3740
charge 432 -0.6870
charge 433 0.2450
charge 434 0.1300
charge 435 -0.4200
charge 436 -0.0350
charge 437 0.0250
charge 438 0.0750
charge 439 -0.0550
charge 440 0.1300
charge 441 -0.5700
charge 442 0.4200
charge 443 -0.0050
charge 444 0.2950
charge 445 -0.0150
charge 446 0.0150
charge 447 0.3850
charge 448 0.2150
charge 449 -0.4900
charge 450 -0.5400
charge 451 0.4600
charge 452 -0.1150
charge 453 0.0550
charge 454 0.1150
charge 455 -0.0300
charge 456 0.0850
charge 457 0.0000
charge 458 -0.6780
charge 459 0.4730
charge 460 -0.4470
charge 461 0.2270
charge 462 0.0120
charge 463 0.1550
charge 464 0.0650
charge 465 -0.4680
charge 466 0.1920
charge 467 0.0420
charge 468 -0.8390
charge 469 0.8740
charge 470 0.6530
charge 471 -0.6890
charge 472 -0.0320
charge 473 0.0110
charge 474 0.1970
charge 475 -0.3310
charge 476 0.3780
charge 477 -0.1600
charge 478 -0.0090
charge 479 0.1220
charge 480 -0.2390
charge 481 -0.1630
charge 482 -0.1490
charge 483 0.3170
charge 484 0.1550
charge 485 0.1180
charge 486 -0.0590
charge 487 -0.4910
charge 488 0.2460
charge 489 -0.3200
charge 490 -0.0340
charge 491 0.3010
charge 492 0.0720
charge 493 0.1500
charge 494 0.1350
charge 495 -0.2570
charge 496 0.2750
charge 497 -0.5630
charge 498 0.1850
charge 499 -0.2860
charge 500 0.3060
charge 501 0.0780
charge 502 0.0750
charge 503 0.1870
charge 504 -0.1900
charge 505 -0.0190
charge 506 -0.1540
charge 507 0.1420
charge 508 0.1260
charge 509 -0.2570
charge 510 0.5110
charge 511 -0.5900
charge 512 0.1690
charge 513 -0.1480
charge 514 0.0430
charge 515 0.0910
charge 516 0.1810
charge 517 -0.1220
charge 518 -0.4130
charge 519 0.4050
charge 520 -0.4550
charge 521 0.2500
charge 522 0.0530
charge 523 0.1840
charge 524 0.0980
charge 525 -0.5000
charge 526 0.0010
charge 527 -0.3900
charge 528 -0.2700
charge 529 -0.1270
charge 530 -0.1080
charge 531 -0.2580
charge 532 0.2200
charge 533 0.2250
charge 534 0.3760
charge 535 0.1470
charge 536 0.1720
charge 537 0.1550
charge 538 0.1070
charge 539 0.1100
charge 540 0.1400
charge 541 -0.6940
charge 542 0.4250
charge 543 -0.3590
charge 544 -0.0080
charge 545 -0.1970
charge 546 -0.1120
charge 547 -0.0700
charge 548 -0.3070
charge 549 0.5630
charge 550 -0.0510
charge 551 0.0280
charge 552 0.1460
charge 553 0.1190
charge 554 0.1330
charge 555 0.1130
charge 556 0.1140
charge 557 0.1570
charge 558 -0.7600
charge 559 0.6790
charge 560 -0.7880
charge 561 0.7360
charge 562 0.0380
charge 563 0.3430
charge 564 -0.6420
charge 565 0.4520
charge 566 -0.6820
charge 567 0.0240
charge 568 0.1010
charge 569 0.0860
charge 570 0.4130
charge 571 -0.0300
charge 572 0.2420
charge 573 -0.5150
charge 574 0.2280
charge 575 -0.2990
charge 576 0.1010
charge 577 0.0680
charge 578 0.2050
charge 579 -0.9510
charge 580 0.9650
charge 581 -0.0140
charge 582 0.1300
charge 583 0.0520
charge 584 -0.5990
charge 585 0.3920
charge 586 -0.3480
charge 587 0.0200
charge 588 -0.0420
charge 589 0.3470
charge 590 -0.1960
charge 591 0.0320
charge 592 0.1460
charge 593 0.1080
charge 594 0.1400
charge 595 0.1220
charge 596 0.1660
charge 597 -0.5800
charge 598 0.1730
charge 599 -0.3950
charge 600 -0.1990
charge 601 0.1180
charge 602 0.0930
charge 603 0.2080
charge 604 0.0980
charge 605 -0.1390
charge 606 -0.0790
charge 607 0.0990
charge 608 -0.1680
charge 609 -0.1080
charge 610 -0.1890
charge 611 -0.1290
charge 612 -0.1690
charge 613 -0.1090
charge 614 -0.1380
charge 615 -0.0780
charge 616 -0.0250
charge 617 0.0350
charge 618 -0.0380
charge 619 0.0220
charge 620 -0.3340
charge 621 0.2550
charge 622 0.5230
charge 623 0.5000
charge 624 -0.1400
charge 625 0.2275
charge 626 0.1400
charge 627 -0.0080
charge 628 0.5880
charge 629 -0.1030
charge 630 -0.3320
charge 631 0.0400
charge 632 0.3420
charge 633 -0.0500
charge 634 -0.2050
charge 635 3.0000
charge 636 4.0000
charge 637 3.0000
charge 638 0.6190
charge 639 -0.3950
charge 640 0.1740
charge 641 3.0000
charge 642 3.0000
charge 643 3.0000
charge 644 3.0000
charge 645 3.0000
charge 646 -0.3440
charge 647 -0.6280
charge 648 0.2000
charge 649 -0.1200
charge 650 -0.0600
charge 651 0.0000
charge 652 -0.2300
charge 653 0.0300
charge 654 -0.0990
charge 655 0.0990
charge 656 0.2200
charge 657 -0.2200
charge 658 0.1300
charge 659 -0.1300
charge 660 -0.2200
charge 661 0.2200
charge 662 0.1500
charge 663 0.4500
charge 664 -0.2000
charge 665 0.2000
charge 666 -0.2000
charge 667 0.2000
charge 668 -0.2000
charge 669 0.1000
charge 670 -0.1000
charge 671 0.0550
charge 672 -0.2200
charge 673 0.0650
charge 674 0.0130
charge 675 -0.1060
charge 676 -0.0900
charge 677 -0.1190
charge 678 0.1410
charge 679 0.1290
charge 680 0.8270
charge 681 -0.8850
charge 682 0.4260
charge 683 0.4650
charge 684 0.1190
charge 685 -0.0200
charge 686 0.0400
charge 687 -0.6200
charge 688 -0.7850
charge 689 -0.7850
charge 690 0.5500
charge 691 -0.5600
charge 692 0.4600
charge 693 -0.0800
charge 694 -0.0200
charge 695 0.0400
charge 696 0.1000
charge 697 0.0600
charge 698 0.5400
charge 699 -0.3700
charge 700 0.0200
charge 701 0.0600
charge 702 0.0800
charge 703 0.1400
charge 704 0.2000
charge 705 0.6500
charge 706 0.0900
charge 707 0.0350
charge 708 -0.9000
charge 709 -0.5000
charge 710 0.8600
charge 711 -0.4500
charge 712 0.2100
charge 713 0.1600
charge 714 -0.1000
charge 715 0.0300
charge 716 0.0300
charge 717 0.0600
charge 718 -0.7800
charge 719 0.9684
charge 720 -0.5081
charge 721 -0.0080
charge 722 0.1720
charge 723 1.3400
charge 724 -0.3900
charge 725 0.7940
charge 726 -0.5980
charge 727 0.0000
charge 728 0.5110
charge 729 -1.0220
charge 730 -0.9000
charge 731 -0.7800
charge 732 -0.6300
charge 733 0.0000
charge 734 0.0200
charge 735 0.0300
charge 736 0.0600
charge 737 0.0800
charge 738 0.0900
charge 739 0.3600
charge 740 0.3800
charge 741 0.0600
charge 742 0.1200
charge 743 0.1800
charge 744 0.1400
charge 745 0.1500
charge 746 0.1800
charge 747 0.2000
charge 748 0.2100
charge 749 0.1150
charge 750 0.1750
charge 751 0.2350
charge 752 0.1950
charge 753 0.1525
charge 754 0.1350
charge 755 -0.2100
charge 756 0.2000
charge 757 0.0100
charge 758 0.0100
charge 759 0.0100
charge 760 0.0600
charge 761 0.4500
charge 762 0.4800
charge 763 0.5100
charge 764 -0.6550
charge 765 0.3900
charge 766 -0.5000
charge 767 -0.5600
charge 768 -0.6000
charge 769 0.0000
charge 770 -0.1000
charge 771 0.2900
charge 772 0.0900
charge 773 0.1500
charge 774 0.2100
charge 775 0.2700
charge 776 0.0960
charge 777 -0.0390
charge 778 0.0270
charge 779 0.0110
charge 780 0.0740
charge 781 -0.0290
charge 782 0.7000
charge 783 -0.3520
charge 784 -0.7090
charge 785 0.3170
charge 786 -0.2200
charge 787 0.0200
charge 788 0.1000
charge 789 0.1200
charge 790 0.2200
charge 791 0.3600
charge 792 0.2400
charge 793 0.1200
charge 794 0.4800
charge 795 -0.1200
charge 796 0.2500
charge 797 0.1500
charge 798 -0.0800
charge 799 -0.1060
charge 800 -0.2000
charge 801 -0.0060
charge 802 0.1030
charge 803 0.0970
charge 804 0.2000
charge 805 -0.2000
charge 806 -0.0060
charge 807 0.1030
charge 808 0.0970
charge 809 0.2000
charge 810 -0.0800
charge 811 -0.0800
charge 812 -0.0800
charge 813 0.1000
charge 814 -0.2500
charge 815 0.6000
charge 816 -0.1500
charge 817 -0.0250
charge 818 -0.0450
charge 819 0.1450
charge 820 0.8880
charge 821 1.0030
charge 822 -0.6580
charge 823 -0.6340
charge 824 0.4110
charge 825 -0.4420
charge 826 0.4350
charge 827 0.2250
charge 828 0.2550
charge 829 -0.0340
charge 830 0.0030
charge 831 0.3000
charge 832 -0.0400
charge 833 -0.0575
charge 834 2.0000
charge 835 -0.0700
charge 836 0.0300
charge 837 0.1300
charge 838 -0.1300
charge 839 0.1000
charge 840 -0.6850
charge 841 0.1550
charge 842 -0.1000
charge 843 -0.4270
charge 844 0.2180
charge 845 0.6000
charge 846 -0.6000
charge 847 -0.3600
charge 848 0.0000
charge 849 0.0600
charge 850 0.1200
charge 851 0.1800
charge 852 0.0600
charge 853 0.5700
charge 854 -0.5700
charge 855 0.0000
charge 856 0.0200
charge 857 -0.0400
charge 858 0.0000
charge 859 0.0600
charge 860 -0.0700
charge 861 -0.1400
charge 862 0.1700
charge 863 0.1100
charge 864 0.1500
charge 865 0.1700
charge 866 1.0000
charge 867 0.8500
charge 868 0.7000
charge 869 0.5500
charge 870 -0.1000
charge 871 -0.4300
charge 872 -0.3700
charge 873 -0.3100
charge 874 -0.2500
charge 875 -1.0000
charge 876 -1.0000
charge 877 -1.0000
charge 878 -1.0000
charge 879 1.0000
charge 880 1.0000
charge 881 1.0000
charge 882 1.0000
charge 883 1.0000
charge 884 2.0000
charge 885 2.0000
charge 886 2.0000
charge 887 2.0000
charge 888 -0.0500
charge 889 0.0500
charge 890 0.1500
charge 891 0.2500
charge 892 0.1000
charge 893 0.1150
charge 894 0.1350
charge 895 0.0150
charge 896 0.1550
charge 897 0.0000
charge 898 -0.1150
charge 899 0.1500
charge 900 -0.2500
charge 901 -0.1000
charge 902 0.0500
charge 903 -0.1000
charge 904 0.2000
charge 905 -0.2500
charge 906 0.0880
########################################
## ##
## Biopolymer Atom Type Conversions ##
## ##
########################################
biotype 1 N "Glycine" 177
biotype 2 CA "Glycine" 162
biotype 3 C "Glycine" 174
biotype 4 HN "Glycine" 180
biotype 5 O "Glycine" 175
biotype 6 HA "Glycine" 82
biotype 7 N "Alanine" 177
biotype 8 CA "Alanine" 163
biotype 9 C "Alanine" 174
biotype 10 HN "Alanine" 180
biotype 11 O "Alanine" 175
biotype 12 HA "Alanine" 82
biotype 13 CB "Alanine" 77
biotype 14 HB "Alanine" 82
biotype 15 N "Valine" 177
biotype 16 CA "Valine" 163
biotype 17 C "Valine" 174
biotype 18 HN "Valine" 180
biotype 19 O "Valine" 175
biotype 20 HA "Valine" 82
biotype 21 CB "Valine" 79
biotype 22 HB "Valine" 82
biotype 23 CG1 "Valine" 77
biotype 24 HG1 "Valine" 82
biotype 25 CG2 "Valine" 77
biotype 26 HG2 "Valine" 82
biotype 27 N "Leucine" 177
biotype 28 CA "Leucine" 163
biotype 29 C "Leucine" 174
biotype 30 HN "Leucine" 180
biotype 31 O "Leucine" 175
biotype 32 HA "Leucine" 82
biotype 33 CB "Leucine" 78
biotype 34 HB "Leucine" 82
biotype 35 CG "Leucine" 79
biotype 36 HG "Leucine" 82
biotype 37 CD1 "Leucine" 77
biotype 38 HD1 "Leucine" 82
biotype 39 CD2 "Leucine" 77
biotype 40 HD2 "Leucine" 82
biotype 41 N "Isoleucine" 177
biotype 42 CA "Isoleucine" 163
biotype 43 C "Isoleucine" 174
biotype 44 HN "Isoleucine" 180
biotype 45 O "Isoleucine" 175
biotype 46 HA "Isoleucine" 82
biotype 47 CB "Isoleucine" 79
biotype 48 HB "Isoleucine" 82
biotype 49 CG1 "Isoleucine" 77
biotype 50 HG1 "Isoleucine" 82
biotype 51 CG2 "Isoleucine" 78
biotype 52 HG2 "Isoleucine" 82
biotype 53 CD "Isoleucine" 77
biotype 54 HD "Isoleucine" 82
biotype 55 N "Serine" 177
biotype 56 CA "Serine" 163
biotype 57 C "Serine" 174
biotype 58 HN "Serine" 180
biotype 59 O "Serine" 175
biotype 60 HA "Serine" 82
biotype 61 CB "Serine" 96
biotype 62 HB "Serine" 82
biotype 63 OG "Serine" 93
biotype 64 HG "Serine" 94
biotype 65 N "Threonine" 177
biotype 66 CA "Threonine" 163
biotype 67 C "Threonine" 174
biotype 68 HN "Threonine" 180
biotype 69 O "Threonine" 175
biotype 70 HA "Threonine" 82
biotype 71 CB "Threonine" 97
biotype 72 HB "Threonine" 82
biotype 73 OG1 "Threonine" 93
biotype 74 HG1 "Threonine" 94
biotype 75 CG2 "Threonine" 77
biotype 76 HG2 "Threonine" 82
biotype 77 N "Cysteine (SH)" 177
biotype 78 CA "Cysteine (SH)" 163
biotype 79 C "Cysteine (SH)" 174
biotype 80 HN "Cysteine (SH)" 180
biotype 81 O "Cysteine (SH)" 175
biotype 82 HA "Cysteine (SH)" 82
biotype 83 CB "Cysteine (SH)" 145
biotype 84 HB "Cysteine (SH)" 82
biotype 85 SG "Cysteine (SH)" 139
biotype 86 HG "Cysteine (SH)" 143
biotype 87 N "Cystine (SS)" 177
biotype 88 CA "Cystine (SS)" 163
biotype 89 C "Cystine (SS)" 174
biotype 90 HN "Cystine (SS)" 180
biotype 91 O "Cystine (SS)" 175
biotype 92 HA "Cystine (SS)" 82
biotype 93 CB "Cystine (SS)" 153
biotype 94 HB "Cystine (SS)" 82
biotype 95 SG "Cystine (SS)" 142
biotype 96 N "Cysteine (S-)" -1
biotype 97 CA "Cysteine (S-)" -1
biotype 98 C "Cysteine (S-)" -1
biotype 99 HN "Cysteine (S-)" -1
biotype 100 O "Cysteine (S-)" -1
biotype 101 HA "Cysteine (S-)" -1
biotype 102 CB "Cysteine (S-)" -1
biotype 103 HB "Cysteine (S-)" -1
biotype 104 SG "Cysteine (S-)" -1
biotype 105 N "Proline" 178
biotype 106 CA "Proline" 185
biotype 107 C "Proline" 174
biotype 108 O "Proline" 175
biotype 109 HA "Proline" 82
biotype 110 CB "Proline" 78
biotype 111 HB "Proline" 82
biotype 112 CG "Proline" 78
biotype 113 HG "Proline" 82
biotype 114 CD "Proline" 184
biotype 115 HD "Proline" 82
biotype 116 N "Phenylalanine" 177
biotype 117 CA "Phenylalanine" 163
biotype 118 C "Phenylalanine" 174
biotype 119 HN "Phenylalanine" 180
biotype 120 O "Phenylalanine" 175
biotype 121 HA "Phenylalanine" 82
biotype 122 CB "Phenylalanine" 91
biotype 123 HB "Phenylalanine" 82
biotype 124 CG "Phenylalanine" 87
biotype 125 CD "Phenylalanine" 87
biotype 126 HD "Phenylalanine" 88
biotype 127 CE "Phenylalanine" 87
biotype 128 HE "Phenylalanine" 88
biotype 129 CZ "Phenylalanine" 87
biotype 130 HZ "Phenylalanine" 88
biotype 131 N "Tyrosine" 177
biotype 132 CA "Tyrosine" 163
biotype 133 C "Tyrosine" 174
biotype 134 HN "Tyrosine" 180
biotype 135 O "Tyrosine" 175
biotype 136 HA "Tyrosine" 82
biotype 137 CB "Tyrosine" 91
biotype 138 HB "Tyrosine" 82
biotype 139 CG "Tyrosine" 87
biotype 140 CD "Tyrosine" 87
biotype 141 HD "Tyrosine" 88
biotype 142 CE "Tyrosine" 87
biotype 143 HE "Tyrosine" 88
biotype 144 CZ "Tyrosine" 105
biotype 145 OH "Tyrosine" 106
biotype 146 HH "Tyrosine" 107
biotype 147 N "Tyrosine (O-)" -1
biotype 148 CA "Tyrosine (O-)" -1
biotype 149 C "Tyrosine (O-)" -1
biotype 150 HN "Tyrosine (O-)" -1
biotype 151 O "Tyrosine (O-)" -1
biotype 152 HA "Tyrosine (O-)" -1
biotype 153 CB "Tyrosine (O-)" -1
biotype 154 HB "Tyrosine (O-)" -1
biotype 155 CG "Tyrosine (O-)" -1
biotype 156 CD "Tyrosine (O-)" -1
biotype 157 HD "Tyrosine (O-)" -1
biotype 158 CE "Tyrosine (O-)" -1
biotype 159 HE "Tyrosine (O-)" -1
biotype 160 CZ "Tyrosine (O-)" -1
biotype 161 OH "Tyrosine (O-)" -1
biotype 162 N "Tryptophan" 177
biotype 163 CA "Tryptophan" 163
biotype 164 C "Tryptophan" 174
biotype 165 HN "Tryptophan" 180
biotype 166 O "Tryptophan" 175
biotype 167 HA "Tryptophan" 82
biotype 168 CB "Tryptophan" 78
biotype 169 HB "Tryptophan" 82
biotype 170 CG "Tryptophan" 438
biotype 171 CD1 "Tryptophan" 452
biotype 172 HD1 "Tryptophan" 88
biotype 173 CD2 "Tryptophan" 439
biotype 174 NE1 "Tryptophan" 441
biotype 175 HE1 "Tryptophan" 442
biotype 176 CE2 "Tryptophan" 440
biotype 177 CE3 "Tryptophan" 87
biotype 178 HE3 "Tryptophan" 88
biotype 179 CZ2 "Tryptophan" 87
biotype 180 HZ2 "Tryptophan" 88
biotype 181 CZ3 "Tryptophan" 87
biotype 182 HZ3 "Tryptophan" 88
biotype 183 CH2 "Tryptophan" 87
biotype 184 HH2 "Tryptophan" 88
biotype 185 N "Histidine (+)" 177
biotype 186 CA "Histidine (+)" 163
biotype 187 C "Histidine (+)" 174
biotype 188 HN "Histidine (+)" 180
biotype 189 O "Histidine (+)" 175
biotype 190 HA "Histidine (+)" 82
biotype 191 CB "Histidine (+)" 443
biotype 192 HB "Histidine (+)" 82
biotype 193 CG "Histidine (+)" 448
biotype 194 ND1 "Histidine (+)" 450
biotype 195 HD1 "Histidine (+)" 451
biotype 196 CD2 "Histidine (+)" 448
biotype 197 HD2 "Histidine (+)" 88
biotype 198 CE1 "Histidine (+)" 447
biotype 199 HE1 "Histidine (+)" 88
biotype 200 NE2 "Histidine (+)" 450
biotype 201 HE2 "Histidine (+)" 451
biotype 202 N "Histidine (HD)" 177
biotype 203 CA "Histidine (HD)" 163
biotype 204 C "Histidine (HD)" 174
biotype 205 HN "Histidine (HD)" 180
biotype 206 O "Histidine (HD)" 175
biotype 207 HA "Histidine (HD)" 82
biotype 208 CB "Histidine (HD)" 443
biotype 209 HB "Histidine (HD)" 82
biotype 210 CG "Histidine (HD)" 446
biotype 211 ND1 "Histidine (HD)" 441
biotype 212 HD1 "Histidine (HD)" 442
biotype 213 CD2 "Histidine (HD)" 445
biotype 214 HD2 "Histidine (HD)" 88
biotype 215 CE1 "Histidine (HD)" 444
biotype 216 HE1 "Histidine (HD)" 88
biotype 217 NE2 "Histidine (HD)" 449
biotype 218 N "Histidine (HE)" 177
biotype 219 CA "Histidine (HE)" 163
biotype 220 C "Histidine (HE)" 174
biotype 221 HN "Histidine (HE)" 180
biotype 222 O "Histidine (HE)" 175
biotype 223 HA "Histidine (HE)" 82
biotype 224 CB "Histidine (HE)" 443
biotype 225 HB "Histidine (HE)" 82
biotype 226 CG "Histidine (HE)" 445
biotype 227 ND1 "Histidine (HE)" 449
biotype 228 CD2 "Histidine (HE)" 446
biotype 229 HD2 "Histidine (HE)" 88
biotype 230 CE1 "Histidine (HE)" 444
biotype 231 HE1 "Histidine (HE)" 88
biotype 232 NE2 "Histidine (HE)" 441
biotype 233 HE2 "Histidine (HE)" 442
biotype 234 N "Aspartic Acid" 177
biotype 235 CA "Aspartic Acid" 163
biotype 236 C "Aspartic Acid" 174
biotype 237 HN "Aspartic Acid" 180
biotype 238 O "Aspartic Acid" 175
biotype 239 HA "Aspartic Acid" 82
biotype 240 CB "Aspartic Acid" 213
biotype 241 HB "Aspartic Acid" 82
biotype 242 CG "Aspartic Acid" 210
biotype 243 OD "Aspartic Acid" 211
biotype 244 N "Aspartic Acid (COOH)" -1
biotype 245 CA "Aspartic Acid (COOH)" -1
biotype 246 C "Aspartic Acid (COOH)" -1
biotype 247 HN "Aspartic Acid (COOH)" -1
biotype 248 O "Aspartic Acid (COOH)" -1
biotype 249 HA "Aspartic Acid (COOH)" -1
biotype 250 CB "Aspartic Acid (COOH)" -1
biotype 251 HB "Aspartic Acid (COOH)" -1
biotype 252 CG "Aspartic Acid (COOH)" -1
biotype 253 OD1 "Aspartic Acid (COOH)" -1
biotype 254 OD2 "Aspartic Acid (COOH)" -1
biotype 255 HD2 "Aspartic Acid (COOH)" -1
biotype 256 N "Asparagine" 177
biotype 257 CA "Asparagine" 163
biotype 258 C "Asparagine" 174
biotype 259 HN "Asparagine" 180
biotype 260 O "Asparagine" 175
biotype 261 HA "Asparagine" 82
biotype 262 CB "Asparagine" 78
biotype 263 HB "Asparagine" 82
biotype 264 CG "Asparagine" 174
biotype 265 OD1 "Asparagine" 175
biotype 266 ND2 "Asparagine" 176
biotype 267 HD2 "Asparagine" 179
biotype 268 N "Glutamic Acid" 177
biotype 269 CA "Glutamic Acid" 163
biotype 270 C "Glutamic Acid" 174
biotype 271 HN "Glutamic Acid" 180
biotype 272 O "Glutamic Acid" 175
biotype 273 HA "Glutamic Acid" 82
biotype 274 CB "Glutamic Acid" 78
biotype 275 HB "Glutamic Acid" 82
biotype 276 CG "Glutamic Acid" 213
biotype 277 HG "Glutamic Acid" 82
biotype 278 CD "Glutamic Acid" 210
biotype 279 OE "Glutamic Acid" 211
biotype 280 N "Glutamic Acid (COOH)" -1
biotype 281 CA "Glutamic Acid (COOH)" -1
biotype 282 C "Glutamic Acid (COOH)" -1
biotype 283 HN "Glutamic Acid (COOH)" -1
biotype 284 O "Glutamic Acid (COOH)" -1
biotype 285 HA "Glutamic Acid (COOH)" -1
biotype 286 CB "Glutamic Acid (COOH)" -1
biotype 287 HB "Glutamic Acid (COOH)" -1
biotype 288 CG "Glutamic Acid (COOH)" -1
biotype 289 HG "Glutamic Acid (COOH)" -1
biotype 290 CD "Glutamic Acid (COOH)" -1
biotype 291 OE1 "Glutamic Acid (COOH)" -1
biotype 292 OE2 "Glutamic Acid (COOH)" -1
biotype 293 HE2 "Glutamic Acid (COOH)" -1
biotype 294 N "Glutamine" 177
biotype 295 CA "Glutamine" 163
biotype 296 C "Glutamine" 174
biotype 297 HN "Glutamine" 180
biotype 298 O "Glutamine" 175
biotype 299 HA "Glutamine" 82
biotype 300 CB "Glutamine" 78
biotype 301 HB "Glutamine" 82
biotype 302 CG "Glutamine" 78
biotype 303 HG "Glutamine" 82
biotype 304 CD "Glutamine" 174
biotype 305 OE1 "Glutamine" 175
biotype 306 NE2 "Glutamine" 176
biotype 307 HE2 "Glutamine" 179
biotype 308 N "Methionine" 177
biotype 309 CA "Methionine" 163
biotype 310 C "Methionine" 174
biotype 311 HN "Methionine" 180
biotype 312 O "Methionine" 175
biotype 313 HA "Methionine" 82
biotype 314 CB "Methionine" 78
biotype 315 HB "Methionine" 82
biotype 316 CG "Methionine" 149
biotype 317 HG "Methionine" 82
biotype 318 SD "Methionine" 141
biotype 319 CE "Methionine" 148
biotype 320 HE "Methionine" 82
biotype 321 N "Lysine" 177
biotype 322 CA "Lysine" 163
biotype 323 C "Lysine" 174
biotype 324 HN "Lysine" 180
biotype 325 O "Lysine" 175
biotype 326 HA "Lysine" 82
biotype 327 CB "Lysine" 78
biotype 328 HB "Lysine" 82
biotype 329 CG "Lysine" 78
biotype 330 HG "Lysine" 82
biotype 331 CD "Lysine" 78
biotype 332 HD "Lysine" 82
biotype 333 CE "Lysine" 232
biotype 334 HE "Lysine" 82
biotype 335 NZ "Lysine" 227
biotype 336 HZ "Lysine" 230
biotype 337 N "Lysine (NH2)" -1
biotype 338 CA "Lysine (NH2)" -1
biotype 339 C "Lysine (NH2)" -1
biotype 340 HN "Lysine (NH2)" -1
biotype 341 O "Lysine (NH2)" -1
biotype 342 HA "Lysine (NH2)" -1
biotype 343 CB "Lysine (NH2)" -1
biotype 344 HB "Lysine (NH2)" -1
biotype 345 CG "Lysine (NH2)" -1
biotype 346 HG "Lysine (NH2)" -1
biotype 347 CD "Lysine (NH2)" -1
biotype 348 HD "Lysine (NH2)" -1
biotype 349 CE "Lysine (NH2)" -1
biotype 350 HE "Lysine (NH2)" -1
biotype 351 NZ "Lysine (NH2)" -1
biotype 352 HZ "Lysine (NH2)" -1
biotype 353 N "Arginine" 177
biotype 354 CA "Arginine" 163
biotype 355 C "Arginine" 174
biotype 356 HN "Arginine" 180
biotype 357 O "Arginine" 175
biotype 358 HA "Arginine" 82
biotype 359 CB "Arginine" 78
biotype 360 HB "Arginine" 82
biotype 361 CG "Arginine" 248
biotype 362 HG "Arginine" 82
biotype 363 CD "Arginine" 247
biotype 364 HD "Arginine" 82
biotype 365 NE "Arginine" 243
biotype 366 HE "Arginine" 244
biotype 367 CZ "Arginine" 242
biotype 368 NH "Arginine" 240
biotype 369 HH "Arginine" 241
biotype 370 N "Ornithine" 177
biotype 371 CA "Ornithine" 163
biotype 372 C "Ornithine" 174
biotype 373 HN "Ornithine" 180
biotype 374 O "Ornithine" 175
biotype 375 HA "Ornithine" 82
biotype 376 CB "Ornithine" 78
biotype 377 HB "Ornithine" 82
biotype 378 CG "Ornithine" 78
biotype 379 HG "Ornithine" 82
biotype 380 CD "Ornithine" 232
biotype 381 HD "Ornithine" 82
biotype 382 NE "Ornithine" 227
biotype 383 HE "Ornithine" 230
biotype 384 N "MethylAlanine (AIB)" 177
biotype 385 CA "MethylAlanine (AIB)" 164
biotype 386 C "MethylAlanine (AIB)" 174
biotype 387 HN "MethylAlanine (AIB)" 180
biotype 388 O "MethylAlanine (AIB)" 175
biotype 389 CB "MethylAlanine (AIB)" 77
biotype 390 HB "MethylAlanine (AIB)" 82
biotype 391 N "Pyroglutamic Acid" 177
biotype 392 CA "Pyroglutamic Acid" 163
biotype 393 C "Pyroglutamic Acid" 174
biotype 394 HN "Pyroglutamic Acid" 180
biotype 395 O "Pyroglutamic Acid" 175
biotype 396 HA "Pyroglutamic Acid" 82
biotype 397 CB "Pyroglutamic Acid" 78
biotype 398 HB "Pyroglutamic Acid" 82
biotype 399 CG "Pyroglutamic Acid" 213
biotype 400 HG "Pyroglutamic Acid" 82
biotype 401 CD "Pyroglutamic Acid" 174
biotype 402 OE "Pyroglutamic Acid" 175
biotype 403 C "Formyl N-Terminus" 174
biotype 404 H "Formyl N-Terminus" 218
biotype 405 O "Formyl N-Terminus" 175
biotype 406 CH3 "Acetyl N-Terminus" 77
biotype 407 H "Acetyl N-Terminus" 82
biotype 408 C "Acetyl N-Terminus" 174
biotype 409 O "Acetyl N-Terminus" 175
biotype 410 N "Amide C-Terminus" 176
biotype 411 HN "Amide C-Terminus" 179
biotype 412 N "N-MeAmide C-Terminus" 177
biotype 413 HN "N-MeAmide C-Terminus" 180
biotype 414 CH3 "N-MeAmide C-Terminus" 181
biotype 415 H "N-MeAmide C-Terminus" 82
biotype 416 N "N-Terminal GLY" 227
biotype 417 CA "N-Terminal GLY" 232
biotype 418 C "N-Terminal GLY" 174
biotype 419 HN "N-Terminal GLY" 230
biotype 420 O "N-Terminal GLY" 175
biotype 421 HA "N-Terminal GLY" 82
biotype 422 N "N-Terminal ALA" 227
biotype 423 CA "N-Terminal ALA" 233
biotype 424 C "N-Terminal ALA" 174
biotype 425 HN "N-Terminal ALA" 230
biotype 426 O "N-Terminal ALA" 175
biotype 427 HA "N-Terminal ALA" 82
biotype 428 N "N-Terminal VAL" 227
biotype 429 CA "N-Terminal VAL" 233
biotype 430 C "N-Terminal VAL" 174
biotype 431 HN "N-Terminal VAL" 230
biotype 432 O "N-Terminal VAL" 175
biotype 433 HA "N-Terminal VAL" 82
biotype 434 N "N-Terminal LEU" 227
biotype 435 CA "N-Terminal LEU" 233
biotype 436 C "N-Terminal LEU" 174
biotype 437 HN "N-Terminal LEU" 230
biotype 438 O "N-Terminal LEU" 175
biotype 439 HA "N-Terminal LEU" 82
biotype 440 N "N-Terminal ILE" 227
biotype 441 CA "N-Terminal ILE" 233
biotype 442 C "N-Terminal ILE" 174
biotype 443 HN "N-Terminal ILE" 230
biotype 444 O "N-Terminal ILE" 175
biotype 445 HA "N-Terminal ILE" 82
biotype 446 N "N-Terminal SER" 227
biotype 447 CA "N-Terminal SER" 233
biotype 448 C "N-Terminal SER" 174
biotype 449 HN "N-Terminal SER" 230
biotype 450 O "N-Terminal SER" 175
biotype 451 HA "N-Terminal SER" 82
biotype 452 N "N-Terminal THR" 227
biotype 453 CA "N-Terminal THR" 233
biotype 454 C "N-Terminal THR" 174
biotype 455 HN "N-Terminal THR" 230
biotype 456 O "N-Terminal THR" 175
biotype 457 HA "N-Terminal THR" 82
biotype 458 N "N-Terminal CYS (SH)" 227
biotype 459 CA "N-Terminal CYS (SH)" 233
biotype 460 C "N-Terminal CYS (SH)" 174
biotype 461 HN "N-Terminal CYS (SH)" 230
biotype 462 O "N-Terminal CYS (SH)" 175
biotype 463 HA "N-Terminal CYS (SH)" 82
biotype 464 N "N-Terminal CYX (SS)" 227
biotype 465 CA "N-Terminal CYX (SS)" 233
biotype 466 C "N-Terminal CYX (SS)" 174
biotype 467 HN "N-Terminal CYX (SS)" 230
biotype 468 O "N-Terminal CYX (SS)" 175
biotype 469 HA "N-Terminal CYX (SS)" 82
biotype 470 N "N-Terminal CYD (S-)" -1
biotype 471 CA "N-Terminal CYD (S-)" -1
biotype 472 C "N-Terminal CYD (S-)" -1
biotype 473 HN "N-Terminal CYD (S-)" -1
biotype 474 O "N-Terminal CYD (S-)" -1
biotype 475 HA "N-Terminal CYD (S-)" -1
biotype 476 N "N-Terminal PRO" 249
biotype 477 CA "N-Terminal PRO" 235
biotype 478 C "N-Terminal PRO" 174
biotype 479 HN "N-Terminal PRO" 250
biotype 480 O "N-Terminal PRO" 175
biotype 481 HA "N-Terminal PRO" 82
biotype 482 CD "N-Terminal PRO" 236
biotype 483 HD "N-Terminal PRO" 82
biotype 484 N "N-Terminal PHE" 227
biotype 485 CA "N-Terminal PHE" 233
biotype 486 C "N-Terminal PHE" 174
biotype 487 HN "N-Terminal PHE" 230
biotype 488 O "N-Terminal PHE" 175
biotype 489 HA "N-Terminal PHE" 82
biotype 490 N "N-Terminal TYR" 227
biotype 491 CA "N-Terminal TYR" 233
biotype 492 C "N-Terminal TYR" 174
biotype 493 HN "N-Terminal TYR" 230
biotype 494 O "N-Terminal TYR" 175
biotype 495 HA "N-Terminal TYR" 82
biotype 496 N "N-Terminal TYD (O-)" -1
biotype 497 CA "N-Terminal TYD (O-)" -1
biotype 498 C "N-Terminal TYD (O-)" -1
biotype 499 HN "N-Terminal TYD (O-)" -1
biotype 500 O "N-Terminal TYD (O-)" -1
biotype 501 HA "N-Terminal TYD (O-)" -1
biotype 502 N "N-Terminal TRP" 227
biotype 503 CA "N-Terminal TRP" 233
biotype 504 C "N-Terminal TRP" 174
biotype 505 HN "N-Terminal TRP" 230
biotype 506 O "N-Terminal TRP" 175
biotype 507 HA "N-Terminal TRP" 82
biotype 508 N "N-Terminal HIS (+)" 227
biotype 509 CA "N-Terminal HIS (+)" 233
biotype 510 C "N-Terminal HIS (+)" 174
biotype 511 HN "N-Terminal HIS (+)" 230
biotype 512 O "N-Terminal HIS (+)" 175
biotype 513 HA "N-Terminal HIS (+)" 82
biotype 514 N "N-Terminal HIS (HD)" 227
biotype 515 CA "N-Terminal HIS (HD)" 233
biotype 516 C "N-Terminal HIS (HD)" 174
biotype 517 HN "N-Terminal HIS (HD)" 230
biotype 518 O "N-Terminal HIS (HD)" 175
biotype 519 HA "N-Terminal HIS (HD)" 82
biotype 520 N "N-Terminal HIS (HE)" 227
biotype 521 CA "N-Terminal HIS (HE)" 233
biotype 522 C "N-Terminal HIS (HE)" 174
biotype 523 HN "N-Terminal HIS (HE)" 230
biotype 524 O "N-Terminal HIS (HE)" 175
biotype 525 HA "N-Terminal HIS (HE)" 82
biotype 526 N "N-Terminal ASP" 227
biotype 527 CA "N-Terminal ASP" 233
biotype 528 C "N-Terminal ASP" 174
biotype 529 HN "N-Terminal ASP" 230
biotype 530 O "N-Terminal ASP" 175
biotype 531 HA "N-Terminal ASP" 82
biotype 532 N "N-Terminal ASH (COOH)" -1
biotype 533 CA "N-Terminal ASH (COOH)" -1
biotype 534 C "N-Terminal ASH (COOH)" -1
biotype 535 HN "N-Terminal ASH (COOH)" -1
biotype 536 O "N-Terminal ASH (COOH)" -1
biotype 537 HA "N-Terminal ASH (COOH)" -1
biotype 538 N "N-Terminal ASN" 227
biotype 539 CA "N-Terminal ASN" 233
biotype 540 C "N-Terminal ASN" 174
biotype 541 HN "N-Terminal ASN" 230
biotype 542 O "N-Terminal ASN" 175
biotype 543 HA "N-Terminal ASN" 82
biotype 544 N "N-Terminal GLU" 227
biotype 545 CA "N-Terminal GLU" 233
biotype 546 C "N-Terminal GLU" 174
biotype 547 HN "N-Terminal GLU" 230
biotype 548 O "N-Terminal GLU" 175
biotype 549 HA "N-Terminal GLU" 82
biotype 550 N "N-Terminal GLH (COOH)" -1
biotype 551 CA "N-Terminal GLH (COOH)" -1
biotype 552 C "N-Terminal GLH (COOH)" -1
biotype 553 HN "N-Terminal GLH (COOH)" -1
biotype 554 O "N-Terminal GLH (COOH)" -1
biotype 555 HA "N-Terminal GLH (COOH)" -1
biotype 556 N "N-Terminal GLN" 227
biotype 557 CA "N-Terminal GLN" 233
biotype 558 C "N-Terminal GLN" 174
biotype 559 HN "N-Terminal GLN" 230
biotype 560 O "N-Terminal GLN" 175
biotype 561 HA "N-Terminal GLN" 82
biotype 562 N "N-Terminal MET" 227
biotype 563 CA "N-Terminal MET" 233
biotype 564 C "N-Terminal MET" 174
biotype 565 HN "N-Terminal MET" 230
biotype 566 O "N-Terminal MET" 175
biotype 567 HA "N-Terminal MET" 82
biotype 568 N "N-Terminal LYS" 227
biotype 569 CA "N-Terminal LYS" 233
biotype 570 C "N-Terminal LYS" 174
biotype 571 HN "N-Terminal LYS" 230
biotype 572 O "N-Terminal LYS" 175
biotype 573 HA "N-Terminal LYS" 82
biotype 574 N "N-Terminal LYD (NH2)" -1
biotype 575 CA "N-Terminal LYD (NH2)" -1
biotype 576 C "N-Terminal LYD (NH2)" -1
biotype 577 HN "N-Terminal LYD (NH2)" -1
biotype 578 O "N-Terminal LYD (NH2)" -1
biotype 579 HA "N-Terminal LYD (NH2)" -1
biotype 580 N "N-Terminal ARG" 227
biotype 581 CA "N-Terminal ARG" 233
biotype 582 C "N-Terminal ARG" 174
biotype 583 HN "N-Terminal ARG" 230
biotype 584 O "N-Terminal ARG" 175
biotype 585 HA "N-Terminal ARG" 82
biotype 586 N "N-Terminal ORN" 227
biotype 587 CA "N-Terminal ORN" 233
biotype 588 C "N-Terminal ORN" 174
biotype 589 HN "N-Terminal ORN" 230
biotype 590 O "N-Terminal ORN" 175
biotype 591 HA "N-Terminal ORN" 82
biotype 592 N "N-Terminal AIB" 227
biotype 593 CA "N-Terminal AIB" 234
biotype 594 C "N-Terminal AIB" 174
biotype 595 HN "N-Terminal AIB" 230
biotype 596 O "N-Terminal AIB" 175
biotype 597 N "C-Terminal GLY" 177
biotype 598 CA "C-Terminal GLY" 223
biotype 599 C "C-Terminal GLY" 210
biotype 600 HN "C-Terminal GLY" 180
biotype 601 OXT "C-Terminal GLY" 211
biotype 602 HA "C-Terminal GLY" 82
biotype 603 N "C-Terminal ALA" 177
biotype 604 CA "C-Terminal ALA" 222
biotype 605 C "C-Terminal ALA" 210
biotype 606 HN "C-Terminal ALA" 180
biotype 607 OXT "C-Terminal ALA" 211
biotype 608 HA "C-Terminal ALA" 82
biotype 609 N "C-Terminal VAL" 177
biotype 610 CA "C-Terminal VAL" 222
biotype 611 C "C-Terminal VAL" 210
biotype 612 HN "C-Terminal VAL" 180
biotype 613 OXT "C-Terminal VAL" 211
biotype 614 HA "C-Terminal VAL" 82
biotype 615 N "C-Terminal LEU" 177
biotype 616 CA "C-Terminal LEU" 222
biotype 617 C "C-Terminal LEU" 210
biotype 618 HN "C-Terminal LEU" 180
biotype 619 OXT "C-Terminal LEU" 211
biotype 620 HA "C-Terminal LEU" 82
biotype 621 N "C-Terminal ILE" 177
biotype 622 CA "C-Terminal ILE" 222
biotype 623 C "C-Terminal ILE" 210
biotype 624 HN "C-Terminal ILE" 180
biotype 625 OXT "C-Terminal ILE" 211
biotype 626 HA "C-Terminal ILE" 82
biotype 627 N "C-Terminal SER" 177
biotype 628 CA "C-Terminal SER" 222
biotype 629 C "C-Terminal SER" 210
biotype 630 HN "C-Terminal SER" 180
biotype 631 OXT "C-Terminal SER" 211
biotype 632 HA "C-Terminal SER" 82
biotype 633 N "C-Terminal THR" 177
biotype 634 CA "C-Terminal THR" 222
biotype 635 C "C-Terminal THR" 210
biotype 636 HN "C-Terminal THR" 180
biotype 637 OXT "C-Terminal THR" 211
biotype 638 HA "C-Terminal THR" 82
biotype 639 N "C-Terminal CYS (SH)" 177
biotype 640 CA "C-Terminal CYS (SH)" 222
biotype 641 C "C-Terminal CYS (SH)" 210
biotype 642 HN "C-Terminal CYS (SH)" 180
biotype 643 OXT "C-Terminal CYS (SH)" 211
biotype 644 HA "C-Terminal CYS (SH)" 82
biotype 645 N "C-Terminal CYX (SS)" 177
biotype 646 CA "C-Terminal CYX (SS)" 222
biotype 647 C "C-Terminal CYX (SS)" 210
biotype 648 HN "C-Terminal CYX (SS)" 180
biotype 649 OXT "C-Terminal CYX (SS)" 211
biotype 650 HA "C-Terminal CYX (SS)" 82
biotype 651 N "C-Terminal CYD (S-)" -1
biotype 652 CA "C-Terminal CYD (S-)" -1
biotype 653 C "C-Terminal CYD (S-)" -1
biotype 654 HN "C-Terminal CYD (S-)" -1
biotype 655 OXT "C-Terminal CYD (S-)" -1
biotype 656 HA "C-Terminal CYD (S-)" -1
biotype 657 N "C-Terminal PRO" 178
biotype 658 CA "C-Terminal PRO" 225
biotype 659 C "C-Terminal PRO" 210
biotype 660 OXT "C-Terminal PRO" 211
biotype 661 HA "C-Terminal PRO" 82
biotype 662 N "C-Terminal PHE" 177
biotype 663 CA "C-Terminal PHE" 222
biotype 664 C "C-Terminal PHE" 210
biotype 665 HN "C-Terminal PHE" 180
biotype 666 OXT "C-Terminal PHE" 211
biotype 667 HA "C-Terminal PHE" 82
biotype 668 N "C-Terminal TYR" 177
biotype 669 CA "C-Terminal TYR" 222
biotype 670 C "C-Terminal TYR" 210
biotype 671 HN "C-Terminal TYR" 180
biotype 672 OXT "C-Terminal TYR" 211
biotype 673 HA "C-Terminal TYR" 82
biotype 674 N "C-Terminal TYD (O-)" -1
biotype 675 CA "C-Terminal TYD (O-)" -1
biotype 676 C "C-Terminal TYD (O-)" -1
biotype 677 HN "C-Terminal TYD (O-)" -1
biotype 678 OXT "C-Terminal TYD (O-)" -1
biotype 679 HA "C-Terminal TYD (O-)" -1
biotype 680 N "C-Terminal TRP" 177
biotype 681 CA "C-Terminal TRP" 222
biotype 682 C "C-Terminal TRP" 210
biotype 683 HN "C-Terminal TRP" 180
biotype 684 OXT "C-Terminal TRP" 211
biotype 685 HA "C-Terminal TRP" 82
biotype 686 N "C-Terminal HIS (+)" 177
biotype 687 CA "C-Terminal HIS (+)" 222
biotype 688 C "C-Terminal HIS (+)" 210
biotype 689 HN "C-Terminal HIS (+)" 180
biotype 690 OXT "C-Terminal HIS (+)" 211
biotype 691 HA "C-Terminal HIS (+)" 82
biotype 692 N "C-Terminal HIS (HD)" 177
biotype 693 CA "C-Terminal HIS (HD)" 222
biotype 694 C "C-Terminal HIS (HD)" 210
biotype 695 HN "C-Terminal HIS (HD)" 180
biotype 696 OXT "C-Terminal HIS (HD)" 211
biotype 697 HA "C-Terminal HIS (HD)" 82
biotype 698 N "C-Terminal HIS (HE)" 177
biotype 699 CA "C-Terminal HIS (HE)" 222
biotype 700 C "C-Terminal HIS (HE)" 210
biotype 701 HN "C-Terminal HIS (HE)" 180
biotype 702 OXT "C-Terminal HIS (HE)" 211
biotype 703 HA "C-Terminal HIS (HE)" 82
biotype 704 N "C-Terminal ASP" 177
biotype 705 CA "C-Terminal ASP" 222
biotype 706 C "C-Terminal ASP" 210
biotype 707 HN "C-Terminal ASP" 180
biotype 708 OXT "C-Terminal ASP" 211
biotype 709 HA "C-Terminal ASP" 82
biotype 710 N "C-Terminal ASH (COOH)" -1
biotype 711 CA "C-Terminal ASH (COOH)" -1
biotype 712 C "C-Terminal ASH (COOH)" -1
biotype 713 HN "C-Terminal ASH (COOH)" -1
biotype 714 OXT "C-Terminal ASH (COOH)" -1
biotype 715 HA "C-Terminal ASH (COOH)" -1
biotype 716 N "C-Terminal ASN" 177
biotype 717 CA "C-Terminal ASN" 222
biotype 718 C "C-Terminal ASN" 210
biotype 719 HN "C-Terminal ASN" 180
biotype 720 OXT "C-Terminal ASN" 211
biotype 721 HA "C-Terminal ASN" 82
biotype 722 N "C-Terminal GLU" 177
biotype 723 CA "C-Terminal GLU" 222
biotype 724 C "C-Terminal GLU" 210
biotype 725 HN "C-Terminal GLU" 180
biotype 726 OXT "C-Terminal GLU" 211
biotype 727 HA "C-Terminal GLU" 82
biotype 728 N "C-Terminal GLH (COOH)" -1
biotype 729 CA "C-Terminal GLH (COOH)" -1
biotype 730 C "C-Terminal GLH (COOH)" -1
biotype 731 HN "C-Terminal GLH (COOH)" -1
biotype 732 OXT "C-Terminal GLH (COOH)" -1
biotype 733 HA "C-Terminal GLH (COOH)" -1
biotype 734 N "C-Terminal GLN" 177
biotype 735 CA "C-Terminal GLN" 222
biotype 736 C "C-Terminal GLN" 210
biotype 737 HN "C-Terminal GLN" 180
biotype 738 OXT "C-Terminal GLN" 211
biotype 739 HA "C-Terminal GLN" 82
biotype 740 N "C-Terminal MET" 177
biotype 741 CA "C-Terminal MET" 222
biotype 742 C "C-Terminal MET" 210
biotype 743 HN "C-Terminal MET" 180
biotype 744 OXT "C-Terminal MET" 211
biotype 745 HA "C-Terminal MET" 82
biotype 746 N "C-Terminal LYS" 177
biotype 747 CA "C-Terminal LYS" 222
biotype 748 C "C-Terminal LYS" 210
biotype 749 HN "C-Terminal LYS" 180
biotype 750 OXT "C-Terminal LYS" 211
biotype 751 HA "C-Terminal LYS" 82
biotype 752 N "C-Terminal LYD (NH2)" -1
biotype 753 CA "C-Terminal LYD (NH2)" -1
biotype 754 C "C-Terminal LYD (NH2)" -1
biotype 755 HN "C-Terminal LYD (NH2)" -1
biotype 756 OXT "C-Terminal LYD (NH2)" -1
biotype 757 HA "C-Terminal LYD (NH2)" -1
biotype 758 N "C-Terminal ARG" 177
biotype 759 CA "C-Terminal ARG" 222
biotype 760 C "C-Terminal ARG" 210
biotype 761 HN "C-Terminal ARG" 180
biotype 762 OXT "C-Terminal ARG" 211
biotype 763 HA "C-Terminal ARG" 82
biotype 764 N "C-Terminal ORN" 177
biotype 765 CA "C-Terminal ORN" 222
biotype 766 C "C-Terminal ORN" 210
biotype 767 HN "C-Terminal ORN" 180
biotype 768 OXT "C-Terminal ORN" 211
biotype 769 HA "C-Terminal ORN" 82
biotype 770 N "C-Terminal AIB" 177
biotype 771 CA "C-Terminal AIB" 224
biotype 772 C "C-Terminal AIB" 210
biotype 773 HN "C-Terminal AIB" 180
biotype 774 OXT "C-Terminal AIB" 211
diff --git a/tools/moltemplate/common/oplsaa/oplsaa_moltemplate.py b/tools/moltemplate/common/oplsaa/oplsaa_moltemplate.py
index e83698986..49cef1aff 100755
--- a/tools/moltemplate/common/oplsaa/oplsaa_moltemplate.py
+++ b/tools/moltemplate/common/oplsaa/oplsaa_moltemplate.py
@@ -1,319 +1,386 @@
#! /usr/bin/env python
#The purpose of this script is to create a moltemplate lt file for the opls-aa forcefield.
#This will assist researchers in building complex simulations using this OPLS-UA and the OPLS-AA forcefields.
__author__="Jason Lambert"
-__version__="0.13"
+__version__="0.15"
import sys
import os
from operator import itemgetter
print("""
Warning:
- Run this program on a SUBSET of the OPLS forcefield relevant
- to your problem. It is possible for you to generate a full OPLS force
- field moltemplate file, but that demands a lot of time and generates
- a file that is on the order 100 gigabytes (which is too large for
- moltemplate to read).
- Save yourself time and energy, make a copy of the oplsaa.txt that
- only contains atoms (in the \"atoms\" section) relevant to your problem.
+ Run this program on a SUBSET of the OPLS atoms which are relevant
+ to your problem. If not, this program (and moltemplate) may crash
+ your computer and/or generate enormous files that you do not need.
""")
+# To do that, first make a copy of the \"oplsaa.prm\" file
+# (which can be downloaded from the TINKER web site).
+# The lines in this file beginning with the word \"atoms\" should
+# define the atoms which you plan to put in your simulation. All other
+# lines beginning with the word \"atoms\" should be deleted.
+# (Leave the other sections of this file alone.)
+#""")
#input data from file containing opls aa force field parameters.
try:
f=open(sys.argv[1],"r")
except:
print("need to specify file name as an input argument:")
print("python oplsaa_moltemplate.py <forcefield file name>")
print("or file name is specified incorrectly")
sys.exit()
#output lt file
g=open("oplsaa.lt","w")
+
+
+lines = f.readlines()
+
+
+
+# Ignore/Comment out lines before the "## Atom Type Definitions ##" section.
+
+for i in range(0, len(lines)):
+ if (lines[i].find("## Atom Type Definitions ##") != -1):
+ break
+ else:
+ lines[i] = '# ' + lines[i]
+
+
+# As of 2014-4-19, there appear to be 906 atom types, but we don't assume this.
+# First try to infer out how many atom types there were in the original
+# oplsaa.prm file, or at least find an upper bound on the atom-type numbers.
+# (Keep track of the maximum value of the first column in the "atom" section.)
+max_atomType = 0
+for line in lines:
+ # skip over text after a # comment character
+ ic = line.find('#')
+ if ic != -1:
+ line = (line[:ic]).strip()
+ else:
+ line = line.strip()
+ # now look for lines beginning with the word "atom"
+ tokens = line.split()
+ if ((len(tokens)>2) and
+ (tokens[0] == "atom") and
+ (int(tokens[1]) > max_atomType)):
+ max_atomType = int(tokens[1])
+
+
#temporary storage file
h=open("temp.txt","w+")
atom_lookup={} #this dictionary contains all the atom ffid's as a key and the number of atoms with that key
-atom=[[10000,10000] for i in range(906)]
+#atom=[[10000,10000] for i in range(906)] <- don't assume there are 906 atoms
+atom=[[-10000,-10000] for i in range(0,max_atomType+1)]
+#charge_by_type={} # lookup charge by atom type
+#vdw_by_type={} # lookup epsilon & sigma paramters by atom type
+charge_by_type=[0.0 for i in range(0,max_atomType+1)] # lookup charge by atom
+vdw_by_type=[(0.0,0.0) for i in range(0,max_atomType+1)] # lookup epsilon & sigma
+
+
+
#atom is declared this way so for sorting purposes.
#atom contains the following data upon allocation
#atom[][0]=atom_id( Important for partial charges and non_bonded interactions)
#atom[][1]=atom_ffid( Important for stretches, bending, torsions and impropers)
#atom[][2]=atom_mass
#atom[][3]=partial charge
#atom[][4]=non_bonding sigma
#atom[][5]=non_bonding epsilon
#atom[][6]=atom comment
bond=[]
#bond contains the following data
#bond[0]=atom 1 ffid
#bond[1]=atom 2 ffid
#bond[2]=bond spring constant(OPLS-aa compatible)
#bond[3]=equilibrium bond distance(Angstrom)
angle=[]
#angle contains the following data
#angle[0]=atom 1 ffid
#angle[1]=atom 2 ffid
#angle[2]=atom 3 ffid
#angle[3]=spring constant
#angle[4]=equilibrium angle (degrees)
dihedral=[]
#dihedral contains the following data
#dihedral[0]=atom 1 ffid
#dihedral[1]=atom 2 ffid
#dihedral[2]=atom 3 ffid
#dihedral[3]=atom 4 ffid
#dihedral[4]=v1
#dihedral[5]=v2
#dihedral[6]=v3
#dihedral[7]=v4
improper=[]
#improper[0]=atom 1 ffid
#improper[1]=atom 2 ffid(central atom)
#improper[2]=atom 3 ffid
#improper[3]=atom 4 ffid
#improper[4]=spring coefficient
#improper[5]=equilibrium angle
-charge_temp=[] #temporarily store the charges
-vdw_temp=[]
-
#This section gets all the parameters from the force field file
-for line in f.readlines():
- if "atom" in line and "#" not in line:
- line=line.split()
- atom[int(line[1])-1]=[int(line[1]),int(line[2]),float(line[-2]),
- 0.0,0.0,0.0," ".join(line[3:-2])]
- elif "vdw" in line and "#" not in line:
+for line in lines:
+
+ # skip over text after a # comment character
+ ic = line.find('#')
+ if ic != -1:
+ line = (line[:ic]).strip()
+ else:
+ line = line.strip()
+
+ if line.find("atom") == 0:
line=line.split()
- vdw_temp.append([float(line[1]),float(line[2]),float(line[3])])
- elif "bond" in line and "#" not in line:
+ atom[int(line[1])-1]=[int(line[1]),int(line[2]),float(line[-2]),
+ 0.0,0.0,0.0," ".join(line[3:-2])]
+ elif line.find("vdw") == 0:
+ line=line.split()
+ #vdw_temp.append([float(line[1]),float(line[2]),float(line[3])])
+ if (int(line[1]) <= max_atomType):
+ vdw_by_type[int(line[1])] = (float(line[2]),float(line[3]))
+ elif line.find("bond") == 0:
line=line.split()
bond.append([int(line[1]),int(line[2]),float(line[3]),float(line[4])])
- elif "angle" in line and "#" not in line:
+ elif line.find("angle") == 0:
line=line.split()
angle.append([int(line[1]),int(line[2]),int(line[3]),
float(line[4]),float(line[5])])
- elif "torsion" in line and "#" not in line:
+ elif line.find("torsion") == 0:
line=line.split()
dihedral.append([int(line[1]),int(line[2]),int(line[3]),int(line[4]),
float(line[5]),float(line[8]), float(line[11]), 0.0])
- elif "charge" in line and "#" not in line:
+ elif line.find("charge") == 0:
line=line.split()
- charge_temp.append([int(line[1]),float(line[2])])
- elif "imptors" in line and "#" not in line:
+ #charge_temp.append([int(line[1]),float(line[2])])
+ if (int(line[1]) <= max_atomType):
+ charge_by_type[int(line[1])] = float(line[2])
+ elif line.find("imptors") == 0:
line=line.split()
improper.append([int(line[1]), int(line[2]),
int(line[3]), int(line[4]), float(line[5]), float(line[6])])
+if len(atom) > 600:
+ sys.stderr.write("WARNING: The number of atom types in your file exceeds 600\n"
+ " (You were supposed to edit out the atoms you don't need.\n"
+ " Not doing this may crash your computer.)\n"
+ "\n"
+ " Proceed? (Y/N): ")
+ reply = sys.stdin.readline()
+ if find(reply.strip().lower(), 'y') != 0:
+ exit(0)
+
#adding the charge and Lennard Jones parameters to
#to each atom type.
#----------------------------------------------#
-i=0
-for j,x in enumerate(charge_temp):
- if x[0]==atom[i][0]:
- atom[i][3]=x[1]
- i=i+1
- #print(x[1])
-i=0
-for j,x in enumerate(vdw_temp):
- #print x
- if x[0]==atom[i][0]:
- atom[i][4]=x[1]
- atom[i][5]=x[2]
- i=i+1
-del(charge_temp)
-del(vdw_temp)
+for i in range(0,len(atom)):
+ atom_type_num = atom[i][0]
+ #q = charge_by_type.get(atomTypeNum)
+ #if q:
+ # atom[i][3] = q
+ if atom_type_num != -10000:
+ q = charge_by_type[atom_type_num]
+ atom[i][3] = q
+
+for i in range(0,len(atom)):
+ atom_type_num = atom[i][0]
+ #vdw_params = vdw_by_type.get(atomTypeNum)
+ #if vdw_params:
+ # atom[i][4] = vdw_params[0]
+ # atom[i][5] = vdw_params[1]
+ if atom_type_num != -10000:
+ vdw_params = vdw_by_type[atom_type_num]
+ atom[i][4] = vdw_params[0]
+ atom[i][5] = vdw_params[1]
+
+del(charge_by_type)
+del(vdw_by_type)
+
#----------------------------------------------------------#
#begin writing content to lt file
-g.write("OPLSAA {\n\n\n" )
+g.write("OPLSAA {\n\n" )
#write out the atom masses
#----------------------------------------------------------#
-g.write("write_once(\"Data Masses\"){\n")#checked with gaff
+g.write(" write_once(\"Data Masses\"){\n")#checked with gaff
for i,x in enumerate(atom):
- if x[0]<10000:
- g.write("@atom:{} {} #{} partial charge={}\n".format(
+ if x[0] != -10000:
+ g.write(" @atom:{} {} #{} partial charge={}\n".format(
x[0],x[2],x[6],x[3]))
-g.write("} #(end of atom masses)\n\n")
+g.write(" } #(end of atom masses)\n\n")
#----------------------------------------------------------#
#write out the pair coefficients
#----------------------------------------------------------#
-g.write("write_once(\"In Settings\"){\n")#checked with gaff
+g.write(" write_once(\"In Settings\"){\n")#checked with gaff
for i,x in enumerate(atom):
- if x[0]<10000:
- g.write("pair_coeff @atom:{0} @atom:{0} lj/cut/coul/long {1} {2}\n".format(x[0],x[5],x[4]))
-g.write("} #(end of pair coeffs)\n\n")
+ if x[0] != -10000:
+ g.write(" pair_coeff @atom:{0} @atom:{0} lj/cut/coul/long {1} {2}\n".format(x[0],x[5],x[4]))
+g.write(" } #(end of pair coeffs)\n\n")
-g.write("write_once(\"In Charges\"){\n")#checked with gaff
+g.write(" write_once(\"In Charges\"){\n")#checked with gaff
for i,x in enumerate(atom):
- if x[0]<10000:
- g.write("set type @atom:{0} charge {1}\n".format(x[0],x[3]))
-g.write("} #(end of atom charges)\n\n")
+ if x[0] != -10000:
+ g.write(" set type @atom:{0} charge {1}\n".format(x[0],x[3]))
+g.write(" } #(end of atom charges)\n\n")
#-----------------------------------------------------------#
# This part of the code creates a lookup dictionary
# that allows you to find every type of atom by its
# force field id. force field id is the id number
# relevant to bonds, angles, dihedrals, and impropers.
# This greatly increases the speed of angle, bond, dihedral
# and improper assignment.
#------------------------------------------------------------#
atom=sorted(atom,key=itemgetter(1))
atom_ffid=0
for x in atom:
if x[1]==atom_ffid:
atom_lookup[x[1]].append(x[0])
elif x[1]>atom_ffid:
atom_lookup[x[1]]=[x[0]]
atom_ffid=x[1]
atom_lookup[0]=["*"]
#-------------------------------------------------------------#
#writing out the bond coefficients and bond parameters#
#-------------------------------------------------------------#
-g.write("write_once(\"In Settings\") {\n")
+g.write(" write_once(\"In Settings\") {\n")
index1=0
for x in bond:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
- g.write("bond_coeff @bond:{}-{} harmonic {} {}\n".format(y,z,x[2]/2,x[3]))
- h.write("@bond:{0}-{1} @atom:{0} @atom:{1}\n".format(y,z))
-g.write("} #(end of bond_coeffs)\n\n")
+ g.write(" bond_coeff @bond:{}-{} harmonic {} {}\n".format(y,z,x[2]/2,x[3]))
+ h.write(" @bond:{0}-{1} @atom:{0} @atom:{1}\n".format(y,z))
+g.write(" } #(end of bond_coeffs)\n\n")
h.seek(0,0)
-g.write("write_once(\"Data Bonds By Type\") {\n")
+g.write(" write_once(\"Data Bonds By Type\") {\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of bonds by type)\n\n")
+g.write(" } #(end of bonds by type)\n\n")
del(bond)
h.close()
#-----------------------------------------------------------#
h=open("temp.txt","w+")
#writing out angle coefficients and angles by type.---------#
#-----------------------------------------------------------#
-g.write("write_once(\"Data Angles By Type\"){\n")
+g.write(" write_once(\"Data Angles By Type\"){\n")
for x in angle:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
for u in atom_lookup.get(x[2],[]):
#print(y,z,u,x)
- h.write("angle_coeff @angle:{}-{}-{} harmonic {} {}\n".format(y,z,u,
+ h.write(" angle_coeff @angle:{}-{}-{} harmonic {} {}\n".format(y,z,u,
x[3]/2.0,x[4]))
- g.write("@angle:{0}-{1}-{2} @atom:{0} @atom:{1} @atom:{2}\n".format(
+ g.write(" @angle:{0}-{1}-{2} @atom:{0} @atom:{1} @atom:{2}\n".format(
y,z,u))
-g.write("} #(end of angles by type)\n\n")
+g.write(" } #(end of angles by type)\n\n")
h.seek(0,0)
-g.write("write_once(\"In Settings\" ){\n")
+g.write(" write_once(\"In Settings\" ){\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of angle_coeffs)\n\n")
+g.write(" } #(end of angle_coeffs)\n\n")
del(angle)
h.close()
#----------------------------------------------------------#
#writing dihedrals by type and dihedral coefficients-------#
h=h=open("temp.txt","w+")
-g.write("write_once(\"Data Dihedrals By Type\") {\n")
+g.write(" write_once(\"Data Dihedrals By Type\") {\n")
#print(atom_lookup)
for x in dihedral:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
for u in atom_lookup.get(x[2],[]):
for v in atom_lookup.get(x[3],[]):
if x[0]!=0 and x[3]!=0:
- g.write("@dihedral:{0}-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ g.write(" @dihedral:{0}-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
y,z,u,v))
- h.write("dihedral_coeff @dihedral:{}-{}-{}-{} opls {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:{}-{}-{}-{} opls {} {} {} {}\n".format(
y,z,u,v,x[4],x[5],x[6],x[7]))
elif x[0]==0 and x[3]!=0:
- g.write("@dihedral:0-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ g.write(" @dihedral:0-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
y,z,u,v))
- h.write("dihedral_coeff @dihedral:0-{}-{}-{} opls {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:0-{}-{}-{} opls {} {} {} {}\n".format(
z,u,v,x[4],x[5],x[6],x[7]))
elif x[0]==0 and x[3]==0:
- g.write("@dihedral:0-{1}-{2}-0 @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ g.write(" @dihedral:0-{1}-{2}-0 @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
y,z,u,v))
- #h.write("dihedral_coeff @dihedral:0-{}-{}-0 harmonic {} {} {} {}\n".format(
- h.write("dihedral_coeff @dihedral:0-{}-{}-0 opls {} {} {} {}\n".format(
+ #h.write(" dihedral_coeff @dihedral:0-{}-{}-0 harmonic {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:0-{}-{}-0 opls {} {} {} {}\n".format(
z,u,x[4],x[5],x[6],x[7]))
del(dihedral)
-g.write("} #(end of Dihedrals by type)\n\n")
+g.write(" } #(end of Dihedrals by type)\n\n")
h.seek(0,0)
-g.write("write_once(\"In Settings\") {\n")
+g.write(" write_once(\"In Settings\") {\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of dihedral_coeffs)\n\n")
+g.write(" } #(end of dihedral_coeffs)\n\n")
h.close()
#-----------------------------------------------------------------------#
#----writing out improper coefficients and impropers by type------------#
h=open("temp.txt","w+")
-g.write("write_once(\"Data Impropers By Type\") {\n")
+g.write(" write_once(\"Data Impropers By Type\") {\n")
for x in improper:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
for u in atom_lookup.get(x[2],[]):
for v in atom_lookup.get(x[3],[]):
if x[0]==0 and x[1]==0 and x[3]==0:
- g.write("@improper:{2}-0-0-0 @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
+ g.write(" @improper:{2}-0-0-0 @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
y,z,u,v))
- h.write("improper_coeff @improper:{2}-0-0-0 harmonic {4} {5} \n".format(
+ h.write(" improper_coeff @improper:{2}-0-0-0 harmonic {4} {5} \n".format(
y,z,u,v,x[4]/2,0))
else:
- g.write("@improper:{2}-0-0-{3} @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
+ g.write(" @improper:{2}-0-0-{3} @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
y,z,u,v))
- h.write("improper_coeff @improper:{2}-0-0-{3} harmonic {4} {5} \n".format(
+ h.write(" improper_coeff @improper:{2}-0-0-{3} harmonic {4} {5} \n".format(
y,z,u,v,x[4]/2,0))
-g.write("} #(end of impropers by type)\n\n")
+g.write(" } #(end of impropers by type)\n\n")
h.seek(0,0)
-g.write("write_once(\"In Settings\") {\n")
+g.write(" write_once(\"In Settings\") {\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of improp_coeffs)\n\n")
+g.write(" } #(end of improp_coeffs)\n\n")
#-----------------------------------------------------------------------#
#This section writes out the input parameters required for an opls-aa simulation
# lammps.
-g.write("write_once(\"In Init\") {\n")
-g.write("units real\n")
-g.write("atom_style full\n")
-g.write("bond_style hybrid harmonic\n")
-g.write("angle_style hybrid harmonic\n")
-g.write("dihedral_style hybrid opls\n")
-g.write("improper_style hybrid harmonic\n")
-#g.write("pair_style hybrid lj/cut/coul/cut 10.0 10.0\n")
-g.write("pair_style hybrid lj/cut/coul/long 10.0 10.0\n")
-g.write("pair_modify mix arithmetic\n")
-g.write("special_bonds lj 0.0 0.0 0.5\n")
-g.write("kspace_style pppm 0.0001\n")
-g.write("} #end of init parameters\n")
+g.write(" write_once(\"In Init\") {\n")
+g.write(" units real\n")
+g.write(" atom_style full\n")
+g.write(" bond_style hybrid harmonic\n")
+g.write(" angle_style hybrid harmonic\n")
+g.write(" dihedral_style hybrid opls\n")
+g.write(" improper_style hybrid harmonic\n")
+#g.write(" pair_style hybrid lj/cut/coul/cut 10.0 10.0\n")
+g.write(" pair_style hybrid lj/cut/coul/long 10.0 10.0\n")
+g.write(" pair_modify mix arithmetic\n")
+g.write(" special_bonds lj 0.0 0.0 0.5\n")
+g.write(" kspace_style pppm 0.0001\n")
+g.write(" } #end of init parameters\n\n")
g.write("} # OPLSAA\n")
f.close()
g.close()
h.close()
os.remove("temp.txt")
-
-
-
-
-
-
diff --git a/tools/moltemplate/examples/CG_biomolecules/membrane+protein/moltemplate_files/system.lt b/tools/moltemplate/examples/CG_biomolecules/membrane+protein/moltemplate_files/system.lt
index 51a67b6d9..82a5c6eae 100644
--- a/tools/moltemplate/examples/CG_biomolecules/membrane+protein/moltemplate_files/system.lt
+++ b/tools/moltemplate/examples/CG_biomolecules/membrane+protein/moltemplate_files/system.lt
@@ -1,207 +1,207 @@
# Description:
# This example shows how to put a protein (inclusion) in a
# lipid bilayer mixture composed of two different lipids (DPPC and DLPC).
# The DPPC lipid model is described here:
# G. Brannigan, P.F. Philips, and F.L.H. Brown,
# Physical Review E, Vol 72, 011915 (2005)
# The protein model is described here:
# G. Bellesia, AI Jewett, and J-E Shea,
# Protein Science, Vol19 141-154 (2010)
# The new DLPC model is a truncated version of DPPC,
# (Its behaviour has not been rigorously tested.)
# Note that 50%/50% mixtures of DPPC & DLPC are commonly used to
# build liposomes http://www.ncbi.nlm.nih.gov/pubmed/10620293
# Note:
# This example may require additional features to be added to LAMMPS.
# If LAMMPS complains about an "Invalid pair_style", then copy the code
# in the "additional_lammps_code" directory into your LAMMPS "src" directory
# and recompile LAMMPS.
import "CGLipidBr2005.lt"
using namespace CGLipidBr2005
# The "= new random" syntax chooses one of several molecules at random
lipids = new random([DPPC, DLPC], [0.5,0.5], 1234) #"1234"=random_seed
[13].move(7.5, 0, 0)
[15].move(3.75, 6.49519, 0) # <-- hexagonal lattice
[2].rot(180, 1, 0, 0) # <-- 2 monolayers
# Move all the lipds up to the center of the box
lipids[*][*][*].move(0,0,75.0)
# Although this patch of lipids is not square or rectangular, (it looks
# like a parallelogram), this is no longer the case after rectangular
# periodic boundary conditions are applied. (Check by visualising in VMD.)
write_once("Data Boundary") {
0 97.5 xlo xhi
0 97.42785792 ylo yhi
0 150.0 zlo zhi
}
# A note on geometry:
# We want to create a bilayer arranged in a hexagonal lattice consisting of
-# 15 rows (each row is aligned with the x-axis)
-# 13 columns (aligned at a 60 degree angle from the x axis)
+# 13 rows (each row is aligned with the x-axis)
+# 15 columns (aligned at a 60 degree angle from the x axis)
# The lattice spacing is 7.5 Angstroms.
# When wrapped onto a rectangular box, the dimensions of the system are:
# 13 * 7.5 Angstroms in the X direction
# 15 * 7.5*sqrt(3)/2 Angstroms in the Y direction
# ------------------- protein inclusion ---------------------
import "1beadProtSci2010.lt"
using namespace 1beadProtSci2010
protein = new 4HelixInsideOut
protein.move(45.0, 25.98076211, 75.0)
# Delete a hole in the membrane to create space for the protein.
delete lipids[4][2][*]
delete lipids[6][2][*]
delete lipids[3-6][3][*]
delete lipids[3-5][4][*]
delete lipids[2-5][5][*]
delete lipids[2][6][*]
delete lipids[4][6][*]
# Note: All atom types must include the full path (the name of
# the namespace which defined them as well as the atom type name).
# (This is because we are no longer inside that namespace.)
write_once("In Settings") {
# -----------------------------------------------------------
# -------- interactions between protein and lipids ----------
# -----------------------------------------------------------
# Interactions between the protein and lipid atoms are usually
# determined by mixing rules. (However this is not possible some
# for atoms, such as the "int" atoms in the lipid model which
# interact using -1/r^2 attraction.) Mixing rules do not make
# sense for these atoms so we must explicitly define their
# interaction with all other atoms.
# We want the hydrophobic interactions between hydrophobic residues in
# the protein and beads the interior of the lipid to be energetically
# similar to the attractive interactions between the lipid tails.
#
# Note: I made the width of the outward-facing protein beads slightly larger
# ("12.5") whenever they interact with the "tail" beads in each lipid
# (in order to make the protein wider there).
# This hopefully relieves some of the internal negative pressure in the center
# of the bilayer which can otherwise rip apart the protein or suck it into
# the bilaer. (This is a hack, and I'm not sure if it is necessary.
# For different protein or lipid models, you probably don't need this.)
#
# i j pairstylename eps sig K L
pair_coeff @atom:CGLipidBr2005/tail @atom:1beadProtSci2010/sH lj/charmm/coul/charmm/inter 0.1643 12.5 0.4 -1
pair_coeff @atom:CGLipidBr2005/int @atom:1beadProtSci2010/sH lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 -1
# To help keep the protein from tilting 90 degrees and burying itself
# within the lipid bilayer, we make the turn regions at either
# end of the protein (strongly) attracted to the head groups
# of the lipid. (In reality, they would probably be attracted
# to the water as well.)
pair_coeff @atom:CGLipidBr2005/DPPC/head @atom:1beadProtSci2010/tN lj/charmm/coul/charmm/inter 1.8065518 5.5 1 -1
pair_coeff @atom:CGLipidBr2005/DPPC/head @atom:1beadProtSci2010/tN lj/charmm/coul/charmm/inter 1.8065518 5.5 1 -1
# All other interactions between proteins and lipids are steric.
pair_coeff @atom:CGLipidBr2005/tail @atom:1beadProtSci2010/sL lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/tail @atom:1beadProtSci2010/tN lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/int @atom:1beadProtSci2010/sL lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/int @atom:1beadProtSci2010/tN lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/DPPC/head @atom:1beadProtSci2010/sH lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/DPPC/head @atom:1beadProtSci2010/sL lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/DLPC/head @atom:1beadProtSci2010/sH lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
pair_coeff @atom:CGLipidBr2005/DLPC/head @atom:1beadProtSci2010/sL lj/charmm/coul/charmm/inter 0.1643 7.5 0.4 0
# -----------------------------------------------------------
# -------- Modifications to the protein model: --------------
# -----------------------------------------------------------
#
# Turn off attraction between the hydrophobic "@atom:sH" beads:
# (These beads are located in the outside of a trans-membrane protein.)
pair_coeff @atom:1beadProtSci2010/sH @atom:1beadProtSci2010/sH lj/charmm/coul/charmm/inter 1.8065518 5.5 1 0
# (Why: These beads are only attracted to
# each other in an aqueous environment)
# ... and
# Turn ON attraction between the hydrophilic "@atom:sL" beads.
# (These beads are located in the interior of a trans-membrane protein.)
pair_coeff @atom:1beadProtSci2010/sL @atom:1beadProtSci2010/sL lj/charmm/coul/charmm/inter 1.8065518 5.5 1 -1
# Why?
# In reality, polar groups in the interior of trans-membrane
# proteins do form hydrogen bonds with each other. This was
# absent from the original protein model because, in an aqueous
# environment, these groups preferentially interact with the water.
#
# Why is this necessary?
# Shouldn't attraction between lipid tails and the protein create
# an effective force which brings the hydrophilic beads together?
# (similar to the hydrophobic effect, but in reverse?).
# Answer:
# Unlike an aqueous environment (~zero pressure, or +1atm), there is
# a large negative pressure in the interior of some bilayer membrane
# models (such as this one). Without some kind of direct attraction
# between interior residues, the protein will get pulled apart.
# (Perhaps the attractive force I am using is too strong?)
}
# Finally, we must combine the two force-field styles which were used for
# the coarse-grained lipid and protein. To do that, we write one last time
# to the "In Init" section. When reading the "Init" section LAMMPS will
# read these commands last and this will override any earlier settings.
write_once("In Init") {
# -- These styles override earlier settings --
units real
atom_style full
# (Hybrid force field styles were used for portability.)
bond_style hybrid harmonic
angle_style hybrid cosine/delta harmonic
dihedral_style hybrid fourier
improper_style none
pair_style hybrid table linear 1130 lj/charmm/coul/charmm/inter es4k4l 14.5 15
pair_modify mix arithmetic
special_bonds lj 0.0 0.0 1.0 # turn off pairs if "less than 3 bonds"
}
diff --git a/tools/moltemplate/examples/CG_misc/2bead_heteropolymer/moltemplate_files/2bead.lt b/tools/moltemplate/examples/CG_misc/2bead_heteropolymer/moltemplate_files/2bead.lt
index 8e52f36ba..853821471 100644
--- a/tools/moltemplate/examples/CG_misc/2bead_heteropolymer/moltemplate_files/2bead.lt
+++ b/tools/moltemplate/examples/CG_misc/2bead_heteropolymer/moltemplate_files/2bead.lt
@@ -1,128 +1,128 @@
# In this example, we define two types of molecules: "H" and "P",
# both containing two atoms, named "CA" and "R".
#
# @R
# |
# @CA
#
# Eventually, we will connect multiple "H" and "P" molecules
# together to form a polymer, as shown below:
#
# @R @R
# | |
# _@CA_ _@CA_
# ... -.@CA-' `-@CA-' ` ...
# | |
# @R @R
#
# Suppose that the "H" and "P" molecules both use the same
# type of backbone atom ("CA"), but have their own custom "R"
# sidechain atoms with different properties:
# The "R" atoms belonging to "H" molecules are attracted to each other.
# The "R" atoms in "P" molecules are not.
#
# (Note: There is no reason the "H" and "P" molecules in this example need
# to contain the same number of atoms, or the same atom names.
# The point of this example is to illustrate how to share atom types
# and also the difference between local and global atom types.)
#
# By default, all counter variables are local. This means that whenever
# an atom type (or other counter variable) appears inside a molecule
# definition using the normal syntax "@atom:R", that atom type is a local
# property of the the "H" or "P" molecule in which it appears.
# Any properties assigned to the "R" atoms in either molecule are unique
# to that molecule.
#
# However in order to share "CA" atom types, we will override this behavior
# using the "@atom:../CA" syntax instead of "@atom:CA". This will define
# the "CA" atom in the outer (global) environment, and any properties
# (mass, radius, etc...) assigned to the "@atom:../CA" atom apply to
# "CA" atoms in both the the "H" and "P" molecules (and everywhere else).
#
# This might not be a desirable. "CA" is a popular name for carbon
# atoms in different types of molecules. We don't want to prevent other
# molecules from using this atom name. So we enclose the "CA" atom,
# (along with the definitions of the "H" and "P" molecules) within a
# namespace/environment object ("2bead"). This makes the definition
# of "H" and "P" more portable. Later on we can combine "H" and "P"
# molecules with other molecules without worrying whether they contain
# "CA" atoms with different properties.
#
# Note: In this example "2bead" is NOT a molecule. (Because it contains no
# "write("Data Atoms")" section of its own.) "2bead" is simply the
-# name of an environment in which other molecules (H,P) are defined.
+# name of an environment in which other molecules "H" and "P" are defined.
2bead {
write_once("In Init") {
units real
atom_style full
}
# Define H (the "hydrophobic" residue)
H {
# atom-id mol-id atom-type charge x y z
write("Data Atoms") {
$atom:CA $mol:... @atom:../CA 0.0 0.000 1.0000 0.0000000
$atom:R $mol:... @atom:R 0.0 0.000 4.4000 0.0000000
}
# Old Data Bonds style
# write("Data Bonds") {
# $bond:CR @bond:../sidechain $atom:CA $atom:R
# }
# New Data Bond List style
write("Data Bond List") {
$bond:CR $atom:CA $atom:R
}
}
# Define P (the "polar" residue)
P {
# atom-id mol-id atom-type charge x y z
write("Data Atoms") {
$atom:CA $mol:... @atom:../CA 0.0 0.000 1.0000 0.0000000
$atom:R $mol:... @atom:R 0.0 0.000 4.4000 0.0000000
}
# Old Data Bonds style
# write("Data Bonds") {
# $bond:CR @bond:../sidechain $atom:CA $atom:R
# }
# New Data Bond List style
write("Data Bond List") {
$bond:CR $atom:CA $atom:R
}
}
# (Note: Again, atom types, bond-types, (dihedral-types, any variable, etc)
# can be shared. The ".." in "@atom:../CA" tells moltemplate that
# atom type CA is defined in the parent's environment. (We are
# sharing the CA atom type between both the H and P residues.
# The same is true of the ".." in "@bond:../sidechain".
#
#
# Note: The "..." in "$mol:..." tells moltemplate that this molecule may
# be a part of a larger molecule, and (if so) to use the larger
# molecule's id number as it's own.
# There are 3 atom types: the R sidechain (belonging to the H and P residues)
# and the CA sidechain atom (shared by both residues)
write_once("Data Masses") {
@atom:CA 13.0
@atom:H/R 50.0
@atom:P/R 50.0
}
} # 2bead
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/WARNING.TXT b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/WARNING.TXT
index bafcbca1f..9d6d0e1b3 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/WARNING.TXT
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/WARNING.TXT
@@ -1,72 +1,54 @@
# -------- WARNING: --------
This directory contains some examples of all-atom simulations using the GAFF
force field, prepared using moltemplate.
This software is experimental, and the force-fields and equilbration protocols
have not been tested carefully by me. There is no gaurantee that simulations
prepared using moltemplate will reproduce the behavior of AmberTools/AMBER.
# -------- REQUEST FOR HELP: --------
If you notice a problem with these examples, please report it.
Peer-review is the only way to improve this software (or any software).
Other suggestions are also welcome!
(Contact jewett.aij@gmail.com, 2013-12-01)
--- Charge ---
-This software does not assign charges to each atom.
-(AmberTools can do this.)
+Some force-fields (such as OPLSAA) can assign charge based on atom type.
+But AMBER simulations, charge is usually assigned using AmberTools which
+typically estimates partial charges using quantum chemistry.
-For the purpose of demonstration, in the hydrocarbon examples located here,
-I am simply neglecting the partial charge of the carbon and hydrogen atoms.
-This approach is unlikely to be appropriate in most practical applications.
+You must assign partial charges to each atom or LAMMPS will crash
+when it discovers your system has no charged particles.
+(To disable this, change the pair_style to lj/cut or something similar.)
+You have to assign charge manually, just as you would for an ordinary molecule.
---- Long-range electrostatics ---
-
-Furthermore long-range electrostatics (kspace_style pppm) are usually disabled
-by default. (Examples containing TIP3P water are an exception to this.)
-To enable long-range coulombics, make these modifications to the
-"system.in.init" and "system.in.settings" files AFTER running moltemplate:
-(enter these commands into the bash shell)
-
-echo "kspace_style pppm 0.0001" >> system.in.init
-echo "pair_style hybrid lj/charmm/coul/long 9.0 10.0" >> system.in.init
-sed -i 's/lj\/charmm\/coul\/charmm/lj\/charmm\/coul\/long/g' system.in.settings
+(For example, charges are explicitly assigned to each atom in these files:
+ waterTIP3P+isobutane/moltemplate_files/isobutane.lt
+ hexadecane/moltemplate_files/ch2group.lt
+ hexadecane/moltemplate_files/ch3group.lt)
+(How you do this is up to you. In these examples, I obtained
+partial charges from the OPLSAA parameter file located here:
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm)
--- Improper angles ---
I am also uncertain whether the improper angle interactions generated by
moltemplate are equivalent to those generated by AmberTools. (I think they are,
but I am worried that I might have listed the atom types in the wrong order.)
-
--- Bloated lammps input scripts ---
---- -> slow simulations ? ---
-
-As of 2013-12-01, LAMMPS input scripts prepared using moltemplate using the
-"gaff.lt" file contain the entire contents of the GAFF force-field,
-even if your simulation uses only a few of the atom types in GAFF.
-
- Details:
-Moltemplate creates a file usually named "system.in.settings" containing all
-of the GAFF information. It is usually about 700kB large. This file is read
-by LAMMPS. This means that every interaction in GAFF is loaded
-into LAMMPS (for all ~72 atom types).
-This is true even if you only use a tiny subset of the atom types and bonded
-interactions defined in GAFF. Hopefully allocating the memory needed to store
-this extra information will not slow down your simulations noticably.
-
-However, in case it does, the "waterTIP3P+isobutane/README_setup.sh"
-contains detailed instructions how to strip this kind of junk from
-the "system.in.settings" file.
-
-(In the future I may modify moltemplate to do this automatically,
-however I may not remember to remove this warning from this file.
-Hopefully this issue will be fixed by the time you use moltemplate.)
+
+LAMMPS input scripts prepared using moltemplate contain the entire contents
+of the GAFF force-field, even when simulating small systems with just a few
+atom types.
+
+This is harmless, but if you want to get rid of this extra information,
+follow the README instructions in the "optional_cleanup" directories.
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/README_setup.sh b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/README_setup.sh
index 3b7fb0990..87d19c11a 100755
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/README_setup.sh
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/README_setup.sh
@@ -1,74 +1,36 @@
# -------- REQUIREMENTS: ---------
# You must define your MOLTEMPLATE_PATH environment variable
# and set it to the "common" subdirectory of your moltemplate distribution.
# (See the "Installation" section in the moltemplate manual.)
-
# Create LAMMPS input files this way:
+
cd moltemplate_files
# run moltemplate
moltemplate.sh system.lt
# This will generate various files with names ending in *.in* and *.data.
# These files are the input files directly read by LAMMPS. Move them to
# the parent directory (or wherever you plan to run the simulation).
- #cp -f system.data system.in* ../
-
-
- # --------- OPTIONAL STEPS FOR STRIPPING OUT JUNK ---------
- # --------- edit 2013-10-13 ---------
- echo "-----------------------------------------------------------------" >&2
- echo "OPTIONAL STEP: PRUNING THE RESULTING MOLTEMPLATE OUTPUT TO" >&2
- echo " INCLUDE ONLY ATOMS AND TYPES WE ARE ACTUALLY USING." >&2
- # Unfortunately, as of 2013-8-28, these files contain a lot of irrelevant
- # information (for atom types not present in the current system).
- # For now, we can strip this out using ltemplify.py to build a new .lt file.
- # THIS IS AN UGLY WORKAROUND. HOPEFULLY IN THE FUTURE, WE CAN SKIP THESE STEPS
-
- # do this in a temporary_directory
- mkdir new_lt_file
- cd new_lt_file/
+ mv -f system.data system.in* ../
- # now run ltemplify.py
-
- ltemplify.py ../system.in.init ../system.in.settings ../system.data > system.lt
- rm -rf ../system.data ../system.in* # these old lammps files no longer needed
-
- # This creates a new .LT file named "system.lt" in the local directory.
-
-
- # The ltemplify.py script also does not copy the boundary dimensions.
- # We must do this manually.
- echo "write_once(\"Data Boundary\") {" >> system.lt
- cat "../output_ttree/Data Boundary" >> system.lt
- echo "}" >> system.lt
- echo "" >> system.lt
- # Now, run moltemplate on this new .LT file.
- moltemplate.sh system.lt
- # This will create: "system.data" "system.in.init" "system.in.settings."
-
-
- # Move the final DATA and INput scripts to the desired location,
- mv -f system.data system.in* ../../
-
- # and clean up the mess
- rm -rf output_ttree/
- cd ..
- rm -rf new_lt_file/
- echo "---------------- DONE PRUNING MOLTEMPLATE OUTPUT ----------------" >&2
- echo "-----------------------------------------------------------------" >&2
- # --------- END OF OPTIONAL STEPS FOR STRIPPING OUT JUNK ---------
+ # Optional:
+ # The "./output_ttree/" directory is full of temporary files generated by
+ # moltemplate. They can be useful for debugging, but are usually thrown away
+ # rm -rf output_ttree/
+cd ../
- # Optional:
- # The "./output_ttree/" directory is full of temporary files generated by
- # moltemplate. They can be useful for debugging, but are usually thrown away.
- rm -rf output_ttree/
+# Optional:
+# Note: The system.data and system.in.settings files contain extra information
+# for atoms defined in GAFF which you are not using in this simulation. This
+# is harmless, but if you to delete this information from your
+# system.in.settings and system.in.data files, follow the instructions in
+# this script: "optional_cleanup/README_remove_irrelevant_info.sh"
-cd ../
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch2group.lt b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch2group.lt
index 8cbfde6a5..7ea5b67a6 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch2group.lt
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch2group.lt
@@ -1,49 +1,49 @@
import "gaff.lt" # <-- defines the "GAFF" force field
# The "gaff.lt" file is usually located in $MOLTEMPLATE_PATH (and is
# distributed with moltemplate. See the "Installation" section in the manual.)
# It contains definitions of the atoms "c3", "h1", as well as the force-field
# parameters for bonded and non-bonded interactions between them
# (and many other atoms).
-# The charges for the atoms in this example are all set to zero.
-# In a realistic simulation, one must assign (partial) charges to each atom.
+# Atom charges were taken from the OPLSAA force field file:
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
CH2 inherits GAFF {
- # atom-id mol-id atom-type charge x y z
+ # atom-id mol-id atom-type charge x y z
write("Data Atoms") {
- $atom:C $mol:... @atom:c3 0.00 0.00 0.000 0.000
- $atom:H1 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 0.8924307629540046
- $atom:H2 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 -0.8924307629540046
+ $atom:C $mol:... @atom:c3 -0.120 0.000 0.000 0.000
+ $atom:H1 $mol:... @atom:h1 0.060 0.000 0.63104384422426 0.892430762954
+ $atom:H2 $mol:... @atom:h1 0.060 0.000 0.63104384422426 -0.892430762954
}
# Note: The "..." in "$mol:..." tells moltemplate that this molecule may
# be a part of a larger molecule, and (if so) to use the larger
# parent object's molecule id number as it's own.
# The CH2 group is part of the Hexadecane molecule.
# Now specify which pairs of atoms are bonded:
write('Data Bond List') {
$bond:CH1 $atom:C $atom:H1
$bond:CH2 $atom:C $atom:H2
}
} # CH2
######### (scratchwork calculations for the atomic coordinates) #########
# Lcc = 1.5350 # length of the C-C bond (Sp3)
# Lch = 1.0930 # length of the C-H bond
# theta=2*atan(sqrt(2)) # ~= 109.5 degrees = tetrahedronal angle (C-C-C angle)
# DeltaXc = Lcc*sin(theta/2) # = 1.2533222517240594
# DeltaYc = Lcc*cos(theta/2) # = 0.8862326632060754
# # 0.5*DeltaYc = 0.4431163316030377
# DeltaZh = Lch*sin(theta/2) # = 0.8924307629540046
# DeltaYh = Lch*cos(theta/2) # = 0.6310438442242609
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch3group.lt b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch3group.lt
index 2be688c5f..0ad7fa3ef 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch3group.lt
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/ch3group.lt
@@ -1,52 +1,55 @@
-
import "gaff.lt" # <-- defines the "GAFF" force field
# The "gaff.lt" file is usually located in $MOLTEMPLATE_PATH (and is
# distributed with moltemplate. See the "Installation" section in the manual.)
# It contains definitions of the atoms "c3", "h1", as well as the force-field
# parameters for bonded and non-bonded interactions between them
# (and many other atoms).
-
-# The charges for the atoms in this example are all set to zero.
-# In a realistic simulation, one must assign (partial) charges to each atom.
+#
+# Moltemplate is only a simple text manipulation tool. It cannot
+# calculate atomic charge using quantom chemistry methods.
+# Atom charges for this example were taken from the OPLSAA force field file:
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+# However, normally simulations in AMBER are assigned charges using the
+# "HF/6-31G* RESP2" or "AM1-BCC3" methods using AmberTools.
CH3 inherits GAFF {
- # atom-id mol-id atom-type charge x y z
+ # atom-id mol-id atom-type charge x y z
write("Data Atoms") {
- $atom:C $mol:... @atom:c3 0.00 0.00 0.000 0.000
- $atom:H1 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 0.8924307629540046
- $atom:H2 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 -0.8924307629540046
- $atom:H3 $mol:... @atom:h1 0.00 -0.8924307629540046 -0.6310438442242609 0.00
+ $atom:C $mol:... @atom:c3 -0.180 0.000000 0.000000 0.000000
+ $atom:H1 $mol:... @atom:h1 0.060 0.000000 0.6310438442242609 0.8924307629540046
+ $atom:H2 $mol:... @atom:h1 0.060 0.000000 0.6310438442242609 -0.8924307629540046
+ $atom:H3 $mol:... @atom:h1 0.060 -0.8924307629540046 -0.6310438442242609 0.000000
}
# Note: The "..." in "$mol:..." tells moltemplate that this molecule may
# be a part of a larger molecule, and (if so) to use the larger
# parent object's molecule id number as it's own.
# The CH3 group is part of the Hexadecane molecule.
# Now specify which pairs of atoms are bonded:
write('Data Bond List') {
$bond:CH1 $atom:C $atom:H1
$bond:CH2 $atom:C $atom:H2
$bond:CH3 $atom:C $atom:H3
}
} # CH3
######### (scratchwork calculations for the atomic coordinates) #########
# Lcc = 1.5350 # length of the C-C bond (Sp3)
# Lch = 1.0930 # length of the C-H bond
# theta=2*atan(sqrt(2)) # ~= 109.5 degrees = tetrahedronal angle (C-C-C angle)
# DeltaXc = Lcc*sin(theta/2) # = 1.2533222517240594
# DeltaYc = Lcc*cos(theta/2) # = 0.8862326632060754
# # 0.5*DeltaYc = 0.4431163316030377
# DeltaZh = Lch*sin(theta/2) # = 0.8924307629540046
# DeltaYh = Lch*cos(theta/2) # = 0.6310438442242609
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/hexadecane.lt b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/hexadecane.lt
index fa4a9ac25..184bc7b1d 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/hexadecane.lt
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/moltemplate_files/hexadecane.lt
@@ -1,84 +1,93 @@
-# Define the "CH2" and "CH3" objects:
+# This example looks complicated because I split the
+# hexadecane molecule into individual CH2 and CH3 monomers.
+#
+# I defined it this way so that you can easily modify
+# it to change the length of the alkane chain.
-import "ch2group.lt"
-import "ch3group.lt"
+
+import "gaff.lt" # load the "GAFF" force-field information
+import "ch2group.lt" # load the definition of the "CH2" object
+import "ch3group.lt" # load the definition of the "CH3" object
Hexadecane inherits GAFF {
- # Create an array of 16 "CH2" objects
+
+ # Create an array of 16 "CH2" objects distributed along the X axis
monomers = new CH2.move(0,0.4431163,0) [16].rot(180,1,0,0).move(1.2533223,0,0)
- # "monomers" is a 1-dimensional array containing 16 copies of the CH2 molecule
- # Each copy is rotated 180 degrees and shifted along the x axix.
- # (For an explanation, read sections 7.1-7.3 of the moltemplate manual.)
- # Notes:
- # 1.2533223 = DeltaXc = how far each CH2 group is shifted along the axis
- # 0.4431163 = DeltaYc/2 = lateral displacement of carbons along axis
+ # Each CH2 monomer is initial moved in the +Y direction by 0.43116
+ # angstroms. Then it is rotated 180 degrees with respect to the
+ # previous monomer, and moved 1.2533223 Angstroms down the X axis.
# ---- Now, modify the ends: ---
# Delete the CH2 groups at the beginning and end, and replace them with CH3.
- # (Note: Alternately, instead of deleting the CH2 groups at each end, you
- # could modify them by adding an extra hydrogen atom to those carbons.)
+ # (Note: Alternately, instead of deleting the CH2 groups at each end, you
+ # could modify them by adding an extra hydrogen atom to those carbons.)
delete monomers[0]
delete monomers[15]
- monomer_begin = new CH3
- monomer_end = new CH3
+ endcap1 = new CH3
+ endcap2 = new CH3
# Move the CH3 groups to the correct location at either end of the chain:
- monomer_begin.move(0,0.4431163,0)
- monomer_end.move(0,0.4431163,0).rot(180,0,0,1).move(18.7998345,0,0)
+ endcap1.move(0,0.4431163,0)
+ endcap2.move(0,0.4431163,0).rot(180,0,0,1).move(18.7998345,0,0)
- # Note: 18.7998345 = (16-1) * DeltaXc
+ # Note: 18.7998345 = (16-1) * 1.2533223
# Now add a list of bonds connecting the carbon atoms together:
write('Data Bond List') {
- $bond:b1 $atom:monomer_begin/C $atom:monomers[1]/C
+ $bond:b1 $atom:endcap1/C $atom:monomers[1]/C
$bond:b2 $atom:monomers[1]/C $atom:monomers[2]/C
$bond:b3 $atom:monomers[2]/C $atom:monomers[3]/C
$bond:b4 $atom:monomers[3]/C $atom:monomers[4]/C
$bond:b5 $atom:monomers[4]/C $atom:monomers[5]/C
$bond:b6 $atom:monomers[5]/C $atom:monomers[6]/C
$bond:b7 $atom:monomers[6]/C $atom:monomers[7]/C
$bond:b8 $atom:monomers[7]/C $atom:monomers[8]/C
$bond:b9 $atom:monomers[8]/C $atom:monomers[9]/C
$bond:b10 $atom:monomers[9]/C $atom:monomers[10]/C
$bond:b11 $atom:monomers[10]/C $atom:monomers[11]/C
$bond:b12 $atom:monomers[11]/C $atom:monomers[12]/C
$bond:b13 $atom:monomers[12]/C $atom:monomers[13]/C
$bond:b14 $atom:monomers[13]/C $atom:monomers[14]/C
- $bond:b15 $atom:monomers[14]/C $atom:monomer_end/C
+ $bond:b15 $atom:monomers[14]/C $atom:endcap2/C
}
- create_var { $mol } # Define a molecule ID number for this polymer
-
- # This causes monomer[0], monomer[1], ... to share the same molecule-ID.
- # (because in the ch2group.lt file, the "..." in "$mol:..." looks for
- # a counter of type "$mol" in a parent molecule or earlier ancestor.)
+ # OPTIONAL:
+ create_var { $mol } # Create a molecule ID number. This number will
+ # be shared by all of the atoms in this polymer.
+ # In ch2group.lt, "$mol:..." refers to this number.
} # Hexadecane
######### (scratchwork calculations for the atomic coordinates) #########
+#
+# 1.2533223 = DeltaXc = how far each CH2 group is shifted along
+# the X axis (in Angstoms).
+# 0.4431163 = DeltaYc/2 = lateral displacement of carbons away
+# from the central axis. (See below.)
+#
# Lcc = 1.5350 # length of the C-C bond (Sp3)
# Lch = 1.0930 # length of the C-H bond
# theta=2*atan(sqrt(2)) # ~= 109.5 degrees = tetrahedronal angle (C-C-C angle)
# DeltaXc = Lcc*sin(theta/2) # = 1.2533222517240594
# DeltaYc = Lcc*cos(theta/2) # = 0.8862326632060754
# # 0.5*DeltaYc = 0.4431163316030377
# DeltaZh = Lch*sin(theta/2) # = 0.8924307629540046
# DeltaYh = Lch*cos(theta/2) # = 0.6310438442242609
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/optional_cleanup/README_remove_irrelevant_info.sh b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/optional_cleanup/README_remove_irrelevant_info.sh
new file mode 100755
index 000000000..d4494c450
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/optional_cleanup/README_remove_irrelevant_info.sh
@@ -0,0 +1,52 @@
+ # MOST USERS CAN IGNORE THIS FILE
+ #
+ # Unfortunately, as of 2014-4-19, the system.data and system.in.settings file
+ # which are created by moltemplate.sh contain a lot of irrelevant information,
+ # such as definition of parameters for atom types not present in the current
+ # system. This extra information takes up about 1 MB.
+ #
+ # This appears to be harmless.
+ # (Loading this extra information does not seem to slow down LAMMPS.)
+ #
+ # --------- OPTIONAL STEPS FOR STRIPPING OUT JUNK ---------
+ #
+ # However if you want to eliminate this junk from these files
+ # For now, we can strip this out using ltemplify.py to build a new .lt file.
+ #
+ # I suggest you do this in a temporary_directory
+
+ mkdir new_lt_file
+ cd new_lt_file/
+
+ # now run ltemplify.py
+
+ ltemplify.py ../system.in.init ../system.in.settings ../system.data > system.lt
+ rm -rf ../system.data ../system.in* # these old lammps files no longer needed
+
+ # This creates a new .LT file named "system.lt" in the local directory.
+
+ # The ltemplify.py script also does not copy the boundary dimensions.
+ # We must do this manually.
+ # If you did NOT throw away the "Data Boundary" file usually located in
+ # "moltemplate_files/output_ttree/Data Boundary"
+ # then you can copy that information from this file into system.lt
+
+ echo "write_once(\"Data Boundary\") {" >> system.lt
+ cat "../moltemplate_files/output_ttree/Data Boundary" >> system.lt
+ echo "}" >> system.lt
+ echo "" >> system.lt
+ # Now, run moltemplate on this new .LT file.
+ moltemplate.sh system.lt
+ # This will create: "system.data" "system.in.init" "system.in.settings."
+
+ # That's it. The new "system.data" and system.in.* files should
+ # be ready to run in LAMMPS.
+
+ # Now copy the system.data and system.in.* files to the place where
+ # you plan to run moltemplate
+ mv -f system.data system.in.* ../
+ cd ../
+
+ # Now delete all of the temporary files we generated
+ rm -rf new_lt_file/
+
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/run.in.npt b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/run.in.npt
index b1791c955..979376464 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/run.in.npt
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/hexadecane/run.in.npt
@@ -1,85 +1,85 @@
# PREREQUISITES:
#
# You must use moltemplate.sh to create 3 files:
# system.data system.in.init system.in.settings
# (Follow the instructions in README_setup.sh, or run it using ./README_sh.)
# ------------------------------- Initialization Section --------------------
include system.in.init
# ------------------------------- Atom Definition Section -------------------
read_data system.data
# ------------------------------- Settings Section --------------------------
include system.in.settings
# ------------------------------- Run Section -------------------------------
# To avvoid explosions, I have a 4-step equilibraion process (expand, minimize,
# reorient, compress). The system (as defined in the "system.data" file)
# is already expanded. That means there are 3 steps left:
dump dumpeq1 all custom 50 traj_eq1_min.lammpstrj id mol type x y z ix iy iz
thermo 50
# -- Equilibration: part 1: initial minimization --
# Note: In general, it's always a good idea to minimize the system at first.
minimize 1.0e-5 1.0e-7 100000 400000
undump dumpeq1
write_data system_after_eq1_min.data
# -- Equilibration part 2: reorienting the molecules (NVT) --
timestep 1.0
dump dumpeq2 all custom 200 traj_eq2_reorient.lammpstrj id mol type x y z ix iy iz
# Run the system at high temperature (at constant volume) to reorient the
# the molecules (which would otherwise be pointing in the same direction).
# To speed it up, I randomize the atomic positions for a few thousand steps
# using fix langevin (and fix nve). Then I switch to fix nvt (Nose-Hoover).
# (If I start with fix nvt (Nose-Hoover), it seems to get "stuck" for a while.)
fix fxlan all langevin 900.0 900.0 120 48279
fix fxnve all nve
run 2000
unfix fxlan
unfix fxnve
# Now continue the simulation at high temperature using fix nvt (Nose-Hoover).
fix fxnvt all nvt temp 900.0 900.0 100.0
run 5000
undump dumpeq2
write_data system_after_eq2_reorient.data
unfix fxnvt
# -- equilibration part 3: Equilibrating the density (NPT) --
# Originally, the simulation box (in "system.data" and "system.lt") was
# unrealistically large. The spacing between the molecules was large also.
# I did this to enable the molecules to move freely and reorient themselves.
# After doing that, we should run the simulation under NPT conditions to
# allow the simulation box to contract to it's natural size. We do that here:
# We begin the simulation at 100 barr (a relatively low pressure), and
# slowly decrease it to 1 barr, maintianing the temperature at 300K.
dump dumpeq3 all custom 200 traj_eq3_npt.lammpstrj id mol type x y z ix iy iz
fix fxnpt all npt temp 300.0 300.0 100.0 iso 100.0 1.0 1000.0 drag 2.0
timestep 1.0
-run 30000
+run 60000
write_data system_after_eq3_npt.data
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README.TXT b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README.TXT
index 4ab833f09..2e8cef307 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README.TXT
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README.TXT
@@ -1,42 +1,51 @@
This is an example of how to use "canned" force-fields in like GAFF in LAMMPS.
In this example, we specify only the atom names, bond connectivity,
(and coordinates and charge), and use moltemplate to
load the GAFF parameters from an external file (gaff.lt)
(...instead of specifying them explicitly in the molecule definition).
The simulation consists of a mixture of isobutane and water.
Over time (less than 1 ns), the two molecules phase-separate.
The GAFF parameters are applied only to the isobutane molecule.
(The water molecule paramters are defined explicitly in common/tip3p_2004.lt)
For this to work, make sure you have defined the MOLTEMPLATE_PATH
environment variable and set it to "common". See manual for more details.)
-# WARNING: THIS IS A PRELIMINARY EXAMPLE WHICH USES AMBER'S GAFF FORCE FIELD.
-# THIS FEATURE IS CURRENTLY BEING TESTED (AS OF 2013-8-08).
-# THE ABILITY TO DETECT AND ASSIGN GAFF FORCE FIELD PARAMETERS
-# MOLECULES ACCORDING TO ATOM TYPE IS AN EXPERIMENTAL FEATURE
-# AND CURRENTLY PROBABLY HAS BUGS (IN THE DIHEDRALS AND IMPROPERS).
-#
-# (In addition, I am embarassed to admit I do not understand
-# atom nomenclature, and I am not sure if I am using
-# the correct GAFF atom names in the isobutane molecule.)
-# PLEASE REPORT BUGS AND/OR SEND CORRECTIONS. -A 2013-8-08
-#
-# -------- REQUIREMENTS: ---------
-# 1) This example requires building LAMMPS with the "USER-MISC" package.
-# (because it makes use of "gaff.lt" which uses dihedral_style fourier)
-# To do this, type "make yes-user-misc" before compiling LAMMPS.
-# http://lammps.sandia.gov/doc/Section_start.html#start_3
-# 2) You must define your MOLTEMPLATE_PATH environment variable
-# and set it to the "common" subdirectory of your moltemplate distribution.
-# (See the "Installation" section in the moltemplate manual.)
+WARNING: THIS IS A PRELIMINARY EXAMPLE WHICH USES AMBER'S GAFF FORCE FIELD.
+ AS OF 2014-4-19, these features have not been tested.
+ THE ABILITY TO DETECT AND ASSIGN GAFF FORCE FIELD PARAMETERS
+ MOLECULES ACCORDING TO ATOM TYPE IS AN EXPERIMENTAL FEATURE
+ AND CURRENTLY PROBABLY HAS BUGS (IN THE DIHEDRALS AND IMPROPERS).
+ PLEASE REPORT BUGS AND/OR SEND CORRECTIONS. -A 2014-4-19
+
+----------------- CHARGE ----------------------
+
+NOTE: The GAFF force-field DOES NOT ASSIGN ATOM CHARGE.
+ In this example, atom charges were taken from the OPLSAA force field file:
+ http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+ This is not the charge in AMBER simunlations is typically assigned.
+ (As of 2014, it is assigned using the "HF/6-31G* RESP2" or "AM1-BCC3"
+ methods using AmberTools (which are not available in moltemplate).
+ http://ambermd.org/doc6/html/AMBER-sh-19.4.html
+ http://ambermd.org/tutorials/basic/tutorial4b/)
+
+
+-------- REQUIREMENTS: ---------
+
+1) This example requires building LAMMPS with the "USER-MISC" package.
+ (because it makes use of "gaff.lt" which uses dihedral_style fourier)
+ To do this, type "make yes-user-misc" before compiling LAMMPS.
+ http://lammps.sandia.gov/doc/Section_start.html#start_3
+ 2) You must define your MOLTEMPLATE_PATH environment variable
+ and set it to the "common" subdirectory of your moltemplate distribution.
+ (See the "Installation" section in the moltemplate manual.)
More detailed instructions on how to build LAMMPS input files and
run a short simulation are provided in other README files.
step 1)
README_setup.sh
step 2)
README_run.sh
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README_setup.sh b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README_setup.sh
index 3c7e07165..ef5e35b67 100755
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README_setup.sh
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/README_setup.sh
@@ -1,116 +1,35 @@
# -------- REQUIREMENTS: ---------
# You must define your MOLTEMPLATE_PATH environment variable
# and set it to the "common" subdirectory of your moltemplate distribution.
# (See the "Installation" section in the moltemplate manual.)
-
# Create LAMMPS input files this way:
+
cd moltemplate_files
# run moltemplate
moltemplate.sh system.lt
# This will generate various files with names ending in *.in* and *.data.
-
- # FIX THE PAIR STYLES
- # (Sorry, this is messy)
- #
- # I was forced to change the default pair-style for AMBER-force-fields (GAFF)
- # from lj/charmm/coul/long to lj/charmm/coul/charmm. (This is because
- # LAMMPS crashes when using lj/charmm/coul/long on a system without any
- # charged particles, and users were complaining it was moltemplate's fault.
- # I wish LAMMPS would not do this.)
- #
- # Unfortunately, this means that the "Isobutane" molecule (which uses
- # AMBER's GAFF), and the "TIP3P_2004" molecule now use different pair styles.
- #
- # The cleanest way to fix this is to force the two molecules to use
- # the same pair style.
- # (Using a hybrid pair_style is not practical because that disables mixing
- # rules. This would force us to add a huge list of pair_coeff commands to
- # explain how TIP3P_2004 atoms interact with all of the various GAFF atoms.)
-
- # Add a line to systems.in.init to override the pair_style.
- # Change the pair_style to "lj/charmm/coul/long 10.0 10.5 10.5".
-
- echo "pair_style hybrid lj/charmm/coul/long 10.0 10.5 10.5" >> system.in.init
-
- # Then use "sed" to replace "lj/charmm/coul/charmm" with "lj/charmm/coul/long"
- sed -i 's/lj\/charmm\/coul\/charmm/lj\/charmm\/coul\/long/g' system.in.settings
-
# These files are the input files directly read by LAMMPS. Move them to
# the parent directory (or wherever you plan to run the simulation).
- #cp -f system.data system.in* ../
-
-
- # --------- OPTIONAL STEPS FOR STRIPPING OUT JUNK ---------
- # --------- edit 2013-8-28 ---------
- echo "-----------------------------------------------------------------" >&2
- echo "OPTIONAL STEP: PRUNING THE RESULTING MOLTEMPLATE OUTPUT TO" >&2
- echo " INCLUDE ONLY ATOMS AND TYPES WE ARE ACTUALLY USING." >&2
- # Unfortunately, as of 2013-8-28, these files contain a lot of irrelevant
- # information (for atom types not present in the current system).
- # For now, we can strip this out using ltemplify.py to build a new .lt file.
- # THIS IS AN UGLY WORKAROUND. HOPEFULLY IN THE FUTURE, WE CAN SKIP THESE STEPS
-
- # do this in a temporary_directory
- mkdir new_lt_file
- cd new_lt_file/
-
- # now run ltemplify.py
-
- ltemplify.py ../system.in.init ../system.in.settings ../system.data > system.lt
- rm -rf ../system.data ../system.in* # these old lammps files no longer needed
-
- # This creates a new .LT file named "system.lt" in the local directory.
- # Unfortunately, it may be missing some information because ltemplify.py
- # does not understand all the commands present in a LAMMPS input script.
- # If you define groups or use constraints, you must define them again. In this
- # case, we must add the SHAKE constraint for the "TIP3P_2004" water molecule.
- # So we have to remember the original name of the bond types and angle types.
- # (For this example, SHAKE is applied to the water molecule, which is defined
- # in "tip3p_2004.lt" file in the "common/" directory. Check this file.)
- ATOMTYPENUM_ow=`awk '{if ($1 == "@/atom:TIP3P_2004/ow") print $2}' < ../output_ttree/ttree_assignments.txt`
- ATOMTYPENUM_hw=`awk '{if ($1 == "@/atom:TIP3P_2004/hw") print $2}' < ../output_ttree/ttree_assignments.txt`
- BONDTYPENUM=`awk '{if ($1 == "@/bond:TIP3P_2004/OH") print $2}' < ../output_ttree/ttree_assignments.txt`
- ANGLETYPENUM=`awk '{if ($1 == "@/angle:TIP3P_2004/HOH") print $2}' < ../output_ttree/ttree_assignments.txt`
- echo "" >> system.lt
- echo "write_once(\"In Settings\") {" >> system.lt
- echo " group tip3p type @atom:type$ATOMTYPENUM_ow @atom:type$ATOMTYPENUM_hw" >> system.lt
- echo " fix fShakeTIP3P tip3p shake 0.0001 10 100 b @bond:type$BONDTYPENUM a @angle:type$ANGLETYPENUM" >> system.lt
- echo "}" >> system.lt
- echo "" >> system.lt
-
- # The ltemplify.py script also does not copy the boundary dimensions.
- # We must do this manually as well.
- echo "write_once(\"Data Boundary\") {" >> system.lt
- cat "../output_ttree/Data Boundary" >> system.lt
- echo "}" >> system.lt
- echo "" >> system.lt
- # Now, run moltemplate on this new .LT file.
- moltemplate.sh system.lt
- # This will create: "system.data" "system.in.init" "system.in.settings."
-
- # move the final DATA and INput scripts to the desired location,
- mv -f system.data system.in* ../../
-
- # and clean up the mess
- rm -rf output_ttree/
- cd ..
- rm -rf new_lt_file/
- echo "---------------- DONE PRUNING MOLTEMPLATE OUTPUT ----------------" >&2
- echo "-----------------------------------------------------------------" >&2
- # --------- END OF OPTIONAL STEPS FOR STRIPPING OUT JUNK ---------
-
-
-
+ mv -f system.data system.in* ../
# Optional:
# The "./output_ttree/" directory is full of temporary files generated by
# moltemplate. They can be useful for debugging, but are usually thrown away.
- rm -rf output_ttree/
+ #rm -rf output_ttree/
+cd ../
-cd ../
+
+
+
+# Optional:
+# Note: The system.data and system.in.settings files contain extra information
+# for atoms defined in GAFF which you are not using in this simulation. This
+# is harmless, but if you to delete this information from your
+# system.in.settings and system.in.data files, follow the instructions in
+# this script: "optional_cleanup/README_remove_irrelevant_info.sh"
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/moltemplate_files/isobutane.lt b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/moltemplate_files/isobutane.lt
index 99cbd9846..bdc79c22a 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/moltemplate_files/isobutane.lt
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/moltemplate_files/isobutane.lt
@@ -1,53 +1,56 @@
import "gaff.lt"
# The "gaff.lt" file is usually located in $MOLTEMPLATE_PATH (and is
# distributed with moltemplate. See the "Installation" section in the manual.)
# It contains definitions of the atoms "c3", "h1", as well as the bonded
# and non-bonded interactions between them (and many other atoms).
-
-# Moltemplate is a simple text manipulation tool and can not assign atomic
-# charge. So the charges for the atoms in this example are all set to zero.
-# In a realistic simulation, one must assign (partial) charges to each atom.
+#
+# Moltemplate is only a simple text manipulation tool. It cannot
+# calculate atomic charge using quantom chemistry methods.
+# Atom charges for this example were taken from the OPLSAA force field file:
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+# However, normally simulations in AMBER are assigned charges using the
+# "HF/6-31G* RESP2" or "AM1-BCC3" methods using AmberTools.
Isobutane inherits GAFF {
-
+ # atomID molID atomTyle charge X Y Z
write('Data Atoms') {
- $atom:C0 $mol:. @atom:c3 0.0 -0.001 -0.001 -0.439
- $atom:C1 $mol:. @atom:c3 0.0 -1.257 -0.726 0.078
- $atom:C2 $mol:. @atom:c3 0.0 1.258 -0.726 0.072
- $atom:C3 $mol:. @atom:c3 0.0 -0.001 1.453 0.069
- $atom:H0 $mol:. @atom:h1 0.0 -0.003 -0.004 -1.439
- $atom:H11 $mol:. @atom:h1 0.0 -2.075 -0.255 -0.254
- $atom:H12 $mol:. @atom:h1 0.0 -1.256 -0.724 1.078
- $atom:H13 $mol:. @atom:h1 0.0 -1.259 -1.669 -0.253
- $atom:H21 $mol:. @atom:h1 0.0 2.074 -0.255 -0.264
- $atom:H22 $mol:. @atom:h1 0.0 1.258 -1.669 -0.259
- $atom:H23 $mol:. @atom:h1 0.0 1.261 -0.724 1.072
- $atom:H31 $mol:. @atom:h1 0.0 -0.817 1.923 -0.263
- $atom:H32 $mol:. @atom:h1 0.0 0.816 1.923 -0.268
- $atom:H33 $mol:. @atom:h1 0.0 0.003 1.456 1.070
+ $atom:C0 $mol:. @atom:c3 -0.0600 -0.001 -0.001 -0.439
+ $atom:C1 $mol:. @atom:c3 -0.1800 -1.257 -0.726 0.078
+ $atom:C2 $mol:. @atom:c3 -0.1800 1.258 -0.726 0.072
+ $atom:C3 $mol:. @atom:c3 -0.1800 -0.001 1.453 0.069
+ $atom:H0 $mol:. @atom:h1 0.0600 -0.003 -0.004 -1.439
+ $atom:H11 $mol:. @atom:h1 0.0600 -2.075 -0.255 -0.254
+ $atom:H12 $mol:. @atom:h1 0.0600 -1.256 -0.724 1.078
+ $atom:H13 $mol:. @atom:h1 0.0600 -1.259 -1.669 -0.253
+ $atom:H21 $mol:. @atom:h1 0.0600 2.074 -0.255 -0.264
+ $atom:H22 $mol:. @atom:h1 0.0600 1.258 -1.669 -0.259
+ $atom:H23 $mol:. @atom:h1 0.0600 1.261 -0.724 1.072
+ $atom:H31 $mol:. @atom:h1 0.0600 -0.817 1.923 -0.263
+ $atom:H32 $mol:. @atom:h1 0.0600 0.816 1.923 -0.268
+ $atom:H33 $mol:. @atom:h1 0.0600 0.003 1.456 1.070
}
# The "." in "$mol:." refers to this molecule object's molecule ID
# (It means we do not expect this molecule to be a group or a subunit
# of a larger molecule. Otherwise we would use "$mol:..." instead.)
write('Data Bond List') {
$bond:C01 $atom:C0 $atom:C1
$bond:C02 $atom:C0 $atom:C2
$bond:C03 $atom:C0 $atom:C3
$bond:C0H $atom:C0 $atom:H0
$bond:C1H1 $atom:C1 $atom:H11
$bond:C1H2 $atom:C1 $atom:H12
$bond:C1H3 $atom:C1 $atom:H13
$bond:C2H1 $atom:C2 $atom:H21
$bond:C2H2 $atom:C2 $atom:H22
$bond:C2H3 $atom:C2 $atom:H23
$bond:C3H1 $atom:C3 $atom:H31
$bond:C3H2 $atom:C3 $atom:H32
$bond:C3H3 $atom:C3 $atom:H33
}
} # Isobutane
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/optional_cleanup/README_remove_irrelevant_info.sh b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/optional_cleanup/README_remove_irrelevant_info.sh
new file mode 100755
index 000000000..829c20a93
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/optional_cleanup/README_remove_irrelevant_info.sh
@@ -0,0 +1,69 @@
+ # MOST USERS CAN IGNORE THIS FILE
+ #
+ # Unfortunately, as of 2014-4-19, the system.data and system.in.settings file
+ # which are created by moltemplate.sh contain a lot of irrelevant information,
+ # such as definition of parameters for atom types not present in the current
+ # system. This extra information takes up about 1 MB.
+ #
+ # This appears to be harmless.
+ # (Loading this extra information does not seem to slow down LAMMPS.)
+ #
+ # --------- OPTIONAL STEPS FOR STRIPPING OUT JUNK ---------
+ #
+ # However if you want to eliminate this junk from these files
+ # For now, we can strip this out using ltemplify.py to build a new .lt file.
+ #
+ # I suggest you do this in a temporary_directory
+
+ mkdir new_lt_file
+ cd new_lt_file/
+
+ # now run ltemplify.py
+
+ ltemplify.py ../system.in.init ../system.in.settings ../system.data > system.lt
+ rm -rf ../system.data ../system.in* # these old lammps files no longer needed
+
+ # This creates a new .LT file named "system.lt" in the local directory.
+ # Unfortunately, it may be missing some information because ltemplify.py
+ # does not understand all the commands present in a LAMMPS input script.
+ # If you define groups or use constraints, you must define them again. In this
+ # case, we must add the SHAKE constraint for the "TIP3P_2004" water molecule.
+ # So we have to remember the original name of the bond types and angle types.
+ # (For this example, SHAKE is applied to the water molecule, which is defined
+ # in "tip3p_2004.lt" file in the "common/" directory. Check this file.)
+
+ ATOMTYPENUM_ow=`awk '{if ($1 == "@/atom:TIP3P_2004/ow") print $2}' < ../moltemplate_files/output_ttree/ttree_assignments.txt`
+ ATOMTYPENUM_hw=`awk '{if ($1 == "@/atom:TIP3P_2004/hw") print $2}' < ../moltemplate_files/output_ttree/ttree_assignments.txt`
+ BONDTYPENUM=`awk '{if ($1 == "@/bond:TIP3P_2004/OH") print $2}' < ../moltemplate_files/output_ttree/ttree_assignments.txt`
+ ANGLETYPENUM=`awk '{if ($1 == "@/angle:TIP3P_2004/HOH") print $2}' < ../moltemplate_files/output_ttree/ttree_assignments.txt`
+ echo "" >> system.lt
+ echo "write_once(\"In Settings\") {" >> system.lt
+ echo " group tip3p type @atom:type$ATOMTYPENUM_ow @atom:type$ATOMTYPENUM_hw" >> system.lt
+ echo " fix fShakeTIP3P tip3p shake 0.0001 10 100 b @bond:type$BONDTYPENUM a @angle:type$ANGLETYPENUM" >> system.lt
+ echo "}" >> system.lt
+ echo "" >> system.lt
+
+ # The ltemplify.py script also does not copy the boundary dimensions.
+ # We must do this manually.
+ # If you did NOT throw away the "Data Boundary" file usually located in
+ # "moltemplate_files/output_ttree/Data Boundary"
+ # then you can copy that information from this file into system.lt
+ echo "write_once(\"Data Boundary\") {" >> system.lt
+ cat "../moltemplate_files/output_ttree/Data Boundary" >> system.lt
+ echo "}" >> system.lt
+ echo "" >> system.lt
+
+ # Now, run moltemplate on this new .LT file.
+ moltemplate.sh system.lt
+ # This will create: "system.data" "system.in.init" "system.in.settings."
+
+ # That's it. The new "system.data" and system.in.* files should
+ # be ready to run in LAMMPS.
+
+ # Now copy the system.data and system.in.* files to the place where
+ # you plan to run moltemplate
+ mv -f system.data system.in.* ../
+ cd ../
+
+ # Now delete all of the temporary files we generated
+ rm -rf new_lt_file/
diff --git a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/run.in.npt b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/run.in.npt
index 03127c1d6..0a829c52d 100644
--- a/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/run.in.npt
+++ b/tools/moltemplate/examples/all_atom_examples/AMBER_force_field_examples/waterTIP3P+isobutane/run.in.npt
@@ -1,43 +1,44 @@
# PREREQUISITES:
#
# You must use moltemplate.sh to create 3 files:
# system.data system.in.init system.in.settings
-# (Follow the instructions in README_setup.sh, or run it using ./README_sh.)
-
+# (Follow the instructions in README_setup.sh, or run it using
+# ./README_setup.sh)
+#
# ------------------------------- Initialization Section --------------------
include system.in.init
# ------------------------------- Atom Definition Section -------------------
read_data system.data
# ------------------------------- Settings Section --------------------------
include system.in.settings
# ------------------------------- Run Section -------------------------------
# -- minimization protocol --
# Note: The minimization step is not necessary in this example. However
# in general, it's always a good idea to minimize the system beforehand.
# fShakeTIP3P was defined in system.in.settings. It is incompatible with "minimize".
unfix fShakeTIP3P
minimize 1.0e-4 1.0e-6 100000 400000
# Now read "system.in.settings" in order to redefine fShakeTIP3P again:
include system.in.settings
# -- simulation protocol --
timestep 1.0
dump 1 all custom 500 traj_npt.lammpstrj id mol type x y z ix iy iz
fix fxnpt all npt temp 300.0 300.0 100.0 iso 1.0 1.0 1000.0 drag 1.0
thermo 100
#thermo_modify flush yes
-run 2000
+run 40000
write_data system_after_npt.data
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/WARNING.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/WARNING.TXT
index 0457ac299..e95cac192 100644
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/WARNING.TXT
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/WARNING.TXT
@@ -1,26 +1,29 @@
# -------- WARNING: --------
This directory contains some examples of all-atom simulations using the OPLSAA
-force field, prepared using Jason Lamberts oplsaa_moltemplate.py conversion
+force field, prepared using Jason Lambert's oplsaa_moltemplate.py conversion
tool, and moltemplate.
This software is experimental, and the force-fields and equilbration protocols
have not been tested carefully by me. There is no gaurantee that simulations
prepared using moltemplate will reproduce the behavior of other MD codes.
# -------- REQUEST FOR HELP: --------
If you notice a problem with these examples, please report it.
Peer-review is the only way to improve this software (or any software).
Other suggestions are also welcome!
-(Contact jewett.aij@gmail.com, 2014-3-03
+(Contact jewett.aij@gmail.com, 2014-4-19)
--- Improper angles ---
I am also uncertain whether the improper angle interactions generated by
moltemplate are equivalent to those generated by BOSS or other molecule
builders. (I think they are, but I am worried that we might have listed
the atom types in the wrong order. Let us know if you see discrepancies
between what moltemplate and other molecule builders generates.)
+-----------
+For more details how to use the OPLSAA force-field, read the "README.TXT"
+file located in "ethylene/moltemplate_files/oplsaa_lt_generator/README.TXT"
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README.TXT
new file mode 100644
index 000000000..32252bad0
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README.TXT
@@ -0,0 +1,24 @@
+
+This is an example of how to use the OPLSAA force-field in LAMMPS
+(using moltemplate.sh and Jason Lambert's oplsaa_moltemplate.py conversion tool)
+
+This example also shows how to use moltemplate in combination with PACKMOL.
+(PACKMOL is a useful program for generating atomic coordinates. In this example,
+ moltemplate.sh is only used to create the topology, force-field and charges,
+ and PACKMOL generates the coordinates, which moltemplate reads (in "step 1").
+ Moltemplate can also be used for generating atomic coordinates, especially
+ for mixing many small molecules together, as we do in this example. However
+ I wanted to demonstrate how to combine PACKMOL with moltemplate.sh.
+ In some other scenarios, such as protein solvation, PACKMOL does a much
+ better job than moltemplate.)
+
+As of 2014-4-06, this code has not been tested for accuracy.
+(See the WARNING.TXT file.)
+
+step 1)
+To build the files which LAMMPS needs, follow the instructions in:
+README_setup.sh
+
+step 2)
+To run LAMMPS with these files, follow these instructions:
+README_run.sh
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_run.sh b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_run.sh
new file mode 100755
index 000000000..8b01ab92d
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_run.sh
@@ -0,0 +1,39 @@
+# --- Running LAMMPS ---
+# -------- REQUIREMENTS: ---------
+# 1) This example requires building LAMMPS with the "USER-MISC" package.
+# (because it makes use of "gaff.lt" which uses dihedral_style fourier)
+# To do this, type "make yes-user-misc" before compiling LAMMPS.
+# http://lammps.sandia.gov/doc/Section_start.html#start_3
+# -------- PREREQUISITES: --------
+# The 2 files "run.in.npt", and "run.in.nvt" are LAMMPS
+# input scripts which link to the input scripts and data files
+# you hopefully have created earlier with moltemplate.sh:
+# system.in.init, system.in.settings, system.data
+# If not, carry out the instructions in "README_setup.sh".
+#
+# -- Instructions: --
+# If "lmp_linux" is the name of the command you use to invoke lammps,
+# then you would run lammps on these files this way:
+
+
+lmp_linux -i run.in.npt # minimization and simulation at constant pressure
+lmp_linux -i run.in.nvt # minimization and simulation at constant volume
+
+#(Note: The constant volume simulation lacks pressure equilibration. These are
+# completely separate simulations. The results of the constant pressure
+# simulation might be ignored when beginning the simulation at constant
+# volume. (This is because restart files in LAMMPS don't always work,
+# and I was spending a lot of time trying to convince people it was a
+# LAMMPS bug, instead of a moltemplate bug, so I disabled restart files.)
+# Read the "run.in.nvt" file to find out how to use the "read_restart"
+# command to load the results of the pressure-equilibration simulation,
+# before beginning a constant-volume run.
+
+
+
+
+
+# If you have compiled the MPI version of lammps, you can run lammps in parallel
+#mpirun -np 4 lmp_linux -i run.in.npt
+#mpirun -np 4 lmp_linux -i run.in.nvt
+# (assuming you have 4 processors available)
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_setup.sh
similarity index 78%
copy from tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh
copy to tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_setup.sh
index d274f0486..33645bfc8 100755
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_setup.sh
@@ -1,36 +1,44 @@
# -------- REQUIREMENTS: ---------
# You must define your MOLTEMPLATE_PATH environment variable
# and set it to the "common" subdirectory of your moltemplate distribution.
# (See the "Installation" section in the moltemplate manual.)
+# Create the coordinates of the atoms using PACKMOL
+cd packmol_files
+
+ packmol < mix_ethylene+benzene.inp
+ mv -f system.xyz ../moltemplate_files/
+
+cd ..
+
+
# Create LAMMPS input files this way:
cd moltemplate_files
# Create the "oplsaa.lt" file which moltemplate will need
cd oplsaa_lt_generator/
- ./oplsaa_moltemplate.py oplsaa_subset.txt
+ ./oplsaa_moltemplate.py oplsaa_subset.prm
mv -f oplsaa.lt ..
cd ..
# run moltemplate
- moltemplate.sh system.lt
+ moltemplate.sh -xyz system.xyz system.lt
# This will generate various files with names ending in *.in* and *.data.
# Move them to the directory where you plan to run LAMMPS (in this case "../")
mv -f system.data system.in* ../
# Optional:
# The "./output_ttree/" directory is full of temporary files generated by
# moltemplate. They can be useful for debugging, but are usually thrown away.
rm -rf output_ttree/
# Optional:
# Delete the "oplsaa.lt" file:
rm -f oplsaa.lt
-
cd ../
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_visualize.txt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_visualize.txt
new file mode 100644
index 000000000..019afc144
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/README_visualize.txt
@@ -0,0 +1,87 @@
+
+ ------- To view a lammps trajectory in VMD --------
+
+
+1) Build a PSF file for use in viewing with VMD.
+
+This step works with VMD 1.9 and topotools 1.2.
+(Older versions, like VMD 1.8.6, don't support this.)
+
+
+a) Start VMD
+b) Menu Extensions->Tk Console
+c) Enter:
+
+(I assume that the the DATA file is called "system.data")
+
+ topo readlammpsdata system.data full
+ animate write psf system.psf
+
+2)
+
+Later, to Load a trajectory in VMD:
+
+ Start VMD
+ Select menu: File->New Molecule
+ -Browse to select the PSF file you created above, and load it.
+ (Don't close the window yet.)
+ -Browse to select the trajectory file.
+ If necessary, for "file type" select: "LAMMPS Trajectory"
+ Load it.
+
+ ---- A note on trajectory format: -----
+If the trajectory is a DUMP file, then make sure the it contains the
+information you need for pbctools (see below. I've been using this
+command in my LAMMPS scripts to create the trajectories:
+
+ dump 1 all custom 5000 DUMP_FILE.lammpstrj id mol type x y z ix iy iz
+
+It's a good idea to use an atom_style which supports molecule-ID numbers
+so that you can assign a molecule-ID number to each atom. (I think this
+is needed to wrap atom coordinates without breaking molecules in half.)
+
+Of course, you don't have to save your trajectories in DUMP format,
+(other formats like DCD work fine) I just mention dump files
+because these are the files I'm familiar with.
+
+3) ----- Wrap the coordinates to the unit cell
+ (without cutting the molecules in half)
+
+a) Start VMD
+b) Load the trajectory in VMD (see above)
+c) Menu Extensions->Tk Console
+d) Try entering these commands:
+
+ pbc wrap -compound res -all
+ pbc box
+
+ ----- Optional ----
+ Sometimes the solvent or membrane obscures the view of the solute.
+ It can help to shift the location of the periodic boundary box
+ To shift the box in the y direction (for example) do this:
+
+ pbc wrap -compound res -all -shiftcenterrel {0.0 0.15 0.0}
+ pbc box -shiftcenterrel {0.0 0.15 0.0}
+
+ Distances are measured in units of box-length fractions, not Angstroms.
+
+ Alternately if you have a solute whose atoms are all of type 1,
+ then you can also try this to center the box around it:
+
+ pbc wrap -sel type=1 -all -centersel type=2 -center com
+
+4)
+ You should check if your periodic boundary conditions are too small.
+ To do that:
+ select Graphics->Representations menu option
+ click on the "Periodic" tab, and
+ click on the "+x", "-x", "+y", "-y", "+z", "-z" checkboxes.
+
+5) Optional: If you like, change the atom types in the PSF file so
+ that VMD recognizes the atom types, use something like:
+
+sed -e 's/ 1 1 / C C /g' < system.psf > temp1.psf
+sed -e 's/ 2 2 / H H /g' < temp1.psf > temp2.psf
+sed -e 's/ 3 3 / P P /g' < temp2.psf > system.psf
+
+(If you do this, it might effect step 2 above.)
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/benzene.jpg b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/benzene.jpg
new file mode 100644
index 000000000..356c78425
Binary files /dev/null and b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/benzene.jpg differ
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/ethylene+benzene_box80x80x80_LR.jpg b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/ethylene+benzene_box80x80x80_LR.jpg
new file mode 100644
index 000000000..00c82d3d9
Binary files /dev/null and b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/ethylene+benzene_box80x80x80_LR.jpg differ
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/ethylene.jpg b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/ethylene.jpg
new file mode 100644
index 000000000..ab5bbbf49
Binary files /dev/null and b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/images/ethylene.jpg differ
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/benzene.lt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/benzene.lt
new file mode 100644
index 000000000..f240a091f
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/benzene.lt
@@ -0,0 +1,51 @@
+import "oplsaa.lt"
+
+# The "oplsaa.lt" file contains force-field definitions and masses for the
+# atoms in your system. See oplsaa_lt_generator/README.TXT for details.
+
+# Note:
+# Atom type @atom:90 corresponds to "Aromatic C"
+# Atom type @atom:91 corresponds to "Aromatic H-C"
+
+Benzene inherits OPLSAA {
+
+ # We just need a list of atom types and bonds.
+ #
+ # You don't have to specify the charge in this example because we are
+ # using the OPLSAA force-field assigns this by atom-type.
+ #
+ # You also don't have to specify the coordinates, because
+ # you are using PACKMOL to generate them for you.
+ # Just leave these numbers as 0.00 for now..
+
+ write('Data Atoms') {
+ $atom:C1 $mol @atom:90 0.00 0.00 0.00 0.00 # "Aromatic C"
+ $atom:C2 $mol @atom:90 0.00 0.00 0.00 0.00 # "Aromatic C"
+ $atom:C3 $mol @atom:90 0.00 0.00 0.00 0.00 # "Aromatic C"
+ $atom:C4 $mol @atom:90 0.00 0.00 0.00 0.00 # "Aromatic C"
+ $atom:C5 $mol @atom:90 0.00 0.00 0.00 0.00 # "Aromatic C"
+ $atom:C6 $mol @atom:90 0.00 0.00 0.00 0.00 # "Aromatic C"
+ $atom:H11 $mol @atom:91 0.00 0.00 0.00 0.00 # "Aromatic H-C"
+ $atom:H21 $mol @atom:91 0.00 0.00 0.00 0.00 # "Aromatic H-C"
+ $atom:H31 $mol @atom:91 0.00 0.00 0.00 0.00 # "Aromatic H-C"
+ $atom:H41 $mol @atom:91 0.00 0.00 0.00 0.00 # "Aromatic H-C"
+ $atom:H51 $mol @atom:91 0.00 0.00 0.00 0.00 # "Aromatic H-C"
+ $atom:H61 $mol @atom:91 0.00 0.00 0.00 0.00 # "Aromatic H-C"
+ }
+
+ write('Data Bond List') {
+ $bond:C12 $atom:C1 $atom:C2
+ $bond:C23 $atom:C2 $atom:C3
+ $bond:C34 $atom:C3 $atom:C4
+ $bond:C45 $atom:C4 $atom:C5
+ $bond:C56 $atom:C5 $atom:C6
+ $bond:C61 $atom:C6 $atom:C1
+ $bond:C1H1 $atom:C1 $atom:H11
+ $bond:C2H2 $atom:C2 $atom:H21
+ $bond:C3H3 $atom:C3 $atom:H31
+ $bond:C4H4 $atom:C4 $atom:H41
+ $bond:C5H5 $atom:C5 $atom:H51
+ $bond:C6H6 $atom:C6 $atom:H61
+ }
+
+} # Benzene
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/ethylene.lt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/ethylene.lt
new file mode 100644
index 000000000..45adb1fae
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/ethylene.lt
@@ -0,0 +1,40 @@
+import "oplsaa.lt"
+
+# The "oplsaa.lt" file contains force-field definitions and masses for the
+# atoms in your system. See oplsaa_lt_generator/README.TXT for details.
+
+# Note:
+# Atom type 88 corresponds to "Alkene H2-C="
+# Atom type 89 corresponds to "Alkene H-C="
+
+
+
+Ethylene inherits OPLSAA {
+
+ # atom-id mol-id atom-type charge X Y Z
+
+ write('Data Atoms') {
+ $atom:C1 $mol @atom:88 0.000 -0.6695 0.000000 0.000000
+ $atom:C2 $mol @atom:88 0.000 0.6695 0.000000 0.000000
+ $atom:H11 $mol @atom:89 0.000 -1.234217 -0.854458 0.000000
+ $atom:H12 $mol @atom:89 0.000 -1.234217 0.854458 0.000000
+ $atom:H21 $mol @atom:89 0.000 1.234217 -0.854458 0.000000
+ $atom:H22 $mol @atom:89 0.000 1.234217 0.854458 0.000000
+ }
+
+ write('Data Bond List') {
+ $bond:C12 $atom:C1 $atom:C2
+ $bond:C1H1 $atom:C1 $atom:H11
+ $bond:C1H2 $atom:C1 $atom:H12
+ $bond:C2H1 $atom:C2 $atom:H21
+ $bond:C2H2 $atom:C2 $atom:H22
+ }
+
+} # Ethylene
+
+
+
+# Note: You don't need to supply the partial partial charges of the atoms.
+# If you like, just fill the fourth column with zeros ("0.000").
+# Moltemplate and LAMMPS will automatically assign the charge later
+
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/AUTHOR.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/AUTHOR.TXT
new file mode 100644
index 000000000..d5e469af3
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/AUTHOR.TXT
@@ -0,0 +1,3 @@
+
+OPLSAA force-field conversion tools provided by Jason Lambert.
+
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/README.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/README.TXT
new file mode 100644
index 000000000..cd3894333
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/README.TXT
@@ -0,0 +1,108 @@
+This directory contains instructions for creating a a moltemplate file
+("oplsaa.lt") containing force-field definitions relevant to the
+"ethylene+benzene" example. (However, these instructions should work
+for other molecules too.)
+
+First, check and see if there is an "oplsaa_subset.prm" file present.
+If not, then download this file:
+
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+ This file is also available here:
+http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
+
+and save this file as "oplsaa_subset.prm". Then you must EDIT THIS FILE
+so that it only contains atom types you plan to have in your simulation
+(see below for details). Then run the opls_moltemplate.py script this way:
+
+
+python oplsaa_moltemplate.py oplsaa_subset.prm
+
+
+This will create a file named "oplsaa.lt"
+Look over the newly created "oplsaa.lt" file.
+Then move this file to wherever you plan to run moltemplate. For example:
+
+mv -f oplsaa.lt ..
+
+----- DETAILS: Editing the "oplsaa_subset.prm" file -------
+
+Again, before you run "oplsaa_moltemplate.py", you must edit the "oplsaa.prm"
+file (or "oplsaa_subset.prm file) and eliminate atom types which do not
+correspond to any of the atoms in your simulation. This means you must
+look for lines near the beginning of this file which begin with the word "atom"
+and refer to atom types which appear in the simulation you plan to run. All
+other lines (beginning with the word "atom") must be deleted or commented out.
+(Leave the rest of the file alone.)
+
+For example:
+If you were working with ethylene and benzene you would delete every line
+beginning with the word "atom", except for these four lines:
+
+# for ethylene:
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+# for benzene:
+atom 90 48 CA "Aromatic C" 6 12.011 3
+atom 91 49 HA "Aromatic H-C" 1 1.008 1
+
+Then you are ready to run oplsaa_moltemplate.py on this file.
+
+(You can try to delete more irrelevant information, but be careful.
+ It is not necessary, and it is easy to make mistakes.)
+
+
+----- Using the "oplsaa.lt" file -----
+
+Once you have created the "oplsaa.lt" file, you can create files (like
+ethylene.lt) which define molecules that refer to these atom types.
+Here is an excerpt from "ethyelene.lt":
+
+Ethylene inherits OPLSAA {
+ write('Data Atoms') {
+ list of atoms goes here ...
+ }
+ write('Data Bond List') {
+ list of bonds goes here ...
+ }
+}
+
+And then run moltemplate.
+
+
+----------- CHARGE: -----------
+
+By default, the OPLSAA force-field assigns atom charge according to atom type.
+When you run moltemplate, it will create a file named "system.in.charges",
+containing commands like:
+
+set type 2 charge -0.42
+set type 3 charge 0.21
+
+(This assumes your main moltemplate file is named "system.lt". If it was
+named something else, eg "polymer.lt", then the file created by moltemplate
+will be named "polymer.in.charges".)
+
+Include these commands somewhere in your LAMMPS input script
+(or use the LAMMPS "include" command to load the commands in system.in.charges)
+
+Note that the atom numbers (eg "2", "3") in this file will not match the
+OPLS atom numbers. (Check the output_ttree/ttree_assignments.txt file,
+created by moltemplate, to see a table of "@atom" type numbers translated
+from OPLSAA into LAMMPS.)
+
+----------- CREDIT -----------
+
+If you use these tools and you publish a paper using OPLSAA, please also cite
+the TINKER program. (Because these examples use the "oplsaa.prm" file which
+is distributed with TINKER.) I think these are the relevant citations:
+
+1) Ponder, J. W., & Richards, F. M. (1987). "An efficient newton‐like method for molecular mechanics energy minimization of large molecules. Journal of Computational Chemistry", 8(7), 1016-1024.
+
+2) Ponder, J. W, (2004) "TINKER: Software tools for molecular design", http://dasher.wustl.edu/tinker/
+
+-------------------------------
+
+Jason Lambert and Andrew Jewett
+April, 2014
+
+Please email bugs to jewett.aij@gmail.com and jlamber9@gmail.com
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/README.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/README.TXT
new file mode 100644
index 000000000..2fc1ea29e
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/README.TXT
@@ -0,0 +1,16 @@
+MOST USERS SHOULD IGNORE THIS DIRECTORY.
+
+This directory contains versions of the oplsaa_subset.prm file
+which nearly all of the OPLSAA force-field information removed.
+However for the "ethylene+benzene" example, all of the essential
+parameters are contained in these files. You can use oplsaa_moltemplate.py
+with either of these files and the physics should be the same.
+
+However there is no reason to do this.
+When you download the "oplsaa.prm" file from:
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+(also http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm)
+...just remove the lines beginning with "atom" for atoms you don't need.
+You don't have to delete all the other irrelevant interactions.
+(In fact, it is hard to do that without making a mistake.
+ I recommend that you leave the rest of the oplsaa.prm file alone.)
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_minimal.prm b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_minimal.prm
new file mode 100644
index 000000000..b4078f121
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_minimal.prm
@@ -0,0 +1,37 @@
+ #############################
+ ## Atom Type Definitions ##
+ #############################
+
+
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+atom 90 48 CA "Aromatic C" 6 12.011 3
+atom 91 49 HA "Aromatic H-C" 1 1.008 1
+
+vdw 88 3.5500 0.0760
+vdw 89 2.4200 0.0300
+vdw 90 3.5500 0.0700
+vdw 91 2.4200 0.0300
+
+bond 46 47 340.00 1.0800
+bond 47 47 549.00 1.3400
+bond 48 48 469.00 1.4000
+bond 48 49 367.00 1.0800
+
+angle 46 47 46 35.00 117.00
+angle 46 47 47 35.00 120.00
+angle 48 48 48 63.00 120.00
+angle 48 48 49 35.00 120.00
+
+torsion 46 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+
+imptors 0 0 47 0 30.000 180.0 2
+imptors 0 0 48 0 5.000 180.0 2
+
+charge 88 -0.2300
+charge 89 0.1150
+charge 90 -0.1150
+charge 91 0.1150
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_simplified.prm b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_simplified.prm
new file mode 100644
index 000000000..6dbc6861a
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_simplified.prm
@@ -0,0 +1,49 @@
+ #############################
+ ## Atom Type Definitions ##
+ #############################
+
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+atom 90 48 CA "Aromatic C" 6 12.011 3
+atom 91 49 HA "Aromatic H-C" 1 1.008 1
+
+vdw 88 3.5500 0.0760
+vdw 89 2.4200 0.0300
+vdw 90 3.5500 0.0700
+vdw 91 2.4200 0.0300
+
+bond 46 47 340.00 1.0800
+bond 47 47 549.00 1.3400
+bond 47 48 427.00 1.4330
+bond 48 48 469.00 1.4000
+bond 48 49 367.00 1.0800
+
+angle 46 47 46 35.00 117.00
+angle 46 47 47 35.00 120.00
+angle 46 47 48 35.00 123.30
+angle 47 47 48 85.00 117.00
+angle 48 48 48 63.00 120.00
+angle 47 48 48 70.00 124.00
+angle 48 48 49 35.00 120.00
+
+imptors 0 0 47 0 30.000 180.0 2
+imptors 0 0 48 0 5.000 180.0 2
+
+torsion 47 46 47 46 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 0 47 47 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 48 48 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 47 48 48 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 0 48 48 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 47 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+
+charge 88 -0.2300
+charge 89 0.1150
+charge 90 -0.1150
+charge 91 0.1150
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py
new file mode 100755
index 000000000..49cef1aff
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py
@@ -0,0 +1,386 @@
+#! /usr/bin/env python
+#The purpose of this script is to create a moltemplate lt file for the opls-aa forcefield.
+#This will assist researchers in building complex simulations using this OPLS-UA and the OPLS-AA forcefields.
+__author__="Jason Lambert"
+__version__="0.15"
+
+import sys
+import os
+from operator import itemgetter
+
+print("""
+
+Warning:
+ Run this program on a SUBSET of the OPLS atoms which are relevant
+ to your problem. If not, this program (and moltemplate) may crash
+ your computer and/or generate enormous files that you do not need.
+""")
+# To do that, first make a copy of the \"oplsaa.prm\" file
+# (which can be downloaded from the TINKER web site).
+# The lines in this file beginning with the word \"atoms\" should
+# define the atoms which you plan to put in your simulation. All other
+# lines beginning with the word \"atoms\" should be deleted.
+# (Leave the other sections of this file alone.)
+#""")
+
+
+
+#input data from file containing opls aa force field parameters.
+try:
+ f=open(sys.argv[1],"r")
+except:
+ print("need to specify file name as an input argument:")
+ print("python oplsaa_moltemplate.py <forcefield file name>")
+ print("or file name is specified incorrectly")
+ sys.exit()
+#output lt file
+g=open("oplsaa.lt","w")
+
+
+
+lines = f.readlines()
+
+
+
+# Ignore/Comment out lines before the "## Atom Type Definitions ##" section.
+
+for i in range(0, len(lines)):
+ if (lines[i].find("## Atom Type Definitions ##") != -1):
+ break
+ else:
+ lines[i] = '# ' + lines[i]
+
+
+# As of 2014-4-19, there appear to be 906 atom types, but we don't assume this.
+# First try to infer out how many atom types there were in the original
+# oplsaa.prm file, or at least find an upper bound on the atom-type numbers.
+# (Keep track of the maximum value of the first column in the "atom" section.)
+max_atomType = 0
+for line in lines:
+ # skip over text after a # comment character
+ ic = line.find('#')
+ if ic != -1:
+ line = (line[:ic]).strip()
+ else:
+ line = line.strip()
+ # now look for lines beginning with the word "atom"
+ tokens = line.split()
+ if ((len(tokens)>2) and
+ (tokens[0] == "atom") and
+ (int(tokens[1]) > max_atomType)):
+ max_atomType = int(tokens[1])
+
+
+#temporary storage file
+h=open("temp.txt","w+")
+atom_lookup={} #this dictionary contains all the atom ffid's as a key and the number of atoms with that key
+#atom=[[10000,10000] for i in range(906)] <- don't assume there are 906 atoms
+atom=[[-10000,-10000] for i in range(0,max_atomType+1)]
+#charge_by_type={} # lookup charge by atom type
+#vdw_by_type={} # lookup epsilon & sigma paramters by atom type
+charge_by_type=[0.0 for i in range(0,max_atomType+1)] # lookup charge by atom
+vdw_by_type=[(0.0,0.0) for i in range(0,max_atomType+1)] # lookup epsilon & sigma
+
+
+
+#atom is declared this way so for sorting purposes.
+#atom contains the following data upon allocation
+#atom[][0]=atom_id( Important for partial charges and non_bonded interactions)
+#atom[][1]=atom_ffid( Important for stretches, bending, torsions and impropers)
+#atom[][2]=atom_mass
+#atom[][3]=partial charge
+#atom[][4]=non_bonding sigma
+#atom[][5]=non_bonding epsilon
+#atom[][6]=atom comment
+bond=[]
+#bond contains the following data
+#bond[0]=atom 1 ffid
+#bond[1]=atom 2 ffid
+#bond[2]=bond spring constant(OPLS-aa compatible)
+#bond[3]=equilibrium bond distance(Angstrom)
+angle=[]
+#angle contains the following data
+#angle[0]=atom 1 ffid
+#angle[1]=atom 2 ffid
+#angle[2]=atom 3 ffid
+#angle[3]=spring constant
+#angle[4]=equilibrium angle (degrees)
+dihedral=[]
+#dihedral contains the following data
+#dihedral[0]=atom 1 ffid
+#dihedral[1]=atom 2 ffid
+#dihedral[2]=atom 3 ffid
+#dihedral[3]=atom 4 ffid
+#dihedral[4]=v1
+#dihedral[5]=v2
+#dihedral[6]=v3
+#dihedral[7]=v4
+improper=[]
+#improper[0]=atom 1 ffid
+#improper[1]=atom 2 ffid(central atom)
+#improper[2]=atom 3 ffid
+#improper[3]=atom 4 ffid
+#improper[4]=spring coefficient
+#improper[5]=equilibrium angle
+
+
+#This section gets all the parameters from the force field file
+for line in lines:
+
+ # skip over text after a # comment character
+ ic = line.find('#')
+ if ic != -1:
+ line = (line[:ic]).strip()
+ else:
+ line = line.strip()
+
+ if line.find("atom") == 0:
+ line=line.split()
+ atom[int(line[1])-1]=[int(line[1]),int(line[2]),float(line[-2]),
+ 0.0,0.0,0.0," ".join(line[3:-2])]
+ elif line.find("vdw") == 0:
+ line=line.split()
+ #vdw_temp.append([float(line[1]),float(line[2]),float(line[3])])
+ if (int(line[1]) <= max_atomType):
+ vdw_by_type[int(line[1])] = (float(line[2]),float(line[3]))
+ elif line.find("bond") == 0:
+ line=line.split()
+ bond.append([int(line[1]),int(line[2]),float(line[3]),float(line[4])])
+ elif line.find("angle") == 0:
+ line=line.split()
+ angle.append([int(line[1]),int(line[2]),int(line[3]),
+ float(line[4]),float(line[5])])
+ elif line.find("torsion") == 0:
+ line=line.split()
+ dihedral.append([int(line[1]),int(line[2]),int(line[3]),int(line[4]),
+ float(line[5]),float(line[8]), float(line[11]), 0.0])
+ elif line.find("charge") == 0:
+ line=line.split()
+ #charge_temp.append([int(line[1]),float(line[2])])
+ if (int(line[1]) <= max_atomType):
+ charge_by_type[int(line[1])] = float(line[2])
+ elif line.find("imptors") == 0:
+ line=line.split()
+ improper.append([int(line[1]), int(line[2]),
+ int(line[3]), int(line[4]), float(line[5]), float(line[6])])
+
+if len(atom) > 600:
+ sys.stderr.write("WARNING: The number of atom types in your file exceeds 600\n"
+ " (You were supposed to edit out the atoms you don't need.\n"
+ " Not doing this may crash your computer.)\n"
+ "\n"
+ " Proceed? (Y/N): ")
+ reply = sys.stdin.readline()
+ if find(reply.strip().lower(), 'y') != 0:
+ exit(0)
+
+#adding the charge and Lennard Jones parameters to
+#to each atom type.
+#----------------------------------------------#
+for i in range(0,len(atom)):
+ atom_type_num = atom[i][0]
+ #q = charge_by_type.get(atomTypeNum)
+ #if q:
+ # atom[i][3] = q
+ if atom_type_num != -10000:
+ q = charge_by_type[atom_type_num]
+ atom[i][3] = q
+
+for i in range(0,len(atom)):
+ atom_type_num = atom[i][0]
+ #vdw_params = vdw_by_type.get(atomTypeNum)
+ #if vdw_params:
+ # atom[i][4] = vdw_params[0]
+ # atom[i][5] = vdw_params[1]
+ if atom_type_num != -10000:
+ vdw_params = vdw_by_type[atom_type_num]
+ atom[i][4] = vdw_params[0]
+ atom[i][5] = vdw_params[1]
+
+del(charge_by_type)
+del(vdw_by_type)
+
+#----------------------------------------------------------#
+#begin writing content to lt file
+g.write("OPLSAA {\n\n" )
+
+#write out the atom masses
+#----------------------------------------------------------#
+g.write(" write_once(\"Data Masses\"){\n")#checked with gaff
+for i,x in enumerate(atom):
+ if x[0] != -10000:
+ g.write(" @atom:{} {} #{} partial charge={}\n".format(
+ x[0],x[2],x[6],x[3]))
+g.write(" } #(end of atom masses)\n\n")
+#----------------------------------------------------------#
+
+
+#write out the pair coefficients
+#----------------------------------------------------------#
+g.write(" write_once(\"In Settings\"){\n")#checked with gaff
+for i,x in enumerate(atom):
+ if x[0] != -10000:
+ g.write(" pair_coeff @atom:{0} @atom:{0} lj/cut/coul/long {1} {2}\n".format(x[0],x[5],x[4]))
+g.write(" } #(end of pair coeffs)\n\n")
+
+g.write(" write_once(\"In Charges\"){\n")#checked with gaff
+for i,x in enumerate(atom):
+ if x[0] != -10000:
+ g.write(" set type @atom:{0} charge {1}\n".format(x[0],x[3]))
+g.write(" } #(end of atom charges)\n\n")
+
+#-----------------------------------------------------------#
+
+# This part of the code creates a lookup dictionary
+# that allows you to find every type of atom by its
+# force field id. force field id is the id number
+# relevant to bonds, angles, dihedrals, and impropers.
+# This greatly increases the speed of angle, bond, dihedral
+# and improper assignment.
+#------------------------------------------------------------#
+atom=sorted(atom,key=itemgetter(1))
+atom_ffid=0
+for x in atom:
+ if x[1]==atom_ffid:
+ atom_lookup[x[1]].append(x[0])
+ elif x[1]>atom_ffid:
+ atom_lookup[x[1]]=[x[0]]
+ atom_ffid=x[1]
+atom_lookup[0]=["*"]
+#-------------------------------------------------------------#
+
+
+#writing out the bond coefficients and bond parameters#
+#-------------------------------------------------------------#
+g.write(" write_once(\"In Settings\") {\n")
+index1=0
+for x in bond:
+ for y in atom_lookup.get(x[0],[]):
+ for z in atom_lookup.get(x[1],[]):
+ g.write(" bond_coeff @bond:{}-{} harmonic {} {}\n".format(y,z,x[2]/2,x[3]))
+ h.write(" @bond:{0}-{1} @atom:{0} @atom:{1}\n".format(y,z))
+g.write(" } #(end of bond_coeffs)\n\n")
+h.seek(0,0)
+g.write(" write_once(\"Data Bonds By Type\") {\n")
+for line in h.readlines():
+ g.write(line)
+g.write(" } #(end of bonds by type)\n\n")
+del(bond)
+h.close()
+#-----------------------------------------------------------#
+h=open("temp.txt","w+")
+
+#writing out angle coefficients and angles by type.---------#
+#-----------------------------------------------------------#
+g.write(" write_once(\"Data Angles By Type\"){\n")
+for x in angle:
+ for y in atom_lookup.get(x[0],[]):
+ for z in atom_lookup.get(x[1],[]):
+ for u in atom_lookup.get(x[2],[]):
+ #print(y,z,u,x)
+ h.write(" angle_coeff @angle:{}-{}-{} harmonic {} {}\n".format(y,z,u,
+ x[3]/2.0,x[4]))
+ g.write(" @angle:{0}-{1}-{2} @atom:{0} @atom:{1} @atom:{2}\n".format(
+ y,z,u))
+
+
+g.write(" } #(end of angles by type)\n\n")
+h.seek(0,0)
+g.write(" write_once(\"In Settings\" ){\n")
+for line in h.readlines():
+ g.write(line)
+g.write(" } #(end of angle_coeffs)\n\n")
+del(angle)
+h.close()
+#----------------------------------------------------------#
+
+#writing dihedrals by type and dihedral coefficients-------#
+h=h=open("temp.txt","w+")
+g.write(" write_once(\"Data Dihedrals By Type\") {\n")
+#print(atom_lookup)
+for x in dihedral:
+ for y in atom_lookup.get(x[0],[]):
+ for z in atom_lookup.get(x[1],[]):
+ for u in atom_lookup.get(x[2],[]):
+ for v in atom_lookup.get(x[3],[]):
+ if x[0]!=0 and x[3]!=0:
+ g.write(" @dihedral:{0}-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ y,z,u,v))
+ h.write(" dihedral_coeff @dihedral:{}-{}-{}-{} opls {} {} {} {}\n".format(
+ y,z,u,v,x[4],x[5],x[6],x[7]))
+ elif x[0]==0 and x[3]!=0:
+ g.write(" @dihedral:0-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ y,z,u,v))
+ h.write(" dihedral_coeff @dihedral:0-{}-{}-{} opls {} {} {} {}\n".format(
+ z,u,v,x[4],x[5],x[6],x[7]))
+ elif x[0]==0 and x[3]==0:
+ g.write(" @dihedral:0-{1}-{2}-0 @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ y,z,u,v))
+ #h.write(" dihedral_coeff @dihedral:0-{}-{}-0 harmonic {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:0-{}-{}-0 opls {} {} {} {}\n".format(
+ z,u,x[4],x[5],x[6],x[7]))
+
+del(dihedral)
+g.write(" } #(end of Dihedrals by type)\n\n")
+h.seek(0,0)
+g.write(" write_once(\"In Settings\") {\n")
+for line in h.readlines():
+ g.write(line)
+g.write(" } #(end of dihedral_coeffs)\n\n")
+h.close()
+#-----------------------------------------------------------------------#
+
+#----writing out improper coefficients and impropers by type------------#
+h=open("temp.txt","w+")
+g.write(" write_once(\"Data Impropers By Type\") {\n")
+for x in improper:
+ for y in atom_lookup.get(x[0],[]):
+ for z in atom_lookup.get(x[1],[]):
+ for u in atom_lookup.get(x[2],[]):
+ for v in atom_lookup.get(x[3],[]):
+ if x[0]==0 and x[1]==0 and x[3]==0:
+ g.write(" @improper:{2}-0-0-0 @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
+ y,z,u,v))
+ h.write(" improper_coeff @improper:{2}-0-0-0 harmonic {4} {5} \n".format(
+ y,z,u,v,x[4]/2,0))
+ else:
+ g.write(" @improper:{2}-0-0-{3} @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
+ y,z,u,v))
+ h.write(" improper_coeff @improper:{2}-0-0-{3} harmonic {4} {5} \n".format(
+ y,z,u,v,x[4]/2,0))
+
+
+g.write(" } #(end of impropers by type)\n\n")
+h.seek(0,0)
+g.write(" write_once(\"In Settings\") {\n")
+for line in h.readlines():
+ g.write(line)
+g.write(" } #(end of improp_coeffs)\n\n")
+#-----------------------------------------------------------------------#
+
+#This section writes out the input parameters required for an opls-aa simulation
+# lammps.
+g.write(" write_once(\"In Init\") {\n")
+g.write(" units real\n")
+g.write(" atom_style full\n")
+g.write(" bond_style hybrid harmonic\n")
+g.write(" angle_style hybrid harmonic\n")
+g.write(" dihedral_style hybrid opls\n")
+g.write(" improper_style hybrid harmonic\n")
+#g.write(" pair_style hybrid lj/cut/coul/cut 10.0 10.0\n")
+g.write(" pair_style hybrid lj/cut/coul/long 10.0 10.0\n")
+g.write(" pair_modify mix arithmetic\n")
+g.write(" special_bonds lj 0.0 0.0 0.5\n")
+g.write(" kspace_style pppm 0.0001\n")
+g.write(" } #end of init parameters\n\n")
+g.write("} # OPLSAA\n")
+f.close()
+g.close()
+h.close()
+os.remove("temp.txt")
+
+
+
+
+
+
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.prm b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.prm
new file mode 100644
index 000000000..f226e5595
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.prm
@@ -0,0 +1,5127 @@
+# This is a modified version of the file "oplsaa.prm" distributed with TINKER
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+# In this version, all of the lines beginning with "atom" have been deleted
+# except for the atom types we will be using in this simulation
+#
+# If you use this file, please also cite the software this file comes from:
+#
+# Ponder, J. W., and Richards, F. M. J. Comput. Chem. (1987) 8(7), 1016-1024
+# "An efficient newton‐like method for molecular mechanics energy
+# minimization of large molecules."
+#
+# Ponder, J. W, (2004)
+# "TINKER: Software tools for molecular design"
+# http://dasher.wustl.edu/tinker/
+
+ ##############################
+ ## ##
+ ## Force Field Definition ##
+ ## ##
+ ##############################
+
+
+forcefield OPLS-AA
+
+vdwindex TYPE
+vdwtype LENNARD-JONES
+radiusrule GEOMETRIC
+radiustype SIGMA
+radiussize DIAMETER
+epsilonrule GEOMETRIC
+torsionunit 0.5
+imptorunit 0.5
+vdw-14-scale 2.0
+chg-14-scale 2.0
+electric 332.06
+dielectric 1.0
+
+
+ #############################
+ ## ##
+ ## Literature References ##
+ ## ##
+ #############################
+
+
+The parameters supplied with TINKER are from "OPLS All-Atom Parameters
+for Organic Molecules, Ions, Peptides & Nucleic Acids, July 2008" as
+provided by W. L. Jorgensen, Yale University during June 2009. These
+parameters are taken from those distributed with BOSS Version 4.8.
+
+Note that "atom type" numbers and not "atom class" numbers are used
+to index van der Waals parameters, see the "vdwindex" keyword above
+
+The atom types with (UA) in the description are "united atom" values,
+ie, OPLS-UA, where any nonpolar hydrogen atoms are combined onto their
+attached atoms. All other parameters are "all-atom", OPLS-AA, including
+explicit hydrogen atoms.
+
+
+ #############################
+ ## ##
+ ## Atom Type Definitions ##
+ ## ##
+ #############################
+
+
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+atom 90 48 CA "Aromatic C" 6 12.011 3
+atom 91 49 HA "Aromatic H-C" 1 1.008 1
+
+
+ ################################
+ ## ##
+ ## Van der Waals Parameters ##
+ ## ##
+ ################################
+
+
+vdw 1 2.9400 0.0610
+vdw 2 3.9050 0.1180
+vdw 3 3.7500 0.1050
+vdw 4 2.9600 0.2100
+vdw 5 3.0000 0.1700
+vdw 6 3.9100 0.1600
+vdw 7 0.0000 0.0000
+vdw 8 3.7300 0.2940
+vdw 9 3.7750 0.2070
+vdw 10 3.9050 0.1750
+vdw 11 3.9100 0.1600
+vdw 12 3.9600 0.1450
+vdw 13 3.9050 0.1180
+vdw 14 3.8500 0.1400
+vdw 15 3.8500 0.0800
+vdw 16 3.8000 0.1150
+vdw 17 3.7500 0.1100
+vdw 18 3.8000 0.0500
+vdw 19 3.7500 0.1050
+vdw 20 3.0700 0.1700
+vdw 21 0.0000 0.0000
+vdw 22 3.7750 0.2070
+vdw 23 3.9050 0.1180
+vdw 24 3.7000 0.2500
+vdw 25 3.5500 0.2500
+vdw 26 3.5500 0.2500
+vdw 27 3.5500 0.2500
+vdw 28 0.0000 0.0000
+vdw 29 0.0000 0.0000
+vdw 30 3.7750 0.2070
+vdw 31 3.9050 0.1180
+vdw 32 3.8000 0.1700
+vdw 33 3.8000 0.1180
+vdw 34 3.8000 0.1700
+vdw 35 3.8000 0.1180
+vdw 36 3.2000 0.1700
+vdw 37 3.6500 0.1500
+vdw 38 3.7750 0.2070
+vdw 39 3.8500 0.0800
+vdw 40 3.8000 0.0500
+vdw 41 3.0000 0.1700
+vdw 42 3.8000 0.1700
+vdw 43 3.8000 0.1180
+vdw 44 3.8000 0.1180
+vdw 45 3.4000 0.3000
+vdw 46 3.8000 0.0800
+vdw 47 3.4700 0.3000
+vdw 48 3.8000 0.0500
+vdw 49 3.4700 0.2660
+vdw 50 3.5600 0.3950
+vdw 51 2.9300 0.2800
+vdw 52 3.8100 0.1600
+vdw 53 2.9600 0.2100
+vdw 54 3.2500 0.1700
+vdw 55 3.8000 0.1150
+vdw 56 3.8000 0.1700
+vdw 57 0.0000 0.0000
+vdw 58 2.5560 0.0200
+vdw 59 2.7800 0.0690
+vdw 60 3.4010 0.2339
+vdw 61 3.6240 0.3170
+vdw 62 3.9350 0.4330
+vdw 63 3.15061 0.1521
+vdw 64 0.0000 0.0000
+vdw 65 3.15365 0.1550
+vdw 66 0.0000 0.0000
+vdw 67 0.0000 0.0000
+vdw 68 3.1760 0.1500
+vdw 69 0.0000 0.0000
+vdw 70 3.2700 0.1000
+vdw 71 0.0000 0.0000
+vdw 72 0.0000 0.0000
+vdw 73 3.1200 0.1600
+vdw 74 0.0000 0.0000
+vdw 75 0.0000 0.0000
+vdw 76 3.16557 0.1554
+vdw 77 0.0000 0.0000
+vdw 78 3.4200 0.1700
+vdw 79 0.0000 0.0000
+vdw 80 3.5000 0.0660
+vdw 81 3.5000 0.0660
+vdw 82 3.5000 0.0660
+vdw 83 3.5000 0.0660
+vdw 84 3.5000 0.0660
+vdw 85 2.5000 0.0300
+vdw 86 3.5500 0.0760
+vdw 87 3.5500 0.0760
+vdw 88 3.5500 0.0760
+vdw 89 2.4200 0.0300
+vdw 90 3.5500 0.0700
+vdw 91 2.4200 0.0300
+vdw 92 3.5500 0.0700
+vdw 93 3.5000 0.0660
+vdw 94 3.5000 0.0660
+vdw 95 3.5500 0.0760
+vdw 96 3.1200 0.1700
+vdw 97 0.0000 0.0000
+vdw 98 2.5000 0.0300
+vdw 99 3.5000 0.0660
+vdw 100 3.5000 0.0660
+vdw 101 3.5000 0.0660
+vdw 102 3.5000 0.0660
+vdw 103 3.2500 0.0620
+vdw 104 3.0700 0.1700
+vdw 105 0.0000 0.0000
+vdw 106 2.9400 0.0610
+vdw 107 2.5000 0.0300
+vdw 108 3.5500 0.0700
+vdw 109 3.0700 0.1700
+vdw 110 0.0000 0.0000
+vdw 111 3.0700 0.1700
+vdw 112 0.0000 0.0000
+vdw 113 3.0700 0.1700
+vdw 114 0.0000 0.0000
+vdw 115 3.5000 0.0660
+vdw 116 3.5000 0.0660
+vdw 117 3.5000 0.0660
+vdw 118 2.5000 0.0300
+vdw 119 2.9000 0.1400
+vdw 120 3.5500 0.0760
+vdw 121 2.9000 0.1400
+vdw 122 2.9000 0.1400
+vdw 123 3.5000 0.0660
+vdw 124 3.5000 0.0660
+vdw 125 3.5000 0.0660
+vdw 126 3.5000 0.0660
+vdw 127 2.5000 0.0300
+vdw 128 2.9000 0.1400
+vdw 129 3.0700 0.1700
+vdw 130 0.0000 0.0000
+vdw 131 3.5000 0.0660
+vdw 132 2.5000 0.0300
+vdw 133 3.5000 0.0660
+vdw 134 2.5000 0.0300
+vdw 135 3.5000 0.0660
+vdw 136 2.5000 0.0300
+vdw 137 3.5000 0.0660
+vdw 138 2.5000 0.0300
+vdw 139 3.5000 0.0660
+vdw 140 3.5000 0.0660
+vdw 141 3.5500 0.0700
+vdw 142 3.5500 0.2500
+vdw 143 3.7000 0.2500
+vdw 144 3.5500 0.2500
+vdw 145 3.5500 0.2500
+vdw 146 0.0000 0.0000
+vdw 147 0.0000 0.0000
+vdw 148 3.5000 0.0660
+vdw 149 3.5000 0.0660
+vdw 150 3.5000 0.0660
+vdw 151 3.5000 0.0660
+vdw 152 3.5000 0.0660
+vdw 153 3.5000 0.0660
+vdw 154 3.5000 0.0660
+vdw 155 3.5000 0.0660
+vdw 156 3.5000 0.0660
+vdw 157 3.5000 0.0660
+vdw 158 3.5000 0.0660
+vdw 159 3.5000 0.0660
+vdw 160 3.5000 0.0660
+vdw 161 3.5000 0.0660
+vdw 162 3.5000 0.0660
+vdw 163 3.5500 0.0700
+vdw 164 3.5500 0.2500
+vdw 165 3.5000 0.0660
+vdw 166 3.5000 0.0660
+vdw 167 3.5000 0.0660
+vdw 168 3.4000 0.3000
+vdw 169 3.5500 0.0760
+vdw 170 3.5500 0.0700
+vdw 171 3.5000 0.0660
+vdw 172 3.5000 0.0660
+vdw 173 3.7500 0.1050
+vdw 174 3.7500 0.1050
+vdw 175 3.7500 0.1050
+vdw 176 3.7500 0.1050
+vdw 177 3.7500 0.1050
+vdw 178 2.9600 0.2100
+vdw 179 3.2500 0.1700
+vdw 180 3.2500 0.1700
+vdw 181 3.2500 0.1700
+vdw 182 0.0000 0.0000
+vdw 183 0.0000 0.0000
+vdw 184 3.5000 0.0660
+vdw 185 3.5000 0.0660
+vdw 186 3.5000 0.0660
+vdw 187 3.5000 0.0660
+vdw 188 3.5000 0.0660
+vdw 189 3.7500 0.1050
+vdw 190 2.9600 0.2100
+vdw 191 3.2500 0.1700
+vdw 192 0.0000 0.0000
+vdw 193 3.2500 0.1700
+vdw 194 3.7500 0.1050
+vdw 195 2.9600 0.2100
+vdw 196 0.0000 0.0000
+vdw 197 2.5000 0.0200
+vdw 198 3.5000 0.0660
+vdw 199 3.5000 0.0660
+vdw 200 3.5000 0.0660
+vdw 201 3.5000 0.0660
+vdw 202 3.5500 0.0700
+vdw 203 3.6500 0.1500
+vdw 204 3.2000 0.1700
+vdw 205 3.5500 0.0700
+vdw 206 3.4000 0.3000
+vdw 207 3.2500 0.1700
+vdw 208 3.5500 0.0700
+vdw 209 3.7500 0.1050
+vdw 210 2.9600 0.2100
+vdw 211 3.0000 0.1700
+vdw 212 0.0000 0.0000
+vdw 213 3.7500 0.1050
+vdw 214 2.9600 0.2100
+vdw 215 3.5000 0.0660
+vdw 216 3.5000 0.0660
+vdw 217 3.5000 0.0660
+vdw 218 3.5000 0.0660
+vdw 219 3.7500 0.1050
+vdw 220 2.9600 0.2100
+vdw 221 2.4200 0.0150
+vdw 222 3.7500 0.1050
+vdw 223 2.9600 0.2100
+vdw 224 2.4200 0.0150
+vdw 225 3.5000 0.0660
+vdw 226 3.5000 0.0660
+vdw 227 3.5000 0.0660
+vdw 228 3.5000 0.0660
+vdw 229 3.2500 0.1700
+vdw 230 3.2500 0.1700
+vdw 231 3.2500 0.1700
+vdw 232 0.0000 0.0000
+vdw 233 0.0000 0.0000
+vdw 234 3.5000 0.0660
+vdw 235 3.5000 0.0660
+vdw 236 3.5000 0.0660
+vdw 237 3.5000 0.0660
+vdw 238 3.5000 0.0660
+vdw 239 3.5000 0.0660
+vdw 240 3.5000 0.0660
+vdw 241 3.5000 0.0660
+vdw 242 3.5000 0.0660
+vdw 243 3.2500 0.1700
+vdw 244 0.0000 0.0000
+vdw 245 3.5500 0.0500
+vdw 246 3.2500 0.1700
+vdw 247 0.0000 0.0000
+vdw 248 3.5000 0.0660
+vdw 249 3.5000 0.0660
+vdw 250 3.5000 0.0660
+vdw 251 3.5000 0.0660
+vdw 252 3.2500 0.1700
+vdw 253 0.0000 0.0000
+vdw 254 3.2500 0.1700
+vdw 255 3.5000 0.0800
+vdw 256 3.2500 0.1700
+vdw 257 0.0000 0.0000
+vdw 258 3.5000 0.0800
+vdw 259 2.5000 0.0500
+vdw 260 3.5000 0.0800
+vdw 261 2.5000 0.0500
+vdw 262 3.2500 0.1700
+vdw 263 3.7500 0.1050
+vdw 264 3.2500 0.1700
+vdw 265 3.7500 0.1050
+vdw 266 3.5000 0.0800
+vdw 267 3.5000 0.0800
+vdw 268 0.0000 0.0000
+vdw 269 2.9600 0.2100
+vdw 270 0.0000 0.0000
+vdw 271 2.9600 0.2100
+vdw 272 2.5000 0.0500
+vdw 273 2.5000 0.0500
+vdw 274 3.5000 0.0800
+vdw 275 2.5000 0.0500
+vdw 276 3.2500 0.1700
+vdw 277 3.7500 0.1050
+vdw 278 3.2500 0.1700
+vdw 279 3.5000 0.0800
+vdw 280 3.5000 0.0800
+vdw 281 3.5000 0.0800
+vdw 282 0.0000 0.0000
+vdw 283 2.9600 0.2100
+vdw 284 3.2500 0.1700
+vdw 285 0.0000 0.0000
+vdw 286 0.0000 0.0000
+vdw 287 2.5000 0.0500
+vdw 288 2.5000 0.0500
+vdw 289 3.2500 0.1700
+vdw 290 3.5000 0.0800
+vdw 291 3.2500 0.1700
+vdw 292 3.5000 0.0800
+vdw 293 3.5000 0.0800
+vdw 294 3.5000 0.0800
+vdw 295 3.2500 0.1700
+vdw 296 3.5000 0.0800
+vdw 297 3.2500 0.1700
+vdw 298 2.5000 0.0500
+vdw 299 3.2500 0.1700
+vdw 300 0.0000 0.0000
+vdw 301 0.0000 0.0000
+vdw 302 2.5000 0.0500
+vdw 303 0.0000 0.0000
+vdw 304 3.2500 0.1700
+vdw 305 3.5000 0.0800
+vdw 306 3.2500 0.1700
+vdw 307 3.5000 0.0800
+vdw 308 3.5000 0.0800
+vdw 309 3.7500 0.1050
+vdw 310 0.0000 0.0000
+vdw 311 3.2500 0.1700
+vdw 312 0.0000 0.0000
+vdw 313 2.9600 0.2100
+vdw 314 3.5000 0.0800
+vdw 315 2.5000 0.0500
+vdw 316 3.5000 0.0800
+vdw 317 2.5000 0.0500
+vdw 318 3.5000 0.0800
+vdw 319 2.5000 0.0500
+vdw 320 3.2500 0.1700
+vdw 321 3.7500 0.1050
+vdw 322 3.2500 0.1700
+vdw 323 3.5000 0.0800
+vdw 324 3.5000 0.0800
+vdw 325 3.5000 0.0800
+vdw 326 0.0000 0.0000
+vdw 327 2.9600 0.2100
+vdw 328 0.0000 0.0000
+vdw 329 3.2500 0.1700
+vdw 330 0.0000 0.0000
+vdw 331 0.0000 0.0000
+vdw 332 2.5000 0.0500
+vdw 333 2.5000 0.0500
+vdw 334 3.5000 0.0800
+vdw 335 2.5000 0.0500
+vdw 336 3.7400 0.2000
+vdw 337 2.9600 0.2100
+vdw 338 3.0000 0.1700
+vdw 339 3.5500 0.0660
+vdw 340 3.5000 0.0800
+vdw 341 3.4000 0.3000
+vdw 342 3.5500 0.0760
+vdw 343 3.0500 0.7100
+vdw 344 4.0200 0.7100
+vdw 345 4.2800 0.7100
+vdw 346 4.8100 0.7100
+vdw 347 5.3400 0.0005
+vdw 348 2.8700 0.0005
+vdw 349 4.0700 0.0005
+vdw 350 5.1700 0.0005
+vdw 351 5.6000 0.0005
+vdw 352 6.2000 0.0005
+vdw 353 1.644471 0.875044
+vdw 354 2.412031 0.449657
+vdw 355 3.102688 0.118226
+vdw 356 3.816610 0.047096
+vdw 357 4.2000 0.3000
+vdw 358 2.5000 0.0500
+vdw 359 4.2500 0.5000
+vdw 360 4.2000 0.3000
+vdw 361 2.5000 0.0500
+vdw 362 3.1500 0.2500
+vdw 363 4.2000 0.3000
+vdw 364 2.5000 0.0500
+vdw 365 3.6500 0.1500
+vdw 366 3.4000 0.2500
+vdw 367 4.2000 0.3000
+vdw 368 2.5000 0.0500
+vdw 369 3.4000 0.2500
+vdw 370 2.5000 0.0500
+vdw 371 4.2000 0.3000
+vdw 372 2.5000 0.0500
+vdw 373 4.2000 0.3000
+vdw 374 2.5000 0.0500
+vdw 375 0.0000 0.0000
+vdw 376 3.2000 0.2500
+vdw 377 0.0000 0.0000
+vdw 378 2.81524 0.4000
+vdw 379 3.11815 0.2000
+vdw 380 2.9000 0.1400
+vdw 381 3.7400 0.2000
+vdw 382 3.1500 0.2000
+vdw 383 2.9000 0.1400
+vdw 384 3.5000 0.0660
+vdw 385 2.5000 0.0300
+vdw 386 3.7400 0.2000
+vdw 387 3.1500 0.2000
+vdw 388 2.9000 0.1400
+vdw 389 3.5000 0.0660
+vdw 390 2.5000 0.0300
+vdw 391 3.7400 0.2000
+vdw 392 3.1500 0.2000
+vdw 393 2.9000 0.1400
+vdw 394 3.5000 0.0660
+vdw 395 2.5000 0.0300
+vdw 396 3.5000 0.0660
+vdw 397 2.5000 0.0300
+vdw 398 3.5500 0.0700
+vdw 399 3.5000 0.0660
+vdw 400 2.5000 0.0300
+vdw 401 3.5500 0.0700
+vdw 402 3.5000 0.0660
+vdw 403 2.5000 0.0300
+vdw 404 3.5500 0.0700
+vdw 405 3.5000 0.0660
+vdw 406 3.7500 0.1050
+vdw 407 2.9600 0.2100
+vdw 408 3.0000 0.1700
+vdw 409 3.5000 0.0660
+vdw 410 2.4200 0.0150
+vdw 411 3.7500 0.1050
+vdw 412 3.7500 0.1050
+vdw 413 3.5500 0.0700
+vdw 414 3.0000 0.1700
+vdw 415 3.5500 0.2500
+vdw 416 2.9600 0.1700
+vdw 417 3.5000 0.0660
+vdw 418 2.5000 0.0300
+vdw 419 3.2500 0.1700
+vdw 420 0.0000 0.0000
+vdw 421 3.2500 0.1700
+vdw 422 0.0000 0.0000
+vdw 423 3.5000 0.0660
+vdw 424 2.5000 0.0300
+vdw 425 3.5000 0.0660
+vdw 426 2.5000 0.0300
+vdw 427 3.5000 0.0660
+vdw 428 2.5000 0.0300
+vdw 429 3.5500 0.0700
+vdw 430 3.5500 0.0700
+vdw 431 3.5000 0.0660
+vdw 432 3.5000 0.0660
+vdw 433 3.5000 0.0660
+vdw 434 3.5500 0.2500
+vdw 435 2.9600 0.1700
+vdw 436 3.5600 0.3950
+vdw 437 3.5600 0.3950
+vdw 438 2.9300 0.2800
+vdw 439 3.5000 0.0660
+vdw 440 3.5000 0.0660
+vdw 441 3.5500 0.0700
+vdw 442 3.5500 0.0700
+vdw 443 3.5500 0.0700
+vdw 444 3.2500 0.1700
+vdw 445 0.0000 0.0000
+vdw 446 3.5000 0.0660
+vdw 447 3.5500 0.0700
+vdw 448 3.5500 0.0700
+vdw 449 3.5500 0.0700
+vdw 450 3.5500 0.0700
+vdw 451 3.5500 0.0700
+vdw 452 3.2500 0.1700
+vdw 453 3.2500 0.1700
+vdw 454 0.0000 0.0000
+vdw 455 3.5500 0.0700
+vdw 456 3.5000 0.0660
+vdw 457 3.5000 0.0660
+vdw 458 3.5500 0.0760
+vdw 459 3.5500 0.0760
+vdw 460 3.5500 0.0700
+vdw 461 3.2500 0.1700
+vdw 462 3.5500 0.0700
+vdw 463 3.5500 0.0700
+vdw 464 3.5500 0.0700
+vdw 465 2.4200 0.0300
+vdw 466 2.4200 0.0300
+vdw 467 2.4200 0.0300
+vdw 468 3.2500 0.1700
+vdw 469 3.5500 0.0700
+vdw 470 2.4200 0.0300
+vdw 471 3.2500 0.1700
+vdw 472 3.5500 0.0700
+vdw 473 3.5500 0.0700
+vdw 474 3.5500 0.0700
+vdw 475 2.4200 0.0300
+vdw 476 2.4200 0.0300
+vdw 477 2.4200 0.0300
+vdw 478 3.2500 0.1700
+vdw 479 3.5500 0.0700
+vdw 480 3.5500 0.0700
+vdw 481 2.4200 0.0300
+vdw 482 2.4200 0.0300
+vdw 483 3.2500 0.1700
+vdw 484 3.5500 0.0700
+vdw 485 3.5500 0.0700
+vdw 486 0.0000 0.0000
+vdw 487 2.4200 0.0300
+vdw 488 2.4200 0.0300
+vdw 489 3.2500 0.1700
+vdw 490 3.2500 0.1700
+vdw 491 3.5500 0.0700
+vdw 492 3.5500 0.0700
+vdw 493 3.5500 0.0700
+vdw 494 0.0000 0.0000
+vdw 495 2.4200 0.0300
+vdw 496 2.4200 0.0300
+vdw 497 2.4200 0.0300
+vdw 498 3.2500 0.1700
+vdw 499 3.5500 0.0700
+vdw 500 3.2500 0.1700
+vdw 501 3.5500 0.0700
+vdw 502 3.5500 0.0700
+vdw 503 0.0000 0.0000
+vdw 504 2.4200 0.0300
+vdw 505 2.4200 0.0300
+vdw 506 2.4200 0.0300
+vdw 507 2.9000 0.1400
+vdw 508 3.5500 0.0700
+vdw 509 3.5500 0.0760
+vdw 510 2.4200 0.0300
+vdw 511 2.4200 0.0300
+vdw 512 2.9000 0.1400
+vdw 513 3.5500 0.0700
+vdw 514 3.2500 0.1700
+vdw 515 3.5500 0.0700
+vdw 516 3.5500 0.0700
+vdw 517 2.4200 0.0300
+vdw 518 2.4200 0.0300
+vdw 519 2.4200 0.0300
+vdw 520 2.9000 0.1400
+vdw 521 3.2500 0.1700
+vdw 522 3.5500 0.0700
+vdw 523 3.5500 0.0700
+vdw 524 3.5500 0.0700
+vdw 525 2.4200 0.0300
+vdw 526 2.4200 0.0300
+vdw 527 2.4200 0.0300
+vdw 528 3.2500 0.1700
+vdw 529 3.5500 0.0700
+vdw 530 3.5500 0.0700
+vdw 531 3.5500 0.0700
+vdw 532 3.5500 0.0700
+vdw 533 3.5500 0.0700
+vdw 534 3.5500 0.0700
+vdw 535 3.5500 0.0700
+vdw 536 3.5500 0.0700
+vdw 537 0.0000 0.0000
+vdw 538 2.4200 0.0300
+vdw 539 2.4200 0.0300
+vdw 540 2.4200 0.0300
+vdw 541 2.4200 0.0300
+vdw 542 2.4200 0.0300
+vdw 543 2.4200 0.0300
+vdw 544 3.2500 0.1700
+vdw 545 3.5500 0.0700
+vdw 546 3.5500 0.0700
+vdw 547 3.5500 0.0700
+vdw 548 3.5500 0.0700
+vdw 549 3.5500 0.0700
+vdw 550 3.5500 0.0700
+vdw 551 3.5500 0.0700
+vdw 552 3.5500 0.0700
+vdw 553 3.5500 0.0700
+vdw 554 2.4200 0.0300
+vdw 555 2.4200 0.0300
+vdw 556 2.4200 0.0300
+vdw 557 2.4200 0.0300
+vdw 558 2.4200 0.0300
+vdw 559 2.4200 0.0300
+vdw 560 2.4200 0.0300
+vdw 561 3.2500 0.1700
+vdw 562 3.5500 0.0700
+vdw 563 3.2500 0.1700
+vdw 564 3.5500 0.0700
+vdw 565 3.5500 0.0700
+vdw 566 3.5500 0.0700
+vdw 567 3.2500 0.1700
+vdw 568 3.5500 0.0700
+vdw 569 3.2500 0.1700
+vdw 570 2.4200 0.0300
+vdw 571 2.4200 0.0300
+vdw 572 2.4200 0.0300
+vdw 573 0.0000 0.0000
+vdw 574 3.5500 0.2500
+vdw 575 3.5500 0.0700
+vdw 576 3.2500 0.1700
+vdw 577 3.5500 0.0700
+vdw 578 3.5500 0.0700
+vdw 579 2.4200 0.0300
+vdw 580 2.4200 0.0300
+vdw 581 2.4200 0.0300
+vdw 582 3.2500 0.1700
+vdw 583 3.5500 0.0700
+vdw 584 2.4200 0.0300
+vdw 585 3.5500 0.0700
+vdw 586 3.5000 0.0660
+vdw 587 3.2500 0.1700
+vdw 588 3.5500 0.0700
+vdw 589 3.5500 0.0700
+vdw 590 3.5500 0.0700
+vdw 591 3.5500 0.0700
+vdw 592 3.5500 0.0700
+vdw 593 3.5500 0.0700
+vdw 594 2.4200 0.0300
+vdw 595 2.4200 0.0300
+vdw 596 2.4200 0.0300
+vdw 597 2.4200 0.0300
+vdw 598 3.2500 0.1700
+vdw 599 3.5500 0.0700
+vdw 600 3.2500 0.1700
+vdw 601 3.5500 0.0700
+vdw 602 3.5500 0.0700
+vdw 603 3.5000 0.0660
+vdw 604 2.4200 0.0300
+vdw 605 2.4200 0.0300
+vdw 606 2.4200 0.0300
+vdw 607 2.5000 0.0300
+vdw 608 3.5000 0.0660
+vdw 609 3.5000 0.0660
+vdw 610 3.5000 0.0660
+vdw 611 3.5000 0.0660
+vdw 612 3.5000 0.0660
+vdw 613 3.5000 0.0660
+vdw 614 3.5000 0.0660
+vdw 615 3.5000 0.0660
+vdw 616 3.5000 0.0660
+vdw 617 3.5000 0.0660
+vdw 618 3.5000 0.0660
+vdw 619 3.5000 0.0660
+vdw 620 3.5000 0.0660
+vdw 621 3.5000 0.0660
+vdw 622 3.5000 0.0660
+vdw 623 3.5500 0.2500
+vdw 624 0.0000 0.0000
+vdw 625 3.5500 0.0700
+vdw 626 3.7500 0.1050
+vdw 627 3.2500 0.1700
+vdw 628 3.5000 0.0660
+vdw 629 3.5000 0.0660
+vdw 630 3.5000 0.0660
+vdw 631 3.5500 0.0700
+vdw 632 3.5500 0.0700
+vdw 633 3.5500 0.0700
+vdw 634 3.5500 0.0700
+vdw 635 3.5500 0.0700
+vdw 636 3.5500 0.0700
+vdw 637 3.5500 0.2500
+vdw 638 3.4730 0.0540
+vdw 639 3.3000 0.0500
+vdw 640 3.3000 0.0500
+vdw 641 3.5500 0.0760
+vdw 642 3.5000 0.0660
+vdw 643 2.5000 0.0300
+vdw 644 3.7500 0.0600
+vdw 645 3.4730 0.0540
+vdw 646 3.3000 0.0500
+vdw 647 3.3000 0.0500
+vdw 648 2.9500 0.0400
+vdw 649 3.5500 0.0760
+vdw 650 3.4000 0.3000
+vdw 651 2.4200 0.0300
+vdw 652 3.5000 0.0660
+vdw 653 3.5000 0.0660
+vdw 654 3.5000 0.0660
+vdw 655 3.5500 0.0700
+vdw 656 2.4200 0.0300
+vdw 657 3.5500 0.0700
+vdw 658 2.4200 0.0300
+vdw 659 3.5500 0.0700
+vdw 660 2.8500 0.0610
+vdw 661 3.5500 0.0700
+vdw 662 2.8500 0.0610
+vdw 663 3.4700 0.4700
+vdw 664 3.9050 0.1180
+vdw 665 3.5500 0.0700
+vdw 666 3.2500 0.0620
+vdw 667 2.9400 0.0610
+vdw 668 3.5500 0.0700
+vdw 669 2.8500 0.0610
+vdw 670 3.5500 0.0700
+vdw 671 3.4700 0.4700
+vdw 672 3.5500 0.0700
+vdw 673 3.7500 0.6000
+vdw 674 3.5000 0.0660
+vdw 675 3.5500 0.2500
+vdw 676 3.5500 0.0700
+vdw 677 3.5500 0.0700
+vdw 678 3.5500 0.0700
+vdw 679 3.5500 0.0700
+vdw 680 3.5500 0.0700
+vdw 681 2.4200 0.0300
+vdw 682 2.4200 0.0300
+vdw 683 3.5500 0.0500
+vdw 684 3.2500 0.1700
+vdw 685 0.0000 0.0000
+vdw 686 0.0000 0.0000
+vdw 687 2.4200 0.0300
+vdw 688 3.5000 0.0660
+vdw 689 3.5000 0.0660
+vdw 690 3.2500 0.1700
+vdw 691 3.2500 0.1700
+vdw 692 3.2500 0.1700
+vdw 693 3.5500 0.0500
+vdw 694 3.2000 0.1700
+vdw 695 3.3000 0.0660
+vdw 696 3.3000 0.0660
+vdw 697 3.3000 0.0660
+vdw 698 3.3000 0.0660
+vdw 699 3.3000 0.0660
+vdw 700 2.5000 0.0150
+vdw 701 3.2500 0.1200
+vdw 702 2.9600 0.1700
+vdw 703 3.5000 0.0660
+vdw 704 2.5000 0.0150
+vdw 705 3.5000 0.0660
+vdw 706 3.5000 0.0660
+vdw 707 3.5000 0.0660
+vdw 708 3.2500 0.1200
+vdw 709 3.5500 0.0700
+vdw 710 3.3000 0.0660
+vdw 711 3.2500 0.1700
+vdw 712 2.9600 0.2100
+vdw 713 3.7500 0.1050
+vdw 714 3.0000 0.1700
+vdw 715 3.5000 0.0660
+vdw 716 3.5000 0.0660
+vdw 717 3.5000 0.0660
+vdw 718 2.4200 0.0150
+vdw 719 2.4200 0.0150
+vdw 720 2.4200 0.0150
+vdw 721 2.9000 0.1400
+vdw 722 3.7400 0.2000
+vdw 723 3.5000 0.0660
+vdw 724 3.5000 0.0660
+vdw 725 2.5000 0.0300
+vdw 726 3.7400 0.2000
+vdw 727 3.1181 0.0610
+vdw 728 3.1500 0.1700
+vdw 729 2.8600 0.2100
+vdw 730 3.3000 0.1700
+vdw 731 3.3000 0.1700
+vdw 732 3.3000 0.1700
+vdw 733 3.5000 0.0660
+vdw 734 3.5000 0.0660
+vdw 735 3.5000 0.0660
+vdw 736 3.5000 0.0660
+vdw 737 3.5000 0.0660
+vdw 738 3.5000 0.0660
+vdw 739 0.0000 0.0000
+vdw 740 0.0000 0.0000
+vdw 741 2.5000 0.0150
+vdw 742 3.5000 0.0660
+vdw 743 3.5000 0.0660
+vdw 744 3.5000 0.0660
+vdw 745 3.5000 0.0660
+vdw 746 3.5500 0.0700
+vdw 747 3.5500 0.0700
+vdw 748 3.5500 0.0700
+vdw 749 3.5000 0.0660
+vdw 750 3.5000 0.0660
+vdw 751 3.5000 0.0660
+vdw 752 3.5000 0.0660
+vdw 753 3.5000 0.0660
+vdw 754 3.5000 0.0660
+vdw 755 3.3000 0.0860
+vdw 756 2.4200 0.0150
+vdw 757 3.3000 0.2100
+vdw 758 3.3000 0.1350
+vdw 759 3.3000 0.1000
+vdw 760 2.5000 0.0150
+vdw 761 3.5000 0.0660
+vdw 762 3.5000 0.0660
+vdw 763 3.5000 0.0660
+vdw 764 3.1200 0.1700
+vdw 765 0.0000 0.0000
+vdw 766 3.2500 0.1700
+vdw 767 3.2500 0.1700
+vdw 768 3.2500 0.1700
+vdw 769 3.3000 0.2100
+vdw 770 3.2500 0.1700
+vdw 771 0.0000 0.0000
+vdw 772 3.5000 0.0660
+vdw 773 3.5000 0.0660
+vdw 774 3.5000 0.0660
+vdw 775 3.5000 0.0660
+vdw 776 3.5500 0.0700
+vdw 777 3.5500 0.0760
+vdw 778 3.5500 0.0700
+vdw 779 3.5500 0.0700
+vdw 780 2.5000 0.0300
+vdw 781 3.5000 0.0660
+vdw 782 3.7500 0.1050
+vdw 783 3.2500 0.1700
+vdw 784 2.9600 0.2100
+vdw 785 0.0000 0.0000
+vdw 786 2.9400 0.0610
+vdw 787 3.5000 0.0660
+vdw 788 2.5000 0.0300
+vdw 789 3.5000 0.0660
+vdw 790 3.5000 0.0660
+vdw 791 3.5000 0.0660
+vdw 792 3.5000 0.0660
+vdw 793 3.5000 0.0660
+vdw 794 3.5000 0.0970
+vdw 795 2.9500 0.0530
+vdw 796 3.2500 0.0620
+vdw 797 2.5000 0.0300
+vdw 798 3.5000 0.0660
+vdw 799 3.5000 0.0660
+vdw 800 3.4000 0.3000
+vdw 801 3.5000 0.0660
+vdw 802 2.5000 0.0300
+vdw 803 3.5000 0.0660
+vdw 804 3.5000 0.0660
+vdw 805 3.4700 0.4700
+vdw 806 3.5000 0.0660
+vdw 807 2.5000 0.0300
+vdw 808 3.5000 0.0660
+vdw 809 3.5000 0.0660
+vdw 810 2.9400 0.0610
+vdw 811 3.4000 0.3000
+vdw 812 3.4700 0.4700
+vdw 813 3.5500 0.0700
+vdw 814 2.9000 0.1400
+vdw 815 3.5000 0.0660
+vdw 816 2.9000 0.0600
+vdw 817 3.2500 0.1700
+vdw 818 3.5500 0.0700
+vdw 819 3.5000 0.0660
+vdw 820 3.7500 0.1050
+vdw 821 3.7500 0.1050
+vdw 822 2.9600 0.2100
+vdw 823 3.2500 0.1700
+vdw 824 0.0000 0.0000
+vdw 825 3.1200 0.1700
+vdw 826 0.0000 0.0000
+vdw 827 3.5000 0.0660
+vdw 828 3.5000 0.0660
+vdw 829 3.5500 0.0700
+vdw 830 3.5500 0.0700
+vdw 831 3.5500 0.0700
+vdw 832 3.5500 0.0700
+vdw 833 3.5500 0.0700
+vdw 834 1.9600 0.0125
+vdw 835 3.5000 0.0660
+vdw 836 3.5000 0.0660
+vdw 837 3.5000 0.0660
+vdw 838 3.7500 0.6000
+vdw 839 2.5000 0.0300
+vdw 840 3.2500 0.1700
+vdw 841 3.5500 0.0700
+vdw 842 3.5500 0.0700
+vdw 843 3.2500 0.1700
+vdw 844 3.5500 0.0700
+vdw 845 3.7500 0.1050
+vdw 846 2.9600 0.2100
+vdw 847 3.2500 0.1700
+vdw 848 3.5000 0.0660
+vdw 849 3.5000 0.0660
+vdw 850 3.5000 0.0660
+vdw 851 3.5000 0.0660
+vdw 852 2.4200 0.0150
+vdw 853 3.7500 0.1050
+vdw 854 2.9600 0.2100
+vdw 855 2.4200 0.0150
+vdw 856 3.5000 0.0660
+vdw 857 3.5000 0.0660
+vdw 858 3.5000 0.0660
+vdw 859 3.5000 0.0660
+vdw 860 3.5000 0.0660
+vdw 861 3.5000 0.0660
+vdw 862 3.5000 0.0660
+vdw 863 3.5000 0.0660
+vdw 864 3.5000 0.0660
+vdw 865 3.5000 0.0660
+vdw 866 4.0000 0.1000
+vdw 867 4.0000 0.1000
+vdw 868 4.0000 0.1000
+vdw 869 4.0000 0.1000
+vdw 870 2.5000 0.0300
+vdw 871 3.5000 0.0660
+vdw 872 3.5000 0.0660
+vdw 873 3.5000 0.0660
+vdw 874 3.5000 0.0660
+vdw 875 3.0800 0.7200
+vdw 876 4.1800 0.11779
+vdw 877 4.5100 0.0900
+vdw 878 5.1500 0.0700
+vdw 879 2.7000 0.018279
+vdw 880 3.3500 0.002772
+vdw 881 4.0600 0.000328
+vdw 882 4.3200 0.000171
+vdw 883 4.8200 0.000081
+vdw 884 2.9100 0.875044
+vdw 885 3.4700 0.449657
+vdw 886 3.8200 0.118226
+vdw 887 4.1800 0.047096
+vdw 888 3.5000 0.0660
+vdw 889 3.5000 0.0660
+vdw 890 3.5000 0.0660
+vdw 891 3.5000 0.0660
+vdw 892 2.5000 0.0300
+vdw 893 3.2500 0.1700
+vdw 894 3.5500 0.0700
+vdw 895 3.2500 0.1700
+vdw 896 3.5500 0.0700
+vdw 897 3.5500 0.0760
+vdw 898 3.5500 0.0760
+vdw 899 2.4200 0.0300
+vdw 900 3.3000 0.0860
+vdw 901 3.3000 0.0860
+vdw 902 3.3000 0.0860
+vdw 903 3.3000 0.0860
+vdw 904 3.3000 0.0860
+vdw 905 2.9600 0.2100
+vdw 906 3.5000 0.0660
+
+
+ ##################################
+ ## ##
+ ## Bond Stretching Parameters ##
+ ## ##
+ ##################################
+
+
+bond 1 2 367.00 1.3800
+bond 1 3 420.00 1.3570
+bond 1 13 367.00 1.3600
+bond 1 19 450.00 1.2790
+bond 1 25 300.00 0.3000
+bond 1 47 420.00 1.3400
+bond 1 48 420.00 1.3540
+bond 1 82 420.00 1.3540
+bond 1 83 420.00 1.3540
+bond 1 84 420.00 1.3540
+bond 1 87 420.00 1.3540
+bond 1 88 420.00 1.3540
+bond 1 108 461.00 1.5700
+bond 2 2 260.00 1.5260
+bond 2 3 317.00 1.5220
+bond 2 5 386.00 1.4250
+bond 2 6 260.00 1.5260
+bond 2 10 260.00 1.5260
+bond 2 11 317.00 1.5000
+bond 2 12 317.00 1.5100
+bond 2 13 260.00 1.5260
+bond 2 14 317.00 1.5000
+bond 2 15 222.00 1.8100
+bond 2 16 222.00 1.8100
+bond 2 20 320.00 1.4250
+bond 2 24 337.00 1.4490
+bond 2 44 382.00 1.4480
+bond 2 48 317.00 1.5100
+bond 2 51 260.00 1.5260
+bond 2 53 367.00 1.4710
+bond 2 55 337.00 1.4630
+bond 2 80 317.00 1.4950
+bond 3 3 350.00 1.5100
+bond 3 4 570.00 1.2290
+bond 3 5 450.00 1.3640
+bond 3 6 317.00 1.5220
+bond 3 10 317.00 1.5220
+bond 3 12 469.00 1.4000
+bond 3 13 317.00 1.5220
+bond 3 19 400.00 1.4440
+bond 3 20 214.00 1.3270
+bond 3 21 300.00 1.7900
+bond 3 24 490.00 1.3350
+bond 3 44 317.00 1.5220
+bond 3 46 340.00 1.0900
+bond 3 47 410.00 1.4440
+bond 3 48 400.00 1.4900
+bond 3 50 385.00 1.4600
+bond 3 52 656.00 1.2500
+bond 3 56 457.00 1.3580
+bond 3 57 418.00 1.3880
+bond 3 60 447.00 1.4190
+bond 3 65 300.00 1.9800
+bond 3 84 400.00 1.4900
+bond 3 86 385.00 1.4600
+bond 3 105 424.00 1.3830
+bond 3 107 490.00 1.3350
+bond 4 25 553.00 0.3000
+bond 4 64 525.00 1.4800
+bond 4 89 570.00 1.2290
+bond 4 110 700.00 1.1710
+bond 5 6 386.00 1.4250
+bond 5 7 553.00 0.9450
+bond 5 10 386.00 1.4250
+bond 5 13 320.00 1.4100
+bond 5 20 250.00 1.4700
+bond 5 24 400.00 1.3800
+bond 5 25 340.00 0.3000
+bond 5 44 320.00 1.4500
+bond 5 47 450.00 1.3700
+bond 5 48 450.00 1.3640
+bond 5 51 320.00 1.3800
+bond 5 64 230.00 1.6100
+bond 5 79 450.00 1.6700
+bond 5 106 94.00 1.8000
+bond 5 108 374.00 1.6400
+bond 6 6 260.00 1.5260
+bond 6 10 260.00 1.5260
+bond 6 11 317.00 1.5000
+bond 6 13 260.00 1.5260
+bond 6 14 317.00 1.5000
+bond 6 15 222.00 1.8100
+bond 6 16 222.00 1.8100
+bond 6 20 320.00 1.4250
+bond 6 24 337.00 1.4490
+bond 6 44 382.00 1.4480
+bond 6 47 317.00 1.5100
+bond 6 51 260.00 1.5260
+bond 6 53 367.00 1.4710
+bond 6 55 337.00 1.4630
+bond 6 79 222.00 1.8100
+bond 6 105 337.00 1.4750
+bond 7 20 553.00 0.9450
+bond 7 25 340.00 0.1000
+bond 9 9 530.00 1.3400
+bond 9 11 530.00 1.3400
+bond 9 14 530.00 1.3400
+bond 10 10 260.00 1.5260
+bond 10 11 317.00 1.5000
+bond 10 14 317.00 1.5000
+bond 10 20 320.00 1.4250
+bond 10 24 337.00 1.4490
+bond 10 44 382.00 1.4480
+bond 10 105 337.00 1.4750
+bond 11 11 530.00 1.3400
+bond 11 13 317.00 1.5000
+bond 11 14 530.00 1.3400
+bond 11 79 222.00 1.7600
+bond 12 12 469.00 1.4000
+bond 12 48 469.00 1.4000
+bond 12 60 469.00 1.4000
+bond 12 81 469.00 1.4000
+bond 13 13 268.00 1.5290
+bond 13 14 317.00 1.5000
+bond 13 15 222.00 1.8100
+bond 13 16 222.00 1.8100
+bond 13 18 390.00 1.4300
+bond 13 19 390.00 1.4700
+bond 13 20 320.00 1.4100
+bond 13 21 245.00 1.7810
+bond 13 22 340.00 1.7900
+bond 13 24 337.00 1.4490
+bond 13 25 340.00 0.3000
+bond 13 44 382.00 1.4480
+bond 13 46 340.00 1.0900
+bond 13 47 317.00 1.5100
+bond 13 48 317.00 1.5100
+bond 13 50 317.00 1.5100
+bond 13 51 268.00 1.5290
+bond 13 53 367.00 1.4710
+bond 13 55 337.00 1.4630
+bond 13 56 337.00 1.4490
+bond 13 57 337.00 1.4750
+bond 13 60 317.00 1.5100
+bond 13 64 212.00 1.8430
+bond 13 65 245.00 1.9450
+bond 13 66 200.00 2.1900
+bond 13 79 340.00 1.7700
+bond 13 80 317.00 1.4950
+bond 13 83 317.00 1.5040
+bond 13 84 317.00 1.5040
+bond 13 85 317.00 1.5040
+bond 13 87 317.00 1.4950
+bond 13 90 337.00 1.4490
+bond 13 91 280.00 1.5100
+bond 13 95 532.80 1.4600
+bond 13 101 382.00 1.4480
+bond 13 102 375.00 1.4900
+bond 13 104 212.00 1.8200
+bond 13 105 337.00 1.4750
+bond 13 107 337.00 1.4490
+bond 13 108 187.00 1.8600
+bond 13 109 317.00 1.5100
+bond 14 14 530.00 1.3400
+bond 15 17 274.00 1.3360
+bond 15 48 250.00 1.7400
+bond 16 16 166.00 2.0380
+bond 16 19 300.00 1.6850
+bond 16 24 250.00 1.7300
+bond 16 25 340.00 0.5000
+bond 16 47 250.00 1.7600
+bond 16 48 250.00 1.7600
+bond 16 61 250.00 1.7300
+bond 16 82 250.00 1.7600
+bond 16 84 250.00 1.7400
+bond 16 91 222.00 1.8100
+bond 16 108 144.00 2.1500
+bond 17 25 340.00 0.1000
+bond 18 18 550.00 1.1200
+bond 18 19 650.00 1.1570
+bond 18 48 400.00 1.4100
+bond 18 56 550.00 1.2400
+bond 19 19 1150.00 1.2100
+bond 19 21 330.00 1.6370
+bond 19 46 420.00 1.0800
+bond 19 47 400.00 1.4260
+bond 19 48 400.00 1.4510
+bond 19 50 400.00 1.4260
+bond 19 65 330.00 1.7840
+bond 19 88 400.00 1.4510
+bond 19 91 400.00 1.4510
+bond 20 20 250.00 1.4700
+bond 20 21 200.00 1.6900
+bond 20 24 320.00 1.4500
+bond 20 25 340.00 0.3000
+bond 20 44 320.00 1.4500
+bond 20 47 450.00 1.3700
+bond 20 48 450.00 1.3640
+bond 20 51 320.00 1.3800
+bond 20 60 340.00 1.3600
+bond 20 61 462.00 1.3990
+bond 20 64 230.00 1.6100
+bond 20 82 462.00 1.3570
+bond 20 84 340.00 1.3600
+bond 20 108 374.00 1.6400
+bond 21 25 300.00 0.3000
+bond 21 47 300.00 1.7250
+bond 21 48 300.00 1.7250
+bond 21 82 300.00 1.7250
+bond 21 83 300.00 1.7250
+bond 21 84 300.00 1.7250
+bond 21 87 300.00 1.7250
+bond 21 88 300.00 1.7250
+bond 21 108 223.00 2.0200
+bond 22 23 700.00 1.5300
+bond 22 25 340.00 0.5000
+bond 23 25 340.00 0.3000
+bond 23 79 700.00 1.4400
+bond 24 25 367.00 0.3000
+bond 24 45 434.00 1.0100
+bond 24 48 427.00 1.3810
+bond 24 59 427.00 1.3810
+bond 24 79 434.00 1.6700
+bond 24 84 427.00 1.3810
+bond 24 88 427.00 1.3810
+bond 24 91 337.00 1.4490
+bond 24 103 500.00 1.2700
+bond 24 106 40.00 2.0500
+bond 25 25 340.00 0.3000
+bond 25 44 340.00 0.3000
+bond 25 45 340.00 0.1000
+bond 25 46 340.00 0.3000
+bond 25 47 340.00 0.3000
+bond 25 48 367.00 0.3000
+bond 25 49 340.00 0.3000
+bond 25 53 340.00 0.3000
+bond 25 56 367.00 0.3000
+bond 25 61 367.00 0.3000
+bond 25 65 300.00 0.3000
+bond 25 103 340.00 0.1000
+bond 31 32 600.00 0.9572
+bond 31 33 900.00 0.1500
+bond 31 106 40.00 2.0500
+bond 34 35 529.60 0.9572
+bond 36 37 600.00 0.9572
+bond 36 38 900.00 0.1750
+bond 39 40 600.00 0.9572
+bond 39 41 900.00 0.7000
+bond 42 43 600.00 1.0000
+bond 44 44 350.00 1.4450
+bond 44 45 434.00 1.0100
+bond 44 48 481.00 1.3400
+bond 44 79 340.00 1.7700
+bond 44 91 382.00 1.4480
+bond 44 108 266.00 1.7400
+bond 45 53 434.00 1.0100
+bond 45 55 434.00 1.0100
+bond 45 56 434.00 1.0100
+bond 45 57 434.00 1.0100
+bond 45 101 434.00 1.0100
+bond 45 105 434.00 1.0100
+bond 45 108 166.00 1.4800
+bond 46 47 340.00 1.0800
+bond 46 50 340.00 1.0800
+bond 46 51 340.00 1.0900
+bond 46 80 340.00 1.0800
+bond 46 91 340.00 1.0880
+bond 46 95 532.80 1.0840
+bond 46 108 166.00 1.4800
+bond 46 109 340.00 1.0800
+bond 47 47 549.00 1.3400
+bond 47 48 427.00 1.4330
+bond 47 50 549.00 1.3400
+bond 47 57 448.00 1.3650
+bond 47 58 367.00 1.0800
+bond 47 65 300.00 1.9000
+bond 47 66 250.00 2.0800
+bond 47 86 385.00 1.4600
+bond 47 91 317.00 1.5100
+bond 47 105 448.00 1.3650
+bond 47 110 700.00 1.3050
+bond 48 48 469.00 1.4000
+bond 48 49 367.00 1.0800
+bond 48 50 427.00 1.4330
+bond 48 53 400.00 1.4500
+bond 48 55 481.00 1.3400
+bond 48 56 483.00 1.3390
+bond 48 57 427.00 1.3810
+bond 48 60 469.00 1.4040
+bond 48 61 414.00 1.3910
+bond 48 64 220.00 1.7800
+bond 48 65 300.00 1.8700
+bond 48 66 250.00 2.0800
+bond 48 79 340.00 1.7700
+bond 48 81 469.00 1.4000
+bond 48 84 546.00 1.3670
+bond 48 86 469.00 1.4000
+bond 48 88 469.00 1.4210
+bond 48 91 317.00 1.4900
+bond 48 101 382.00 1.3850
+bond 48 102 400.00 1.4600
+bond 48 109 427.00 1.4330
+bond 49 59 367.00 1.0800
+bond 49 62 340.00 1.0800
+bond 49 82 367.00 1.0800
+bond 49 83 367.00 1.0800
+bond 49 84 367.00 1.0800
+bond 49 85 367.00 1.0800
+bond 49 87 367.00 1.0800
+bond 49 88 367.00 1.0800
+bond 50 50 385.00 1.4600
+bond 50 56 457.00 1.2900
+bond 50 84 549.00 1.3650
+bond 50 109 385.00 1.4600
+bond 51 105 337.00 1.4750
+bond 52 64 525.00 1.4800
+bond 53 54 434.00 1.0100
+bond 54 55 434.00 1.0100
+bond 55 59 481.00 1.3400
+bond 55 82 481.00 1.3400
+bond 56 56 500.00 1.3200
+bond 56 59 502.00 1.3240
+bond 56 60 461.00 1.3540
+bond 56 82 461.00 1.3540
+bond 56 86 483.00 1.3390
+bond 56 103 550.00 1.2100
+bond 56 109 457.00 1.2900
+bond 57 60 436.00 1.3740
+bond 57 61 400.00 1.3490
+bond 57 62 440.00 1.3710
+bond 57 81 428.00 1.3800
+bond 57 82 477.00 1.3430
+bond 57 84 427.00 1.3810
+bond 57 85 427.00 1.3810
+bond 57 86 385.00 1.4400
+bond 58 83 367.00 1.0800
+bond 58 84 367.00 1.0800
+bond 59 63 367.00 1.0800
+bond 60 60 520.00 1.3700
+bond 60 61 414.00 1.3910
+bond 60 80 388.00 1.4590
+bond 60 81 447.00 1.4190
+bond 60 87 469.00 1.4240
+bond 60 105 436.00 1.3740
+bond 61 61 400.00 1.2800
+bond 61 62 529.00 1.3040
+bond 61 82 488.00 1.3350
+bond 61 83 410.00 1.3940
+bond 61 84 410.00 1.3940
+bond 61 88 410.00 1.3200
+bond 62 63 367.00 1.0800
+bond 62 105 440.00 1.3710
+bond 63 82 367.00 1.0800
+bond 64 108 108.00 2.2500
+bond 65 82 300.00 1.8700
+bond 65 83 300.00 1.8700
+bond 65 84 300.00 1.8700
+bond 65 87 300.00 1.8700
+bond 65 88 300.00 1.8700
+bond 65 108 151.00 2.1900
+bond 66 82 250.00 2.0800
+bond 66 83 250.00 2.0800
+bond 66 84 250.00 2.0800
+bond 66 87 250.00 2.0800
+bond 66 88 250.00 2.0800
+bond 66 108 108.00 2.4400
+bond 77 78 500.00 1.8000
+bond 80 84 546.00 1.3520
+bond 82 86 385.00 1.4600
+bond 82 87 520.00 1.3700
+bond 83 84 520.00 1.3700
+bond 83 86 385.00 1.4600
+bond 84 84 512.00 1.3750
+bond 84 86 385.00 1.4600
+bond 84 87 546.00 1.3670
+bond 84 88 520.00 1.3700
+bond 85 85 520.00 1.3700
+bond 86 86 385.00 1.4600
+bond 86 87 385.00 1.4600
+bond 86 88 385.00 1.4600
+bond 87 87 469.00 1.4240
+bond 87 88 469.00 1.4240
+bond 89 90 490.00 1.3350
+bond 89 91 317.00 1.5220
+bond 90 91 337.00 1.4490
+bond 91 91 260.00 1.5200
+bond 102 103 550.00 1.2250
+bond 108 108 94.00 2.3200
+bond 109 109 549.00 1.3450
+
+
+ ################################
+ ## ##
+ ## Angle Bending Parameters ##
+ ## ##
+ ################################
+
+
+angle 25 1 25 33.00 109.47
+angle 1 2 2 50.00 109.50
+angle 2 2 2 63.00 112.40
+angle 2 2 3 63.00 112.40
+angle 2 2 5 80.00 109.50
+angle 2 2 6 63.00 112.40
+angle 6 2 6 63.00 112.40
+angle 5 2 6 80.00 109.50
+angle 2 2 10 63.00 112.40
+angle 3 2 10 63.00 112.40
+angle 6 2 10 63.00 112.40
+angle 10 2 10 63.00 112.40
+angle 5 2 10 80.00 109.50
+angle 10 2 12 63.00 114.00
+angle 6 2 13 63.00 112.40
+angle 10 2 15 50.00 108.60
+angle 2 2 16 50.00 114.70
+angle 10 2 16 50.00 114.70
+angle 2 2 20 80.00 109.50
+angle 6 2 20 80.00 109.50
+angle 10 2 20 80.00 109.50
+angle 3 2 24 80.00 110.30
+angle 2 2 24 80.00 111.20
+angle 2 2 44 56.20 109.47
+angle 6 2 44 56.20 109.47
+angle 10 2 44 56.20 109.47
+angle 13 2 44 56.20 109.47
+angle 3 2 44 80.00 111.20
+angle 2 2 48 63.00 112.40
+angle 10 2 48 63.00 114.00
+angle 2 2 51 63.00 112.40
+angle 6 2 51 63.00 112.40
+angle 2 2 53 80.00 111.20
+angle 2 2 55 80.00 111.20
+angle 10 2 80 63.00 115.60
+angle 2 3 4 80.00 120.40
+angle 1 3 4 80.00 121.00
+angle 3 3 4 80.00 121.40
+angle 4 3 4 80.00 126.00
+angle 4 3 5 80.00 121.00
+angle 4 3 6 80.00 120.40
+angle 5 3 10 70.00 115.00
+angle 4 3 10 80.00 120.40
+angle 5 3 12 70.00 120.00
+angle 12 3 12 85.00 120.00
+angle 5 3 13 70.00 108.00
+angle 13 3 13 70.00 116.00
+angle 1 3 13 80.00 111.00
+angle 3 3 13 80.00 117.20
+angle 4 3 13 80.00 120.40
+angle 10 3 20 81.00 111.40
+angle 13 3 20 81.00 111.40
+angle 4 3 20 83.00 123.40
+angle 13 3 21 75.00 109.00
+angle 4 3 21 75.00 119.00
+angle 24 3 24 70.00 114.20
+angle 2 3 24 70.00 116.60
+angle 3 3 24 70.00 116.60
+angle 6 3 24 70.00 116.60
+angle 10 3 24 70.00 116.60
+angle 13 3 24 70.00 116.60
+angle 4 3 24 80.00 122.90
+angle 20 3 24 81.00 111.40
+angle 13 3 44 70.00 116.00
+angle 4 3 44 80.00 120.40
+angle 13 3 46 35.00 115.00
+angle 46 3 46 35.00 115.00
+angle 4 3 46 35.00 123.00
+angle 24 3 46 40.00 114.00
+angle 5 3 46 40.00 115.00
+angle 20 3 46 40.00 115.00
+angle 24 3 47 70.00 115.50
+angle 4 3 47 80.00 125.30
+angle 46 3 48 35.00 115.00
+angle 24 3 48 70.00 115.50
+angle 13 3 48 70.00 116.00
+angle 5 3 48 70.00 120.00
+angle 4 3 48 80.00 120.40
+angle 20 3 48 81.00 111.40
+angle 48 3 48 85.00 120.00
+angle 13 3 50 70.00 116.00
+angle 46 3 50 80.00 116.00
+angle 4 3 50 80.00 124.00
+angle 10 3 52 65.00 117.00
+angle 2 3 52 70.00 117.00
+angle 6 3 52 70.00 117.00
+angle 13 3 52 70.00 117.00
+angle 48 3 52 70.00 117.00
+angle 4 3 52 80.00 126.00
+angle 52 3 52 80.00 126.00
+angle 46 3 56 35.00 116.00
+angle 46 3 56 35.00 122.00
+angle 4 3 56 80.00 122.50
+angle 47 3 57 70.00 114.10
+angle 56 3 57 70.00 118.60
+angle 57 3 57 70.00 118.60
+angle 4 3 57 80.00 120.60
+angle 24 3 60 70.00 111.30
+angle 57 3 60 70.00 111.30
+angle 4 3 60 80.00 128.80
+angle 13 3 65 75.00 109.00
+angle 4 3 65 75.00 119.00
+angle 44 3 84 70.00 116.00
+angle 4 3 84 80.00 120.40
+angle 4 3 87 80.00 128.20
+angle 57 3 105 70.00 115.40
+angle 56 3 105 70.00 118.60
+angle 4 3 105 80.00 120.90
+angle 13 3 107 70.00 116.60
+angle 4 3 107 80.00 122.90
+angle 25 4 25 10.00 117.00
+angle 3 4 25 35.00 113.00
+angle 3 5 7 35.00 113.00
+angle 2 5 7 55.00 108.50
+angle 6 5 7 55.00 108.50
+angle 7 5 10 55.00 108.50
+angle 7 5 13 55.00 108.50
+angle 7 5 24 49.00 105.40
+angle 25 5 25 5.00 109.47
+angle 7 5 25 10.00 109.47
+angle 13 5 25 10.00 109.47
+angle 7 5 47 35.00 109.00
+angle 25 5 48 10.00 109.47
+angle 7 5 48 35.00 113.00
+angle 7 5 51 55.00 108.50
+angle 7 5 64 55.00 108.50
+angle 13 5 64 100.00 120.50
+angle 7 5 79 74.00 110.00
+angle 7 5 106 100.00 126.00
+angle 5 7 25 10.00 109.47
+angle 25 7 25 33.00 109.47
+angle 2 10 2 63.00 112.40
+angle 2 10 3 63.00 111.10
+angle 2 10 5 80.00 109.50
+angle 3 10 6 63.00 111.10
+angle 6 10 6 63.00 111.50
+angle 2 10 6 63.00 112.40
+angle 5 10 6 80.00 109.50
+angle 3 10 10 63.00 111.10
+angle 2 10 10 63.00 111.50
+angle 6 10 10 63.00 111.50
+angle 10 10 10 63.00 111.50
+angle 5 10 10 80.00 109.50
+angle 2 10 20 80.00 109.50
+angle 6 10 20 80.00 109.50
+angle 10 10 20 80.00 109.50
+angle 3 10 24 63.00 110.10
+angle 6 10 24 80.00 109.50
+angle 2 10 24 80.00 109.70
+angle 10 10 24 80.00 109.70
+angle 2 10 44 56.20 109.47
+angle 6 10 44 56.20 109.47
+angle 10 10 44 56.20 109.47
+angle 13 10 44 56.20 109.47
+angle 3 10 44 80.00 109.70
+angle 2 10 48 63.00 112.40
+angle 20 10 48 80.00 109.50
+angle 2 10 105 80.00 109.50
+angle 10 10 105 80.00 109.50
+angle 20 10 105 80.00 109.50
+angle 2 11 2 70.00 124.00
+angle 2 11 6 70.00 124.00
+angle 6 11 6 70.00 124.00
+angle 2 11 9 70.00 118.00
+angle 6 11 9 70.00 118.00
+angle 9 11 10 70.00 118.00
+angle 2 11 10 70.00 124.00
+angle 6 11 10 70.00 124.00
+angle 10 11 10 70.00 124.00
+angle 2 11 11 70.00 118.00
+angle 6 11 11 70.00 118.00
+angle 9 11 11 70.00 118.00
+angle 10 11 11 70.00 118.00
+angle 11 11 11 70.00 118.00
+angle 9 11 13 70.00 118.00
+angle 11 11 13 70.00 118.00
+angle 2 11 13 70.00 124.00
+angle 6 11 13 70.00 124.00
+angle 10 11 13 70.00 124.00
+angle 13 11 13 70.00 124.00
+angle 9 11 14 70.00 118.00
+angle 11 11 14 70.00 118.00
+angle 9 11 79 70.00 118.00
+angle 2 12 12 70.00 120.00
+angle 3 12 12 85.00 120.00
+angle 12 12 12 85.00 120.00
+angle 12 12 48 85.00 120.00
+angle 12 12 60 85.00 120.00
+angle 12 12 81 85.00 120.00
+angle 1 13 1 77.00 109.10
+angle 2 13 2 40.00 109.50
+angle 1 13 3 50.00 109.50
+angle 2 13 3 63.00 111.10
+angle 3 13 3 63.00 111.10
+angle 2 13 6 40.00 109.50
+angle 6 13 6 40.00 109.50
+angle 3 13 6 63.00 109.50
+angle 1 13 13 50.00 109.50
+angle 5 13 13 50.00 109.50
+angle 13 13 13 58.35 112.70
+angle 3 13 13 63.00 111.10
+angle 13 13 15 50.00 108.60
+angle 13 13 16 50.00 114.70
+angle 13 13 19 58.35 112.70
+angle 3 13 20 50.00 109.50
+angle 13 13 20 50.00 109.50
+angle 3 13 21 69.00 109.80
+angle 13 13 21 69.00 109.80
+angle 21 13 21 78.00 111.70
+angle 13 13 22 50.00 108.60
+angle 20 13 24 50.00 109.50
+angle 3 13 24 63.00 110.10
+angle 2 13 24 80.00 109.70
+angle 13 13 24 80.00 109.70
+angle 16 13 44 50.00 114.70
+angle 2 13 44 56.20 109.47
+angle 6 13 44 56.20 109.47
+angle 10 13 44 56.20 109.47
+angle 13 13 44 56.20 109.47
+angle 3 13 44 80.00 111.20
+angle 46 13 46 33.00 107.80
+angle 18 13 46 35.00 108.50
+angle 19 13 46 35.00 108.50
+angle 2 13 46 35.00 109.50
+angle 3 13 46 35.00 109.50
+angle 5 13 46 35.00 109.50
+angle 15 13 46 35.00 109.50
+angle 16 13 46 35.00 109.50
+angle 20 13 46 35.00 109.50
+angle 22 13 46 35.00 109.50
+angle 24 13 46 35.00 109.50
+angle 44 13 46 35.00 109.50
+angle 13 13 46 37.50 110.70
+angle 1 13 46 40.00 107.00
+angle 21 13 46 51.00 107.60
+angle 46 13 47 35.00 109.50
+angle 1 13 47 50.00 109.50
+angle 13 13 47 63.00 111.10
+angle 47 13 47 63.00 112.40
+angle 46 13 48 35.00 109.50
+angle 47 13 48 40.00 109.50
+angle 48 13 48 40.00 109.50
+angle 1 13 48 50.00 109.50
+angle 5 13 48 50.00 109.50
+angle 20 13 48 50.00 109.50
+angle 16 13 48 50.00 114.70
+angle 3 13 48 63.00 112.00
+angle 2 13 48 63.00 114.00
+angle 13 13 48 63.00 114.00
+angle 44 13 48 80.00 111.20
+angle 46 13 50 35.00 109.50
+angle 46 13 51 37.50 110.70
+angle 5 13 51 50.00 109.50
+angle 13 13 51 58.35 112.70
+angle 46 13 53 35.00 109.50
+angle 3 13 53 80.00 111.20
+angle 13 13 53 80.00 111.20
+angle 46 13 55 35.00 109.50
+angle 13 13 55 80.00 111.20
+angle 46 13 56 35.00 109.50
+angle 3 13 56 63.00 110.10
+angle 13 13 56 65.00 109.00
+angle 46 13 57 35.00 109.50
+angle 48 13 57 80.00 111.20
+angle 46 13 60 35.00 109.50
+angle 13 13 60 63.00 114.00
+angle 46 13 64 41.00 109.50
+angle 13 13 64 43.00 109.50
+angle 48 13 64 43.00 109.50
+angle 46 13 65 51.00 107.60
+angle 3 13 65 69.00 109.80
+angle 13 13 65 69.00 110.00
+angle 48 13 65 69.00 110.00
+angle 65 13 65 78.00 111.70
+angle 46 13 66 75.00 111.00
+angle 13 13 66 75.00 112.00
+angle 46 13 79 35.00 109.50
+angle 13 13 79 50.00 108.60
+angle 1 13 79 50.00 109.50
+angle 46 13 80 35.00 109.50
+angle 13 13 80 63.00 115.60
+angle 46 13 83 35.00 109.50
+angle 13 13 83 63.00 114.00
+angle 46 13 84 35.00 109.50
+angle 16 13 84 50.00 114.70
+angle 13 13 84 63.00 114.00
+angle 46 13 85 35.00 109.50
+angle 13 13 85 63.00 114.00
+angle 46 13 87 35.00 109.50
+angle 13 13 87 63.00 115.60
+angle 46 13 90 35.00 109.50
+angle 13 13 90 80.00 110.00
+angle 3 13 90 80.00 113.00
+angle 46 13 91 37.50 110.70
+angle 46 13 95 35.00 105.00
+angle 13 13 95 63.00 105.00
+angle 46 13 101 35.00 109.50
+angle 13 13 101 80.00 111.20
+angle 46 13 102 35.00 105.00
+angle 13 13 102 63.00 111.10
+angle 46 13 104 41.00 109.50
+angle 13 13 104 43.00 109.50
+angle 46 13 105 35.00 109.50
+angle 13 13 105 50.00 109.50
+angle 20 13 105 50.00 109.50
+angle 46 13 107 35.00 109.50
+angle 13 13 107 80.00 109.70
+angle 46 13 108 35.00 109.50
+angle 13 13 108 60.00 112.00
+angle 2 14 2 70.00 124.00
+angle 2 14 6 70.00 124.00
+angle 6 14 6 70.00 124.00
+angle 2 14 9 70.00 118.00
+angle 6 14 9 70.00 118.00
+angle 9 14 10 70.00 118.00
+angle 2 14 10 70.00 124.00
+angle 6 14 10 70.00 124.00
+angle 10 14 10 70.00 124.00
+angle 2 14 11 70.00 118.00
+angle 6 14 11 70.00 118.00
+angle 9 14 11 70.00 118.00
+angle 10 14 11 70.00 118.00
+angle 11 14 11 70.00 118.00
+angle 9 14 13 70.00 118.00
+angle 11 14 13 70.00 118.00
+angle 2 14 13 70.00 124.00
+angle 6 14 13 70.00 124.00
+angle 10 14 13 70.00 124.00
+angle 13 14 13 70.00 124.00
+angle 2 14 14 70.00 118.00
+angle 6 14 14 70.00 118.00
+angle 9 14 14 70.00 118.00
+angle 10 14 14 70.00 118.00
+angle 11 14 14 70.00 118.00
+angle 13 14 14 70.00 118.00
+angle 14 14 14 70.00 118.00
+angle 17 15 17 35.00 92.07
+angle 2 15 17 44.00 96.00
+angle 6 15 17 44.00 96.00
+angle 13 15 17 44.00 96.00
+angle 25 15 25 5.00 109.47
+angle 13 15 25 10.00 109.47
+angle 33 15 33 10.00 160.00
+angle 2 15 33 150.00 96.70
+angle 6 15 33 150.00 96.70
+angle 13 15 33 150.00 96.70
+angle 17 15 33 150.00 96.70
+angle 17 15 48 50.00 96.00
+angle 2 16 6 62.00 98.90
+angle 13 16 13 62.00 98.90
+angle 2 16 16 68.00 103.70
+angle 6 16 16 68.00 103.70
+angle 13 16 16 68.00 103.70
+angle 13 16 19 65.00 100.00
+angle 25 16 25 5.00 109.47
+angle 13 16 25 10.00 109.47
+angle 33 16 33 10.00 160.00
+angle 2 16 33 150.00 96.70
+angle 6 16 33 150.00 96.70
+angle 13 16 33 150.00 96.70
+angle 16 16 33 150.00 96.70
+angle 13 16 48 62.00 104.20
+angle 47 16 48 62.00 104.20
+angle 24 16 60 74.00 92.40
+angle 25 16 61 10.00 130.00
+angle 25 16 82 10.00 130.00
+angle 60 16 82 74.00 97.00
+angle 25 16 84 10.00 130.00
+angle 82 16 84 74.00 90.00
+angle 60 16 84 74.00 97.00
+angle 84 16 84 74.00 97.00
+angle 13 16 91 62.00 94.00
+angle 15 17 25 10.00 109.47
+angle 25 17 25 33.00 109.47
+angle 13 18 19 150.00 180.00
+angle 19 18 48 170.00 180.00
+angle 18 18 56 100.00 180.00
+angle 13 19 18 150.00 180.00
+angle 16 19 19 140.00 180.00
+angle 13 19 19 150.00 180.00
+angle 18 19 25 10.00 90.00
+angle 19 19 46 112.00 180.00
+angle 18 19 47 150.00 180.00
+angle 19 19 47 160.00 180.00
+angle 18 19 48 150.00 180.00
+angle 19 19 48 160.00 180.00
+angle 19 19 50 160.00 180.00
+angle 18 19 55 150.00 180.00
+angle 18 19 88 150.00 180.00
+angle 2 20 2 100.00 111.80
+angle 2 20 3 83.00 116.90
+angle 3 20 6 83.00 116.90
+angle 2 20 6 100.00 111.80
+angle 2 20 7 55.00 108.50
+angle 7 20 10 55.00 108.50
+angle 3 20 10 83.00 116.90
+angle 10 20 10 100.00 111.80
+angle 13 20 13 60.00 109.50
+angle 3 20 13 83.00 116.90
+angle 25 20 25 5.00 109.47
+angle 13 20 25 10.00 109.47
+angle 13 20 47 75.00 111.00
+angle 25 20 48 10.00 109.47
+angle 13 20 48 75.00 111.00
+angle 47 20 48 75.00 111.00
+angle 48 20 48 75.00 111.00
+angle 3 20 48 83.00 116.90
+angle 2 20 48 100.00 111.80
+angle 13 20 51 60.00 109.50
+angle 2 20 51 100.00 113.00
+angle 6 20 51 100.00 113.00
+angle 10 20 51 100.00 113.00
+angle 24 20 60 70.00 104.50
+angle 25 20 61 10.00 125.00
+angle 2 20 64 100.00 120.50
+angle 6 20 64 100.00 120.50
+angle 10 20 64 100.00 120.50
+angle 13 20 64 100.00 120.50
+angle 48 20 64 100.00 120.50
+angle 64 20 64 100.00 120.50
+angle 25 20 82 10.00 125.00
+angle 60 20 82 70.00 106.50
+angle 82 20 82 70.00 107.00
+angle 25 20 84 10.00 125.00
+angle 82 20 84 70.00 104.00
+angle 60 20 84 70.00 106.50
+angle 84 20 84 70.00 106.50
+angle 61 20 84 70.00 108.90
+angle 108 20 108 20.00 145.00
+angle 13 20 108 40.00 130.00
+angle 25 21 25 33.00 109.47
+angle 13 22 13 62.00 96.00
+angle 13 22 23 74.00 107.00
+angle 23 22 25 10.00 90.00
+angle 2 24 3 50.00 121.90
+angle 3 24 3 70.00 126.40
+angle 3 24 5 46.00 115.70
+angle 2 24 6 50.00 121.90
+angle 3 24 6 50.00 121.90
+angle 2 24 10 50.00 118.00
+angle 3 24 10 50.00 121.90
+angle 13 24 13 50.00 118.00
+angle 3 24 13 50.00 121.90
+angle 3 24 16 70.00 112.00
+angle 3 24 20 70.00 108.60
+angle 3 24 25 10.00 109.50
+angle 25 24 45 10.00 100.00
+angle 5 24 45 35.00 110.20
+angle 3 24 45 35.00 119.80
+angle 45 24 45 35.00 120.00
+angle 2 24 45 38.00 118.40
+angle 6 24 45 38.00 118.40
+angle 10 24 45 38.00 118.40
+angle 13 24 45 38.00 118.40
+angle 45 24 48 35.00 119.80
+angle 13 24 48 50.00 118.00
+angle 3 24 48 50.00 121.90
+angle 48 24 48 70.00 118.00
+angle 54 24 54 35.00 120.00
+angle 45 24 59 35.00 118.00
+angle 3 24 59 70.00 125.20
+angle 13 24 79 50.00 120.00
+angle 45 24 79 100.00 111.00
+angle 45 24 84 35.00 119.80
+angle 48 24 84 70.00 118.00
+angle 16 24 86 70.00 117.00
+angle 45 24 87 35.00 119.80
+angle 48 24 87 70.00 118.00
+angle 45 24 88 35.00 119.80
+angle 48 24 88 70.00 118.00
+angle 45 24 91 40.00 113.00
+angle 3 24 91 55.00 128.00
+angle 48 24 103 70.00 121.00
+angle 3 24 106 20.00 126.00
+angle 25 25 25 33.00 109.47
+angle 32 31 32 75.00 104.52
+angle 32 31 33 50.00 52.26
+angle 35 34 35 34.05 104.52
+angle 37 36 37 75.00 109.50
+angle 37 36 38 50.00 54.75
+angle 40 39 40 75.00 104.52
+angle 41 39 41 50.00 109.47
+angle 40 39 41 50.00 110.6948
+angle 43 42 43 75.00 109.47
+angle 2 44 2 51.80 107.20
+angle 2 44 6 51.80 107.20
+angle 6 44 6 51.80 107.20
+angle 2 44 10 51.80 107.20
+angle 6 44 10 51.80 107.20
+angle 10 44 10 51.80 107.20
+angle 2 44 13 51.80 107.20
+angle 6 44 13 51.80 107.20
+angle 10 44 13 51.80 107.20
+angle 13 44 13 51.80 107.20
+angle 3 44 13 63.00 111.10
+angle 25 44 45 10.00 100.00
+angle 13 44 45 35.00 109.50
+angle 2 44 45 43.20 108.10
+angle 6 44 45 43.20 108.10
+angle 10 44 45 43.20 108.10
+angle 45 44 45 43.60 106.40
+angle 25 44 48 10.00 109.50
+angle 45 44 48 35.00 116.00
+angle 13 44 48 50.00 116.00
+angle 48 44 48 50.00 116.00
+angle 3 44 48 63.00 112.00
+angle 45 44 79 35.00 115.00
+angle 13 44 79 50.00 108.60
+angle 48 44 79 50.00 108.60
+angle 48 44 91 50.00 109.50
+angle 25 45 25 33.00 109.47
+angle 25 45 44 10.00 109.50
+angle 25 46 25 33.00 109.47
+angle 13 46 25 37.50 109.47
+angle 1 47 1 80.00 108.00
+angle 1 47 3 80.00 121.50
+angle 3 47 6 85.00 119.70
+angle 3 47 13 70.00 119.70
+angle 13 47 13 70.00 130.00
+angle 25 47 46 10.00 90.00
+angle 20 47 46 35.00 114.50
+angle 13 47 46 35.00 117.00
+angle 46 47 46 35.00 117.00
+angle 3 47 46 35.00 119.70
+angle 19 47 46 35.00 120.00
+angle 1 47 46 50.00 112.00
+angle 21 47 46 60.00 114.00
+angle 25 47 47 2.00 90.00
+angle 46 47 47 35.00 120.00
+angle 5 47 47 70.00 123.00
+angle 20 47 47 70.00 123.00
+angle 13 47 47 70.00 124.00
+angle 19 47 47 70.00 124.00
+angle 21 47 47 75.00 121.50
+angle 1 47 47 80.00 121.50
+angle 16 47 47 85.00 119.40
+angle 3 47 47 85.00 120.70
+angle 46 47 48 35.00 123.30
+angle 47 47 48 85.00 117.00
+angle 13 47 48 85.00 119.70
+angle 25 47 50 2.00 90.00
+angle 46 47 50 35.00 120.00
+angle 5 47 50 70.00 123.00
+angle 20 47 50 70.00 123.00
+angle 13 47 50 70.00 124.00
+angle 46 47 57 35.00 119.10
+angle 13 47 57 70.00 120.00
+angle 20 47 57 70.00 120.00
+angle 47 47 57 70.00 121.20
+angle 16 47 57 85.00 119.40
+angle 57 47 58 35.00 119.10
+angle 47 47 58 35.00 119.70
+angle 46 47 65 60.00 114.00
+angle 47 47 65 75.00 120.00
+angle 46 47 91 35.00 135.00
+angle 3 47 91 70.00 119.70
+angle 47 47 91 70.00 124.00
+angle 46 47 105 35.00 119.10
+angle 58 47 105 35.00 119.10
+angle 13 47 105 70.00 120.00
+angle 20 47 105 70.00 120.00
+angle 47 47 105 70.00 121.20
+angle 16 47 105 85.00 119.40
+angle 46 47 110 40.00 121.00
+angle 13 47 110 80.00 122.00
+angle 48 47 110 80.00 122.00
+angle 1 47 110 80.00 125.00
+angle 2 48 12 70.00 120.00
+angle 12 48 12 85.00 120.00
+angle 3 48 13 70.00 119.70
+angle 25 48 48 10.00 90.00
+angle 48 48 48 63.00 120.00
+angle 2 48 48 70.00 120.00
+angle 5 48 48 70.00 120.00
+angle 10 48 48 70.00 120.00
+angle 13 48 48 70.00 120.00
+angle 15 48 48 70.00 120.00
+angle 19 48 48 70.00 120.00
+angle 20 48 48 70.00 120.00
+angle 24 48 48 70.00 120.00
+angle 44 48 48 70.00 120.00
+angle 47 48 48 70.00 124.00
+angle 21 48 48 75.00 120.00
+angle 1 48 48 80.00 120.00
+angle 18 48 48 80.00 120.00
+angle 16 48 48 85.00 119.40
+angle 3 48 48 85.00 120.00
+angle 25 48 49 2.00 90.00
+angle 24 48 49 35.00 119.10
+angle 3 48 49 35.00 120.00
+angle 48 48 49 35.00 120.00
+angle 48 48 50 70.00 124.00
+angle 48 48 53 70.00 120.00
+angle 55 48 55 70.00 120.00
+angle 47 48 55 70.00 120.10
+angle 48 48 55 70.00 120.10
+angle 49 48 56 35.00 116.00
+angle 13 48 56 70.00 116.00
+angle 44 48 56 70.00 116.00
+angle 55 48 56 70.00 119.30
+angle 5 48 56 70.00 120.00
+angle 47 48 56 70.00 121.50
+angle 50 48 56 70.00 121.50
+angle 48 48 56 70.00 124.00
+angle 21 48 56 75.00 120.00
+angle 49 48 57 35.00 120.00
+angle 48 48 57 70.00 108.70
+angle 55 48 57 70.00 116.00
+angle 13 48 57 70.00 120.00
+angle 47 48 57 70.00 121.50
+angle 56 48 57 70.00 123.30
+angle 49 48 60 35.00 120.00
+angle 48 48 60 63.00 120.00
+angle 57 48 60 70.00 108.70
+angle 56 48 60 70.00 117.30
+angle 55 48 60 70.00 123.50
+angle 2 48 60 70.00 128.60
+angle 13 48 60 70.00 128.60
+angle 49 48 61 35.00 119.10
+angle 48 48 61 70.00 108.70
+angle 57 48 61 70.00 123.30
+angle 48 48 64 85.00 119.40
+angle 48 48 65 75.00 120.00
+angle 48 48 66 75.00 120.00
+angle 48 48 79 85.00 119.40
+angle 49 48 81 35.00 120.00
+angle 48 48 81 85.00 120.00
+angle 49 48 84 35.00 126.90
+angle 60 48 84 63.00 106.40
+angle 48 48 84 70.00 107.40
+angle 49 48 86 35.00 120.00
+angle 48 48 86 63.00 120.00
+angle 56 48 86 70.00 124.00
+angle 49 48 88 35.00 128.20
+angle 101 48 101 70.00 111.80
+angle 56 48 101 70.00 124.10
+angle 48 48 102 85.00 120.00
+angle 48 48 109 70.00 124.00
+angle 25 50 46 10.00 90.00
+angle 19 50 46 35.00 120.00
+angle 25 50 47 2.00 90.00
+angle 46 50 47 35.00 120.00
+angle 3 50 47 70.00 118.70
+angle 13 50 47 70.00 124.00
+angle 46 50 48 35.00 123.30
+angle 47 50 48 85.00 117.00
+angle 25 50 50 2.00 90.00
+angle 46 50 50 35.00 120.00
+angle 13 50 50 70.00 124.00
+angle 47 50 50 70.00 124.00
+angle 50 50 84 35.00 106.00
+angle 46 50 84 35.00 122.00
+angle 46 50 109 35.00 120.00
+angle 13 50 109 70.00 124.00
+angle 47 50 109 70.00 124.00
+angle 6 51 6 40.00 109.50
+angle 5 51 13 50.00 109.50
+angle 13 51 20 50.00 109.50
+angle 2 51 20 80.00 109.50
+angle 6 51 20 80.00 109.50
+angle 5 51 20 92.60 111.55
+angle 20 51 20 92.60 111.55
+angle 46 51 46 33.00 109.50
+angle 5 51 46 35.00 109.50
+angle 20 51 46 35.00 109.50
+angle 13 51 46 37.50 110.70
+angle 46 51 105 35.00 109.50
+angle 13 51 105 50.00 109.50
+angle 20 51 105 50.00 109.50
+angle 13 53 13 50.00 113.00
+angle 13 53 25 10.00 100.00
+angle 45 53 45 43.60 109.50
+angle 25 53 48 10.00 100.00
+angle 13 53 48 55.00 114.00
+angle 2 53 54 35.00 109.50
+angle 6 53 54 35.00 109.50
+angle 13 53 54 35.00 109.50
+angle 48 53 54 35.00 109.50
+angle 54 53 54 35.00 109.50
+angle 25 53 82 10.00 100.00
+angle 13 55 13 50.00 118.00
+angle 45 55 45 35.00 113.00
+angle 13 55 45 35.00 118.40
+angle 45 55 48 35.00 120.00
+angle 2 55 48 50.00 123.20
+angle 6 55 48 50.00 123.20
+angle 13 55 48 50.00 123.20
+angle 2 55 54 35.00 118.40
+angle 13 55 54 35.00 118.40
+angle 48 55 54 35.00 120.00
+angle 54 55 54 35.00 120.00
+angle 45 55 59 35.00 120.00
+angle 3 56 13 70.00 120.50
+angle 13 56 18 70.00 120.00
+angle 25 56 48 5.00 120.00
+angle 45 56 48 35.00 113.00
+angle 13 56 48 50.00 118.00
+angle 48 56 48 70.00 117.00
+angle 3 56 48 70.00 120.50
+angle 13 56 56 70.00 117.00
+angle 48 56 56 70.00 117.00
+angle 25 56 59 5.00 119.80
+angle 48 56 59 70.00 118.60
+angle 59 56 59 70.00 118.60
+angle 59 56 60 70.00 111.00
+angle 48 56 60 70.00 112.20
+angle 59 56 82 70.00 111.00
+angle 48 56 86 70.00 117.00
+angle 13 56 103 70.00 114.00
+angle 3 57 3 70.00 126.40
+angle 3 57 45 35.00 116.80
+angle 45 57 47 35.00 119.20
+angle 3 57 47 70.00 121.60
+angle 45 57 48 35.00 118.00
+angle 3 57 48 70.00 125.20
+angle 48 57 48 70.00 125.20
+angle 45 57 60 30.00 125.80
+angle 13 57 60 70.00 125.80
+angle 60 57 61 56.00 113.10
+angle 45 57 61 56.00 118.40
+angle 13 57 61 70.00 118.40
+angle 48 57 61 70.00 118.40
+angle 45 57 62 30.00 128.80
+angle 60 57 62 70.00 105.40
+angle 48 57 62 70.00 109.80
+angle 13 57 62 70.00 128.80
+angle 45 57 81 35.00 123.10
+angle 45 57 82 35.00 120.00
+angle 61 57 82 56.00 113.10
+angle 60 57 82 70.00 109.80
+angle 45 57 84 35.00 120.00
+angle 61 57 84 56.00 113.10
+angle 60 57 84 70.00 109.80
+angle 82 57 84 70.00 109.80
+angle 84 57 84 70.00 109.80
+angle 81 57 84 70.00 111.60
+angle 45 57 85 35.00 120.00
+angle 82 57 85 70.00 109.80
+angle 24 59 55 70.00 116.00
+angle 49 59 56 35.00 115.45
+angle 13 59 56 70.00 115.50
+angle 55 59 56 70.00 119.30
+angle 24 59 56 70.00 123.30
+angle 56 59 56 70.00 129.10
+angle 56 59 63 35.00 115.45
+angle 13 60 48 70.00 120.00
+angle 48 60 48 85.00 134.90
+angle 56 60 57 70.00 126.20
+angle 57 60 60 70.00 106.20
+angle 20 60 60 70.00 110.60
+angle 16 60 60 70.00 111.00
+angle 13 60 60 70.00 120.00
+angle 24 60 60 70.00 127.70
+angle 56 60 60 70.00 127.70
+angle 48 60 60 85.00 117.30
+angle 3 60 60 85.00 119.20
+angle 60 60 61 70.00 111.00
+angle 24 60 61 70.00 126.20
+angle 3 60 61 70.00 130.00
+angle 48 60 61 70.00 132.40
+angle 12 60 80 85.00 134.90
+angle 48 60 80 85.00 134.90
+angle 80 60 81 85.00 108.80
+angle 12 60 81 85.00 116.20
+angle 48 60 81 85.00 116.20
+angle 3 60 84 70.00 130.00
+angle 60 60 87 70.00 107.30
+angle 57 60 87 70.00 107.70
+angle 81 60 87 85.00 108.80
+angle 12 60 87 85.00 134.90
+angle 48 60 87 85.00 134.90
+angle 60 60 105 70.00 106.20
+angle 56 60 105 70.00 126.20
+angle 48 61 48 70.00 125.20
+angle 25 61 57 10.00 125.00
+angle 25 61 61 10.00 125.00
+angle 60 61 62 70.00 103.80
+angle 25 61 82 10.00 125.00
+angle 61 61 82 70.00 109.00
+angle 60 61 82 70.00 110.00
+angle 82 61 83 70.00 110.00
+angle 57 61 84 70.00 104.10
+angle 82 61 84 70.00 110.00
+angle 57 61 88 70.00 104.10
+angle 20 61 88 70.00 105.30
+angle 49 62 57 35.00 120.00
+angle 49 62 61 35.00 120.00
+angle 57 62 61 70.00 113.90
+angle 57 62 63 35.00 123.05
+angle 61 62 63 35.00 123.05
+angle 49 62 105 35.00 120.00
+angle 63 62 105 35.00 123.05
+angle 61 62 105 70.00 113.90
+angle 5 64 5 45.00 102.60
+angle 4 64 5 100.00 108.23
+angle 4 64 13 45.00 109.50
+angle 5 64 20 45.00 102.60
+angle 20 64 20 45.00 102.60
+angle 13 64 20 45.00 109.50
+angle 4 64 20 100.00 108.23
+angle 4 64 48 45.00 109.50
+angle 5 64 48 45.00 109.50
+angle 20 64 48 45.00 109.50
+angle 5 64 52 45.00 108.23
+angle 13 64 52 45.00 109.50
+angle 20 64 52 100.00 108.23
+angle 52 64 52 140.00 119.90
+angle 25 65 25 33.00 109.47
+angle 25 66 25 33.00 109.47
+angle 78 77 78 150.00 180.00
+angle 6 79 11 62.00 98.90
+angle 13 79 13 62.00 102.00
+angle 5 79 13 75.00 96.40
+angle 5 79 23 74.00 108.70
+angle 13 79 23 74.00 108.90
+angle 23 79 23 104.00 119.00
+angle 13 79 24 100.00 103.00
+angle 23 79 24 120.00 107.00
+angle 13 79 44 62.00 102.00
+angle 23 79 44 74.00 108.90
+angle 13 79 48 62.00 102.00
+angle 23 79 48 74.00 107.20
+angle 5 79 48 75.00 96.40
+angle 24 79 48 100.00 103.00
+angle 13 79 82 62.00 102.00
+angle 46 80 60 35.00 126.80
+angle 2 80 60 70.00 128.60
+angle 13 80 60 70.00 128.60
+angle 46 80 84 35.00 126.80
+angle 2 80 84 70.00 125.00
+angle 13 80 84 70.00 125.00
+angle 60 80 84 85.00 106.40
+angle 12 81 57 70.00 132.80
+angle 48 81 57 70.00 132.80
+angle 57 81 60 70.00 104.40
+angle 12 81 60 85.00 122.70
+angle 48 81 60 85.00 122.70
+angle 13 82 16 70.00 125.00
+angle 16 82 24 70.00 125.00
+angle 16 82 44 70.00 120.20
+angle 20 82 49 35.00 117.00
+angle 16 82 49 35.00 125.00
+angle 49 82 57 35.00 120.00
+angle 57 82 57 70.00 120.00
+angle 13 82 57 70.00 125.00
+angle 48 82 57 70.00 125.00
+angle 56 82 57 70.00 126.20
+angle 49 82 61 35.00 120.00
+angle 16 82 61 70.00 113.60
+angle 16 82 61 70.00 115.00
+angle 20 82 61 70.00 115.00
+angle 57 82 61 70.00 120.00
+angle 13 82 61 70.00 125.00
+angle 44 82 61 70.00 126.10
+angle 24 82 61 70.00 126.20
+angle 57 82 79 70.00 120.00
+angle 61 82 79 70.00 120.00
+angle 20 82 86 70.00 122.00
+angle 61 82 86 70.00 130.00
+angle 57 82 87 70.00 106.20
+angle 56 82 87 70.00 127.70
+angle 49 83 61 35.00 120.00
+angle 48 83 61 70.00 111.00
+angle 13 83 61 70.00 124.50
+angle 49 83 84 35.00 128.20
+angle 61 83 84 70.00 111.00
+angle 13 83 84 70.00 130.70
+angle 13 84 16 70.00 125.00
+angle 13 84 20 70.00 121.60
+angle 16 84 24 70.00 125.00
+angle 20 84 49 35.00 113.40
+angle 16 84 49 35.00 125.00
+angle 48 84 49 35.00 130.70
+angle 49 84 50 35.00 130.70
+angle 20 84 50 70.00 110.00
+angle 49 84 57 35.00 121.60
+angle 13 84 57 70.00 121.60
+angle 48 84 57 70.00 121.60
+angle 3 84 57 85.00 120.00
+angle 57 84 58 35.00 120.00
+angle 13 84 61 70.00 118.90
+angle 49 84 80 35.00 120.00
+angle 57 84 80 70.00 108.70
+angle 49 84 83 35.00 130.70
+angle 57 84 83 70.00 106.30
+angle 20 84 83 70.00 108.00
+angle 16 84 83 70.00 111.00
+angle 13 84 83 70.00 130.70
+angle 13 84 84 70.00 120.00
+angle 57 84 84 70.00 120.00
+angle 61 84 84 70.00 120.00
+angle 20 84 86 70.00 121.60
+angle 57 84 86 70.00 121.60
+angle 49 84 87 35.00 132.10
+angle 57 84 87 70.00 107.70
+angle 20 84 87 70.00 110.60
+angle 16 84 87 70.00 111.00
+angle 61 84 87 70.00 111.90
+angle 13 84 87 70.00 132.10
+angle 48 84 87 70.00 132.10
+angle 86 84 87 70.00 132.10
+angle 3 84 87 85.00 120.00
+angle 49 85 57 35.00 120.00
+angle 13 85 57 70.00 121.60
+angle 49 85 85 35.00 130.70
+angle 57 85 85 70.00 106.30
+angle 13 85 85 70.00 130.70
+angle 48 86 48 63.00 120.00
+angle 48 86 56 70.00 124.00
+angle 48 86 82 63.00 120.00
+angle 48 86 83 63.00 120.00
+angle 48 86 84 63.00 120.00
+angle 48 86 86 63.00 120.00
+angle 56 86 86 70.00 124.00
+angle 48 86 87 63.00 120.00
+angle 48 86 88 63.00 120.00
+angle 49 87 60 35.00 120.00
+angle 46 87 60 35.00 126.80
+angle 13 87 60 70.00 128.60
+angle 49 87 84 35.00 125.70
+angle 46 87 84 35.00 126.80
+angle 84 87 84 70.00 103.80
+angle 82 87 84 70.00 110.40
+angle 2 87 84 70.00 125.00
+angle 13 87 84 70.00 125.00
+angle 3 87 84 70.00 130.00
+angle 60 87 84 85.00 106.40
+angle 84 87 86 70.00 125.70
+angle 49 87 87 35.00 127.50
+angle 60 87 87 70.00 107.30
+angle 84 87 87 70.00 107.30
+angle 86 87 87 70.00 127.50
+angle 84 87 88 70.00 103.80
+angle 48 88 49 35.00 128.60
+angle 49 88 61 35.00 118.90
+angle 13 88 61 70.00 118.90
+angle 19 88 61 70.00 118.90
+angle 61 88 87 70.00 111.90
+angle 4 89 90 80.00 134.00
+angle 90 89 91 70.00 91.00
+angle 4 89 91 80.00 134.00
+angle 13 90 89 55.00 127.00
+angle 89 90 91 50.00 94.00
+angle 13 90 91 50.00 126.00
+angle 24 91 46 35.00 108.00
+angle 13 91 46 35.00 114.30
+angle 44 91 46 35.00 114.30
+angle 46 91 46 35.00 114.30
+angle 16 91 46 37.50 108.00
+angle 46 91 47 35.00 109.50
+angle 46 91 89 37.50 110.00
+angle 24 91 89 70.00 117.00
+angle 46 91 90 35.00 111.00
+angle 16 91 90 55.00 109.00
+angle 91 91 91 30.00 79.20
+angle 13 91 91 37.50 117.20
+angle 44 91 91 37.50 117.20
+angle 46 91 91 37.50 117.20
+angle 24 91 91 37.50 126.00
+angle 16 91 91 55.00 128.00
+angle 89 91 91 63.00 85.00
+angle 47 91 91 63.00 114.00
+angle 90 91 91 80.00 89.00
+angle 13 95 13 172.80 120.00
+angle 13 95 46 144.00 120.00
+angle 13 101 45 35.00 109.50
+angle 45 101 45 43.60 106.40
+angle 45 101 48 50.00 112.50
+angle 13 101 48 50.00 120.50
+angle 13 102 103 80.00 117.50
+angle 48 102 103 80.00 117.50
+angle 103 102 103 80.00 125.00
+angle 25 103 25 10.00 109.50
+angle 25 103 102 10.00 109.50
+angle 13 104 13 45.00 109.50
+angle 3 105 10 70.00 117.60
+angle 3 105 13 70.00 117.60
+angle 3 105 45 35.00 119.20
+angle 45 105 47 35.00 119.20
+angle 13 105 47 70.00 121.20
+angle 3 105 47 70.00 121.60
+angle 3 105 51 70.00 117.60
+angle 47 105 51 70.00 121.20
+angle 45 105 60 30.00 125.80
+angle 6 105 60 70.00 125.80
+angle 10 105 60 70.00 125.80
+angle 13 105 60 70.00 125.80
+angle 51 105 60 70.00 125.80
+angle 45 105 62 30.00 128.80
+angle 60 105 62 70.00 105.40
+angle 6 105 62 70.00 128.80
+angle 10 105 62 70.00 128.80
+angle 13 105 62 70.00 128.80
+angle 51 105 62 70.00 128.80
+angle 4 106 24 20.00 109.50
+angle 24 106 24 20.00 109.50
+angle 13 107 13 50.00 118.00
+angle 3 107 13 50.00 121.90
+angle 1 108 13 35.00 110.50
+angle 13 108 13 60.00 110.00
+angle 13 108 20 60.00 100.00
+angle 20 108 20 60.00 110.00
+angle 13 108 21 35.00 110.50
+angle 45 108 45 35.00 109.50
+angle 13 108 45 35.00 110.50
+angle 46 108 46 35.00 109.50
+angle 13 108 46 35.00 110.50
+angle 13 108 65 35.00 110.50
+angle 13 108 66 35.00 110.50
+angle 13 108 108 50.00 112.00
+angle 46 109 48 35.00 123.30
+angle 46 109 50 35.00 120.00
+angle 13 109 50 70.00 124.00
+angle 46 109 109 35.00 120.00
+angle 13 109 109 70.00 124.00
+angle 50 109 109 70.00 124.00
+angle 48 109 109 85.00 117.00
+angle 4 110 47 160.00 180.00
+angle 47 110 47 160.00 180.00
+
+
+ ################################
+ ## ##
+ ## Urey-Bradley Parameters ##
+ ## ##
+ ################################
+
+
+ureybrad 35 34 35 38.25 1.5537
+
+
+ #####################################
+ ## ##
+ ## Improper Torsional Parameters ##
+ ## ##
+ #####################################
+
+
+imptors 0 0 3 4 21.000 180.0 2
+imptors 0 0 3 52 21.000 180.0 2
+imptors 0 0 24 0 5.000 180.0 2
+imptors 0 0 47 0 30.000 180.0 2
+imptors 0 0 48 0 5.000 180.0 2
+
+
+ ############################
+ ## ##
+ ## Torsional Parameters ##
+ ## ##
+ ############################
+
+
+ ###################################################################
+ ## ##
+ ## Alternative Torsional Parameter Values for Use with OPLS-AA ##
+ ## ##
+ ## For some torsions, OPLS-AA has multiple possible parameter ##
+ ## values; the list below shows functional groups for which ##
+ ## these alternate (commented) values should be preferred; the ##
+ ## values are in the same order as in the full parameter list ##
+ ## ##
+ ## 4 3 3 36 generic (default) ##
+ ## 4 3 3 36 dicarbonyls ##
+ ## 36 3 3 36 hydrocarbon (default) ##
+ ## 36 3 3 36 dicarbonyls ##
+ ## 13 3 5 7 carboxylic acid (default) ##
+ ## 13 3 5 7 1,2-diacid monoanion ##
+ ## 4 3 13 13 peptide (default) ##
+ ## 4 3 13 13 propanamide ##
+ ## 4 3 13 13 carboxylic acid ##
+ ## 4 3 13 13 dicarboxylic acid ##
+ ## 4 3 13 13 aldyhyde, ketone, acyl halide ##
+ ## 4 3 13 13 1,2-diacid monoanion ##
+ ## 5 3 13 13 carboxylic acid (default) ##
+ ## 5 3 13 13 dicarboxylic acid ##
+ ## 35 3 13 13 peptide psi' (default) ##
+ ## 35 3 13 13 propanamide ##
+ ## 35 3 13 13 beta-3-peptide, last psi ##
+ ## 4 3 29 13 esters (default) ##
+ ## 4 3 29 13 benzoic esters ##
+ ## 7 5 13 13 alcohols (default) ##
+ ## 7 5 13 13 trifluoroethanol ##
+ ## 7 5 13 13 hexopyranoses ##
+ ## 7 5 13 36 alcohols (default) ##
+ ## 7 5 13 36 axial cyclohexanol ##
+ ## 7 5 13 36 trifluoroethanol ##
+ ## 0 13 13 13 alcohols, ethers (default) ##
+ ## 0 13 13 13 hexopyranoses ##
+ ## 3 13 13 3 dicarboxylic acid (default) ##
+ ## 3 13 13 3 1,2-diacid monoanion ##
+ ## 3 13 13 13 butanamide (default) ##
+ ## 3 13 13 13 carboxylate ion ##
+ ## 3 13 13 13 aldyhyde, ketone, acyl halide ##
+ ## 3 13 13 36 all carbonyls (default) ##
+ ## 3 13 13 36 dicarboxylic acid ##
+ ## 3 13 13 36 aldehyde, ketone, acyl halide ##
+ ## 5 13 13 5 diols only (default) ##
+ ## 5 13 13 5 triols only ##
+ ## 5 13 13 5 hexopyranoses ##
+ ## 13 13 13 13 hydrocarbon (default) ##
+ ## 13 13 13 13 perfluoroalkane ##
+ ## 13 13 13 35 peptide chi-1 (default) ##
+ ## 13 13 13 35 N-propylformamide ##
+ ## 36 13 13 69 generic (default) ##
+ ## 36 13 13 69 sulfone ##
+ ## 13 13 33 13 amine (default) ##
+ ## 13 13 33 13 exocyclic amine ##
+ ## 13 13 33 13 exocyclic 1,4-diamine ##
+ ## 13 13 33 34 amine (default) ##
+ ## 13 13 33 34 azetidine, 4-ring ##
+ ## 13 13 33 34 pyrrolidine, 5-ring ##
+ ## 13 13 33 34 cyclic amine ##
+ ## 13 13 33 34 cyclic 1,4-diamine ##
+ ## 13 13 35 3 peptide phi' (default) ##
+ ## 13 13 35 3 N-ethylformamide ##
+ ## 13 13 35 3 beta-3-peptide, first theta tors ##
+ ## 13 13 35 13 proline, CD-N-CA-CB (default) ##
+ ## 13 13 35 13 proline, CG-CD-N-CA ##
+ ## 36 13 35 3 peptide phi'' (default) ##
+ ## 36 13 35 3 N-methylformamide ##
+ ## 13 13 47 0 imidazole, indole, purine (default) ##
+ ## 13 13 47 0 nucleoside chi ##
+ ## 13 13 47 52 nucleoside (default) ##
+ ## 13 13 47 52 imidazole, indole, purine ##
+ ## 29 13 47 0 imidazole, indole, purine (default) ##
+ ## 29 13 47 0 nucleoside chi ##
+ ## 29 13 95 52 nucleoside (default) ##
+ ## 29 13 95 52 imidazole, indole, purine ##
+ ## 13 13 97 13 generic (default) ##
+ ## 13 13 97 13 generic ##
+ ## 17 15 38 0 aromatic thiol (default) ##
+ ## 17 15 38 0 aromatic thiol, N-C-S-H ##
+ ## 13 29 54 42 phosphonates (default) ##
+ ## 13 29 54 42 dimethyl phosphate ##
+ ## 34 35 72 16 diaryl amine (default) ##
+ ## 34 35 72 16 aniline-like ##
+ ## 34 35 72 29 diaryl amine (default) ##
+ ## 34 35 72 29 aniline-like ##
+ ## 13 40 40 37 diene (default) ##
+ ## 13 40 40 37 2-methyl-1,3-butadiene ##
+ ## 0 46 72 0 generic (default) ##
+ ## 0 46 72 0 generic ##
+ ## 0 47 72 0 generic (default) ##
+ ## 0 47 72 0 generic ##
+ ## 0 47 74 0 generic (default) ##
+ ## 0 47 74 0 generic ##
+ ## 0 47 74 0 generic ##
+ ## 0 51 72 0 generic (default) ##
+ ## 0 51 72 0 HA-CR-NB-?? or N?-CR-NB-?? ##
+ ## 0 72 77 0 generic (default) ##
+ ## 0 72 77 0 biphenyl-like, N-C-C-C ##
+ ## ##
+ ###################################################################
+
+
+torsion 0 2 2 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 0 2 2 6 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 1 2 2 2 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
+torsion 1 2 2 6 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
+torsion 2 2 2 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 13 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 65 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
+torsion 6 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 6 2 2 65 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
+torsion 10 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
+torsion 6 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
+torsion 10 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
+torsion 0 2 10 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 10 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 13 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 6 2 20 2 -7.400 0.0 1 3.000 180.0 2 1.800 0.0 3
+torsion 6 2 20 6 -8.400 0.0 1 3.000 180.0 2 1.800 0.0 3
+torsion 4 3 3 4 1.600 0.0 1 3.200 180.0 2 0.000 0.0 3
+torsion 4 3 3 13 0.000 0.0 1 0.500 180.0 2 0.000 0.0 3
+torsion 4 3 3 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 3 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 4 3 3 36 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 13 3 3 13 0.700 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 13 3 3 24 -0.500 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 13 3 3 46 0.800 0.0 1 -0.760 180.0 2 0.000 0.0 3
+torsion 24 3 3 46 -0.900 0.0 1 0.300 180.0 2 0.000 0.0 3
+torsion 46 3 3 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+#torsion 36 3 3 36 0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 3 5 7 3.000 0.0 1 5.500 180.0 2 0.000 0.0 3
+torsion 4 3 5 7 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 13 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
+#torsion 13 3 5 7 3.200 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 24 3 5 7 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 46 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
+torsion 48 3 5 7 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 1 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 3 3 13 46 0.000 0.0 1 0.000 180.0 2 0.085 0.0 3
+torsion 4 3 13 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 4 3 13 13 0.000 0.0 1 1.166 180.0 2 0.000 0.0 3
+#torsion 4 3 13 13 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
+#torsion 4 3 13 13 -0.750 0.0 1 -0.550 180.0 2 -0.250 0.0 3
+#torsion 4 3 13 13 -0.277 0.0 1 1.228 180.0 2 -0.694 0.0 3
+#torsion 4 3 13 13 -1.000 0.0 1 -1.900 180.0 2 -0.900 0.0 3
+torsion 4 3 13 21 -0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 44 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 4 3 13 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 48 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
+torsion 5 3 13 13 0.000 0.0 1 1.412 180.0 2 0.000 0.0 3
+#torsion 5 3 13 13 1.000 0.0 1 0.546 180.0 2 0.450 0.0 3
+torsion 5 3 13 44 5.260 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 5 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 3 13 13 1.454 0.0 1 -0.144 180.0 2 -0.775 0.0 3
+torsion 13 3 13 46 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
+torsion 20 3 13 13 0.000 0.0 1 0.000 180.0 2 -0.553 0.0 3
+torsion 20 3 13 46 0.000 0.0 1 0.000 180.0 2 0.132 0.0 3
+torsion 21 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 24 3 13 13 1.173 0.0 1 0.189 180.0 2 -1.200 0.0 3
+#torsion 35 3 13 13 3.250 0.0 1 -0.402 180.0 2 -0.136 0.0 3
+#torsion 35 3 13 13 3.260 0.0 1 0.440 180.0 2 0.600 0.0 3
+torsion 24 3 13 21 0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 3 13 24 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
+torsion 24 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 48 3 13 46 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
+torsion 52 3 13 13 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 52 3 13 44 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 52 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 65 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 65 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 107 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 20 13 0.000 0.0 1 5.124 180.0 2 0.000 0.0 3
+#torsion 4 3 29 13 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 4 3 20 48 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 13 3 20 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
+torsion 13 3 20 48 1.500 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 24 3 20 13 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 46 3 20 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
+torsion 48 3 20 13 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 3 3 24 13 0.400 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 3 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 3 24 5 0.000 0.0 1 6.603 180.0 2 0.000 0.0 3
+torsion 4 3 24 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 3 24 47 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 3 24 48 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 3 24 91 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 5 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 5 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 13 3 24 5 4.542 0.0 1 6.603 180.0 2 1.045 0.0 3
+torsion 13 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 13 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 13 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 20 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 20 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 24 3 24 3 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 24 3 24 13 4.600 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 46 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 46 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 47 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 48 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 48 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 48 3 24 84 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 48 3 24 87 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 84 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 84 3 24 84 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 84 3 24 87 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 87 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 87 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 87 3 24 84 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 87 3 24 87 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 0 3 47 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
+torsion 4 3 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 47 47 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 5 3 47 47 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 24 3 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 3 47 47 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 107 3 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 107 3 47 47 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 5 3 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 13 3 48 48 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 20 3 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 24 3 48 48 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 46 3 48 48 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 0 3 50 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
+torsion 4 3 50 47 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 5 3 50 47 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 13 3 50 47 0.800 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 13 3 56 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 3 56 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 3 56 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 3 56 45 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 0 3 60 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
+torsion 4 3 60 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
+torsion 4 3 82 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 82 57 2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 4 3 82 61 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 82 3 82 57 -2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 82 3 82 61 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 4 3 84 20 -0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 4 3 84 87 0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 84 3 84 20 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 84 3 84 87 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 48 3 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 3 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 4 3 87 84 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 4 3 87 87 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 24 3 87 84 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 24 3 87 87 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 4 3 107 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 13 3 107 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 3 109 109 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 5 3 109 109 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 0 4 106 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 10 2 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
+torsion 7 5 10 6 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
+torsion 7 5 13 2 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
+torsion 7 5 13 6 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
+torsion 7 5 13 13 -0.356 0.0 1 -0.174 180.0 2 0.492 0.0 3
+#torsion 7 5 13 13 4.478 0.0 1 -2.175 180.0 2 0.000 0.0 3
+#torsion 7 5 13 13 2.674 0.0 1 -2.883 180.0 2 1.026 0.0 3
+torsion 7 5 13 46 0.000 0.0 1 0.000 180.0 2 0.352 0.0 3
+#torsion 7 5 13 36 -2.589 0.0 1 -1.123 180.0 2 0.270 0.0 3
+#torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.476 0.0 3
+torsion 7 5 13 47 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 13 48 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 13 50 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 44 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 7 5 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 7 5 24 3 5.519 0.0 1 -6.700 180.0 2 0.581 0.0 3
+torsion 7 5 24 45 2.722 0.0 1 -5.154 180.0 2 0.000 0.0 3
+torsion 7 5 47 47 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
+torsion 7 5 48 48 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
+torsion 7 5 51 20 -1.257 0.0 1 -1.806 180.0 2 0.003 0.0 3
+torsion 7 5 56 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 7 5 64 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 64 5 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 79 13 -0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 79 23 0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 79 48 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 13 3 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
+torsion 0 13 13 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
+#torsion 0 13 13 13 -1.336 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 13 24 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
+torsion 1 13 13 1 -2.500 0.0 1 0.000 180.0 2 0.250 0.0 3
+torsion 1 13 13 5 0.000 0.0 1 0.000 180.0 2 0.540 0.0 3
+torsion 1 13 13 13 0.300 0.0 1 -0.400 180.0 2 0.400 0.0 3
+torsion 1 13 13 46 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 3 13 13 3 -0.550 0.0 1 0.000 180.0 2 1.000 0.0 3
+#torsion 3 13 13 3 0.800 0.0 1 0.000 180.0 2 0.900 0.0 3
+torsion 3 13 13 5 -6.180 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 13 13 -2.060 0.0 1 -0.313 180.0 2 0.315 0.0 3
+#torsion 3 13 13 13 -3.185 0.0 1 -0.825 180.0 2 0.493 0.0 3
+#torsion 3 13 13 13 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 15 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
+torsion 3 13 13 16 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
+torsion 3 13 13 24 -9.000 0.0 1 2.000 180.0 2 0.800 0.0 3
+torsion 3 13 13 46 0.000 0.0 1 0.000 180.0 2 -0.100 0.0 3
+#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 0.074 0.0 3
+#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.076 0.0 3
+torsion 3 13 13 48 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 80 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 5 13 13 5 9.508 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 5 13 13 5 12.234 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 5 13 13 5 9.066 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 13 -1.552 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 20 4.319 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 44 8.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 24 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
+torsion 5 13 13 46 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 13 13 13 13 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+#torsion 13 13 13 13 6.622 0. 1 0.948 180. 2 -1.388 0. 3 -2.118 180. 4
+torsion 13 13 13 15 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
+torsion 13 13 13 16 2.619 0.0 1 -0.620 180.0 2 0.258 0.0 3
+torsion 13 13 13 19 0.000 0.0 1 -0.650 180.0 2 0.000 0.0 3
+torsion 13 13 13 21 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 13 13 13 44 2.392 0.0 1 -0.674 180.0 2 0.550 0.0 3
+torsion 13 13 13 24 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+#torsion 13 13 13 35 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
+torsion 13 13 13 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 13 51 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+torsion 13 13 13 53 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
+torsion 13 13 13 65 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 13 13 13 66 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 13 13 13 79 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
+torsion 13 13 13 107 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
+torsion 13 13 13 108 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 15 13 13 46 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
+torsion 16 13 13 46 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
+torsion 19 13 13 46 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
+torsion 20 13 13 20 -0.550 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 20 13 13 46 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 21 13 13 21 -0.250 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 13 13 44 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 13 13 46 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 44 13 13 44 11.035 0.0 1 -0.968 180.0 2 0.270 0.0 3
+torsion 44 13 13 46 -1.013 0.0 1 -0.709 180.0 2 0.473 0.0 3
+torsion 44 13 13 48 -0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 13 13 46 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
+torsion 24 13 13 48 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 24 13 13 80 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 46 13 13 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 13 47 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
+torsion 46 13 13 48 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 51 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 13 53 0.000 0.0 1 0.000 180.0 2 0.384 0.0 3
+torsion 46 13 13 55 0.000 0.0 1 0.000 180.0 2 -0.582 0.0 3
+torsion 46 13 13 59 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 62 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 65 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 46 13 13 66 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 46 13 13 79 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
+#torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 13 80 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 82 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 83 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 84 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 87 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 88 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 102 0.000 0.0 1 0.000 180.0 2 -0.225 0.0 3
+torsion 46 13 13 104 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 13 107 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
+torsion 46 13 13 108 0.000 0.0 1 0.000 180.0 2 0.450 0.0 3
+torsion 46 13 13 109 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
+torsion 48 13 13 53 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 108 13 13 108 5.200 0.0 1 -0.500 180.0 2 0.000 0.0 3
+torsion 13 13 15 17 -0.759 0.0 1 -0.282 180.0 2 0.680 0.0 3
+torsion 46 13 15 17 0.000 0.0 1 0.000 180.0 2 0.480 0.0 3
+torsion 13 13 16 13 0.925 0.0 1 -0.576 180.0 2 0.677 0.0 3
+torsion 13 13 16 16 1.941 0.0 1 -0.836 180.0 2 0.935 0.0 3
+torsion 46 13 16 13 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
+torsion 46 13 16 16 0.000 0.0 1 0.000 180.0 2 0.558 0.0 3
+torsion 46 13 16 48 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
+torsion 0 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 19 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 20 13 -0.521 0.0 1 -2.018 180.0 2 1.996 0.0 3
+torsion 56 13 20 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
+torsion 57 13 20 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
+torsion 13 13 20 3 -1.220 0.0 1 -0.126 180.0 2 0.422 0.0 3
+torsion 13 13 20 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
+torsion 13 13 20 64 -1.420 0.0 1 -0.620 180.0 2 0.100 0.0 3
+torsion 46 13 20 0 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 3 0.000 0.0 1 0.000 180.0 2 0.198 0.0 3
+torsion 46 13 20 47 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 48 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 51 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 64 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 44 13 0.416 0.0 1 -0.128 180.0 2 0.695 0.0 3
+#torsion 13 13 33 13 1.536 0.0 1 -0.128 180.0 2 0.695 0.0 3
+#torsion 13 13 33 13 1.464 0.0 1 -0.128 180.0 2 0.695 0.0 3
+torsion 13 13 44 45 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
+#torsion 13 13 33 34 0.000 0.0 1 4.000 180.0 2 0.000 0.0 3
+#torsion 13 13 33 34 0.200 0.0 1 -0.417 180.0 2 0.418 0.0 3
+#torsion 13 13 33 34 0.819 0.0 1 -0.417 180.0 2 0.418 0.0 3
+#torsion 13 13 33 34 1.522 0.0 1 -0.417 180.0 2 0.418 0.0 3
+torsion 46 13 44 13 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
+torsion 46 13 44 45 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 46 13 44 48 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
+torsion 0 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 24 3 -2.365 0.0 1 0.912 180.0 2 -0.850 0.0 3
+torsion 3 13 24 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
+torsion 3 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 24 3 0.000 0.0 1 0.462 180.0 2 0.000 0.0 3
+#torsion 13 13 35 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+#torsion 13 13 35 3 1.130 0.0 1 -1.420 180.0 2 0.440 0.0 3
+torsion 13 13 24 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
+#torsion 13 13 35 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
+torsion 13 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 24 59 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 24 79 2.929 0.0 1 -2.533 180.0 2 0.497 0.0 3
+torsion 13 13 24 91 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 46 13 24 3 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
+torsion 46 13 24 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 24 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 24 79 1.362 0.0 1 -1.457 180.0 2 0.149 0.0 3
+torsion 48 13 24 59 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 47 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
+torsion 0 13 47 46 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 0 13 47 47 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 47 50 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 47 47 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 47 13 2.817 0.0 1 -0.169 180.0 2 0.543 0.0 3
+torsion 13 13 47 47 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 13 13 47 50 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 46 13 47 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 47 46 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
+torsion 46 13 47 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 47 50 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 47 110 0.000 0.0 1 0.000 180.0 2 -0.250 0.0 3
+torsion 47 13 47 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 47 13 47 46 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 0 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 48 48 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
+torsion 13 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 48 56 -0.500 0.0 1 0.500 180.0 2 -0.500 0.0 3
+torsion 21 13 48 48 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
+torsion 46 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 64 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 65 13 48 48 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 0 13 50 47 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 50 50 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 46 13 50 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 50 50 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 50 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 13 13 51 0 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
+torsion 13 13 51 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 51 20 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 13 13 53 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
+torsion 13 13 53 45 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
+torsion 46 13 53 13 0.000 0.0 1 0.000 180.0 2 0.302 0.0 3
+torsion 46 13 53 45 0.000 0.0 1 0.000 180.0 2 0.261 0.0 3
+torsion 46 13 53 48 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 53 54 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 55 45 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
+torsion 13 13 55 48 1.829 0.0 1 0.243 180.0 2 -0.498 0.0 3
+torsion 13 13 55 54 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
+torsion 46 13 55 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 55 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 55 48 0.000 0.0 1 0.000 180.0 2 0.177 0.0 3
+torsion 13 13 56 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 57 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 57 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+#torsion 13 13 47 0 0.000 0.0 1 -0.576 180.0 2 0.000 0.0 3
+torsion 13 13 57 62 2.756 0.0 1 -0.872 180.0 2 -3.680 0.0 3
+#torsion 13 13 47 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 13 13 57 82 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 20 13 57 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+#torsion 29 13 47 0 0.000 0.0 1 -1.876 180.0 2 0.000 0.0 3
+torsion 20 13 57 62 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 20 13 57 82 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 13 13 59 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 59 56 0.000 0.0 1 0.500 180.0 2 -0.500 0.0 3
+torsion 46 13 59 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 62 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 62 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 64 20 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
+torsion 46 13 64 52 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
+torsion 48 13 64 20 2.250 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 48 13 64 52 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 79 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 79 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 79 5 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 79 13 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 79 23 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 79 48 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 13 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 80 60 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 80 84 -0.714 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 80 60 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 80 84 0.000 0.0 1 0.000 180.0 2 -0.480 0.0 3
+torsion 13 13 82 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 82 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 83 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 83 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 84 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
+torsion 13 13 84 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 84 57 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
+torsion 21 13 84 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
+torsion 46 13 84 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 87 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
+torsion 13 13 87 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 13 87 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
+torsion 46 13 87 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 88 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 88 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 90 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 90 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 91 91 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 95 13 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
+torsion 13 13 95 46 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
+torsion 13 13 102 103 0.000 0.0 1 0.400 180.0 2 0.000 0.0 3
+torsion 46 13 102 103 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 104 13 1.000 0.0 1 -0.500 180.0 2 0.500 0.0 3
+torsion 46 13 104 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 0 13 105 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 105 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 13 13 105 62 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 13 13 105 82 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 20 13 105 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 20 13 105 62 3.132 0.0 1 -1.491 180.0 2 2.744 0.0 3
+#torsion 29 13 95 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 20 13 105 82 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 3 13 107 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
+torsion 13 13 107 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+torsion 13 13 107 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
+#torsion 13 13 97 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
+torsion 46 13 107 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
+torsion 46 13 107 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 107 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 108 13 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 108 45 0.000 0.0 1 0.000 180.0 2 0.260 0.0 3
+torsion 46 13 108 13 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
+torsion 46 13 108 20 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 108 45 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
+torsion 13 13 109 109 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 46 13 109 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 109 46 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
+torsion 46 13 109 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 17 15 48 0 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+#torsion 17 15 38 0 -3.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 17 15 48 48 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 13 16 16 13 0.000 0.0 1 -7.414 180.0 2 1.705 0.0 3
+torsion 13 16 48 48 0.000 0.0 1 0.600 180.0 2 0.000 0.0 3
+torsion 13 16 48 56 1.600 0.0 1 5.100 180.0 2 0.000 0.0 3
+torsion 13 16 59 56 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
+torsion 84 16 82 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 84 16 82 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 16 84 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 16 84 83 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 16 84 88 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 16 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 18 48 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 18 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 18 18 56 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 18 18 56 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 19 19 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 109 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 19 19 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 19 19 109 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 19 47 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 19 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 19 47 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 20 44 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 20 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 20 47 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
+torsion 13 20 47 46 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 13 20 47 47 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 13 20 47 50 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 3 20 48 48 0.000 0.0 1 2.500 180.0 2 0.000 0.0 3
+torsion 13 20 48 48 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 13 20 48 56 0.400 0.0 1 5.500 180.0 2 0.000 0.0 3
+torsion 64 20 48 48 0.000 0.0 1 2.990 180.0 2 0.000 0.0 3
+torsion 13 20 51 5 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
+torsion 13 20 51 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
+torsion 13 20 51 20 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
+torsion 13 20 51 46 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 13 20 56 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 13 20 59 56 0.000 0.0 1 5.200 180.0 2 0.000 0.0 3
+torsion 0 20 64 52 0.000 0.0 1 0.000 180.0 2 0.562 0.0 3
+torsion 13 20 64 13 3.500 0.0 1 -3.300 180.0 2 1.500 0.0 3
+torsion 13 20 64 52 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 13 29 54 42 0.900 0.0 1 -2.930 180.0 2 2.640 0.0 3
+torsion 48 20 64 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 84 20 82 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 20 84 88 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 84 20 84 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 84 20 84 87 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 108 20 108 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 108 20 108 20 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 44 44 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 44 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 45 44 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 44 48 48 -7.582 0.0 1 3.431 180.0 2 3.198 0.0 3
+torsion 45 44 48 48 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 59 44 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 82 44 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 84 44 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 44 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 44 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 44 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 44 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 0 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 3 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 13 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 59 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 82 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 84 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 0 24 59 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 24 59 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 45 24 59 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 24 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 24 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 24 79 48 2.074 0.0 1 -2.966 180.0 2 2.473 0.0 3
+torsion 45 24 79 48 1.671 0.0 1 -4.901 180.0 2 0.669 0.0 3
+torsion 13 24 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 24 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+#torsion 34 35 72 16 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 45 24 82 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+#torsion 34 35 72 29 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 45 24 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 82 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 0 24 84 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 84 84 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 45 24 84 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 24 84 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 84 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 84 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 3 24 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 86 56 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 47 24 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 47 24 86 56 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 24 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 24 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 24 91 89 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+torsion 3 24 91 91 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+torsion 45 24 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 45 24 91 89 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 45 24 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 24 106 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 47 46 47 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 47 46 47 46 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 0 47 47 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 0 47 47 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 3 47 47 24 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 3 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 5 47 47 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 5 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 20 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 19 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 20 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 21 47 47 21 -1.600 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 21 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 48 48 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
+torsion 46 47 48 48 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 47 48 56 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 47 48 48 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 13 47 50 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 24 47 50 3 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 0 47 84 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 47 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 47 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 47 86 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 47 86 24 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 47 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 47 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 13 47 110 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 47 110 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 48 48 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 1 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 1 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 21 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 21 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 44 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 47 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 55 0.0 0. 1 1.62 180. 2 0.0 0. 3 -0.44 180. 4
+torsion 48 48 48 60 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 65 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 66 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 109 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 60 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 65 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 66 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 109 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 48 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 50 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 48 48 50 47 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 56 48 50 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 56 48 50 47 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 48 48 53 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 48 48 53 54 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 48 55 45 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 48 48 55 45 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
+torsion 55 48 55 13 0.000 0.0 1 7.936 180.0 2 0.000 0.0 3
+torsion 55 48 55 45 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
+torsion 60 48 55 45 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 0 48 56 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 60 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
+torsion 0 48 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 48 48 79 13 0.000 0.0 1 -0.900 180.0 2 0.000 0.0 3
+torsion 48 48 79 24 1.656 0.0 1 -0.768 180.0 2 -0.117 0.0 3
+torsion 48 48 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 86 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 86 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 88 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 101 13 0.000 0.0 1 3.651 180.0 2 0.000 0.0 3
+torsion 48 48 102 103 0.000 0.0 1 1.150 180.0 2 0.000 0.0 3
+torsion 48 48 109 13 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
+torsion 48 48 109 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 48 48 109 109 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 0 50 50 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 3 50 50 3 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 50 50 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 50 50 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 50 50 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+#torsion 13 40 40 37 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
+torsion 46 50 50 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 50 50 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 50 47 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
+torsion 13 50 109 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 50 109 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 50 109 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 50 109 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 50 109 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 109 13 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 109 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 109 109 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
+torsion 13 53 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 53 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 55 59 0 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 13 56 56 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 56 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 56 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 59 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 59 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 62 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 56 82 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+#torsion 0 46 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 48 56 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 56 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 57 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 45 57 60 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 0 57 61 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 57 62 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 57 81 0 0.000 0.0 1 3.050 180.0 2 0.000 0.0 3
+torsion 0 57 82 0 0.000 0.0 1 4.650 180.0 2 0.000 0.0 3
+#torsion 0 47 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 57 82 49 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 45 57 82 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 0 57 84 0 0.000 0.0 1 2.800 180.0 2 0.000 0.0 3
+#torsion 0 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+#torsion 0 47 74 0 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 45 57 84 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 61 57 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 84 57 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 60 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 60 61 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 60 80 0 0.000 0.0 1 3.350 180.0 2 0.000 0.0 3
+torsion 0 60 81 0 0.000 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 0 60 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 60 87 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 60 60 87 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 61 61 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 62 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 82 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+#torsion 0 51 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 82 49 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 83 61 82 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 88 61 82 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 88 61 82 20 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 61 83 0 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
+torsion 82 61 83 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 61 83 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 61 84 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 88 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 61 88 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 80 84 0 0.000 0.0 1 13.050 180.0 2 0.000 0.0 3
+torsion 0 82 84 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 16 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 20 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 57 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 61 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 82 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+#torsion 0 72 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 83 84 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 0 83 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 83 84 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 83 84 16 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 83 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 61 83 84 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 61 83 84 20 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 61 83 84 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 83 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 61 83 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 61 83 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 84 83 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 84 84 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 0 84 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 16 84 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 84 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 0 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 16 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 20 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 57 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 84 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 84 87 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 84 87 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 84 88 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 16 84 88 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 16 84 88 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 20 84 88 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 84 88 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 84 88 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 86 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 86 56 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 88 61 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 56 86 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 87 87 20 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 87 87 57 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 87 87 87 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 49 87 87 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 4 89 90 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 89 90 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 89 90 48 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 89 90 91 0.000 0.0 1 20.000 180.0 2 0.000 0.0 3
+torsion 91 89 90 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 91 89 90 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 91 89 90 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 91 89 90 91 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 0 89 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 89 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 89 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 90 89 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 90 89 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 90 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 90 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 90 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 91 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 91 91 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 91 91 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 91 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 91 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 91 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 91 91 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 109 109 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 109 109 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 50 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 50 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 109 109 109 109 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
+
+
+ ################################################################
+ ## ##
+ ## Additional Torsional Parameter Values Used with OPLS-AA ##
+ ## ##
+ ## The torsions listed below were added to official OPLS-AA ##
+ ## to complete the set needed for proteins; the values were ##
+ ## obtained by analogy from the closest OPLS-AA torsions; ##
+ ## most of the added values are for HIP or N-terminal AAs; ##
+ ## ##
+ ################################################################
+
+
+torsion 24 3 13 53 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
+torsion 52 3 13 24 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 3 13 13 53 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 13 83 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 84 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 85 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 5 13 13 53 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
+torsion 15 13 13 53 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
+torsion 16 13 13 53 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
+torsion 13 13 13 55 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
+torsion 24 13 13 83 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 53 13 13 83 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 13 13 84 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 53 13 13 84 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 13 13 85 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 46 13 13 85 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 53 13 13 85 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 53 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
+torsion 3 13 53 54 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
+torsion 13 13 53 54 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
+torsion 46 13 55 54 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 85 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 85 57 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
+torsion 46 13 85 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 55 48 55 54 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
+torsion 0 48 81 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 57 85 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 0 85 85 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+
+
+ ################################################################
+ ## ##
+ ## Additional Torsional Parameter Values Used with OPLS-AA ##
+ ## ##
+ ## The torsions listed below were added to official OPLS-AA ##
+ ## to complete the values needed for selected organics ##
+ ## ##
+ ################################################################
+
+
+torsion 13 13 13 20 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+torsion 13 13 13 47 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+
+
+ ########################################
+ ## ##
+ ## Atomic Partial Charge Parameters ##
+ ## ##
+ ########################################
+
+
+charge 1 -0.2200
+charge 2 0.2200
+charge 3 0.5500
+charge 4 -0.5000
+charge 5 -0.5800
+charge 6 0.0800
+charge 7 0.4500
+charge 8 0.0000
+charge 9 0.0000
+charge 10 0.0000
+charge 11 0.0000
+charge 12 0.0000
+charge 13 0.0000
+charge 14 0.0000
+charge 15 0.0000
+charge 16 0.0000
+charge 17 0.0000
+charge 18 0.0000
+charge 19 0.0000
+charge 20 -0.7000
+charge 21 0.4350
+charge 22 0.2650
+charge 23 0.2650
+charge 24 -0.4700
+charge 25 -0.4500
+charge 26 -0.4700
+charge 27 -0.3000
+charge 28 0.2350
+charge 29 0.2700
+charge 30 0.1800
+charge 31 0.1800
+charge 32 0.2350
+charge 33 0.2350
+charge 34 0.3000
+charge 35 0.3000
+charge 36 -0.4300
+charge 37 0.2800
+charge 38 0.1500
+charge 39 0.2650
+charge 40 0.2650
+charge 41 -0.5000
+charge 42 0.2500
+charge 43 0.2500
+charge 44 0.5000
+charge 45 -0.2500
+charge 46 0.4200
+charge 47 -0.1400
+charge 48 0.2480
+charge 49 -0.0620
+charge 50 0.1390
+charge 51 -0.4590
+charge 52 0.1600
+charge 53 -0.5000
+charge 54 -0.5700
+charge 55 0.5000
+charge 56 0.2850
+charge 57 0.0000
+charge 58 0.0000
+charge 59 0.0000
+charge 60 0.0000
+charge 61 0.0000
+charge 62 0.0000
+charge 63 -0.8340
+charge 64 0.4170
+charge 65 0.0000
+charge 66 0.5200
+charge 67 -1.0400
+charge 68 -0.8220
+charge 69 0.4110
+charge 70 0.0000
+charge 71 0.5110
+charge 72 -1.0220
+charge 73 0.0000
+charge 74 0.2410
+charge 75 -0.2410
+charge 76 -0.8200
+charge 77 0.4100
+charge 78 -1.0200
+charge 79 0.3400
+charge 80 -0.1800
+charge 81 -0.1200
+charge 82 -0.0600
+charge 83 -0.2400
+charge 84 0.0000
+charge 85 0.0600
+charge 86 0.0000
+charge 87 -0.1150
+charge 88 -0.2300
+charge 89 0.1150
+charge 90 -0.1150
+charge 91 0.1150
+charge 92 0.0000
+charge 93 -0.0650
+charge 94 -0.0050
+charge 95 -0.1150
+charge 96 -0.6830
+charge 97 0.4180
+charge 98 0.0400
+charge 99 0.1450
+charge 100 0.2050
+charge 101 0.2650
+charge 102 0.1263
+charge 103 0.5323
+charge 104 -0.6351
+charge 105 0.4286
+charge 106 -0.2057
+charge 107 0.0825
+charge 108 0.1500
+charge 109 -0.5850
+charge 110 0.4350
+charge 111 -0.7000
+charge 112 0.4350
+charge 113 -0.7300
+charge 114 0.4650
+charge 115 0.1450
+charge 116 0.2050
+charge 117 0.2650
+charge 118 0.0600
+charge 119 -0.1700
+charge 120 0.0000
+charge 121 -0.2850
+charge 122 -0.4000
+charge 123 0.1100
+charge 124 0.1400
+charge 125 0.1700
+charge 126 0.2000
+charge 127 0.0300
+charge 128 -0.4000
+charge 129 -0.7000
+charge 130 0.4350
+charge 131 0.2000
+charge 132 0.1000
+charge 133 0.2650
+charge 134 0.1000
+charge 135 0.3000
+charge 136 0.1000
+charge 137 0.3650
+charge 138 0.1000
+charge 139 0.4000
+charge 140 0.4650
+charge 141 0.0850
+charge 142 -0.3350
+charge 143 -0.4700
+charge 144 -0.4350
+charge 145 -0.2175
+charge 146 0.1550
+charge 147 0.2350
+charge 148 0.0600
+charge 149 0.1200
+charge 150 0.1800
+charge 151 0.0375
+charge 152 0.0975
+charge 153 0.1575
+charge 154 0.2175
+charge 155 0.0375
+charge 156 0.0975
+charge 157 0.1575
+charge 158 0.2175
+charge 159 0.0000
+charge 160 0.2000
+charge 161 0.2600
+charge 162 0.3200
+charge 163 -0.0550
+charge 164 -0.3200
+charge 165 0.0800
+charge 166 0.1400
+charge 167 0.2000
+charge 168 -0.1200
+charge 169 0.0050
+charge 170 0.1025
+charge 171 0.1400
+charge 172 0.2000
+charge 173 0.7000
+charge 174 0.5650
+charge 175 0.5850
+charge 176 0.6150
+charge 177 0.5000
+charge 178 -0.5000
+charge 179 -0.7600
+charge 180 -0.5000
+charge 181 -0.1400
+charge 182 0.3800
+charge 183 0.3000
+charge 184 0.0200
+charge 185 -0.1100
+charge 186 0.0800
+charge 187 -0.0500
+charge 188 0.0100
+charge 189 0.1420
+charge 190 -0.3900
+charge 191 -0.5420
+charge 192 0.3330
+charge 193 -0.4900
+charge 194 0.4200
+charge 195 -0.4200
+charge 196 0.3700
+charge 197 0.0600
+charge 198 -0.1200
+charge 199 -0.0600
+charge 200 0.0000
+charge 201 0.0600
+charge 202 0.0350
+charge 203 0.3950
+charge 204 -0.4300
+charge 205 0.1800
+charge 206 -0.1800
+charge 207 -0.3850
+charge 208 0.0850
+charge 209 0.5200
+charge 210 -0.4400
+charge 211 -0.5300
+charge 212 0.4500
+charge 213 0.7000
+charge 214 -0.8000
+charge 215 -0.2800
+charge 216 -0.2200
+charge 217 -0.1600
+charge 218 -0.1000
+charge 219 0.4500
+charge 220 -0.4500
+charge 221 0.0000
+charge 222 0.4700
+charge 223 -0.4700
+charge 224 0.0600
+charge 225 0.0400
+charge 226 -0.0200
+charge 227 0.1000
+charge 228 -0.0900
+charge 229 -0.4000
+charge 230 -0.3000
+charge 231 0.0000
+charge 232 0.3500
+charge 233 0.3300
+charge 234 0.1300
+charge 235 0.1900
+charge 236 0.2500
+charge 237 0.3100
+charge 238 0.2300
+charge 239 0.1700
+charge 240 0.1100
+charge 241 0.0900
+charge 242 0.1500
+charge 243 -0.8000
+charge 244 0.4600
+charge 245 0.6400
+charge 246 -0.7000
+charge 247 0.4400
+charge 248 0.2000
+charge 249 -0.1100
+charge 250 0.1900
+charge 251 -0.0500
+charge 252 -0.2000
+charge 253 0.3100
+charge 254 -0.4600
+charge 255 0.3600
+charge 256 -0.8500
+charge 257 0.3700
+charge 258 -0.1500
+charge 259 0.1000
+charge 260 -0.0400
+charge 261 0.1000
+charge 262 -0.6000
+charge 263 0.5000
+charge 264 -0.5100
+charge 265 0.4500
+charge 266 -0.0700
+charge 267 0.0800
+charge 268 0.4100
+charge 269 -0.4000
+charge 270 0.3600
+charge 271 -0.4200
+charge 272 0.1000
+charge 273 0.1000
+charge 274 -0.1400
+charge 275 0.0800
+charge 276 -0.5600
+charge 277 0.5500
+charge 278 -0.5400
+charge 279 0.4600
+charge 280 -0.0600
+charge 281 0.1000
+charge 282 0.3800
+charge 283 -0.4800
+charge 284 -0.7900
+charge 285 0.3850
+charge 286 0.3550
+charge 287 0.1000
+charge 288 0.1000
+charge 289 -0.5300
+charge 290 0.2200
+charge 291 -0.5500
+charge 292 0.3800
+charge 293 0.1500
+charge 294 0.4400
+charge 295 -0.4900
+charge 296 0.2000
+charge 297 -0.5000
+charge 298 0.2000
+charge 299 -0.8100
+charge 300 0.3850
+charge 301 0.3550
+charge 302 0.2000
+charge 303 0.3500
+charge 304 -0.5600
+charge 305 0.4600
+charge 306 -0.5100
+charge 307 0.3400
+charge 308 0.1200
+charge 309 0.5200
+charge 310 0.3800
+charge 311 -0.8000
+charge 312 0.4000
+charge 313 -0.5100
+charge 314 -0.0100
+charge 315 0.1200
+charge 316 -0.0100
+charge 317 0.1400
+charge 318 -0.0100
+charge 319 0.1300
+charge 320 -0.6400
+charge 321 0.6500
+charge 322 -0.7400
+charge 323 0.6600
+charge 324 -0.0600
+charge 325 0.1000
+charge 326 0.4900
+charge 327 -0.3000
+charge 328 0.4800
+charge 329 -0.8100
+charge 330 0.4600
+charge 331 0.4300
+charge 332 0.1400
+charge 333 0.1400
+charge 334 0.0100
+charge 335 0.1600
+charge 336 0.7800
+charge 337 -0.6600
+charge 338 -0.4300
+charge 339 0.2000
+charge 340 0.1800
+charge 341 -0.0600
+charge 342 0.1200
+charge 343 -1.0000
+charge 344 -1.0000
+charge 345 -1.0000
+charge 346 -1.0000
+charge 347 1.0000
+charge 348 1.0000
+charge 349 1.0000
+charge 350 1.0000
+charge 351 1.0000
+charge 352 1.0000
+charge 353 2.0000
+charge 354 2.0000
+charge 355 2.0000
+charge 356 2.0000
+charge 357 -0.4000
+charge 358 0.1000
+charge 359 -0.9000
+charge 360 -0.2000
+charge 361 0.0600
+charge 362 -0.9800
+charge 363 -1.0700
+charge 364 0.1900
+charge 365 0.5100
+charge 366 -0.8200
+charge 367 -0.3000
+charge 368 0.0700
+charge 369 -1.3100
+charge 370 0.4000
+charge 371 -0.4000
+charge 372 0.0800
+charge 373 0.0000
+charge 374 0.0700
+charge 375 -0.9800
+charge 376 -1.3000
+charge 377 0.3000
+charge 378 2.5000
+charge 379 -0.2500
+charge 380 -0.8650
+charge 381 1.6200
+charge 382 -0.9200
+charge 383 -0.6000
+charge 384 0.3000
+charge 385 -0.0300
+charge 386 1.9200
+charge 387 -1.1200
+charge 388 -0.7000
+charge 389 0.4400
+charge 390 -0.1000
+charge 391 1.6200
+charge 392 -0.9700
+charge 393 -0.6300
+charge 394 0.2800
+charge 395 -0.0200
+charge 396 -0.5100
+charge 397 0.0800
+charge 398 -0.1400
+charge 399 0.3200
+charge 400 0.0200
+charge 401 -0.0400
+charge 402 -0.4700
+charge 403 0.1200
+charge 404 0.1400
+charge 405 0.2400
+charge 406 0.5100
+charge 407 -0.4300
+charge 408 -0.3300
+charge 409 0.1600
+charge 410 0.0300
+charge 411 0.6350
+charge 412 0.6250
+charge 413 0.1350
+charge 414 -0.2150
+charge 415 1.4800
+charge 416 -0.6800
+charge 417 -0.5400
+charge 418 0.1800
+charge 419 -1.0000
+charge 420 0.4400
+charge 421 -0.8000
+charge 422 0.4100
+charge 423 0.1800
+charge 424 0.0300
+charge 425 0.3900
+charge 426 -0.0600
+charge 427 -0.1800
+charge 428 0.0600
+charge 429 0.0000
+charge 430 0.0300
+charge 431 0.1900
+charge 432 0.2200
+charge 433 0.2500
+charge 434 1.3740
+charge 435 -0.6870
+charge 436 0.2450
+charge 437 0.1300
+charge 438 -0.4200
+charge 439 -0.0350
+charge 440 0.0250
+charge 441 0.0750
+charge 442 -0.0550
+charge 443 0.1300
+charge 444 -0.5700
+charge 445 0.4200
+charge 446 -0.0050
+charge 447 0.2950
+charge 448 -0.0150
+charge 449 0.0150
+charge 450 0.3850
+charge 451 0.2150
+charge 452 -0.4900
+charge 453 -0.5400
+charge 454 0.4600
+charge 455 -0.1150
+charge 456 0.0550
+charge 457 0.1150
+charge 458 -0.0300
+charge 459 0.0850
+charge 460 0.0000
+charge 461 -0.6780
+charge 462 0.4730
+charge 463 -0.4470
+charge 464 0.2270
+charge 465 0.0120
+charge 466 0.1550
+charge 467 0.0650
+charge 468 -0.4680
+charge 469 0.1920
+charge 470 0.0420
+charge 471 -0.8390
+charge 472 0.8740
+charge 473 0.6530
+charge 474 -0.6890
+charge 475 -0.0320
+charge 476 0.0110
+charge 477 0.1970
+charge 478 -0.3310
+charge 479 0.3780
+charge 480 -0.1600
+charge 481 -0.0090
+charge 482 0.1220
+charge 483 -0.2390
+charge 484 -0.1630
+charge 485 -0.1490
+charge 486 0.3170
+charge 487 0.1550
+charge 488 0.1180
+charge 489 -0.0590
+charge 490 -0.4910
+charge 491 0.2460
+charge 492 -0.3200
+charge 493 -0.0340
+charge 494 0.3010
+charge 495 0.0720
+charge 496 0.1500
+charge 497 0.1350
+charge 498 -0.2570
+charge 499 0.2750
+charge 500 -0.5630
+charge 501 0.1850
+charge 502 -0.2860
+charge 503 0.3060
+charge 504 0.0780
+charge 505 0.0750
+charge 506 0.1870
+charge 507 -0.1900
+charge 508 -0.0190
+charge 509 -0.1540
+charge 510 0.1420
+charge 511 0.1260
+charge 512 -0.2570
+charge 513 0.5110
+charge 514 -0.5900
+charge 515 0.1690
+charge 516 -0.1480
+charge 517 0.0430
+charge 518 0.0910
+charge 519 0.1810
+charge 520 -0.1220
+charge 521 -0.4130
+charge 522 0.4050
+charge 523 -0.4550
+charge 524 0.2500
+charge 525 0.0530
+charge 526 0.1840
+charge 527 0.0980
+charge 528 -0.5000
+charge 529 0.0010
+charge 530 -0.3900
+charge 531 -0.2700
+charge 532 -0.1270
+charge 533 -0.1080
+charge 534 -0.2580
+charge 535 0.2200
+charge 536 0.2250
+charge 537 0.3760
+charge 538 0.1470
+charge 539 0.1720
+charge 540 0.1550
+charge 541 0.1070
+charge 542 0.1100
+charge 543 0.1400
+charge 544 -0.6940
+charge 545 0.4250
+charge 546 -0.3590
+charge 547 -0.0080
+charge 548 -0.1970
+charge 549 -0.1120
+charge 550 -0.0700
+charge 551 -0.3070
+charge 552 0.5630
+charge 553 -0.0510
+charge 554 0.0280
+charge 555 0.1460
+charge 556 0.1190
+charge 557 0.1330
+charge 558 0.1130
+charge 559 0.1140
+charge 560 0.1570
+charge 561 -0.7600
+charge 562 0.6790
+charge 563 -0.7880
+charge 564 0.7360
+charge 565 0.0380
+charge 566 0.3430
+charge 567 -0.6420
+charge 568 0.4520
+charge 569 -0.6820
+charge 570 0.0240
+charge 571 0.1010
+charge 572 0.0860
+charge 573 0.4130
+charge 574 -0.0300
+charge 575 0.2420
+charge 576 -0.5150
+charge 577 0.2280
+charge 578 -0.2990
+charge 579 0.1010
+charge 580 0.0680
+charge 581 0.2050
+charge 582 -0.9510
+charge 583 0.9650
+charge 584 -0.0140
+charge 585 0.1300
+charge 586 0.0520
+charge 587 -0.5990
+charge 588 0.3920
+charge 589 -0.3480
+charge 590 0.0200
+charge 591 -0.0420
+charge 592 0.3470
+charge 593 -0.1960
+charge 594 0.0320
+charge 595 0.1460
+charge 596 0.1080
+charge 597 0.1400
+charge 598 0.1220
+charge 599 0.1660
+charge 600 -0.5800
+charge 601 0.1730
+charge 602 -0.3950
+charge 603 -0.1990
+charge 604 0.1180
+charge 605 0.0930
+charge 606 0.2080
+charge 607 0.0980
+charge 608 -0.1390
+charge 609 -0.0790
+charge 610 0.0990
+charge 611 -0.1680
+charge 612 -0.1080
+charge 613 -0.1890
+charge 614 -0.1290
+charge 615 -0.1690
+charge 616 -0.1090
+charge 617 -0.1380
+charge 618 -0.0780
+charge 619 -0.0250
+charge 620 0.0350
+charge 621 -0.0380
+charge 622 0.0220
+charge 623 -0.3340
+charge 624 0.2550
+charge 625 0.5230
+charge 626 0.5000
+charge 627 -0.1400
+charge 628 0.2275
+charge 629 0.1400
+charge 630 -0.0080
+charge 631 0.5880
+charge 632 -0.1030
+charge 633 -0.3320
+charge 634 0.0400
+charge 635 0.3420
+charge 636 -0.0500
+charge 637 -0.2050
+charge 638 3.0000
+charge 639 4.0000
+charge 640 3.0000
+charge 641 0.6190
+charge 642 -0.3950
+charge 643 0.1740
+charge 644 3.0000
+charge 645 3.0000
+charge 646 3.0000
+charge 647 3.0000
+charge 648 3.0000
+charge 649 -0.3440
+charge 650 -0.6280
+charge 651 0.2000
+charge 652 -0.1200
+charge 653 -0.0600
+charge 654 0.0000
+charge 655 -0.2300
+charge 656 0.0300
+charge 657 -0.0990
+charge 658 0.0990
+charge 659 0.2200
+charge 660 -0.2200
+charge 661 0.1300
+charge 662 -0.1300
+charge 663 -0.2200
+charge 664 0.2200
+charge 665 0.1500
+charge 666 0.4500
+charge 667 -0.2000
+charge 668 0.2000
+charge 669 -0.2000
+charge 670 0.2000
+charge 671 -0.2000
+charge 672 0.1000
+charge 673 -0.1000
+charge 674 0.0550
+charge 675 -0.2200
+charge 676 0.0650
+charge 677 0.0130
+charge 678 -0.1060
+charge 679 -0.0900
+charge 680 -0.1190
+charge 681 0.1410
+charge 682 0.1290
+charge 683 0.8270
+charge 684 -0.8850
+charge 685 0.4260
+charge 686 0.4650
+charge 687 0.1190
+charge 688 -0.0200
+charge 689 0.0400
+charge 690 -0.6200
+charge 691 -0.7850
+charge 692 -0.7850
+charge 693 0.5500
+charge 694 -0.5600
+charge 695 0.4600
+charge 696 -0.0800
+charge 697 -0.0200
+charge 698 0.0400
+charge 699 0.1000
+charge 700 0.0600
+charge 701 0.5400
+charge 702 -0.3700
+charge 703 0.0200
+charge 704 0.0600
+charge 705 0.0800
+charge 706 0.1400
+charge 707 0.2000
+charge 708 0.6500
+charge 709 0.0900
+charge 710 0.0350
+charge 711 -0.9000
+charge 712 -0.5000
+charge 713 0.8600
+charge 714 -0.4500
+charge 715 0.2100
+charge 716 0.1600
+charge 717 -0.1000
+charge 718 0.0300
+charge 719 0.0300
+charge 720 0.0600
+charge 721 -0.7800
+charge 722 0.9684
+charge 723 -0.5081
+charge 724 -0.0080
+charge 725 0.1720
+charge 726 1.3400
+charge 727 -0.3900
+charge 728 0.7940
+charge 729 -0.5980
+charge 730 -0.9000
+charge 731 -0.7800
+charge 732 -0.6300
+charge 733 0.0000
+charge 734 0.0200
+charge 735 0.0300
+charge 736 0.0600
+charge 737 0.0800
+charge 738 0.0900
+charge 739 0.3600
+charge 740 0.3800
+charge 741 0.0600
+charge 742 0.1200
+charge 743 0.1800
+charge 744 0.1400
+charge 745 0.1500
+charge 746 0.1800
+charge 747 0.2000
+charge 748 0.2100
+charge 749 0.1150
+charge 750 0.1750
+charge 751 0.2350
+charge 752 0.1950
+charge 753 0.1525
+charge 754 0.1350
+charge 755 -0.2100
+charge 756 0.2000
+charge 757 0.0100
+charge 758 0.0100
+charge 759 0.0100
+charge 760 0.0600
+charge 761 0.4500
+charge 762 0.4800
+charge 763 0.5100
+charge 764 -0.6550
+charge 765 0.3900
+charge 766 -0.5000
+charge 767 -0.5600
+charge 768 -0.6000
+charge 769 0.0000
+charge 770 -0.1000
+charge 771 0.2900
+charge 772 0.0900
+charge 773 0.1500
+charge 774 0.2100
+charge 775 0.2700
+charge 776 0.0960
+charge 777 -0.0390
+charge 778 0.0270
+charge 779 0.0110
+charge 780 0.0740
+charge 781 -0.0290
+charge 782 0.7000
+charge 783 -0.3520
+charge 784 -0.7090
+charge 785 0.3170
+charge 786 -0.2200
+charge 787 0.0200
+charge 788 0.1000
+charge 789 0.1200
+charge 790 0.2200
+charge 791 0.3600
+charge 792 0.2400
+charge 793 0.1200
+charge 794 0.4800
+charge 795 -0.1200
+charge 796 0.2500
+charge 797 0.1500
+charge 798 -0.0800
+charge 799 -0.1060
+charge 800 -0.2000
+charge 801 -0.0060
+charge 802 0.1030
+charge 803 0.0970
+charge 804 0.2000
+charge 805 -0.2000
+charge 806 -0.0060
+charge 807 0.1030
+charge 808 0.0970
+charge 809 0.2000
+charge 810 -0.0800
+charge 811 -0.0800
+charge 812 -0.0800
+charge 813 0.1000
+charge 814 -0.2500
+charge 815 0.6000
+charge 816 -0.1500
+charge 817 -0.0250
+charge 818 -0.0450
+charge 819 0.1450
+charge 820 0.8880
+charge 821 1.0030
+charge 822 -0.6580
+charge 823 -0.6340
+charge 824 0.4110
+charge 825 -0.4420
+charge 826 0.4350
+charge 827 0.2250
+charge 828 0.2550
+charge 829 -0.0340
+charge 830 0.0030
+charge 831 0.3000
+charge 832 -0.0400
+charge 833 -0.0575
+charge 834 2.0000
+charge 835 -0.0700
+charge 836 0.0300
+charge 837 0.1300
+charge 838 -0.1300
+charge 839 0.1000
+charge 840 -0.6850
+charge 841 0.1550
+charge 842 -0.1000
+charge 843 -0.4270
+charge 844 0.2180
+charge 845 0.6000
+charge 846 -0.6000
+charge 847 -0.3600
+charge 848 0.0000
+charge 849 0.0600
+charge 850 0.1200
+charge 851 0.1800
+charge 852 0.0600
+charge 853 0.5700
+charge 854 -0.5700
+charge 855 0.0000
+charge 856 0.0200
+charge 857 -0.0400
+charge 858 0.0000
+charge 859 0.0600
+charge 860 -0.0700
+charge 861 -0.1400
+charge 862 0.1700
+charge 863 0.1100
+charge 864 0.1500
+charge 865 0.1700
+charge 866 1.0000
+charge 867 0.8500
+charge 868 0.7000
+charge 869 0.5500
+charge 870 -0.1000
+charge 871 -0.4300
+charge 872 -0.3700
+charge 873 -0.3100
+charge 874 -0.2500
+charge 875 -1.0000
+charge 876 -1.0000
+charge 877 -1.0000
+charge 878 -1.0000
+charge 879 1.0000
+charge 880 1.0000
+charge 881 1.0000
+charge 882 1.0000
+charge 883 1.0000
+charge 884 2.0000
+charge 885 2.0000
+charge 886 2.0000
+charge 887 2.0000
+charge 888 -0.0500
+charge 889 0.0500
+charge 890 0.1500
+charge 891 0.2500
+charge 892 0.1000
+charge 893 0.1150
+charge 894 0.1350
+charge 895 0.0150
+charge 896 0.1550
+charge 897 0.0000
+charge 898 -0.1150
+charge 899 0.1500
+charge 900 -0.2500
+charge 901 -0.1000
+charge 902 0.0500
+charge 903 -0.1000
+charge 904 0.2000
+charge 905 -0.2500
+charge 906 0.0880
+
+
+ ########################################
+ ## ##
+ ## Biopolymer Atom Type Conversions ##
+ ## ##
+ ########################################
+
+
+biotype 1 N "Glycine" 180
+biotype 2 CA "Glycine" 165
+biotype 3 C "Glycine" 177
+biotype 4 HN "Glycine" 183
+biotype 5 O "Glycine" 178
+biotype 6 HA "Glycine" 85
+biotype 7 N "Alanine" 180
+biotype 8 CA "Alanine" 166
+biotype 9 C "Alanine" 177
+biotype 10 HN "Alanine" 183
+biotype 11 O "Alanine" 178
+biotype 12 HA "Alanine" 85
+biotype 13 CB "Alanine" 80
+biotype 14 HB "Alanine" 85
+biotype 15 N "Valine" 180
+biotype 16 CA "Valine" 166
+biotype 17 C "Valine" 177
+biotype 18 HN "Valine" 183
+biotype 19 O "Valine" 178
+biotype 20 HA "Valine" 85
+biotype 21 CB "Valine" 82
+biotype 22 HB "Valine" 85
+biotype 23 CG1 "Valine" 80
+biotype 24 HG1 "Valine" 85
+biotype 25 CG2 "Valine" 80
+biotype 26 HG2 "Valine" 85
+biotype 27 N "Leucine" 180
+biotype 28 CA "Leucine" 166
+biotype 29 C "Leucine" 177
+biotype 30 HN "Leucine" 183
+biotype 31 O "Leucine" 178
+biotype 32 HA "Leucine" 85
+biotype 33 CB "Leucine" 81
+biotype 34 HB "Leucine" 85
+biotype 35 CG "Leucine" 82
+biotype 36 HG "Leucine" 85
+biotype 37 CD1 "Leucine" 80
+biotype 38 HD1 "Leucine" 85
+biotype 39 CD2 "Leucine" 80
+biotype 40 HD2 "Leucine" 85
+biotype 41 N "Isoleucine" 180
+biotype 42 CA "Isoleucine" 166
+biotype 43 C "Isoleucine" 177
+biotype 44 HN "Isoleucine" 183
+biotype 45 O "Isoleucine" 178
+biotype 46 HA "Isoleucine" 85
+biotype 47 CB "Isoleucine" 82
+biotype 48 HB "Isoleucine" 85
+biotype 49 CG1 "Isoleucine" 80
+biotype 50 HG1 "Isoleucine" 85
+biotype 51 CG2 "Isoleucine" 81
+biotype 52 HG2 "Isoleucine" 85
+biotype 53 CD "Isoleucine" 80
+biotype 54 HD "Isoleucine" 85
+biotype 55 N "Serine" 180
+biotype 56 CA "Serine" 166
+biotype 57 C "Serine" 177
+biotype 58 HN "Serine" 183
+biotype 59 O "Serine" 178
+biotype 60 HA "Serine" 85
+biotype 61 CB "Serine" 99
+biotype 62 HB "Serine" 85
+biotype 63 OG "Serine" 96
+biotype 64 HG "Serine" 97
+biotype 65 N "Threonine" 180
+biotype 66 CA "Threonine" 166
+biotype 67 C "Threonine" 177
+biotype 68 HN "Threonine" 183
+biotype 69 O "Threonine" 178
+biotype 70 HA "Threonine" 85
+biotype 71 CB "Threonine" 100
+biotype 72 HB "Threonine" 85
+biotype 73 OG1 "Threonine" 96
+biotype 74 HG1 "Threonine" 97
+biotype 75 CG2 "Threonine" 80
+biotype 76 HG2 "Threonine" 85
+biotype 77 N "Cysteine (SH)" 180
+biotype 78 CA "Cysteine (SH)" 166
+biotype 79 C "Cysteine (SH)" 177
+biotype 80 HN "Cysteine (SH)" 183
+biotype 81 O "Cysteine (SH)" 178
+biotype 82 HA "Cysteine (SH)" 85
+biotype 83 CB "Cysteine (SH)" 148
+biotype 84 HB "Cysteine (SH)" 85
+biotype 85 SG "Cysteine (SH)" 142
+biotype 86 HG "Cysteine (SH)" 146
+biotype 87 N "Cystine (SS)" 180
+biotype 88 CA "Cystine (SS)" 166
+biotype 89 C "Cystine (SS)" 177
+biotype 90 HN "Cystine (SS)" 183
+biotype 91 O "Cystine (SS)" 178
+biotype 92 HA "Cystine (SS)" 85
+biotype 93 CB "Cystine (SS)" 156
+biotype 94 HB "Cystine (SS)" 85
+biotype 95 SG "Cystine (SS)" 145
+biotype 96 N "Cysteine (S-)" -1
+biotype 97 CA "Cysteine (S-)" -1
+biotype 98 C "Cysteine (S-)" -1
+biotype 99 HN "Cysteine (S-)" -1
+biotype 100 O "Cysteine (S-)" -1
+biotype 101 HA "Cysteine (S-)" -1
+biotype 102 CB "Cysteine (S-)" -1
+biotype 103 HB "Cysteine (S-)" -1
+biotype 104 SG "Cysteine (S-)" -1
+biotype 105 N "Proline" 181
+biotype 106 CA "Proline" 188
+biotype 107 C "Proline" 177
+biotype 108 O "Proline" 178
+biotype 109 HA "Proline" 85
+biotype 110 CB "Proline" 81
+biotype 111 HB "Proline" 85
+biotype 112 CG "Proline" 81
+biotype 113 HG "Proline" 85
+biotype 114 CD "Proline" 187
+biotype 115 HD "Proline" 85
+biotype 116 N "Phenylalanine" 180
+biotype 117 CA "Phenylalanine" 166
+biotype 118 C "Phenylalanine" 177
+biotype 119 HN "Phenylalanine" 183
+biotype 120 O "Phenylalanine" 178
+biotype 121 HA "Phenylalanine" 85
+biotype 122 CB "Phenylalanine" 94
+biotype 123 HB "Phenylalanine" 85
+biotype 124 CG "Phenylalanine" 90
+biotype 125 CD "Phenylalanine" 90
+biotype 126 HD "Phenylalanine" 91
+biotype 127 CE "Phenylalanine" 90
+biotype 128 HE "Phenylalanine" 91
+biotype 129 CZ "Phenylalanine" 90
+biotype 130 HZ "Phenylalanine" 91
+biotype 131 N "Tyrosine" 180
+biotype 132 CA "Tyrosine" 166
+biotype 133 C "Tyrosine" 177
+biotype 134 HN "Tyrosine" 183
+biotype 135 O "Tyrosine" 178
+biotype 136 HA "Tyrosine" 85
+biotype 137 CB "Tyrosine" 94
+biotype 138 HB "Tyrosine" 85
+biotype 139 CG "Tyrosine" 90
+biotype 140 CD "Tyrosine" 90
+biotype 141 HD "Tyrosine" 91
+biotype 142 CE "Tyrosine" 90
+biotype 143 HE "Tyrosine" 91
+biotype 144 CZ "Tyrosine" 108
+biotype 145 OH "Tyrosine" 109
+biotype 146 HH "Tyrosine" 110
+biotype 147 N "Tyrosine (O-)" -1
+biotype 148 CA "Tyrosine (O-)" -1
+biotype 149 C "Tyrosine (O-)" -1
+biotype 150 HN "Tyrosine (O-)" -1
+biotype 151 O "Tyrosine (O-)" -1
+biotype 152 HA "Tyrosine (O-)" -1
+biotype 153 CB "Tyrosine (O-)" -1
+biotype 154 HB "Tyrosine (O-)" -1
+biotype 155 CG "Tyrosine (O-)" -1
+biotype 156 CD "Tyrosine (O-)" -1
+biotype 157 HD "Tyrosine (O-)" -1
+biotype 158 CE "Tyrosine (O-)" -1
+biotype 159 HE "Tyrosine (O-)" -1
+biotype 160 CZ "Tyrosine (O-)" -1
+biotype 161 OH "Tyrosine (O-)" -1
+biotype 162 N "Tryptophan" 180
+biotype 163 CA "Tryptophan" 166
+biotype 164 C "Tryptophan" 177
+biotype 165 HN "Tryptophan" 183
+biotype 166 O "Tryptophan" 178
+biotype 167 HA "Tryptophan" 85
+biotype 168 CB "Tryptophan" 81
+biotype 169 HB "Tryptophan" 85
+biotype 170 CG "Tryptophan" 441
+biotype 171 CD1 "Tryptophan" 455
+biotype 172 HD1 "Tryptophan" 91
+biotype 173 CD2 "Tryptophan" 442
+biotype 174 NE1 "Tryptophan" 444
+biotype 175 HE1 "Tryptophan" 445
+biotype 176 CE2 "Tryptophan" 443
+biotype 177 CE3 "Tryptophan" 90
+biotype 178 HE3 "Tryptophan" 91
+biotype 179 CZ2 "Tryptophan" 90
+biotype 180 HZ2 "Tryptophan" 91
+biotype 181 CZ3 "Tryptophan" 90
+biotype 182 HZ3 "Tryptophan" 91
+biotype 183 CH2 "Tryptophan" 90
+biotype 184 HH2 "Tryptophan" 91
+biotype 185 N "Histidine (+)" 180
+biotype 186 CA "Histidine (+)" 166
+biotype 187 C "Histidine (+)" 177
+biotype 188 HN "Histidine (+)" 183
+biotype 189 O "Histidine (+)" 178
+biotype 190 HA "Histidine (+)" 85
+biotype 191 CB "Histidine (+)" 446
+biotype 192 HB "Histidine (+)" 85
+biotype 193 CG "Histidine (+)" 451
+biotype 194 ND1 "Histidine (+)" 453
+biotype 195 HD1 "Histidine (+)" 454
+biotype 196 CD2 "Histidine (+)" 451
+biotype 197 HD2 "Histidine (+)" 91
+biotype 198 CE1 "Histidine (+)" 450
+biotype 199 HE1 "Histidine (+)" 91
+biotype 200 NE2 "Histidine (+)" 453
+biotype 201 HE2 "Histidine (+)" 454
+biotype 202 N "Histidine (HD)" 180
+biotype 203 CA "Histidine (HD)" 166
+biotype 204 C "Histidine (HD)" 177
+biotype 205 HN "Histidine (HD)" 183
+biotype 206 O "Histidine (HD)" 178
+biotype 207 HA "Histidine (HD)" 85
+biotype 208 CB "Histidine (HD)" 446
+biotype 209 HB "Histidine (HD)" 85
+biotype 210 CG "Histidine (HD)" 449
+biotype 211 ND1 "Histidine (HD)" 444
+biotype 212 HD1 "Histidine (HD)" 445
+biotype 213 CD2 "Histidine (HD)" 448
+biotype 214 HD2 "Histidine (HD)" 91
+biotype 215 CE1 "Histidine (HD)" 447
+biotype 216 HE1 "Histidine (HD)" 91
+biotype 217 NE2 "Histidine (HD)" 452
+biotype 218 N "Histidine (HE)" 180
+biotype 219 CA "Histidine (HE)" 166
+biotype 220 C "Histidine (HE)" 177
+biotype 221 HN "Histidine (HE)" 183
+biotype 222 O "Histidine (HE)" 178
+biotype 223 HA "Histidine (HE)" 85
+biotype 224 CB "Histidine (HE)" 446
+biotype 225 HB "Histidine (HE)" 85
+biotype 226 CG "Histidine (HE)" 448
+biotype 227 ND1 "Histidine (HE)" 452
+biotype 228 CD2 "Histidine (HE)" 449
+biotype 229 HD2 "Histidine (HE)" 91
+biotype 230 CE1 "Histidine (HE)" 447
+biotype 231 HE1 "Histidine (HE)" 91
+biotype 232 NE2 "Histidine (HE)" 444
+biotype 233 HE2 "Histidine (HE)" 445
+biotype 234 N "Aspartic Acid" 180
+biotype 235 CA "Aspartic Acid" 166
+biotype 236 C "Aspartic Acid" 177
+biotype 237 HN "Aspartic Acid" 183
+biotype 238 O "Aspartic Acid" 178
+biotype 239 HA "Aspartic Acid" 85
+biotype 240 CB "Aspartic Acid" 216
+biotype 241 HB "Aspartic Acid" 85
+biotype 242 CG "Aspartic Acid" 213
+biotype 243 OD "Aspartic Acid" 214
+biotype 244 N "Aspartic Acid (COOH)" -1
+biotype 245 CA "Aspartic Acid (COOH)" -1
+biotype 246 C "Aspartic Acid (COOH)" -1
+biotype 247 HN "Aspartic Acid (COOH)" -1
+biotype 248 O "Aspartic Acid (COOH)" -1
+biotype 249 HA "Aspartic Acid (COOH)" -1
+biotype 250 CB "Aspartic Acid (COOH)" -1
+biotype 251 HB "Aspartic Acid (COOH)" -1
+biotype 252 CG "Aspartic Acid (COOH)" -1
+biotype 253 OD1 "Aspartic Acid (COOH)" -1
+biotype 254 OD2 "Aspartic Acid (COOH)" -1
+biotype 255 HD2 "Aspartic Acid (COOH)" -1
+biotype 256 N "Asparagine" 180
+biotype 257 CA "Asparagine" 166
+biotype 258 C "Asparagine" 177
+biotype 259 HN "Asparagine" 183
+biotype 260 O "Asparagine" 178
+biotype 261 HA "Asparagine" 85
+biotype 262 CB "Asparagine" 81
+biotype 263 HB "Asparagine" 85
+biotype 264 CG "Asparagine" 177
+biotype 265 OD1 "Asparagine" 178
+biotype 266 ND2 "Asparagine" 179
+biotype 267 HD2 "Asparagine" 182
+biotype 268 N "Glutamic Acid" 180
+biotype 269 CA "Glutamic Acid" 166
+biotype 270 C "Glutamic Acid" 177
+biotype 271 HN "Glutamic Acid" 183
+biotype 272 O "Glutamic Acid" 178
+biotype 273 HA "Glutamic Acid" 85
+biotype 274 CB "Glutamic Acid" 81
+biotype 275 HB "Glutamic Acid" 85
+biotype 276 CG "Glutamic Acid" 216
+biotype 277 HG "Glutamic Acid" 85
+biotype 278 CD "Glutamic Acid" 213
+biotype 279 OE "Glutamic Acid" 214
+biotype 280 N "Glutamic Acid (COOH)" -1
+biotype 281 CA "Glutamic Acid (COOH)" -1
+biotype 282 C "Glutamic Acid (COOH)" -1
+biotype 283 HN "Glutamic Acid (COOH)" -1
+biotype 284 O "Glutamic Acid (COOH)" -1
+biotype 285 HA "Glutamic Acid (COOH)" -1
+biotype 286 CB "Glutamic Acid (COOH)" -1
+biotype 287 HB "Glutamic Acid (COOH)" -1
+biotype 288 CG "Glutamic Acid (COOH)" -1
+biotype 289 HG "Glutamic Acid (COOH)" -1
+biotype 290 CD "Glutamic Acid (COOH)" -1
+biotype 291 OE1 "Glutamic Acid (COOH)" -1
+biotype 292 OE2 "Glutamic Acid (COOH)" -1
+biotype 293 HE2 "Glutamic Acid (COOH)" -1
+biotype 294 N "Glutamine" 180
+biotype 295 CA "Glutamine" 166
+biotype 296 C "Glutamine" 177
+biotype 297 HN "Glutamine" 183
+biotype 298 O "Glutamine" 178
+biotype 299 HA "Glutamine" 85
+biotype 300 CB "Glutamine" 81
+biotype 301 HB "Glutamine" 85
+biotype 302 CG "Glutamine" 81
+biotype 303 HG "Glutamine" 85
+biotype 304 CD "Glutamine" 177
+biotype 305 OE1 "Glutamine" 178
+biotype 306 NE2 "Glutamine" 179
+biotype 307 HE2 "Glutamine" 182
+biotype 308 N "Methionine" 180
+biotype 309 CA "Methionine" 166
+biotype 310 C "Methionine" 177
+biotype 311 HN "Methionine" 183
+biotype 312 O "Methionine" 178
+biotype 313 HA "Methionine" 85
+biotype 314 CB "Methionine" 81
+biotype 315 HB "Methionine" 85
+biotype 316 CG "Methionine" 152
+biotype 317 HG "Methionine" 85
+biotype 318 SD "Methionine" 144
+biotype 319 CE "Methionine" 151
+biotype 320 HE "Methionine" 85
+biotype 321 N "Lysine" 180
+biotype 322 CA "Lysine" 166
+biotype 323 C "Lysine" 177
+biotype 324 HN "Lysine" 183
+biotype 325 O "Lysine" 178
+biotype 326 HA "Lysine" 85
+biotype 327 CB "Lysine" 81
+biotype 328 HB "Lysine" 85
+biotype 329 CG "Lysine" 81
+biotype 330 HG "Lysine" 85
+biotype 331 CD "Lysine" 81
+biotype 332 HD "Lysine" 85
+biotype 333 CE "Lysine" 235
+biotype 334 HE "Lysine" 85
+biotype 335 NZ "Lysine" 230
+biotype 336 HZ "Lysine" 233
+biotype 337 N "Lysine (NH2)" -1
+biotype 338 CA "Lysine (NH2)" -1
+biotype 339 C "Lysine (NH2)" -1
+biotype 340 HN "Lysine (NH2)" -1
+biotype 341 O "Lysine (NH2)" -1
+biotype 342 HA "Lysine (NH2)" -1
+biotype 343 CB "Lysine (NH2)" -1
+biotype 344 HB "Lysine (NH2)" -1
+biotype 345 CG "Lysine (NH2)" -1
+biotype 346 HG "Lysine (NH2)" -1
+biotype 347 CD "Lysine (NH2)" -1
+biotype 348 HD "Lysine (NH2)" -1
+biotype 349 CE "Lysine (NH2)" -1
+biotype 350 HE "Lysine (NH2)" -1
+biotype 351 NZ "Lysine (NH2)" -1
+biotype 352 HZ "Lysine (NH2)" -1
+biotype 353 N "Arginine" 180
+biotype 354 CA "Arginine" 166
+biotype 355 C "Arginine" 177
+biotype 356 HN "Arginine" 183
+biotype 357 O "Arginine" 178
+biotype 358 HA "Arginine" 85
+biotype 359 CB "Arginine" 81
+biotype 360 HB "Arginine" 85
+biotype 361 CG "Arginine" 251
+biotype 362 HG "Arginine" 85
+biotype 363 CD "Arginine" 250
+biotype 364 HD "Arginine" 85
+biotype 365 NE "Arginine" 246
+biotype 366 HE "Arginine" 247
+biotype 367 CZ "Arginine" 245
+biotype 368 NH "Arginine" 243
+biotype 369 HH "Arginine" 244
+biotype 370 N "Ornithine" 180
+biotype 371 CA "Ornithine" 166
+biotype 372 C "Ornithine" 177
+biotype 373 HN "Ornithine" 183
+biotype 374 O "Ornithine" 178
+biotype 375 HA "Ornithine" 85
+biotype 376 CB "Ornithine" 81
+biotype 377 HB "Ornithine" 85
+biotype 378 CG "Ornithine" 81
+biotype 379 HG "Ornithine" 85
+biotype 380 CD "Ornithine" 235
+biotype 381 HD "Ornithine" 85
+biotype 382 NE "Ornithine" 230
+biotype 383 HE "Ornithine" 233
+biotype 384 N "MethylAlanine (AIB)" 180
+biotype 385 CA "MethylAlanine (AIB)" 167
+biotype 386 C "MethylAlanine (AIB)" 177
+biotype 387 HN "MethylAlanine (AIB)" 183
+biotype 388 O "MethylAlanine (AIB)" 178
+biotype 389 CB "MethylAlanine (AIB)" 80
+biotype 390 HB "MethylAlanine (AIB)" 85
+biotype 391 N "Pyroglutamic Acid" 180
+biotype 392 CA "Pyroglutamic Acid" 166
+biotype 393 C "Pyroglutamic Acid" 177
+biotype 394 HN "Pyroglutamic Acid" 183
+biotype 395 O "Pyroglutamic Acid" 178
+biotype 396 HA "Pyroglutamic Acid" 85
+biotype 397 CB "Pyroglutamic Acid" 81
+biotype 398 HB "Pyroglutamic Acid" 85
+biotype 399 CG "Pyroglutamic Acid" 216
+biotype 400 HG "Pyroglutamic Acid" 85
+biotype 401 CD "Pyroglutamic Acid" 177
+biotype 402 OE "Pyroglutamic Acid" 178
+biotype 403 N "N-Terminal GLY" 230
+biotype 404 CA "N-Terminal GLY" 235
+biotype 405 C "N-Terminal GLY" 177
+biotype 406 HN "N-Terminal GLY" 233
+biotype 407 O "N-Terminal GLY" 178
+biotype 408 HA "N-Terminal GLY" 85
+biotype 409 N "N-Terminal ALA" 230
+biotype 410 CA "N-Terminal ALA" 236
+biotype 411 C "N-Terminal ALA" 177
+biotype 412 HN "N-Terminal ALA" 233
+biotype 413 O "N-Terminal ALA" 178
+biotype 414 HA "N-Terminal ALA" 85
+biotype 415 N "N-Terminal VAL" 230
+biotype 416 CA "N-Terminal VAL" 236
+biotype 417 C "N-Terminal VAL" 177
+biotype 418 HN "N-Terminal VAL" 233
+biotype 419 O "N-Terminal VAL" 178
+biotype 420 HA "N-Terminal VAL" 85
+biotype 421 N "N-Terminal LEU" 230
+biotype 422 CA "N-Terminal LEU" 236
+biotype 423 C "N-Terminal LEU" 177
+biotype 424 HN "N-Terminal LEU" 233
+biotype 425 O "N-Terminal LEU" 178
+biotype 426 HA "N-Terminal LEU" 85
+biotype 427 N "N-Terminal ILE" 230
+biotype 428 CA "N-Terminal ILE" 236
+biotype 429 C "N-Terminal ILE" 177
+biotype 430 HN "N-Terminal ILE" 233
+biotype 431 O "N-Terminal ILE" 178
+biotype 432 HA "N-Terminal ILE" 85
+biotype 433 N "N-Terminal SER" 230
+biotype 434 CA "N-Terminal SER" 236
+biotype 435 C "N-Terminal SER" 177
+biotype 436 HN "N-Terminal SER" 233
+biotype 437 O "N-Terminal SER" 178
+biotype 438 HA "N-Terminal SER" 85
+biotype 439 N "N-Terminal THR" 230
+biotype 440 CA "N-Terminal THR" 236
+biotype 441 C "N-Terminal THR" 177
+biotype 442 HN "N-Terminal THR" 233
+biotype 443 O "N-Terminal THR" 178
+biotype 444 HA "N-Terminal THR" 85
+biotype 445 N "N-Terminal CYS (SH)" 230
+biotype 446 CA "N-Terminal CYS (SH)" 236
+biotype 447 C "N-Terminal CYS (SH)" 177
+biotype 448 HN "N-Terminal CYS (SH)" 233
+biotype 449 O "N-Terminal CYS (SH)" 178
+biotype 450 HA "N-Terminal CYS (SH)" 85
+biotype 451 N "N-Terminal CYX (SS)" 230
+biotype 452 CA "N-Terminal CYX (SS)" 236
+biotype 453 C "N-Terminal CYX (SS)" 177
+biotype 454 HN "N-Terminal CYX (SS)" 233
+biotype 455 O "N-Terminal CYX (SS)" 178
+biotype 456 HA "N-Terminal CYX (SS)" 85
+biotype 457 N "N-Terminal CYD (S-)" -1
+biotype 458 CA "N-Terminal CYD (S-)" -1
+biotype 459 C "N-Terminal CYD (S-)" -1
+biotype 460 HN "N-Terminal CYD (S-)" -1
+biotype 461 O "N-Terminal CYD (S-)" -1
+biotype 462 HA "N-Terminal CYD (S-)" -1
+biotype 463 N "N-Terminal PRO" 252
+biotype 464 CA "N-Terminal PRO" 238
+biotype 465 C "N-Terminal PRO" 177
+biotype 466 HN "N-Terminal PRO" 253
+biotype 467 O "N-Terminal PRO" 178
+biotype 468 HA "N-Terminal PRO" 85
+biotype 469 CD "N-Terminal PRO" 239
+biotype 470 HD "N-Terminal PRO" 85
+biotype 471 N "N-Terminal PHE" 230
+biotype 472 CA "N-Terminal PHE" 236
+biotype 473 C "N-Terminal PHE" 177
+biotype 474 HN "N-Terminal PHE" 233
+biotype 475 O "N-Terminal PHE" 178
+biotype 476 HA "N-Terminal PHE" 85
+biotype 477 N "N-Terminal TYR" 230
+biotype 478 CA "N-Terminal TYR" 236
+biotype 479 C "N-Terminal TYR" 177
+biotype 480 HN "N-Terminal TYR" 233
+biotype 481 O "N-Terminal TYR" 178
+biotype 482 HA "N-Terminal TYR" 85
+biotype 483 N "N-Terminal TYD (O-)" -1
+biotype 484 CA "N-Terminal TYD (O-)" -1
+biotype 485 C "N-Terminal TYD (O-)" -1
+biotype 486 HN "N-Terminal TYD (O-)" -1
+biotype 487 O "N-Terminal TYD (O-)" -1
+biotype 488 HA "N-Terminal TYD (O-)" -1
+biotype 489 N "N-Terminal TRP" 230
+biotype 490 CA "N-Terminal TRP" 236
+biotype 491 C "N-Terminal TRP" 177
+biotype 492 HN "N-Terminal TRP" 233
+biotype 493 O "N-Terminal TRP" 178
+biotype 494 HA "N-Terminal TRP" 85
+biotype 495 N "N-Terminal HIS (+)" 230
+biotype 496 CA "N-Terminal HIS (+)" 236
+biotype 497 C "N-Terminal HIS (+)" 177
+biotype 498 HN "N-Terminal HIS (+)" 233
+biotype 499 O "N-Terminal HIS (+)" 178
+biotype 500 HA "N-Terminal HIS (+)" 85
+biotype 501 N "N-Terminal HIS (HD)" 230
+biotype 502 CA "N-Terminal HIS (HD)" 236
+biotype 503 C "N-Terminal HIS (HD)" 177
+biotype 504 HN "N-Terminal HIS (HD)" 233
+biotype 505 O "N-Terminal HIS (HD)" 178
+biotype 506 HA "N-Terminal HIS (HD)" 85
+biotype 507 N "N-Terminal HIS (HE)" 230
+biotype 508 CA "N-Terminal HIS (HE)" 236
+biotype 509 C "N-Terminal HIS (HE)" 177
+biotype 510 HN "N-Terminal HIS (HE)" 233
+biotype 511 O "N-Terminal HIS (HE)" 178
+biotype 512 HA "N-Terminal HIS (HE)" 85
+biotype 513 N "N-Terminal ASP" 230
+biotype 514 CA "N-Terminal ASP" 236
+biotype 515 C "N-Terminal ASP" 177
+biotype 516 HN "N-Terminal ASP" 233
+biotype 517 O "N-Terminal ASP" 178
+biotype 518 HA "N-Terminal ASP" 85
+biotype 519 N "N-Terminal ASH (COOH)" -1
+biotype 520 CA "N-Terminal ASH (COOH)" -1
+biotype 521 C "N-Terminal ASH (COOH)" -1
+biotype 522 HN "N-Terminal ASH (COOH)" -1
+biotype 523 O "N-Terminal ASH (COOH)" -1
+biotype 524 HA "N-Terminal ASH (COOH)" -1
+biotype 525 N "N-Terminal ASN" 230
+biotype 526 CA "N-Terminal ASN" 236
+biotype 527 C "N-Terminal ASN" 177
+biotype 528 HN "N-Terminal ASN" 233
+biotype 529 O "N-Terminal ASN" 178
+biotype 530 HA "N-Terminal ASN" 85
+biotype 531 N "N-Terminal GLU" 230
+biotype 532 CA "N-Terminal GLU" 236
+biotype 533 C "N-Terminal GLU" 177
+biotype 534 HN "N-Terminal GLU" 233
+biotype 535 O "N-Terminal GLU" 178
+biotype 536 HA "N-Terminal GLU" 85
+biotype 537 N "N-Terminal GLH (COOH)" -1
+biotype 538 CA "N-Terminal GLH (COOH)" -1
+biotype 539 C "N-Terminal GLH (COOH)" -1
+biotype 540 HN "N-Terminal GLH (COOH)" -1
+biotype 541 O "N-Terminal GLH (COOH)" -1
+biotype 542 HA "N-Terminal GLH (COOH)" -1
+biotype 543 N "N-Terminal GLN" 230
+biotype 544 CA "N-Terminal GLN" 236
+biotype 545 C "N-Terminal GLN" 177
+biotype 546 HN "N-Terminal GLN" 233
+biotype 547 O "N-Terminal GLN" 178
+biotype 548 HA "N-Terminal GLN" 85
+biotype 549 N "N-Terminal MET" 230
+biotype 550 CA "N-Terminal MET" 236
+biotype 551 C "N-Terminal MET" 177
+biotype 552 HN "N-Terminal MET" 233
+biotype 553 O "N-Terminal MET" 178
+biotype 554 HA "N-Terminal MET" 85
+biotype 555 N "N-Terminal LYS" 230
+biotype 556 CA "N-Terminal LYS" 236
+biotype 557 C "N-Terminal LYS" 177
+biotype 558 HN "N-Terminal LYS" 233
+biotype 559 O "N-Terminal LYS" 178
+biotype 560 HA "N-Terminal LYS" 85
+biotype 561 N "N-Terminal LYD (NH2)" -1
+biotype 562 CA "N-Terminal LYD (NH2)" -1
+biotype 563 C "N-Terminal LYD (NH2)" -1
+biotype 564 HN "N-Terminal LYD (NH2)" -1
+biotype 565 O "N-Terminal LYD (NH2)" -1
+biotype 566 HA "N-Terminal LYD (NH2)" -1
+biotype 567 N "N-Terminal ARG" 230
+biotype 568 CA "N-Terminal ARG" 236
+biotype 569 C "N-Terminal ARG" 177
+biotype 570 HN "N-Terminal ARG" 233
+biotype 571 O "N-Terminal ARG" 178
+biotype 572 HA "N-Terminal ARG" 85
+biotype 573 N "N-Terminal ORN" 230
+biotype 574 CA "N-Terminal ORN" 236
+biotype 575 C "N-Terminal ORN" 177
+biotype 576 HN "N-Terminal ORN" 233
+biotype 577 O "N-Terminal ORN" 178
+biotype 578 HA "N-Terminal ORN" 85
+biotype 579 N "N-Terminal AIB" 230
+biotype 580 CA "N-Terminal AIB" 237
+biotype 581 C "N-Terminal AIB" 177
+biotype 582 HN "N-Terminal AIB" 233
+biotype 583 O "N-Terminal AIB" 178
+biotype 584 N "C-Terminal GLY" 180
+biotype 585 CA "C-Terminal GLY" 226
+biotype 586 C "C-Terminal GLY" 213
+biotype 587 HN "C-Terminal GLY" 183
+biotype 588 OXT "C-Terminal GLY" 214
+biotype 589 HA "C-Terminal GLY" 85
+biotype 590 N "C-Terminal ALA" 180
+biotype 591 CA "C-Terminal ALA" 225
+biotype 592 C "C-Terminal ALA" 213
+biotype 593 HN "C-Terminal ALA" 183
+biotype 594 OXT "C-Terminal ALA" 214
+biotype 595 HA "C-Terminal ALA" 85
+biotype 596 N "C-Terminal VAL" 180
+biotype 597 CA "C-Terminal VAL" 225
+biotype 598 C "C-Terminal VAL" 213
+biotype 599 HN "C-Terminal VAL" 183
+biotype 600 OXT "C-Terminal VAL" 214
+biotype 601 HA "C-Terminal VAL" 85
+biotype 602 N "C-Terminal LEU" 180
+biotype 603 CA "C-Terminal LEU" 225
+biotype 604 C "C-Terminal LEU" 213
+biotype 605 HN "C-Terminal LEU" 183
+biotype 606 OXT "C-Terminal LEU" 214
+biotype 607 HA "C-Terminal LEU" 85
+biotype 608 N "C-Terminal ILE" 180
+biotype 609 CA "C-Terminal ILE" 225
+biotype 610 C "C-Terminal ILE" 213
+biotype 611 HN "C-Terminal ILE" 183
+biotype 612 OXT "C-Terminal ILE" 214
+biotype 613 HA "C-Terminal ILE" 85
+biotype 614 N "C-Terminal SER" 180
+biotype 615 CA "C-Terminal SER" 225
+biotype 616 C "C-Terminal SER" 213
+biotype 617 HN "C-Terminal SER" 183
+biotype 618 OXT "C-Terminal SER" 214
+biotype 619 HA "C-Terminal SER" 85
+biotype 620 N "C-Terminal THR" 180
+biotype 621 CA "C-Terminal THR" 225
+biotype 622 C "C-Terminal THR" 213
+biotype 623 HN "C-Terminal THR" 183
+biotype 624 OXT "C-Terminal THR" 214
+biotype 625 HA "C-Terminal THR" 85
+biotype 626 N "C-Terminal CYS (SH)" 180
+biotype 627 CA "C-Terminal CYS (SH)" 225
+biotype 628 C "C-Terminal CYS (SH)" 213
+biotype 629 HN "C-Terminal CYS (SH)" 183
+biotype 630 OXT "C-Terminal CYS (SH)" 214
+biotype 631 HA "C-Terminal CYS (SH)" 85
+biotype 632 N "C-Terminal CYX (SS)" 180
+biotype 633 CA "C-Terminal CYX (SS)" 225
+biotype 634 C "C-Terminal CYX (SS)" 213
+biotype 635 HN "C-Terminal CYX (SS)" 183
+biotype 636 OXT "C-Terminal CYX (SS)" 214
+biotype 637 HA "C-Terminal CYX (SS)" 85
+biotype 638 N "C-Terminal CYD (S-)" -1
+biotype 639 CA "C-Terminal CYD (S-)" -1
+biotype 640 C "C-Terminal CYD (S-)" -1
+biotype 641 HN "C-Terminal CYD (S-)" -1
+biotype 642 OXT "C-Terminal CYD (S-)" -1
+biotype 643 HA "C-Terminal CYD (S-)" -1
+biotype 644 N "C-Terminal PRO" 181
+biotype 645 CA "C-Terminal PRO" 228
+biotype 646 C "C-Terminal PRO" 213
+biotype 647 OXT "C-Terminal PRO" 214
+biotype 648 HA "C-Terminal PRO" 85
+biotype 649 N "C-Terminal PHE" 180
+biotype 650 CA "C-Terminal PHE" 225
+biotype 651 C "C-Terminal PHE" 213
+biotype 652 HN "C-Terminal PHE" 183
+biotype 653 OXT "C-Terminal PHE" 214
+biotype 654 HA "C-Terminal PHE" 85
+biotype 655 N "C-Terminal TYR" 180
+biotype 656 CA "C-Terminal TYR" 225
+biotype 657 C "C-Terminal TYR" 213
+biotype 658 HN "C-Terminal TYR" 183
+biotype 659 OXT "C-Terminal TYR" 214
+biotype 660 HA "C-Terminal TYR" 85
+biotype 661 N "C-Terminal TYD (O-)" -1
+biotype 662 CA "C-Terminal TYD (O-)" -1
+biotype 663 C "C-Terminal TYD (O-)" -1
+biotype 664 HN "C-Terminal TYD (O-)" -1
+biotype 665 OXT "C-Terminal TYD (O-)" -1
+biotype 666 HA "C-Terminal TYD (O-)" -1
+biotype 667 N "C-Terminal TRP" 180
+biotype 668 CA "C-Terminal TRP" 225
+biotype 669 C "C-Terminal TRP" 213
+biotype 670 HN "C-Terminal TRP" 183
+biotype 671 OXT "C-Terminal TRP" 214
+biotype 672 HA "C-Terminal TRP" 85
+biotype 673 N "C-Terminal HIS (+)" 180
+biotype 674 CA "C-Terminal HIS (+)" 225
+biotype 675 C "C-Terminal HIS (+)" 213
+biotype 676 HN "C-Terminal HIS (+)" 183
+biotype 677 OXT "C-Terminal HIS (+)" 214
+biotype 678 HA "C-Terminal HIS (+)" 85
+biotype 679 N "C-Terminal HIS (HD)" 180
+biotype 680 CA "C-Terminal HIS (HD)" 225
+biotype 681 C "C-Terminal HIS (HD)" 213
+biotype 682 HN "C-Terminal HIS (HD)" 183
+biotype 683 OXT "C-Terminal HIS (HD)" 214
+biotype 684 HA "C-Terminal HIS (HD)" 85
+biotype 685 N "C-Terminal HIS (HE)" 180
+biotype 686 CA "C-Terminal HIS (HE)" 225
+biotype 687 C "C-Terminal HIS (HE)" 213
+biotype 688 HN "C-Terminal HIS (HE)" 183
+biotype 689 OXT "C-Terminal HIS (HE)" 214
+biotype 690 HA "C-Terminal HIS (HE)" 85
+biotype 691 N "C-Terminal ASP" 180
+biotype 692 CA "C-Terminal ASP" 225
+biotype 693 C "C-Terminal ASP" 213
+biotype 694 HN "C-Terminal ASP" 183
+biotype 695 OXT "C-Terminal ASP" 214
+biotype 696 HA "C-Terminal ASP" 85
+biotype 697 N "C-Terminal ASH (COOH)" -1
+biotype 698 CA "C-Terminal ASH (COOH)" -1
+biotype 699 C "C-Terminal ASH (COOH)" -1
+biotype 700 HN "C-Terminal ASH (COOH)" -1
+biotype 701 OXT "C-Terminal ASH (COOH)" -1
+biotype 702 HA "C-Terminal ASH (COOH)" -1
+biotype 703 N "C-Terminal ASN" 180
+biotype 704 CA "C-Terminal ASN" 225
+biotype 705 C "C-Terminal ASN" 213
+biotype 706 HN "C-Terminal ASN" 183
+biotype 707 OXT "C-Terminal ASN" 214
+biotype 708 HA "C-Terminal ASN" 85
+biotype 709 N "C-Terminal GLU" 180
+biotype 710 CA "C-Terminal GLU" 225
+biotype 711 C "C-Terminal GLU" 213
+biotype 712 HN "C-Terminal GLU" 183
+biotype 713 OXT "C-Terminal GLU" 214
+biotype 714 HA "C-Terminal GLU" 85
+biotype 715 N "C-Terminal GLH (COOH)" -1
+biotype 716 CA "C-Terminal GLH (COOH)" -1
+biotype 717 C "C-Terminal GLH (COOH)" -1
+biotype 718 HN "C-Terminal GLH (COOH)" -1
+biotype 719 OXT "C-Terminal GLH (COOH)" -1
+biotype 720 HA "C-Terminal GLH (COOH)" -1
+biotype 721 N "C-Terminal GLN" 180
+biotype 722 CA "C-Terminal GLN" 225
+biotype 723 C "C-Terminal GLN" 213
+biotype 724 HN "C-Terminal GLN" 183
+biotype 725 OXT "C-Terminal GLN" 214
+biotype 726 HA "C-Terminal GLN" 85
+biotype 727 N "C-Terminal MET" 180
+biotype 728 CA "C-Terminal MET" 225
+biotype 729 C "C-Terminal MET" 213
+biotype 730 HN "C-Terminal MET" 183
+biotype 731 OXT "C-Terminal MET" 214
+biotype 732 HA "C-Terminal MET" 85
+biotype 733 N "C-Terminal LYS" 180
+biotype 734 CA "C-Terminal LYS" 225
+biotype 735 C "C-Terminal LYS" 213
+biotype 736 HN "C-Terminal LYS" 183
+biotype 737 OXT "C-Terminal LYS" 214
+biotype 738 HA "C-Terminal LYS" 85
+biotype 739 N "C-Terminal LYD (NH2)" -1
+biotype 740 CA "C-Terminal LYD (NH2)" -1
+biotype 741 C "C-Terminal LYD (NH2)" -1
+biotype 742 HN "C-Terminal LYD (NH2)" -1
+biotype 743 OXT "C-Terminal LYD (NH2)" -1
+biotype 744 HA "C-Terminal LYD (NH2)" -1
+biotype 745 N "C-Terminal ARG" 180
+biotype 746 CA "C-Terminal ARG" 225
+biotype 747 C "C-Terminal ARG" 213
+biotype 748 HN "C-Terminal ARG" 183
+biotype 749 OXT "C-Terminal ARG" 214
+biotype 750 HA "C-Terminal ARG" 85
+biotype 751 N "C-Terminal ORN" 180
+biotype 752 CA "C-Terminal ORN" 225
+biotype 753 C "C-Terminal ORN" 213
+biotype 754 HN "C-Terminal ORN" 183
+biotype 755 OXT "C-Terminal ORN" 214
+biotype 756 HA "C-Terminal ORN" 85
+biotype 757 N "C-Terminal AIB" 180
+biotype 758 CA "C-Terminal AIB" 227
+biotype 759 C "C-Terminal AIB" 213
+biotype 760 HN "C-Terminal AIB" 183
+biotype 761 OXT "C-Terminal AIB" 214
+biotype 762 N "Deprotonated N-Terminus" -1
+biotype 763 H "Deprotonated N-Terminus" -1
+biotype 764 C "Formyl N-Terminus" 177
+biotype 765 H "Formyl N-Terminus" 221
+biotype 766 O "Formyl N-Terminus" 178
+biotype 767 CH3 "Acetyl N-Terminus" 80
+biotype 768 H "Acetyl N-Terminus" 85
+biotype 769 C "Acetyl N-Terminus" 177
+biotype 770 O "Acetyl N-Terminus" 178
+biotype 771 C "Protonated C-Terminus" -1
+biotype 772 O "Protonated C-Terminus" -1
+biotype 773 OH "Protonated C-Terminus" -1
+biotype 774 HO "Protonated C-Terminus" -1
+biotype 775 N "Amide C-Terminus" 179
+biotype 776 HN "Amide C-Terminus" 182
+biotype 777 N "N-MeAmide C-Terminus" 180
+biotype 778 HN "N-MeAmide C-Terminus" 183
+biotype 779 CH3 "N-MeAmide C-Terminus" 184
+biotype 780 H "N-MeAmide C-Terminus" 85
+biotype 2001 O "Water" 63
+biotype 2002 H "Water" 64
+biotype 2003 NA "Sodium Ion" -1
+biotype 2004 K "Potassium Ion" -1
+biotype 2005 MG "Magnesium Ion" -1
+biotype 2006 CA "Calcium Ion" -1
+biotype 2007 CL "Chloride Ion" -1
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/system.lt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/system.lt
new file mode 100644
index 000000000..fae58d65c
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/moltemplate_files/system.lt
@@ -0,0 +1,21 @@
+import "ethylene.lt" # <- defines the "Ethylene" molecule type.
+import "benzene.lt" # <- defines the "Benzene" molecule type.
+
+
+# Periodic boundary conditions:
+write_once("Data Boundary") {
+ 0.0 80.00 xlo xhi
+ 0.0 80.00 ylo yhi
+ 0.0 80.00 zlo zhi
+}
+
+
+# Create 1000 ethylenes and 500 benzenes
+# List them in the same order they appear in the PACKMOL .inp file(s).
+
+ethylenes = new Ethylene[1000]
+benzenes = new Benzene[500]
+
+# Note: We can omit the .move() and .rot() commands which normally appear
+# after the "new" command because we will be using a separate program
+# (PACKMOL) to generate the coordinates of these molecules.
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/README.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/README.TXT
new file mode 100644
index 000000000..f0e39ec90
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/README.TXT
@@ -0,0 +1,5 @@
+You can use packmol to create a file containing the atomic coordinates
+for a system of ethylene mixed with benzene using this command:
+
+packmol < mix_ethylene+benzene.inp
+
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/benzene.xyz b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/benzene.xyz
new file mode 100644
index 000000000..1a727ff40
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/benzene.xyz
@@ -0,0 +1,14 @@
+12
+ Benzene
+C1 5.274 1.999 -8.568
+C2 6.627 2.018 -8.209
+C3 7.366 0.829 -8.202
+C4 6.752 -0.379 -8.554
+C5 5.399 -0.398 -8.912
+C6 4.660 0.791 -8.919
+H11 4.704 2.916 -8.573
+H21 7.101 2.950 -7.938
+H31 8.410 0.844 -7.926
+H41 7.322 -1.296 -8.548
+H51 4.925 -1.330 -9.183
+H61 3.616 0.776 -9.196
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/ethylene.xyz b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/ethylene.xyz
new file mode 100644
index 000000000..35326fe81
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/ethylene.xyz
@@ -0,0 +1,8 @@
+6
+ Ethylene
+C1 -0.6695 0.000000 0.000000
+C2 0.6695 0.000000 0.000000
+H11 -1.234217 -0.854458 0.000000
+H12 -1.234217 0.854458 0.000000
+H21 1.234217 -0.854458 0.000000
+H22 1.234217 0.854458 0.000000
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/mix_ethylene+benzene.inp b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/mix_ethylene+benzene.inp
new file mode 100644
index 000000000..26fbc22fc
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/packmol_files/mix_ethylene+benzene.inp
@@ -0,0 +1,31 @@
+#
+# A mixture of ethylene and benzene
+#
+
+# All the atoms from diferent molecules will be separated at least 2.0
+# Anstroms at the solution.
+
+tolerance 2.0
+
+# The file type of input and output files is PDB
+
+filetype xyz
+
+# The name of the output file
+
+output system.xyz
+
+# 1000 water molecules and 500 urea molecules will be put in a box
+# defined by the minimum coordinates x, y and z = 0. 0. 0. and maximum
+# coordinates 80. 80. 80. That is, they will be put in a cube of side
+# 80. (the keyword "inside cube 0. 0. 0. 80.") could be used as well.
+
+structure ethylene.xyz
+ number 1000
+ inside box 0. 0. 0. 80. 80. 80.
+end structure
+
+structure benzene.xyz
+ number 500
+ inside box 0. 0. 0. 80. 80. 80.
+end structure
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/run.in.npt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/run.in.npt
new file mode 100644
index 000000000..930d93ee9
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/run.in.npt
@@ -0,0 +1,57 @@
+# PREREQUISITES:
+#
+# You must use moltemplate.sh to create 3 files:
+# system.data system.in.init system.in.settings
+# (Follow the instructions in README_setup.sh, or run it using ./README_sh.)
+
+# ------------------------------- Initialization Section --------------------
+
+include "system.in.init"
+
+# ------------------------------- Atom Definition Section -------------------
+
+read_data "system.data"
+
+# OPLSAA atom charges are stored in a separate file.
+# Load that file now:
+
+include "system.in.charges"
+
+# ------------------------------- Settings Section --------------------------
+
+include "system.in.settings"
+
+# ------------------------------- Run Section -------------------------------
+
+
+# -- minimization protocol --
+
+minimize 1.0e-4 1.0e-6 100000 400000
+
+# -- simulation protocol --
+
+timestep 1.0
+
+print "---------------------------------------------------------------------------"
+print "First, use Langevin dynamics to randomize the initial shape of the molecules"
+print "(This is not really necessary, but it seems to speed up equilibration.)"
+print "---------------------------------------------------------------------------"
+
+fix fxlan all langevin 300.0 300.0 120 123456 # temp: 300 K
+fix fxnph all nph iso 50.0 50.0 1000.0 # pressure: 50 barr
+run 2000
+unfix fxlan
+unfix fxnph
+
+print "---------------------------------------------------------------------------"
+print "--- Now continue the simulation using a Nose-Hoover Thermostat/Barostat ---"
+print "---------------------------------------------------------------------------"
+dump 1 all custom 1000 traj_npt.lammpstrj id mol type x y z ix iy iz
+# temperature: 300 K, pressure: 50 barr
+fix fxnpt all npt temp 300.0 300.0 100.0 iso 50.0 50.0 1000.0 drag 1.0
+thermo 100
+#thermo_modify flush yes
+
+run 100000
+
+write_data system_after_npt.data
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/run.in.nvt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/run.in.nvt
new file mode 100644
index 000000000..b704d1f9d
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene+benzene_PACKMOL/run.in.nvt
@@ -0,0 +1,50 @@
+# PREREQUISITES:
+#
+# 1) You must use moltemplate.sh to create 3 files:
+# system.data system.in.init system.in.settings
+# (Follow the instructions in README_setup.sh, or run it using ./README_sh.)
+# 2) You must equilibrate the system beforehand using "run.in.npt".
+# This will create the file "system_after_npt.data" which this file reads.
+# (Note: I have not verified that this equilibration protocol works well.)
+
+# ------------------------------- Initialization Section --------------------
+
+include "system.in.init"
+
+# ------------------------------- Atom Definition Section -------------------
+
+# Read the coordinates generated by an earlier NPT simulation
+
+read_data "system_after_npt.data"
+
+# OPLSAA atom charges are stored in a separate file.
+# Load that file now:
+
+include "system.in.charges"
+
+# ------------------------------- Settings Section --------------------------
+
+include "system.in.settings"
+
+
+# (The "write_restart" and "read_restart" commands were buggy in 2012,
+# but they should work also. I prefer "write_data" and "read_data".)
+
+# ------------------------------- Settings Section --------------------------
+
+include system.in.settings
+
+# ------------------------------- Run Section -------------------------------
+
+# -- simulation protocol --
+
+
+timestep 1.0
+dump 1 all custom 5000 traj_nvt.lammpstrj id mol type x y z ix iy iz
+fix fxnvt all nvt temp 300.0 300.0 500.0 tchain 1
+thermo 500
+#thermo_modify flush yes
+
+run 200000
+
+write_restart system_after_nvt.data
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh
index d274f0486..d80df900e 100755
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/README_setup.sh
@@ -1,36 +1,36 @@
# -------- REQUIREMENTS: ---------
# You must define your MOLTEMPLATE_PATH environment variable
# and set it to the "common" subdirectory of your moltemplate distribution.
# (See the "Installation" section in the moltemplate manual.)
# Create LAMMPS input files this way:
cd moltemplate_files
# Create the "oplsaa.lt" file which moltemplate will need
cd oplsaa_lt_generator/
- ./oplsaa_moltemplate.py oplsaa_subset.txt
+ ./oplsaa_moltemplate.py oplsaa_subset.prm
mv -f oplsaa.lt ..
cd ..
# run moltemplate
moltemplate.sh system.lt
# This will generate various files with names ending in *.in* and *.data.
# Move them to the directory where you plan to run LAMMPS (in this case "../")
mv -f system.data system.in* ../
# Optional:
# The "./output_ttree/" directory is full of temporary files generated by
# moltemplate. They can be useful for debugging, but are usually thrown away.
rm -rf output_ttree/
# Optional:
# Delete the "oplsaa.lt" file:
rm -f oplsaa.lt
cd ../
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/ethylene.lt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/ethylene.lt
index 9113cae18..45adb1fae 100644
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/ethylene.lt
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/ethylene.lt
@@ -1,42 +1,40 @@
import "oplsaa.lt"
# The "oplsaa.lt" file contains force-field definitions and masses for the
# atoms in your system. See oplsaa_lt_generator/README.TXT for details.
# Note:
-# Atom type 85 corresponds to "Alkene H2-C="
-# Atom type 86 corresponds to "Alkene H-C="
+# Atom type 88 corresponds to "Alkene H2-C="
+# Atom type 89 corresponds to "Alkene H-C="
Ethylene inherits OPLSAA {
# atom-id mol-id atom-type charge X Y Z
write('Data Atoms') {
- $atom:C1 $mol @atom:85 0.000 -0.6695 0.000000 0.000000
- $atom:C2 $mol @atom:85 0.000 0.6695 0.000000 0.000000
- $atom:H11 $mol @atom:86 0.000 -1.234217 -0.854458 0.000000
- $atom:H12 $mol @atom:86 0.000 -1.234217 0.854458 0.000000
- $atom:H21 $mol @atom:86 0.000 1.234217 -0.854458 0.000000
- $atom:H22 $mol @atom:86 0.000 1.234217 0.854458 0.000000
+ $atom:C1 $mol @atom:88 0.000 -0.6695 0.000000 0.000000
+ $atom:C2 $mol @atom:88 0.000 0.6695 0.000000 0.000000
+ $atom:H11 $mol @atom:89 0.000 -1.234217 -0.854458 0.000000
+ $atom:H12 $mol @atom:89 0.000 -1.234217 0.854458 0.000000
+ $atom:H21 $mol @atom:89 0.000 1.234217 -0.854458 0.000000
+ $atom:H22 $mol @atom:89 0.000 1.234217 0.854458 0.000000
}
write('Data Bond List') {
$bond:C12 $atom:C1 $atom:C2
$bond:C1H1 $atom:C1 $atom:H11
$bond:C1H2 $atom:C1 $atom:H12
$bond:C2H1 $atom:C2 $atom:H21
$bond:C2H2 $atom:C2 $atom:H22
}
} # Ethylene
-# Note: You don't need to know the partial partial charges of the atoms.
-# But you must supply a number there because atom_style full requires
-# at least 7 columns in the "Data Atoms" section.
-# Just fill the fourth column with zeros ("0.000").
-# Moltemplate and LAMMPS will automatically assign the charge later.
+# Note: You don't need to supply the partial partial charges of the atoms.
+# If you like, just fill the fourth column with zeros ("0.000").
+# Moltemplate and LAMMPS will automatically assign the charge later
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/README.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/README.TXT
index 2922e2abe..4191a6176 100644
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/README.TXT
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/README.TXT
@@ -1,81 +1,106 @@
This directory contains instructions for creating a a moltemplate file
-("oplsaa.lt") containing force-field definitions relevant to ethylene example.
-Create "oplsaa.lt" this way:
+("oplsaa.lt") containing force-field definitions relevant to the
+"ethylene" example. (However, these instructions should work
+for other molecules too.)
-./oplsaa_moltemplate.py oplsaa_subset.txt
+First, check and see if there is an "oplsaa_subset.prm" file present.
+If not, then download this file:
-# Then move the newly created opls.lt file to the parent directory
-# (to help moltemplate find it).
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+ This file is also available here:
+http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
-mv oplsaa.lt ..
+and save this file as "oplsaa_subset.prm". Then you must EDIT THIS FILE
+so that it only contains atom types you plan to have in your simulation
+(see below for details). Then run the opls_moltemplate.py script this way:
------------ GENERAL DOCUMENTATION -----------
-The "oplsaa_subset.txt" file should contain force-field information
-for a subset of the atoms in the oplsaa forcefield. This directory
-also contains the python code ("oplsaa_moltemplate.py") used to
-generate that file, as well as the full oplsaa force field file: "oplsaa.txt".
-NOTE: THE ORIGINAL "oplsaa.txt" FILE IS LOCATED IN THE "common/opls/" DIRECTORY.
- (I deleted it here to save space.)
+python oplsaa_moltemplate.py oplsaa_subset.prm
-python oplsaa_moltemplate.py <force field file name>
-First, back-up the oplsaa.txt file and then delete all the unnecessary atoms
-from the file.
+This will create a file named "oplsaa.lt"
+Look over the newly created "oplsaa.lt" file.
+Then move this file to wherever you plan to run moltemplate. For example:
-It is ideal for you to run this on a subset of the OPLS forcefield relevant
-to your problem. (It is possible for you to generate a full OPLS force field
-moltemplate file but that demands a lot of time and generates a file that is
-on the order 100 gigabytes, which moltemplate can not read.)
-Save yourself time and energy, and make a copy of the oplsaa.txt. Then edit
-this file and delete or comment out any line beginning with the word "atom"
-which is not relevant to your problem. (However keep the rest of the file.)
+mv -f oplsaa.lt ..
+
+----- DETAILS: Editing the "oplsaa_subset.prm" file -------
+
+Again, before you run "oplsaa_moltemplate.py", you must edit the "oplsaa.prm"
+file (or "oplsaa_subset.prm file) and eliminate atom types which do not
+correspond to any of the atoms in your simulation. This means you must
+look for lines near the beginning of this file which begin with the word "atom"
+and refer to atom types which appear in the simulation you plan to run. All
+other lines (beginning with the word "atom") must be deleted or commented out.
+(Leave the rest of the file alone.)
For example:
-Let's assume this new file is called "oplsaa_subset.txt". If you were
-working with ethylene you would delete every atom except for atom 85(C=)
-and 86(H-C=) and use that as the input file for oplsaa_moltemplate.py
+If you were working with ethylene, you would delete every line
+beginning with the word "atom", except for these two lines:
+
-atom 85 37 CM "Alkene H2-C=" 6 12.011 3
-atom 86 36 HC "Alkene H-C=" 1 1.008 1
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
-You do not need to make any other changes other than that. Then run:
-python oplsaa_moltemplate.py oplsaa_subset.txt
+Then you are ready to run oplsaa_moltemplate.py on this file.
- ...this will create a file named "oplsaa.lt"
+(You can try to delete more irrelevant information, but be careful.
+ It is not necessary, and it is easy to make mistakes.)
-Look over the newly created "oplsaa.lt" file. Then copy it to the "common" directory (where other force-field files like gaff.lt are located, ...or just copy it to wherever you plan to run moltemplate).
-Then you can create molecules that refer to it using:
+----- Using the "oplsaa.lt" file -----
+
+Once you have created the "oplsaa.lt" file, you can create files (like
+ethylene.lt) which define molecules that refer to these atom types.
+Here is an excerpt from "ethyelene.lt":
Ethylene inherits OPLSAA {
- # Definition of Ethylene molecule goes here.
+ write('Data Atoms') {
+ list of atoms goes here ...
+ }
+ write('Data Bond List') {
+ list of bonds goes here ...
+ }
}
-CHARGE:
+And then run moltemplate.
+
+
+----------- CHARGE: -----------
By default, the OPLSAA force-field assigns atom charge according to atom type.
When you run moltemplate, it will create a file named "system.in.charges",
containing commands like:
set type 2 charge -0.42
set type 3 charge 0.21
(This assumes your main moltemplate file is named "system.lt". If it was
named something else, eg "polymer.lt", then the file created by moltemplate
will be named "polymer.in.charges".)
Include these commands somewhere in your LAMMPS input script
(or use the LAMMPS "include" command to load the commands in system.in.charges)
Note that the atom numbers (eg "2", "3") in this file will not match the
OPLS atom numbers. (Check the output_ttree/ttree_assignments.txt file,
created by moltemplate, to see a table of "@atom" type numbers translated
from OPLSAA into LAMMPS.)
--Jason Lambert
-February, 2014
+----------- CREDIT -----------
+
+If you use these tools and you publish a paper using OPLSAA, please also cite
+the TINKER program. (Because these examples use the "oplsaa.prm" file which
+is distributed with TINKER.) I think these are the relevant citations:
+
+1) Ponder, J. W., & Richards, F. M. (1987). "An efficient newton‐like method for molecular mechanics energy minimization of large molecules. Journal of Computational Chemistry", 8(7), 1016-1024.
+
+2) Ponder, J. W, (2004) "TINKER: Software tools for molecular design", http://dasher.wustl.edu/tinker/
+
+-------------------------------
-Please email bugs to jewett.aij@gmail.com
+Jason Lambert and Andrew Jewett
+April, 2014
+Please email bugs to jewett.aij@gmail.com and jlamber9@gmail.com
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/README.TXT b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/README.TXT
new file mode 100644
index 000000000..2fc1ea29e
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/README.TXT
@@ -0,0 +1,16 @@
+MOST USERS SHOULD IGNORE THIS DIRECTORY.
+
+This directory contains versions of the oplsaa_subset.prm file
+which nearly all of the OPLSAA force-field information removed.
+However for the "ethylene+benzene" example, all of the essential
+parameters are contained in these files. You can use oplsaa_moltemplate.py
+with either of these files and the physics should be the same.
+
+However there is no reason to do this.
+When you download the "oplsaa.prm" file from:
+http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+(also http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm)
+...just remove the lines beginning with "atom" for atoms you don't need.
+You don't have to delete all the other irrelevant interactions.
+(In fact, it is hard to do that without making a mistake.
+ I recommend that you leave the rest of the oplsaa.prm file alone.)
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_minimal.prm b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_minimal.prm
new file mode 100644
index 000000000..031343dab
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_minimal.prm
@@ -0,0 +1,22 @@
+ #############################
+ ## Atom Type Definitions ##
+ #############################
+
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+
+vdw 88 3.5500 0.0760
+vdw 89 2.4200 0.0300
+
+bond 46 47 340.00 1.0800
+bond 47 47 549.00 1.3400
+
+angle 46 47 46 35.00 117.00
+angle 46 47 47 35.00 120.00
+
+torsion 46 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+
+imptors 0 0 47 0 30.000 180.0 2
+
+charge 88 -0.2300
+charge 89 0.1150
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_simplified.prm b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_simplified.prm
new file mode 100644
index 000000000..8beeb8407
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/minimal_versions/oplsaa_subset_simplified.prm
@@ -0,0 +1,25 @@
+ #############################
+ ## Atom Type Definitions ##
+ #############################
+
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+
+vdw 88 3.5500 0.0760
+vdw 89 2.4200 0.0300
+
+bond 46 47 340.00 1.0800
+bond 47 47 549.00 1.3400
+
+angle 46 47 46 35.00 117.00
+angle 46 47 47 35.00 120.00
+
+torsion 47 46 47 46 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 0 47 47 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+
+imptors 0 0 47 0 30.000 180.0 2
+
+charge 88 -0.2300
+charge 89 0.1150
+
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa.txt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa.txt
deleted file mode 100644
index 01d1b6296..000000000
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa.txt
+++ /dev/null
@@ -1,5968 +0,0 @@
-# This text appears to be taken from the "oplsaa.prm" file here:
-# http://dasher.wustl.edu/ffe/distribution/params/oplsaa.prm
-
- ##############################
- ## ##
- ## Force Field Definition ##
- ## ##
- ##############################
-
-
-#forcefield OPLS-AA
-#vdwindex TYPE
-#vdwtype LENNARD-JONES
-#radiusrule GEOMETRIC
-#radiustype SIGMA
-#radiussize DIAMETER
-#epsilonrule GEOMETRIC
-#torsionunit 0.5
-#imptorunit 0.5
-#vdw-14-scale 2.0
-#chg-14-scale 2.0
-#electric 332.06
-#dielectric 1.0
-
-
- #############################
- ## ##
- ## Literature References ##
- ## ##
- #############################
-
-
-#The parameters supplied with TINKER are from "OPLS All-Atom Parameters
-#for Organic Molecules, Ions, Peptides & Nucleic Acids, July 2008" as
-#provided by W. L. Jorgensen, Yale University during June 2009. These
-#parameters are taken from those distributed with BOSS Version 4.8.
-
-#Note that "atom type" numbers and not "atom class" numbers are used
-#to index van der Waals parameters, see the "vdwindex" keyword above
-
-#The atom types with (UA) in the description are "united atom" values,
-#ie, OPLS-UA, where any nonpolar hydrogen atoms are combined onto their
-#attached atoms. All other parameters are "all-atom", OPLS-AA, including
-#explicit hydrogen atoms.
-
-
- #############################
- ## ##
- ## Atom Type Definitions ##
- ## ##
- #############################
-
-
-atom 1 1 F "Fluoride -CH2-F (UA)" 9 18.998 1
-atom 2 2 C2 "Fluoride -CH2-F (UA)" 6 14.027 2
-atom 3 3 C "Acetic Acid -COOH (UA)" 6 12.011 3
-atom 4 4 O "Acetic Acid >C=O (UA)" 8 15.999 1
-atom 5 5 OH "Acetic Acid -OH (UA)" 8 15.999 2
-atom 6 6 C3 "Acetic Acid CH3- (UA)" 6 15.035 1
-atom 7 7 HO "Acetic Acid -OH (UA)" 1 1.008 1
-atom 8 8 C4 "Methane CH4 (UA)" 6 16.043 0
-atom 9 6 C3 "Ethane CH3- (UA)" 6 15.035 1
-atom 10 6 C3 "N-Alkane CH3- (UA)" 6 15.035 1
-atom 11 6 C3 "Isobutane CH3- (UA)" 6 15.035 1
-atom 12 6 C3 "Neopentane CH3- (UA)" 6 15.035 1
-atom 13 2 C2 "Alkanes -CH2- (UA)" 6 14.027 2
-atom 14 9 C9 "1-Alkene CH2= (UA)" 6 14.027 1
-atom 15 10 CH "Isobutane CH (UA)" 6 13.019 3
-atom 16 11 C8 "2-Alkene -CH= (UA)" 6 13.019 2
-atom 17 12 CD "Aromatic CH (UA)" 6 13.019 2
-atom 18 13 CT "Neopentane C (UA)" 6 12.011 4
-atom 19 14 C7 "Isobutene >C= (UA)" 6 12.011 3
-atom 20 5 OH "Alcohol OH (UA)" 8 15.999 2
-atom 21 7 HO "Alcohol OH (UA)" 1 1.008 1
-atom 22 6 C3 "Methanol CH3- (UA)" 6 15.035 1
-atom 23 2 C2 "Ethanol -CH2OH (UA)" 6 14.027 2
-atom 24 15 SH "Hydrogen Sulfide H2S" 16 32.060 2
-atom 25 15 SH "Alkyl Sulfide RSH (UA)" 16 32.060 2
-atom 26 16 S "Thioether RSR (UA)" 16 32.060 2
-atom 27 16 S "Disulfide RSSR (UA)" 16 32.060 2
-atom 28 17 HS "Hydrogen Sulfide H2S" 1 1.008 1
-atom 29 17 HS "Alkyl Sulfide RSH (UA)" 1 1.008 1
-atom 30 6 C3 "Methyl Sulfide CH3 (UA)" 6 15.035 1
-atom 31 2 C2 "Alkyl Sulfide CH2 (UA)" 6 14.027 2
-atom 32 6 C3 "Thioether CH3 (UA)" 6 15.035 1
-atom 33 2 C2 "Thioether CH2 (UA)" 6 14.027 2
-atom 34 6 C3 "Disulfide CH3 (UA)" 6 15.035 1
-atom 35 2 C2 "Disulfide CH2 (UA)" 6 14.027 2
-atom 36 18 NZ "Acetonitrile -CN (UA)" 7 14.007 1
-atom 37 19 CZ "Acetonitrile -CN (UA)" 6 12.011 2
-atom 38 6 C3 "Acetonitrile CH3 (UA)" 6 15.035 1
-atom 39 20 OW "TIP5P Water O" 8 15.999 4
-atom 40 21 HW "TIP5P Water H" 1 1.008 1
-atom 41 22 LP "TIP5P Water M" 99 0.000 1
-atom 42 23 DM "Dummy Atom" 99 0.000 0
-atom 43 24 He "Helium Atom" 2 4.003 0
-atom 44 25 Ne "Neon Atom" 10 20.179 0
-atom 45 26 Ar "Argon Atom" 18 39.948 0
-atom 46 27 Kr "Krypton Atom" 36 83.800 0
-atom 47 28 Xe "Xenon Atom" 54 131.300 0
-atom 48 10 CH "Isopropanol >CHOH (UA)" 6 13.019 3
-atom 49 13 CT "t-Butanol COH (UA)" 6 12.011 4
-atom 50 29 OS "Ether ROR (UA)" 8 15.999 2
-atom 51 6 C3 "Ether CH3-OR (UA)" 6 15.035 1
-atom 52 2 C2 "Ether -CH2-OR (UA)" 6 14.027 2
-atom 53 20 OW "TIP3P Water O" 8 15.999 2
-atom 54 21 HW "TIP3P Water H" 1 1.008 1
-atom 55 20 OW "TIP4P Water O" 8 15.999 3
-atom 56 21 HW "TIP4P Water H" 1 1.008 1
-atom 57 22 LP "TIP4P Water M" 99 0.000 1
-atom 58 20 OW "TIP3F Water O" 8 15.999 2
-atom 59 21 HW "TIP3F Water H" 1 1.008 1
-atom 60 2 C2 "Methylene Chloride (UA)" 6 14.027 2
-atom 61 30 Cl "Methylene Chloride (UA)" 17 35.453 1
-atom 62 10 CH "Chloroform CHCl3 (UA)" 6 12.011 3
-atom 63 30 Cl "Chloroform CHCl3 (UA)" 17 35.453 1
-atom 64 13 CT "Carbon Tetrachloride" 6 12.011 4
-atom 65 30 Cl "Carbon Tetrachloride" 17 35.453 1
-atom 66 31 SZ "DMSO >S=O (UA)" 16 32.060 3
-atom 67 32 OY "DMSO >S=O (UA)" 8 15.999 1
-atom 68 6 C3 "DMSO CH3- (UA)" 6 15.035 1
-atom 69 33 NT "Ammonia NH3" 7 14.007 3
-atom 70 34 H "Ammonia NH3" 1 1.008 1
-atom 71 4 O "DMF C=O (UA)" 8 15.999 1
-atom 72 35 N "DMF CON< (UA)" 7 14.007 3
-atom 73 3 C "DMF C=O (UA)" 6 12.011 3
-atom 74 6 C3 "DMF CH3- (UA)" 6 15.035 1
-atom 75 20 OW "SPC Water O" 8 15.999 2
-atom 76 21 HW "SPC Water H" 1 1.008 1
-atom 77 13 CT "Alkane CH3-" 6 12.011 4
-atom 78 13 CT "Alkane -CH2-" 6 12.011 4
-atom 79 13 CT "Alkane >CH-" 6 12.011 4
-atom 80 13 CT "Methane CH4" 6 12.011 4
-atom 81 13 CT "Alkane >C<" 6 12.011 4
-atom 82 36 HC "Alkane H-C" 1 1.008 1
-atom 83 37 CM "Alkene R2-C=" 6 12.011 3
-atom 84 37 CM "Alkene RH-C=" 6 12.011 3
-atom 85 37 CM "Alkene H2-C=" 6 12.011 3
-atom 86 36 HC "Alkene H-C=" 1 1.008 1
-atom 87 38 CA "Aromatic C" 6 12.011 3
-atom 88 39 HA "Aromatic H-C" 1 1.008 1
-atom 89 38 CA "Naphthalene Fusion C" 6 12.011 3
-atom 90 13 CT "Ethyl Benzene CH3-" 6 12.011 4
-atom 91 13 CT "Ethyl Benzene -CH2-" 6 12.011 4
-atom 92 40 C= "Diene =CH-CH=" 6 12.011 3
-atom 93 5 OH "Alcohol -OH" 8 15.999 2
-atom 94 7 HO "Alcohol -OH" 1 1.008 1
-atom 95 36 HC "Methanol CH3-" 1 1.008 1
-atom 96 13 CT "Alcohol CH3OH & RCH2OH" 6 12.011 4
-atom 97 13 CT "Alcohol R2CHOH" 6 12.011 4
-atom 98 13 CT "Alcohol R3COH" 6 12.011 4
-atom 99 13 CT "Trifluoroethanol -CH2-" 6 12.011 4
-atom 100 13 CT "Trifluoroethanol CF3-" 6 12.011 4
-atom 101 5 OH "Trifluoroethanol -OH" 8 15.999 2
-atom 102 7 HO "Trifluoroethanol -OH" 1 1.008 1
-atom 103 1 F "Trifluoroethanol F" 9 18.998 1
-atom 104 36 HC "Trifluoroethanol -CH2-" 1 1.008 1
-atom 105 38 CA "Phenol C-OH" 6 12.011 3
-atom 106 5 OH "Phenol -OH" 8 15.999 2
-atom 107 7 HO "Phenol -OH" 1 1.008 1
-atom 108 5 OH "Diol -OH" 8 15.999 2
-atom 109 7 HO "Diol -OH" 1 1.008 1
-atom 110 5 OH "Triol -OH" 8 15.999 2
-atom 111 7 HO "Triol -OH" 1 1.008 1
-atom 112 13 CT "Diol & Triol -CH2OH" 6 12.011 4
-atom 113 13 CT "Diol & Triol -CHROH" 6 12.011 4
-atom 114 13 CT "Diol & Triol -CR2OH" 6 12.011 4
-atom 115 36 HC "Diol & Triol H-COH" 1 1.008 1
-atom 116 29 OS "Diphenyl Ether" 8 15.999 2
-atom 117 40 C= "Diene =CR-CR=" 6 12.011 3
-atom 118 29 OS "Anisole -OCH3" 8 15.999 1
-atom 119 29 OS "Dialkyl Ether -O-" 8 15.999 2
-atom 120 13 CT "Methyl Ether CH3OR" 6 12.011 4
-atom 121 13 CT "Ethyl Ether -CH2OR" 6 12.011 4
-atom 122 13 CT "Isopropyl Ether >CHOR" 6 12.011 4
-atom 123 13 CT "t-Butyl Ether COR" 6 12.011 4
-atom 124 36 HC "Alkyl Ether H-COR" 1 1.008 1
-atom 125 29 OS "Acetal RO-CR2OX" 8 15.999 4
-atom 126 5 OH "Hemiacetal -OH" 8 15.999 2
-atom 127 7 HO "Hemiacetal -OH" 1 1.008 1
-atom 128 41 CO "Acetal RO-CH2-OR" 6 12.011 4
-atom 129 36 HC "Acetal RO-CH2-OR" 1 1.008 1
-atom 130 41 CO "Hemiacetal RO-CH2-OH" 6 12.011 4
-atom 131 36 HC "Hemiacetal RO-CH2-OH" 1 1.008 1
-atom 132 41 CO "Acetal RO-CHR-OR" 6 12.011 4
-atom 133 36 HC "Acetal RO-CHR-OR" 1 1.008 1
-atom 134 41 CO "Hemiacetal RO-CHR-OH" 6 12.011 4
-atom 135 36 HC "Hemiacetal RO-CHR-OH" 1 1.008 1
-atom 136 41 CO "Acetal RO-CR2-OR" 6 12.011 4
-atom 137 41 CO "Hemiacetal RO-CR2-OH" 6 12.011 4
-atom 138 38 CA "Anisole C-OCH3" 6 12.011 4
-atom 139 15 SH "Thiol -SH" 16 32.060 2
-atom 140 15 SH "Hydrogen Sulfide H2S" 16 32.060 2
-atom 141 16 S "Sulfide -S-" 16 32.060 2
-atom 142 16 S "Disulfide -S-S-" 16 32.060 2
-atom 143 17 HS "Thiol -SH" 1 1.008 1
-atom 144 17 HS "Hydrogen Sulfide H2S" 1 1.008 1
-atom 145 13 CT "Thiol -CH2-SH" 6 12.011 4
-atom 146 13 CT "Thiol >CH-SH" 6 12.011 4
-atom 147 13 CT "Thiol C-SH" 6 12.011 4
-atom 148 13 CT "Methyl Sulfide CH3-SR" 6 12.011 4
-atom 149 13 CT "Sulfide RCH2-SR" 6 12.011 4
-atom 150 13 CT "Sulfide R2CH-SR" 6 12.011 4
-atom 151 13 CT "Sulfide R3C-SR" 6 12.011 4
-atom 152 13 CT "Disulfide CH3-S-SR" 6 12.011 4
-atom 153 13 CT "Disulfide RCH2-S-SR" 6 12.011 4
-atom 154 13 CT "Disulfide R2CH-S-SR" 6 12.011 4
-atom 155 13 CT "Disulfide R3C-S-SR" 6 12.011 4
-atom 156 13 CT "Methanethiol CH3-SH" 6 12.011 4
-atom 157 13 CT "Benzyl Alcohol -CH2OH" 6 12.011 4
-atom 158 13 CT "Benzyl Alcohol -CHROH" 6 12.011 4
-atom 159 13 CT "Benzyl Alcohol -CR2OH" 6 12.011 4
-atom 160 38 CA "Benzyl Alcohol/Nitrile" 6 12.011 3
-atom 161 16 S "Thioanisole -SCH3" 16 32.060 2
-atom 162 13 CT "RCH2-NH2 & GLY CA" 6 12.011 4
-atom 163 13 CT "RCHR-NH2 & ALA CA" 6 12.011 4
-atom 164 13 CT "R3C-NH2 & AIB CA" 6 12.011 4
-atom 165 30 Cl "Chloroalkene Cl-CH=" 17 35.453 1
-atom 166 37 CM "Chloroalkene Cl-CH=" 6 12.011 3
-atom 167 38 CA "Thioanisole C-SCH3" 6 12.011 3
-atom 168 13 CT "Amide -NH-CHR2" 6 12.011 4
-atom 169 13 CT "Amide -NH-CR3" 6 12.011 4
-atom 170 3 C "Benzophenone C=O" 6 12.011 3
-atom 171 3 C "Benzaldehyde C=O" 6 12.011 3
-atom 172 3 C "Acetophenone C=O" 6 12.011 3
-atom 173 3 C "Benzamide C=O" 6 12.011 3
-atom 174 3 C "Amide C=O" 6 12.011 3
-atom 175 4 O "Amide C=O" 8 15.999 1
-atom 176 35 N "Amide -CO-NH2" 7 14.007 3
-atom 177 35 N "Amide -CO-NHR" 7 14.007 3
-atom 178 35 N "Amide -CO-NR2" 7 14.007 3
-atom 179 34 H "Amide -CO-NH2" 1 1.008 1
-atom 180 34 H "Amide -CO-NHR" 1 1.008 1
-atom 181 13 CT "Amide -NH-CH3" 6 12.011 4
-atom 182 13 CT "Amide -NR-CH3" 6 12.011 4
-atom 183 13 CT "Amide -NH-CH2R" 6 12.011 4
-atom 184 13 CT "Amide -NR-CH2R & PRO CD" 6 12.011 4
-atom 185 13 CT "Amide -NR-CHR2 & PRO CA" 6 12.011 4
-atom 186 3 C "Urea C=O" 6 12.011 3
-atom 187 4 O "Urea C=O" 8 15.999 1
-atom 188 35 N "Urea -NH2" 7 14.007 3
-atom 189 34 H "Urea -NH2" 1 1.008 1
-atom 190 35 N "Imide -NH-" 7 14.007 3
-atom 191 3 C "Imide C=O" 6 12.011 3
-atom 192 4 O "Imide C=O" 8 15.999 1
-atom 193 34 H "Imide -NH-" 1 1.008 1
-atom 194 36 HC "Formimide H-C=O" 1 1.008 1
-atom 195 13 CT "Imide CH3-CONHCO-" 6 12.011 4
-atom 196 13 CT "Imide -CH2-CONHCO-" 6 12.011 4
-atom 197 13 CT "Imide >CH-CONHCO-" 6 12.011 4
-atom 198 13 CT "Imide C-CONHCO-" 6 12.011 4
-atom 199 38 CA "Benzonitrile C-CN" 6 12.011 3
-atom 200 19 CZ "Benzonitrile -CN" 6 12.011 2
-atom 201 18 NZ "Benzonitrile -CN" 7 14.007 1
-atom 202 38 CA "Chlorobenzene C-Cl" 6 12.011 3
-atom 203 30 Cl "Chlorobenzene C-Cl" 17 35.453 1
-atom 204 35 N "N-Phenylacetamide N" 7 14.007 3
-atom 205 38 CA "N-Phenylacetamide N-CA" 6 12.011 3
-atom 206 3 C "Carboxylic Acid -COOH" 6 12.011 3
-atom 207 5 OH "Carboxylic Acid C=O" 8 15.999 1
-atom 208 4 O "Carboxylic Acid -OH" 8 15.999 2
-atom 209 7 HO "Carboxylic Acid -COOH" 1 1.008 1
-atom 210 3 C "Carboxylate COO-" 6 12.011 3
-atom 211 42 O2 "Carboxylate COO-" 8 15.999 1
-atom 212 13 CT "Carboxylate CH3-COO-" 6 12.011 4
-atom 213 13 CT "Carboxylate RCH2-COO-" 6 12.011 4
-atom 214 13 CT "Carboxylate R2CH-COO-" 6 12.011 4
-atom 215 13 CT "Carboxylate R3C-COO-" 6 12.011 4
-atom 216 3 C "Aldehyde/Acyl Halide C=O" 6 12.011 3
-atom 217 4 O "Aldyhyde/Acyl Halide C=O" 8 15.999 1
-atom 218 36 HC "Aldehyde/Formamide HCO-" 1 1.008 1
-atom 219 3 C "Ketone C=O" 6 12.011 3
-atom 220 4 O "Ketone C=O" 8 15.999 1
-atom 221 36 HC "Acyl H-C-COX" 1 1.008 1
-atom 222 13 CT "C-Terminal ALA CA" 6 12.011 4
-atom 223 13 CT "C-Terminal GLY CA" 6 12.011 4
-atom 224 13 CT "C-Terminal AIB CA" 6 12.011 4
-atom 225 13 CT "C-Terminal PRO CA" 6 12.011 4
-atom 226 43 N3 "Ammonium NH4+" 7 14.007 4
-atom 227 43 N3 "Ammonium RNH3+" 7 14.007 4
-atom 228 43 N3 "Ammonium R4N+" 7 14.007 4
-atom 229 44 H3 "Ammonium NH4+" 1 1.008 1
-atom 230 44 H3 "Ammonium RNH3+" 1 1.008 1
-atom 231 13 CT "Ammonium CH3-NH3+" 6 12.011 4
-atom 232 13 CT "CH3NH3+/N-Term GLY CA" 6 12.011 4
-atom 233 13 CT "RCH2NH3+/N-Term ALA CA" 6 12.011 4
-atom 234 13 CT "R3C-NH3+/N-Term AIB CA" 6 12.011 4
-atom 235 13 CT "N-Terminal PRO CA" 6 12.011 4
-atom 236 13 CT "N-Terminal PRO CD" 6 12.011 4
-atom 237 13 CT "Ammonium CH3-NH2R+" 6 12.011 4
-atom 238 13 CT "GLY Zwitterion CA" 6 12.011 4
-atom 239 13 CT "ALA Zwitterion CA" 6 12.011 4
-atom 240 45 N2 "Guanidinium -NH2" 7 14.007 3
-atom 241 44 H3 "Guanidinium -NH2" 1 1.008 1
-atom 242 38 CA "Guanidinium C+" 6 12.011 3
-atom 243 45 N2 "Guanidinium -NHR" 7 14.007 3
-atom 244 44 H3 "Guanidinium -NHR" 1 1.008 1
-atom 245 13 CT "Me Guanidinium CH3-" 6 12.011 4
-atom 246 13 CT "Et Guanidinium CH3-" 6 12.011 4
-atom 247 13 CT "Et Guan -CH2- & ARG CD" 6 12.011 4
-atom 248 13 CT "Pr Guan -CH2- & ARG CG" 6 12.011 4
-atom 249 43 N3 "Ammonium R2NH2+" 7 14.007 4
-atom 250 44 H3 "Ammonium R2NH2+" 1 1.008 1
-atom 251 46 NC "Diaminopyridine N1" 7 14.007 2
-atom 252 38 CA "Diaminopyridine C2" 6 12.011 3
-atom 253 45 N2 "Diaminopyridine -NH2" 7 14.007 3
-atom 254 34 H "Diaminopyridine -NH2" 1 1.008 3
-atom 255 38 CA "Diaminopyridine C3" 6 12.011 3
-atom 256 39 HA "Diaminopyridine H3" 1 1.008 1
-atom 257 38 CA "Diaminopyridine C4" 6 12.011 3
-atom 258 39 HA "Diaminopyridine H4" 1 1.008 1
-atom 259 47 NA "Uracil & Thymine N1" 7 14.007 3
-atom 260 3 C "Uracil & Thymine C2" 6 12.011 3
-atom 261 47 NA "Uracil & Thymine N3" 7 14.007 3
-atom 262 3 C "Uracil & Thymine C4" 6 12.011 3
-atom 263 37 CM "Uracil & Thymine C5" 6 12.011 3
-atom 264 37 CM "Uracil & Thymine C6" 6 12.011 3
-atom 265 34 H "Uracil & Thymine HN1" 1 1.008 1
-atom 266 4 O "Uracil & Thymine O2" 8 15.999 1
-atom 267 34 H "Uracil & Thymine HN3" 1 1.008 1
-atom 268 4 O "Uracil & Thymine O4" 8 15.999 1
-atom 269 36 HC "Uracil & Thymine HC5" 1 1.008 1
-atom 270 36 HC "Uracil & Thymine HC6" 1 1.008 1
-atom 271 13 CT "Thymine CH3-" 6 12.011 4
-atom 272 36 HC "Thymine CH3-" 1 1.008 1
-atom 273 47 NA "Cytosine N1" 7 14.007 3
-atom 274 3 C "Cytosine C2" 6 12.011 3
-atom 275 46 NC "Cytosine N3" 7 14.007 2
-atom 276 38 CA "Cytosine C4" 6 12.011 3
-atom 277 37 CM "Cytosine C5" 6 12.011 3
-atom 278 37 CM "Cytosine C6" 6 12.011 3
-atom 279 34 H "Cytosine HN1" 1 1.008 1
-atom 280 4 O "Cytosine O2" 8 15.999 1
-atom 281 45 N2 "Cytosine NH2-" 7 14.007 3
-atom 282 34 H "Cytosine NH2- (N3)" 1 1.008 1
-atom 283 34 H "Cytosine NH2- (C5)" 1 1.008 1
-atom 284 36 HC "Cytosine HC5" 1 1.008 1
-atom 285 48 H4 "Cytosine HC6" 1 1.008 1
-atom 286 46 NC "Adenine N1" 7 14.007 2
-atom 287 49 CQ "Adenine C2" 6 12.011 3
-atom 288 46 NC "Adenine N3" 7 14.007 2
-atom 289 50 CB "Adenine C4" 6 12.011 3
-atom 290 50 CB "Adenine C5" 6 12.011 3
-atom 291 38 CA "Adenine C6" 6 12.011 3
-atom 292 51 NB "Adenine & Guanine N7" 7 14.007 2
-atom 293 52 CK "Adenine & Guanine C8" 6 12.011 3
-atom 294 47 NA "Adenine & Guanine N9" 7 14.007 2
-atom 295 53 H5 "Adenine HC2" 1 1.008 1
-atom 296 45 N2 "Adenine NH2-" 7 14.007 3
-atom 297 34 H "Adenine NH2- (N1)" 1 1.008 1
-atom 298 34 H "Adenine NH2- (C5)" 1 1.008 1
-atom 299 53 H5 "Adenine & Guanine HC8" 1 1.008 1
-atom 300 34 H "Adenine & Guanine HN9" 1 1.008 1
-atom 301 47 NA "Guanine N1" 7 14.007 3
-atom 302 38 CA "Guanine C2" 6 12.011 3
-atom 303 46 NC "Guanine N3" 7 14.007 2
-atom 304 50 CB "Guanine C4" 6 12.011 3
-atom 305 50 CB "Guanine C5" 6 12.011 3
-atom 306 3 C "Guanine C6" 6 12.011 3
-atom 307 34 H "Guanine HN1" 1 1.008 1
-atom 308 45 N2 "Guanine NH2-" 7 14.007 3
-atom 309 34 H "Guanine NH2-" 1 1.008 1
-atom 310 4 O "Guanine O6" 8 15.999 1
-atom 311 13 CT "9-Me A & 9-Me-G CH3-" 6 12.011 4
-atom 312 36 HC "9-Me-A & 9-Me-G CH3-" 1 1.008 1
-atom 313 13 CT "1-Me-U & 1-Me-T CH3-" 6 12.011 4
-atom 314 36 HC "1-Me-U & 1-Me-T CH3-" 1 1.008 1
-atom 315 13 CT "1-Me-Cytosine CH3-" 6 12.011 4
-atom 316 36 HC "1-Me-Cytosine CH3-" 1 1.008 1
-atom 317 47 NA "CytosineH+ N1" 7 14.007 3
-atom 318 3 C "CytosineH+ C2" 6 12.011 3
-atom 319 47 NA "CytosineH+ N3" 7 14.007 3
-atom 320 38 CA "CytosineH+ C4" 6 12.011 3
-atom 321 37 CM "CytosineH+ C5" 6 12.011 3
-atom 322 37 CM "CytosineH+ C6" 6 12.011 3
-atom 323 34 H "CytosineH+ HN1" 1 1.008 1
-atom 324 4 O "CytosineH+ O2" 8 15.999 1
-atom 325 34 H "CytosineH+ HN3" 1 1.008 1
-atom 326 45 N2 "CytosineH+ NH2-" 7 14.007 3
-atom 327 34 H "CytosineH+ NH2- (N3)" 1 1.008 1
-atom 328 34 H "CytosineH+ NH2- (C5)" 1 1.008 1
-atom 329 39 HA "CytosineH+ HC5" 1 1.008 1
-atom 330 48 H4 "CytosineH+ HC6" 1 1.008 1
-atom 331 13 CT "1-Me-CytosineH+ CH3-" 6 12.011 4
-atom 332 36 HC "1-Me-CytosineH+ CH3-" 1 1.008 1
-atom 333 54 P "DiMePhosphate P (UA)" 15 30.974 4
-atom 334 42 O2 "DiMePhosphate O=P-O (UA)" 8 15.999 1
-atom 335 29 OS "DiMePhosphate CH3-O (UA)" 8 15.999 2
-atom 336 13 CT "DiMePhosphate CH3-O (UA)" 6 15.035 1
-atom 337 37 CM "Trifluorothymine CF3-" 6 12.011 4
-atom 338 30 Cl "Chloroalkene Cl2-C=" 17 35.453 1
-atom 339 37 CM "Chloroalkene Cl2-C=" 6 12.011 3
-atom 340 1 F "Fluoride Ion F-" 9 18.998 0
-atom 341 30 Cl "Chloride Ion Cl-" 17 35.453 0
-atom 342 55 Br "Bromide Ion Br-" 35 79.904 0
-atom 343 56 I "Iodide Ion I-" 53 126.905 0
-atom 344 57 N4 "Ammonium Ion NH4+ (UA)" 7 18.039 0
-atom 345 58 Li "Lithium Ion Li+" 3 6.941 0
-atom 346 59 Na "Sodium Ion Na+" 11 22.990 0
-atom 347 60 K "Potassium Ion K+" 19 39.098 0
-atom 348 61 Rb "Rubidium Ion Rb+" 37 85.468 0
-atom 349 62 Cs "Cesium Ion Cs+" 55 132.905 0
-atom 350 63 Mg "Magnesium Ion Mg+2" 12 24.305 0
-atom 351 64 Ca "Calcium Ion Ca+2" 20 40.080 0
-atom 352 65 Sr "Strontium Ion Sr+2" 38 87.620 0
-atom 353 66 Ba "Barium Ion Ba+2" 56 137.330 0
-atom 354 6 C3 "Methyl Thiolate CH3S-" 6 12.011 4
-atom 355 36 HC "Methyl Thiolate CH3S-" 1 1.008 1
-atom 356 15 SH "Methyl Thiolate CH3S-" 16 32.060 1
-atom 357 6 C3 "Methoxide CH3O-" 6 12.011 4
-atom 358 36 HC "Methoxide CH3O-" 1 1.008 1
-atom 359 5 OH "Methoxide CH3O-" 8 15.999 1
-atom 360 13 CT "Nitrile Anion CNCH2-" 6 12.011 3
-atom 361 36 HC "Nitrile Anion CNCH2-" 1 1.008 1
-atom 362 19 CZ "Nitrile Anion CNCH2-" 6 12.011 2
-atom 363 18 NZ "Nitrile Anion CNCH2-" 7 14.007 1
-atom 364 6 C3 "Me Amine Anion CH3NH-" 6 12.011 4
-atom 365 36 HC "Me Amine Anion CH3NH-" 1 1.008 1
-atom 366 43 N3 "Me Amine Anion CH3NH-" 7 14.007 2
-atom 367 34 H "Methyl Amine Anion" 1 1.008 1
-atom 368 6 C3 "Ethyl Anion CH3-CH2-" 6 12.011 4
-atom 369 36 HC "Ethyl Anion CH3-CH2-" 1 1.008 1
-atom 370 13 CT "Ethyl Anion CH3-CH2-" 6 12.011 4
-atom 371 36 HC "Ethyl Anion CH3-CH2-" 1 1.008 1
-atom 372 22 LP "Ethyl Anion CH3-CH2-" 99 0.000 1
-atom 373 5 OH "Hydroxide Ion OH-" 8 15.999 1
-atom 374 7 HO "Hydroxide Ion OH-" 1 1.008 1
-atom 375 67 U "Uranyl Ion UO2+" 92 238.029 2
-atom 376 68 OU "Uranyl Ion UO2+" 8 15.999 1
-atom 377 29 OS "GTP O-(POn)2" 8 15.999 2
-atom 378 54 P "DiMe Phosphate P" 15 30.974 4
-atom 379 42 O2 "DiMe Phosphate O=P-O" 8 15.999 1
-atom 380 29 OS "DiMe Phosphate CH3-O" 8 15.999 1
-atom 381 13 CT "DiMe Phosphate CH3-O" 6 12.011 4
-atom 382 36 HC "DiMe Phosphate CH3-O" 1 1.008 1
-atom 383 54 P "Me Phosphate P" 15 30.974 4
-atom 384 42 O2 "Me Phosphate O=PO2" 8 15.999 1
-atom 385 29 OS "Me Phosphate CH3-O" 8 15.999 1
-atom 386 13 CT "Me Phosphate CH3-O" 6 12.011 4
-atom 387 36 HC "Me Phosphate CH3-O" 1 1.008 1
-atom 388 54 P "Me MePhosphonate P" 15 30.974 4
-atom 389 42 O2 "Me MePhosphonate O=P-O" 8 15.999 1
-atom 390 29 OS "Me MePhosphonate CH3-O" 8 15.999 1
-atom 391 13 CT "Me MePhosphonate CH3-O" 6 12.011 4
-atom 392 36 HC "Me MePhosphonate CH3-O" 1 1.008 1
-atom 393 13 CT "Me MePhosphonate CH3-P" 6 12.011 4
-atom 394 36 HC "Me MePhosphonate CH3-P" 1 1.008 1
-atom 395 38 CA "Bz MePhosphonate Cipso" 6 12.011 3
-atom 396 13 CT "Bz MePhosphonate CH3-O" 6 12.011 4
-atom 397 36 HC "Bz MePhosphonate CH3-O" 1 1.008 1
-atom 398 38 CA "Me BzPhosphonate Cipso" 6 12.011 3
-atom 399 13 CT "Me BzPhosphonate CH3-P" 6 12.011 4
-atom 400 36 HC "Me BzPhosphonate CH3-P" 1 1.008 1
-atom 401 38 CA "Ph Phosphate Cipso" 6 12.011 3
-atom 402 13 CT "Barbiturate C6(R2)" 6 12.011 4
-atom 403 3 C "Ester -COOR" 6 12.011 3
-atom 404 4 O "Ester C=O" 8 15.999 1
-atom 405 29 OS "Ester CO-O-R" 8 15.999 2
-atom 406 13 CT "Methyl Ester -OCH3" 6 12.011 4
-atom 407 36 HC "Methyl Ester -OCH3" 1 1.008 1
-atom 408 3 C "Benzoic Acid -COOH" 6 12.011 3
-atom 409 3 C "Aryl Ester -COOR" 6 12.011 3
-atom 410 38 CA "Phenyl Ester Cipso" 6 12.011 3
-atom 411 29 OS "Phenyl Ester -OPh" 8 15.999 2
-atom 412 69 SY "Sulfonamide -SO2N<" 16 32.060 4
-atom 413 32 OY "Sulfonamide -SO2N<" 8 15.999 1
-atom 414 13 CT "Sulfonamide CH3-S" 6 12.011 4
-atom 415 36 HC "Sulfonamide CH3-S" 1 1.008 1
-atom 416 35 N "Sulfonamide -SO2NH2" 7 14.007 3
-atom 417 34 H "Sulfonamide -SO2NH2" 1 1.008 1
-atom 418 35 N "Sulfonamide -SO2NHR" 7 14.007 3
-atom 419 34 H "Sulfonamide -SO2NHR" 1 1.008 1
-atom 420 13 CT "N-Me Sulfonamide CH3-" 6 12.011 4
-atom 421 36 HC "N-Me Sulfonamide CH3-" 1 1.008 1
-atom 422 13 CT "Sulfonamide N-CH2-R" 6 12.011 4
-atom 423 36 HC "Sulfonamide N-CH2-R" 1 1.008 1
-atom 424 13 CT "N-Et Sulfonamide CH3-" 6 12.011 4
-atom 425 36 HC "N-Et Sulfonamide CH3-" 1 1.008 1
-atom 426 38 CA "Aryl Sulfonamide C-SO2N" 6 12.011 3
-atom 427 38 CA "Aryl Sulfoxide C-S=O" 6 12.011 3
-atom 428 13 CT "Et Ester -OCH2R" 6 12.011 4
-atom 429 13 CT "i-Pr Ester -OCHR2" 6 12.011 4
-atom 430 13 CT "t-Bu Ester -OCR3" 6 12.011 4
-atom 431 69 SY "Sulfone R-SO2-R" 16 32.060 4
-atom 432 32 OY "Sulfone R-SO2-R" 8 15.999 1
-atom 433 31 SZ "Alkyl Aryl Sulfoxide" 16 32.060 3
-atom 434 31 SZ "Dialkyl Sulfoxide" 16 32.060 3
-atom 435 32 OY "Sulfoxide R-SO-R" 8 15.999 1
-atom 436 13 CT "Sulfoxide CH3-SO-R" 6 12.011 4
-atom 437 13 CT "Sulfoxide -CH2-SO-R" 6 12.011 4
-atom 438 70 C* "TRP CG" 6 12.011 3
-atom 439 50 CB "TRP CD" 6 12.011 3
-atom 440 71 CN "TRP CE" 6 12.011 3
-atom 441 47 NA "TRP NE, HID ND & HIE NE" 7 14.007 3
-atom 442 34 H "TRP HNE & HID/HIE HN" 1 1.008 1
-atom 443 13 CT "HIS CB" 6 12.011 4
-atom 444 72 CR "HID & HIE CE1" 6 12.011 3
-atom 445 73 CV "HID CD2 & HIE CG" 6 12.011 3
-atom 446 74 CW "HID CG & HIE CD2" 6 12.011 3
-atom 447 72 CR "HIP CE1" 6 12.011 3
-atom 448 75 CX "HIP CG & CD2" 6 12.011 3
-atom 449 51 NB "HID NE & HIE ND" 7 14.007 2
-atom 450 47 NA "HIP ND & NE" 7 14.007 3
-atom 451 34 H "HIP HND & HNE" 1 1.008 1
-atom 452 74 CW "TRP CD1" 6 12.011 3
-atom 453 13 CT "i-Pr Benzene -CHMe2" 6 12.011 4
-atom 454 13 CT "t-Bu Benzene -CMe3" 6 12.011 4
-atom 455 37 CM "Vinyl Ether =CH-OR" 6 12.011 3
-atom 456 37 CM "Vinyl Ether =CR-OR" 6 12.011 3
-atom 457 76 C! "Biphenyl C1" 6 12.011 3
-atom 458 46 NC "Pyridine N" 7 14.007 2
-atom 459 38 CA "Pyridine C1" 6 12.011 3
-atom 460 38 CA "Pyridine C2" 6 12.011 3
-atom 461 38 CA "Pyridine C3" 6 12.011 3
-atom 462 39 HA "Pyridine H1" 1 1.008 1
-atom 463 39 HA "Pyridine H2" 1 1.008 1
-atom 464 39 HA "Pyridine H3" 1 1.008 1
-atom 465 46 NC "Pyrazine N" 7 14.007 2
-atom 466 38 CA "Pyrazine CH" 6 12.011 3
-atom 467 39 HA "Pyrazine CH" 1 1.008 1
-atom 468 46 NC "Pyrimidine N" 7 14.007 2
-atom 469 49 CQ "Pyrimidine C2" 6 12.011 3
-atom 470 38 CA "Pyrimidine C4" 6 12.011 3
-atom 471 38 CA "Pyrimidine C5" 6 12.011 3
-atom 472 39 HA "Pyrimidine HC2" 1 1.008 1
-atom 473 39 HA "Pyrimidine HC4" 1 1.008 1
-atom 474 39 HA "Pyrimidine HC5" 1 1.008 1
-atom 475 46 NC "Pyridazine N" 7 14.007 2
-atom 476 38 CA "Pyridazine C3" 6 12.011 3
-atom 477 38 CA "Pyridazine C4" 6 12.011 3
-atom 478 39 HA "Pyridazine HC3" 1 1.008 1
-atom 479 39 HA "Pyridazine HC4" 1 1.008 1
-atom 480 47 NA "Pyrrole N" 7 14.007 3
-atom 481 74 CW "Pyrrole C2" 6 12.011 3
-atom 482 77 CS "Pyrrole C3" 6 12.011 3
-atom 483 34 H "Pyrrole HN" 1 1.008 1
-atom 484 39 HA "Pyrrole HC2" 1 1.008 1
-atom 485 39 HA "Pyrrole HC3" 1 1.008 1
-atom 486 47 NA "Pyrazole N1" 7 14.007 3
-atom 487 51 NB "Pyrazole N2" 7 14.007 2
-atom 488 78 CU "Pyrazole C3" 6 12.011 3
-atom 489 77 CS "Pyrazole C4" 6 12.011 3
-atom 490 74 CW "Pyrazole C5" 6 12.011 3
-atom 491 34 H "Pyrazole HN1" 1 1.008 1
-atom 492 39 HA "Pyrazole HC3" 1 1.008 1
-atom 493 39 HA "Pyrazole HC4" 1 1.008 1
-atom 494 39 HA "Pyrazole HC5" 1 1.008 1
-atom 495 47 NA "Imidazole N1" 7 14.007 3
-atom 496 72 CR "Imidazole C2" 6 12.011 3
-atom 497 51 NB "Imidazole N3" 7 14.007 2
-atom 498 73 CV "Imidazole C4" 6 12.011 3
-atom 499 74 CW "Imidazole C5" 6 12.011 3
-atom 500 34 H "Imidazole HN1" 1 1.008 1
-atom 501 39 HA "Imidazole HC2" 1 1.008 1
-atom 502 39 HA "Imidazole HC4" 1 1.008 1
-atom 503 39 HA "Imidazole HC5" 1 1.008 1
-atom 504 29 OS "Furan O" 8 15.999 2
-atom 505 74 CW "Furan C2" 6 12.011 3
-atom 506 77 CS "Furan C3" 6 12.011 3
-atom 507 39 HA "Furan HC2" 1 1.008 1
-atom 508 39 HA "Furan HC3" 1 1.008 1
-atom 509 29 OS "Oxazole O" 8 15.999 2
-atom 510 72 CR "Oxazole C2" 6 12.011 3
-atom 511 51 NB "Oxazole N" 7 14.007 2
-atom 512 73 CV "Oxazole C4" 6 12.011 3
-atom 513 74 CW "Oxazole C5" 6 12.011 3
-atom 514 39 HA "Oxazole HC2" 1 1.008 1
-atom 515 39 HA "Oxazole HC4" 1 1.008 1
-atom 516 39 HA "Oxazole HC5" 1 1.008 1
-atom 517 29 OS "Isoxazole O" 8 15.999 2
-atom 518 51 NB "Isoxazole N" 7 14.007 2
-atom 519 78 CU "Isoxazole C3" 6 12.011 3
-atom 520 77 CS "Isoxazole C4" 6 12.011 3
-atom 521 74 CW "Isoxazole C5" 6 12.011 3
-atom 522 39 HA "Isoxazole HC3" 1 1.008 1
-atom 523 39 HA "Isoxazole HC4" 1 1.008 1
-atom 524 39 HA "Isoxazole HC5" 1 1.008 1
-atom 525 47 NA "Indole N1" 7 14.007 3
-atom 526 74 CW "Indole C2" 6 12.011 3
-atom 527 77 CS "Indole C3" 6 12.011 3
-atom 528 38 CA "Indole C4" 6 12.011 3
-atom 529 38 CA "Indole C5" 6 12.011 3
-atom 530 38 CA "Indole C6" 6 12.011 3
-atom 531 38 CA "Indole C7" 6 12.011 3
-atom 532 71 CN "Indole C8" 6 12.011 3
-atom 533 50 CB "Indole C9" 6 12.011 3
-atom 534 34 H "Indole HN1" 1 1.008 1
-atom 535 39 HA "Indole HC2" 1 1.008 1
-atom 536 39 HA "Indole HC3" 1 1.008 1
-atom 537 39 HA "Indole HC4" 1 1.008 1
-atom 538 39 HA "Indole HC5" 1 1.008 1
-atom 539 39 HA "Indole HC6" 1 1.008 1
-atom 540 39 HA "Indole HC7" 1 1.008 1
-atom 541 46 NC "Quinoline N1" 7 14.007 2
-atom 542 38 CA "Quinoline C2" 6 12.011 3
-atom 543 38 CA "Quinoline C3" 6 12.011 3
-atom 544 38 CA "Quinoline C4" 6 12.011 3
-atom 545 38 CA "Quinoline C5" 6 12.011 3
-atom 546 38 CA "Quinoline C6" 6 12.011 3
-atom 547 38 CA "Quinoline C7" 6 12.011 3
-atom 548 38 CA "Quinoline C8" 6 12.011 3
-atom 549 38 CA "Quinoline C9" 6 12.011 3
-atom 550 38 CA "Quinoline C10" 6 12.011 3
-atom 551 39 HA "Quinoline HC2" 1 1.008 1
-atom 552 39 HA "Quinoline HC3" 1 1.008 1
-atom 553 39 HA "Quinoline HC4" 1 1.008 1
-atom 554 39 HA "Quinoline HC5" 1 1.008 1
-atom 555 39 HA "Quinoline HC6" 1 1.008 1
-atom 556 39 HA "Quinoline HC7" 1 1.008 1
-atom 557 39 HA "Quinoline HC8" 1 1.008 1
-atom 558 46 NC "Purine N1" 7 14.007 2
-atom 559 49 CQ "Purine C2" 6 12.011 3
-atom 560 46 NC "Purine N3" 7 14.007 2
-atom 561 50 CB "Purine C4" 6 12.011 3
-atom 562 50 CB "Purine C5" 6 12.011 3
-atom 563 38 CA "Purine C6" 6 12.011 3
-atom 564 51 NB "Purine N7" 7 14.007 2
-atom 565 52 CK "Purine C8" 6 12.011 3
-atom 566 47 NA "Purine N9" 7 14.007 3
-atom 567 39 HA "Purine HC2" 1 1.008 1
-atom 568 39 HA "Purine HC6" 1 1.008 1
-atom 569 39 HA "Purine HC8" 1 1.008 1
-atom 570 34 H "Purine HN9" 1 1.008 1
-atom 571 16 S "Thiazole S" 16 32.060 2
-atom 572 72 CR "Thiazole C2" 6 12.011 3
-atom 573 51 NB "Thiazole N" 7 14.007 2
-atom 574 73 CV "Thiazole C4" 6 12.011 3
-atom 575 74 CW "Thiazole C5" 6 12.011 3
-atom 576 39 HA "Thiazole HC2" 1 1.008 1
-atom 577 39 HA "Thiazole HC4" 1 1.008 1
-atom 578 39 HA "Thiazole HC5" 1 1.008 1
-atom 579 46 NC "1,3,5-Triazine N" 7 14.007 2
-atom 580 49 CQ "1,3,5-Triazine CH" 6 12.011 3
-atom 581 39 HA "1,3,5-Triazine CH" 1 1.008 1
-atom 582 38 CA "Serotonin C5-OH" 6 12.011 3
-atom 583 13 CT "Serotonin CH2 on C3" 6 12.011 4
-atom 584 46 NC "1,10-Phenanthroline N" 7 14.007 2
-atom 585 38 CA "1,10-Phenanthroline C2" 6 12.011 3
-atom 586 38 CA "1,10-Phenanthroline C3" 6 12.011 3
-atom 587 38 CA "1,10-Phenanthroline C4" 6 12.011 3
-atom 588 38 CA "1,10-Phenanthroline C12" 6 12.011 3
-atom 589 38 CA "1,10-Phenanthroline C11" 6 12.011 3
-atom 590 38 CA "1,10-Phenanthroline C5" 6 12.011 3
-atom 591 39 HA "1,10-Phenanthroline HC2" 1 1.008 1
-atom 592 39 HA "1,10-Phenanthroline HC3" 1 1.008 1
-atom 593 39 HA "1,10-Phenanthroline HC4" 1 1.008 1
-atom 594 39 HA "1,10-Phenanthroline HC5" 1 1.008 1
-atom 595 47 NA "1-Methylimidazole N1" 7 14.007 3
-atom 596 72 CR "1-Methylimidazole C2" 6 12.011 3
-atom 597 51 NB "1-Methylimidazole N3" 7 14.007 2
-atom 598 73 CV "1-Methylimidazole C4" 6 12.011 3
-atom 599 74 CW "1-Methylimidazole C5" 6 12.011 3
-atom 600 13 CT "1-Methylimidazole CH3-" 6 12.011 4
-atom 601 39 HA "1-Methylimidazole HC2" 1 1.008 1
-atom 602 39 HA "1-Methylimidazole HC4" 1 1.008 1
-atom 603 39 HA "1-Methylimidazole HC5" 1 1.008 1
-atom 604 36 HC "1-Methylimidazole CH3-" 1 1.008 1
-atom 605 13 CT "1-Et Imidazole RCH2-" 6 12.011 4
-atom 606 13 CT "1-iPr Imidazole R2CH-" 6 12.011 4
-atom 607 13 CT "1-MeO-Me-Imidazole CH2" 6 12.011 4
-atom 608 13 CT "2-Me Pyridine CH3" 6 12.011 4
-atom 609 13 CT "2-Et Pyridine CH2" 6 12.011 4
-atom 610 13 CT "3-Me Pyridazine CH3" 6 12.011 4
-atom 611 13 CT "3-Et Pyridazine CH2" 6 12.011 4
-atom 612 13 CT "4-Me Pyrimidine CH3" 6 12.011 4
-atom 613 13 CT "4-Et Pyrimidine CH2" 6 12.011 4
-atom 614 13 CT "2-Me Pyrazine CH3" 6 12.011 4
-atom 615 13 CT "2-Et Pyrazine CH2" 6 12.011 4
-atom 616 13 CT "2-Me Pyrrole CH3" 6 12.011 4
-atom 617 13 CT "2-Et Pyrrole CH2" 6 12.011 4
-atom 618 13 CT "2-Me Furan CH3" 6 12.011 4
-atom 619 13 CT "2-Et Furan CH2" 6 12.011 4
-atom 620 15 SH "6-Mercaptopurine SH" 16 32.060 2
-atom 621 17 HS "6-Mercaptopurine SH" 1 1.008 1
-atom 622 38 CA "6-Mercaptopurine C6" 6 12.011 3
-atom 623 79 C$ "Beta-Lactam N-C=O" 6 12.011 3
-atom 624 80 N$ "Beta-Lactam N-C=O" 7 14.007 4
-atom 625 81 CY "Penicillin CH-N" 6 12.011 4
-atom 626 81 CY "Penicillin CH-CO" 6 12.011 4
-atom 627 13 CT "3-Me Indole CH3" 6 12.011 4
-atom 628 76 C! "2-Phenyl Pyridine C2" 6 12.011 3
-atom 629 76 C! "2-Phenyl Pyridine C2'" 6 12.011 3
-atom 630 76 C! "2-Phenyl Pyridine C3" 6 12.011 3
-atom 631 76 C! "2-Phenyl Pyridine C3'" 6 12.011 3
-atom 632 76 C! "2-Phenyl Pyridine C4" 6 12.011 3
-atom 633 76 C! "2-Phenyl Pyridine C4'" 6 12.011 3
-atom 634 16 S "Diphenyl Thioether S" 16 32.060 2
-atom 635 82 Ac "Actinium Ion Ac+3" 89 227.000 0
-atom 636 83 Th "Thorium Ion Th+4" 90 232.038 0
-atom 637 84 Am "Americium Ion Am+3" 95 243.000 0
-atom 638 85 C+ "t-Butyl Cation C+" 6 12.011 3
-atom 639 13 CT "t-Butyl Cation CH3-" 6 12.011 4
-atom 640 36 HC "t-Butyl Cation CH3-" 1 1.008 1
-atom 641 86 La "Lanthanum Ion La+3" 57 138.906 0
-atom 642 87 Nd "Neodymium Ion Nd+3" 60 144.240 0
-atom 643 88 Eu "Europium Ion Eu+3" 63 151.960 0
-atom 644 89 Gd "Gadolinium Ion Gd+3" 64 157.250 0
-atom 645 90 Yb "Ytterbium Ion Yb+3" 70 173.040 0
-atom 646 37 CM "Cl..CH3..Cl- Sn2 TS" 6 12.011 5
-atom 647 30 Cl "Cl..CH3..Cl- Sn2 TS" 17 35.453 1
-atom 648 36 HC "Cl..CH3..Cl- Sn2 TS" 1 1.008 1
-atom 649 81 CY "Cyclopropane -CH2-" 6 12.011 4
-atom 650 81 CY "Cyclopropane -CHR-" 6 12.011 4
-atom 651 81 CY "Cyclopropane -CR2-" 6 12.011 4
-atom 652 38 CA "Cyclopentadienyl Anion" 6 12.011 3
-atom 653 39 HA "Cyclopentadienyl Anion" 1 1.008 1
-atom 654 38 CA "Cyclopentadienyl Radical" 6 12.011 3
-atom 655 39 HA "Cyclopentadienyl Radical" 1 1.008 1
-atom 656 38 CA "Fluorobenzene CF" 6 12.011 3
-atom 657 1 F "Fluorobenzene CF" 9 18.998 1
-atom 658 38 CA "Hexafluorobenzene CF" 6 12.011 3
-atom 659 1 F "Hexafluorobenzene CF" 9 18.998 1
-atom 660 55 Br "Bromide -CH2-Br (UA)" 35 79.904 1
-atom 661 2 C2 "Bromide -CH2-Br (UA)" 6 14.027 0
-atom 662 38 CA "TrifluoroMeBenzene C-CF3" 6 12.011 3
-atom 663 13 CT "TrifluoroMeBenzene CF3-" 6 12.011 4
-atom 664 1 F "TrifluoroMeBenzene CF3-" 9 18.998 1
-atom 665 38 CA "Difluorobenzene CF" 6 12.011 3
-atom 666 1 F "Difluorobenzene CF" 9 18.998 1
-atom 667 38 CA "Bromobenzene CBr" 6 12.011 3
-atom 668 55 Br "Bromobenzene CBr" 35 79.904 1
-atom 669 38 CA "Iodobenzene CI" 6 12.011 3
-atom 670 56 I "Iodobenzene CI" 53 126.905 1
-atom 671 81 CY "cProp/cBut Benzene C-Ar" 6 12.011 4
-atom 672 15 SH "Thiophenol SH" 16 32.060 2
-atom 673 38 CA "Thiophenol C-SH" 6 12.011 3
-atom 674 38 CA "Benzamidine CG" 6 12.011 3
-atom 675 38 CA "Benzamidine CD" 6 12.011 3
-atom 676 38 CA "Benzamidine CE" 6 12.011 3
-atom 677 38 CA "Benzamidine CZ" 6 12.011 3
-atom 678 39 HA "Benzamidine HCD" 1 1.008 1
-atom 679 39 HA "Benzamidine HCE" 1 1.008 1
-atom 680 38 CA "Benzamidine C+" 6 12.011 3
-atom 681 45 N2 "Benzamidine -NH2" 7 14.007 3
-atom 682 34 H "Benzamidine H1-N" 1 1.008 1
-atom 683 34 H "Benzamidine H2-N" 1 1.008 1
-atom 684 39 HA "Benzamidine HCG" 1 1.008 1
-atom 685 13 CT "Neutral MeGdn CH3-" 6 12.011 4
-atom 686 13 CT "Neutral ARG CD" 6 12.011 4
-atom 687 91 NY "Neutral ARG NE" 7 14.007 3
-atom 688 46 NC "Neutral ARG N1 (HN=C)" 7 14.007 2
-atom 689 91 NY "Neutral ARG N2 (H2N-C)" 7 14.007 3
-atom 690 38 CA "Neutral ARG CZ (>C=)" 6 12.011 3
-atom 691 18 NZ "Alkyl Nitrile -CN" 7 14.007 1
-atom 692 19 CZ "Alkyl Nitrile -CN" 6 12.011 2
-atom 693 13 CT "Acetonitrile CH3-CN" 6 12.011 4
-atom 694 13 CT "Alkyl Nitrile RCH2-CN" 6 12.011 4
-atom 695 13 CT "Alkyl Nitrile R2CH-CN" 6 12.011 4
-atom 696 13 CT "Alkyl Nitrile R3C-CN" 6 12.011 4
-atom 697 36 HC "Alkyl Nitrile H-C-CN" 1 1.008 1
-atom 698 92 NO "Nitroalkane -NO2" 7 14.007 3
-atom 699 93 ON "Nitroalkane -NO2" 8 15.999 1
-atom 700 13 CT "Nitromethane CH3-NO2" 6 12.011 4
-atom 701 36 HC "Nitroalkane H-C-NO2" 1 1.008 1
-atom 702 13 CT "Nitroalkane RCH2-NO2" 6 12.011 4
-atom 703 13 CT "Nitroalkane R2CH-NO2" 6 12.011 4
-atom 704 13 CT "Nitroalkane R3C-NO2" 6 12.011 4
-atom 705 92 NO "Nitrobenzene -NO2" 7 14.007 3
-atom 706 38 CA "Nitrobenzene C-NO2" 6 12.011 3
-atom 707 13 CT "Benzonitrile -CH2-" 6 12.011 0
-atom 708 46 NC "Neutral Benzamidine N" 7 14.007 2
-atom 709 4 O "Propylene Carbonate C=O" 8 15.999 1
-atom 710 3 C "Propylene Carbonate C=O" 6 12.011 3
-atom 711 29 OS "Propylene Carbonate C-O" 8 15.999 2
-atom 712 13 CT "Propylene Carbonate CH2" 6 12.011 4
-atom 713 13 CT "Propylene Carbonate CH" 6 12.011 4
-atom 714 13 CT "Propylene Carbonate CH3" 6 12.011 4
-atom 715 36 HC "Propylene Carbonate CH2" 1 1.008 1
-atom 716 36 HC "Propylene Carbonate CH" 1 1.008 1
-atom 717 36 HC "Propylene Carbonate CH3" 1 1.008 1
-atom 718 29 OS "GTP O-(POn)2" 8 15.999 2
-atom 719 94 P+ "Phosphonium R4P+" 15 30.974 4
-atom 720 13 CT "Phosphonium CH3-PR3+" 6 12.011 4
-atom 721 13 CT "Phosphonium RCH2-PR3+" 6 12.011 4
-atom 722 36 HC "Phosphonium CH3-PR3+" 1 1.008 1
-atom 723 54 P "Hexafluorophosphate Ion" 15 30.974 6
-atom 724 1 F "Hexafluorophosphate Ion" 9 18.998 1
-atom 725 35 N "Nitrate Ion NO3-" 7 14.007 3
-atom 726 4 O "Nitrate Ion NO3-" 8 15.999 1
-atom 727 20 OW "TIP4F Water O" 8 15.999 3
-atom 728 21 HW "TIP4F Water H" 1 1.008 1
-atom 729 22 LP "TIP4F Water M" 99 0.000 1
-atom 730 33 NT "Amine RNH2" 7 14.007 3
-atom 731 33 NT "Amine R2NH" 7 14.007 3
-atom 732 33 NT "Amine R3N" 7 14.007 3
-atom 733 13 CT "Amine CH3-NH2" 6 12.011 4
-atom 734 13 CT "Amine CH3-NHR" 6 12.011 4
-atom 735 13 CT "Amine CH3-NR2" 6 12.011 4
-atom 736 13 CT "Amine RCH2-NH2" 6 12.011 4
-atom 737 13 CT "Amine RCH2-NHR" 6 12.011 4
-atom 738 13 CT "Amine RCH2-NR2" 6 12.011 4
-atom 739 34 H "Amine RNH2" 1 1.008 1
-atom 740 34 H "Amine R2NH" 1 1.008 1
-atom 741 36 HC "Amine H-C-N" 1 1.008 1
-atom 742 13 CT "Amine R2CH-NH2" 6 12.011 4
-atom 743 13 CT "Amine R3C-NH2" 6 12.011 4
-atom 744 13 CT "Amine R2CH-NHR" 6 12.011 4
-atom 745 13 CT "Amine R2CH-NR2" 6 12.011 4
-atom 746 38 CA "Aniline C-NH2" 6 12.011 3
-atom 747 38 CA "N-Me Aniline C-NHR" 6 12.011 3
-atom 748 38 CA "N-DiMe Aniline C-NR2" 6 12.011 3
-atom 749 13 CT "Benzyl Amine -CH2NH2" 6 12.011 4
-atom 750 13 CT "Benzyl Amine -CHRNH2" 6 12.011 4
-atom 751 13 CT "Benzyl Amine -CR2NH2" 6 12.011 4
-atom 752 13 CT "Benzyl Ether -CH2OR" 6 12.011 4
-atom 753 13 CT "Benzyl Sulfide -CH2SH" 6 12.011 4
-atom 754 13 CT "Benzyl Amine -CH2NHR" 6 12.011 4
-atom 755 19 CZ "Alkyne HCC-" 6 12.011 2
-atom 756 36 HC "Alkyne HCC-" 1 1.008 1
-atom 757 19 CZ "Alkyne RCCH R w/ 2/3 H" 6 12.011 2
-atom 758 19 CZ "Alkyne RCCH R w/ 1 H" 6 12.011 2
-atom 759 19 CZ "Alkyne RCCH R w/ O H/Ph" 6 12.011 2
-atom 760 36 HC "Alkyne H-C-CC-" 1 1.008 1
-atom 761 41 CO "A & G Sugar C1'" 6 12.011 4
-atom 762 41 CO "C Sugar C1'" 6 12.011 4
-atom 763 41 CO "U & T Sugar C1'" 6 12.011 4
-atom 764 5 OH "Sugar O5'" 8 15.999 5
-atom 765 7 HO "Sugar H3' (-OH)" 1 1.008 1
-atom 766 95 N* "A & G Nucleoside N9" 7 14.007 3
-atom 767 95 N* "C Nucleoside N1" 7 14.007 3
-atom 768 95 N* "U & T Nucleoside N1" 7 14.007 3
-atom 769 19 CZ "Alkyne RCCR" 6 12.011 2
-atom 770 43 N3 "Ammonium R3NH+" 7 14.007 4
-atom 771 44 H3 "Ammonium R3NH+" 1 1.008 1
-atom 772 13 CT "Ammonium CH3-NHR2+" 6 12.011 4
-atom 773 13 CT "Ammonium RCH2-NHR2+" 6 12.011 4
-atom 774 13 CT "Ammonium R2CH-NHR2+" 6 12.011 4
-atom 775 13 CT "Ammonium R3C-NHR2+" 6 12.011 4
-atom 776 74 CW "2-Phenyl Furan C2" 6 12.011 3
-atom 777 77 CS "2-Phenyl Furan C3" 6 12.011 3
-atom 778 76 C! "2-Phenyl Furan C2'" 6 12.011 3
-atom 779 76 C! "2-Phenyl Furan C3'" 6 12.011 3
-atom 780 36 HC "GLY Zwitterion HA" 1 1.008 1
-atom 781 13 CT "GLY Zwitterion CA" 6 12.011 4
-atom 782 3 C "GLY Zwitterion C" 6 12.011 3
-atom 783 43 N3 "GLY Zwitterion N" 7 14.007 4
-atom 784 42 O2 "GLY Zwitterion O" 8 15.999 1
-atom 785 44 H3 "GLY Zwitterion HN" 1 1.008 1
-atom 786 1 F "Alkyl Fluoride C-F" 9 18.998 1
-atom 787 13 CT "Alkyl Fluoride RCH2-F" 6 12.011 4
-atom 788 36 HC "Alkyl Fluoride H-C-F" 1 1.008 1
-atom 789 13 CT "Alkyl Fluoride R2CH-F" 6 12.011 4
-atom 790 13 CT "Alkyl Fluoride R3C-F" 6 12.011 4
-atom 791 13 CT "Perfluoroalkane CF3-" 6 12.011 4
-atom 792 13 CT "Perfluoroalkane -CF2-" 6 12.011 4
-atom 793 13 CT "Perfluoroalkane >CF-" 6 12.011 4
-atom 794 13 CT "Tetrafluoromethane CF4" 6 12.011 4
-atom 795 1 F "Perfluoroalkane C-F" 9 18.998 1
-atom 796 13 CT "DifluoroMeBenzene -CHF2" 6 12.011 4
-atom 797 36 HC "DifluoroMeBenzene -CHF2" 1 1.008 1
-atom 798 13 CT "Fluoroacetate FCH2-COO-" 6 12.011 4
-atom 799 13 CT "Chloroacetate ClCH2-COO-" 6 12.011 4
-atom 800 30 Cl "Alkyl Chloride C-Cl" 17 35.453 1
-atom 801 13 CT "Alkyl Chloride RCH2-Cl" 6 12.011 4
-atom 802 36 HC "Alkyl Chloride H-C-Cl" 1 1.008 1
-atom 803 13 CT "Alkyl Chloride R2CH-Cl" 6 12.011 4
-atom 804 13 CT "Alkyl Chloride R3C-Cl" 6 12.011 4
-atom 805 55 Br "Alkyl Bromide C-Br" 35 79.904 1
-atom 806 13 CT "Alkyl Bromide RCH2-Br" 6 12.011 4
-atom 807 36 HC "Alkyl Bromide H-C-Br" 1 1.008 1
-atom 808 13 CT "Alkyl Bromide R2CH-Br" 6 12.011 4
-atom 809 13 CT "Alkyl Bromide R3C-Br" 6 12.011 4
-atom 810 1 F "Acyl Fluoride F-C=O" 9 18.998 1
-atom 811 30 Cl "Acyl Chloride Cl-C=O" 17 35.453 1
-atom 812 55 Br "Acyl Bromide Br-C=O" 35 79.904 1
-atom 813 38 CA "Trifluoroanisole C-OCF3" 6 12.011 3
-atom 814 29 OS "Trifluoroanisole -OCF3" 8 15.999 2
-atom 815 13 CT "Trifluoroanisole -OCF3" 6 12.011 4
-atom 816 1 F "Trifluoroanisole -OCF3" 9 18.998 1
-atom 817 35 N "N-Me,N-PhAcetamide N" 7 14.007 3
-atom 818 38 CA "N-Me,N-PhAcetamide Cipso" 6 12.011 3
-atom 819 13 CT "Benzyl Amine -CH2NR2" 6 12.011 4
-atom 820 3 C "Alkyl Hydroxamic Acid C" 6 12.011 3
-atom 821 3 C "Aryl Hydroxamic Acid C" 6 12.011 3
-atom 822 4 O "Hydroxamic Acid C=O" 8 15.999 1
-atom 823 35 N "Hydroxamic Acid N" 7 14.007 3
-atom 824 34 H "Hydroxamic Acid HN" 1 1.008 1
-atom 825 5 OH "Hydroxamic Acid OH" 8 15.999 2
-atom 826 7 HO "Hydroxamic Acid OH" 1 1.008 1
-atom 827 13 CT "Benzyl Ether -CHROR" 6 12.011 4
-atom 828 13 CT "Benzyl Ether -CR2OR" 6 12.011 4
-atom 829 76 C! "3-Phenyl Pyrrole C3" 6 12.011 3
-atom 830 76 C! "3-Phenyl Pyrrole C3'" 6 12.011 3
-atom 831 76 C! "4-Phenyl Imidazole C4" 6 12.011 3
-atom 832 76 C! "4-Phenyl Imidazole C4'" 6 12.011 3
-atom 833 38 CA "Diphenylmethane Cipso" 6 12.011 3
-atom 834 96 Zn "Zinc Ion Zn+2" 30 0.000 0
-atom 835 13 CT "Alkyl Iodide RCH2-I" 6 12.011 4
-atom 836 13 CT "Alkyl Iodide R2CH-I" 6 12.011 4
-atom 837 13 CT "Alkyl Iodide R3C-I" 6 12.011 4
-atom 838 56 I "Alkyl Iodide C-I" 53 126.905 1
-atom 839 36 HC "Alkyl Iodide H-C-I" 1 1.008 1
-atom 840 35 N "N-Ph Sulfonamide -NHPh" 7 14.007 3
-atom 841 38 CA "N-Ph Sulfonamide Cipso" 6 12.011 3
-atom 842 38 CA "Benzoate C-COO-" 6 12.011 3
-atom 843 35 N "N-Phenyl Urea N" 7 14.007 3
-atom 844 38 CA "N-Phenyl Urea Cipso" 6 12.011 3
-atom 845 3 C "Tertiary Amide -CO-NR2" 6 12.011 3
-atom 846 4 O "Tertiary Amide -CO-NR2" 8 15.999 1
-atom 847 97 NM "Tertiary Amide -CO-NR2" 7 14.007 3
-atom 848 13 CT "Tertiary Amide -NRCH3" 6 12.011 4
-atom 849 13 CT "Tertiary Amide -NRCH2R" 6 12.011 4
-atom 850 13 CT "Tertiary Amide -NRCHR2" 6 12.011 4
-atom 851 13 CT "Tertiary Amide -NRCR3" 6 12.011 4
-atom 852 36 HC "Tertiary Amide H-C-N" 1 1.008 2
-atom 853 3 C "Tertiary Formamide C=O" 6 12.011 3
-atom 854 4 O "Tertiary Formamide C=O" 8 15.999 1
-atom 855 36 HC "Tertiary Formamide H-C=O" 1 1.008 1
-atom 856 13 CT "B2-Peptide CA" 6 12.011 4
-atom 857 13 CT "B3-Peptide CA Main/N-Ter" 6 12.011 4
-atom 858 13 CT "B3-Pep CB GLY Main/C-Ter" 6 12.011 4
-atom 859 13 CT "B3-Pep CB ALA Main/C-Ter" 6 12.011 4
-atom 860 13 CT "B3-Pep CB PRO Main/C-Ter" 6 12.011 4
-atom 861 13 CT "B3-Peptide CA C-Ter" 6 12.011 4
-atom 862 13 CT "B3-Peptide CB ALA N-Ter" 6 12.011 4
-atom 863 13 CT "B3-Peptide CB GLY N-Ter" 6 12.011 4
-atom 864 13 CT "B3-Peptide CB PRO N-Ter" 6 12.011 4
-atom 865 13 CT "B3-Peptide CE PRO N-Ter" 6 12.011 4
-atom 866 98 Si "Alkyl Silane R4Si" 14 28.086 4
-atom 867 98 Si "Alkyl Silane R3SiH" 14 28.086 4
-atom 868 98 Si "Alkyl Silane R2SiH2" 14 28.086 4
-atom 869 98 Si "Alkyl Silane RSiH3" 14 28.086 4
-atom 870 34 H "Alkyl Silane H-C-Si" 1 1.008 1
-atom 871 13 CT "Methyl Silane CH3-Si" 6 12.011 4
-atom 872 13 CT "Alkyl Silane RCH2-Si" 6 12.011 4
-atom 873 13 CT "Alkyl Silane R2CH-Si" 6 12.011 4
-atom 874 13 CT "Alkyl Silane R3C-Si" 6 12.011 4
-atom 875 1 F "Fluoride Ion (GBSA)" 9 18.998 0
-atom 876 30 Cl "Chloride Ion (GBSA)" 17 35.453 0
-atom 877 55 Br "Bromide Ion (GBSA)" 35 79.904 0
-atom 878 56 I "Iodide Ion (GBSA)" 53 126.905 0
-atom 879 58 Li "Lithium Ion (GBSA)" 3 6.941 0
-atom 880 59 Na "Sodium Ion (GBSA)" 11 22.990 0
-atom 881 60 K "Potassium Ion (GBSA)" 19 39.098 0
-atom 882 61 Rb "Rubidium Ion (GBSA)" 37 85.468 0
-atom 883 62 Cs "Cesium Ion (GBSA)" 55 132.905 0
-atom 884 63 Mg "Magnesium Ion (GBSA)" 12 24.305 0
-atom 885 64 Ca "Calcium Ion (GBSA)" 20 40.080 0
-atom 886 65 Sr "Strontium Ion (GBSA)" 38 87.620 0
-atom 887 66 Ba "Barium Ion (GBSA)" 56 137.330 0
-atom 888 13 CT "Ammonium CH3-NR3+" 6 12.011 4
-atom 889 13 CT "Ammonium RCH2-NR3+" 6 12.011 4
-atom 890 13 CT "Ammonium R2CH-NR3+" 6 12.011 4
-atom 891 13 CT "Ammonium R3C-NR3+" 6 12.011 4
-atom 892 36 HC "Ammonium CH3-NR3+" 1 1.008 1
-atom 893 43 N3 "Anilinium Ar-NR3+" 7 14.007 4
-atom 894 38 CA "Anilinium C-NR3+" 6 12.011 3
-atom 895 43 N3 "Anilinium Ar-NHR2+" 7 14.007 4
-atom 896 38 CA "Anilinium C-NHR2+" 6 12.011 3
-atom 897 99 Ctr "Triene R2-C= (mid C=C)" 6 12.011 3
-atom 898 99 Ctr "Triene RH-C= (mid C=C)" 6 12.011 3
-atom 899 36 HC "Allene/Ketene H-C=C=X" 1 1.008 1
-atom 900 37 CM "Allene/Ketene H2C=C=X" 6 12.011 3
-atom 901 37 CM "Allene/Ketene HRC=C=X" 6 12.011 3
-atom 902 37 CM "Allene/Ketene R2C=C=X" 6 12.011 3
-atom 903 100 C: "Allene =C=" 6 12.011 2
-atom 904 100 C: "Ketene =C=" 6 12.011 2
-atom 905 4 O "Ketene C=O" 8 15.999 1
-atom 906 13 CT "N-Me-HIS CB" 6 12.011 4
-
-
- ################################
- ## ##
- ## Van der Waals Parameters ##
- ## ##
- ################################
-
-
-vdw 1 2.9400 0.0610
-vdw 2 3.9050 0.1180
-vdw 3 3.7500 0.1050
-vdw 4 2.9600 0.2100
-vdw 5 3.0000 0.1700
-vdw 6 3.9100 0.1600
-vdw 7 0.0000 0.0000
-vdw 8 3.7300 0.2940
-vdw 9 3.7750 0.2070
-vdw 10 3.9050 0.1750
-vdw 11 3.9100 0.1600
-vdw 12 3.9600 0.1450
-vdw 13 3.9050 0.1180
-vdw 14 3.8500 0.1400
-vdw 15 3.8500 0.0800
-vdw 16 3.8000 0.1150
-vdw 17 3.7500 0.1100
-vdw 18 3.8000 0.0500
-vdw 19 3.7500 0.1050
-vdw 20 3.0700 0.1700
-vdw 21 0.0000 0.0000
-vdw 22 3.7750 0.2070
-vdw 23 3.9050 0.1180
-vdw 24 3.7000 0.2500
-vdw 25 3.5500 0.2500
-vdw 26 3.5500 0.2500
-vdw 27 3.5500 0.2500
-vdw 28 0.0000 0.0000
-vdw 29 0.0000 0.0000
-vdw 30 3.7750 0.2070
-vdw 31 3.9050 0.1180
-vdw 32 3.8000 0.1700
-vdw 33 3.8000 0.1180
-vdw 34 3.8000 0.1700
-vdw 35 3.8000 0.1180
-vdw 36 3.2000 0.1700
-vdw 37 3.6500 0.1500
-vdw 38 3.7750 0.2070
-vdw 39 3.1200 0.1600
-vdw 40 0.0000 0.0000
-vdw 41 0.0000 0.0000
-vdw 42 0.0000 0.0000
-vdw 43 2.5560 0.0200
-vdw 44 2.7800 0.0690
-vdw 45 3.4010 0.2339
-vdw 46 3.6240 0.3170
-vdw 47 3.9350 0.4330
-vdw 48 3.8500 0.0800
-vdw 49 3.8000 0.0500
-vdw 50 3.0000 0.1700
-vdw 51 3.8000 0.1700
-vdw 52 3.8000 0.1180
-vdw 53 3.15061 0.1521
-vdw 54 0.0000 0.0000
-vdw 55 3.15365 0.1550
-vdw 56 0.0000 0.0000
-vdw 57 0.0000 0.0000
-vdw 58 3.1760 0.1500
-vdw 59 0.0000 0.0000
-vdw 60 3.8000 0.1180
-vdw 61 3.4000 0.3000
-vdw 62 3.8000 0.0800
-vdw 63 3.4700 0.3000
-vdw 64 3.8000 0.0500
-vdw 65 3.4700 0.2660
-vdw 66 3.5600 0.3950
-vdw 67 2.9300 0.2800
-vdw 68 3.8100 0.1600
-vdw 69 3.4200 0.1700
-vdw 70 0.0000 0.0000
-vdw 71 2.9600 0.2100
-vdw 72 3.2500 0.1700
-vdw 73 3.8000 0.1150
-vdw 74 3.8000 0.1700
-vdw 75 3.16557 0.1554
-vdw 76 0.0000 0.0000
-vdw 77 3.5000 0.0660
-vdw 78 3.5000 0.0660
-vdw 79 3.5000 0.0660
-vdw 80 3.5000 0.0660
-vdw 81 3.5000 0.0660
-vdw 82 2.5000 0.0300
-vdw 83 3.5500 0.0760
-vdw 84 3.5500 0.0760
-vdw 85 3.5500 0.0760
-vdw 86 2.4200 0.0300
-vdw 87 3.5500 0.0700
-vdw 88 2.4200 0.0300
-vdw 89 3.5500 0.0700
-vdw 90 3.5000 0.0660
-vdw 91 3.5000 0.0660
-vdw 92 3.5500 0.0760
-vdw 93 3.1200 0.1700
-vdw 94 0.0000 0.0000
-vdw 95 2.5000 0.0300
-vdw 96 3.5000 0.0660
-vdw 97 3.5000 0.0660
-vdw 98 3.5000 0.0660
-vdw 99 3.5000 0.0660
-vdw 100 3.2500 0.0620
-vdw 101 3.0700 0.1700
-vdw 102 0.0000 0.0000
-vdw 103 2.9400 0.0610
-vdw 104 2.5000 0.0300
-vdw 105 3.5500 0.0700
-vdw 106 3.0700 0.1700
-vdw 107 0.0000 0.0000
-vdw 108 3.0700 0.1700
-vdw 109 0.0000 0.0000
-vdw 110 3.0700 0.1700
-vdw 111 0.0000 0.0000
-vdw 112 3.5000 0.0660
-vdw 113 3.5000 0.0660
-vdw 114 3.5000 0.0660
-vdw 115 2.5000 0.0300
-vdw 116 2.9000 0.1400
-vdw 117 3.5500 0.0760
-vdw 118 2.9000 0.1400
-vdw 119 2.9000 0.1400
-vdw 120 3.5000 0.0660
-vdw 121 3.5000 0.0660
-vdw 122 3.5000 0.0660
-vdw 123 3.5000 0.0660
-vdw 124 2.5000 0.0300
-vdw 125 2.9000 0.1400
-vdw 126 3.0700 0.1700
-vdw 127 0.0000 0.0000
-vdw 128 3.5000 0.0660
-vdw 129 2.5000 0.0300
-vdw 130 3.5000 0.0660
-vdw 131 2.5000 0.0300
-vdw 132 3.5000 0.0660
-vdw 133 2.5000 0.0300
-vdw 134 3.5000 0.0660
-vdw 135 2.5000 0.0300
-vdw 136 3.5000 0.0660
-vdw 137 3.5000 0.0660
-vdw 138 3.5500 0.0700
-vdw 139 3.5500 0.2500
-vdw 140 3.7000 0.2500
-vdw 141 3.5500 0.2500
-vdw 142 3.5500 0.2500
-vdw 143 0.0000 0.0000
-vdw 144 0.0000 0.0000
-vdw 145 3.5000 0.0660
-vdw 146 3.5000 0.0660
-vdw 147 3.5000 0.0660
-vdw 148 3.5000 0.0660
-vdw 149 3.5000 0.0660
-vdw 150 3.5000 0.0660
-vdw 151 3.5000 0.0660
-vdw 152 3.5000 0.0660
-vdw 153 3.5000 0.0660
-vdw 154 3.5000 0.0660
-vdw 155 3.5000 0.0660
-vdw 156 3.5000 0.0660
-vdw 157 3.5000 0.0660
-vdw 158 3.5000 0.0660
-vdw 159 3.5000 0.0660
-vdw 160 3.5500 0.0700
-vdw 161 3.5500 0.2500
-vdw 162 3.5000 0.0660
-vdw 163 3.5000 0.0660
-vdw 164 3.5000 0.0660
-vdw 165 3.4000 0.3000
-vdw 166 3.5500 0.0760
-vdw 167 3.5500 0.0700
-vdw 168 3.5000 0.0660
-vdw 169 3.5000 0.0660
-vdw 170 3.7500 0.1050
-vdw 171 3.7500 0.1050
-vdw 172 3.7500 0.1050
-vdw 173 3.7500 0.1050
-vdw 174 3.7500 0.1050
-vdw 175 2.9600 0.2100
-vdw 176 3.2500 0.1700
-vdw 177 3.2500 0.1700
-vdw 178 3.2500 0.1700
-vdw 179 0.0000 0.0000
-vdw 180 0.0000 0.0000
-vdw 181 3.5000 0.0660
-vdw 182 3.5000 0.0660
-vdw 183 3.5000 0.0660
-vdw 184 3.5000 0.0660
-vdw 185 3.5000 0.0660
-vdw 186 3.7500 0.1050
-vdw 187 2.9600 0.2100
-vdw 188 3.2500 0.1700
-vdw 189 0.0000 0.0000
-vdw 190 3.2500 0.1700
-vdw 191 3.7500 0.1050
-vdw 192 2.9600 0.2100
-vdw 193 0.0000 0.0000
-vdw 194 2.5000 0.0200
-vdw 195 3.5000 0.0660
-vdw 196 3.5000 0.0660
-vdw 197 3.5000 0.0660
-vdw 198 3.5000 0.0660
-vdw 199 3.5500 0.0700
-vdw 200 3.6500 0.1500
-vdw 201 3.2000 0.1700
-vdw 202 3.5500 0.0700
-vdw 203 3.4000 0.3000
-vdw 204 3.2500 0.1700
-vdw 205 3.5500 0.0700
-vdw 206 3.7500 0.1050
-vdw 207 3.0000 0.1700
-vdw 208 2.9600 0.2100
-vdw 209 0.0000 0.0000
-vdw 210 3.7500 0.1050
-vdw 211 2.9600 0.2100
-vdw 212 3.5000 0.0660
-vdw 213 3.5000 0.0660
-vdw 214 3.5000 0.0660
-vdw 215 3.5000 0.0660
-vdw 216 3.7500 0.1050
-vdw 217 2.9600 0.2100
-vdw 218 2.4200 0.0150
-vdw 219 3.7500 0.1050
-vdw 220 2.9600 0.2100
-vdw 221 2.4200 0.0150
-vdw 222 3.5000 0.0660
-vdw 223 3.5000 0.0660
-vdw 224 3.5000 0.0660
-vdw 225 3.5000 0.0660
-vdw 226 3.2500 0.1700
-vdw 227 3.2500 0.1700
-vdw 228 3.2500 0.1700
-vdw 229 0.0000 0.0000
-vdw 230 0.0000 0.0000
-vdw 231 3.5000 0.0660
-vdw 232 3.5000 0.0660
-vdw 233 3.5000 0.0660
-vdw 234 3.5000 0.0660
-vdw 235 3.5000 0.0660
-vdw 236 3.5000 0.0660
-vdw 237 3.5000 0.0660
-vdw 238 3.5000 0.0660
-vdw 239 3.5000 0.0660
-vdw 240 3.2500 0.1700
-vdw 241 0.0000 0.0000
-vdw 242 3.5500 0.0500
-vdw 243 3.2500 0.1700
-vdw 244 0.0000 0.0000
-vdw 245 3.5000 0.0660
-vdw 246 3.5000 0.0660
-vdw 247 3.5000 0.0660
-vdw 248 3.5000 0.0660
-vdw 249 3.2500 0.1700
-vdw 250 0.0000 0.0000
-vdw 251 3.2500 0.1700
-vdw 252 3.5000 0.0800
-vdw 253 3.2500 0.1700
-vdw 254 0.0000 0.0000
-vdw 255 3.5000 0.0800
-vdw 256 2.5000 0.0500
-vdw 257 3.5000 0.0800
-vdw 258 2.5000 0.0500
-vdw 259 3.2500 0.1700
-vdw 260 3.7500 0.1050
-vdw 261 3.2500 0.1700
-vdw 262 3.7500 0.1050
-vdw 263 3.5000 0.0800
-vdw 264 3.5000 0.0800
-vdw 265 0.0000 0.0000
-vdw 266 2.9600 0.2100
-vdw 267 0.0000 0.0000
-vdw 268 2.9600 0.2100
-vdw 269 2.5000 0.0500
-vdw 270 2.5000 0.0500
-vdw 271 3.5000 0.0800
-vdw 272 2.5000 0.0500
-vdw 273 3.2500 0.1700
-vdw 274 3.7500 0.1050
-vdw 275 3.2500 0.1700
-vdw 276 3.5000 0.0800
-vdw 277 3.5000 0.0800
-vdw 278 3.5000 0.0800
-vdw 279 0.0000 0.0000
-vdw 280 2.9600 0.2100
-vdw 281 3.2500 0.1700
-vdw 282 0.0000 0.0000
-vdw 283 0.0000 0.0000
-vdw 284 2.5000 0.0500
-vdw 285 2.5000 0.0500
-vdw 286 3.2500 0.1700
-vdw 287 3.5000 0.0800
-vdw 288 3.2500 0.1700
-vdw 289 3.5000 0.0800
-vdw 290 3.5000 0.0800
-vdw 291 3.5000 0.0800
-vdw 292 3.2500 0.1700
-vdw 293 3.5000 0.0800
-vdw 294 3.2500 0.1700
-vdw 295 2.5000 0.0500
-vdw 296 3.2500 0.1700
-vdw 297 0.0000 0.0000
-vdw 298 0.0000 0.0000
-vdw 299 2.5000 0.0500
-vdw 300 0.0000 0.0000
-vdw 301 3.2500 0.1700
-vdw 302 3.5000 0.0800
-vdw 303 3.2500 0.1700
-vdw 304 3.5000 0.0800
-vdw 305 3.5000 0.0800
-vdw 306 3.7500 0.1050
-vdw 307 0.0000 0.0000
-vdw 308 3.2500 0.1700
-vdw 309 0.0000 0.0000
-vdw 310 2.9600 0.2100
-vdw 311 3.5000 0.0800
-vdw 312 2.5000 0.0500
-vdw 313 3.5000 0.0800
-vdw 314 2.5000 0.0500
-vdw 315 3.5000 0.0800
-vdw 316 2.5000 0.0500
-vdw 317 3.2500 0.1700
-vdw 318 3.7500 0.1050
-vdw 319 3.2500 0.1700
-vdw 320 3.5000 0.0800
-vdw 321 3.5000 0.0800
-vdw 322 3.5000 0.0800
-vdw 323 0.0000 0.0000
-vdw 324 2.9600 0.2100
-vdw 325 0.0000 0.0000
-vdw 326 3.2500 0.1700
-vdw 327 0.0000 0.0000
-vdw 328 0.0000 0.0000
-vdw 329 2.5000 0.0500
-vdw 330 2.5000 0.0500
-vdw 331 3.5000 0.0800
-vdw 332 2.5000 0.0500
-vdw 333 3.7400 0.2000
-vdw 334 2.9600 0.2100
-vdw 335 3.0000 0.1700
-vdw 336 3.5500 0.0660
-vdw 337 3.5000 0.0800
-vdw 338 3.4000 0.3000
-vdw 339 3.5500 0.0760
-vdw 340 3.0500 0.7100
-vdw 341 4.0200 0.7100
-vdw 342 4.2800 0.7100
-vdw 343 4.8100 0.7100
-vdw 344 5.3400 0.0005
-vdw 345 2.8700 0.0005
-vdw 346 4.0700 0.0005
-vdw 347 5.1700 0.0005
-vdw 348 5.6000 0.0005
-vdw 349 6.2000 0.0005
-vdw 350 1.644471 0.875044
-vdw 351 2.412031 0.449657
-vdw 352 3.102688 0.118226
-vdw 353 3.816610 0.047096
-vdw 354 4.2000 0.3000
-vdw 355 2.5000 0.0500
-vdw 356 4.2500 0.5000
-vdw 357 4.2000 0.3000
-vdw 358 2.5000 0.0500
-vdw 359 3.1500 0.2500
-vdw 360 4.2000 0.3000
-vdw 361 2.5000 0.0500
-vdw 362 3.6500 0.1500
-vdw 363 3.4000 0.2500
-vdw 364 4.2000 0.3000
-vdw 365 2.5000 0.0500
-vdw 366 3.4000 0.2500
-vdw 367 2.5000 0.0500
-vdw 368 4.2000 0.3000
-vdw 369 2.5000 0.0500
-vdw 370 4.2000 0.3000
-vdw 371 2.5000 0.0500
-vdw 372 0.0000 0.0000
-vdw 373 3.2000 0.2500
-vdw 374 0.0000 0.0000
-vdw 375 2.81524 0.4000
-vdw 376 3.11815 0.2000
-vdw 377 2.9000 0.1400
-vdw 378 3.7400 0.2000
-vdw 379 3.1500 0.2000
-vdw 380 2.9000 0.1400
-vdw 381 3.5000 0.0660
-vdw 382 2.5000 0.0300
-vdw 383 3.7400 0.2000
-vdw 384 3.1500 0.2000
-vdw 385 2.9000 0.1400
-vdw 386 3.5000 0.0660
-vdw 387 2.5000 0.0300
-vdw 388 3.7400 0.2000
-vdw 389 3.1500 0.2000
-vdw 390 2.9000 0.1400
-vdw 391 3.5000 0.0660
-vdw 392 2.5000 0.0300
-vdw 393 3.5000 0.0660
-vdw 394 2.5000 0.0300
-vdw 395 3.5500 0.0700
-vdw 396 3.5000 0.0660
-vdw 397 2.5000 0.0300
-vdw 398 3.5500 0.0700
-vdw 399 3.5000 0.0660
-vdw 400 2.5000 0.0300
-vdw 401 3.5500 0.0700
-vdw 402 3.5000 0.0660
-vdw 403 3.7500 0.1050
-vdw 404 2.9600 0.2100
-vdw 405 3.0000 0.1700
-vdw 406 3.5000 0.0660
-vdw 407 2.4200 0.0150
-vdw 408 3.7500 0.1050
-vdw 409 3.7500 0.1050
-vdw 410 3.5500 0.0700
-vdw 411 3.0000 0.1700
-vdw 412 3.5500 0.2500
-vdw 413 2.9600 0.1700
-vdw 414 3.5000 0.0660
-vdw 415 2.5000 0.0300
-vdw 416 3.2500 0.1700
-vdw 417 0.0000 0.0000
-vdw 418 3.2500 0.1700
-vdw 419 0.0000 0.0000
-vdw 420 3.5000 0.0660
-vdw 421 2.5000 0.0300
-vdw 422 3.5000 0.0660
-vdw 423 2.5000 0.0300
-vdw 424 3.5000 0.0660
-vdw 425 2.5000 0.0300
-vdw 426 3.5500 0.0700
-vdw 427 3.5500 0.0700
-vdw 428 3.5000 0.0660
-vdw 429 3.5000 0.0660
-vdw 430 3.5000 0.0660
-vdw 431 3.5500 0.2500
-vdw 432 2.9600 0.1700
-vdw 433 3.5600 0.3950
-vdw 434 3.5600 0.3950
-vdw 435 2.9300 0.2800
-vdw 436 3.5000 0.0660
-vdw 437 3.5000 0.0660
-vdw 438 3.5500 0.0700
-vdw 439 3.5500 0.0700
-vdw 440 3.5500 0.0700
-vdw 441 3.2500 0.1700
-vdw 442 0.0000 0.0000
-vdw 443 3.5000 0.0660
-vdw 444 3.5500 0.0700
-vdw 445 3.5500 0.0700
-vdw 446 3.5500 0.0700
-vdw 447 3.5500 0.0700
-vdw 448 3.5500 0.0700
-vdw 449 3.2500 0.1700
-vdw 450 3.2500 0.1700
-vdw 451 0.0000 0.0000
-vdw 452 3.5500 0.0700
-vdw 453 3.5000 0.0660
-vdw 454 3.5000 0.0660
-vdw 455 3.5500 0.0760
-vdw 456 3.5500 0.0760
-vdw 457 3.5500 0.0700
-vdw 458 3.2500 0.1700
-vdw 459 3.5500 0.0700
-vdw 460 3.5500 0.0700
-vdw 461 3.5500 0.0700
-vdw 462 2.4200 0.0300
-vdw 463 2.4200 0.0300
-vdw 464 2.4200 0.0300
-vdw 465 3.2500 0.1700
-vdw 466 3.5500 0.0700
-vdw 467 2.4200 0.0300
-vdw 468 3.2500 0.1700
-vdw 469 3.5500 0.0700
-vdw 470 3.5500 0.0700
-vdw 471 3.5500 0.0700
-vdw 472 2.4200 0.0300
-vdw 473 2.4200 0.0300
-vdw 474 2.4200 0.0300
-vdw 475 3.2500 0.1700
-vdw 476 3.5500 0.0700
-vdw 477 3.5500 0.0700
-vdw 478 2.4200 0.0300
-vdw 479 2.4200 0.0300
-vdw 480 3.2500 0.1700
-vdw 481 3.5500 0.0700
-vdw 482 3.5500 0.0700
-vdw 483 0.0000 0.0000
-vdw 484 2.4200 0.0300
-vdw 485 2.4200 0.0300
-vdw 486 3.2500 0.1700
-vdw 487 3.2500 0.1700
-vdw 488 3.5500 0.0700
-vdw 489 3.5500 0.0700
-vdw 490 3.5500 0.0700
-vdw 491 0.0000 0.0000
-vdw 492 2.4200 0.0300
-vdw 493 2.4200 0.0300
-vdw 494 2.4200 0.0300
-vdw 495 3.2500 0.1700
-vdw 496 3.5500 0.0700
-vdw 497 3.2500 0.1700
-vdw 498 3.5500 0.0700
-vdw 499 3.5500 0.0700
-vdw 500 0.0000 0.0000
-vdw 501 2.4200 0.0300
-vdw 502 2.4200 0.0300
-vdw 503 2.4200 0.0300
-vdw 504 2.9000 0.1400
-vdw 505 3.5500 0.0700
-vdw 506 3.5500 0.0760
-vdw 507 2.4200 0.0300
-vdw 508 2.4200 0.0300
-vdw 509 2.9000 0.1400
-vdw 510 3.5500 0.0700
-vdw 511 3.2500 0.1700
-vdw 512 3.5500 0.0700
-vdw 513 3.5500 0.0700
-vdw 514 2.4200 0.0300
-vdw 515 2.4200 0.0300
-vdw 516 2.4200 0.0300
-vdw 517 2.9000 0.1400
-vdw 518 3.2500 0.1700
-vdw 519 3.5500 0.0700
-vdw 520 3.5500 0.0700
-vdw 521 3.5500 0.0700
-vdw 522 2.4200 0.0300
-vdw 523 2.4200 0.0300
-vdw 524 2.4200 0.0300
-vdw 525 3.2500 0.1700
-vdw 526 3.5500 0.0700
-vdw 527 3.5500 0.0700
-vdw 528 3.5500 0.0700
-vdw 529 3.5500 0.0700
-vdw 530 3.5500 0.0700
-vdw 531 3.5500 0.0700
-vdw 532 3.5500 0.0700
-vdw 533 3.5500 0.0700
-vdw 534 0.0000 0.0000
-vdw 535 2.4200 0.0300
-vdw 536 2.4200 0.0300
-vdw 537 2.4200 0.0300
-vdw 538 2.4200 0.0300
-vdw 539 2.4200 0.0300
-vdw 540 2.4200 0.0300
-vdw 541 3.2500 0.1700
-vdw 542 3.5500 0.0700
-vdw 543 3.5500 0.0700
-vdw 544 3.5500 0.0700
-vdw 545 3.5500 0.0700
-vdw 546 3.5500 0.0700
-vdw 547 3.5500 0.0700
-vdw 548 3.5500 0.0700
-vdw 549 3.5500 0.0700
-vdw 550 3.5500 0.0700
-vdw 551 2.4200 0.0300
-vdw 552 2.4200 0.0300
-vdw 553 2.4200 0.0300
-vdw 554 2.4200 0.0300
-vdw 555 2.4200 0.0300
-vdw 556 2.4200 0.0300
-vdw 557 2.4200 0.0300
-vdw 558 3.2500 0.1700
-vdw 559 3.5500 0.0700
-vdw 560 3.2500 0.1700
-vdw 561 3.5500 0.0700
-vdw 562 3.5500 0.0700
-vdw 563 3.5500 0.0700
-vdw 564 3.2500 0.1700
-vdw 565 3.5500 0.0700
-vdw 566 3.2500 0.1700
-vdw 567 2.4200 0.0300
-vdw 568 2.4200 0.0300
-vdw 569 2.4200 0.0300
-vdw 570 0.0000 0.0000
-vdw 571 3.5500 0.2500
-vdw 572 3.5500 0.0700
-vdw 573 3.2500 0.1700
-vdw 574 3.5500 0.0700
-vdw 575 3.5500 0.0700
-vdw 576 2.4200 0.0300
-vdw 577 2.4200 0.0300
-vdw 578 2.4200 0.0300
-vdw 579 3.2500 0.1700
-vdw 580 3.5500 0.0700
-vdw 581 2.4200 0.0300
-vdw 582 3.5500 0.0700
-vdw 583 3.5000 0.0660
-vdw 584 3.2500 0.1700
-vdw 585 3.5500 0.0700
-vdw 586 3.5500 0.0700
-vdw 587 3.5500 0.0700
-vdw 588 3.5500 0.0700
-vdw 589 3.5500 0.0700
-vdw 590 3.5500 0.0700
-vdw 591 2.4200 0.0300
-vdw 592 2.4200 0.0300
-vdw 593 2.4200 0.0300
-vdw 594 2.4200 0.0300
-vdw 595 3.2500 0.1700
-vdw 596 3.5500 0.0700
-vdw 597 3.2500 0.1700
-vdw 598 3.5500 0.0700
-vdw 599 3.5500 0.0700
-vdw 600 3.5000 0.0660
-vdw 601 2.4200 0.0300
-vdw 602 2.4200 0.0300
-vdw 603 2.4200 0.0300
-vdw 604 2.5000 0.0300
-vdw 605 3.5000 0.0660
-vdw 606 3.5000 0.0660
-vdw 607 3.5000 0.0660
-vdw 608 3.5000 0.0660
-vdw 609 3.5000 0.0660
-vdw 610 3.5000 0.0660
-vdw 611 3.5000 0.0660
-vdw 612 3.5000 0.0660
-vdw 613 3.5000 0.0660
-vdw 614 3.5000 0.0660
-vdw 615 3.5000 0.0660
-vdw 616 3.5000 0.0660
-vdw 617 3.5000 0.0660
-vdw 618 3.5000 0.0660
-vdw 619 3.5000 0.0660
-vdw 620 3.5500 0.2500
-vdw 621 0.0000 0.0000
-vdw 622 3.5500 0.0700
-vdw 623 3.7500 0.1050
-vdw 624 3.2500 0.1700
-vdw 625 3.5000 0.0660
-vdw 626 3.5000 0.0660
-vdw 627 3.5000 0.0660
-vdw 628 3.5500 0.0700
-vdw 629 3.5500 0.0700
-vdw 630 3.5500 0.0700
-vdw 631 3.5500 0.0700
-vdw 632 3.5500 0.0700
-vdw 633 3.5500 0.0700
-vdw 634 3.5500 0.2500
-vdw 635 3.4730 0.0540
-vdw 636 3.3000 0.0500
-vdw 637 3.3000 0.0500
-vdw 638 3.5500 0.0760
-vdw 639 3.5000 0.0660
-vdw 640 2.5000 0.0300
-vdw 641 3.7500 0.0600
-vdw 642 3.4730 0.0540
-vdw 643 3.3000 0.0500
-vdw 644 3.3000 0.0500
-vdw 645 2.9500 0.0400
-vdw 646 3.5500 0.0760
-vdw 647 3.4000 0.3000
-vdw 648 2.4200 0.0300
-vdw 649 3.5000 0.0660
-vdw 650 3.5000 0.0660
-vdw 651 3.5000 0.0660
-vdw 652 3.5500 0.0700
-vdw 653 2.4200 0.0300
-vdw 654 3.5500 0.0700
-vdw 655 2.4200 0.0300
-vdw 656 3.5500 0.0700
-vdw 657 2.8500 0.0610
-vdw 658 3.5500 0.0700
-vdw 659 2.8500 0.0610
-vdw 660 3.4700 0.4700
-vdw 661 3.9050 0.1180
-vdw 662 3.5500 0.0700
-vdw 663 3.2500 0.0620
-vdw 664 2.9400 0.0610
-vdw 665 3.5500 0.0700
-vdw 666 2.8500 0.0610
-vdw 667 3.5500 0.0700
-vdw 668 3.4700 0.4700
-vdw 669 3.5500 0.0700
-vdw 670 3.7500 0.6000
-vdw 671 3.5000 0.0660
-vdw 672 3.5500 0.2500
-vdw 673 3.5500 0.0700
-vdw 674 3.5500 0.0700
-vdw 675 3.5500 0.0700
-vdw 676 3.5500 0.0700
-vdw 677 3.5500 0.0700
-vdw 678 2.4200 0.0300
-vdw 679 2.4200 0.0300
-vdw 680 3.5500 0.0500
-vdw 681 3.2500 0.1700
-vdw 682 0.0000 0.0000
-vdw 683 0.0000 0.0000
-vdw 684 2.4200 0.0300
-vdw 685 3.5000 0.0660
-vdw 686 3.5000 0.0660
-vdw 687 3.2500 0.1700
-vdw 688 3.2500 0.1700
-vdw 689 3.2500 0.1700
-vdw 690 3.5500 0.0500
-vdw 691 3.2000 0.1700
-vdw 692 3.3000 0.0660
-vdw 693 3.3000 0.0660
-vdw 694 3.3000 0.0660
-vdw 695 3.3000 0.0660
-vdw 696 3.3000 0.0660
-vdw 697 2.5000 0.0150
-vdw 698 3.2500 0.1200
-vdw 699 2.9600 0.1700
-vdw 700 3.5000 0.0660
-vdw 701 2.5000 0.0150
-vdw 702 3.5000 0.0660
-vdw 703 3.5000 0.0660
-vdw 704 3.5000 0.0660
-vdw 705 3.2500 0.1200
-vdw 706 3.5500 0.0700
-vdw 707 3.3000 0.0660
-vdw 708 3.2500 0.1700
-vdw 709 2.9600 0.2100
-vdw 710 3.7500 0.1050
-vdw 711 3.0000 0.1700
-vdw 712 3.5000 0.0660
-vdw 713 3.5000 0.0660
-vdw 714 3.5000 0.0660
-vdw 715 2.4200 0.0150
-vdw 716 2.4200 0.0150
-vdw 717 2.4200 0.0150
-vdw 718 2.9000 0.1400
-vdw 719 3.7400 0.2000
-vdw 720 3.5000 0.0660
-vdw 721 3.5000 0.0660
-vdw 722 2.5000 0.0300
-vdw 723 3.7400 0.2000
-vdw 724 3.1181 0.0610
-vdw 725 3.1500 0.1700
-vdw 726 2.8600 0.2100
-vdw 727 3.2700 0.1000
-vdw 728 0.0000 0.0000
-vdw 729 0.0000 0.0000
-vdw 730 3.3000 0.1700
-vdw 731 3.3000 0.1700
-vdw 732 3.3000 0.1700
-vdw 733 3.5000 0.0660
-vdw 734 3.5000 0.0660
-vdw 735 3.5000 0.0660
-vdw 736 3.5000 0.0660
-vdw 737 3.5000 0.0660
-vdw 738 3.5000 0.0660
-vdw 739 0.0000 0.0000
-vdw 740 0.0000 0.0000
-vdw 741 2.5000 0.0150
-vdw 742 3.5000 0.0660
-vdw 743 3.5000 0.0660
-vdw 744 3.5000 0.0660
-vdw 745 3.5000 0.0660
-vdw 746 3.5500 0.0700
-vdw 747 3.5500 0.0700
-vdw 748 3.5500 0.0700
-vdw 749 3.5000 0.0660
-vdw 750 3.5000 0.0660
-vdw 751 3.5000 0.0660
-vdw 752 3.5000 0.0660
-vdw 753 3.5000 0.0660
-vdw 754 3.5000 0.0660
-vdw 755 3.3000 0.0860
-vdw 756 2.4200 0.0150
-vdw 757 3.3000 0.2100
-vdw 758 3.3000 0.1350
-vdw 759 3.3000 0.1000
-vdw 760 2.5000 0.0150
-vdw 761 3.5000 0.0660
-vdw 762 3.5000 0.0660
-vdw 763 3.5000 0.0660
-vdw 764 3.1200 0.1700
-vdw 765 0.0000 0.0000
-vdw 766 3.2500 0.1700
-vdw 767 3.2500 0.1700
-vdw 768 3.2500 0.1700
-vdw 769 3.3000 0.2100
-vdw 770 3.2500 0.1700
-vdw 771 0.0000 0.0000
-vdw 772 3.5000 0.0660
-vdw 773 3.5000 0.0660
-vdw 774 3.5000 0.0660
-vdw 775 3.5000 0.0660
-vdw 776 3.5500 0.0700
-vdw 777 3.5500 0.0760
-vdw 778 3.5500 0.0700
-vdw 779 3.5500 0.0700
-vdw 780 2.5000 0.0300
-vdw 781 3.5000 0.0660
-vdw 782 3.7500 0.1050
-vdw 783 3.2500 0.1700
-vdw 784 2.9600 0.2100
-vdw 785 0.0000 0.0000
-vdw 786 2.9400 0.0610
-vdw 787 3.5000 0.0660
-vdw 788 2.5000 0.0300
-vdw 789 3.5000 0.0660
-vdw 790 3.5000 0.0660
-vdw 791 3.5000 0.0660
-vdw 792 3.5000 0.0660
-vdw 793 3.5000 0.0660
-vdw 794 3.5000 0.0970
-vdw 795 2.9500 0.0530
-vdw 796 3.2500 0.0620
-vdw 797 2.5000 0.0300
-vdw 798 3.5000 0.0660
-vdw 799 3.5000 0.0660
-vdw 800 3.4000 0.3000
-vdw 801 3.5000 0.0660
-vdw 802 2.5000 0.0300
-vdw 803 3.5000 0.0660
-vdw 804 3.5000 0.0660
-vdw 805 3.4700 0.4700
-vdw 806 3.5000 0.0660
-vdw 807 2.5000 0.0300
-vdw 808 3.5000 0.0660
-vdw 809 3.5000 0.0660
-vdw 810 2.9400 0.0610
-vdw 811 3.4000 0.3000
-vdw 812 3.4700 0.4700
-vdw 813 3.5500 0.0700
-vdw 814 2.9000 0.1400
-vdw 815 3.5000 0.0660
-vdw 816 2.9000 0.0600
-vdw 817 3.2500 0.1700
-vdw 818 3.5500 0.0700
-vdw 819 3.5000 0.0660
-vdw 820 3.7500 0.1050
-vdw 821 3.7500 0.1050
-vdw 822 2.9600 0.2100
-vdw 823 3.2500 0.1700
-vdw 824 0.0000 0.0000
-vdw 825 3.1200 0.1700
-vdw 826 0.0000 0.0000
-vdw 827 3.5000 0.0660
-vdw 828 3.5000 0.0660
-vdw 829 3.5500 0.0700
-vdw 830 3.5500 0.0700
-vdw 831 3.5500 0.0700
-vdw 832 3.5500 0.0700
-vdw 833 3.5500 0.0700
-vdw 834 1.9600 0.0125
-vdw 835 3.5000 0.0660
-vdw 836 3.5000 0.0660
-vdw 837 3.5000 0.0660
-vdw 838 3.7500 0.6000
-vdw 839 2.5000 0.0300
-vdw 840 3.2500 0.1700
-vdw 841 3.5500 0.0700
-vdw 842 3.5500 0.0700
-vdw 843 3.2500 0.1700
-vdw 844 3.5500 0.0700
-vdw 845 3.7500 0.1050
-vdw 846 2.9600 0.2100
-vdw 847 3.2500 0.1700
-vdw 848 3.5000 0.0660
-vdw 849 3.5000 0.0660
-vdw 850 3.5000 0.0660
-vdw 851 3.5000 0.0660
-vdw 852 2.4200 0.0150
-vdw 853 3.7500 0.1050
-vdw 854 2.9600 0.2100
-vdw 855 2.4200 0.0150
-vdw 856 3.5000 0.0660
-vdw 857 3.5000 0.0660
-vdw 858 3.5000 0.0660
-vdw 859 3.5000 0.0660
-vdw 860 3.5000 0.0660
-vdw 861 3.5000 0.0660
-vdw 862 3.5000 0.0660
-vdw 863 3.5000 0.0660
-vdw 864 3.5000 0.0660
-vdw 865 3.5000 0.0660
-vdw 866 4.0000 0.1000
-vdw 867 4.0000 0.1000
-vdw 868 4.0000 0.1000
-vdw 869 4.0000 0.1000
-vdw 870 2.5000 0.0300
-vdw 871 3.5000 0.0660
-vdw 872 3.5000 0.0660
-vdw 873 3.5000 0.0660
-vdw 874 3.5000 0.0660
-vdw 875 3.0800 0.7200
-vdw 876 4.1800 0.11779
-vdw 877 4.5100 0.0900
-vdw 878 5.1500 0.0700
-vdw 879 2.7000 0.018279
-vdw 880 3.3500 0.002772
-vdw 881 4.0600 0.000328
-vdw 882 4.3200 0.000171
-vdw 883 4.8200 0.000081
-vdw 884 2.9100 0.875044
-vdw 885 3.4700 0.449657
-vdw 886 3.8200 0.118226
-vdw 887 4.1800 0.047096
-vdw 888 3.5000 0.0660
-vdw 889 3.5000 0.0660
-vdw 890 3.5000 0.0660
-vdw 891 3.5000 0.0660
-vdw 892 2.5000 0.0300
-vdw 893 3.2500 0.1700
-vdw 894 3.5500 0.0700
-vdw 895 3.2500 0.1700
-vdw 896 3.5500 0.0700
-vdw 897 3.5500 0.0760
-vdw 898 3.5500 0.0760
-vdw 899 2.4200 0.0300
-vdw 900 3.3000 0.0860
-vdw 901 3.3000 0.0860
-vdw 902 3.3000 0.0860
-vdw 903 3.3000 0.0860
-vdw 904 3.3000 0.0860
-vdw 905 2.9600 0.2100
-vdw 906 3.5000 0.0660
-
-
- ##################################
- ## ##
- ## Bond Stretching Parameters ##
- ## ##
- ##################################
-
-
-bond 1 2 367.00 1.3800
-bond 1 3 420.00 1.3570
-bond 1 13 367.00 1.3600
-bond 1 19 450.00 1.2790
-bond 1 23 300.00 0.3000
-bond 1 37 420.00 1.3400
-bond 1 38 420.00 1.3540
-bond 1 72 420.00 1.3540
-bond 1 73 420.00 1.3540
-bond 1 74 420.00 1.3540
-bond 1 77 420.00 1.3540
-bond 1 78 420.00 1.3540
-bond 1 98 461.00 1.5700
-bond 2 2 260.00 1.5260
-bond 2 3 317.00 1.5220
-bond 2 5 386.00 1.4250
-bond 2 6 260.00 1.5260
-bond 2 10 260.00 1.5260
-bond 2 11 317.00 1.5000
-bond 2 12 317.00 1.5100
-bond 2 13 260.00 1.5260
-bond 2 14 317.00 1.5000
-bond 2 15 222.00 1.8100
-bond 2 16 222.00 1.8100
-bond 2 29 320.00 1.4250
-bond 2 33 382.00 1.4480
-bond 2 35 337.00 1.4490
-bond 2 38 317.00 1.5100
-bond 2 41 260.00 1.5260
-bond 2 43 367.00 1.4710
-bond 2 45 337.00 1.4630
-bond 2 70 317.00 1.4950
-bond 3 3 350.00 1.5100
-bond 3 4 570.00 1.2290
-bond 3 5 450.00 1.3640
-bond 3 6 317.00 1.5220
-bond 3 10 317.00 1.5220
-bond 3 12 469.00 1.4000
-bond 3 13 317.00 1.5220
-bond 3 19 400.00 1.4440
-bond 3 29 214.00 1.3270
-bond 3 30 300.00 1.7900
-bond 3 33 317.00 1.5220
-bond 3 35 490.00 1.3350
-bond 3 36 340.00 1.0900
-bond 3 37 410.00 1.4440
-bond 3 38 400.00 1.4900
-bond 3 40 385.00 1.4600
-bond 3 42 656.00 1.2500
-bond 3 46 457.00 1.3580
-bond 3 47 418.00 1.3880
-bond 3 50 447.00 1.4190
-bond 3 55 300.00 1.9800
-bond 3 74 400.00 1.4900
-bond 3 76 385.00 1.4600
-bond 3 95 424.00 1.3830
-bond 3 97 490.00 1.3350
-bond 4 23 553.00 0.3000
-bond 4 54 525.00 1.4800
-bond 4 79 570.00 1.2290
-bond 4 100 700.00 1.1710
-bond 5 6 386.00 1.4250
-bond 5 7 553.00 0.9450
-bond 5 10 386.00 1.4250
-bond 5 13 320.00 1.4100
-bond 5 23 340.00 0.3000
-bond 5 29 250.00 1.4700
-bond 5 33 320.00 1.4500
-bond 5 35 400.00 1.3800
-bond 5 37 450.00 1.3700
-bond 5 38 450.00 1.3640
-bond 5 41 320.00 1.3800
-bond 5 54 230.00 1.6100
-bond 5 69 450.00 1.6700
-bond 5 96 94.00 1.8000
-bond 5 98 374.00 1.6400
-bond 6 6 260.00 1.5260
-bond 6 10 260.00 1.5260
-bond 6 11 317.00 1.5000
-bond 6 13 260.00 1.5260
-bond 6 14 317.00 1.5000
-bond 6 15 222.00 1.8100
-bond 6 16 222.00 1.8100
-bond 6 29 320.00 1.4250
-bond 6 33 382.00 1.4480
-bond 6 35 337.00 1.4490
-bond 6 37 317.00 1.5100
-bond 6 41 260.00 1.5260
-bond 6 43 367.00 1.4710
-bond 6 45 337.00 1.4630
-bond 6 69 222.00 1.8100
-bond 6 95 337.00 1.4750
-bond 7 23 340.00 0.1000
-bond 7 29 553.00 0.9450
-bond 9 9 530.00 1.3400
-bond 9 11 530.00 1.3400
-bond 9 14 530.00 1.3400
-bond 10 10 260.00 1.5260
-bond 10 11 317.00 1.5000
-bond 10 14 317.00 1.5000
-bond 10 29 320.00 1.4250
-bond 10 33 382.00 1.4480
-bond 10 35 337.00 1.4490
-bond 10 95 337.00 1.4750
-bond 11 11 530.00 1.3400
-bond 11 13 317.00 1.5000
-bond 11 14 530.00 1.3400
-bond 11 69 222.00 1.7600
-bond 12 12 469.00 1.4000
-bond 12 38 469.00 1.4000
-bond 12 50 469.00 1.4000
-bond 12 71 469.00 1.4000
-bond 13 13 268.00 1.5290
-bond 13 14 317.00 1.5000
-bond 13 15 222.00 1.8100
-bond 13 16 222.00 1.8100
-bond 13 18 390.00 1.4300
-bond 13 19 390.00 1.4700
-bond 13 23 340.00 0.3000
-bond 13 29 320.00 1.4100
-bond 13 30 245.00 1.7810
-bond 13 31 340.00 1.7900
-bond 13 33 382.00 1.4480
-bond 13 35 337.00 1.4490
-bond 13 36 340.00 1.0900
-bond 13 37 317.00 1.5100
-bond 13 38 317.00 1.5100
-bond 13 40 317.00 1.5100
-bond 13 41 268.00 1.5290
-bond 13 43 367.00 1.4710
-bond 13 45 337.00 1.4630
-bond 13 46 337.00 1.4490
-bond 13 47 337.00 1.4750
-bond 13 50 317.00 1.5100
-bond 13 54 212.00 1.8430
-bond 13 55 245.00 1.9450
-bond 13 56 200.00 2.1900
-bond 13 69 340.00 1.7700
-bond 13 70 317.00 1.4950
-bond 13 73 317.00 1.5040
-bond 13 74 317.00 1.5040
-bond 13 75 317.00 1.5040
-bond 13 77 317.00 1.4950
-bond 13 80 337.00 1.4490
-bond 13 81 280.00 1.5100
-bond 13 85 532.80 1.4600
-bond 13 91 382.00 1.4480
-bond 13 92 375.00 1.4900
-bond 13 94 212.00 1.8200
-bond 13 95 337.00 1.4750
-bond 13 97 337.00 1.4490
-bond 13 98 187.00 1.8600
-bond 13 99 317.00 1.5100
-bond 14 14 530.00 1.3400
-bond 15 17 274.00 1.3360
-bond 15 38 250.00 1.7400
-bond 16 16 166.00 2.0380
-bond 16 19 300.00 1.6850
-bond 16 23 340.00 0.5000
-bond 16 35 250.00 1.7300
-bond 16 37 250.00 1.7600
-bond 16 38 250.00 1.7600
-bond 16 51 250.00 1.7300
-bond 16 72 250.00 1.7600
-bond 16 74 250.00 1.7400
-bond 16 81 222.00 1.8100
-bond 16 98 144.00 2.1500
-bond 17 23 340.00 0.1000
-bond 18 18 550.00 1.1200
-bond 18 19 650.00 1.1570
-bond 18 38 400.00 1.4100
-bond 18 46 550.00 1.2400
-bond 19 19 1150.00 1.2100
-bond 19 30 330.00 1.6370
-bond 19 36 420.00 1.0800
-bond 19 37 400.00 1.4260
-bond 19 38 400.00 1.4510
-bond 19 40 400.00 1.4260
-bond 19 55 330.00 1.7840
-bond 19 78 400.00 1.4510
-bond 19 81 400.00 1.4510
-bond 20 21 600.00 0.9572
-bond 20 22 900.00 0.1750
-bond 20 96 40.00 2.0500
-bond 23 23 340.00 0.3000
-bond 23 29 340.00 0.3000
-bond 23 30 300.00 0.3000
-bond 23 31 340.00 0.5000
-bond 23 32 340.00 0.3000
-bond 23 33 340.00 0.3000
-bond 23 34 340.00 0.1000
-bond 23 35 367.00 0.3000
-bond 23 36 340.00 0.3000
-bond 23 37 340.00 0.3000
-bond 23 38 367.00 0.3000
-bond 23 39 340.00 0.3000
-bond 23 43 340.00 0.3000
-bond 23 46 367.00 0.3000
-bond 23 51 367.00 0.3000
-bond 23 55 300.00 0.3000
-bond 23 93 340.00 0.1000
-bond 29 29 250.00 1.4700
-bond 29 30 200.00 1.6900
-bond 29 33 320.00 1.4500
-bond 29 35 320.00 1.4500
-bond 29 37 450.00 1.3700
-bond 29 38 450.00 1.3640
-bond 29 41 320.00 1.3800
-bond 29 50 340.00 1.3600
-bond 29 51 462.00 1.3990
-bond 29 54 230.00 1.6100
-bond 29 72 462.00 1.3570
-bond 29 74 340.00 1.3600
-bond 29 98 374.00 1.6400
-bond 30 37 300.00 1.7250
-bond 30 38 300.00 1.7250
-bond 30 72 300.00 1.7250
-bond 30 73 300.00 1.7250
-bond 30 74 300.00 1.7250
-bond 30 77 300.00 1.7250
-bond 30 78 300.00 1.7250
-bond 30 98 223.00 2.0200
-bond 31 32 700.00 1.5300
-bond 32 69 700.00 1.4400
-bond 33 33 350.00 1.4450
-bond 33 34 434.00 1.0100
-bond 33 38 481.00 1.3400
-bond 33 69 340.00 1.7700
-bond 33 81 382.00 1.4480
-bond 33 98 266.00 1.7400
-bond 34 35 434.00 1.0100
-bond 34 43 434.00 1.0100
-bond 34 45 434.00 1.0100
-bond 34 46 434.00 1.0100
-bond 34 47 434.00 1.0100
-bond 34 91 434.00 1.0100
-bond 34 95 434.00 1.0100
-bond 34 98 166.00 1.4800
-bond 35 38 427.00 1.3810
-bond 35 49 427.00 1.3810
-bond 35 69 434.00 1.6700
-bond 35 74 427.00 1.3810
-bond 35 78 427.00 1.3810
-bond 35 81 337.00 1.4490
-bond 35 93 500.00 1.2700
-bond 35 96 40.00 2.0500
-bond 36 37 340.00 1.0800
-bond 36 40 340.00 1.0800
-bond 36 41 340.00 1.0900
-bond 36 70 340.00 1.0800
-bond 36 81 340.00 1.0880
-bond 36 85 532.80 1.0840
-bond 36 98 166.00 1.4800
-bond 36 99 340.00 1.0800
-bond 37 37 549.00 1.3400
-bond 37 38 427.00 1.4330
-bond 37 40 549.00 1.3400
-bond 37 47 448.00 1.3650
-bond 37 48 367.00 1.0800
-bond 37 55 300.00 1.9000
-bond 37 56 250.00 2.0800
-bond 37 76 385.00 1.4600
-bond 37 81 317.00 1.5100
-bond 37 95 448.00 1.3650
-bond 37 100 700.00 1.3050
-bond 38 38 469.00 1.4000
-bond 38 39 367.00 1.0800
-bond 38 40 427.00 1.4330
-bond 38 43 400.00 1.4500
-bond 38 45 481.00 1.3400
-bond 38 46 483.00 1.3390
-bond 38 47 427.00 1.3810
-bond 38 50 469.00 1.4040
-bond 38 51 414.00 1.3910
-bond 38 54 220.00 1.7800
-bond 38 55 300.00 1.8700
-bond 38 56 250.00 2.0800
-bond 38 69 340.00 1.7700
-bond 38 71 469.00 1.4000
-bond 38 74 546.00 1.3670
-bond 38 76 469.00 1.4000
-bond 38 78 469.00 1.4210
-bond 38 81 317.00 1.4900
-bond 38 91 382.00 1.3850
-bond 38 92 400.00 1.4600
-bond 38 99 427.00 1.4330
-bond 39 49 367.00 1.0800
-bond 39 52 340.00 1.0800
-bond 39 72 367.00 1.0800
-bond 39 73 367.00 1.0800
-bond 39 74 367.00 1.0800
-bond 39 75 367.00 1.0800
-bond 39 77 367.00 1.0800
-bond 39 78 367.00 1.0800
-bond 40 40 385.00 1.4600
-bond 40 46 457.00 1.2900
-bond 40 74 549.00 1.3650
-bond 40 99 385.00 1.4600
-bond 41 95 337.00 1.4750
-bond 42 54 525.00 1.4800
-bond 43 44 434.00 1.0100
-bond 44 45 434.00 1.0100
-bond 45 49 481.00 1.3400
-bond 45 72 481.00 1.3400
-bond 46 46 500.00 1.3200
-bond 46 49 502.00 1.3240
-bond 46 50 461.00 1.3540
-bond 46 72 461.00 1.3540
-bond 46 76 483.00 1.3390
-bond 46 93 550.00 1.2100
-bond 46 99 457.00 1.2900
-bond 47 50 436.00 1.3740
-bond 47 51 400.00 1.3490
-bond 47 52 440.00 1.3710
-bond 47 71 428.00 1.3800
-bond 47 72 477.00 1.3430
-bond 47 74 427.00 1.3810
-bond 47 75 427.00 1.3810
-bond 47 76 385.00 1.4400
-bond 48 73 367.00 1.0800
-bond 48 74 367.00 1.0800
-bond 49 53 367.00 1.0800
-bond 50 50 520.00 1.3700
-bond 50 51 414.00 1.3910
-bond 50 70 388.00 1.4590
-bond 50 71 447.00 1.4190
-bond 50 77 469.00 1.4240
-bond 50 95 436.00 1.3740
-bond 51 51 400.00 1.2800
-bond 51 52 529.00 1.3040
-bond 51 72 488.00 1.3350
-bond 51 73 410.00 1.3940
-bond 51 74 410.00 1.3940
-bond 51 78 410.00 1.3200
-bond 52 53 367.00 1.0800
-bond 52 95 440.00 1.3710
-bond 53 72 367.00 1.0800
-bond 54 98 108.00 2.2500
-bond 55 72 300.00 1.8700
-bond 55 73 300.00 1.8700
-bond 55 74 300.00 1.8700
-bond 55 77 300.00 1.8700
-bond 55 78 300.00 1.8700
-bond 55 98 151.00 2.1900
-bond 56 72 250.00 2.0800
-bond 56 73 250.00 2.0800
-bond 56 74 250.00 2.0800
-bond 56 77 250.00 2.0800
-bond 56 78 250.00 2.0800
-bond 56 98 108.00 2.4400
-bond 67 68 500.00 1.8000
-bond 70 74 546.00 1.3520
-bond 72 76 385.00 1.4600
-bond 72 77 520.00 1.3700
-bond 73 74 520.00 1.3700
-bond 73 76 385.00 1.4600
-bond 74 74 512.00 1.3750
-bond 74 76 385.00 1.4600
-bond 74 77 546.00 1.3670
-bond 74 78 520.00 1.3700
-bond 75 75 520.00 1.3700
-bond 76 76 385.00 1.4600
-bond 76 77 385.00 1.4600
-bond 76 78 385.00 1.4600
-bond 77 77 469.00 1.4240
-bond 77 78 469.00 1.4240
-bond 79 80 490.00 1.3350
-bond 79 81 317.00 1.5220
-bond 80 81 337.00 1.4490
-bond 81 81 260.00 1.5200
-bond 92 93 550.00 1.2250
-bond 98 98 94.00 2.3200
-bond 99 99 549.00 1.3450
-
-
- ################################
- ## ##
- ## Angle Bending Parameters ##
- ## ##
- ################################
-
-
-angle 23 1 23 33.00 109.47
-angle 1 2 2 50.00 109.50
-angle 2 2 2 63.00 112.40
-angle 2 2 3 63.00 112.40
-angle 2 2 5 80.00 109.50
-angle 2 2 6 63.00 112.40
-angle 2 2 10 63.00 112.40
-angle 2 2 16 50.00 114.70
-angle 2 2 29 80.00 109.50
-angle 2 2 33 56.20 109.47
-angle 2 2 35 80.00 111.20
-angle 2 2 38 63.00 112.40
-angle 2 2 41 63.00 112.40
-angle 2 2 43 80.00 111.20
-angle 2 2 45 80.00 111.20
-angle 3 2 10 63.00 112.40
-angle 3 2 33 80.00 111.20
-angle 3 2 35 80.00 110.30
-angle 5 2 6 80.00 109.50
-angle 5 2 10 80.00 109.50
-angle 6 2 6 63.00 112.40
-angle 6 2 10 63.00 112.40
-angle 6 2 13 63.00 112.40
-angle 6 2 29 80.00 109.50
-angle 6 2 33 56.20 109.47
-angle 6 2 41 63.00 112.40
-angle 10 2 10 63.00 112.40
-angle 10 2 12 63.00 114.00
-angle 10 2 15 50.00 108.60
-angle 10 2 16 50.00 114.70
-angle 10 2 29 80.00 109.50
-angle 10 2 33 56.20 109.47
-angle 10 2 38 63.00 114.00
-angle 10 2 70 63.00 115.60
-angle 13 2 33 56.20 109.47
-angle 1 3 4 80.00 121.00
-angle 1 3 13 80.00 111.00
-angle 2 3 4 80.00 120.40
-angle 2 3 35 70.00 116.60
-angle 2 3 42 70.00 117.00
-angle 3 3 4 80.00 121.40
-angle 3 3 13 80.00 117.20
-angle 3 3 35 70.00 116.60
-angle 4 3 4 80.00 126.00
-angle 4 3 5 80.00 121.00
-angle 4 3 6 80.00 120.40
-angle 4 3 10 80.00 120.40
-angle 4 3 13 80.00 120.40
-angle 4 3 29 83.00 123.40
-angle 4 3 30 75.00 119.00
-angle 4 3 33 80.00 120.40
-angle 4 3 35 80.00 122.90
-angle 4 3 36 35.00 123.00
-angle 4 3 37 80.00 125.30
-angle 4 3 38 80.00 120.40
-angle 4 3 40 80.00 124.00
-angle 4 3 42 80.00 126.00
-angle 4 3 46 80.00 122.50
-angle 4 3 47 80.00 120.60
-angle 4 3 50 80.00 128.80
-angle 4 3 55 75.00 119.00
-angle 4 3 74 80.00 120.40
-angle 4 3 77 80.00 128.20
-angle 4 3 95 80.00 120.90
-angle 4 3 97 80.00 122.90
-angle 5 3 10 70.00 115.00
-angle 5 3 12 70.00 120.00
-angle 5 3 13 70.00 108.00
-angle 5 3 36 40.00 115.00
-angle 5 3 38 70.00 120.00
-angle 6 3 35 70.00 116.60
-angle 6 3 42 70.00 117.00
-angle 10 3 29 81.00 111.40
-angle 10 3 35 70.00 116.60
-angle 10 3 42 65.00 117.00
-angle 12 3 12 85.00 120.00
-angle 13 3 13 70.00 116.00
-angle 13 3 29 81.00 111.40
-angle 13 3 30 75.00 109.00
-angle 13 3 33 70.00 116.00
-angle 13 3 35 70.00 116.60
-angle 13 3 36 35.00 115.00
-angle 13 3 38 70.00 116.00
-angle 13 3 40 70.00 116.00
-angle 13 3 42 70.00 117.00
-angle 13 3 55 75.00 109.00
-angle 13 3 97 70.00 116.60
-angle 29 3 35 81.00 111.40
-angle 29 3 36 40.00 115.00
-angle 29 3 38 81.00 111.40
-angle 33 3 74 70.00 116.00
-angle 35 3 35 70.00 114.20
-angle 35 3 36 40.00 114.00
-angle 35 3 37 70.00 115.50
-angle 35 3 38 70.00 115.50
-angle 35 3 50 70.00 111.30
-angle 36 3 36 35.00 115.00
-angle 36 3 38 35.00 115.00
-angle 36 3 40 80.00 116.00
-angle 36 3 46 35.00 116.00
-angle 36 3 46 35.00 122.00
-angle 37 3 47 70.00 114.10
-angle 38 3 38 85.00 120.00
-angle 38 3 42 70.00 117.00
-angle 42 3 42 80.00 126.00
-angle 46 3 47 70.00 118.60
-angle 46 3 95 70.00 118.60
-angle 47 3 47 70.00 118.60
-angle 47 3 50 70.00 111.30
-angle 47 3 95 70.00 115.40
-angle 3 4 23 35.00 113.00
-angle 23 4 23 10.00 117.00
-angle 2 5 7 55.00 108.50
-angle 3 5 7 35.00 113.00
-angle 6 5 7 55.00 108.50
-angle 7 5 10 55.00 108.50
-angle 7 5 13 55.00 108.50
-angle 7 5 23 10.00 109.47
-angle 7 5 35 49.00 105.40
-angle 7 5 37 35.00 109.00
-angle 7 5 38 35.00 113.00
-angle 7 5 41 55.00 108.50
-angle 7 5 54 55.00 108.50
-angle 7 5 69 74.00 110.00
-angle 7 5 96 100.00 126.00
-angle 13 5 23 10.00 109.47
-angle 13 5 54 100.00 120.50
-angle 23 5 23 5.00 109.47
-angle 23 5 38 10.00 109.47
-angle 5 7 23 10.00 109.47
-angle 23 7 23 33.00 109.47
-angle 2 10 2 63.00 112.40
-angle 2 10 3 63.00 111.10
-angle 2 10 5 80.00 109.50
-angle 2 10 6 63.00 112.40
-angle 2 10 10 63.00 111.50
-angle 2 10 29 80.00 109.50
-angle 2 10 33 56.20 109.47
-angle 2 10 35 80.00 109.70
-angle 2 10 38 63.00 112.40
-angle 2 10 95 80.00 109.50
-angle 3 10 6 63.00 111.10
-angle 3 10 10 63.00 111.10
-angle 3 10 33 80.00 109.70
-angle 3 10 35 63.00 110.10
-angle 5 10 6 80.00 109.50
-angle 5 10 10 80.00 109.50
-angle 6 10 6 63.00 111.50
-angle 6 10 10 63.00 111.50
-angle 6 10 29 80.00 109.50
-angle 6 10 33 56.20 109.47
-angle 6 10 35 80.00 109.50
-angle 10 10 10 63.00 111.50
-angle 10 10 29 80.00 109.50
-angle 10 10 33 56.20 109.47
-angle 10 10 35 80.00 109.70
-angle 10 10 95 80.00 109.50
-angle 13 10 33 56.20 109.47
-angle 29 10 38 80.00 109.50
-angle 29 10 95 80.00 109.50
-angle 2 11 2 70.00 124.00
-angle 2 11 6 70.00 124.00
-angle 2 11 9 70.00 118.00
-angle 2 11 10 70.00 124.00
-angle 2 11 11 70.00 118.00
-angle 2 11 13 70.00 124.00
-angle 6 11 6 70.00 124.00
-angle 6 11 9 70.00 118.00
-angle 6 11 10 70.00 124.00
-angle 6 11 11 70.00 118.00
-angle 6 11 13 70.00 124.00
-angle 9 11 10 70.00 118.00
-angle 9 11 11 70.00 118.00
-angle 9 11 13 70.00 118.00
-angle 9 11 14 70.00 118.00
-angle 9 11 69 70.00 118.00
-angle 10 11 10 70.00 124.00
-angle 10 11 11 70.00 118.00
-angle 10 11 13 70.00 124.00
-angle 11 11 11 70.00 118.00
-angle 11 11 13 70.00 118.00
-angle 11 11 14 70.00 118.00
-angle 13 11 13 70.00 124.00
-angle 2 12 12 70.00 120.00
-angle 3 12 12 85.00 120.00
-angle 12 12 12 85.00 120.00
-angle 12 12 38 85.00 120.00
-angle 12 12 50 85.00 120.00
-angle 12 12 71 85.00 120.00
-angle 1 13 1 77.00 109.10
-angle 1 13 3 50.00 109.50
-angle 1 13 13 50.00 109.50
-angle 1 13 36 40.00 107.00
-angle 1 13 37 50.00 109.50
-angle 1 13 38 50.00 109.50
-angle 1 13 69 50.00 109.50
-angle 2 13 2 40.00 109.50
-angle 2 13 3 63.00 111.10
-angle 2 13 6 40.00 109.50
-angle 2 13 33 56.20 109.47
-angle 2 13 35 80.00 109.70
-angle 2 13 36 35.00 109.50
-angle 2 13 38 63.00 114.00
-angle 3 13 3 63.00 111.10
-angle 3 13 6 63.00 109.50
-angle 3 13 13 63.00 111.10
-angle 3 13 29 50.00 109.50
-angle 3 13 30 69.00 109.80
-angle 3 13 33 80.00 111.20
-angle 3 13 35 63.00 110.10
-angle 3 13 36 35.00 109.50
-angle 3 13 38 63.00 112.00
-angle 3 13 43 80.00 111.20
-angle 3 13 46 63.00 110.10
-angle 3 13 55 69.00 109.80
-angle 3 13 80 80.00 113.00
-angle 5 13 13 50.00 109.50
-angle 5 13 36 35.00 109.50
-angle 5 13 38 50.00 109.50
-angle 5 13 41 50.00 109.50
-angle 6 13 6 40.00 109.50
-angle 6 13 33 56.20 109.47
-angle 10 13 33 56.20 109.47
-angle 13 13 13 58.35 112.70
-angle 13 13 15 50.00 108.60
-angle 13 13 16 50.00 114.70
-angle 13 13 19 58.35 112.70
-angle 13 13 29 50.00 109.50
-angle 13 13 30 69.00 109.80
-angle 13 13 31 50.00 108.60
-angle 13 13 33 56.20 109.47
-angle 13 13 35 80.00 109.70
-angle 13 13 36 37.50 110.70
-angle 13 13 37 63.00 111.10
-angle 13 13 38 63.00 114.00
-angle 13 13 41 58.35 112.70
-angle 13 13 43 80.00 111.20
-angle 13 13 45 80.00 111.20
-angle 13 13 46 65.00 109.00
-angle 13 13 50 63.00 114.00
-angle 13 13 54 43.00 109.50
-angle 13 13 55 69.00 110.00
-angle 13 13 56 75.00 112.00
-angle 13 13 69 50.00 108.60
-angle 13 13 70 63.00 115.60
-angle 13 13 73 63.00 114.00
-angle 13 13 74 63.00 114.00
-angle 13 13 75 63.00 114.00
-angle 13 13 77 63.00 115.60
-angle 13 13 80 80.00 110.00
-angle 13 13 85 63.00 105.00
-angle 13 13 91 80.00 111.20
-angle 13 13 92 63.00 111.10
-angle 13 13 94 43.00 109.50
-angle 13 13 95 50.00 109.50
-angle 13 13 97 80.00 109.70
-angle 13 13 98 60.00 112.00
-angle 15 13 36 35.00 109.50
-angle 16 13 33 50.00 114.70
-angle 16 13 36 35.00 109.50
-angle 16 13 38 50.00 114.70
-angle 16 13 74 50.00 114.70
-angle 18 13 36 35.00 108.50
-angle 19 13 36 35.00 108.50
-angle 29 13 35 50.00 109.50
-angle 29 13 36 35.00 109.50
-angle 29 13 38 50.00 109.50
-angle 29 13 95 50.00 109.50
-angle 30 13 30 78.00 111.70
-angle 30 13 36 51.00 107.60
-angle 31 13 36 35.00 109.50
-angle 33 13 36 35.00 109.50
-angle 33 13 38 80.00 111.20
-angle 35 13 36 35.00 109.50
-angle 36 13 36 33.00 107.80
-angle 36 13 37 35.00 109.50
-angle 36 13 38 35.00 109.50
-angle 36 13 40 35.00 109.50
-angle 36 13 41 37.50 110.70
-angle 36 13 43 35.00 109.50
-angle 36 13 45 35.00 109.50
-angle 36 13 46 35.00 109.50
-angle 36 13 47 35.00 109.50
-angle 36 13 50 35.00 109.50
-angle 36 13 54 41.00 109.50
-angle 36 13 55 51.00 107.60
-angle 36 13 56 75.00 111.00
-angle 36 13 69 35.00 109.50
-angle 36 13 70 35.00 109.50
-angle 36 13 73 35.00 109.50
-angle 36 13 74 35.00 109.50
-angle 36 13 75 35.00 109.50
-angle 36 13 77 35.00 109.50
-angle 36 13 80 35.00 109.50
-angle 36 13 81 37.50 110.70
-angle 36 13 85 35.00 105.00
-angle 36 13 91 35.00 109.50
-angle 36 13 92 35.00 105.00
-angle 36 13 94 41.00 109.50
-angle 36 13 95 35.00 109.50
-angle 36 13 97 35.00 109.50
-angle 36 13 98 35.00 109.50
-angle 37 13 37 63.00 112.40
-angle 37 13 38 40.00 109.50
-angle 38 13 38 40.00 109.50
-angle 38 13 47 80.00 111.20
-angle 38 13 54 43.00 109.50
-angle 38 13 55 69.00 110.00
-angle 55 13 55 78.00 111.70
-angle 2 14 2 70.00 124.00
-angle 2 14 6 70.00 124.00
-angle 2 14 9 70.00 118.00
-angle 2 14 10 70.00 124.00
-angle 2 14 11 70.00 118.00
-angle 2 14 13 70.00 124.00
-angle 2 14 14 70.00 118.00
-angle 6 14 6 70.00 124.00
-angle 6 14 9 70.00 118.00
-angle 6 14 10 70.00 124.00
-angle 6 14 11 70.00 118.00
-angle 6 14 13 70.00 124.00
-angle 6 14 14 70.00 118.00
-angle 9 14 10 70.00 118.00
-angle 9 14 11 70.00 118.00
-angle 9 14 13 70.00 118.00
-angle 9 14 14 70.00 118.00
-angle 10 14 10 70.00 124.00
-angle 10 14 11 70.00 118.00
-angle 10 14 13 70.00 124.00
-angle 10 14 14 70.00 118.00
-angle 11 14 11 70.00 118.00
-angle 11 14 13 70.00 118.00
-angle 11 14 14 70.00 118.00
-angle 13 14 13 70.00 124.00
-angle 13 14 14 70.00 118.00
-angle 14 14 14 70.00 118.00
-angle 2 15 17 44.00 96.00
-angle 2 15 22 150.00 96.70
-angle 6 15 17 44.00 96.00
-angle 6 15 22 150.00 96.70
-angle 13 15 17 44.00 96.00
-angle 13 15 22 150.00 96.70
-angle 13 15 23 10.00 109.47
-angle 17 15 17 35.00 92.07
-angle 17 15 22 150.00 96.70
-angle 17 15 38 50.00 96.00
-angle 22 15 22 10.00 160.00
-angle 23 15 23 5.00 109.47
-angle 2 16 6 62.00 98.90
-angle 2 16 16 68.00 103.70
-angle 2 16 22 150.00 96.70
-angle 6 16 16 68.00 103.70
-angle 6 16 22 150.00 96.70
-angle 13 16 13 62.00 98.90
-angle 13 16 16 68.00 103.70
-angle 13 16 19 65.00 100.00
-angle 13 16 22 150.00 96.70
-angle 13 16 23 10.00 109.47
-angle 13 16 38 62.00 104.20
-angle 13 16 81 62.00 94.00
-angle 16 16 22 150.00 96.70
-angle 22 16 22 10.00 160.00
-angle 23 16 23 5.00 109.47
-angle 23 16 51 10.00 130.00
-angle 23 16 72 10.00 130.00
-angle 23 16 74 10.00 130.00
-angle 35 16 50 74.00 92.40
-angle 37 16 38 62.00 104.20
-angle 50 16 72 74.00 97.00
-angle 50 16 74 74.00 97.00
-angle 72 16 74 74.00 90.00
-angle 74 16 74 74.00 97.00
-angle 15 17 23 10.00 109.47
-angle 23 17 23 33.00 109.47
-angle 13 18 19 150.00 180.00
-angle 18 18 46 100.00 180.00
-angle 19 18 38 170.00 180.00
-angle 13 19 18 150.00 180.00
-angle 13 19 19 150.00 180.00
-angle 16 19 19 140.00 180.00
-angle 18 19 23 10.00 90.00
-angle 18 19 37 150.00 180.00
-angle 18 19 38 150.00 180.00
-angle 18 19 45 150.00 180.00
-angle 18 19 78 150.00 180.00
-angle 19 19 36 112.00 180.00
-angle 19 19 37 160.00 180.00
-angle 19 19 38 160.00 180.00
-angle 19 19 40 160.00 180.00
-angle 21 20 21 75.00 109.50
-angle 21 20 22 50.00 54.75
-angle 23 23 23 33.00 109.47
-angle 2 29 2 100.00 111.80
-angle 2 29 3 83.00 116.90
-angle 2 29 6 100.00 111.80
-angle 2 29 7 55.00 108.50
-angle 2 29 38 100.00 111.80
-angle 2 29 41 100.00 113.00
-angle 2 29 54 100.00 120.50
-angle 3 29 6 83.00 116.90
-angle 3 29 10 83.00 116.90
-angle 3 29 13 83.00 116.90
-angle 3 29 38 83.00 116.90
-angle 6 29 41 100.00 113.00
-angle 6 29 54 100.00 120.50
-angle 7 29 10 55.00 108.50
-angle 10 29 10 100.00 111.80
-angle 10 29 41 100.00 113.00
-angle 10 29 54 100.00 120.50
-angle 13 29 13 60.00 109.50
-angle 13 29 23 10.00 109.47
-angle 13 29 37 75.00 111.00
-angle 13 29 38 75.00 111.00
-angle 13 29 41 60.00 109.50
-angle 13 29 54 100.00 120.50
-angle 13 29 98 40.00 130.00
-angle 23 29 23 5.00 109.47
-angle 23 29 38 10.00 109.47
-angle 23 29 51 10.00 125.00
-angle 23 29 72 10.00 125.00
-angle 23 29 74 10.00 125.00
-angle 35 29 50 70.00 104.50
-angle 37 29 38 75.00 111.00
-angle 38 29 38 75.00 111.00
-angle 38 29 54 100.00 120.50
-angle 50 29 72 70.00 106.50
-angle 50 29 74 70.00 106.50
-angle 51 29 74 70.00 108.90
-angle 54 29 54 100.00 120.50
-angle 72 29 72 70.00 107.00
-angle 72 29 74 70.00 104.00
-angle 74 29 74 70.00 106.50
-angle 98 29 98 20.00 145.00
-angle 23 30 23 33.00 109.47
-angle 13 31 13 62.00 96.00
-angle 13 31 32 74.00 107.00
-angle 23 31 32 10.00 90.00
-angle 2 33 2 51.80 107.20
-angle 2 33 6 51.80 107.20
-angle 2 33 10 51.80 107.20
-angle 2 33 13 51.80 107.20
-angle 2 33 34 43.20 108.10
-angle 3 33 13 63.00 111.10
-angle 3 33 38 63.00 112.00
-angle 6 33 6 51.80 107.20
-angle 6 33 10 51.80 107.20
-angle 6 33 13 51.80 107.20
-angle 6 33 34 43.20 108.10
-angle 10 33 10 51.80 107.20
-angle 10 33 13 51.80 107.20
-angle 10 33 34 43.20 108.10
-angle 13 33 13 51.80 107.20
-angle 13 33 34 35.00 109.50
-angle 13 33 38 50.00 116.00
-angle 13 33 69 50.00 108.60
-angle 23 33 34 10.00 100.00
-angle 23 33 38 10.00 109.50
-angle 34 33 34 43.60 106.40
-angle 34 33 38 35.00 116.00
-angle 34 33 69 35.00 115.00
-angle 38 33 38 50.00 116.00
-angle 38 33 69 50.00 108.60
-angle 38 33 81 50.00 109.50
-angle 23 34 23 33.00 109.47
-angle 23 34 33 10.00 109.50
-angle 2 35 3 50.00 121.90
-angle 2 35 6 50.00 121.90
-angle 2 35 10 50.00 118.00
-angle 2 35 34 38.00 118.40
-angle 3 35 3 70.00 126.40
-angle 3 35 5 46.00 115.70
-angle 3 35 6 50.00 121.90
-angle 3 35 10 50.00 121.90
-angle 3 35 13 50.00 121.90
-angle 3 35 16 70.00 112.00
-angle 3 35 23 10.00 109.50
-angle 3 35 29 70.00 108.60
-angle 3 35 34 35.00 119.80
-angle 3 35 38 50.00 121.90
-angle 3 35 49 70.00 125.20
-angle 3 35 81 55.00 128.00
-angle 3 35 96 20.00 126.00
-angle 5 35 34 35.00 110.20
-angle 6 35 34 38.00 118.40
-angle 10 35 34 38.00 118.40
-angle 13 35 13 50.00 118.00
-angle 13 35 34 38.00 118.40
-angle 13 35 38 50.00 118.00
-angle 13 35 69 50.00 120.00
-angle 16 35 76 70.00 117.00
-angle 23 35 34 10.00 100.00
-angle 34 35 34 35.00 120.00
-angle 34 35 38 35.00 119.80
-angle 34 35 49 35.00 118.00
-angle 34 35 69 100.00 111.00
-angle 34 35 74 35.00 119.80
-angle 34 35 77 35.00 119.80
-angle 34 35 78 35.00 119.80
-angle 34 35 81 40.00 113.00
-angle 38 35 38 70.00 118.00
-angle 38 35 74 70.00 118.00
-angle 38 35 77 70.00 118.00
-angle 38 35 78 70.00 118.00
-angle 38 35 93 70.00 121.00
-angle 44 35 44 35.00 120.00
-angle 13 36 23 37.50 109.47
-angle 23 36 23 33.00 109.47
-angle 1 37 1 80.00 108.00
-angle 1 37 3 80.00 121.50
-angle 1 37 36 50.00 112.00
-angle 1 37 37 80.00 121.50
-angle 1 37 100 80.00 125.00
-angle 3 37 6 85.00 119.70
-angle 3 37 13 70.00 119.70
-angle 3 37 36 35.00 119.70
-angle 3 37 37 85.00 120.70
-angle 3 37 81 70.00 119.70
-angle 5 37 37 70.00 123.00
-angle 5 37 40 70.00 123.00
-angle 13 37 13 70.00 130.00
-angle 13 37 36 35.00 117.00
-angle 13 37 37 70.00 124.00
-angle 13 37 38 85.00 119.70
-angle 13 37 40 70.00 124.00
-angle 13 37 47 70.00 120.00
-angle 13 37 95 70.00 120.00
-angle 13 37 100 80.00 122.00
-angle 16 37 37 85.00 119.40
-angle 16 37 47 85.00 119.40
-angle 16 37 95 85.00 119.40
-angle 19 37 36 35.00 120.00
-angle 19 37 37 70.00 124.00
-angle 23 37 36 10.00 90.00
-angle 23 37 37 2.00 90.00
-angle 23 37 40 2.00 90.00
-angle 29 37 36 35.00 114.50
-angle 29 37 37 70.00 123.00
-angle 29 37 40 70.00 123.00
-angle 29 37 47 70.00 120.00
-angle 29 37 95 70.00 120.00
-angle 30 37 36 60.00 114.00
-angle 30 37 37 75.00 121.50
-angle 36 37 36 35.00 117.00
-angle 36 37 37 35.00 120.00
-angle 36 37 38 35.00 123.30
-angle 36 37 40 35.00 120.00
-angle 36 37 47 35.00 119.10
-angle 36 37 55 60.00 114.00
-angle 36 37 81 35.00 135.00
-angle 36 37 95 35.00 119.10
-angle 36 37 100 40.00 121.00
-angle 37 37 38 85.00 117.00
-angle 37 37 47 70.00 121.20
-angle 37 37 48 35.00 119.70
-angle 37 37 55 75.00 120.00
-angle 37 37 81 70.00 124.00
-angle 37 37 95 70.00 121.20
-angle 38 37 100 80.00 122.00
-angle 47 37 48 35.00 119.10
-angle 48 37 95 35.00 119.10
-angle 1 38 38 80.00 120.00
-angle 2 38 12 70.00 120.00
-angle 2 38 38 70.00 120.00
-angle 2 38 50 70.00 128.60
-angle 3 38 13 70.00 119.70
-angle 3 38 38 85.00 120.00
-angle 3 38 39 35.00 120.00
-angle 5 38 38 70.00 120.00
-angle 5 38 46 70.00 120.00
-angle 10 38 38 70.00 120.00
-angle 12 38 12 85.00 120.00
-angle 13 38 38 70.00 120.00
-angle 13 38 46 70.00 116.00
-angle 13 38 47 70.00 120.00
-angle 13 38 50 70.00 128.60
-angle 15 38 38 70.00 120.00
-angle 16 38 38 85.00 119.40
-angle 18 38 38 80.00 120.00
-angle 19 38 38 70.00 120.00
-angle 23 38 38 10.00 90.00
-angle 23 38 39 2.00 90.00
-angle 29 38 38 70.00 120.00
-angle 30 38 38 75.00 120.00
-angle 30 38 46 75.00 120.00
-angle 33 38 38 70.00 120.00
-angle 33 38 46 70.00 116.00
-angle 35 38 38 70.00 120.00
-angle 35 38 39 35.00 119.10
-angle 37 38 38 70.00 124.00
-angle 37 38 45 70.00 120.10
-angle 37 38 46 70.00 121.50
-angle 37 38 47 70.00 121.50
-angle 38 38 38 63.00 120.00
-angle 38 38 39 35.00 120.00
-angle 38 38 40 70.00 124.00
-angle 38 38 43 70.00 120.00
-angle 38 38 45 70.00 120.10
-angle 38 38 46 70.00 124.00
-angle 38 38 47 70.00 108.70
-angle 38 38 50 63.00 120.00
-angle 38 38 51 70.00 108.70
-angle 38 38 54 85.00 119.40
-angle 38 38 55 75.00 120.00
-angle 38 38 56 75.00 120.00
-angle 38 38 69 85.00 119.40
-angle 38 38 71 85.00 120.00
-angle 38 38 74 70.00 107.40
-angle 38 38 76 63.00 120.00
-angle 38 38 92 85.00 120.00
-angle 38 38 99 70.00 124.00
-angle 39 38 46 35.00 116.00
-angle 39 38 47 35.00 120.00
-angle 39 38 50 35.00 120.00
-angle 39 38 51 35.00 119.10
-angle 39 38 71 35.00 120.00
-angle 39 38 74 35.00 126.90
-angle 39 38 76 35.00 120.00
-angle 39 38 78 35.00 128.20
-angle 40 38 46 70.00 121.50
-angle 45 38 45 70.00 120.00
-angle 45 38 46 70.00 119.30
-angle 45 38 47 70.00 116.00
-angle 45 38 50 70.00 123.50
-angle 46 38 47 70.00 123.30
-angle 46 38 50 70.00 117.30
-angle 46 38 76 70.00 124.00
-angle 46 38 91 70.00 124.10
-angle 47 38 50 70.00 108.70
-angle 47 38 51 70.00 123.30
-angle 50 38 74 63.00 106.40
-angle 91 38 91 70.00 111.80
-angle 3 40 37 70.00 118.70
-angle 13 40 37 70.00 124.00
-angle 13 40 40 70.00 124.00
-angle 13 40 99 70.00 124.00
-angle 19 40 36 35.00 120.00
-angle 23 40 36 10.00 90.00
-angle 23 40 37 2.00 90.00
-angle 23 40 40 2.00 90.00
-angle 36 40 37 35.00 120.00
-angle 36 40 38 35.00 123.30
-angle 36 40 40 35.00 120.00
-angle 36 40 74 35.00 122.00
-angle 36 40 99 35.00 120.00
-angle 37 40 38 85.00 117.00
-angle 37 40 40 70.00 124.00
-angle 37 40 99 70.00 124.00
-angle 40 40 74 35.00 106.00
-angle 2 41 29 80.00 109.50
-angle 5 41 13 50.00 109.50
-angle 5 41 29 92.60 111.55
-angle 5 41 36 35.00 109.50
-angle 6 41 6 40.00 109.50
-angle 6 41 29 80.00 109.50
-angle 13 41 29 50.00 109.50
-angle 13 41 36 37.50 110.70
-angle 13 41 95 50.00 109.50
-angle 29 41 29 92.60 111.55
-angle 29 41 36 35.00 109.50
-angle 29 41 95 50.00 109.50
-angle 36 41 36 33.00 109.50
-angle 36 41 95 35.00 109.50
-angle 2 43 44 35.00 109.50
-angle 6 43 44 35.00 109.50
-angle 13 43 13 50.00 113.00
-angle 13 43 23 10.00 100.00
-angle 13 43 38 55.00 114.00
-angle 13 43 44 35.00 109.50
-angle 23 43 38 10.00 100.00
-angle 23 43 72 10.00 100.00
-angle 34 43 34 43.60 109.50
-angle 38 43 44 35.00 109.50
-angle 44 43 44 35.00 109.50
-angle 2 45 38 50.00 123.20
-angle 2 45 44 35.00 118.40
-angle 6 45 38 50.00 123.20
-angle 13 45 13 50.00 118.00
-angle 13 45 34 35.00 118.40
-angle 13 45 38 50.00 123.20
-angle 13 45 44 35.00 118.40
-angle 34 45 34 35.00 113.00
-angle 34 45 38 35.00 120.00
-angle 34 45 49 35.00 120.00
-angle 38 45 44 35.00 120.00
-angle 44 45 44 35.00 120.00
-angle 3 46 13 70.00 120.50
-angle 3 46 38 70.00 120.50
-angle 13 46 18 70.00 120.00
-angle 13 46 38 50.00 118.00
-angle 13 46 46 70.00 117.00
-angle 13 46 93 70.00 114.00
-angle 23 46 38 5.00 120.00
-angle 23 46 49 5.00 119.80
-angle 34 46 38 35.00 113.00
-angle 38 46 38 70.00 117.00
-angle 38 46 46 70.00 117.00
-angle 38 46 49 70.00 118.60
-angle 38 46 50 70.00 112.20
-angle 38 46 76 70.00 117.00
-angle 49 46 49 70.00 118.60
-angle 49 46 50 70.00 111.00
-angle 49 46 72 70.00 111.00
-angle 3 47 3 70.00 126.40
-angle 3 47 34 35.00 116.80
-angle 3 47 37 70.00 121.60
-angle 3 47 38 70.00 125.20
-angle 13 47 50 70.00 125.80
-angle 13 47 51 70.00 118.40
-angle 13 47 52 70.00 128.80
-angle 34 47 37 35.00 119.20
-angle 34 47 38 35.00 118.00
-angle 34 47 50 30.00 125.80
-angle 34 47 51 56.00 118.40
-angle 34 47 52 30.00 128.80
-angle 34 47 71 35.00 123.10
-angle 34 47 72 35.00 120.00
-angle 34 47 74 35.00 120.00
-angle 34 47 75 35.00 120.00
-angle 38 47 38 70.00 125.20
-angle 38 47 51 70.00 118.40
-angle 38 47 52 70.00 109.80
-angle 50 47 51 56.00 113.10
-angle 50 47 52 70.00 105.40
-angle 50 47 72 70.00 109.80
-angle 50 47 74 70.00 109.80
-angle 51 47 72 56.00 113.10
-angle 51 47 74 56.00 113.10
-angle 71 47 74 70.00 111.60
-angle 72 47 74 70.00 109.80
-angle 72 47 75 70.00 109.80
-angle 74 47 74 70.00 109.80
-angle 13 49 46 70.00 115.50
-angle 35 49 45 70.00 116.00
-angle 35 49 46 70.00 123.30
-angle 39 49 46 35.00 115.45
-angle 45 49 46 70.00 119.30
-angle 46 49 46 70.00 129.10
-angle 46 49 53 35.00 115.45
-angle 3 50 50 85.00 119.20
-angle 3 50 51 70.00 130.00
-angle 3 50 74 70.00 130.00
-angle 12 50 70 85.00 134.90
-angle 12 50 71 85.00 116.20
-angle 12 50 77 85.00 134.90
-angle 13 50 38 70.00 120.00
-angle 13 50 50 70.00 120.00
-angle 16 50 50 70.00 111.00
-angle 29 50 50 70.00 110.60
-angle 35 50 50 70.00 127.70
-angle 35 50 51 70.00 126.20
-angle 38 50 38 85.00 134.90
-angle 38 50 50 85.00 117.30
-angle 38 50 51 70.00 132.40
-angle 38 50 70 85.00 134.90
-angle 38 50 71 85.00 116.20
-angle 38 50 77 85.00 134.90
-angle 46 50 47 70.00 126.20
-angle 46 50 50 70.00 127.70
-angle 46 50 95 70.00 126.20
-angle 47 50 50 70.00 106.20
-angle 47 50 77 70.00 107.70
-angle 50 50 51 70.00 111.00
-angle 50 50 77 70.00 107.30
-angle 50 50 95 70.00 106.20
-angle 70 50 71 85.00 108.80
-angle 71 50 77 85.00 108.80
-angle 23 51 47 10.00 125.00
-angle 23 51 51 10.00 125.00
-angle 23 51 72 10.00 125.00
-angle 29 51 78 70.00 105.30
-angle 38 51 38 70.00 125.20
-angle 47 51 74 70.00 104.10
-angle 47 51 78 70.00 104.10
-angle 50 51 52 70.00 103.80
-angle 50 51 72 70.00 110.00
-angle 51 51 72 70.00 109.00
-angle 72 51 73 70.00 110.00
-angle 72 51 74 70.00 110.00
-angle 39 52 47 35.00 120.00
-angle 39 52 51 35.00 120.00
-angle 39 52 95 35.00 120.00
-angle 47 52 51 70.00 113.90
-angle 47 52 53 35.00 123.05
-angle 51 52 53 35.00 123.05
-angle 51 52 95 70.00 113.90
-angle 53 52 95 35.00 123.05
-angle 4 54 5 100.00 108.23
-angle 4 54 13 45.00 109.50
-angle 4 54 29 100.00 108.23
-angle 4 54 38 45.00 109.50
-angle 5 54 5 45.00 102.60
-angle 5 54 29 45.00 102.60
-angle 5 54 38 45.00 109.50
-angle 5 54 42 45.00 108.23
-angle 13 54 29 45.00 109.50
-angle 13 54 42 45.00 109.50
-angle 29 54 29 45.00 102.60
-angle 29 54 38 45.00 109.50
-angle 29 54 42 100.00 108.23
-angle 42 54 42 140.00 119.90
-angle 23 55 23 33.00 109.47
-angle 23 56 23 33.00 109.47
-angle 68 67 68 150.00 180.00
-angle 5 69 13 75.00 96.40
-angle 5 69 32 74.00 108.70
-angle 5 69 38 75.00 96.40
-angle 6 69 11 62.00 98.90
-angle 13 69 13 62.00 102.00
-angle 13 69 32 74.00 108.90
-angle 13 69 33 62.00 102.00
-angle 13 69 35 100.00 103.00
-angle 13 69 38 62.00 102.00
-angle 13 69 72 62.00 102.00
-angle 32 69 32 104.00 119.00
-angle 32 69 33 74.00 108.90
-angle 32 69 35 120.00 107.00
-angle 32 69 38 74.00 107.20
-angle 35 69 38 100.00 103.00
-angle 2 70 50 70.00 128.60
-angle 2 70 74 70.00 125.00
-angle 13 70 50 70.00 128.60
-angle 13 70 74 70.00 125.00
-angle 36 70 50 35.00 126.80
-angle 36 70 74 35.00 126.80
-angle 50 70 74 85.00 106.40
-angle 12 71 47 70.00 132.80
-angle 12 71 50 85.00 122.70
-angle 38 71 47 70.00 132.80
-angle 38 71 50 85.00 122.70
-angle 47 71 50 70.00 104.40
-angle 13 72 16 70.00 125.00
-angle 13 72 47 70.00 125.00
-angle 13 72 51 70.00 125.00
-angle 16 72 33 70.00 120.20
-angle 16 72 35 70.00 125.00
-angle 16 72 39 35.00 125.00
-angle 16 72 51 70.00 113.60
-angle 16 72 51 70.00 115.00
-angle 29 72 39 35.00 117.00
-angle 29 72 51 70.00 115.00
-angle 29 72 76 70.00 122.00
-angle 33 72 51 70.00 126.10
-angle 35 72 51 70.00 126.20
-angle 38 72 47 70.00 125.00
-angle 39 72 47 35.00 120.00
-angle 39 72 51 35.00 120.00
-angle 46 72 47 70.00 126.20
-angle 46 72 77 70.00 127.70
-angle 47 72 47 70.00 120.00
-angle 47 72 51 70.00 120.00
-angle 47 72 69 70.00 120.00
-angle 47 72 77 70.00 106.20
-angle 51 72 69 70.00 120.00
-angle 51 72 76 70.00 130.00
-angle 13 73 51 70.00 124.50
-angle 13 73 74 70.00 130.70
-angle 38 73 51 70.00 111.00
-angle 39 73 51 35.00 120.00
-angle 39 73 74 35.00 128.20
-angle 51 73 74 70.00 111.00
-angle 3 74 47 85.00 120.00
-angle 3 74 77 85.00 120.00
-angle 13 74 16 70.00 125.00
-angle 13 74 29 70.00 121.60
-angle 13 74 47 70.00 121.60
-angle 13 74 51 70.00 118.90
-angle 13 74 73 70.00 130.70
-angle 13 74 74 70.00 120.00
-angle 13 74 77 70.00 132.10
-angle 16 74 35 70.00 125.00
-angle 16 74 39 35.00 125.00
-angle 16 74 73 70.00 111.00
-angle 16 74 77 70.00 111.00
-angle 29 74 39 35.00 113.40
-angle 29 74 40 70.00 110.00
-angle 29 74 73 70.00 108.00
-angle 29 74 76 70.00 121.60
-angle 29 74 77 70.00 110.60
-angle 38 74 39 35.00 130.70
-angle 38 74 47 70.00 121.60
-angle 38 74 77 70.00 132.10
-angle 39 74 40 35.00 130.70
-angle 39 74 47 35.00 121.60
-angle 39 74 70 35.00 120.00
-angle 39 74 73 35.00 130.70
-angle 39 74 77 35.00 132.10
-angle 47 74 48 35.00 120.00
-angle 47 74 70 70.00 108.70
-angle 47 74 73 70.00 106.30
-angle 47 74 74 70.00 120.00
-angle 47 74 76 70.00 121.60
-angle 47 74 77 70.00 107.70
-angle 51 74 74 70.00 120.00
-angle 51 74 77 70.00 111.90
-angle 76 74 77 70.00 132.10
-angle 13 75 47 70.00 121.60
-angle 13 75 75 70.00 130.70
-angle 39 75 47 35.00 120.00
-angle 39 75 75 35.00 130.70
-angle 47 75 75 70.00 106.30
-angle 38 76 38 63.00 120.00
-angle 38 76 46 70.00 124.00
-angle 38 76 72 63.00 120.00
-angle 38 76 73 63.00 120.00
-angle 38 76 74 63.00 120.00
-angle 38 76 76 63.00 120.00
-angle 38 76 77 63.00 120.00
-angle 38 76 78 63.00 120.00
-angle 46 76 76 70.00 124.00
-angle 2 77 74 70.00 125.00
-angle 3 77 74 70.00 130.00
-angle 13 77 50 70.00 128.60
-angle 13 77 74 70.00 125.00
-angle 36 77 50 35.00 126.80
-angle 36 77 74 35.00 126.80
-angle 39 77 50 35.00 120.00
-angle 39 77 74 35.00 125.70
-angle 39 77 77 35.00 127.50
-angle 50 77 74 85.00 106.40
-angle 50 77 77 70.00 107.30
-angle 72 77 74 70.00 110.40
-angle 74 77 74 70.00 103.80
-angle 74 77 76 70.00 125.70
-angle 74 77 77 70.00 107.30
-angle 74 77 78 70.00 103.80
-angle 76 77 77 70.00 127.50
-angle 13 78 51 70.00 118.90
-angle 19 78 51 70.00 118.90
-angle 38 78 39 35.00 128.60
-angle 39 78 51 35.00 118.90
-angle 51 78 77 70.00 111.90
-angle 4 79 80 80.00 134.00
-angle 4 79 81 80.00 134.00
-angle 80 79 81 70.00 91.00
-angle 13 80 79 55.00 127.00
-angle 13 80 81 50.00 126.00
-angle 79 80 81 50.00 94.00
-angle 13 81 36 35.00 114.30
-angle 13 81 81 37.50 117.20
-angle 16 81 36 37.50 108.00
-angle 16 81 80 55.00 109.00
-angle 16 81 81 55.00 128.00
-angle 33 81 36 35.00 114.30
-angle 33 81 81 37.50 117.20
-angle 35 81 36 35.00 108.00
-angle 35 81 79 70.00 117.00
-angle 35 81 81 37.50 126.00
-angle 36 81 36 35.00 114.30
-angle 36 81 37 35.00 109.50
-angle 36 81 79 37.50 110.00
-angle 36 81 80 35.00 111.00
-angle 36 81 81 37.50 117.20
-angle 37 81 81 63.00 114.00
-angle 79 81 81 63.00 85.00
-angle 80 81 81 80.00 89.00
-angle 81 81 81 30.00 79.20
-angle 13 85 13 172.80 120.00
-angle 13 85 36 144.00 120.00
-angle 13 91 34 35.00 109.50
-angle 13 91 38 50.00 120.50
-angle 34 91 34 43.60 106.40
-angle 34 91 38 50.00 112.50
-angle 13 92 93 80.00 117.50
-angle 38 92 93 80.00 117.50
-angle 93 92 93 80.00 125.00
-angle 23 93 23 10.00 109.50
-angle 23 93 92 10.00 109.50
-angle 13 94 13 45.00 109.50
-angle 3 95 10 70.00 117.60
-angle 3 95 13 70.00 117.60
-angle 3 95 34 35.00 119.20
-angle 3 95 37 70.00 121.60
-angle 3 95 41 70.00 117.60
-angle 6 95 50 70.00 125.80
-angle 6 95 52 70.00 128.80
-angle 10 95 50 70.00 125.80
-angle 10 95 52 70.00 128.80
-angle 13 95 37 70.00 121.20
-angle 13 95 50 70.00 125.80
-angle 13 95 52 70.00 128.80
-angle 34 95 37 35.00 119.20
-angle 34 95 50 30.00 125.80
-angle 34 95 52 30.00 128.80
-angle 37 95 41 70.00 121.20
-angle 41 95 50 70.00 125.80
-angle 41 95 52 70.00 128.80
-angle 50 95 52 70.00 105.40
-angle 4 96 35 20.00 109.50
-angle 35 96 35 20.00 109.50
-angle 3 97 13 50.00 121.90
-angle 13 97 13 50.00 118.00
-angle 1 98 13 35.00 110.50
-angle 13 98 13 60.00 110.00
-angle 13 98 29 60.00 100.00
-angle 13 98 30 35.00 110.50
-angle 13 98 34 35.00 110.50
-angle 13 98 36 35.00 110.50
-angle 13 98 55 35.00 110.50
-angle 13 98 56 35.00 110.50
-angle 13 98 98 50.00 112.00
-angle 29 98 29 60.00 110.00
-angle 34 98 34 35.00 109.50
-angle 36 98 36 35.00 109.50
-angle 13 99 40 70.00 124.00
-angle 13 99 99 70.00 124.00
-angle 36 99 38 35.00 123.30
-angle 36 99 40 35.00 120.00
-angle 36 99 99 35.00 120.00
-angle 38 99 99 85.00 117.00
-angle 40 99 99 70.00 124.00
-angle 4 100 37 160.00 180.00
-angle 37 100 37 160.00 180.00
-
-
- #####################################
- ## ##
- ## Improper Torsional Parameters ##
- ## ##
- #####################################
-
-
-imptors 0 0 3 4 21.000 180.0 2
-imptors 0 0 3 42 21.000 180.0 2
-imptors 0 0 35 0 5.000 180.0 2
-imptors 0 0 37 0 30.000 180.0 2
-imptors 0 0 38 0 5.000 180.0 2
-
-
- ############################
- ## ##
- ## Torsional Parameters ##
- ## ##
- ############################
-
-
- ###################################################################
- ## ##
- ## Alternative Torsional Parameter Values for Use with OPLS-AA ##
- ## ##
- ## For some torsions, OPLS-AA has multiple possible parameter ##
- ## values; the list below shows functional groups for which ##
- ## these alternate (commented) values should be preferred; the ##
- ## values are in the same order as in the full parameter list ##
- ## ##
- ## 4 3 3 36 generic (default) ##
- ## 4 3 3 36 dicarbonyls ##
- ## 36 3 3 36 hydrocarbon (default) ##
- ## 36 3 3 36 dicarbonyls ##
- ## 13 3 5 7 carboxylic acid (default) ##
- ## 13 3 5 7 1,2-diacid monoanion ##
- ## 4 3 13 13 peptide (default) ##
- ## 4 3 13 13 propanamide ##
- ## 4 3 13 13 carboxylic acid ##
- ## 4 3 13 13 dicarboxylic acid ##
- ## 4 3 13 13 aldyhyde, ketone, acyl halide ##
- ## 4 3 13 13 1,2-diacid monoanion ##
- ## 5 3 13 13 carboxylic acid (default) ##
- ## 5 3 13 13 dicarboxylic acid ##
- ## 35 3 13 13 peptide psi' (default) ##
- ## 35 3 13 13 propanamide ##
- ## 35 3 13 13 beta-3-peptide, last psi ##
- ## 4 3 29 13 esters (default) ##
- ## 4 3 29 13 benzoic esters ##
- ## 7 5 13 13 alcohols (default) ##
- ## 7 5 13 13 trifluoroethanol ##
- ## 7 5 13 13 hexopyranoses ##
- ## 7 5 13 36 alcohols (default) ##
- ## 7 5 13 36 axial cyclohexanol ##
- ## 7 5 13 36 trifluoroethanol ##
- ## 0 13 13 13 alcohols, ethers (default) ##
- ## 0 13 13 13 hexopyranoses ##
- ## 3 13 13 3 dicarboxylic acid (default) ##
- ## 3 13 13 3 1,2-diacid monoanion ##
- ## 3 13 13 13 butanamide (default) ##
- ## 3 13 13 13 carboxylate ion ##
- ## 3 13 13 13 aldyhyde, ketone, acyl halide ##
- ## 3 13 13 36 all carbonyls (default) ##
- ## 3 13 13 36 dicarboxylic acid ##
- ## 3 13 13 36 aldehyde, ketone, acyl halide ##
- ## 5 13 13 5 diols only (default) ##
- ## 5 13 13 5 triols only ##
- ## 5 13 13 5 hexopyranoses ##
- ## 13 13 13 13 hydrocarbon (default) ##
- ## 13 13 13 13 perfluoroalkane ##
- ## 13 13 13 35 peptide chi-1 (default) ##
- ## 13 13 13 35 N-propylformamide ##
- ## 36 13 13 69 generic (default) ##
- ## 36 13 13 69 sulfone ##
- ## 13 13 33 13 amine (default) ##
- ## 13 13 33 13 exocyclic amine ##
- ## 13 13 33 13 exocyclic 1,4-diamine ##
- ## 13 13 33 34 amine (default) ##
- ## 13 13 33 34 azetidine, 4-ring ##
- ## 13 13 33 34 pyrrolidine, 5-ring ##
- ## 13 13 33 34 cyclic amine ##
- ## 13 13 33 34 cyclic 1,4-diamine ##
- ## 13 13 35 3 peptide phi' (default) ##
- ## 13 13 35 3 N-ethylformamide ##
- ## 13 13 35 3 beta-3-peptide, first theta tors ##
- ## 13 13 35 13 proline, CD-N-CA-CB (default) ##
- ## 13 13 35 13 proline, CG-CD-N-CA ##
- ## 36 13 35 3 peptide phi'' (default) ##
- ## 36 13 35 3 N-methylformamide ##
- ## 13 13 47 0 imidazole, indole, purine (default) ##
- ## 13 13 47 0 nucleoside chi ##
- ## 13 13 47 52 nucleoside (default) ##
- ## 13 13 47 52 imidazole, indole, purine ##
- ## 29 13 47 0 imidazole, indole, purine (default) ##
- ## 29 13 47 0 nucleoside chi ##
- ## 29 13 95 52 nucleoside (default) ##
- ## 29 13 95 52 imidazole, indole, purine ##
- ## 13 13 97 13 generic (default) ##
- ## 13 13 97 13 generic ##
- ## 17 15 38 0 aromatic thiol (default) ##
- ## 17 15 38 0 aromatic thiol, N-C-S-H ##
- ## 13 29 54 42 phosphonates (default) ##
- ## 13 29 54 42 dimethyl phosphate ##
- ## 34 35 72 16 diaryl amine (default) ##
- ## 34 35 72 16 aniline-like ##
- ## 34 35 72 29 diaryl amine (default) ##
- ## 34 35 72 29 aniline-like ##
- ## 13 40 40 37 diene (default) ##
- ## 13 40 40 37 2-methyl-1,3-butadiene ##
- ## 0 46 72 0 generic (default) ##
- ## 0 46 72 0 generic ##
- ## 0 47 72 0 generic (default) ##
- ## 0 47 72 0 generic ##
- ## 0 47 74 0 generic (default) ##
- ## 0 47 74 0 generic ##
- ## 0 47 74 0 generic ##
- ## 0 51 72 0 generic (default) ##
- ## 0 51 72 0 HA-CR-NB-?? or N?-CR-NB-?? ##
- ## 0 72 77 0 generic (default) ##
- ## 0 72 77 0 biphenyl-like, N-C-C-C ##
- ## ##
- ###################################################################
-
-
-torsion 0 2 2 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 0 2 2 6 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 1 2 2 2 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
-torsion 1 2 2 6 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
-torsion 2 2 2 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 13 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 55 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
-torsion 6 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 6 2 2 55 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
-torsion 10 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
-torsion 6 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
-torsion 10 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
-torsion 0 2 10 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 10 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 13 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 6 2 29 2 -7.400 0.0 1 3.000 180.0 2 1.800 0.0 3
-torsion 6 2 29 6 -8.400 0.0 1 3.000 180.0 2 1.800 0.0 3
-torsion 4 3 3 4 1.600 0.0 1 3.200 180.0 2 0.000 0.0 3
-torsion 4 3 3 13 0.000 0.0 1 0.500 180.0 2 0.000 0.0 3
-torsion 4 3 3 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 3 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 4 3 3 36 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 13 3 3 13 0.700 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 13 3 3 35 -0.500 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 13 3 3 36 0.800 0.0 1 -0.760 180.0 2 0.000 0.0 3
-torsion 35 3 3 36 -0.900 0.0 1 0.300 180.0 2 0.000 0.0 3
-torsion 36 3 3 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-#torsion 36 3 3 36 0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 3 5 7 3.000 0.0 1 5.500 180.0 2 0.000 0.0 3
-torsion 4 3 5 7 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 13 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
-#torsion 13 3 5 7 3.200 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 35 3 5 7 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 36 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
-torsion 38 3 5 7 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 1 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 3 3 13 36 0.000 0.0 1 0.000 180.0 2 0.085 0.0 3
-torsion 4 3 13 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 4 3 13 13 0.000 0.0 1 1.166 180.0 2 0.000 0.0 3
-#torsion 4 3 13 13 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
-#torsion 4 3 13 13 -0.750 0.0 1 -0.550 180.0 2 -0.250 0.0 3
-#torsion 4 3 13 13 -0.277 0.0 1 1.228 180.0 2 -0.694 0.0 3
-#torsion 4 3 13 13 -1.000 0.0 1 -1.900 180.0 2 -0.900 0.0 3
-torsion 4 3 13 30 -0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 33 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 4 3 13 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 38 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
-torsion 5 3 13 13 0.000 0.0 1 1.412 180.0 2 0.000 0.0 3
-#torsion 5 3 13 13 1.000 0.0 1 0.546 180.0 2 0.450 0.0 3
-torsion 5 3 13 33 5.260 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 5 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 3 13 13 1.454 0.0 1 -0.144 180.0 2 -0.775 0.0 3
-torsion 13 3 13 36 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
-torsion 29 3 13 13 0.000 0.0 1 0.000 180.0 2 -0.553 0.0 3
-torsion 29 3 13 36 0.000 0.0 1 0.000 180.0 2 0.132 0.0 3
-torsion 30 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 35 3 13 13 1.173 0.0 1 0.189 180.0 2 -1.200 0.0 3
-#torsion 35 3 13 13 3.250 0.0 1 -0.402 180.0 2 -0.136 0.0 3
-#torsion 35 3 13 13 3.260 0.0 1 0.440 180.0 2 0.600 0.0 3
-torsion 35 3 13 30 0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 3 13 35 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
-torsion 35 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 38 3 13 36 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
-torsion 42 3 13 13 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 42 3 13 33 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 42 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 55 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 55 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 97 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 29 13 0.000 0.0 1 5.124 180.0 2 0.000 0.0 3
-#torsion 4 3 29 13 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 4 3 29 38 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 13 3 29 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
-torsion 13 3 29 38 1.500 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 35 3 29 13 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 36 3 29 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
-torsion 38 3 29 13 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 3 3 35 13 0.400 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 3 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 3 35 5 0.000 0.0 1 6.603 180.0 2 0.000 0.0 3
-torsion 4 3 35 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 3 35 37 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 3 35 38 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 3 35 81 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 5 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 5 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 13 3 35 5 4.542 0.0 1 6.603 180.0 2 1.045 0.0 3
-torsion 13 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 13 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 13 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 29 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 29 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 35 3 35 3 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 35 3 35 13 4.600 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 36 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 36 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 37 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 38 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 38 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 38 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 38 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 74 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 74 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 74 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 77 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 77 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 77 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 77 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 0 3 37 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
-torsion 4 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 37 37 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 5 3 37 37 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 35 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 3 37 37 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 97 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 97 3 37 37 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 5 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 13 3 38 38 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 29 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 35 3 38 38 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 36 3 38 38 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 0 3 40 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
-torsion 4 3 40 37 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 5 3 40 37 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 13 3 40 37 0.800 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 13 3 46 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 3 46 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 3 46 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 3 46 34 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 0 3 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
-torsion 4 3 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
-torsion 4 3 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 72 47 2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 4 3 72 51 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 72 3 72 47 -2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 72 3 72 51 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 4 3 74 29 -0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 4 3 74 77 0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 74 3 74 29 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 74 3 74 77 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 38 3 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 3 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 4 3 77 74 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 4 3 77 77 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 35 3 77 74 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 35 3 77 77 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 4 3 97 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 13 3 97 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 3 99 99 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 5 3 99 99 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 0 4 96 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 10 2 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
-torsion 7 5 10 6 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
-torsion 7 5 13 2 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
-torsion 7 5 13 6 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
-torsion 7 5 13 13 -0.356 0.0 1 -0.174 180.0 2 0.492 0.0 3
-#torsion 7 5 13 13 4.478 0.0 1 -2.175 180.0 2 0.000 0.0 3
-#torsion 7 5 13 13 2.674 0.0 1 -2.883 180.0 2 1.026 0.0 3
-torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.352 0.0 3
-#torsion 7 5 13 36 -2.589 0.0 1 -1.123 180.0 2 0.270 0.0 3
-#torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.476 0.0 3
-torsion 7 5 13 37 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 13 38 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 13 40 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 7 5 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 7 5 35 3 5.519 0.0 1 -6.700 180.0 2 0.581 0.0 3
-torsion 7 5 35 34 2.722 0.0 1 -5.154 180.0 2 0.000 0.0 3
-torsion 7 5 37 37 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
-torsion 7 5 38 38 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
-torsion 7 5 41 29 -1.257 0.0 1 -1.806 180.0 2 0.003 0.0 3
-torsion 7 5 46 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 7 5 54 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 54 5 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 69 13 -0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 69 32 0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 69 38 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 13 3 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
-torsion 0 13 13 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-#torsion 0 13 13 13 -1.336 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 13 35 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
-torsion 1 13 13 1 -2.500 0.0 1 0.000 180.0 2 0.250 0.0 3
-torsion 1 13 13 5 0.000 0.0 1 0.000 180.0 2 0.540 0.0 3
-torsion 1 13 13 13 0.300 0.0 1 -0.400 180.0 2 0.400 0.0 3
-torsion 1 13 13 36 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 3 13 13 3 -0.550 0.0 1 0.000 180.0 2 1.000 0.0 3
-#torsion 3 13 13 3 0.800 0.0 1 0.000 180.0 2 0.900 0.0 3
-torsion 3 13 13 5 -6.180 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 13 13 -2.060 0.0 1 -0.313 180.0 2 0.315 0.0 3
-#torsion 3 13 13 13 -3.185 0.0 1 -0.825 180.0 2 0.493 0.0 3
-#torsion 3 13 13 13 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 15 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
-torsion 3 13 13 16 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
-torsion 3 13 13 35 -9.000 0.0 1 2.000 180.0 2 0.800 0.0 3
-torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.100 0.0 3
-#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 0.074 0.0 3
-#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.076 0.0 3
-torsion 3 13 13 38 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 70 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 5 13 13 5 9.508 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 5 13 13 5 12.234 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 5 13 13 5 9.066 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 13 -1.552 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 29 4.319 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 33 8.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 35 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
-torsion 5 13 13 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 13 13 13 13 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
-#torsion 13 13 13 13 6.622 0. 1 0.948 180. 2 -1.388 0. 3 -2.118 180. 4
-torsion 13 13 13 15 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
-torsion 13 13 13 16 2.619 0.0 1 -0.620 180.0 2 0.258 0.0 3
-torsion 13 13 13 19 0.000 0.0 1 -0.650 180.0 2 0.000 0.0 3
-torsion 13 13 13 30 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 13 13 13 33 2.392 0.0 1 -0.674 180.0 2 0.550 0.0 3
-torsion 13 13 13 35 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-#torsion 13 13 13 35 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
-torsion 13 13 13 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-#the parameter was added because it did not exist.
-torsion 13 13 13 37 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-torsion 13 13 13 41 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
-torsion 13 13 13 43 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
-torsion 13 13 13 55 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 13 13 13 56 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 13 13 13 69 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
-torsion 13 13 13 97 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
-torsion 13 13 13 98 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 15 13 13 36 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
-torsion 16 13 13 36 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
-torsion 19 13 13 36 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
-torsion 29 13 13 29 -0.550 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 29 13 13 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 30 13 13 30 -0.250 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 13 13 33 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 13 13 36 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 33 13 13 33 11.035 0.0 1 -0.968 180.0 2 0.270 0.0 3
-torsion 33 13 13 36 -1.013 0.0 1 -0.709 180.0 2 0.473 0.0 3
-torsion 33 13 13 38 -0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 13 13 36 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
-torsion 35 13 13 38 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 35 13 13 70 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 36 13 13 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 13 37 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
-torsion 36 13 13 38 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 41 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 13 43 0.000 0.0 1 0.000 180.0 2 0.384 0.0 3
-torsion 36 13 13 45 0.000 0.0 1 0.000 180.0 2 -0.582 0.0 3
-torsion 36 13 13 49 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 52 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 55 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 36 13 13 56 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
-#torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 13 70 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 72 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 73 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 74 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 77 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 78 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 92 0.000 0.0 1 0.000 180.0 2 -0.225 0.0 3
-torsion 36 13 13 94 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 13 97 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
-torsion 36 13 13 98 0.000 0.0 1 0.000 180.0 2 0.450 0.0 3
-torsion 36 13 13 99 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
-torsion 38 13 13 43 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 98 13 13 98 5.200 0.0 1 -0.500 180.0 2 0.000 0.0 3
-torsion 13 13 15 17 -0.759 0.0 1 -0.282 180.0 2 0.680 0.0 3
-torsion 36 13 15 17 0.000 0.0 1 0.000 180.0 2 0.480 0.0 3
-torsion 13 13 16 13 0.925 0.0 1 -0.576 180.0 2 0.677 0.0 3
-torsion 13 13 16 16 1.941 0.0 1 -0.836 180.0 2 0.935 0.0 3
-torsion 36 13 16 13 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
-torsion 36 13 16 16 0.000 0.0 1 0.000 180.0 2 0.558 0.0 3
-torsion 36 13 16 38 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
-torsion 0 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 19 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 29 13 -0.521 0.0 1 -2.018 180.0 2 1.996 0.0 3
-torsion 46 13 29 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
-torsion 47 13 29 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
-torsion 13 13 29 3 -1.220 0.0 1 -0.126 180.0 2 0.422 0.0 3
-torsion 13 13 29 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
-torsion 13 13 29 54 -1.420 0.0 1 -0.620 180.0 2 0.100 0.0 3
-torsion 36 13 29 0 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 3 0.000 0.0 1 0.000 180.0 2 0.198 0.0 3
-torsion 36 13 29 37 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 38 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 41 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 54 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 13 33 13 0.416 0.0 1 -0.128 180.0 2 0.695 0.0 3
-#torsion 13 13 33 13 1.536 0.0 1 -0.128 180.0 2 0.695 0.0 3
-#torsion 13 13 33 13 1.464 0.0 1 -0.128 180.0 2 0.695 0.0 3
-torsion 13 13 33 34 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
-#torsion 13 13 33 34 0.000 0.0 1 4.000 180.0 2 0.000 0.0 3
-#torsion 13 13 33 34 0.200 0.0 1 -0.417 180.0 2 0.418 0.0 3
-#torsion 13 13 33 34 0.819 0.0 1 -0.417 180.0 2 0.418 0.0 3
-#torsion 13 13 33 34 1.522 0.0 1 -0.417 180.0 2 0.418 0.0 3
-torsion 36 13 33 13 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
-torsion 36 13 33 34 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 36 13 33 38 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
-torsion 0 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 35 3 -2.365 0.0 1 0.912 180.0 2 -0.850 0.0 3
-torsion 3 13 35 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
-torsion 3 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 35 3 0.000 0.0 1 0.462 180.0 2 0.000 0.0 3
-#torsion 13 13 35 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-#torsion 13 13 35 3 1.130 0.0 1 -1.420 180.0 2 0.440 0.0 3
-torsion 13 13 35 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
-#torsion 13 13 35 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
-torsion 13 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 35 49 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 35 69 2.929 0.0 1 -2.533 180.0 2 0.497 0.0 3
-torsion 13 13 35 81 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
-torsion 36 13 35 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 35 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 35 69 1.362 0.0 1 -1.457 180.0 2 0.149 0.0 3
-torsion 38 13 35 49 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 37 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-torsion 0 13 37 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 0 13 37 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 37 40 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 37 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 37 13 2.817 0.0 1 -0.169 180.0 2 0.543 0.0 3
-torsion 13 13 37 37 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 13 13 37 40 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 36 13 37 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 37 36 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
-torsion 36 13 37 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 37 40 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 37 100 0.000 0.0 1 0.000 180.0 2 -0.250 0.0 3
-torsion 37 13 37 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 37 13 37 36 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 0 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 38 38 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
-torsion 13 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 38 46 -0.500 0.0 1 0.500 180.0 2 -0.500 0.0 3
-torsion 30 13 38 38 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
-torsion 36 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 54 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 55 13 38 38 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 0 13 40 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 40 40 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 36 13 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 40 40 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 40 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 13 13 41 0 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-torsion 13 13 41 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 41 29 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 13 13 43 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
-torsion 13 13 43 34 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
-torsion 36 13 43 13 0.000 0.0 1 0.000 180.0 2 0.302 0.0 3
-torsion 36 13 43 34 0.000 0.0 1 0.000 180.0 2 0.261 0.0 3
-torsion 36 13 43 38 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 43 44 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 13 45 34 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
-torsion 13 13 45 38 1.829 0.0 1 0.243 180.0 2 -0.498 0.0 3
-torsion 13 13 45 44 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
-torsion 36 13 45 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 45 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 45 38 0.000 0.0 1 0.000 180.0 2 0.177 0.0 3
-torsion 13 13 46 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 47 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 47 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-#torsion 13 13 47 0 0.000 0.0 1 -0.576 180.0 2 0.000 0.0 3
-torsion 13 13 47 52 2.756 0.0 1 -0.872 180.0 2 -3.680 0.0 3
-#torsion 13 13 47 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 13 13 47 72 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 29 13 47 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-#torsion 29 13 47 0 0.000 0.0 1 -1.876 180.0 2 0.000 0.0 3
-torsion 29 13 47 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 29 13 47 72 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 13 13 49 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 49 46 0.000 0.0 1 0.500 180.0 2 -0.500 0.0 3
-torsion 36 13 49 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 52 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 52 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 54 29 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
-torsion 36 13 54 42 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
-torsion 38 13 54 29 2.250 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 38 13 54 42 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 69 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 69 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 69 5 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 69 13 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 69 32 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 69 38 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 13 13 70 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 70 50 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 70 74 -0.714 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 70 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 70 50 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 70 74 0.000 0.0 1 0.000 180.0 2 -0.480 0.0 3
-torsion 13 13 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 73 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 73 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 74 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
-torsion 13 13 74 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 74 47 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
-torsion 30 13 74 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
-torsion 36 13 74 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 77 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
-torsion 13 13 77 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 13 77 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
-torsion 36 13 77 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 78 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 78 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 81 81 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 13 85 13 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
-torsion 13 13 85 36 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
-torsion 13 13 92 93 0.000 0.0 1 0.400 180.0 2 0.000 0.0 3
-torsion 36 13 92 93 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 94 13 1.000 0.0 1 -0.500 180.0 2 0.500 0.0 3
-torsion 36 13 94 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 0 13 95 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 95 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 13 13 95 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 13 13 95 72 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 29 13 95 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 29 13 95 52 3.132 0.0 1 -1.491 180.0 2 2.744 0.0 3
-#torsion 29 13 95 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 29 13 95 72 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 3 13 97 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
-torsion 13 13 97 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-torsion 13 13 97 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
-#torsion 13 13 97 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
-torsion 36 13 97 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
-torsion 36 13 97 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 97 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 98 13 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 98 34 0.000 0.0 1 0.000 180.0 2 0.260 0.0 3
-torsion 36 13 98 13 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
-torsion 36 13 98 29 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 98 34 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
-torsion 13 13 99 99 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 36 13 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 99 36 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
-torsion 36 13 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 17 15 38 0 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-#torsion 17 15 38 0 -3.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 17 15 38 38 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 13 16 16 13 0.000 0.0 1 -7.414 180.0 2 1.705 0.0 3
-torsion 13 16 38 38 0.000 0.0 1 0.600 180.0 2 0.000 0.0 3
-torsion 13 16 38 46 1.600 0.0 1 5.100 180.0 2 0.000 0.0 3
-torsion 13 16 49 46 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
-torsion 74 16 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 74 16 72 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 16 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 16 74 73 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 16 74 78 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 16 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 18 38 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 18 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 18 18 46 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 18 18 46 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 19 19 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 99 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 19 19 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 19 19 99 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 19 37 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 19 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 19 37 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 29 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 29 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 29 37 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
-torsion 13 29 37 36 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 13 29 37 37 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 13 29 37 40 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 3 29 38 38 0.000 0.0 1 2.500 180.0 2 0.000 0.0 3
-torsion 13 29 38 38 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 13 29 38 46 0.400 0.0 1 5.500 180.0 2 0.000 0.0 3
-torsion 54 29 38 38 0.000 0.0 1 2.990 180.0 2 0.000 0.0 3
-torsion 13 29 41 5 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
-torsion 13 29 41 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
-torsion 13 29 41 29 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
-torsion 13 29 41 36 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 13 29 46 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 13 29 49 46 0.000 0.0 1 5.200 180.0 2 0.000 0.0 3
-torsion 0 29 54 42 0.000 0.0 1 0.000 180.0 2 0.562 0.0 3
-torsion 13 29 54 13 3.500 0.0 1 -3.300 180.0 2 1.500 0.0 3
-torsion 13 29 54 42 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 13 29 54 42 0.900 0.0 1 -2.930 180.0 2 2.640 0.0 3
-torsion 38 29 54 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 74 29 72 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 29 74 78 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 74 29 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 74 29 74 77 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 98 29 98 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 98 29 98 29 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 33 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 33 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 34 33 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 33 38 38 -7.582 0.0 1 3.431 180.0 2 3.198 0.0 3
-torsion 34 33 38 38 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 49 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 72 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 74 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 33 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 33 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 33 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 33 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 0 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 3 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 13 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 49 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 72 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 74 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 0 35 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 35 49 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 34 35 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 35 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 35 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 35 69 38 2.074 0.0 1 -2.966 180.0 2 2.473 0.0 3
-torsion 34 35 69 38 1.671 0.0 1 -4.901 180.0 2 0.669 0.0 3
-torsion 13 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 35 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-#torsion 34 35 72 16 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 34 35 72 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-#torsion 34 35 72 29 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 34 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 72 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 0 35 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 74 74 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 34 35 74 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 35 74 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 74 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 74 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 3 35 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 37 35 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 37 35 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 35 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 35 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 35 81 79 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-torsion 3 35 81 81 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-torsion 34 35 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 34 35 81 79 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 34 35 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 35 96 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 37 36 37 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 37 36 37 36 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 0 37 37 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 0 37 37 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 3 37 37 35 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 3 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 5 37 37 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 5 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 29 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 19 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 29 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 30 37 37 30 -1.600 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 30 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 37 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 38 38 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
-torsion 36 37 38 38 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 37 38 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 37 38 38 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 13 37 40 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 35 37 40 3 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 0 37 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 37 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 37 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 37 76 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 37 76 35 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 37 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 37 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 13 37 100 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 37 100 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 38 38 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 38 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 1 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 1 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 30 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 30 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 33 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 37 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 45 0.0 0. 1 1.62 180. 2 0.0 0. 3 -0.44 180. 4
-torsion 38 38 38 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 55 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 99 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 55 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 99 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 40 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 38 38 40 37 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 46 38 40 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 46 38 40 37 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 38 38 43 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 38 38 43 44 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 38 45 34 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 38 38 45 34 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
-torsion 45 38 45 13 0.000 0.0 1 7.936 180.0 2 0.000 0.0 3
-torsion 45 38 45 34 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
-torsion 50 38 45 34 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 0 38 46 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
-torsion 0 38 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 38 38 69 13 0.000 0.0 1 -0.900 180.0 2 0.000 0.0 3
-torsion 38 38 69 35 1.656 0.0 1 -0.768 180.0 2 -0.117 0.0 3
-torsion 38 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 76 46 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 76 46 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 78 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 91 13 0.000 0.0 1 3.651 180.0 2 0.000 0.0 3
-torsion 38 38 92 93 0.000 0.0 1 1.150 180.0 2 0.000 0.0 3
-torsion 38 38 99 13 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
-torsion 38 38 99 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 38 38 99 99 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 0 40 40 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 3 40 40 3 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 40 40 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 40 40 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 40 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-#torsion 13 40 40 37 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
-torsion 36 40 40 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 40 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 40 37 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
-torsion 13 40 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 40 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 40 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 40 99 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 40 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 99 13 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 99 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 99 99 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
-torsion 13 43 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 43 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 45 49 0 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 13 46 46 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 46 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 46 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 49 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 46 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-#torsion 0 46 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 38 46 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 46 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 47 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 34 47 50 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 0 47 51 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 47 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 47 71 0 0.000 0.0 1 3.050 180.0 2 0.000 0.0 3
-torsion 0 47 72 0 0.000 0.0 1 4.650 180.0 2 0.000 0.0 3
-#torsion 0 47 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 47 72 39 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 34 47 72 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 0 47 74 0 0.000 0.0 1 2.800 180.0 2 0.000 0.0 3
-#torsion 0 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-#torsion 0 47 74 0 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 34 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 51 47 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 74 47 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 50 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 50 51 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 50 70 0 0.000 0.0 1 3.350 180.0 2 0.000 0.0 3
-torsion 0 50 71 0 0.000 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 0 50 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 50 77 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 50 50 77 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 51 51 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-#torsion 0 51 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 72 39 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 73 51 72 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 78 51 72 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 78 51 72 29 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 51 73 0 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
-torsion 72 51 73 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 51 73 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 51 74 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 78 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 51 78 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 70 74 0 0.000 0.0 1 13.050 180.0 2 0.000 0.0 3
-torsion 0 72 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 16 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 29 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 47 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 51 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 72 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-#torsion 0 72 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 73 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 0 73 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 73 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 73 74 16 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 73 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 51 73 74 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 51 73 74 29 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 51 73 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 73 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 51 73 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 51 73 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 74 73 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 74 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 0 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 16 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 0 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 16 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 29 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 47 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 74 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 74 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 74 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 74 78 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 16 74 78 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 16 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 29 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 74 78 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 76 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 78 51 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 46 76 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 77 77 29 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 77 77 47 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 77 77 77 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 39 77 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 4 79 80 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 79 80 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 79 80 38 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 79 80 81 0.000 0.0 1 20.000 180.0 2 0.000 0.0 3
-torsion 81 79 80 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 81 79 80 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 81 79 80 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 81 79 80 81 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 0 79 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 79 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 79 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 80 79 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 80 79 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 80 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 80 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 80 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 81 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 81 81 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 81 81 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 81 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 81 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 81 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 81 81 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 99 99 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 38 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 38 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 38 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 40 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 40 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 99 99 99 99 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
-
-
- ################################################################
- ## ##
- ## Additional Torsional Parameter Values Used with OPLS-AA ##
- ## ##
- ## The torsions listed below were added to official OPLS-AA ##
- ## to complete the set needed for proteins; the values were ##
- ## obtained by analogy from the closest OPLS-AA torsions; ##
- ## most of the added values are for HIP or N-terminal AAs ##
- ## ##
- ################################################################
-
-
-torsion 35 3 13 43 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
-torsion 42 3 13 35 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 3 13 13 43 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 13 73 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 74 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 75 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 5 13 13 43 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
-torsion 15 13 13 43 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
-torsion 16 13 13 43 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
-torsion 13 13 13 45 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
-torsion 35 13 13 73 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 43 13 13 73 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 13 13 74 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 43 13 13 74 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 13 13 75 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 36 13 13 75 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 43 13 13 75 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 43 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
-torsion 3 13 43 44 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
-torsion 13 13 43 44 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
-torsion 36 13 45 44 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 75 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 75 47 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
-torsion 36 13 75 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 45 38 45 44 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
-torsion 0 38 71 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 47 75 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 0 75 75 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-
-
- ########################################
- ## ##
- ## Atomic Partial Charge Parameters ##
- ## ##
- ########################################
-
-
-charge 1 -0.2200
-charge 2 0.2200
-charge 3 0.5500
-charge 4 -0.5000
-charge 5 -0.5800
-charge 6 0.0800
-charge 7 0.4500
-charge 8 0.0000
-charge 9 0.0000
-charge 10 0.0000
-charge 11 0.0000
-charge 12 0.0000
-charge 13 0.0000
-charge 14 0.0000
-charge 15 0.0000
-charge 16 0.0000
-charge 17 0.0000
-charge 18 0.0000
-charge 19 0.0000
-charge 20 -0.7000
-charge 21 0.4350
-charge 22 0.2650
-charge 23 0.2650
-charge 24 -0.4700
-charge 25 -0.4500
-charge 26 -0.4700
-charge 27 -0.3000
-charge 28 0.2350
-charge 29 0.2700
-charge 30 0.1800
-charge 31 0.1800
-charge 32 0.2350
-charge 33 0.2350
-charge 34 0.3000
-charge 35 0.3000
-charge 36 -0.4300
-charge 37 0.2800
-charge 38 0.1500
-charge 39 0.0000
-charge 40 0.2410
-charge 41 -0.2410
-charge 42 0.0000
-charge 43 0.0000
-charge 44 0.0000
-charge 45 0.0000
-charge 46 0.0000
-charge 47 0.0000
-charge 48 0.2650
-charge 49 0.2650
-charge 50 -0.5000
-charge 51 0.2500
-charge 52 0.2500
-charge 53 -0.8340
-charge 54 0.4170
-charge 55 0.0000
-charge 56 0.5200
-charge 57 -1.0400
-charge 58 -0.8220
-charge 59 0.4110
-charge 60 0.5000
-charge 61 -0.2500
-charge 62 0.4200
-charge 63 -0.1400
-charge 64 0.2480
-charge 65 -0.0620
-charge 66 0.1390
-charge 67 -0.4590
-charge 68 0.1600
-charge 69 -1.0200
-charge 70 0.3400
-charge 71 -0.5000
-charge 72 -0.5700
-charge 73 0.5000
-charge 74 0.2850
-charge 75 -0.8200
-charge 76 0.4100
-charge 77 -0.1800
-charge 78 -0.1200
-charge 79 -0.0600
-charge 80 -0.2400
-charge 81 0.0000
-charge 82 0.0600
-charge 83 0.0000
-charge 84 -0.1150
-charge 85 -0.2300
-charge 86 0.1150
-charge 87 -0.1150
-charge 88 0.1150
-charge 89 0.0000
-charge 90 -0.0650
-charge 91 -0.0050
-charge 92 -0.1150
-charge 93 -0.6830
-charge 94 0.4180
-charge 95 0.0400
-charge 96 0.1450
-charge 97 0.2050
-charge 98 0.2650
-charge 99 0.1263
-charge 100 0.5323
-charge 101 -0.6351
-charge 102 0.4286
-charge 103 -0.2057
-charge 104 0.0825
-charge 105 0.1500
-charge 106 -0.5850
-charge 107 0.4350
-charge 108 -0.7000
-charge 109 0.4350
-charge 110 -0.7300
-charge 111 0.4650
-charge 112 0.1450
-charge 113 0.2050
-charge 114 0.2650
-charge 115 0.0600
-charge 116 -0.1700
-charge 117 0.0000
-charge 118 -0.2850
-charge 119 -0.4000
-charge 120 0.1100
-charge 121 0.1400
-charge 122 0.1700
-charge 123 0.2000
-charge 124 0.0300
-charge 125 -0.4000
-charge 126 -0.7000
-charge 127 0.4350
-charge 128 0.2000
-charge 129 0.1000
-charge 130 0.2650
-charge 131 0.1000
-charge 132 0.3000
-charge 133 0.1000
-charge 134 0.3650
-charge 135 0.1000
-charge 136 0.4000
-charge 137 0.4650
-charge 138 0.0850
-charge 139 -0.3350
-charge 140 -0.4700
-charge 141 -0.4350
-charge 142 -0.2175
-charge 143 0.1550
-charge 144 0.2350
-charge 145 0.0600
-charge 146 0.1200
-charge 147 0.1800
-charge 148 0.0375
-charge 149 0.0975
-charge 150 0.1575
-charge 151 0.2175
-charge 152 0.0375
-charge 153 0.0975
-charge 154 0.1575
-charge 155 0.2175
-charge 156 0.0000
-charge 157 0.2000
-charge 158 0.2600
-charge 159 0.3200
-charge 160 -0.0550
-charge 161 -0.3200
-charge 162 0.0800
-charge 163 0.1400
-charge 164 0.2000
-charge 165 -0.1200
-charge 166 0.0050
-charge 167 0.1025
-charge 168 0.1400
-charge 169 0.2000
-charge 170 0.7000
-charge 171 0.5650
-charge 172 0.5850
-charge 173 0.6150
-charge 174 0.5000
-charge 175 -0.5000
-charge 176 -0.7600
-charge 177 -0.5000
-charge 178 -0.1400
-charge 179 0.3800
-charge 180 0.3000
-charge 181 0.0200
-charge 182 -0.1100
-charge 183 0.0800
-charge 184 -0.0500
-charge 185 0.0100
-charge 186 0.1420
-charge 187 -0.3900
-charge 188 -0.5420
-charge 189 0.3330
-charge 190 -0.4900
-charge 191 0.4200
-charge 192 -0.4200
-charge 193 0.3700
-charge 194 0.0600
-charge 195 -0.1200
-charge 196 -0.0600
-charge 197 0.0000
-charge 198 0.0600
-charge 199 0.0350
-charge 200 0.3950
-charge 201 -0.4300
-charge 202 0.1800
-charge 203 -0.1800
-charge 204 -0.3850
-charge 205 0.0850
-charge 206 0.5200
-charge 207 -0.5300
-charge 208 -0.4400
-charge 209 0.4500
-charge 210 0.7000
-charge 211 -0.8000
-charge 212 -0.2800
-charge 213 -0.2200
-charge 214 -0.1600
-charge 215 -0.1000
-charge 216 0.4500
-charge 217 -0.4500
-charge 218 0.0000
-charge 219 0.4700
-charge 220 -0.4700
-charge 221 0.0600
-charge 222 0.0400
-charge 223 -0.0200
-charge 224 0.1000
-charge 225 -0.0900
-charge 226 -0.4000
-charge 227 -0.3000
-charge 228 0.0000
-charge 229 0.3500
-charge 230 0.3300
-charge 231 0.1300
-charge 232 0.1900
-charge 233 0.2500
-charge 234 0.3100
-charge 235 0.2300
-charge 236 0.1700
-charge 237 0.1100
-charge 238 0.0900
-charge 239 0.1500
-charge 240 -0.8000
-charge 241 0.4600
-charge 242 0.6400
-charge 243 -0.7000
-charge 244 0.4400
-charge 245 0.2000
-charge 246 -0.1100
-charge 247 0.1900
-charge 248 -0.0500
-charge 249 -0.2000
-charge 250 0.3100
-charge 251 -0.4600
-charge 252 0.3600
-charge 253 -0.8500
-charge 254 0.3700
-charge 255 -0.1500
-charge 256 0.1000
-charge 257 -0.0400
-charge 258 0.1000
-charge 259 -0.6000
-charge 260 0.5000
-charge 261 -0.5100
-charge 262 0.4500
-charge 263 -0.0700
-charge 264 0.0800
-charge 265 0.4100
-charge 266 -0.4000
-charge 267 0.3600
-charge 268 -0.4200
-charge 269 0.1000
-charge 270 0.1000
-charge 271 -0.1400
-charge 272 0.0800
-charge 273 -0.5600
-charge 274 0.5500
-charge 275 -0.5400
-charge 276 0.4600
-charge 277 -0.0600
-charge 278 0.1000
-charge 279 0.3800
-charge 280 -0.4800
-charge 281 -0.7900
-charge 282 0.3850
-charge 283 0.3550
-charge 284 0.1000
-charge 285 0.1000
-charge 286 -0.5300
-charge 287 0.2200
-charge 288 -0.5500
-charge 289 0.3800
-charge 290 0.1500
-charge 291 0.4400
-charge 292 -0.4900
-charge 293 0.2000
-charge 294 -0.5000
-charge 295 0.2000
-charge 296 -0.8100
-charge 297 0.3850
-charge 298 0.3550
-charge 299 0.2000
-charge 300 0.3500
-charge 301 -0.5600
-charge 302 0.4600
-charge 303 -0.5100
-charge 304 0.3400
-charge 305 0.1200
-charge 306 0.5200
-charge 307 0.3800
-charge 308 -0.8000
-charge 309 0.4000
-charge 310 -0.5100
-charge 311 -0.0100
-charge 312 0.1200
-charge 313 -0.0100
-charge 314 0.1400
-charge 315 -0.0100
-charge 316 0.1300
-charge 317 -0.6400
-charge 318 0.6500
-charge 319 -0.7400
-charge 320 0.6600
-charge 321 -0.0600
-charge 322 0.1000
-charge 323 0.4900
-charge 324 -0.3000
-charge 325 0.4800
-charge 326 -0.8100
-charge 327 0.4600
-charge 328 0.4300
-charge 329 0.1400
-charge 330 0.1400
-charge 331 0.0100
-charge 332 0.1600
-charge 333 0.7800
-charge 334 -0.6600
-charge 335 -0.4300
-charge 336 0.2000
-charge 337 0.1800
-charge 338 -0.0600
-charge 339 0.1200
-charge 340 -1.0000
-charge 341 -1.0000
-charge 342 -1.0000
-charge 343 -1.0000
-charge 344 1.0000
-charge 345 1.0000
-charge 346 1.0000
-charge 347 1.0000
-charge 348 1.0000
-charge 349 1.0000
-charge 350 2.0000
-charge 351 2.0000
-charge 352 2.0000
-charge 353 2.0000
-charge 354 -0.4000
-charge 355 0.1000
-charge 356 -0.9000
-charge 357 -0.2000
-charge 358 0.0600
-charge 359 -0.9800
-charge 360 -1.0700
-charge 361 0.1900
-charge 362 0.5100
-charge 363 -0.8200
-charge 364 -0.3000
-charge 365 0.0700
-charge 366 -1.3100
-charge 367 0.4000
-charge 368 -0.4000
-charge 369 0.0800
-charge 370 0.0000
-charge 371 0.0700
-charge 372 -0.9800
-charge 373 -1.3000
-charge 374 0.3000
-charge 375 2.5000
-charge 376 -0.2500
-charge 377 -0.8650
-charge 378 1.6200
-charge 379 -0.9200
-charge 380 -0.6000
-charge 381 0.3000
-charge 382 -0.0300
-charge 383 1.9200
-charge 384 -1.1200
-charge 385 -0.7000
-charge 386 0.4400
-charge 387 -0.1000
-charge 388 1.6200
-charge 389 -0.9700
-charge 390 -0.6300
-charge 391 0.2800
-charge 392 -0.0200
-charge 393 -0.5100
-charge 394 0.0800
-charge 395 -0.1400
-charge 396 0.3200
-charge 397 0.0200
-charge 398 -0.0400
-charge 399 -0.4700
-charge 400 0.1200
-charge 401 0.1400
-charge 402 0.2400
-charge 403 0.5100
-charge 404 -0.4300
-charge 405 -0.3300
-charge 406 0.1600
-charge 407 0.0300
-charge 408 0.6350
-charge 409 0.6250
-charge 410 0.1350
-charge 411 -0.2150
-charge 412 1.4800
-charge 413 -0.6800
-charge 414 -0.5400
-charge 415 0.1800
-charge 416 -1.0000
-charge 417 0.4400
-charge 418 -0.8000
-charge 419 0.4100
-charge 420 0.1800
-charge 421 0.0300
-charge 422 0.3900
-charge 423 -0.0600
-charge 424 -0.1800
-charge 425 0.0600
-charge 426 0.0000
-charge 427 0.0300
-charge 428 0.1900
-charge 429 0.2200
-charge 430 0.2500
-charge 431 1.3740
-charge 432 -0.6870
-charge 433 0.2450
-charge 434 0.1300
-charge 435 -0.4200
-charge 436 -0.0350
-charge 437 0.0250
-charge 438 0.0750
-charge 439 -0.0550
-charge 440 0.1300
-charge 441 -0.5700
-charge 442 0.4200
-charge 443 -0.0050
-charge 444 0.2950
-charge 445 -0.0150
-charge 446 0.0150
-charge 447 0.3850
-charge 448 0.2150
-charge 449 -0.4900
-charge 450 -0.5400
-charge 451 0.4600
-charge 452 -0.1150
-charge 453 0.0550
-charge 454 0.1150
-charge 455 -0.0300
-charge 456 0.0850
-charge 457 0.0000
-charge 458 -0.6780
-charge 459 0.4730
-charge 460 -0.4470
-charge 461 0.2270
-charge 462 0.0120
-charge 463 0.1550
-charge 464 0.0650
-charge 465 -0.4680
-charge 466 0.1920
-charge 467 0.0420
-charge 468 -0.8390
-charge 469 0.8740
-charge 470 0.6530
-charge 471 -0.6890
-charge 472 -0.0320
-charge 473 0.0110
-charge 474 0.1970
-charge 475 -0.3310
-charge 476 0.3780
-charge 477 -0.1600
-charge 478 -0.0090
-charge 479 0.1220
-charge 480 -0.2390
-charge 481 -0.1630
-charge 482 -0.1490
-charge 483 0.3170
-charge 484 0.1550
-charge 485 0.1180
-charge 486 -0.0590
-charge 487 -0.4910
-charge 488 0.2460
-charge 489 -0.3200
-charge 490 -0.0340
-charge 491 0.3010
-charge 492 0.0720
-charge 493 0.1500
-charge 494 0.1350
-charge 495 -0.2570
-charge 496 0.2750
-charge 497 -0.5630
-charge 498 0.1850
-charge 499 -0.2860
-charge 500 0.3060
-charge 501 0.0780
-charge 502 0.0750
-charge 503 0.1870
-charge 504 -0.1900
-charge 505 -0.0190
-charge 506 -0.1540
-charge 507 0.1420
-charge 508 0.1260
-charge 509 -0.2570
-charge 510 0.5110
-charge 511 -0.5900
-charge 512 0.1690
-charge 513 -0.1480
-charge 514 0.0430
-charge 515 0.0910
-charge 516 0.1810
-charge 517 -0.1220
-charge 518 -0.4130
-charge 519 0.4050
-charge 520 -0.4550
-charge 521 0.2500
-charge 522 0.0530
-charge 523 0.1840
-charge 524 0.0980
-charge 525 -0.5000
-charge 526 0.0010
-charge 527 -0.3900
-charge 528 -0.2700
-charge 529 -0.1270
-charge 530 -0.1080
-charge 531 -0.2580
-charge 532 0.2200
-charge 533 0.2250
-charge 534 0.3760
-charge 535 0.1470
-charge 536 0.1720
-charge 537 0.1550
-charge 538 0.1070
-charge 539 0.1100
-charge 540 0.1400
-charge 541 -0.6940
-charge 542 0.4250
-charge 543 -0.3590
-charge 544 -0.0080
-charge 545 -0.1970
-charge 546 -0.1120
-charge 547 -0.0700
-charge 548 -0.3070
-charge 549 0.5630
-charge 550 -0.0510
-charge 551 0.0280
-charge 552 0.1460
-charge 553 0.1190
-charge 554 0.1330
-charge 555 0.1130
-charge 556 0.1140
-charge 557 0.1570
-charge 558 -0.7600
-charge 559 0.6790
-charge 560 -0.7880
-charge 561 0.7360
-charge 562 0.0380
-charge 563 0.3430
-charge 564 -0.6420
-charge 565 0.4520
-charge 566 -0.6820
-charge 567 0.0240
-charge 568 0.1010
-charge 569 0.0860
-charge 570 0.4130
-charge 571 -0.0300
-charge 572 0.2420
-charge 573 -0.5150
-charge 574 0.2280
-charge 575 -0.2990
-charge 576 0.1010
-charge 577 0.0680
-charge 578 0.2050
-charge 579 -0.9510
-charge 580 0.9650
-charge 581 -0.0140
-charge 582 0.1300
-charge 583 0.0520
-charge 584 -0.5990
-charge 585 0.3920
-charge 586 -0.3480
-charge 587 0.0200
-charge 588 -0.0420
-charge 589 0.3470
-charge 590 -0.1960
-charge 591 0.0320
-charge 592 0.1460
-charge 593 0.1080
-charge 594 0.1400
-charge 595 0.1220
-charge 596 0.1660
-charge 597 -0.5800
-charge 598 0.1730
-charge 599 -0.3950
-charge 600 -0.1990
-charge 601 0.1180
-charge 602 0.0930
-charge 603 0.2080
-charge 604 0.0980
-charge 605 -0.1390
-charge 606 -0.0790
-charge 607 0.0990
-charge 608 -0.1680
-charge 609 -0.1080
-charge 610 -0.1890
-charge 611 -0.1290
-charge 612 -0.1690
-charge 613 -0.1090
-charge 614 -0.1380
-charge 615 -0.0780
-charge 616 -0.0250
-charge 617 0.0350
-charge 618 -0.0380
-charge 619 0.0220
-charge 620 -0.3340
-charge 621 0.2550
-charge 622 0.5230
-charge 623 0.5000
-charge 624 -0.1400
-charge 625 0.2275
-charge 626 0.1400
-charge 627 -0.0080
-charge 628 0.5880
-charge 629 -0.1030
-charge 630 -0.3320
-charge 631 0.0400
-charge 632 0.3420
-charge 633 -0.0500
-charge 634 -0.2050
-charge 635 3.0000
-charge 636 4.0000
-charge 637 3.0000
-charge 638 0.6190
-charge 639 -0.3950
-charge 640 0.1740
-charge 641 3.0000
-charge 642 3.0000
-charge 643 3.0000
-charge 644 3.0000
-charge 645 3.0000
-charge 646 -0.3440
-charge 647 -0.6280
-charge 648 0.2000
-charge 649 -0.1200
-charge 650 -0.0600
-charge 651 0.0000
-charge 652 -0.2300
-charge 653 0.0300
-charge 654 -0.0990
-charge 655 0.0990
-charge 656 0.2200
-charge 657 -0.2200
-charge 658 0.1300
-charge 659 -0.1300
-charge 660 -0.2200
-charge 661 0.2200
-charge 662 0.1500
-charge 663 0.4500
-charge 664 -0.2000
-charge 665 0.2000
-charge 666 -0.2000
-charge 667 0.2000
-charge 668 -0.2000
-charge 669 0.1000
-charge 670 -0.1000
-charge 671 0.0550
-charge 672 -0.2200
-charge 673 0.0650
-charge 674 0.0130
-charge 675 -0.1060
-charge 676 -0.0900
-charge 677 -0.1190
-charge 678 0.1410
-charge 679 0.1290
-charge 680 0.8270
-charge 681 -0.8850
-charge 682 0.4260
-charge 683 0.4650
-charge 684 0.1190
-charge 685 -0.0200
-charge 686 0.0400
-charge 687 -0.6200
-charge 688 -0.7850
-charge 689 -0.7850
-charge 690 0.5500
-charge 691 -0.5600
-charge 692 0.4600
-charge 693 -0.0800
-charge 694 -0.0200
-charge 695 0.0400
-charge 696 0.1000
-charge 697 0.0600
-charge 698 0.5400
-charge 699 -0.3700
-charge 700 0.0200
-charge 701 0.0600
-charge 702 0.0800
-charge 703 0.1400
-charge 704 0.2000
-charge 705 0.6500
-charge 706 0.0900
-charge 707 0.0350
-charge 708 -0.9000
-charge 709 -0.5000
-charge 710 0.8600
-charge 711 -0.4500
-charge 712 0.2100
-charge 713 0.1600
-charge 714 -0.1000
-charge 715 0.0300
-charge 716 0.0300
-charge 717 0.0600
-charge 718 -0.7800
-charge 719 0.9684
-charge 720 -0.5081
-charge 721 -0.0080
-charge 722 0.1720
-charge 723 1.3400
-charge 724 -0.3900
-charge 725 0.7940
-charge 726 -0.5980
-charge 727 0.0000
-charge 728 0.5110
-charge 729 -1.0220
-charge 730 -0.9000
-charge 731 -0.7800
-charge 732 -0.6300
-charge 733 0.0000
-charge 734 0.0200
-charge 735 0.0300
-charge 736 0.0600
-charge 737 0.0800
-charge 738 0.0900
-charge 739 0.3600
-charge 740 0.3800
-charge 741 0.0600
-charge 742 0.1200
-charge 743 0.1800
-charge 744 0.1400
-charge 745 0.1500
-charge 746 0.1800
-charge 747 0.2000
-charge 748 0.2100
-charge 749 0.1150
-charge 750 0.1750
-charge 751 0.2350
-charge 752 0.1950
-charge 753 0.1525
-charge 754 0.1350
-charge 755 -0.2100
-charge 756 0.2000
-charge 757 0.0100
-charge 758 0.0100
-charge 759 0.0100
-charge 760 0.0600
-charge 761 0.4500
-charge 762 0.4800
-charge 763 0.5100
-charge 764 -0.6550
-charge 765 0.3900
-charge 766 -0.5000
-charge 767 -0.5600
-charge 768 -0.6000
-charge 769 0.0000
-charge 770 -0.1000
-charge 771 0.2900
-charge 772 0.0900
-charge 773 0.1500
-charge 774 0.2100
-charge 775 0.2700
-charge 776 0.0960
-charge 777 -0.0390
-charge 778 0.0270
-charge 779 0.0110
-charge 780 0.0740
-charge 781 -0.0290
-charge 782 0.7000
-charge 783 -0.3520
-charge 784 -0.7090
-charge 785 0.3170
-charge 786 -0.2200
-charge 787 0.0200
-charge 788 0.1000
-charge 789 0.1200
-charge 790 0.2200
-charge 791 0.3600
-charge 792 0.2400
-charge 793 0.1200
-charge 794 0.4800
-charge 795 -0.1200
-charge 796 0.2500
-charge 797 0.1500
-charge 798 -0.0800
-charge 799 -0.1060
-charge 800 -0.2000
-charge 801 -0.0060
-charge 802 0.1030
-charge 803 0.0970
-charge 804 0.2000
-charge 805 -0.2000
-charge 806 -0.0060
-charge 807 0.1030
-charge 808 0.0970
-charge 809 0.2000
-charge 810 -0.0800
-charge 811 -0.0800
-charge 812 -0.0800
-charge 813 0.1000
-charge 814 -0.2500
-charge 815 0.6000
-charge 816 -0.1500
-charge 817 -0.0250
-charge 818 -0.0450
-charge 819 0.1450
-charge 820 0.8880
-charge 821 1.0030
-charge 822 -0.6580
-charge 823 -0.6340
-charge 824 0.4110
-charge 825 -0.4420
-charge 826 0.4350
-charge 827 0.2250
-charge 828 0.2550
-charge 829 -0.0340
-charge 830 0.0030
-charge 831 0.3000
-charge 832 -0.0400
-charge 833 -0.0575
-charge 834 2.0000
-charge 835 -0.0700
-charge 836 0.0300
-charge 837 0.1300
-charge 838 -0.1300
-charge 839 0.1000
-charge 840 -0.6850
-charge 841 0.1550
-charge 842 -0.1000
-charge 843 -0.4270
-charge 844 0.2180
-charge 845 0.6000
-charge 846 -0.6000
-charge 847 -0.3600
-charge 848 0.0000
-charge 849 0.0600
-charge 850 0.1200
-charge 851 0.1800
-charge 852 0.0600
-charge 853 0.5700
-charge 854 -0.5700
-charge 855 0.0000
-charge 856 0.0200
-charge 857 -0.0400
-charge 858 0.0000
-charge 859 0.0600
-charge 860 -0.0700
-charge 861 -0.1400
-charge 862 0.1700
-charge 863 0.1100
-charge 864 0.1500
-charge 865 0.1700
-charge 866 1.0000
-charge 867 0.8500
-charge 868 0.7000
-charge 869 0.5500
-charge 870 -0.1000
-charge 871 -0.4300
-charge 872 -0.3700
-charge 873 -0.3100
-charge 874 -0.2500
-charge 875 -1.0000
-charge 876 -1.0000
-charge 877 -1.0000
-charge 878 -1.0000
-charge 879 1.0000
-charge 880 1.0000
-charge 881 1.0000
-charge 882 1.0000
-charge 883 1.0000
-charge 884 2.0000
-charge 885 2.0000
-charge 886 2.0000
-charge 887 2.0000
-charge 888 -0.0500
-charge 889 0.0500
-charge 890 0.1500
-charge 891 0.2500
-charge 892 0.1000
-charge 893 0.1150
-charge 894 0.1350
-charge 895 0.0150
-charge 896 0.1550
-charge 897 0.0000
-charge 898 -0.1150
-charge 899 0.1500
-charge 900 -0.2500
-charge 901 -0.1000
-charge 902 0.0500
-charge 903 -0.1000
-charge 904 0.2000
-charge 905 -0.2500
-charge 906 0.0880
-
-
- ########################################
- ## ##
- ## Biopolymer Atom Type Conversions ##
- ## ##
- ########################################
-
-
-biotype 1 N "Glycine" 177
-biotype 2 CA "Glycine" 162
-biotype 3 C "Glycine" 174
-biotype 4 HN "Glycine" 180
-biotype 5 O "Glycine" 175
-biotype 6 HA "Glycine" 82
-biotype 7 N "Alanine" 177
-biotype 8 CA "Alanine" 163
-biotype 9 C "Alanine" 174
-biotype 10 HN "Alanine" 180
-biotype 11 O "Alanine" 175
-biotype 12 HA "Alanine" 82
-biotype 13 CB "Alanine" 77
-biotype 14 HB "Alanine" 82
-biotype 15 N "Valine" 177
-biotype 16 CA "Valine" 163
-biotype 17 C "Valine" 174
-biotype 18 HN "Valine" 180
-biotype 19 O "Valine" 175
-biotype 20 HA "Valine" 82
-biotype 21 CB "Valine" 79
-biotype 22 HB "Valine" 82
-biotype 23 CG1 "Valine" 77
-biotype 24 HG1 "Valine" 82
-biotype 25 CG2 "Valine" 77
-biotype 26 HG2 "Valine" 82
-biotype 27 N "Leucine" 177
-biotype 28 CA "Leucine" 163
-biotype 29 C "Leucine" 174
-biotype 30 HN "Leucine" 180
-biotype 31 O "Leucine" 175
-biotype 32 HA "Leucine" 82
-biotype 33 CB "Leucine" 78
-biotype 34 HB "Leucine" 82
-biotype 35 CG "Leucine" 79
-biotype 36 HG "Leucine" 82
-biotype 37 CD1 "Leucine" 77
-biotype 38 HD1 "Leucine" 82
-biotype 39 CD2 "Leucine" 77
-biotype 40 HD2 "Leucine" 82
-biotype 41 N "Isoleucine" 177
-biotype 42 CA "Isoleucine" 163
-biotype 43 C "Isoleucine" 174
-biotype 44 HN "Isoleucine" 180
-biotype 45 O "Isoleucine" 175
-biotype 46 HA "Isoleucine" 82
-biotype 47 CB "Isoleucine" 79
-biotype 48 HB "Isoleucine" 82
-biotype 49 CG1 "Isoleucine" 77
-biotype 50 HG1 "Isoleucine" 82
-biotype 51 CG2 "Isoleucine" 78
-biotype 52 HG2 "Isoleucine" 82
-biotype 53 CD "Isoleucine" 77
-biotype 54 HD "Isoleucine" 82
-biotype 55 N "Serine" 177
-biotype 56 CA "Serine" 163
-biotype 57 C "Serine" 174
-biotype 58 HN "Serine" 180
-biotype 59 O "Serine" 175
-biotype 60 HA "Serine" 82
-biotype 61 CB "Serine" 96
-biotype 62 HB "Serine" 82
-biotype 63 OG "Serine" 93
-biotype 64 HG "Serine" 94
-biotype 65 N "Threonine" 177
-biotype 66 CA "Threonine" 163
-biotype 67 C "Threonine" 174
-biotype 68 HN "Threonine" 180
-biotype 69 O "Threonine" 175
-biotype 70 HA "Threonine" 82
-biotype 71 CB "Threonine" 97
-biotype 72 HB "Threonine" 82
-biotype 73 OG1 "Threonine" 93
-biotype 74 HG1 "Threonine" 94
-biotype 75 CG2 "Threonine" 77
-biotype 76 HG2 "Threonine" 82
-biotype 77 N "Cysteine (SH)" 177
-biotype 78 CA "Cysteine (SH)" 163
-biotype 79 C "Cysteine (SH)" 174
-biotype 80 HN "Cysteine (SH)" 180
-biotype 81 O "Cysteine (SH)" 175
-biotype 82 HA "Cysteine (SH)" 82
-biotype 83 CB "Cysteine (SH)" 145
-biotype 84 HB "Cysteine (SH)" 82
-biotype 85 SG "Cysteine (SH)" 139
-biotype 86 HG "Cysteine (SH)" 143
-biotype 87 N "Cystine (SS)" 177
-biotype 88 CA "Cystine (SS)" 163
-biotype 89 C "Cystine (SS)" 174
-biotype 90 HN "Cystine (SS)" 180
-biotype 91 O "Cystine (SS)" 175
-biotype 92 HA "Cystine (SS)" 82
-biotype 93 CB "Cystine (SS)" 153
-biotype 94 HB "Cystine (SS)" 82
-biotype 95 SG "Cystine (SS)" 142
-biotype 96 N "Cysteine (S-)" -1
-biotype 97 CA "Cysteine (S-)" -1
-biotype 98 C "Cysteine (S-)" -1
-biotype 99 HN "Cysteine (S-)" -1
-biotype 100 O "Cysteine (S-)" -1
-biotype 101 HA "Cysteine (S-)" -1
-biotype 102 CB "Cysteine (S-)" -1
-biotype 103 HB "Cysteine (S-)" -1
-biotype 104 SG "Cysteine (S-)" -1
-biotype 105 N "Proline" 178
-biotype 106 CA "Proline" 185
-biotype 107 C "Proline" 174
-biotype 108 O "Proline" 175
-biotype 109 HA "Proline" 82
-biotype 110 CB "Proline" 78
-biotype 111 HB "Proline" 82
-biotype 112 CG "Proline" 78
-biotype 113 HG "Proline" 82
-biotype 114 CD "Proline" 184
-biotype 115 HD "Proline" 82
-biotype 116 N "Phenylalanine" 177
-biotype 117 CA "Phenylalanine" 163
-biotype 118 C "Phenylalanine" 174
-biotype 119 HN "Phenylalanine" 180
-biotype 120 O "Phenylalanine" 175
-biotype 121 HA "Phenylalanine" 82
-biotype 122 CB "Phenylalanine" 91
-biotype 123 HB "Phenylalanine" 82
-biotype 124 CG "Phenylalanine" 87
-biotype 125 CD "Phenylalanine" 87
-biotype 126 HD "Phenylalanine" 88
-biotype 127 CE "Phenylalanine" 87
-biotype 128 HE "Phenylalanine" 88
-biotype 129 CZ "Phenylalanine" 87
-biotype 130 HZ "Phenylalanine" 88
-biotype 131 N "Tyrosine" 177
-biotype 132 CA "Tyrosine" 163
-biotype 133 C "Tyrosine" 174
-biotype 134 HN "Tyrosine" 180
-biotype 135 O "Tyrosine" 175
-biotype 136 HA "Tyrosine" 82
-biotype 137 CB "Tyrosine" 91
-biotype 138 HB "Tyrosine" 82
-biotype 139 CG "Tyrosine" 87
-biotype 140 CD "Tyrosine" 87
-biotype 141 HD "Tyrosine" 88
-biotype 142 CE "Tyrosine" 87
-biotype 143 HE "Tyrosine" 88
-biotype 144 CZ "Tyrosine" 105
-biotype 145 OH "Tyrosine" 106
-biotype 146 HH "Tyrosine" 107
-biotype 147 N "Tyrosine (O-)" -1
-biotype 148 CA "Tyrosine (O-)" -1
-biotype 149 C "Tyrosine (O-)" -1
-biotype 150 HN "Tyrosine (O-)" -1
-biotype 151 O "Tyrosine (O-)" -1
-biotype 152 HA "Tyrosine (O-)" -1
-biotype 153 CB "Tyrosine (O-)" -1
-biotype 154 HB "Tyrosine (O-)" -1
-biotype 155 CG "Tyrosine (O-)" -1
-biotype 156 CD "Tyrosine (O-)" -1
-biotype 157 HD "Tyrosine (O-)" -1
-biotype 158 CE "Tyrosine (O-)" -1
-biotype 159 HE "Tyrosine (O-)" -1
-biotype 160 CZ "Tyrosine (O-)" -1
-biotype 161 OH "Tyrosine (O-)" -1
-biotype 162 N "Tryptophan" 177
-biotype 163 CA "Tryptophan" 163
-biotype 164 C "Tryptophan" 174
-biotype 165 HN "Tryptophan" 180
-biotype 166 O "Tryptophan" 175
-biotype 167 HA "Tryptophan" 82
-biotype 168 CB "Tryptophan" 78
-biotype 169 HB "Tryptophan" 82
-biotype 170 CG "Tryptophan" 438
-biotype 171 CD1 "Tryptophan" 452
-biotype 172 HD1 "Tryptophan" 88
-biotype 173 CD2 "Tryptophan" 439
-biotype 174 NE1 "Tryptophan" 441
-biotype 175 HE1 "Tryptophan" 442
-biotype 176 CE2 "Tryptophan" 440
-biotype 177 CE3 "Tryptophan" 87
-biotype 178 HE3 "Tryptophan" 88
-biotype 179 CZ2 "Tryptophan" 87
-biotype 180 HZ2 "Tryptophan" 88
-biotype 181 CZ3 "Tryptophan" 87
-biotype 182 HZ3 "Tryptophan" 88
-biotype 183 CH2 "Tryptophan" 87
-biotype 184 HH2 "Tryptophan" 88
-biotype 185 N "Histidine (+)" 177
-biotype 186 CA "Histidine (+)" 163
-biotype 187 C "Histidine (+)" 174
-biotype 188 HN "Histidine (+)" 180
-biotype 189 O "Histidine (+)" 175
-biotype 190 HA "Histidine (+)" 82
-biotype 191 CB "Histidine (+)" 443
-biotype 192 HB "Histidine (+)" 82
-biotype 193 CG "Histidine (+)" 448
-biotype 194 ND1 "Histidine (+)" 450
-biotype 195 HD1 "Histidine (+)" 451
-biotype 196 CD2 "Histidine (+)" 448
-biotype 197 HD2 "Histidine (+)" 88
-biotype 198 CE1 "Histidine (+)" 447
-biotype 199 HE1 "Histidine (+)" 88
-biotype 200 NE2 "Histidine (+)" 450
-biotype 201 HE2 "Histidine (+)" 451
-biotype 202 N "Histidine (HD)" 177
-biotype 203 CA "Histidine (HD)" 163
-biotype 204 C "Histidine (HD)" 174
-biotype 205 HN "Histidine (HD)" 180
-biotype 206 O "Histidine (HD)" 175
-biotype 207 HA "Histidine (HD)" 82
-biotype 208 CB "Histidine (HD)" 443
-biotype 209 HB "Histidine (HD)" 82
-biotype 210 CG "Histidine (HD)" 446
-biotype 211 ND1 "Histidine (HD)" 441
-biotype 212 HD1 "Histidine (HD)" 442
-biotype 213 CD2 "Histidine (HD)" 445
-biotype 214 HD2 "Histidine (HD)" 88
-biotype 215 CE1 "Histidine (HD)" 444
-biotype 216 HE1 "Histidine (HD)" 88
-biotype 217 NE2 "Histidine (HD)" 449
-biotype 218 N "Histidine (HE)" 177
-biotype 219 CA "Histidine (HE)" 163
-biotype 220 C "Histidine (HE)" 174
-biotype 221 HN "Histidine (HE)" 180
-biotype 222 O "Histidine (HE)" 175
-biotype 223 HA "Histidine (HE)" 82
-biotype 224 CB "Histidine (HE)" 443
-biotype 225 HB "Histidine (HE)" 82
-biotype 226 CG "Histidine (HE)" 445
-biotype 227 ND1 "Histidine (HE)" 449
-biotype 228 CD2 "Histidine (HE)" 446
-biotype 229 HD2 "Histidine (HE)" 88
-biotype 230 CE1 "Histidine (HE)" 444
-biotype 231 HE1 "Histidine (HE)" 88
-biotype 232 NE2 "Histidine (HE)" 441
-biotype 233 HE2 "Histidine (HE)" 442
-biotype 234 N "Aspartic Acid" 177
-biotype 235 CA "Aspartic Acid" 163
-biotype 236 C "Aspartic Acid" 174
-biotype 237 HN "Aspartic Acid" 180
-biotype 238 O "Aspartic Acid" 175
-biotype 239 HA "Aspartic Acid" 82
-biotype 240 CB "Aspartic Acid" 213
-biotype 241 HB "Aspartic Acid" 82
-biotype 242 CG "Aspartic Acid" 210
-biotype 243 OD "Aspartic Acid" 211
-biotype 244 N "Aspartic Acid (COOH)" -1
-biotype 245 CA "Aspartic Acid (COOH)" -1
-biotype 246 C "Aspartic Acid (COOH)" -1
-biotype 247 HN "Aspartic Acid (COOH)" -1
-biotype 248 O "Aspartic Acid (COOH)" -1
-biotype 249 HA "Aspartic Acid (COOH)" -1
-biotype 250 CB "Aspartic Acid (COOH)" -1
-biotype 251 HB "Aspartic Acid (COOH)" -1
-biotype 252 CG "Aspartic Acid (COOH)" -1
-biotype 253 OD1 "Aspartic Acid (COOH)" -1
-biotype 254 OD2 "Aspartic Acid (COOH)" -1
-biotype 255 HD2 "Aspartic Acid (COOH)" -1
-biotype 256 N "Asparagine" 177
-biotype 257 CA "Asparagine" 163
-biotype 258 C "Asparagine" 174
-biotype 259 HN "Asparagine" 180
-biotype 260 O "Asparagine" 175
-biotype 261 HA "Asparagine" 82
-biotype 262 CB "Asparagine" 78
-biotype 263 HB "Asparagine" 82
-biotype 264 CG "Asparagine" 174
-biotype 265 OD1 "Asparagine" 175
-biotype 266 ND2 "Asparagine" 176
-biotype 267 HD2 "Asparagine" 179
-biotype 268 N "Glutamic Acid" 177
-biotype 269 CA "Glutamic Acid" 163
-biotype 270 C "Glutamic Acid" 174
-biotype 271 HN "Glutamic Acid" 180
-biotype 272 O "Glutamic Acid" 175
-biotype 273 HA "Glutamic Acid" 82
-biotype 274 CB "Glutamic Acid" 78
-biotype 275 HB "Glutamic Acid" 82
-biotype 276 CG "Glutamic Acid" 213
-biotype 277 HG "Glutamic Acid" 82
-biotype 278 CD "Glutamic Acid" 210
-biotype 279 OE "Glutamic Acid" 211
-biotype 280 N "Glutamic Acid (COOH)" -1
-biotype 281 CA "Glutamic Acid (COOH)" -1
-biotype 282 C "Glutamic Acid (COOH)" -1
-biotype 283 HN "Glutamic Acid (COOH)" -1
-biotype 284 O "Glutamic Acid (COOH)" -1
-biotype 285 HA "Glutamic Acid (COOH)" -1
-biotype 286 CB "Glutamic Acid (COOH)" -1
-biotype 287 HB "Glutamic Acid (COOH)" -1
-biotype 288 CG "Glutamic Acid (COOH)" -1
-biotype 289 HG "Glutamic Acid (COOH)" -1
-biotype 290 CD "Glutamic Acid (COOH)" -1
-biotype 291 OE1 "Glutamic Acid (COOH)" -1
-biotype 292 OE2 "Glutamic Acid (COOH)" -1
-biotype 293 HE2 "Glutamic Acid (COOH)" -1
-biotype 294 N "Glutamine" 177
-biotype 295 CA "Glutamine" 163
-biotype 296 C "Glutamine" 174
-biotype 297 HN "Glutamine" 180
-biotype 298 O "Glutamine" 175
-biotype 299 HA "Glutamine" 82
-biotype 300 CB "Glutamine" 78
-biotype 301 HB "Glutamine" 82
-biotype 302 CG "Glutamine" 78
-biotype 303 HG "Glutamine" 82
-biotype 304 CD "Glutamine" 174
-biotype 305 OE1 "Glutamine" 175
-biotype 306 NE2 "Glutamine" 176
-biotype 307 HE2 "Glutamine" 179
-biotype 308 N "Methionine" 177
-biotype 309 CA "Methionine" 163
-biotype 310 C "Methionine" 174
-biotype 311 HN "Methionine" 180
-biotype 312 O "Methionine" 175
-biotype 313 HA "Methionine" 82
-biotype 314 CB "Methionine" 78
-biotype 315 HB "Methionine" 82
-biotype 316 CG "Methionine" 149
-biotype 317 HG "Methionine" 82
-biotype 318 SD "Methionine" 141
-biotype 319 CE "Methionine" 148
-biotype 320 HE "Methionine" 82
-biotype 321 N "Lysine" 177
-biotype 322 CA "Lysine" 163
-biotype 323 C "Lysine" 174
-biotype 324 HN "Lysine" 180
-biotype 325 O "Lysine" 175
-biotype 326 HA "Lysine" 82
-biotype 327 CB "Lysine" 78
-biotype 328 HB "Lysine" 82
-biotype 329 CG "Lysine" 78
-biotype 330 HG "Lysine" 82
-biotype 331 CD "Lysine" 78
-biotype 332 HD "Lysine" 82
-biotype 333 CE "Lysine" 232
-biotype 334 HE "Lysine" 82
-biotype 335 NZ "Lysine" 227
-biotype 336 HZ "Lysine" 230
-biotype 337 N "Lysine (NH2)" -1
-biotype 338 CA "Lysine (NH2)" -1
-biotype 339 C "Lysine (NH2)" -1
-biotype 340 HN "Lysine (NH2)" -1
-biotype 341 O "Lysine (NH2)" -1
-biotype 342 HA "Lysine (NH2)" -1
-biotype 343 CB "Lysine (NH2)" -1
-biotype 344 HB "Lysine (NH2)" -1
-biotype 345 CG "Lysine (NH2)" -1
-biotype 346 HG "Lysine (NH2)" -1
-biotype 347 CD "Lysine (NH2)" -1
-biotype 348 HD "Lysine (NH2)" -1
-biotype 349 CE "Lysine (NH2)" -1
-biotype 350 HE "Lysine (NH2)" -1
-biotype 351 NZ "Lysine (NH2)" -1
-biotype 352 HZ "Lysine (NH2)" -1
-biotype 353 N "Arginine" 177
-biotype 354 CA "Arginine" 163
-biotype 355 C "Arginine" 174
-biotype 356 HN "Arginine" 180
-biotype 357 O "Arginine" 175
-biotype 358 HA "Arginine" 82
-biotype 359 CB "Arginine" 78
-biotype 360 HB "Arginine" 82
-biotype 361 CG "Arginine" 248
-biotype 362 HG "Arginine" 82
-biotype 363 CD "Arginine" 247
-biotype 364 HD "Arginine" 82
-biotype 365 NE "Arginine" 243
-biotype 366 HE "Arginine" 244
-biotype 367 CZ "Arginine" 242
-biotype 368 NH "Arginine" 240
-biotype 369 HH "Arginine" 241
-biotype 370 N "Ornithine" 177
-biotype 371 CA "Ornithine" 163
-biotype 372 C "Ornithine" 174
-biotype 373 HN "Ornithine" 180
-biotype 374 O "Ornithine" 175
-biotype 375 HA "Ornithine" 82
-biotype 376 CB "Ornithine" 78
-biotype 377 HB "Ornithine" 82
-biotype 378 CG "Ornithine" 78
-biotype 379 HG "Ornithine" 82
-biotype 380 CD "Ornithine" 232
-biotype 381 HD "Ornithine" 82
-biotype 382 NE "Ornithine" 227
-biotype 383 HE "Ornithine" 230
-biotype 384 N "MethylAlanine (AIB)" 177
-biotype 385 CA "MethylAlanine (AIB)" 164
-biotype 386 C "MethylAlanine (AIB)" 174
-biotype 387 HN "MethylAlanine (AIB)" 180
-biotype 388 O "MethylAlanine (AIB)" 175
-biotype 389 CB "MethylAlanine (AIB)" 77
-biotype 390 HB "MethylAlanine (AIB)" 82
-biotype 391 N "Pyroglutamic Acid" 177
-biotype 392 CA "Pyroglutamic Acid" 163
-biotype 393 C "Pyroglutamic Acid" 174
-biotype 394 HN "Pyroglutamic Acid" 180
-biotype 395 O "Pyroglutamic Acid" 175
-biotype 396 HA "Pyroglutamic Acid" 82
-biotype 397 CB "Pyroglutamic Acid" 78
-biotype 398 HB "Pyroglutamic Acid" 82
-biotype 399 CG "Pyroglutamic Acid" 213
-biotype 400 HG "Pyroglutamic Acid" 82
-biotype 401 CD "Pyroglutamic Acid" 174
-biotype 402 OE "Pyroglutamic Acid" 175
-biotype 403 C "Formyl N-Terminus" 174
-biotype 404 H "Formyl N-Terminus" 218
-biotype 405 O "Formyl N-Terminus" 175
-biotype 406 CH3 "Acetyl N-Terminus" 77
-biotype 407 H "Acetyl N-Terminus" 82
-biotype 408 C "Acetyl N-Terminus" 174
-biotype 409 O "Acetyl N-Terminus" 175
-biotype 410 N "Amide C-Terminus" 176
-biotype 411 HN "Amide C-Terminus" 179
-biotype 412 N "N-MeAmide C-Terminus" 177
-biotype 413 HN "N-MeAmide C-Terminus" 180
-biotype 414 CH3 "N-MeAmide C-Terminus" 181
-biotype 415 H "N-MeAmide C-Terminus" 82
-biotype 416 N "N-Terminal GLY" 227
-biotype 417 CA "N-Terminal GLY" 232
-biotype 418 C "N-Terminal GLY" 174
-biotype 419 HN "N-Terminal GLY" 230
-biotype 420 O "N-Terminal GLY" 175
-biotype 421 HA "N-Terminal GLY" 82
-biotype 422 N "N-Terminal ALA" 227
-biotype 423 CA "N-Terminal ALA" 233
-biotype 424 C "N-Terminal ALA" 174
-biotype 425 HN "N-Terminal ALA" 230
-biotype 426 O "N-Terminal ALA" 175
-biotype 427 HA "N-Terminal ALA" 82
-biotype 428 N "N-Terminal VAL" 227
-biotype 429 CA "N-Terminal VAL" 233
-biotype 430 C "N-Terminal VAL" 174
-biotype 431 HN "N-Terminal VAL" 230
-biotype 432 O "N-Terminal VAL" 175
-biotype 433 HA "N-Terminal VAL" 82
-biotype 434 N "N-Terminal LEU" 227
-biotype 435 CA "N-Terminal LEU" 233
-biotype 436 C "N-Terminal LEU" 174
-biotype 437 HN "N-Terminal LEU" 230
-biotype 438 O "N-Terminal LEU" 175
-biotype 439 HA "N-Terminal LEU" 82
-biotype 440 N "N-Terminal ILE" 227
-biotype 441 CA "N-Terminal ILE" 233
-biotype 442 C "N-Terminal ILE" 174
-biotype 443 HN "N-Terminal ILE" 230
-biotype 444 O "N-Terminal ILE" 175
-biotype 445 HA "N-Terminal ILE" 82
-biotype 446 N "N-Terminal SER" 227
-biotype 447 CA "N-Terminal SER" 233
-biotype 448 C "N-Terminal SER" 174
-biotype 449 HN "N-Terminal SER" 230
-biotype 450 O "N-Terminal SER" 175
-biotype 451 HA "N-Terminal SER" 82
-biotype 452 N "N-Terminal THR" 227
-biotype 453 CA "N-Terminal THR" 233
-biotype 454 C "N-Terminal THR" 174
-biotype 455 HN "N-Terminal THR" 230
-biotype 456 O "N-Terminal THR" 175
-biotype 457 HA "N-Terminal THR" 82
-biotype 458 N "N-Terminal CYS (SH)" 227
-biotype 459 CA "N-Terminal CYS (SH)" 233
-biotype 460 C "N-Terminal CYS (SH)" 174
-biotype 461 HN "N-Terminal CYS (SH)" 230
-biotype 462 O "N-Terminal CYS (SH)" 175
-biotype 463 HA "N-Terminal CYS (SH)" 82
-biotype 464 N "N-Terminal CYX (SS)" 227
-biotype 465 CA "N-Terminal CYX (SS)" 233
-biotype 466 C "N-Terminal CYX (SS)" 174
-biotype 467 HN "N-Terminal CYX (SS)" 230
-biotype 468 O "N-Terminal CYX (SS)" 175
-biotype 469 HA "N-Terminal CYX (SS)" 82
-biotype 470 N "N-Terminal CYD (S-)" -1
-biotype 471 CA "N-Terminal CYD (S-)" -1
-biotype 472 C "N-Terminal CYD (S-)" -1
-biotype 473 HN "N-Terminal CYD (S-)" -1
-biotype 474 O "N-Terminal CYD (S-)" -1
-biotype 475 HA "N-Terminal CYD (S-)" -1
-biotype 476 N "N-Terminal PRO" 249
-biotype 477 CA "N-Terminal PRO" 235
-biotype 478 C "N-Terminal PRO" 174
-biotype 479 HN "N-Terminal PRO" 250
-biotype 480 O "N-Terminal PRO" 175
-biotype 481 HA "N-Terminal PRO" 82
-biotype 482 CD "N-Terminal PRO" 236
-biotype 483 HD "N-Terminal PRO" 82
-biotype 484 N "N-Terminal PHE" 227
-biotype 485 CA "N-Terminal PHE" 233
-biotype 486 C "N-Terminal PHE" 174
-biotype 487 HN "N-Terminal PHE" 230
-biotype 488 O "N-Terminal PHE" 175
-biotype 489 HA "N-Terminal PHE" 82
-biotype 490 N "N-Terminal TYR" 227
-biotype 491 CA "N-Terminal TYR" 233
-biotype 492 C "N-Terminal TYR" 174
-biotype 493 HN "N-Terminal TYR" 230
-biotype 494 O "N-Terminal TYR" 175
-biotype 495 HA "N-Terminal TYR" 82
-biotype 496 N "N-Terminal TYD (O-)" -1
-biotype 497 CA "N-Terminal TYD (O-)" -1
-biotype 498 C "N-Terminal TYD (O-)" -1
-biotype 499 HN "N-Terminal TYD (O-)" -1
-biotype 500 O "N-Terminal TYD (O-)" -1
-biotype 501 HA "N-Terminal TYD (O-)" -1
-biotype 502 N "N-Terminal TRP" 227
-biotype 503 CA "N-Terminal TRP" 233
-biotype 504 C "N-Terminal TRP" 174
-biotype 505 HN "N-Terminal TRP" 230
-biotype 506 O "N-Terminal TRP" 175
-biotype 507 HA "N-Terminal TRP" 82
-biotype 508 N "N-Terminal HIS (+)" 227
-biotype 509 CA "N-Terminal HIS (+)" 233
-biotype 510 C "N-Terminal HIS (+)" 174
-biotype 511 HN "N-Terminal HIS (+)" 230
-biotype 512 O "N-Terminal HIS (+)" 175
-biotype 513 HA "N-Terminal HIS (+)" 82
-biotype 514 N "N-Terminal HIS (HD)" 227
-biotype 515 CA "N-Terminal HIS (HD)" 233
-biotype 516 C "N-Terminal HIS (HD)" 174
-biotype 517 HN "N-Terminal HIS (HD)" 230
-biotype 518 O "N-Terminal HIS (HD)" 175
-biotype 519 HA "N-Terminal HIS (HD)" 82
-biotype 520 N "N-Terminal HIS (HE)" 227
-biotype 521 CA "N-Terminal HIS (HE)" 233
-biotype 522 C "N-Terminal HIS (HE)" 174
-biotype 523 HN "N-Terminal HIS (HE)" 230
-biotype 524 O "N-Terminal HIS (HE)" 175
-biotype 525 HA "N-Terminal HIS (HE)" 82
-biotype 526 N "N-Terminal ASP" 227
-biotype 527 CA "N-Terminal ASP" 233
-biotype 528 C "N-Terminal ASP" 174
-biotype 529 HN "N-Terminal ASP" 230
-biotype 530 O "N-Terminal ASP" 175
-biotype 531 HA "N-Terminal ASP" 82
-biotype 532 N "N-Terminal ASH (COOH)" -1
-biotype 533 CA "N-Terminal ASH (COOH)" -1
-biotype 534 C "N-Terminal ASH (COOH)" -1
-biotype 535 HN "N-Terminal ASH (COOH)" -1
-biotype 536 O "N-Terminal ASH (COOH)" -1
-biotype 537 HA "N-Terminal ASH (COOH)" -1
-biotype 538 N "N-Terminal ASN" 227
-biotype 539 CA "N-Terminal ASN" 233
-biotype 540 C "N-Terminal ASN" 174
-biotype 541 HN "N-Terminal ASN" 230
-biotype 542 O "N-Terminal ASN" 175
-biotype 543 HA "N-Terminal ASN" 82
-biotype 544 N "N-Terminal GLU" 227
-biotype 545 CA "N-Terminal GLU" 233
-biotype 546 C "N-Terminal GLU" 174
-biotype 547 HN "N-Terminal GLU" 230
-biotype 548 O "N-Terminal GLU" 175
-biotype 549 HA "N-Terminal GLU" 82
-biotype 550 N "N-Terminal GLH (COOH)" -1
-biotype 551 CA "N-Terminal GLH (COOH)" -1
-biotype 552 C "N-Terminal GLH (COOH)" -1
-biotype 553 HN "N-Terminal GLH (COOH)" -1
-biotype 554 O "N-Terminal GLH (COOH)" -1
-biotype 555 HA "N-Terminal GLH (COOH)" -1
-biotype 556 N "N-Terminal GLN" 227
-biotype 557 CA "N-Terminal GLN" 233
-biotype 558 C "N-Terminal GLN" 174
-biotype 559 HN "N-Terminal GLN" 230
-biotype 560 O "N-Terminal GLN" 175
-biotype 561 HA "N-Terminal GLN" 82
-biotype 562 N "N-Terminal MET" 227
-biotype 563 CA "N-Terminal MET" 233
-biotype 564 C "N-Terminal MET" 174
-biotype 565 HN "N-Terminal MET" 230
-biotype 566 O "N-Terminal MET" 175
-biotype 567 HA "N-Terminal MET" 82
-biotype 568 N "N-Terminal LYS" 227
-biotype 569 CA "N-Terminal LYS" 233
-biotype 570 C "N-Terminal LYS" 174
-biotype 571 HN "N-Terminal LYS" 230
-biotype 572 O "N-Terminal LYS" 175
-biotype 573 HA "N-Terminal LYS" 82
-biotype 574 N "N-Terminal LYD (NH2)" -1
-biotype 575 CA "N-Terminal LYD (NH2)" -1
-biotype 576 C "N-Terminal LYD (NH2)" -1
-biotype 577 HN "N-Terminal LYD (NH2)" -1
-biotype 578 O "N-Terminal LYD (NH2)" -1
-biotype 579 HA "N-Terminal LYD (NH2)" -1
-biotype 580 N "N-Terminal ARG" 227
-biotype 581 CA "N-Terminal ARG" 233
-biotype 582 C "N-Terminal ARG" 174
-biotype 583 HN "N-Terminal ARG" 230
-biotype 584 O "N-Terminal ARG" 175
-biotype 585 HA "N-Terminal ARG" 82
-biotype 586 N "N-Terminal ORN" 227
-biotype 587 CA "N-Terminal ORN" 233
-biotype 588 C "N-Terminal ORN" 174
-biotype 589 HN "N-Terminal ORN" 230
-biotype 590 O "N-Terminal ORN" 175
-biotype 591 HA "N-Terminal ORN" 82
-biotype 592 N "N-Terminal AIB" 227
-biotype 593 CA "N-Terminal AIB" 234
-biotype 594 C "N-Terminal AIB" 174
-biotype 595 HN "N-Terminal AIB" 230
-biotype 596 O "N-Terminal AIB" 175
-biotype 597 N "C-Terminal GLY" 177
-biotype 598 CA "C-Terminal GLY" 223
-biotype 599 C "C-Terminal GLY" 210
-biotype 600 HN "C-Terminal GLY" 180
-biotype 601 OXT "C-Terminal GLY" 211
-biotype 602 HA "C-Terminal GLY" 82
-biotype 603 N "C-Terminal ALA" 177
-biotype 604 CA "C-Terminal ALA" 222
-biotype 605 C "C-Terminal ALA" 210
-biotype 606 HN "C-Terminal ALA" 180
-biotype 607 OXT "C-Terminal ALA" 211
-biotype 608 HA "C-Terminal ALA" 82
-biotype 609 N "C-Terminal VAL" 177
-biotype 610 CA "C-Terminal VAL" 222
-biotype 611 C "C-Terminal VAL" 210
-biotype 612 HN "C-Terminal VAL" 180
-biotype 613 OXT "C-Terminal VAL" 211
-biotype 614 HA "C-Terminal VAL" 82
-biotype 615 N "C-Terminal LEU" 177
-biotype 616 CA "C-Terminal LEU" 222
-biotype 617 C "C-Terminal LEU" 210
-biotype 618 HN "C-Terminal LEU" 180
-biotype 619 OXT "C-Terminal LEU" 211
-biotype 620 HA "C-Terminal LEU" 82
-biotype 621 N "C-Terminal ILE" 177
-biotype 622 CA "C-Terminal ILE" 222
-biotype 623 C "C-Terminal ILE" 210
-biotype 624 HN "C-Terminal ILE" 180
-biotype 625 OXT "C-Terminal ILE" 211
-biotype 626 HA "C-Terminal ILE" 82
-biotype 627 N "C-Terminal SER" 177
-biotype 628 CA "C-Terminal SER" 222
-biotype 629 C "C-Terminal SER" 210
-biotype 630 HN "C-Terminal SER" 180
-biotype 631 OXT "C-Terminal SER" 211
-biotype 632 HA "C-Terminal SER" 82
-biotype 633 N "C-Terminal THR" 177
-biotype 634 CA "C-Terminal THR" 222
-biotype 635 C "C-Terminal THR" 210
-biotype 636 HN "C-Terminal THR" 180
-biotype 637 OXT "C-Terminal THR" 211
-biotype 638 HA "C-Terminal THR" 82
-biotype 639 N "C-Terminal CYS (SH)" 177
-biotype 640 CA "C-Terminal CYS (SH)" 222
-biotype 641 C "C-Terminal CYS (SH)" 210
-biotype 642 HN "C-Terminal CYS (SH)" 180
-biotype 643 OXT "C-Terminal CYS (SH)" 211
-biotype 644 HA "C-Terminal CYS (SH)" 82
-biotype 645 N "C-Terminal CYX (SS)" 177
-biotype 646 CA "C-Terminal CYX (SS)" 222
-biotype 647 C "C-Terminal CYX (SS)" 210
-biotype 648 HN "C-Terminal CYX (SS)" 180
-biotype 649 OXT "C-Terminal CYX (SS)" 211
-biotype 650 HA "C-Terminal CYX (SS)" 82
-biotype 651 N "C-Terminal CYD (S-)" -1
-biotype 652 CA "C-Terminal CYD (S-)" -1
-biotype 653 C "C-Terminal CYD (S-)" -1
-biotype 654 HN "C-Terminal CYD (S-)" -1
-biotype 655 OXT "C-Terminal CYD (S-)" -1
-biotype 656 HA "C-Terminal CYD (S-)" -1
-biotype 657 N "C-Terminal PRO" 178
-biotype 658 CA "C-Terminal PRO" 225
-biotype 659 C "C-Terminal PRO" 210
-biotype 660 OXT "C-Terminal PRO" 211
-biotype 661 HA "C-Terminal PRO" 82
-biotype 662 N "C-Terminal PHE" 177
-biotype 663 CA "C-Terminal PHE" 222
-biotype 664 C "C-Terminal PHE" 210
-biotype 665 HN "C-Terminal PHE" 180
-biotype 666 OXT "C-Terminal PHE" 211
-biotype 667 HA "C-Terminal PHE" 82
-biotype 668 N "C-Terminal TYR" 177
-biotype 669 CA "C-Terminal TYR" 222
-biotype 670 C "C-Terminal TYR" 210
-biotype 671 HN "C-Terminal TYR" 180
-biotype 672 OXT "C-Terminal TYR" 211
-biotype 673 HA "C-Terminal TYR" 82
-biotype 674 N "C-Terminal TYD (O-)" -1
-biotype 675 CA "C-Terminal TYD (O-)" -1
-biotype 676 C "C-Terminal TYD (O-)" -1
-biotype 677 HN "C-Terminal TYD (O-)" -1
-biotype 678 OXT "C-Terminal TYD (O-)" -1
-biotype 679 HA "C-Terminal TYD (O-)" -1
-biotype 680 N "C-Terminal TRP" 177
-biotype 681 CA "C-Terminal TRP" 222
-biotype 682 C "C-Terminal TRP" 210
-biotype 683 HN "C-Terminal TRP" 180
-biotype 684 OXT "C-Terminal TRP" 211
-biotype 685 HA "C-Terminal TRP" 82
-biotype 686 N "C-Terminal HIS (+)" 177
-biotype 687 CA "C-Terminal HIS (+)" 222
-biotype 688 C "C-Terminal HIS (+)" 210
-biotype 689 HN "C-Terminal HIS (+)" 180
-biotype 690 OXT "C-Terminal HIS (+)" 211
-biotype 691 HA "C-Terminal HIS (+)" 82
-biotype 692 N "C-Terminal HIS (HD)" 177
-biotype 693 CA "C-Terminal HIS (HD)" 222
-biotype 694 C "C-Terminal HIS (HD)" 210
-biotype 695 HN "C-Terminal HIS (HD)" 180
-biotype 696 OXT "C-Terminal HIS (HD)" 211
-biotype 697 HA "C-Terminal HIS (HD)" 82
-biotype 698 N "C-Terminal HIS (HE)" 177
-biotype 699 CA "C-Terminal HIS (HE)" 222
-biotype 700 C "C-Terminal HIS (HE)" 210
-biotype 701 HN "C-Terminal HIS (HE)" 180
-biotype 702 OXT "C-Terminal HIS (HE)" 211
-biotype 703 HA "C-Terminal HIS (HE)" 82
-biotype 704 N "C-Terminal ASP" 177
-biotype 705 CA "C-Terminal ASP" 222
-biotype 706 C "C-Terminal ASP" 210
-biotype 707 HN "C-Terminal ASP" 180
-biotype 708 OXT "C-Terminal ASP" 211
-biotype 709 HA "C-Terminal ASP" 82
-biotype 710 N "C-Terminal ASH (COOH)" -1
-biotype 711 CA "C-Terminal ASH (COOH)" -1
-biotype 712 C "C-Terminal ASH (COOH)" -1
-biotype 713 HN "C-Terminal ASH (COOH)" -1
-biotype 714 OXT "C-Terminal ASH (COOH)" -1
-biotype 715 HA "C-Terminal ASH (COOH)" -1
-biotype 716 N "C-Terminal ASN" 177
-biotype 717 CA "C-Terminal ASN" 222
-biotype 718 C "C-Terminal ASN" 210
-biotype 719 HN "C-Terminal ASN" 180
-biotype 720 OXT "C-Terminal ASN" 211
-biotype 721 HA "C-Terminal ASN" 82
-biotype 722 N "C-Terminal GLU" 177
-biotype 723 CA "C-Terminal GLU" 222
-biotype 724 C "C-Terminal GLU" 210
-biotype 725 HN "C-Terminal GLU" 180
-biotype 726 OXT "C-Terminal GLU" 211
-biotype 727 HA "C-Terminal GLU" 82
-biotype 728 N "C-Terminal GLH (COOH)" -1
-biotype 729 CA "C-Terminal GLH (COOH)" -1
-biotype 730 C "C-Terminal GLH (COOH)" -1
-biotype 731 HN "C-Terminal GLH (COOH)" -1
-biotype 732 OXT "C-Terminal GLH (COOH)" -1
-biotype 733 HA "C-Terminal GLH (COOH)" -1
-biotype 734 N "C-Terminal GLN" 177
-biotype 735 CA "C-Terminal GLN" 222
-biotype 736 C "C-Terminal GLN" 210
-biotype 737 HN "C-Terminal GLN" 180
-biotype 738 OXT "C-Terminal GLN" 211
-biotype 739 HA "C-Terminal GLN" 82
-biotype 740 N "C-Terminal MET" 177
-biotype 741 CA "C-Terminal MET" 222
-biotype 742 C "C-Terminal MET" 210
-biotype 743 HN "C-Terminal MET" 180
-biotype 744 OXT "C-Terminal MET" 211
-biotype 745 HA "C-Terminal MET" 82
-biotype 746 N "C-Terminal LYS" 177
-biotype 747 CA "C-Terminal LYS" 222
-biotype 748 C "C-Terminal LYS" 210
-biotype 749 HN "C-Terminal LYS" 180
-biotype 750 OXT "C-Terminal LYS" 211
-biotype 751 HA "C-Terminal LYS" 82
-biotype 752 N "C-Terminal LYD (NH2)" -1
-biotype 753 CA "C-Terminal LYD (NH2)" -1
-biotype 754 C "C-Terminal LYD (NH2)" -1
-biotype 755 HN "C-Terminal LYD (NH2)" -1
-biotype 756 OXT "C-Terminal LYD (NH2)" -1
-biotype 757 HA "C-Terminal LYD (NH2)" -1
-biotype 758 N "C-Terminal ARG" 177
-biotype 759 CA "C-Terminal ARG" 222
-biotype 760 C "C-Terminal ARG" 210
-biotype 761 HN "C-Terminal ARG" 180
-biotype 762 OXT "C-Terminal ARG" 211
-biotype 763 HA "C-Terminal ARG" 82
-biotype 764 N "C-Terminal ORN" 177
-biotype 765 CA "C-Terminal ORN" 222
-biotype 766 C "C-Terminal ORN" 210
-biotype 767 HN "C-Terminal ORN" 180
-biotype 768 OXT "C-Terminal ORN" 211
-biotype 769 HA "C-Terminal ORN" 82
-biotype 770 N "C-Terminal AIB" 177
-biotype 771 CA "C-Terminal AIB" 224
-biotype 772 C "C-Terminal AIB" 210
-biotype 773 HN "C-Terminal AIB" 180
-biotype 774 OXT "C-Terminal AIB" 211
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py
index e83698986..49cef1aff 100755
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_moltemplate.py
@@ -1,319 +1,386 @@
#! /usr/bin/env python
#The purpose of this script is to create a moltemplate lt file for the opls-aa forcefield.
#This will assist researchers in building complex simulations using this OPLS-UA and the OPLS-AA forcefields.
__author__="Jason Lambert"
-__version__="0.13"
+__version__="0.15"
import sys
import os
from operator import itemgetter
print("""
Warning:
- Run this program on a SUBSET of the OPLS forcefield relevant
- to your problem. It is possible for you to generate a full OPLS force
- field moltemplate file, but that demands a lot of time and generates
- a file that is on the order 100 gigabytes (which is too large for
- moltemplate to read).
- Save yourself time and energy, make a copy of the oplsaa.txt that
- only contains atoms (in the \"atoms\" section) relevant to your problem.
+ Run this program on a SUBSET of the OPLS atoms which are relevant
+ to your problem. If not, this program (and moltemplate) may crash
+ your computer and/or generate enormous files that you do not need.
""")
+# To do that, first make a copy of the \"oplsaa.prm\" file
+# (which can be downloaded from the TINKER web site).
+# The lines in this file beginning with the word \"atoms\" should
+# define the atoms which you plan to put in your simulation. All other
+# lines beginning with the word \"atoms\" should be deleted.
+# (Leave the other sections of this file alone.)
+#""")
#input data from file containing opls aa force field parameters.
try:
f=open(sys.argv[1],"r")
except:
print("need to specify file name as an input argument:")
print("python oplsaa_moltemplate.py <forcefield file name>")
print("or file name is specified incorrectly")
sys.exit()
#output lt file
g=open("oplsaa.lt","w")
+
+
+lines = f.readlines()
+
+
+
+# Ignore/Comment out lines before the "## Atom Type Definitions ##" section.
+
+for i in range(0, len(lines)):
+ if (lines[i].find("## Atom Type Definitions ##") != -1):
+ break
+ else:
+ lines[i] = '# ' + lines[i]
+
+
+# As of 2014-4-19, there appear to be 906 atom types, but we don't assume this.
+# First try to infer out how many atom types there were in the original
+# oplsaa.prm file, or at least find an upper bound on the atom-type numbers.
+# (Keep track of the maximum value of the first column in the "atom" section.)
+max_atomType = 0
+for line in lines:
+ # skip over text after a # comment character
+ ic = line.find('#')
+ if ic != -1:
+ line = (line[:ic]).strip()
+ else:
+ line = line.strip()
+ # now look for lines beginning with the word "atom"
+ tokens = line.split()
+ if ((len(tokens)>2) and
+ (tokens[0] == "atom") and
+ (int(tokens[1]) > max_atomType)):
+ max_atomType = int(tokens[1])
+
+
#temporary storage file
h=open("temp.txt","w+")
atom_lookup={} #this dictionary contains all the atom ffid's as a key and the number of atoms with that key
-atom=[[10000,10000] for i in range(906)]
+#atom=[[10000,10000] for i in range(906)] <- don't assume there are 906 atoms
+atom=[[-10000,-10000] for i in range(0,max_atomType+1)]
+#charge_by_type={} # lookup charge by atom type
+#vdw_by_type={} # lookup epsilon & sigma paramters by atom type
+charge_by_type=[0.0 for i in range(0,max_atomType+1)] # lookup charge by atom
+vdw_by_type=[(0.0,0.0) for i in range(0,max_atomType+1)] # lookup epsilon & sigma
+
+
+
#atom is declared this way so for sorting purposes.
#atom contains the following data upon allocation
#atom[][0]=atom_id( Important for partial charges and non_bonded interactions)
#atom[][1]=atom_ffid( Important for stretches, bending, torsions and impropers)
#atom[][2]=atom_mass
#atom[][3]=partial charge
#atom[][4]=non_bonding sigma
#atom[][5]=non_bonding epsilon
#atom[][6]=atom comment
bond=[]
#bond contains the following data
#bond[0]=atom 1 ffid
#bond[1]=atom 2 ffid
#bond[2]=bond spring constant(OPLS-aa compatible)
#bond[3]=equilibrium bond distance(Angstrom)
angle=[]
#angle contains the following data
#angle[0]=atom 1 ffid
#angle[1]=atom 2 ffid
#angle[2]=atom 3 ffid
#angle[3]=spring constant
#angle[4]=equilibrium angle (degrees)
dihedral=[]
#dihedral contains the following data
#dihedral[0]=atom 1 ffid
#dihedral[1]=atom 2 ffid
#dihedral[2]=atom 3 ffid
#dihedral[3]=atom 4 ffid
#dihedral[4]=v1
#dihedral[5]=v2
#dihedral[6]=v3
#dihedral[7]=v4
improper=[]
#improper[0]=atom 1 ffid
#improper[1]=atom 2 ffid(central atom)
#improper[2]=atom 3 ffid
#improper[3]=atom 4 ffid
#improper[4]=spring coefficient
#improper[5]=equilibrium angle
-charge_temp=[] #temporarily store the charges
-vdw_temp=[]
-
#This section gets all the parameters from the force field file
-for line in f.readlines():
- if "atom" in line and "#" not in line:
- line=line.split()
- atom[int(line[1])-1]=[int(line[1]),int(line[2]),float(line[-2]),
- 0.0,0.0,0.0," ".join(line[3:-2])]
- elif "vdw" in line and "#" not in line:
+for line in lines:
+
+ # skip over text after a # comment character
+ ic = line.find('#')
+ if ic != -1:
+ line = (line[:ic]).strip()
+ else:
+ line = line.strip()
+
+ if line.find("atom") == 0:
line=line.split()
- vdw_temp.append([float(line[1]),float(line[2]),float(line[3])])
- elif "bond" in line and "#" not in line:
+ atom[int(line[1])-1]=[int(line[1]),int(line[2]),float(line[-2]),
+ 0.0,0.0,0.0," ".join(line[3:-2])]
+ elif line.find("vdw") == 0:
+ line=line.split()
+ #vdw_temp.append([float(line[1]),float(line[2]),float(line[3])])
+ if (int(line[1]) <= max_atomType):
+ vdw_by_type[int(line[1])] = (float(line[2]),float(line[3]))
+ elif line.find("bond") == 0:
line=line.split()
bond.append([int(line[1]),int(line[2]),float(line[3]),float(line[4])])
- elif "angle" in line and "#" not in line:
+ elif line.find("angle") == 0:
line=line.split()
angle.append([int(line[1]),int(line[2]),int(line[3]),
float(line[4]),float(line[5])])
- elif "torsion" in line and "#" not in line:
+ elif line.find("torsion") == 0:
line=line.split()
dihedral.append([int(line[1]),int(line[2]),int(line[3]),int(line[4]),
float(line[5]),float(line[8]), float(line[11]), 0.0])
- elif "charge" in line and "#" not in line:
+ elif line.find("charge") == 0:
line=line.split()
- charge_temp.append([int(line[1]),float(line[2])])
- elif "imptors" in line and "#" not in line:
+ #charge_temp.append([int(line[1]),float(line[2])])
+ if (int(line[1]) <= max_atomType):
+ charge_by_type[int(line[1])] = float(line[2])
+ elif line.find("imptors") == 0:
line=line.split()
improper.append([int(line[1]), int(line[2]),
int(line[3]), int(line[4]), float(line[5]), float(line[6])])
+if len(atom) > 600:
+ sys.stderr.write("WARNING: The number of atom types in your file exceeds 600\n"
+ " (You were supposed to edit out the atoms you don't need.\n"
+ " Not doing this may crash your computer.)\n"
+ "\n"
+ " Proceed? (Y/N): ")
+ reply = sys.stdin.readline()
+ if find(reply.strip().lower(), 'y') != 0:
+ exit(0)
+
#adding the charge and Lennard Jones parameters to
#to each atom type.
#----------------------------------------------#
-i=0
-for j,x in enumerate(charge_temp):
- if x[0]==atom[i][0]:
- atom[i][3]=x[1]
- i=i+1
- #print(x[1])
-i=0
-for j,x in enumerate(vdw_temp):
- #print x
- if x[0]==atom[i][0]:
- atom[i][4]=x[1]
- atom[i][5]=x[2]
- i=i+1
-del(charge_temp)
-del(vdw_temp)
+for i in range(0,len(atom)):
+ atom_type_num = atom[i][0]
+ #q = charge_by_type.get(atomTypeNum)
+ #if q:
+ # atom[i][3] = q
+ if atom_type_num != -10000:
+ q = charge_by_type[atom_type_num]
+ atom[i][3] = q
+
+for i in range(0,len(atom)):
+ atom_type_num = atom[i][0]
+ #vdw_params = vdw_by_type.get(atomTypeNum)
+ #if vdw_params:
+ # atom[i][4] = vdw_params[0]
+ # atom[i][5] = vdw_params[1]
+ if atom_type_num != -10000:
+ vdw_params = vdw_by_type[atom_type_num]
+ atom[i][4] = vdw_params[0]
+ atom[i][5] = vdw_params[1]
+
+del(charge_by_type)
+del(vdw_by_type)
+
#----------------------------------------------------------#
#begin writing content to lt file
-g.write("OPLSAA {\n\n\n" )
+g.write("OPLSAA {\n\n" )
#write out the atom masses
#----------------------------------------------------------#
-g.write("write_once(\"Data Masses\"){\n")#checked with gaff
+g.write(" write_once(\"Data Masses\"){\n")#checked with gaff
for i,x in enumerate(atom):
- if x[0]<10000:
- g.write("@atom:{} {} #{} partial charge={}\n".format(
+ if x[0] != -10000:
+ g.write(" @atom:{} {} #{} partial charge={}\n".format(
x[0],x[2],x[6],x[3]))
-g.write("} #(end of atom masses)\n\n")
+g.write(" } #(end of atom masses)\n\n")
#----------------------------------------------------------#
#write out the pair coefficients
#----------------------------------------------------------#
-g.write("write_once(\"In Settings\"){\n")#checked with gaff
+g.write(" write_once(\"In Settings\"){\n")#checked with gaff
for i,x in enumerate(atom):
- if x[0]<10000:
- g.write("pair_coeff @atom:{0} @atom:{0} lj/cut/coul/long {1} {2}\n".format(x[0],x[5],x[4]))
-g.write("} #(end of pair coeffs)\n\n")
+ if x[0] != -10000:
+ g.write(" pair_coeff @atom:{0} @atom:{0} lj/cut/coul/long {1} {2}\n".format(x[0],x[5],x[4]))
+g.write(" } #(end of pair coeffs)\n\n")
-g.write("write_once(\"In Charges\"){\n")#checked with gaff
+g.write(" write_once(\"In Charges\"){\n")#checked with gaff
for i,x in enumerate(atom):
- if x[0]<10000:
- g.write("set type @atom:{0} charge {1}\n".format(x[0],x[3]))
-g.write("} #(end of atom charges)\n\n")
+ if x[0] != -10000:
+ g.write(" set type @atom:{0} charge {1}\n".format(x[0],x[3]))
+g.write(" } #(end of atom charges)\n\n")
#-----------------------------------------------------------#
# This part of the code creates a lookup dictionary
# that allows you to find every type of atom by its
# force field id. force field id is the id number
# relevant to bonds, angles, dihedrals, and impropers.
# This greatly increases the speed of angle, bond, dihedral
# and improper assignment.
#------------------------------------------------------------#
atom=sorted(atom,key=itemgetter(1))
atom_ffid=0
for x in atom:
if x[1]==atom_ffid:
atom_lookup[x[1]].append(x[0])
elif x[1]>atom_ffid:
atom_lookup[x[1]]=[x[0]]
atom_ffid=x[1]
atom_lookup[0]=["*"]
#-------------------------------------------------------------#
#writing out the bond coefficients and bond parameters#
#-------------------------------------------------------------#
-g.write("write_once(\"In Settings\") {\n")
+g.write(" write_once(\"In Settings\") {\n")
index1=0
for x in bond:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
- g.write("bond_coeff @bond:{}-{} harmonic {} {}\n".format(y,z,x[2]/2,x[3]))
- h.write("@bond:{0}-{1} @atom:{0} @atom:{1}\n".format(y,z))
-g.write("} #(end of bond_coeffs)\n\n")
+ g.write(" bond_coeff @bond:{}-{} harmonic {} {}\n".format(y,z,x[2]/2,x[3]))
+ h.write(" @bond:{0}-{1} @atom:{0} @atom:{1}\n".format(y,z))
+g.write(" } #(end of bond_coeffs)\n\n")
h.seek(0,0)
-g.write("write_once(\"Data Bonds By Type\") {\n")
+g.write(" write_once(\"Data Bonds By Type\") {\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of bonds by type)\n\n")
+g.write(" } #(end of bonds by type)\n\n")
del(bond)
h.close()
#-----------------------------------------------------------#
h=open("temp.txt","w+")
#writing out angle coefficients and angles by type.---------#
#-----------------------------------------------------------#
-g.write("write_once(\"Data Angles By Type\"){\n")
+g.write(" write_once(\"Data Angles By Type\"){\n")
for x in angle:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
for u in atom_lookup.get(x[2],[]):
#print(y,z,u,x)
- h.write("angle_coeff @angle:{}-{}-{} harmonic {} {}\n".format(y,z,u,
+ h.write(" angle_coeff @angle:{}-{}-{} harmonic {} {}\n".format(y,z,u,
x[3]/2.0,x[4]))
- g.write("@angle:{0}-{1}-{2} @atom:{0} @atom:{1} @atom:{2}\n".format(
+ g.write(" @angle:{0}-{1}-{2} @atom:{0} @atom:{1} @atom:{2}\n".format(
y,z,u))
-g.write("} #(end of angles by type)\n\n")
+g.write(" } #(end of angles by type)\n\n")
h.seek(0,0)
-g.write("write_once(\"In Settings\" ){\n")
+g.write(" write_once(\"In Settings\" ){\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of angle_coeffs)\n\n")
+g.write(" } #(end of angle_coeffs)\n\n")
del(angle)
h.close()
#----------------------------------------------------------#
#writing dihedrals by type and dihedral coefficients-------#
h=h=open("temp.txt","w+")
-g.write("write_once(\"Data Dihedrals By Type\") {\n")
+g.write(" write_once(\"Data Dihedrals By Type\") {\n")
#print(atom_lookup)
for x in dihedral:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
for u in atom_lookup.get(x[2],[]):
for v in atom_lookup.get(x[3],[]):
if x[0]!=0 and x[3]!=0:
- g.write("@dihedral:{0}-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ g.write(" @dihedral:{0}-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
y,z,u,v))
- h.write("dihedral_coeff @dihedral:{}-{}-{}-{} opls {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:{}-{}-{}-{} opls {} {} {} {}\n".format(
y,z,u,v,x[4],x[5],x[6],x[7]))
elif x[0]==0 and x[3]!=0:
- g.write("@dihedral:0-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ g.write(" @dihedral:0-{1}-{2}-{3} @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
y,z,u,v))
- h.write("dihedral_coeff @dihedral:0-{}-{}-{} opls {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:0-{}-{}-{} opls {} {} {} {}\n".format(
z,u,v,x[4],x[5],x[6],x[7]))
elif x[0]==0 and x[3]==0:
- g.write("@dihedral:0-{1}-{2}-0 @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
+ g.write(" @dihedral:0-{1}-{2}-0 @atom:{0} @atom:{1} @atom:{2} @atom:{3}\n".format(
y,z,u,v))
- #h.write("dihedral_coeff @dihedral:0-{}-{}-0 harmonic {} {} {} {}\n".format(
- h.write("dihedral_coeff @dihedral:0-{}-{}-0 opls {} {} {} {}\n".format(
+ #h.write(" dihedral_coeff @dihedral:0-{}-{}-0 harmonic {} {} {} {}\n".format(
+ h.write(" dihedral_coeff @dihedral:0-{}-{}-0 opls {} {} {} {}\n".format(
z,u,x[4],x[5],x[6],x[7]))
del(dihedral)
-g.write("} #(end of Dihedrals by type)\n\n")
+g.write(" } #(end of Dihedrals by type)\n\n")
h.seek(0,0)
-g.write("write_once(\"In Settings\") {\n")
+g.write(" write_once(\"In Settings\") {\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of dihedral_coeffs)\n\n")
+g.write(" } #(end of dihedral_coeffs)\n\n")
h.close()
#-----------------------------------------------------------------------#
#----writing out improper coefficients and impropers by type------------#
h=open("temp.txt","w+")
-g.write("write_once(\"Data Impropers By Type\") {\n")
+g.write(" write_once(\"Data Impropers By Type\") {\n")
for x in improper:
for y in atom_lookup.get(x[0],[]):
for z in atom_lookup.get(x[1],[]):
for u in atom_lookup.get(x[2],[]):
for v in atom_lookup.get(x[3],[]):
if x[0]==0 and x[1]==0 and x[3]==0:
- g.write("@improper:{2}-0-0-0 @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
+ g.write(" @improper:{2}-0-0-0 @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
y,z,u,v))
- h.write("improper_coeff @improper:{2}-0-0-0 harmonic {4} {5} \n".format(
+ h.write(" improper_coeff @improper:{2}-0-0-0 harmonic {4} {5} \n".format(
y,z,u,v,x[4]/2,0))
else:
- g.write("@improper:{2}-0-0-{3} @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
+ g.write(" @improper:{2}-0-0-{3} @atom:{2} @atom:{0} @atom:{1} @atom:{3}\n".format(
y,z,u,v))
- h.write("improper_coeff @improper:{2}-0-0-{3} harmonic {4} {5} \n".format(
+ h.write(" improper_coeff @improper:{2}-0-0-{3} harmonic {4} {5} \n".format(
y,z,u,v,x[4]/2,0))
-g.write("} #(end of impropers by type)\n\n")
+g.write(" } #(end of impropers by type)\n\n")
h.seek(0,0)
-g.write("write_once(\"In Settings\") {\n")
+g.write(" write_once(\"In Settings\") {\n")
for line in h.readlines():
g.write(line)
-g.write("} #(end of improp_coeffs)\n\n")
+g.write(" } #(end of improp_coeffs)\n\n")
#-----------------------------------------------------------------------#
#This section writes out the input parameters required for an opls-aa simulation
# lammps.
-g.write("write_once(\"In Init\") {\n")
-g.write("units real\n")
-g.write("atom_style full\n")
-g.write("bond_style hybrid harmonic\n")
-g.write("angle_style hybrid harmonic\n")
-g.write("dihedral_style hybrid opls\n")
-g.write("improper_style hybrid harmonic\n")
-#g.write("pair_style hybrid lj/cut/coul/cut 10.0 10.0\n")
-g.write("pair_style hybrid lj/cut/coul/long 10.0 10.0\n")
-g.write("pair_modify mix arithmetic\n")
-g.write("special_bonds lj 0.0 0.0 0.5\n")
-g.write("kspace_style pppm 0.0001\n")
-g.write("} #end of init parameters\n")
+g.write(" write_once(\"In Init\") {\n")
+g.write(" units real\n")
+g.write(" atom_style full\n")
+g.write(" bond_style hybrid harmonic\n")
+g.write(" angle_style hybrid harmonic\n")
+g.write(" dihedral_style hybrid opls\n")
+g.write(" improper_style hybrid harmonic\n")
+#g.write(" pair_style hybrid lj/cut/coul/cut 10.0 10.0\n")
+g.write(" pair_style hybrid lj/cut/coul/long 10.0 10.0\n")
+g.write(" pair_modify mix arithmetic\n")
+g.write(" special_bonds lj 0.0 0.0 0.5\n")
+g.write(" kspace_style pppm 0.0001\n")
+g.write(" } #end of init parameters\n\n")
g.write("} # OPLSAA\n")
f.close()
g.close()
h.close()
os.remove("temp.txt")
-
-
-
-
-
-
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.prm b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.prm
new file mode 100644
index 000000000..38ebf32a5
--- /dev/null
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.prm
@@ -0,0 +1,5125 @@
+# This is a modified version of the file "oplsaa.prm" distributed with TINKER
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+# In this version, all of the lines beginning with "atom" have been deleted
+# except for the atom types we will be using in this simulation
+#
+# If you use this file, please also cite the software this file comes from:
+#
+# Ponder, J. W., and Richards, F. M. J. Comput. Chem. (1987) 8(7), 1016-1024
+# "An efficient newton‐like method for molecular mechanics energy
+# minimization of large molecules."
+#
+# Ponder, J. W, (2004)
+# "TINKER: Software tools for molecular design"
+# http://dasher.wustl.edu/tinker/
+
+ ##############################
+ ## ##
+ ## Force Field Definition ##
+ ## ##
+ ##############################
+
+
+forcefield OPLS-AA
+
+vdwindex TYPE
+vdwtype LENNARD-JONES
+radiusrule GEOMETRIC
+radiustype SIGMA
+radiussize DIAMETER
+epsilonrule GEOMETRIC
+torsionunit 0.5
+imptorunit 0.5
+vdw-14-scale 2.0
+chg-14-scale 2.0
+electric 332.06
+dielectric 1.0
+
+
+ #############################
+ ## ##
+ ## Literature References ##
+ ## ##
+ #############################
+
+
+The parameters supplied with TINKER are from "OPLS All-Atom Parameters
+for Organic Molecules, Ions, Peptides & Nucleic Acids, July 2008" as
+provided by W. L. Jorgensen, Yale University during June 2009. These
+parameters are taken from those distributed with BOSS Version 4.8.
+
+Note that "atom type" numbers and not "atom class" numbers are used
+to index van der Waals parameters, see the "vdwindex" keyword above
+
+The atom types with (UA) in the description are "united atom" values,
+ie, OPLS-UA, where any nonpolar hydrogen atoms are combined onto their
+attached atoms. All other parameters are "all-atom", OPLS-AA, including
+explicit hydrogen atoms.
+
+
+ #############################
+ ## ##
+ ## Atom Type Definitions ##
+ ## ##
+ #############################
+
+
+atom 88 47 CM "Alkene H2-C=" 6 12.011 3
+atom 89 46 HC "Alkene H-C=" 1 1.008 1
+
+
+ ################################
+ ## ##
+ ## Van der Waals Parameters ##
+ ## ##
+ ################################
+
+
+vdw 1 2.9400 0.0610
+vdw 2 3.9050 0.1180
+vdw 3 3.7500 0.1050
+vdw 4 2.9600 0.2100
+vdw 5 3.0000 0.1700
+vdw 6 3.9100 0.1600
+vdw 7 0.0000 0.0000
+vdw 8 3.7300 0.2940
+vdw 9 3.7750 0.2070
+vdw 10 3.9050 0.1750
+vdw 11 3.9100 0.1600
+vdw 12 3.9600 0.1450
+vdw 13 3.9050 0.1180
+vdw 14 3.8500 0.1400
+vdw 15 3.8500 0.0800
+vdw 16 3.8000 0.1150
+vdw 17 3.7500 0.1100
+vdw 18 3.8000 0.0500
+vdw 19 3.7500 0.1050
+vdw 20 3.0700 0.1700
+vdw 21 0.0000 0.0000
+vdw 22 3.7750 0.2070
+vdw 23 3.9050 0.1180
+vdw 24 3.7000 0.2500
+vdw 25 3.5500 0.2500
+vdw 26 3.5500 0.2500
+vdw 27 3.5500 0.2500
+vdw 28 0.0000 0.0000
+vdw 29 0.0000 0.0000
+vdw 30 3.7750 0.2070
+vdw 31 3.9050 0.1180
+vdw 32 3.8000 0.1700
+vdw 33 3.8000 0.1180
+vdw 34 3.8000 0.1700
+vdw 35 3.8000 0.1180
+vdw 36 3.2000 0.1700
+vdw 37 3.6500 0.1500
+vdw 38 3.7750 0.2070
+vdw 39 3.8500 0.0800
+vdw 40 3.8000 0.0500
+vdw 41 3.0000 0.1700
+vdw 42 3.8000 0.1700
+vdw 43 3.8000 0.1180
+vdw 44 3.8000 0.1180
+vdw 45 3.4000 0.3000
+vdw 46 3.8000 0.0800
+vdw 47 3.4700 0.3000
+vdw 48 3.8000 0.0500
+vdw 49 3.4700 0.2660
+vdw 50 3.5600 0.3950
+vdw 51 2.9300 0.2800
+vdw 52 3.8100 0.1600
+vdw 53 2.9600 0.2100
+vdw 54 3.2500 0.1700
+vdw 55 3.8000 0.1150
+vdw 56 3.8000 0.1700
+vdw 57 0.0000 0.0000
+vdw 58 2.5560 0.0200
+vdw 59 2.7800 0.0690
+vdw 60 3.4010 0.2339
+vdw 61 3.6240 0.3170
+vdw 62 3.9350 0.4330
+vdw 63 3.15061 0.1521
+vdw 64 0.0000 0.0000
+vdw 65 3.15365 0.1550
+vdw 66 0.0000 0.0000
+vdw 67 0.0000 0.0000
+vdw 68 3.1760 0.1500
+vdw 69 0.0000 0.0000
+vdw 70 3.2700 0.1000
+vdw 71 0.0000 0.0000
+vdw 72 0.0000 0.0000
+vdw 73 3.1200 0.1600
+vdw 74 0.0000 0.0000
+vdw 75 0.0000 0.0000
+vdw 76 3.16557 0.1554
+vdw 77 0.0000 0.0000
+vdw 78 3.4200 0.1700
+vdw 79 0.0000 0.0000
+vdw 80 3.5000 0.0660
+vdw 81 3.5000 0.0660
+vdw 82 3.5000 0.0660
+vdw 83 3.5000 0.0660
+vdw 84 3.5000 0.0660
+vdw 85 2.5000 0.0300
+vdw 86 3.5500 0.0760
+vdw 87 3.5500 0.0760
+vdw 88 3.5500 0.0760
+vdw 89 2.4200 0.0300
+vdw 90 3.5500 0.0700
+vdw 91 2.4200 0.0300
+vdw 92 3.5500 0.0700
+vdw 93 3.5000 0.0660
+vdw 94 3.5000 0.0660
+vdw 95 3.5500 0.0760
+vdw 96 3.1200 0.1700
+vdw 97 0.0000 0.0000
+vdw 98 2.5000 0.0300
+vdw 99 3.5000 0.0660
+vdw 100 3.5000 0.0660
+vdw 101 3.5000 0.0660
+vdw 102 3.5000 0.0660
+vdw 103 3.2500 0.0620
+vdw 104 3.0700 0.1700
+vdw 105 0.0000 0.0000
+vdw 106 2.9400 0.0610
+vdw 107 2.5000 0.0300
+vdw 108 3.5500 0.0700
+vdw 109 3.0700 0.1700
+vdw 110 0.0000 0.0000
+vdw 111 3.0700 0.1700
+vdw 112 0.0000 0.0000
+vdw 113 3.0700 0.1700
+vdw 114 0.0000 0.0000
+vdw 115 3.5000 0.0660
+vdw 116 3.5000 0.0660
+vdw 117 3.5000 0.0660
+vdw 118 2.5000 0.0300
+vdw 119 2.9000 0.1400
+vdw 120 3.5500 0.0760
+vdw 121 2.9000 0.1400
+vdw 122 2.9000 0.1400
+vdw 123 3.5000 0.0660
+vdw 124 3.5000 0.0660
+vdw 125 3.5000 0.0660
+vdw 126 3.5000 0.0660
+vdw 127 2.5000 0.0300
+vdw 128 2.9000 0.1400
+vdw 129 3.0700 0.1700
+vdw 130 0.0000 0.0000
+vdw 131 3.5000 0.0660
+vdw 132 2.5000 0.0300
+vdw 133 3.5000 0.0660
+vdw 134 2.5000 0.0300
+vdw 135 3.5000 0.0660
+vdw 136 2.5000 0.0300
+vdw 137 3.5000 0.0660
+vdw 138 2.5000 0.0300
+vdw 139 3.5000 0.0660
+vdw 140 3.5000 0.0660
+vdw 141 3.5500 0.0700
+vdw 142 3.5500 0.2500
+vdw 143 3.7000 0.2500
+vdw 144 3.5500 0.2500
+vdw 145 3.5500 0.2500
+vdw 146 0.0000 0.0000
+vdw 147 0.0000 0.0000
+vdw 148 3.5000 0.0660
+vdw 149 3.5000 0.0660
+vdw 150 3.5000 0.0660
+vdw 151 3.5000 0.0660
+vdw 152 3.5000 0.0660
+vdw 153 3.5000 0.0660
+vdw 154 3.5000 0.0660
+vdw 155 3.5000 0.0660
+vdw 156 3.5000 0.0660
+vdw 157 3.5000 0.0660
+vdw 158 3.5000 0.0660
+vdw 159 3.5000 0.0660
+vdw 160 3.5000 0.0660
+vdw 161 3.5000 0.0660
+vdw 162 3.5000 0.0660
+vdw 163 3.5500 0.0700
+vdw 164 3.5500 0.2500
+vdw 165 3.5000 0.0660
+vdw 166 3.5000 0.0660
+vdw 167 3.5000 0.0660
+vdw 168 3.4000 0.3000
+vdw 169 3.5500 0.0760
+vdw 170 3.5500 0.0700
+vdw 171 3.5000 0.0660
+vdw 172 3.5000 0.0660
+vdw 173 3.7500 0.1050
+vdw 174 3.7500 0.1050
+vdw 175 3.7500 0.1050
+vdw 176 3.7500 0.1050
+vdw 177 3.7500 0.1050
+vdw 178 2.9600 0.2100
+vdw 179 3.2500 0.1700
+vdw 180 3.2500 0.1700
+vdw 181 3.2500 0.1700
+vdw 182 0.0000 0.0000
+vdw 183 0.0000 0.0000
+vdw 184 3.5000 0.0660
+vdw 185 3.5000 0.0660
+vdw 186 3.5000 0.0660
+vdw 187 3.5000 0.0660
+vdw 188 3.5000 0.0660
+vdw 189 3.7500 0.1050
+vdw 190 2.9600 0.2100
+vdw 191 3.2500 0.1700
+vdw 192 0.0000 0.0000
+vdw 193 3.2500 0.1700
+vdw 194 3.7500 0.1050
+vdw 195 2.9600 0.2100
+vdw 196 0.0000 0.0000
+vdw 197 2.5000 0.0200
+vdw 198 3.5000 0.0660
+vdw 199 3.5000 0.0660
+vdw 200 3.5000 0.0660
+vdw 201 3.5000 0.0660
+vdw 202 3.5500 0.0700
+vdw 203 3.6500 0.1500
+vdw 204 3.2000 0.1700
+vdw 205 3.5500 0.0700
+vdw 206 3.4000 0.3000
+vdw 207 3.2500 0.1700
+vdw 208 3.5500 0.0700
+vdw 209 3.7500 0.1050
+vdw 210 2.9600 0.2100
+vdw 211 3.0000 0.1700
+vdw 212 0.0000 0.0000
+vdw 213 3.7500 0.1050
+vdw 214 2.9600 0.2100
+vdw 215 3.5000 0.0660
+vdw 216 3.5000 0.0660
+vdw 217 3.5000 0.0660
+vdw 218 3.5000 0.0660
+vdw 219 3.7500 0.1050
+vdw 220 2.9600 0.2100
+vdw 221 2.4200 0.0150
+vdw 222 3.7500 0.1050
+vdw 223 2.9600 0.2100
+vdw 224 2.4200 0.0150
+vdw 225 3.5000 0.0660
+vdw 226 3.5000 0.0660
+vdw 227 3.5000 0.0660
+vdw 228 3.5000 0.0660
+vdw 229 3.2500 0.1700
+vdw 230 3.2500 0.1700
+vdw 231 3.2500 0.1700
+vdw 232 0.0000 0.0000
+vdw 233 0.0000 0.0000
+vdw 234 3.5000 0.0660
+vdw 235 3.5000 0.0660
+vdw 236 3.5000 0.0660
+vdw 237 3.5000 0.0660
+vdw 238 3.5000 0.0660
+vdw 239 3.5000 0.0660
+vdw 240 3.5000 0.0660
+vdw 241 3.5000 0.0660
+vdw 242 3.5000 0.0660
+vdw 243 3.2500 0.1700
+vdw 244 0.0000 0.0000
+vdw 245 3.5500 0.0500
+vdw 246 3.2500 0.1700
+vdw 247 0.0000 0.0000
+vdw 248 3.5000 0.0660
+vdw 249 3.5000 0.0660
+vdw 250 3.5000 0.0660
+vdw 251 3.5000 0.0660
+vdw 252 3.2500 0.1700
+vdw 253 0.0000 0.0000
+vdw 254 3.2500 0.1700
+vdw 255 3.5000 0.0800
+vdw 256 3.2500 0.1700
+vdw 257 0.0000 0.0000
+vdw 258 3.5000 0.0800
+vdw 259 2.5000 0.0500
+vdw 260 3.5000 0.0800
+vdw 261 2.5000 0.0500
+vdw 262 3.2500 0.1700
+vdw 263 3.7500 0.1050
+vdw 264 3.2500 0.1700
+vdw 265 3.7500 0.1050
+vdw 266 3.5000 0.0800
+vdw 267 3.5000 0.0800
+vdw 268 0.0000 0.0000
+vdw 269 2.9600 0.2100
+vdw 270 0.0000 0.0000
+vdw 271 2.9600 0.2100
+vdw 272 2.5000 0.0500
+vdw 273 2.5000 0.0500
+vdw 274 3.5000 0.0800
+vdw 275 2.5000 0.0500
+vdw 276 3.2500 0.1700
+vdw 277 3.7500 0.1050
+vdw 278 3.2500 0.1700
+vdw 279 3.5000 0.0800
+vdw 280 3.5000 0.0800
+vdw 281 3.5000 0.0800
+vdw 282 0.0000 0.0000
+vdw 283 2.9600 0.2100
+vdw 284 3.2500 0.1700
+vdw 285 0.0000 0.0000
+vdw 286 0.0000 0.0000
+vdw 287 2.5000 0.0500
+vdw 288 2.5000 0.0500
+vdw 289 3.2500 0.1700
+vdw 290 3.5000 0.0800
+vdw 291 3.2500 0.1700
+vdw 292 3.5000 0.0800
+vdw 293 3.5000 0.0800
+vdw 294 3.5000 0.0800
+vdw 295 3.2500 0.1700
+vdw 296 3.5000 0.0800
+vdw 297 3.2500 0.1700
+vdw 298 2.5000 0.0500
+vdw 299 3.2500 0.1700
+vdw 300 0.0000 0.0000
+vdw 301 0.0000 0.0000
+vdw 302 2.5000 0.0500
+vdw 303 0.0000 0.0000
+vdw 304 3.2500 0.1700
+vdw 305 3.5000 0.0800
+vdw 306 3.2500 0.1700
+vdw 307 3.5000 0.0800
+vdw 308 3.5000 0.0800
+vdw 309 3.7500 0.1050
+vdw 310 0.0000 0.0000
+vdw 311 3.2500 0.1700
+vdw 312 0.0000 0.0000
+vdw 313 2.9600 0.2100
+vdw 314 3.5000 0.0800
+vdw 315 2.5000 0.0500
+vdw 316 3.5000 0.0800
+vdw 317 2.5000 0.0500
+vdw 318 3.5000 0.0800
+vdw 319 2.5000 0.0500
+vdw 320 3.2500 0.1700
+vdw 321 3.7500 0.1050
+vdw 322 3.2500 0.1700
+vdw 323 3.5000 0.0800
+vdw 324 3.5000 0.0800
+vdw 325 3.5000 0.0800
+vdw 326 0.0000 0.0000
+vdw 327 2.9600 0.2100
+vdw 328 0.0000 0.0000
+vdw 329 3.2500 0.1700
+vdw 330 0.0000 0.0000
+vdw 331 0.0000 0.0000
+vdw 332 2.5000 0.0500
+vdw 333 2.5000 0.0500
+vdw 334 3.5000 0.0800
+vdw 335 2.5000 0.0500
+vdw 336 3.7400 0.2000
+vdw 337 2.9600 0.2100
+vdw 338 3.0000 0.1700
+vdw 339 3.5500 0.0660
+vdw 340 3.5000 0.0800
+vdw 341 3.4000 0.3000
+vdw 342 3.5500 0.0760
+vdw 343 3.0500 0.7100
+vdw 344 4.0200 0.7100
+vdw 345 4.2800 0.7100
+vdw 346 4.8100 0.7100
+vdw 347 5.3400 0.0005
+vdw 348 2.8700 0.0005
+vdw 349 4.0700 0.0005
+vdw 350 5.1700 0.0005
+vdw 351 5.6000 0.0005
+vdw 352 6.2000 0.0005
+vdw 353 1.644471 0.875044
+vdw 354 2.412031 0.449657
+vdw 355 3.102688 0.118226
+vdw 356 3.816610 0.047096
+vdw 357 4.2000 0.3000
+vdw 358 2.5000 0.0500
+vdw 359 4.2500 0.5000
+vdw 360 4.2000 0.3000
+vdw 361 2.5000 0.0500
+vdw 362 3.1500 0.2500
+vdw 363 4.2000 0.3000
+vdw 364 2.5000 0.0500
+vdw 365 3.6500 0.1500
+vdw 366 3.4000 0.2500
+vdw 367 4.2000 0.3000
+vdw 368 2.5000 0.0500
+vdw 369 3.4000 0.2500
+vdw 370 2.5000 0.0500
+vdw 371 4.2000 0.3000
+vdw 372 2.5000 0.0500
+vdw 373 4.2000 0.3000
+vdw 374 2.5000 0.0500
+vdw 375 0.0000 0.0000
+vdw 376 3.2000 0.2500
+vdw 377 0.0000 0.0000
+vdw 378 2.81524 0.4000
+vdw 379 3.11815 0.2000
+vdw 380 2.9000 0.1400
+vdw 381 3.7400 0.2000
+vdw 382 3.1500 0.2000
+vdw 383 2.9000 0.1400
+vdw 384 3.5000 0.0660
+vdw 385 2.5000 0.0300
+vdw 386 3.7400 0.2000
+vdw 387 3.1500 0.2000
+vdw 388 2.9000 0.1400
+vdw 389 3.5000 0.0660
+vdw 390 2.5000 0.0300
+vdw 391 3.7400 0.2000
+vdw 392 3.1500 0.2000
+vdw 393 2.9000 0.1400
+vdw 394 3.5000 0.0660
+vdw 395 2.5000 0.0300
+vdw 396 3.5000 0.0660
+vdw 397 2.5000 0.0300
+vdw 398 3.5500 0.0700
+vdw 399 3.5000 0.0660
+vdw 400 2.5000 0.0300
+vdw 401 3.5500 0.0700
+vdw 402 3.5000 0.0660
+vdw 403 2.5000 0.0300
+vdw 404 3.5500 0.0700
+vdw 405 3.5000 0.0660
+vdw 406 3.7500 0.1050
+vdw 407 2.9600 0.2100
+vdw 408 3.0000 0.1700
+vdw 409 3.5000 0.0660
+vdw 410 2.4200 0.0150
+vdw 411 3.7500 0.1050
+vdw 412 3.7500 0.1050
+vdw 413 3.5500 0.0700
+vdw 414 3.0000 0.1700
+vdw 415 3.5500 0.2500
+vdw 416 2.9600 0.1700
+vdw 417 3.5000 0.0660
+vdw 418 2.5000 0.0300
+vdw 419 3.2500 0.1700
+vdw 420 0.0000 0.0000
+vdw 421 3.2500 0.1700
+vdw 422 0.0000 0.0000
+vdw 423 3.5000 0.0660
+vdw 424 2.5000 0.0300
+vdw 425 3.5000 0.0660
+vdw 426 2.5000 0.0300
+vdw 427 3.5000 0.0660
+vdw 428 2.5000 0.0300
+vdw 429 3.5500 0.0700
+vdw 430 3.5500 0.0700
+vdw 431 3.5000 0.0660
+vdw 432 3.5000 0.0660
+vdw 433 3.5000 0.0660
+vdw 434 3.5500 0.2500
+vdw 435 2.9600 0.1700
+vdw 436 3.5600 0.3950
+vdw 437 3.5600 0.3950
+vdw 438 2.9300 0.2800
+vdw 439 3.5000 0.0660
+vdw 440 3.5000 0.0660
+vdw 441 3.5500 0.0700
+vdw 442 3.5500 0.0700
+vdw 443 3.5500 0.0700
+vdw 444 3.2500 0.1700
+vdw 445 0.0000 0.0000
+vdw 446 3.5000 0.0660
+vdw 447 3.5500 0.0700
+vdw 448 3.5500 0.0700
+vdw 449 3.5500 0.0700
+vdw 450 3.5500 0.0700
+vdw 451 3.5500 0.0700
+vdw 452 3.2500 0.1700
+vdw 453 3.2500 0.1700
+vdw 454 0.0000 0.0000
+vdw 455 3.5500 0.0700
+vdw 456 3.5000 0.0660
+vdw 457 3.5000 0.0660
+vdw 458 3.5500 0.0760
+vdw 459 3.5500 0.0760
+vdw 460 3.5500 0.0700
+vdw 461 3.2500 0.1700
+vdw 462 3.5500 0.0700
+vdw 463 3.5500 0.0700
+vdw 464 3.5500 0.0700
+vdw 465 2.4200 0.0300
+vdw 466 2.4200 0.0300
+vdw 467 2.4200 0.0300
+vdw 468 3.2500 0.1700
+vdw 469 3.5500 0.0700
+vdw 470 2.4200 0.0300
+vdw 471 3.2500 0.1700
+vdw 472 3.5500 0.0700
+vdw 473 3.5500 0.0700
+vdw 474 3.5500 0.0700
+vdw 475 2.4200 0.0300
+vdw 476 2.4200 0.0300
+vdw 477 2.4200 0.0300
+vdw 478 3.2500 0.1700
+vdw 479 3.5500 0.0700
+vdw 480 3.5500 0.0700
+vdw 481 2.4200 0.0300
+vdw 482 2.4200 0.0300
+vdw 483 3.2500 0.1700
+vdw 484 3.5500 0.0700
+vdw 485 3.5500 0.0700
+vdw 486 0.0000 0.0000
+vdw 487 2.4200 0.0300
+vdw 488 2.4200 0.0300
+vdw 489 3.2500 0.1700
+vdw 490 3.2500 0.1700
+vdw 491 3.5500 0.0700
+vdw 492 3.5500 0.0700
+vdw 493 3.5500 0.0700
+vdw 494 0.0000 0.0000
+vdw 495 2.4200 0.0300
+vdw 496 2.4200 0.0300
+vdw 497 2.4200 0.0300
+vdw 498 3.2500 0.1700
+vdw 499 3.5500 0.0700
+vdw 500 3.2500 0.1700
+vdw 501 3.5500 0.0700
+vdw 502 3.5500 0.0700
+vdw 503 0.0000 0.0000
+vdw 504 2.4200 0.0300
+vdw 505 2.4200 0.0300
+vdw 506 2.4200 0.0300
+vdw 507 2.9000 0.1400
+vdw 508 3.5500 0.0700
+vdw 509 3.5500 0.0760
+vdw 510 2.4200 0.0300
+vdw 511 2.4200 0.0300
+vdw 512 2.9000 0.1400
+vdw 513 3.5500 0.0700
+vdw 514 3.2500 0.1700
+vdw 515 3.5500 0.0700
+vdw 516 3.5500 0.0700
+vdw 517 2.4200 0.0300
+vdw 518 2.4200 0.0300
+vdw 519 2.4200 0.0300
+vdw 520 2.9000 0.1400
+vdw 521 3.2500 0.1700
+vdw 522 3.5500 0.0700
+vdw 523 3.5500 0.0700
+vdw 524 3.5500 0.0700
+vdw 525 2.4200 0.0300
+vdw 526 2.4200 0.0300
+vdw 527 2.4200 0.0300
+vdw 528 3.2500 0.1700
+vdw 529 3.5500 0.0700
+vdw 530 3.5500 0.0700
+vdw 531 3.5500 0.0700
+vdw 532 3.5500 0.0700
+vdw 533 3.5500 0.0700
+vdw 534 3.5500 0.0700
+vdw 535 3.5500 0.0700
+vdw 536 3.5500 0.0700
+vdw 537 0.0000 0.0000
+vdw 538 2.4200 0.0300
+vdw 539 2.4200 0.0300
+vdw 540 2.4200 0.0300
+vdw 541 2.4200 0.0300
+vdw 542 2.4200 0.0300
+vdw 543 2.4200 0.0300
+vdw 544 3.2500 0.1700
+vdw 545 3.5500 0.0700
+vdw 546 3.5500 0.0700
+vdw 547 3.5500 0.0700
+vdw 548 3.5500 0.0700
+vdw 549 3.5500 0.0700
+vdw 550 3.5500 0.0700
+vdw 551 3.5500 0.0700
+vdw 552 3.5500 0.0700
+vdw 553 3.5500 0.0700
+vdw 554 2.4200 0.0300
+vdw 555 2.4200 0.0300
+vdw 556 2.4200 0.0300
+vdw 557 2.4200 0.0300
+vdw 558 2.4200 0.0300
+vdw 559 2.4200 0.0300
+vdw 560 2.4200 0.0300
+vdw 561 3.2500 0.1700
+vdw 562 3.5500 0.0700
+vdw 563 3.2500 0.1700
+vdw 564 3.5500 0.0700
+vdw 565 3.5500 0.0700
+vdw 566 3.5500 0.0700
+vdw 567 3.2500 0.1700
+vdw 568 3.5500 0.0700
+vdw 569 3.2500 0.1700
+vdw 570 2.4200 0.0300
+vdw 571 2.4200 0.0300
+vdw 572 2.4200 0.0300
+vdw 573 0.0000 0.0000
+vdw 574 3.5500 0.2500
+vdw 575 3.5500 0.0700
+vdw 576 3.2500 0.1700
+vdw 577 3.5500 0.0700
+vdw 578 3.5500 0.0700
+vdw 579 2.4200 0.0300
+vdw 580 2.4200 0.0300
+vdw 581 2.4200 0.0300
+vdw 582 3.2500 0.1700
+vdw 583 3.5500 0.0700
+vdw 584 2.4200 0.0300
+vdw 585 3.5500 0.0700
+vdw 586 3.5000 0.0660
+vdw 587 3.2500 0.1700
+vdw 588 3.5500 0.0700
+vdw 589 3.5500 0.0700
+vdw 590 3.5500 0.0700
+vdw 591 3.5500 0.0700
+vdw 592 3.5500 0.0700
+vdw 593 3.5500 0.0700
+vdw 594 2.4200 0.0300
+vdw 595 2.4200 0.0300
+vdw 596 2.4200 0.0300
+vdw 597 2.4200 0.0300
+vdw 598 3.2500 0.1700
+vdw 599 3.5500 0.0700
+vdw 600 3.2500 0.1700
+vdw 601 3.5500 0.0700
+vdw 602 3.5500 0.0700
+vdw 603 3.5000 0.0660
+vdw 604 2.4200 0.0300
+vdw 605 2.4200 0.0300
+vdw 606 2.4200 0.0300
+vdw 607 2.5000 0.0300
+vdw 608 3.5000 0.0660
+vdw 609 3.5000 0.0660
+vdw 610 3.5000 0.0660
+vdw 611 3.5000 0.0660
+vdw 612 3.5000 0.0660
+vdw 613 3.5000 0.0660
+vdw 614 3.5000 0.0660
+vdw 615 3.5000 0.0660
+vdw 616 3.5000 0.0660
+vdw 617 3.5000 0.0660
+vdw 618 3.5000 0.0660
+vdw 619 3.5000 0.0660
+vdw 620 3.5000 0.0660
+vdw 621 3.5000 0.0660
+vdw 622 3.5000 0.0660
+vdw 623 3.5500 0.2500
+vdw 624 0.0000 0.0000
+vdw 625 3.5500 0.0700
+vdw 626 3.7500 0.1050
+vdw 627 3.2500 0.1700
+vdw 628 3.5000 0.0660
+vdw 629 3.5000 0.0660
+vdw 630 3.5000 0.0660
+vdw 631 3.5500 0.0700
+vdw 632 3.5500 0.0700
+vdw 633 3.5500 0.0700
+vdw 634 3.5500 0.0700
+vdw 635 3.5500 0.0700
+vdw 636 3.5500 0.0700
+vdw 637 3.5500 0.2500
+vdw 638 3.4730 0.0540
+vdw 639 3.3000 0.0500
+vdw 640 3.3000 0.0500
+vdw 641 3.5500 0.0760
+vdw 642 3.5000 0.0660
+vdw 643 2.5000 0.0300
+vdw 644 3.7500 0.0600
+vdw 645 3.4730 0.0540
+vdw 646 3.3000 0.0500
+vdw 647 3.3000 0.0500
+vdw 648 2.9500 0.0400
+vdw 649 3.5500 0.0760
+vdw 650 3.4000 0.3000
+vdw 651 2.4200 0.0300
+vdw 652 3.5000 0.0660
+vdw 653 3.5000 0.0660
+vdw 654 3.5000 0.0660
+vdw 655 3.5500 0.0700
+vdw 656 2.4200 0.0300
+vdw 657 3.5500 0.0700
+vdw 658 2.4200 0.0300
+vdw 659 3.5500 0.0700
+vdw 660 2.8500 0.0610
+vdw 661 3.5500 0.0700
+vdw 662 2.8500 0.0610
+vdw 663 3.4700 0.4700
+vdw 664 3.9050 0.1180
+vdw 665 3.5500 0.0700
+vdw 666 3.2500 0.0620
+vdw 667 2.9400 0.0610
+vdw 668 3.5500 0.0700
+vdw 669 2.8500 0.0610
+vdw 670 3.5500 0.0700
+vdw 671 3.4700 0.4700
+vdw 672 3.5500 0.0700
+vdw 673 3.7500 0.6000
+vdw 674 3.5000 0.0660
+vdw 675 3.5500 0.2500
+vdw 676 3.5500 0.0700
+vdw 677 3.5500 0.0700
+vdw 678 3.5500 0.0700
+vdw 679 3.5500 0.0700
+vdw 680 3.5500 0.0700
+vdw 681 2.4200 0.0300
+vdw 682 2.4200 0.0300
+vdw 683 3.5500 0.0500
+vdw 684 3.2500 0.1700
+vdw 685 0.0000 0.0000
+vdw 686 0.0000 0.0000
+vdw 687 2.4200 0.0300
+vdw 688 3.5000 0.0660
+vdw 689 3.5000 0.0660
+vdw 690 3.2500 0.1700
+vdw 691 3.2500 0.1700
+vdw 692 3.2500 0.1700
+vdw 693 3.5500 0.0500
+vdw 694 3.2000 0.1700
+vdw 695 3.3000 0.0660
+vdw 696 3.3000 0.0660
+vdw 697 3.3000 0.0660
+vdw 698 3.3000 0.0660
+vdw 699 3.3000 0.0660
+vdw 700 2.5000 0.0150
+vdw 701 3.2500 0.1200
+vdw 702 2.9600 0.1700
+vdw 703 3.5000 0.0660
+vdw 704 2.5000 0.0150
+vdw 705 3.5000 0.0660
+vdw 706 3.5000 0.0660
+vdw 707 3.5000 0.0660
+vdw 708 3.2500 0.1200
+vdw 709 3.5500 0.0700
+vdw 710 3.3000 0.0660
+vdw 711 3.2500 0.1700
+vdw 712 2.9600 0.2100
+vdw 713 3.7500 0.1050
+vdw 714 3.0000 0.1700
+vdw 715 3.5000 0.0660
+vdw 716 3.5000 0.0660
+vdw 717 3.5000 0.0660
+vdw 718 2.4200 0.0150
+vdw 719 2.4200 0.0150
+vdw 720 2.4200 0.0150
+vdw 721 2.9000 0.1400
+vdw 722 3.7400 0.2000
+vdw 723 3.5000 0.0660
+vdw 724 3.5000 0.0660
+vdw 725 2.5000 0.0300
+vdw 726 3.7400 0.2000
+vdw 727 3.1181 0.0610
+vdw 728 3.1500 0.1700
+vdw 729 2.8600 0.2100
+vdw 730 3.3000 0.1700
+vdw 731 3.3000 0.1700
+vdw 732 3.3000 0.1700
+vdw 733 3.5000 0.0660
+vdw 734 3.5000 0.0660
+vdw 735 3.5000 0.0660
+vdw 736 3.5000 0.0660
+vdw 737 3.5000 0.0660
+vdw 738 3.5000 0.0660
+vdw 739 0.0000 0.0000
+vdw 740 0.0000 0.0000
+vdw 741 2.5000 0.0150
+vdw 742 3.5000 0.0660
+vdw 743 3.5000 0.0660
+vdw 744 3.5000 0.0660
+vdw 745 3.5000 0.0660
+vdw 746 3.5500 0.0700
+vdw 747 3.5500 0.0700
+vdw 748 3.5500 0.0700
+vdw 749 3.5000 0.0660
+vdw 750 3.5000 0.0660
+vdw 751 3.5000 0.0660
+vdw 752 3.5000 0.0660
+vdw 753 3.5000 0.0660
+vdw 754 3.5000 0.0660
+vdw 755 3.3000 0.0860
+vdw 756 2.4200 0.0150
+vdw 757 3.3000 0.2100
+vdw 758 3.3000 0.1350
+vdw 759 3.3000 0.1000
+vdw 760 2.5000 0.0150
+vdw 761 3.5000 0.0660
+vdw 762 3.5000 0.0660
+vdw 763 3.5000 0.0660
+vdw 764 3.1200 0.1700
+vdw 765 0.0000 0.0000
+vdw 766 3.2500 0.1700
+vdw 767 3.2500 0.1700
+vdw 768 3.2500 0.1700
+vdw 769 3.3000 0.2100
+vdw 770 3.2500 0.1700
+vdw 771 0.0000 0.0000
+vdw 772 3.5000 0.0660
+vdw 773 3.5000 0.0660
+vdw 774 3.5000 0.0660
+vdw 775 3.5000 0.0660
+vdw 776 3.5500 0.0700
+vdw 777 3.5500 0.0760
+vdw 778 3.5500 0.0700
+vdw 779 3.5500 0.0700
+vdw 780 2.5000 0.0300
+vdw 781 3.5000 0.0660
+vdw 782 3.7500 0.1050
+vdw 783 3.2500 0.1700
+vdw 784 2.9600 0.2100
+vdw 785 0.0000 0.0000
+vdw 786 2.9400 0.0610
+vdw 787 3.5000 0.0660
+vdw 788 2.5000 0.0300
+vdw 789 3.5000 0.0660
+vdw 790 3.5000 0.0660
+vdw 791 3.5000 0.0660
+vdw 792 3.5000 0.0660
+vdw 793 3.5000 0.0660
+vdw 794 3.5000 0.0970
+vdw 795 2.9500 0.0530
+vdw 796 3.2500 0.0620
+vdw 797 2.5000 0.0300
+vdw 798 3.5000 0.0660
+vdw 799 3.5000 0.0660
+vdw 800 3.4000 0.3000
+vdw 801 3.5000 0.0660
+vdw 802 2.5000 0.0300
+vdw 803 3.5000 0.0660
+vdw 804 3.5000 0.0660
+vdw 805 3.4700 0.4700
+vdw 806 3.5000 0.0660
+vdw 807 2.5000 0.0300
+vdw 808 3.5000 0.0660
+vdw 809 3.5000 0.0660
+vdw 810 2.9400 0.0610
+vdw 811 3.4000 0.3000
+vdw 812 3.4700 0.4700
+vdw 813 3.5500 0.0700
+vdw 814 2.9000 0.1400
+vdw 815 3.5000 0.0660
+vdw 816 2.9000 0.0600
+vdw 817 3.2500 0.1700
+vdw 818 3.5500 0.0700
+vdw 819 3.5000 0.0660
+vdw 820 3.7500 0.1050
+vdw 821 3.7500 0.1050
+vdw 822 2.9600 0.2100
+vdw 823 3.2500 0.1700
+vdw 824 0.0000 0.0000
+vdw 825 3.1200 0.1700
+vdw 826 0.0000 0.0000
+vdw 827 3.5000 0.0660
+vdw 828 3.5000 0.0660
+vdw 829 3.5500 0.0700
+vdw 830 3.5500 0.0700
+vdw 831 3.5500 0.0700
+vdw 832 3.5500 0.0700
+vdw 833 3.5500 0.0700
+vdw 834 1.9600 0.0125
+vdw 835 3.5000 0.0660
+vdw 836 3.5000 0.0660
+vdw 837 3.5000 0.0660
+vdw 838 3.7500 0.6000
+vdw 839 2.5000 0.0300
+vdw 840 3.2500 0.1700
+vdw 841 3.5500 0.0700
+vdw 842 3.5500 0.0700
+vdw 843 3.2500 0.1700
+vdw 844 3.5500 0.0700
+vdw 845 3.7500 0.1050
+vdw 846 2.9600 0.2100
+vdw 847 3.2500 0.1700
+vdw 848 3.5000 0.0660
+vdw 849 3.5000 0.0660
+vdw 850 3.5000 0.0660
+vdw 851 3.5000 0.0660
+vdw 852 2.4200 0.0150
+vdw 853 3.7500 0.1050
+vdw 854 2.9600 0.2100
+vdw 855 2.4200 0.0150
+vdw 856 3.5000 0.0660
+vdw 857 3.5000 0.0660
+vdw 858 3.5000 0.0660
+vdw 859 3.5000 0.0660
+vdw 860 3.5000 0.0660
+vdw 861 3.5000 0.0660
+vdw 862 3.5000 0.0660
+vdw 863 3.5000 0.0660
+vdw 864 3.5000 0.0660
+vdw 865 3.5000 0.0660
+vdw 866 4.0000 0.1000
+vdw 867 4.0000 0.1000
+vdw 868 4.0000 0.1000
+vdw 869 4.0000 0.1000
+vdw 870 2.5000 0.0300
+vdw 871 3.5000 0.0660
+vdw 872 3.5000 0.0660
+vdw 873 3.5000 0.0660
+vdw 874 3.5000 0.0660
+vdw 875 3.0800 0.7200
+vdw 876 4.1800 0.11779
+vdw 877 4.5100 0.0900
+vdw 878 5.1500 0.0700
+vdw 879 2.7000 0.018279
+vdw 880 3.3500 0.002772
+vdw 881 4.0600 0.000328
+vdw 882 4.3200 0.000171
+vdw 883 4.8200 0.000081
+vdw 884 2.9100 0.875044
+vdw 885 3.4700 0.449657
+vdw 886 3.8200 0.118226
+vdw 887 4.1800 0.047096
+vdw 888 3.5000 0.0660
+vdw 889 3.5000 0.0660
+vdw 890 3.5000 0.0660
+vdw 891 3.5000 0.0660
+vdw 892 2.5000 0.0300
+vdw 893 3.2500 0.1700
+vdw 894 3.5500 0.0700
+vdw 895 3.2500 0.1700
+vdw 896 3.5500 0.0700
+vdw 897 3.5500 0.0760
+vdw 898 3.5500 0.0760
+vdw 899 2.4200 0.0300
+vdw 900 3.3000 0.0860
+vdw 901 3.3000 0.0860
+vdw 902 3.3000 0.0860
+vdw 903 3.3000 0.0860
+vdw 904 3.3000 0.0860
+vdw 905 2.9600 0.2100
+vdw 906 3.5000 0.0660
+
+
+ ##################################
+ ## ##
+ ## Bond Stretching Parameters ##
+ ## ##
+ ##################################
+
+
+bond 1 2 367.00 1.3800
+bond 1 3 420.00 1.3570
+bond 1 13 367.00 1.3600
+bond 1 19 450.00 1.2790
+bond 1 25 300.00 0.3000
+bond 1 47 420.00 1.3400
+bond 1 48 420.00 1.3540
+bond 1 82 420.00 1.3540
+bond 1 83 420.00 1.3540
+bond 1 84 420.00 1.3540
+bond 1 87 420.00 1.3540
+bond 1 88 420.00 1.3540
+bond 1 108 461.00 1.5700
+bond 2 2 260.00 1.5260
+bond 2 3 317.00 1.5220
+bond 2 5 386.00 1.4250
+bond 2 6 260.00 1.5260
+bond 2 10 260.00 1.5260
+bond 2 11 317.00 1.5000
+bond 2 12 317.00 1.5100
+bond 2 13 260.00 1.5260
+bond 2 14 317.00 1.5000
+bond 2 15 222.00 1.8100
+bond 2 16 222.00 1.8100
+bond 2 20 320.00 1.4250
+bond 2 24 337.00 1.4490
+bond 2 44 382.00 1.4480
+bond 2 48 317.00 1.5100
+bond 2 51 260.00 1.5260
+bond 2 53 367.00 1.4710
+bond 2 55 337.00 1.4630
+bond 2 80 317.00 1.4950
+bond 3 3 350.00 1.5100
+bond 3 4 570.00 1.2290
+bond 3 5 450.00 1.3640
+bond 3 6 317.00 1.5220
+bond 3 10 317.00 1.5220
+bond 3 12 469.00 1.4000
+bond 3 13 317.00 1.5220
+bond 3 19 400.00 1.4440
+bond 3 20 214.00 1.3270
+bond 3 21 300.00 1.7900
+bond 3 24 490.00 1.3350
+bond 3 44 317.00 1.5220
+bond 3 46 340.00 1.0900
+bond 3 47 410.00 1.4440
+bond 3 48 400.00 1.4900
+bond 3 50 385.00 1.4600
+bond 3 52 656.00 1.2500
+bond 3 56 457.00 1.3580
+bond 3 57 418.00 1.3880
+bond 3 60 447.00 1.4190
+bond 3 65 300.00 1.9800
+bond 3 84 400.00 1.4900
+bond 3 86 385.00 1.4600
+bond 3 105 424.00 1.3830
+bond 3 107 490.00 1.3350
+bond 4 25 553.00 0.3000
+bond 4 64 525.00 1.4800
+bond 4 89 570.00 1.2290
+bond 4 110 700.00 1.1710
+bond 5 6 386.00 1.4250
+bond 5 7 553.00 0.9450
+bond 5 10 386.00 1.4250
+bond 5 13 320.00 1.4100
+bond 5 20 250.00 1.4700
+bond 5 24 400.00 1.3800
+bond 5 25 340.00 0.3000
+bond 5 44 320.00 1.4500
+bond 5 47 450.00 1.3700
+bond 5 48 450.00 1.3640
+bond 5 51 320.00 1.3800
+bond 5 64 230.00 1.6100
+bond 5 79 450.00 1.6700
+bond 5 106 94.00 1.8000
+bond 5 108 374.00 1.6400
+bond 6 6 260.00 1.5260
+bond 6 10 260.00 1.5260
+bond 6 11 317.00 1.5000
+bond 6 13 260.00 1.5260
+bond 6 14 317.00 1.5000
+bond 6 15 222.00 1.8100
+bond 6 16 222.00 1.8100
+bond 6 20 320.00 1.4250
+bond 6 24 337.00 1.4490
+bond 6 44 382.00 1.4480
+bond 6 47 317.00 1.5100
+bond 6 51 260.00 1.5260
+bond 6 53 367.00 1.4710
+bond 6 55 337.00 1.4630
+bond 6 79 222.00 1.8100
+bond 6 105 337.00 1.4750
+bond 7 20 553.00 0.9450
+bond 7 25 340.00 0.1000
+bond 9 9 530.00 1.3400
+bond 9 11 530.00 1.3400
+bond 9 14 530.00 1.3400
+bond 10 10 260.00 1.5260
+bond 10 11 317.00 1.5000
+bond 10 14 317.00 1.5000
+bond 10 20 320.00 1.4250
+bond 10 24 337.00 1.4490
+bond 10 44 382.00 1.4480
+bond 10 105 337.00 1.4750
+bond 11 11 530.00 1.3400
+bond 11 13 317.00 1.5000
+bond 11 14 530.00 1.3400
+bond 11 79 222.00 1.7600
+bond 12 12 469.00 1.4000
+bond 12 48 469.00 1.4000
+bond 12 60 469.00 1.4000
+bond 12 81 469.00 1.4000
+bond 13 13 268.00 1.5290
+bond 13 14 317.00 1.5000
+bond 13 15 222.00 1.8100
+bond 13 16 222.00 1.8100
+bond 13 18 390.00 1.4300
+bond 13 19 390.00 1.4700
+bond 13 20 320.00 1.4100
+bond 13 21 245.00 1.7810
+bond 13 22 340.00 1.7900
+bond 13 24 337.00 1.4490
+bond 13 25 340.00 0.3000
+bond 13 44 382.00 1.4480
+bond 13 46 340.00 1.0900
+bond 13 47 317.00 1.5100
+bond 13 48 317.00 1.5100
+bond 13 50 317.00 1.5100
+bond 13 51 268.00 1.5290
+bond 13 53 367.00 1.4710
+bond 13 55 337.00 1.4630
+bond 13 56 337.00 1.4490
+bond 13 57 337.00 1.4750
+bond 13 60 317.00 1.5100
+bond 13 64 212.00 1.8430
+bond 13 65 245.00 1.9450
+bond 13 66 200.00 2.1900
+bond 13 79 340.00 1.7700
+bond 13 80 317.00 1.4950
+bond 13 83 317.00 1.5040
+bond 13 84 317.00 1.5040
+bond 13 85 317.00 1.5040
+bond 13 87 317.00 1.4950
+bond 13 90 337.00 1.4490
+bond 13 91 280.00 1.5100
+bond 13 95 532.80 1.4600
+bond 13 101 382.00 1.4480
+bond 13 102 375.00 1.4900
+bond 13 104 212.00 1.8200
+bond 13 105 337.00 1.4750
+bond 13 107 337.00 1.4490
+bond 13 108 187.00 1.8600
+bond 13 109 317.00 1.5100
+bond 14 14 530.00 1.3400
+bond 15 17 274.00 1.3360
+bond 15 48 250.00 1.7400
+bond 16 16 166.00 2.0380
+bond 16 19 300.00 1.6850
+bond 16 24 250.00 1.7300
+bond 16 25 340.00 0.5000
+bond 16 47 250.00 1.7600
+bond 16 48 250.00 1.7600
+bond 16 61 250.00 1.7300
+bond 16 82 250.00 1.7600
+bond 16 84 250.00 1.7400
+bond 16 91 222.00 1.8100
+bond 16 108 144.00 2.1500
+bond 17 25 340.00 0.1000
+bond 18 18 550.00 1.1200
+bond 18 19 650.00 1.1570
+bond 18 48 400.00 1.4100
+bond 18 56 550.00 1.2400
+bond 19 19 1150.00 1.2100
+bond 19 21 330.00 1.6370
+bond 19 46 420.00 1.0800
+bond 19 47 400.00 1.4260
+bond 19 48 400.00 1.4510
+bond 19 50 400.00 1.4260
+bond 19 65 330.00 1.7840
+bond 19 88 400.00 1.4510
+bond 19 91 400.00 1.4510
+bond 20 20 250.00 1.4700
+bond 20 21 200.00 1.6900
+bond 20 24 320.00 1.4500
+bond 20 25 340.00 0.3000
+bond 20 44 320.00 1.4500
+bond 20 47 450.00 1.3700
+bond 20 48 450.00 1.3640
+bond 20 51 320.00 1.3800
+bond 20 60 340.00 1.3600
+bond 20 61 462.00 1.3990
+bond 20 64 230.00 1.6100
+bond 20 82 462.00 1.3570
+bond 20 84 340.00 1.3600
+bond 20 108 374.00 1.6400
+bond 21 25 300.00 0.3000
+bond 21 47 300.00 1.7250
+bond 21 48 300.00 1.7250
+bond 21 82 300.00 1.7250
+bond 21 83 300.00 1.7250
+bond 21 84 300.00 1.7250
+bond 21 87 300.00 1.7250
+bond 21 88 300.00 1.7250
+bond 21 108 223.00 2.0200
+bond 22 23 700.00 1.5300
+bond 22 25 340.00 0.5000
+bond 23 25 340.00 0.3000
+bond 23 79 700.00 1.4400
+bond 24 25 367.00 0.3000
+bond 24 45 434.00 1.0100
+bond 24 48 427.00 1.3810
+bond 24 59 427.00 1.3810
+bond 24 79 434.00 1.6700
+bond 24 84 427.00 1.3810
+bond 24 88 427.00 1.3810
+bond 24 91 337.00 1.4490
+bond 24 103 500.00 1.2700
+bond 24 106 40.00 2.0500
+bond 25 25 340.00 0.3000
+bond 25 44 340.00 0.3000
+bond 25 45 340.00 0.1000
+bond 25 46 340.00 0.3000
+bond 25 47 340.00 0.3000
+bond 25 48 367.00 0.3000
+bond 25 49 340.00 0.3000
+bond 25 53 340.00 0.3000
+bond 25 56 367.00 0.3000
+bond 25 61 367.00 0.3000
+bond 25 65 300.00 0.3000
+bond 25 103 340.00 0.1000
+bond 31 32 600.00 0.9572
+bond 31 33 900.00 0.1500
+bond 31 106 40.00 2.0500
+bond 34 35 529.60 0.9572
+bond 36 37 600.00 0.9572
+bond 36 38 900.00 0.1750
+bond 39 40 600.00 0.9572
+bond 39 41 900.00 0.7000
+bond 42 43 600.00 1.0000
+bond 44 44 350.00 1.4450
+bond 44 45 434.00 1.0100
+bond 44 48 481.00 1.3400
+bond 44 79 340.00 1.7700
+bond 44 91 382.00 1.4480
+bond 44 108 266.00 1.7400
+bond 45 53 434.00 1.0100
+bond 45 55 434.00 1.0100
+bond 45 56 434.00 1.0100
+bond 45 57 434.00 1.0100
+bond 45 101 434.00 1.0100
+bond 45 105 434.00 1.0100
+bond 45 108 166.00 1.4800
+bond 46 47 340.00 1.0800
+bond 46 50 340.00 1.0800
+bond 46 51 340.00 1.0900
+bond 46 80 340.00 1.0800
+bond 46 91 340.00 1.0880
+bond 46 95 532.80 1.0840
+bond 46 108 166.00 1.4800
+bond 46 109 340.00 1.0800
+bond 47 47 549.00 1.3400
+bond 47 48 427.00 1.4330
+bond 47 50 549.00 1.3400
+bond 47 57 448.00 1.3650
+bond 47 58 367.00 1.0800
+bond 47 65 300.00 1.9000
+bond 47 66 250.00 2.0800
+bond 47 86 385.00 1.4600
+bond 47 91 317.00 1.5100
+bond 47 105 448.00 1.3650
+bond 47 110 700.00 1.3050
+bond 48 48 469.00 1.4000
+bond 48 49 367.00 1.0800
+bond 48 50 427.00 1.4330
+bond 48 53 400.00 1.4500
+bond 48 55 481.00 1.3400
+bond 48 56 483.00 1.3390
+bond 48 57 427.00 1.3810
+bond 48 60 469.00 1.4040
+bond 48 61 414.00 1.3910
+bond 48 64 220.00 1.7800
+bond 48 65 300.00 1.8700
+bond 48 66 250.00 2.0800
+bond 48 79 340.00 1.7700
+bond 48 81 469.00 1.4000
+bond 48 84 546.00 1.3670
+bond 48 86 469.00 1.4000
+bond 48 88 469.00 1.4210
+bond 48 91 317.00 1.4900
+bond 48 101 382.00 1.3850
+bond 48 102 400.00 1.4600
+bond 48 109 427.00 1.4330
+bond 49 59 367.00 1.0800
+bond 49 62 340.00 1.0800
+bond 49 82 367.00 1.0800
+bond 49 83 367.00 1.0800
+bond 49 84 367.00 1.0800
+bond 49 85 367.00 1.0800
+bond 49 87 367.00 1.0800
+bond 49 88 367.00 1.0800
+bond 50 50 385.00 1.4600
+bond 50 56 457.00 1.2900
+bond 50 84 549.00 1.3650
+bond 50 109 385.00 1.4600
+bond 51 105 337.00 1.4750
+bond 52 64 525.00 1.4800
+bond 53 54 434.00 1.0100
+bond 54 55 434.00 1.0100
+bond 55 59 481.00 1.3400
+bond 55 82 481.00 1.3400
+bond 56 56 500.00 1.3200
+bond 56 59 502.00 1.3240
+bond 56 60 461.00 1.3540
+bond 56 82 461.00 1.3540
+bond 56 86 483.00 1.3390
+bond 56 103 550.00 1.2100
+bond 56 109 457.00 1.2900
+bond 57 60 436.00 1.3740
+bond 57 61 400.00 1.3490
+bond 57 62 440.00 1.3710
+bond 57 81 428.00 1.3800
+bond 57 82 477.00 1.3430
+bond 57 84 427.00 1.3810
+bond 57 85 427.00 1.3810
+bond 57 86 385.00 1.4400
+bond 58 83 367.00 1.0800
+bond 58 84 367.00 1.0800
+bond 59 63 367.00 1.0800
+bond 60 60 520.00 1.3700
+bond 60 61 414.00 1.3910
+bond 60 80 388.00 1.4590
+bond 60 81 447.00 1.4190
+bond 60 87 469.00 1.4240
+bond 60 105 436.00 1.3740
+bond 61 61 400.00 1.2800
+bond 61 62 529.00 1.3040
+bond 61 82 488.00 1.3350
+bond 61 83 410.00 1.3940
+bond 61 84 410.00 1.3940
+bond 61 88 410.00 1.3200
+bond 62 63 367.00 1.0800
+bond 62 105 440.00 1.3710
+bond 63 82 367.00 1.0800
+bond 64 108 108.00 2.2500
+bond 65 82 300.00 1.8700
+bond 65 83 300.00 1.8700
+bond 65 84 300.00 1.8700
+bond 65 87 300.00 1.8700
+bond 65 88 300.00 1.8700
+bond 65 108 151.00 2.1900
+bond 66 82 250.00 2.0800
+bond 66 83 250.00 2.0800
+bond 66 84 250.00 2.0800
+bond 66 87 250.00 2.0800
+bond 66 88 250.00 2.0800
+bond 66 108 108.00 2.4400
+bond 77 78 500.00 1.8000
+bond 80 84 546.00 1.3520
+bond 82 86 385.00 1.4600
+bond 82 87 520.00 1.3700
+bond 83 84 520.00 1.3700
+bond 83 86 385.00 1.4600
+bond 84 84 512.00 1.3750
+bond 84 86 385.00 1.4600
+bond 84 87 546.00 1.3670
+bond 84 88 520.00 1.3700
+bond 85 85 520.00 1.3700
+bond 86 86 385.00 1.4600
+bond 86 87 385.00 1.4600
+bond 86 88 385.00 1.4600
+bond 87 87 469.00 1.4240
+bond 87 88 469.00 1.4240
+bond 89 90 490.00 1.3350
+bond 89 91 317.00 1.5220
+bond 90 91 337.00 1.4490
+bond 91 91 260.00 1.5200
+bond 102 103 550.00 1.2250
+bond 108 108 94.00 2.3200
+bond 109 109 549.00 1.3450
+
+
+ ################################
+ ## ##
+ ## Angle Bending Parameters ##
+ ## ##
+ ################################
+
+
+angle 25 1 25 33.00 109.47
+angle 1 2 2 50.00 109.50
+angle 2 2 2 63.00 112.40
+angle 2 2 3 63.00 112.40
+angle 2 2 5 80.00 109.50
+angle 2 2 6 63.00 112.40
+angle 6 2 6 63.00 112.40
+angle 5 2 6 80.00 109.50
+angle 2 2 10 63.00 112.40
+angle 3 2 10 63.00 112.40
+angle 6 2 10 63.00 112.40
+angle 10 2 10 63.00 112.40
+angle 5 2 10 80.00 109.50
+angle 10 2 12 63.00 114.00
+angle 6 2 13 63.00 112.40
+angle 10 2 15 50.00 108.60
+angle 2 2 16 50.00 114.70
+angle 10 2 16 50.00 114.70
+angle 2 2 20 80.00 109.50
+angle 6 2 20 80.00 109.50
+angle 10 2 20 80.00 109.50
+angle 3 2 24 80.00 110.30
+angle 2 2 24 80.00 111.20
+angle 2 2 44 56.20 109.47
+angle 6 2 44 56.20 109.47
+angle 10 2 44 56.20 109.47
+angle 13 2 44 56.20 109.47
+angle 3 2 44 80.00 111.20
+angle 2 2 48 63.00 112.40
+angle 10 2 48 63.00 114.00
+angle 2 2 51 63.00 112.40
+angle 6 2 51 63.00 112.40
+angle 2 2 53 80.00 111.20
+angle 2 2 55 80.00 111.20
+angle 10 2 80 63.00 115.60
+angle 2 3 4 80.00 120.40
+angle 1 3 4 80.00 121.00
+angle 3 3 4 80.00 121.40
+angle 4 3 4 80.00 126.00
+angle 4 3 5 80.00 121.00
+angle 4 3 6 80.00 120.40
+angle 5 3 10 70.00 115.00
+angle 4 3 10 80.00 120.40
+angle 5 3 12 70.00 120.00
+angle 12 3 12 85.00 120.00
+angle 5 3 13 70.00 108.00
+angle 13 3 13 70.00 116.00
+angle 1 3 13 80.00 111.00
+angle 3 3 13 80.00 117.20
+angle 4 3 13 80.00 120.40
+angle 10 3 20 81.00 111.40
+angle 13 3 20 81.00 111.40
+angle 4 3 20 83.00 123.40
+angle 13 3 21 75.00 109.00
+angle 4 3 21 75.00 119.00
+angle 24 3 24 70.00 114.20
+angle 2 3 24 70.00 116.60
+angle 3 3 24 70.00 116.60
+angle 6 3 24 70.00 116.60
+angle 10 3 24 70.00 116.60
+angle 13 3 24 70.00 116.60
+angle 4 3 24 80.00 122.90
+angle 20 3 24 81.00 111.40
+angle 13 3 44 70.00 116.00
+angle 4 3 44 80.00 120.40
+angle 13 3 46 35.00 115.00
+angle 46 3 46 35.00 115.00
+angle 4 3 46 35.00 123.00
+angle 24 3 46 40.00 114.00
+angle 5 3 46 40.00 115.00
+angle 20 3 46 40.00 115.00
+angle 24 3 47 70.00 115.50
+angle 4 3 47 80.00 125.30
+angle 46 3 48 35.00 115.00
+angle 24 3 48 70.00 115.50
+angle 13 3 48 70.00 116.00
+angle 5 3 48 70.00 120.00
+angle 4 3 48 80.00 120.40
+angle 20 3 48 81.00 111.40
+angle 48 3 48 85.00 120.00
+angle 13 3 50 70.00 116.00
+angle 46 3 50 80.00 116.00
+angle 4 3 50 80.00 124.00
+angle 10 3 52 65.00 117.00
+angle 2 3 52 70.00 117.00
+angle 6 3 52 70.00 117.00
+angle 13 3 52 70.00 117.00
+angle 48 3 52 70.00 117.00
+angle 4 3 52 80.00 126.00
+angle 52 3 52 80.00 126.00
+angle 46 3 56 35.00 116.00
+angle 46 3 56 35.00 122.00
+angle 4 3 56 80.00 122.50
+angle 47 3 57 70.00 114.10
+angle 56 3 57 70.00 118.60
+angle 57 3 57 70.00 118.60
+angle 4 3 57 80.00 120.60
+angle 24 3 60 70.00 111.30
+angle 57 3 60 70.00 111.30
+angle 4 3 60 80.00 128.80
+angle 13 3 65 75.00 109.00
+angle 4 3 65 75.00 119.00
+angle 44 3 84 70.00 116.00
+angle 4 3 84 80.00 120.40
+angle 4 3 87 80.00 128.20
+angle 57 3 105 70.00 115.40
+angle 56 3 105 70.00 118.60
+angle 4 3 105 80.00 120.90
+angle 13 3 107 70.00 116.60
+angle 4 3 107 80.00 122.90
+angle 25 4 25 10.00 117.00
+angle 3 4 25 35.00 113.00
+angle 3 5 7 35.00 113.00
+angle 2 5 7 55.00 108.50
+angle 6 5 7 55.00 108.50
+angle 7 5 10 55.00 108.50
+angle 7 5 13 55.00 108.50
+angle 7 5 24 49.00 105.40
+angle 25 5 25 5.00 109.47
+angle 7 5 25 10.00 109.47
+angle 13 5 25 10.00 109.47
+angle 7 5 47 35.00 109.00
+angle 25 5 48 10.00 109.47
+angle 7 5 48 35.00 113.00
+angle 7 5 51 55.00 108.50
+angle 7 5 64 55.00 108.50
+angle 13 5 64 100.00 120.50
+angle 7 5 79 74.00 110.00
+angle 7 5 106 100.00 126.00
+angle 5 7 25 10.00 109.47
+angle 25 7 25 33.00 109.47
+angle 2 10 2 63.00 112.40
+angle 2 10 3 63.00 111.10
+angle 2 10 5 80.00 109.50
+angle 3 10 6 63.00 111.10
+angle 6 10 6 63.00 111.50
+angle 2 10 6 63.00 112.40
+angle 5 10 6 80.00 109.50
+angle 3 10 10 63.00 111.10
+angle 2 10 10 63.00 111.50
+angle 6 10 10 63.00 111.50
+angle 10 10 10 63.00 111.50
+angle 5 10 10 80.00 109.50
+angle 2 10 20 80.00 109.50
+angle 6 10 20 80.00 109.50
+angle 10 10 20 80.00 109.50
+angle 3 10 24 63.00 110.10
+angle 6 10 24 80.00 109.50
+angle 2 10 24 80.00 109.70
+angle 10 10 24 80.00 109.70
+angle 2 10 44 56.20 109.47
+angle 6 10 44 56.20 109.47
+angle 10 10 44 56.20 109.47
+angle 13 10 44 56.20 109.47
+angle 3 10 44 80.00 109.70
+angle 2 10 48 63.00 112.40
+angle 20 10 48 80.00 109.50
+angle 2 10 105 80.00 109.50
+angle 10 10 105 80.00 109.50
+angle 20 10 105 80.00 109.50
+angle 2 11 2 70.00 124.00
+angle 2 11 6 70.00 124.00
+angle 6 11 6 70.00 124.00
+angle 2 11 9 70.00 118.00
+angle 6 11 9 70.00 118.00
+angle 9 11 10 70.00 118.00
+angle 2 11 10 70.00 124.00
+angle 6 11 10 70.00 124.00
+angle 10 11 10 70.00 124.00
+angle 2 11 11 70.00 118.00
+angle 6 11 11 70.00 118.00
+angle 9 11 11 70.00 118.00
+angle 10 11 11 70.00 118.00
+angle 11 11 11 70.00 118.00
+angle 9 11 13 70.00 118.00
+angle 11 11 13 70.00 118.00
+angle 2 11 13 70.00 124.00
+angle 6 11 13 70.00 124.00
+angle 10 11 13 70.00 124.00
+angle 13 11 13 70.00 124.00
+angle 9 11 14 70.00 118.00
+angle 11 11 14 70.00 118.00
+angle 9 11 79 70.00 118.00
+angle 2 12 12 70.00 120.00
+angle 3 12 12 85.00 120.00
+angle 12 12 12 85.00 120.00
+angle 12 12 48 85.00 120.00
+angle 12 12 60 85.00 120.00
+angle 12 12 81 85.00 120.00
+angle 1 13 1 77.00 109.10
+angle 2 13 2 40.00 109.50
+angle 1 13 3 50.00 109.50
+angle 2 13 3 63.00 111.10
+angle 3 13 3 63.00 111.10
+angle 2 13 6 40.00 109.50
+angle 6 13 6 40.00 109.50
+angle 3 13 6 63.00 109.50
+angle 1 13 13 50.00 109.50
+angle 5 13 13 50.00 109.50
+angle 13 13 13 58.35 112.70
+angle 3 13 13 63.00 111.10
+angle 13 13 15 50.00 108.60
+angle 13 13 16 50.00 114.70
+angle 13 13 19 58.35 112.70
+angle 3 13 20 50.00 109.50
+angle 13 13 20 50.00 109.50
+angle 3 13 21 69.00 109.80
+angle 13 13 21 69.00 109.80
+angle 21 13 21 78.00 111.70
+angle 13 13 22 50.00 108.60
+angle 20 13 24 50.00 109.50
+angle 3 13 24 63.00 110.10
+angle 2 13 24 80.00 109.70
+angle 13 13 24 80.00 109.70
+angle 16 13 44 50.00 114.70
+angle 2 13 44 56.20 109.47
+angle 6 13 44 56.20 109.47
+angle 10 13 44 56.20 109.47
+angle 13 13 44 56.20 109.47
+angle 3 13 44 80.00 111.20
+angle 46 13 46 33.00 107.80
+angle 18 13 46 35.00 108.50
+angle 19 13 46 35.00 108.50
+angle 2 13 46 35.00 109.50
+angle 3 13 46 35.00 109.50
+angle 5 13 46 35.00 109.50
+angle 15 13 46 35.00 109.50
+angle 16 13 46 35.00 109.50
+angle 20 13 46 35.00 109.50
+angle 22 13 46 35.00 109.50
+angle 24 13 46 35.00 109.50
+angle 44 13 46 35.00 109.50
+angle 13 13 46 37.50 110.70
+angle 1 13 46 40.00 107.00
+angle 21 13 46 51.00 107.60
+angle 46 13 47 35.00 109.50
+angle 1 13 47 50.00 109.50
+angle 13 13 47 63.00 111.10
+angle 47 13 47 63.00 112.40
+angle 46 13 48 35.00 109.50
+angle 47 13 48 40.00 109.50
+angle 48 13 48 40.00 109.50
+angle 1 13 48 50.00 109.50
+angle 5 13 48 50.00 109.50
+angle 20 13 48 50.00 109.50
+angle 16 13 48 50.00 114.70
+angle 3 13 48 63.00 112.00
+angle 2 13 48 63.00 114.00
+angle 13 13 48 63.00 114.00
+angle 44 13 48 80.00 111.20
+angle 46 13 50 35.00 109.50
+angle 46 13 51 37.50 110.70
+angle 5 13 51 50.00 109.50
+angle 13 13 51 58.35 112.70
+angle 46 13 53 35.00 109.50
+angle 3 13 53 80.00 111.20
+angle 13 13 53 80.00 111.20
+angle 46 13 55 35.00 109.50
+angle 13 13 55 80.00 111.20
+angle 46 13 56 35.00 109.50
+angle 3 13 56 63.00 110.10
+angle 13 13 56 65.00 109.00
+angle 46 13 57 35.00 109.50
+angle 48 13 57 80.00 111.20
+angle 46 13 60 35.00 109.50
+angle 13 13 60 63.00 114.00
+angle 46 13 64 41.00 109.50
+angle 13 13 64 43.00 109.50
+angle 48 13 64 43.00 109.50
+angle 46 13 65 51.00 107.60
+angle 3 13 65 69.00 109.80
+angle 13 13 65 69.00 110.00
+angle 48 13 65 69.00 110.00
+angle 65 13 65 78.00 111.70
+angle 46 13 66 75.00 111.00
+angle 13 13 66 75.00 112.00
+angle 46 13 79 35.00 109.50
+angle 13 13 79 50.00 108.60
+angle 1 13 79 50.00 109.50
+angle 46 13 80 35.00 109.50
+angle 13 13 80 63.00 115.60
+angle 46 13 83 35.00 109.50
+angle 13 13 83 63.00 114.00
+angle 46 13 84 35.00 109.50
+angle 16 13 84 50.00 114.70
+angle 13 13 84 63.00 114.00
+angle 46 13 85 35.00 109.50
+angle 13 13 85 63.00 114.00
+angle 46 13 87 35.00 109.50
+angle 13 13 87 63.00 115.60
+angle 46 13 90 35.00 109.50
+angle 13 13 90 80.00 110.00
+angle 3 13 90 80.00 113.00
+angle 46 13 91 37.50 110.70
+angle 46 13 95 35.00 105.00
+angle 13 13 95 63.00 105.00
+angle 46 13 101 35.00 109.50
+angle 13 13 101 80.00 111.20
+angle 46 13 102 35.00 105.00
+angle 13 13 102 63.00 111.10
+angle 46 13 104 41.00 109.50
+angle 13 13 104 43.00 109.50
+angle 46 13 105 35.00 109.50
+angle 13 13 105 50.00 109.50
+angle 20 13 105 50.00 109.50
+angle 46 13 107 35.00 109.50
+angle 13 13 107 80.00 109.70
+angle 46 13 108 35.00 109.50
+angle 13 13 108 60.00 112.00
+angle 2 14 2 70.00 124.00
+angle 2 14 6 70.00 124.00
+angle 6 14 6 70.00 124.00
+angle 2 14 9 70.00 118.00
+angle 6 14 9 70.00 118.00
+angle 9 14 10 70.00 118.00
+angle 2 14 10 70.00 124.00
+angle 6 14 10 70.00 124.00
+angle 10 14 10 70.00 124.00
+angle 2 14 11 70.00 118.00
+angle 6 14 11 70.00 118.00
+angle 9 14 11 70.00 118.00
+angle 10 14 11 70.00 118.00
+angle 11 14 11 70.00 118.00
+angle 9 14 13 70.00 118.00
+angle 11 14 13 70.00 118.00
+angle 2 14 13 70.00 124.00
+angle 6 14 13 70.00 124.00
+angle 10 14 13 70.00 124.00
+angle 13 14 13 70.00 124.00
+angle 2 14 14 70.00 118.00
+angle 6 14 14 70.00 118.00
+angle 9 14 14 70.00 118.00
+angle 10 14 14 70.00 118.00
+angle 11 14 14 70.00 118.00
+angle 13 14 14 70.00 118.00
+angle 14 14 14 70.00 118.00
+angle 17 15 17 35.00 92.07
+angle 2 15 17 44.00 96.00
+angle 6 15 17 44.00 96.00
+angle 13 15 17 44.00 96.00
+angle 25 15 25 5.00 109.47
+angle 13 15 25 10.00 109.47
+angle 33 15 33 10.00 160.00
+angle 2 15 33 150.00 96.70
+angle 6 15 33 150.00 96.70
+angle 13 15 33 150.00 96.70
+angle 17 15 33 150.00 96.70
+angle 17 15 48 50.00 96.00
+angle 2 16 6 62.00 98.90
+angle 13 16 13 62.00 98.90
+angle 2 16 16 68.00 103.70
+angle 6 16 16 68.00 103.70
+angle 13 16 16 68.00 103.70
+angle 13 16 19 65.00 100.00
+angle 25 16 25 5.00 109.47
+angle 13 16 25 10.00 109.47
+angle 33 16 33 10.00 160.00
+angle 2 16 33 150.00 96.70
+angle 6 16 33 150.00 96.70
+angle 13 16 33 150.00 96.70
+angle 16 16 33 150.00 96.70
+angle 13 16 48 62.00 104.20
+angle 47 16 48 62.00 104.20
+angle 24 16 60 74.00 92.40
+angle 25 16 61 10.00 130.00
+angle 25 16 82 10.00 130.00
+angle 60 16 82 74.00 97.00
+angle 25 16 84 10.00 130.00
+angle 82 16 84 74.00 90.00
+angle 60 16 84 74.00 97.00
+angle 84 16 84 74.00 97.00
+angle 13 16 91 62.00 94.00
+angle 15 17 25 10.00 109.47
+angle 25 17 25 33.00 109.47
+angle 13 18 19 150.00 180.00
+angle 19 18 48 170.00 180.00
+angle 18 18 56 100.00 180.00
+angle 13 19 18 150.00 180.00
+angle 16 19 19 140.00 180.00
+angle 13 19 19 150.00 180.00
+angle 18 19 25 10.00 90.00
+angle 19 19 46 112.00 180.00
+angle 18 19 47 150.00 180.00
+angle 19 19 47 160.00 180.00
+angle 18 19 48 150.00 180.00
+angle 19 19 48 160.00 180.00
+angle 19 19 50 160.00 180.00
+angle 18 19 55 150.00 180.00
+angle 18 19 88 150.00 180.00
+angle 2 20 2 100.00 111.80
+angle 2 20 3 83.00 116.90
+angle 3 20 6 83.00 116.90
+angle 2 20 6 100.00 111.80
+angle 2 20 7 55.00 108.50
+angle 7 20 10 55.00 108.50
+angle 3 20 10 83.00 116.90
+angle 10 20 10 100.00 111.80
+angle 13 20 13 60.00 109.50
+angle 3 20 13 83.00 116.90
+angle 25 20 25 5.00 109.47
+angle 13 20 25 10.00 109.47
+angle 13 20 47 75.00 111.00
+angle 25 20 48 10.00 109.47
+angle 13 20 48 75.00 111.00
+angle 47 20 48 75.00 111.00
+angle 48 20 48 75.00 111.00
+angle 3 20 48 83.00 116.90
+angle 2 20 48 100.00 111.80
+angle 13 20 51 60.00 109.50
+angle 2 20 51 100.00 113.00
+angle 6 20 51 100.00 113.00
+angle 10 20 51 100.00 113.00
+angle 24 20 60 70.00 104.50
+angle 25 20 61 10.00 125.00
+angle 2 20 64 100.00 120.50
+angle 6 20 64 100.00 120.50
+angle 10 20 64 100.00 120.50
+angle 13 20 64 100.00 120.50
+angle 48 20 64 100.00 120.50
+angle 64 20 64 100.00 120.50
+angle 25 20 82 10.00 125.00
+angle 60 20 82 70.00 106.50
+angle 82 20 82 70.00 107.00
+angle 25 20 84 10.00 125.00
+angle 82 20 84 70.00 104.00
+angle 60 20 84 70.00 106.50
+angle 84 20 84 70.00 106.50
+angle 61 20 84 70.00 108.90
+angle 108 20 108 20.00 145.00
+angle 13 20 108 40.00 130.00
+angle 25 21 25 33.00 109.47
+angle 13 22 13 62.00 96.00
+angle 13 22 23 74.00 107.00
+angle 23 22 25 10.00 90.00
+angle 2 24 3 50.00 121.90
+angle 3 24 3 70.00 126.40
+angle 3 24 5 46.00 115.70
+angle 2 24 6 50.00 121.90
+angle 3 24 6 50.00 121.90
+angle 2 24 10 50.00 118.00
+angle 3 24 10 50.00 121.90
+angle 13 24 13 50.00 118.00
+angle 3 24 13 50.00 121.90
+angle 3 24 16 70.00 112.00
+angle 3 24 20 70.00 108.60
+angle 3 24 25 10.00 109.50
+angle 25 24 45 10.00 100.00
+angle 5 24 45 35.00 110.20
+angle 3 24 45 35.00 119.80
+angle 45 24 45 35.00 120.00
+angle 2 24 45 38.00 118.40
+angle 6 24 45 38.00 118.40
+angle 10 24 45 38.00 118.40
+angle 13 24 45 38.00 118.40
+angle 45 24 48 35.00 119.80
+angle 13 24 48 50.00 118.00
+angle 3 24 48 50.00 121.90
+angle 48 24 48 70.00 118.00
+angle 54 24 54 35.00 120.00
+angle 45 24 59 35.00 118.00
+angle 3 24 59 70.00 125.20
+angle 13 24 79 50.00 120.00
+angle 45 24 79 100.00 111.00
+angle 45 24 84 35.00 119.80
+angle 48 24 84 70.00 118.00
+angle 16 24 86 70.00 117.00
+angle 45 24 87 35.00 119.80
+angle 48 24 87 70.00 118.00
+angle 45 24 88 35.00 119.80
+angle 48 24 88 70.00 118.00
+angle 45 24 91 40.00 113.00
+angle 3 24 91 55.00 128.00
+angle 48 24 103 70.00 121.00
+angle 3 24 106 20.00 126.00
+angle 25 25 25 33.00 109.47
+angle 32 31 32 75.00 104.52
+angle 32 31 33 50.00 52.26
+angle 35 34 35 34.05 104.52
+angle 37 36 37 75.00 109.50
+angle 37 36 38 50.00 54.75
+angle 40 39 40 75.00 104.52
+angle 41 39 41 50.00 109.47
+angle 40 39 41 50.00 110.6948
+angle 43 42 43 75.00 109.47
+angle 2 44 2 51.80 107.20
+angle 2 44 6 51.80 107.20
+angle 6 44 6 51.80 107.20
+angle 2 44 10 51.80 107.20
+angle 6 44 10 51.80 107.20
+angle 10 44 10 51.80 107.20
+angle 2 44 13 51.80 107.20
+angle 6 44 13 51.80 107.20
+angle 10 44 13 51.80 107.20
+angle 13 44 13 51.80 107.20
+angle 3 44 13 63.00 111.10
+angle 25 44 45 10.00 100.00
+angle 13 44 45 35.00 109.50
+angle 2 44 45 43.20 108.10
+angle 6 44 45 43.20 108.10
+angle 10 44 45 43.20 108.10
+angle 45 44 45 43.60 106.40
+angle 25 44 48 10.00 109.50
+angle 45 44 48 35.00 116.00
+angle 13 44 48 50.00 116.00
+angle 48 44 48 50.00 116.00
+angle 3 44 48 63.00 112.00
+angle 45 44 79 35.00 115.00
+angle 13 44 79 50.00 108.60
+angle 48 44 79 50.00 108.60
+angle 48 44 91 50.00 109.50
+angle 25 45 25 33.00 109.47
+angle 25 45 44 10.00 109.50
+angle 25 46 25 33.00 109.47
+angle 13 46 25 37.50 109.47
+angle 1 47 1 80.00 108.00
+angle 1 47 3 80.00 121.50
+angle 3 47 6 85.00 119.70
+angle 3 47 13 70.00 119.70
+angle 13 47 13 70.00 130.00
+angle 25 47 46 10.00 90.00
+angle 20 47 46 35.00 114.50
+angle 13 47 46 35.00 117.00
+angle 46 47 46 35.00 117.00
+angle 3 47 46 35.00 119.70
+angle 19 47 46 35.00 120.00
+angle 1 47 46 50.00 112.00
+angle 21 47 46 60.00 114.00
+angle 25 47 47 2.00 90.00
+angle 46 47 47 35.00 120.00
+angle 5 47 47 70.00 123.00
+angle 20 47 47 70.00 123.00
+angle 13 47 47 70.00 124.00
+angle 19 47 47 70.00 124.00
+angle 21 47 47 75.00 121.50
+angle 1 47 47 80.00 121.50
+angle 16 47 47 85.00 119.40
+angle 3 47 47 85.00 120.70
+angle 46 47 48 35.00 123.30
+angle 47 47 48 85.00 117.00
+angle 13 47 48 85.00 119.70
+angle 25 47 50 2.00 90.00
+angle 46 47 50 35.00 120.00
+angle 5 47 50 70.00 123.00
+angle 20 47 50 70.00 123.00
+angle 13 47 50 70.00 124.00
+angle 46 47 57 35.00 119.10
+angle 13 47 57 70.00 120.00
+angle 20 47 57 70.00 120.00
+angle 47 47 57 70.00 121.20
+angle 16 47 57 85.00 119.40
+angle 57 47 58 35.00 119.10
+angle 47 47 58 35.00 119.70
+angle 46 47 65 60.00 114.00
+angle 47 47 65 75.00 120.00
+angle 46 47 91 35.00 135.00
+angle 3 47 91 70.00 119.70
+angle 47 47 91 70.00 124.00
+angle 46 47 105 35.00 119.10
+angle 58 47 105 35.00 119.10
+angle 13 47 105 70.00 120.00
+angle 20 47 105 70.00 120.00
+angle 47 47 105 70.00 121.20
+angle 16 47 105 85.00 119.40
+angle 46 47 110 40.00 121.00
+angle 13 47 110 80.00 122.00
+angle 48 47 110 80.00 122.00
+angle 1 47 110 80.00 125.00
+angle 2 48 12 70.00 120.00
+angle 12 48 12 85.00 120.00
+angle 3 48 13 70.00 119.70
+angle 25 48 48 10.00 90.00
+angle 48 48 48 63.00 120.00
+angle 2 48 48 70.00 120.00
+angle 5 48 48 70.00 120.00
+angle 10 48 48 70.00 120.00
+angle 13 48 48 70.00 120.00
+angle 15 48 48 70.00 120.00
+angle 19 48 48 70.00 120.00
+angle 20 48 48 70.00 120.00
+angle 24 48 48 70.00 120.00
+angle 44 48 48 70.00 120.00
+angle 47 48 48 70.00 124.00
+angle 21 48 48 75.00 120.00
+angle 1 48 48 80.00 120.00
+angle 18 48 48 80.00 120.00
+angle 16 48 48 85.00 119.40
+angle 3 48 48 85.00 120.00
+angle 25 48 49 2.00 90.00
+angle 24 48 49 35.00 119.10
+angle 3 48 49 35.00 120.00
+angle 48 48 49 35.00 120.00
+angle 48 48 50 70.00 124.00
+angle 48 48 53 70.00 120.00
+angle 55 48 55 70.00 120.00
+angle 47 48 55 70.00 120.10
+angle 48 48 55 70.00 120.10
+angle 49 48 56 35.00 116.00
+angle 13 48 56 70.00 116.00
+angle 44 48 56 70.00 116.00
+angle 55 48 56 70.00 119.30
+angle 5 48 56 70.00 120.00
+angle 47 48 56 70.00 121.50
+angle 50 48 56 70.00 121.50
+angle 48 48 56 70.00 124.00
+angle 21 48 56 75.00 120.00
+angle 49 48 57 35.00 120.00
+angle 48 48 57 70.00 108.70
+angle 55 48 57 70.00 116.00
+angle 13 48 57 70.00 120.00
+angle 47 48 57 70.00 121.50
+angle 56 48 57 70.00 123.30
+angle 49 48 60 35.00 120.00
+angle 48 48 60 63.00 120.00
+angle 57 48 60 70.00 108.70
+angle 56 48 60 70.00 117.30
+angle 55 48 60 70.00 123.50
+angle 2 48 60 70.00 128.60
+angle 13 48 60 70.00 128.60
+angle 49 48 61 35.00 119.10
+angle 48 48 61 70.00 108.70
+angle 57 48 61 70.00 123.30
+angle 48 48 64 85.00 119.40
+angle 48 48 65 75.00 120.00
+angle 48 48 66 75.00 120.00
+angle 48 48 79 85.00 119.40
+angle 49 48 81 35.00 120.00
+angle 48 48 81 85.00 120.00
+angle 49 48 84 35.00 126.90
+angle 60 48 84 63.00 106.40
+angle 48 48 84 70.00 107.40
+angle 49 48 86 35.00 120.00
+angle 48 48 86 63.00 120.00
+angle 56 48 86 70.00 124.00
+angle 49 48 88 35.00 128.20
+angle 101 48 101 70.00 111.80
+angle 56 48 101 70.00 124.10
+angle 48 48 102 85.00 120.00
+angle 48 48 109 70.00 124.00
+angle 25 50 46 10.00 90.00
+angle 19 50 46 35.00 120.00
+angle 25 50 47 2.00 90.00
+angle 46 50 47 35.00 120.00
+angle 3 50 47 70.00 118.70
+angle 13 50 47 70.00 124.00
+angle 46 50 48 35.00 123.30
+angle 47 50 48 85.00 117.00
+angle 25 50 50 2.00 90.00
+angle 46 50 50 35.00 120.00
+angle 13 50 50 70.00 124.00
+angle 47 50 50 70.00 124.00
+angle 50 50 84 35.00 106.00
+angle 46 50 84 35.00 122.00
+angle 46 50 109 35.00 120.00
+angle 13 50 109 70.00 124.00
+angle 47 50 109 70.00 124.00
+angle 6 51 6 40.00 109.50
+angle 5 51 13 50.00 109.50
+angle 13 51 20 50.00 109.50
+angle 2 51 20 80.00 109.50
+angle 6 51 20 80.00 109.50
+angle 5 51 20 92.60 111.55
+angle 20 51 20 92.60 111.55
+angle 46 51 46 33.00 109.50
+angle 5 51 46 35.00 109.50
+angle 20 51 46 35.00 109.50
+angle 13 51 46 37.50 110.70
+angle 46 51 105 35.00 109.50
+angle 13 51 105 50.00 109.50
+angle 20 51 105 50.00 109.50
+angle 13 53 13 50.00 113.00
+angle 13 53 25 10.00 100.00
+angle 45 53 45 43.60 109.50
+angle 25 53 48 10.00 100.00
+angle 13 53 48 55.00 114.00
+angle 2 53 54 35.00 109.50
+angle 6 53 54 35.00 109.50
+angle 13 53 54 35.00 109.50
+angle 48 53 54 35.00 109.50
+angle 54 53 54 35.00 109.50
+angle 25 53 82 10.00 100.00
+angle 13 55 13 50.00 118.00
+angle 45 55 45 35.00 113.00
+angle 13 55 45 35.00 118.40
+angle 45 55 48 35.00 120.00
+angle 2 55 48 50.00 123.20
+angle 6 55 48 50.00 123.20
+angle 13 55 48 50.00 123.20
+angle 2 55 54 35.00 118.40
+angle 13 55 54 35.00 118.40
+angle 48 55 54 35.00 120.00
+angle 54 55 54 35.00 120.00
+angle 45 55 59 35.00 120.00
+angle 3 56 13 70.00 120.50
+angle 13 56 18 70.00 120.00
+angle 25 56 48 5.00 120.00
+angle 45 56 48 35.00 113.00
+angle 13 56 48 50.00 118.00
+angle 48 56 48 70.00 117.00
+angle 3 56 48 70.00 120.50
+angle 13 56 56 70.00 117.00
+angle 48 56 56 70.00 117.00
+angle 25 56 59 5.00 119.80
+angle 48 56 59 70.00 118.60
+angle 59 56 59 70.00 118.60
+angle 59 56 60 70.00 111.00
+angle 48 56 60 70.00 112.20
+angle 59 56 82 70.00 111.00
+angle 48 56 86 70.00 117.00
+angle 13 56 103 70.00 114.00
+angle 3 57 3 70.00 126.40
+angle 3 57 45 35.00 116.80
+angle 45 57 47 35.00 119.20
+angle 3 57 47 70.00 121.60
+angle 45 57 48 35.00 118.00
+angle 3 57 48 70.00 125.20
+angle 48 57 48 70.00 125.20
+angle 45 57 60 30.00 125.80
+angle 13 57 60 70.00 125.80
+angle 60 57 61 56.00 113.10
+angle 45 57 61 56.00 118.40
+angle 13 57 61 70.00 118.40
+angle 48 57 61 70.00 118.40
+angle 45 57 62 30.00 128.80
+angle 60 57 62 70.00 105.40
+angle 48 57 62 70.00 109.80
+angle 13 57 62 70.00 128.80
+angle 45 57 81 35.00 123.10
+angle 45 57 82 35.00 120.00
+angle 61 57 82 56.00 113.10
+angle 60 57 82 70.00 109.80
+angle 45 57 84 35.00 120.00
+angle 61 57 84 56.00 113.10
+angle 60 57 84 70.00 109.80
+angle 82 57 84 70.00 109.80
+angle 84 57 84 70.00 109.80
+angle 81 57 84 70.00 111.60
+angle 45 57 85 35.00 120.00
+angle 82 57 85 70.00 109.80
+angle 24 59 55 70.00 116.00
+angle 49 59 56 35.00 115.45
+angle 13 59 56 70.00 115.50
+angle 55 59 56 70.00 119.30
+angle 24 59 56 70.00 123.30
+angle 56 59 56 70.00 129.10
+angle 56 59 63 35.00 115.45
+angle 13 60 48 70.00 120.00
+angle 48 60 48 85.00 134.90
+angle 56 60 57 70.00 126.20
+angle 57 60 60 70.00 106.20
+angle 20 60 60 70.00 110.60
+angle 16 60 60 70.00 111.00
+angle 13 60 60 70.00 120.00
+angle 24 60 60 70.00 127.70
+angle 56 60 60 70.00 127.70
+angle 48 60 60 85.00 117.30
+angle 3 60 60 85.00 119.20
+angle 60 60 61 70.00 111.00
+angle 24 60 61 70.00 126.20
+angle 3 60 61 70.00 130.00
+angle 48 60 61 70.00 132.40
+angle 12 60 80 85.00 134.90
+angle 48 60 80 85.00 134.90
+angle 80 60 81 85.00 108.80
+angle 12 60 81 85.00 116.20
+angle 48 60 81 85.00 116.20
+angle 3 60 84 70.00 130.00
+angle 60 60 87 70.00 107.30
+angle 57 60 87 70.00 107.70
+angle 81 60 87 85.00 108.80
+angle 12 60 87 85.00 134.90
+angle 48 60 87 85.00 134.90
+angle 60 60 105 70.00 106.20
+angle 56 60 105 70.00 126.20
+angle 48 61 48 70.00 125.20
+angle 25 61 57 10.00 125.00
+angle 25 61 61 10.00 125.00
+angle 60 61 62 70.00 103.80
+angle 25 61 82 10.00 125.00
+angle 61 61 82 70.00 109.00
+angle 60 61 82 70.00 110.00
+angle 82 61 83 70.00 110.00
+angle 57 61 84 70.00 104.10
+angle 82 61 84 70.00 110.00
+angle 57 61 88 70.00 104.10
+angle 20 61 88 70.00 105.30
+angle 49 62 57 35.00 120.00
+angle 49 62 61 35.00 120.00
+angle 57 62 61 70.00 113.90
+angle 57 62 63 35.00 123.05
+angle 61 62 63 35.00 123.05
+angle 49 62 105 35.00 120.00
+angle 63 62 105 35.00 123.05
+angle 61 62 105 70.00 113.90
+angle 5 64 5 45.00 102.60
+angle 4 64 5 100.00 108.23
+angle 4 64 13 45.00 109.50
+angle 5 64 20 45.00 102.60
+angle 20 64 20 45.00 102.60
+angle 13 64 20 45.00 109.50
+angle 4 64 20 100.00 108.23
+angle 4 64 48 45.00 109.50
+angle 5 64 48 45.00 109.50
+angle 20 64 48 45.00 109.50
+angle 5 64 52 45.00 108.23
+angle 13 64 52 45.00 109.50
+angle 20 64 52 100.00 108.23
+angle 52 64 52 140.00 119.90
+angle 25 65 25 33.00 109.47
+angle 25 66 25 33.00 109.47
+angle 78 77 78 150.00 180.00
+angle 6 79 11 62.00 98.90
+angle 13 79 13 62.00 102.00
+angle 5 79 13 75.00 96.40
+angle 5 79 23 74.00 108.70
+angle 13 79 23 74.00 108.90
+angle 23 79 23 104.00 119.00
+angle 13 79 24 100.00 103.00
+angle 23 79 24 120.00 107.00
+angle 13 79 44 62.00 102.00
+angle 23 79 44 74.00 108.90
+angle 13 79 48 62.00 102.00
+angle 23 79 48 74.00 107.20
+angle 5 79 48 75.00 96.40
+angle 24 79 48 100.00 103.00
+angle 13 79 82 62.00 102.00
+angle 46 80 60 35.00 126.80
+angle 2 80 60 70.00 128.60
+angle 13 80 60 70.00 128.60
+angle 46 80 84 35.00 126.80
+angle 2 80 84 70.00 125.00
+angle 13 80 84 70.00 125.00
+angle 60 80 84 85.00 106.40
+angle 12 81 57 70.00 132.80
+angle 48 81 57 70.00 132.80
+angle 57 81 60 70.00 104.40
+angle 12 81 60 85.00 122.70
+angle 48 81 60 85.00 122.70
+angle 13 82 16 70.00 125.00
+angle 16 82 24 70.00 125.00
+angle 16 82 44 70.00 120.20
+angle 20 82 49 35.00 117.00
+angle 16 82 49 35.00 125.00
+angle 49 82 57 35.00 120.00
+angle 57 82 57 70.00 120.00
+angle 13 82 57 70.00 125.00
+angle 48 82 57 70.00 125.00
+angle 56 82 57 70.00 126.20
+angle 49 82 61 35.00 120.00
+angle 16 82 61 70.00 113.60
+angle 16 82 61 70.00 115.00
+angle 20 82 61 70.00 115.00
+angle 57 82 61 70.00 120.00
+angle 13 82 61 70.00 125.00
+angle 44 82 61 70.00 126.10
+angle 24 82 61 70.00 126.20
+angle 57 82 79 70.00 120.00
+angle 61 82 79 70.00 120.00
+angle 20 82 86 70.00 122.00
+angle 61 82 86 70.00 130.00
+angle 57 82 87 70.00 106.20
+angle 56 82 87 70.00 127.70
+angle 49 83 61 35.00 120.00
+angle 48 83 61 70.00 111.00
+angle 13 83 61 70.00 124.50
+angle 49 83 84 35.00 128.20
+angle 61 83 84 70.00 111.00
+angle 13 83 84 70.00 130.70
+angle 13 84 16 70.00 125.00
+angle 13 84 20 70.00 121.60
+angle 16 84 24 70.00 125.00
+angle 20 84 49 35.00 113.40
+angle 16 84 49 35.00 125.00
+angle 48 84 49 35.00 130.70
+angle 49 84 50 35.00 130.70
+angle 20 84 50 70.00 110.00
+angle 49 84 57 35.00 121.60
+angle 13 84 57 70.00 121.60
+angle 48 84 57 70.00 121.60
+angle 3 84 57 85.00 120.00
+angle 57 84 58 35.00 120.00
+angle 13 84 61 70.00 118.90
+angle 49 84 80 35.00 120.00
+angle 57 84 80 70.00 108.70
+angle 49 84 83 35.00 130.70
+angle 57 84 83 70.00 106.30
+angle 20 84 83 70.00 108.00
+angle 16 84 83 70.00 111.00
+angle 13 84 83 70.00 130.70
+angle 13 84 84 70.00 120.00
+angle 57 84 84 70.00 120.00
+angle 61 84 84 70.00 120.00
+angle 20 84 86 70.00 121.60
+angle 57 84 86 70.00 121.60
+angle 49 84 87 35.00 132.10
+angle 57 84 87 70.00 107.70
+angle 20 84 87 70.00 110.60
+angle 16 84 87 70.00 111.00
+angle 61 84 87 70.00 111.90
+angle 13 84 87 70.00 132.10
+angle 48 84 87 70.00 132.10
+angle 86 84 87 70.00 132.10
+angle 3 84 87 85.00 120.00
+angle 49 85 57 35.00 120.00
+angle 13 85 57 70.00 121.60
+angle 49 85 85 35.00 130.70
+angle 57 85 85 70.00 106.30
+angle 13 85 85 70.00 130.70
+angle 48 86 48 63.00 120.00
+angle 48 86 56 70.00 124.00
+angle 48 86 82 63.00 120.00
+angle 48 86 83 63.00 120.00
+angle 48 86 84 63.00 120.00
+angle 48 86 86 63.00 120.00
+angle 56 86 86 70.00 124.00
+angle 48 86 87 63.00 120.00
+angle 48 86 88 63.00 120.00
+angle 49 87 60 35.00 120.00
+angle 46 87 60 35.00 126.80
+angle 13 87 60 70.00 128.60
+angle 49 87 84 35.00 125.70
+angle 46 87 84 35.00 126.80
+angle 84 87 84 70.00 103.80
+angle 82 87 84 70.00 110.40
+angle 2 87 84 70.00 125.00
+angle 13 87 84 70.00 125.00
+angle 3 87 84 70.00 130.00
+angle 60 87 84 85.00 106.40
+angle 84 87 86 70.00 125.70
+angle 49 87 87 35.00 127.50
+angle 60 87 87 70.00 107.30
+angle 84 87 87 70.00 107.30
+angle 86 87 87 70.00 127.50
+angle 84 87 88 70.00 103.80
+angle 48 88 49 35.00 128.60
+angle 49 88 61 35.00 118.90
+angle 13 88 61 70.00 118.90
+angle 19 88 61 70.00 118.90
+angle 61 88 87 70.00 111.90
+angle 4 89 90 80.00 134.00
+angle 90 89 91 70.00 91.00
+angle 4 89 91 80.00 134.00
+angle 13 90 89 55.00 127.00
+angle 89 90 91 50.00 94.00
+angle 13 90 91 50.00 126.00
+angle 24 91 46 35.00 108.00
+angle 13 91 46 35.00 114.30
+angle 44 91 46 35.00 114.30
+angle 46 91 46 35.00 114.30
+angle 16 91 46 37.50 108.00
+angle 46 91 47 35.00 109.50
+angle 46 91 89 37.50 110.00
+angle 24 91 89 70.00 117.00
+angle 46 91 90 35.00 111.00
+angle 16 91 90 55.00 109.00
+angle 91 91 91 30.00 79.20
+angle 13 91 91 37.50 117.20
+angle 44 91 91 37.50 117.20
+angle 46 91 91 37.50 117.20
+angle 24 91 91 37.50 126.00
+angle 16 91 91 55.00 128.00
+angle 89 91 91 63.00 85.00
+angle 47 91 91 63.00 114.00
+angle 90 91 91 80.00 89.00
+angle 13 95 13 172.80 120.00
+angle 13 95 46 144.00 120.00
+angle 13 101 45 35.00 109.50
+angle 45 101 45 43.60 106.40
+angle 45 101 48 50.00 112.50
+angle 13 101 48 50.00 120.50
+angle 13 102 103 80.00 117.50
+angle 48 102 103 80.00 117.50
+angle 103 102 103 80.00 125.00
+angle 25 103 25 10.00 109.50
+angle 25 103 102 10.00 109.50
+angle 13 104 13 45.00 109.50
+angle 3 105 10 70.00 117.60
+angle 3 105 13 70.00 117.60
+angle 3 105 45 35.00 119.20
+angle 45 105 47 35.00 119.20
+angle 13 105 47 70.00 121.20
+angle 3 105 47 70.00 121.60
+angle 3 105 51 70.00 117.60
+angle 47 105 51 70.00 121.20
+angle 45 105 60 30.00 125.80
+angle 6 105 60 70.00 125.80
+angle 10 105 60 70.00 125.80
+angle 13 105 60 70.00 125.80
+angle 51 105 60 70.00 125.80
+angle 45 105 62 30.00 128.80
+angle 60 105 62 70.00 105.40
+angle 6 105 62 70.00 128.80
+angle 10 105 62 70.00 128.80
+angle 13 105 62 70.00 128.80
+angle 51 105 62 70.00 128.80
+angle 4 106 24 20.00 109.50
+angle 24 106 24 20.00 109.50
+angle 13 107 13 50.00 118.00
+angle 3 107 13 50.00 121.90
+angle 1 108 13 35.00 110.50
+angle 13 108 13 60.00 110.00
+angle 13 108 20 60.00 100.00
+angle 20 108 20 60.00 110.00
+angle 13 108 21 35.00 110.50
+angle 45 108 45 35.00 109.50
+angle 13 108 45 35.00 110.50
+angle 46 108 46 35.00 109.50
+angle 13 108 46 35.00 110.50
+angle 13 108 65 35.00 110.50
+angle 13 108 66 35.00 110.50
+angle 13 108 108 50.00 112.00
+angle 46 109 48 35.00 123.30
+angle 46 109 50 35.00 120.00
+angle 13 109 50 70.00 124.00
+angle 46 109 109 35.00 120.00
+angle 13 109 109 70.00 124.00
+angle 50 109 109 70.00 124.00
+angle 48 109 109 85.00 117.00
+angle 4 110 47 160.00 180.00
+angle 47 110 47 160.00 180.00
+
+
+ ################################
+ ## ##
+ ## Urey-Bradley Parameters ##
+ ## ##
+ ################################
+
+
+ureybrad 35 34 35 38.25 1.5537
+
+
+ #####################################
+ ## ##
+ ## Improper Torsional Parameters ##
+ ## ##
+ #####################################
+
+
+imptors 0 0 3 4 21.000 180.0 2
+imptors 0 0 3 52 21.000 180.0 2
+imptors 0 0 24 0 5.000 180.0 2
+imptors 0 0 47 0 30.000 180.0 2
+imptors 0 0 48 0 5.000 180.0 2
+
+
+ ############################
+ ## ##
+ ## Torsional Parameters ##
+ ## ##
+ ############################
+
+
+ ###################################################################
+ ## ##
+ ## Alternative Torsional Parameter Values for Use with OPLS-AA ##
+ ## ##
+ ## For some torsions, OPLS-AA has multiple possible parameter ##
+ ## values; the list below shows functional groups for which ##
+ ## these alternate (commented) values should be preferred; the ##
+ ## values are in the same order as in the full parameter list ##
+ ## ##
+ ## 4 3 3 36 generic (default) ##
+ ## 4 3 3 36 dicarbonyls ##
+ ## 36 3 3 36 hydrocarbon (default) ##
+ ## 36 3 3 36 dicarbonyls ##
+ ## 13 3 5 7 carboxylic acid (default) ##
+ ## 13 3 5 7 1,2-diacid monoanion ##
+ ## 4 3 13 13 peptide (default) ##
+ ## 4 3 13 13 propanamide ##
+ ## 4 3 13 13 carboxylic acid ##
+ ## 4 3 13 13 dicarboxylic acid ##
+ ## 4 3 13 13 aldyhyde, ketone, acyl halide ##
+ ## 4 3 13 13 1,2-diacid monoanion ##
+ ## 5 3 13 13 carboxylic acid (default) ##
+ ## 5 3 13 13 dicarboxylic acid ##
+ ## 35 3 13 13 peptide psi' (default) ##
+ ## 35 3 13 13 propanamide ##
+ ## 35 3 13 13 beta-3-peptide, last psi ##
+ ## 4 3 29 13 esters (default) ##
+ ## 4 3 29 13 benzoic esters ##
+ ## 7 5 13 13 alcohols (default) ##
+ ## 7 5 13 13 trifluoroethanol ##
+ ## 7 5 13 13 hexopyranoses ##
+ ## 7 5 13 36 alcohols (default) ##
+ ## 7 5 13 36 axial cyclohexanol ##
+ ## 7 5 13 36 trifluoroethanol ##
+ ## 0 13 13 13 alcohols, ethers (default) ##
+ ## 0 13 13 13 hexopyranoses ##
+ ## 3 13 13 3 dicarboxylic acid (default) ##
+ ## 3 13 13 3 1,2-diacid monoanion ##
+ ## 3 13 13 13 butanamide (default) ##
+ ## 3 13 13 13 carboxylate ion ##
+ ## 3 13 13 13 aldyhyde, ketone, acyl halide ##
+ ## 3 13 13 36 all carbonyls (default) ##
+ ## 3 13 13 36 dicarboxylic acid ##
+ ## 3 13 13 36 aldehyde, ketone, acyl halide ##
+ ## 5 13 13 5 diols only (default) ##
+ ## 5 13 13 5 triols only ##
+ ## 5 13 13 5 hexopyranoses ##
+ ## 13 13 13 13 hydrocarbon (default) ##
+ ## 13 13 13 13 perfluoroalkane ##
+ ## 13 13 13 35 peptide chi-1 (default) ##
+ ## 13 13 13 35 N-propylformamide ##
+ ## 36 13 13 69 generic (default) ##
+ ## 36 13 13 69 sulfone ##
+ ## 13 13 33 13 amine (default) ##
+ ## 13 13 33 13 exocyclic amine ##
+ ## 13 13 33 13 exocyclic 1,4-diamine ##
+ ## 13 13 33 34 amine (default) ##
+ ## 13 13 33 34 azetidine, 4-ring ##
+ ## 13 13 33 34 pyrrolidine, 5-ring ##
+ ## 13 13 33 34 cyclic amine ##
+ ## 13 13 33 34 cyclic 1,4-diamine ##
+ ## 13 13 35 3 peptide phi' (default) ##
+ ## 13 13 35 3 N-ethylformamide ##
+ ## 13 13 35 3 beta-3-peptide, first theta tors ##
+ ## 13 13 35 13 proline, CD-N-CA-CB (default) ##
+ ## 13 13 35 13 proline, CG-CD-N-CA ##
+ ## 36 13 35 3 peptide phi'' (default) ##
+ ## 36 13 35 3 N-methylformamide ##
+ ## 13 13 47 0 imidazole, indole, purine (default) ##
+ ## 13 13 47 0 nucleoside chi ##
+ ## 13 13 47 52 nucleoside (default) ##
+ ## 13 13 47 52 imidazole, indole, purine ##
+ ## 29 13 47 0 imidazole, indole, purine (default) ##
+ ## 29 13 47 0 nucleoside chi ##
+ ## 29 13 95 52 nucleoside (default) ##
+ ## 29 13 95 52 imidazole, indole, purine ##
+ ## 13 13 97 13 generic (default) ##
+ ## 13 13 97 13 generic ##
+ ## 17 15 38 0 aromatic thiol (default) ##
+ ## 17 15 38 0 aromatic thiol, N-C-S-H ##
+ ## 13 29 54 42 phosphonates (default) ##
+ ## 13 29 54 42 dimethyl phosphate ##
+ ## 34 35 72 16 diaryl amine (default) ##
+ ## 34 35 72 16 aniline-like ##
+ ## 34 35 72 29 diaryl amine (default) ##
+ ## 34 35 72 29 aniline-like ##
+ ## 13 40 40 37 diene (default) ##
+ ## 13 40 40 37 2-methyl-1,3-butadiene ##
+ ## 0 46 72 0 generic (default) ##
+ ## 0 46 72 0 generic ##
+ ## 0 47 72 0 generic (default) ##
+ ## 0 47 72 0 generic ##
+ ## 0 47 74 0 generic (default) ##
+ ## 0 47 74 0 generic ##
+ ## 0 47 74 0 generic ##
+ ## 0 51 72 0 generic (default) ##
+ ## 0 51 72 0 HA-CR-NB-?? or N?-CR-NB-?? ##
+ ## 0 72 77 0 generic (default) ##
+ ## 0 72 77 0 biphenyl-like, N-C-C-C ##
+ ## ##
+ ###################################################################
+
+
+torsion 0 2 2 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 0 2 2 6 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 1 2 2 2 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
+torsion 1 2 2 6 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
+torsion 2 2 2 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 13 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 2 65 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
+torsion 6 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 6 2 2 65 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
+torsion 10 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
+torsion 6 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
+torsion 10 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
+torsion 0 2 10 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 10 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 2 2 13 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
+torsion 6 2 20 2 -7.400 0.0 1 3.000 180.0 2 1.800 0.0 3
+torsion 6 2 20 6 -8.400 0.0 1 3.000 180.0 2 1.800 0.0 3
+torsion 4 3 3 4 1.600 0.0 1 3.200 180.0 2 0.000 0.0 3
+torsion 4 3 3 13 0.000 0.0 1 0.500 180.0 2 0.000 0.0 3
+torsion 4 3 3 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 3 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 4 3 3 36 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 13 3 3 13 0.700 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 13 3 3 24 -0.500 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 13 3 3 46 0.800 0.0 1 -0.760 180.0 2 0.000 0.0 3
+torsion 24 3 3 46 -0.900 0.0 1 0.300 180.0 2 0.000 0.0 3
+torsion 46 3 3 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+#torsion 36 3 3 36 0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 3 5 7 3.000 0.0 1 5.500 180.0 2 0.000 0.0 3
+torsion 4 3 5 7 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 13 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
+#torsion 13 3 5 7 3.200 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 24 3 5 7 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 46 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
+torsion 48 3 5 7 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 1 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 3 3 13 46 0.000 0.0 1 0.000 180.0 2 0.085 0.0 3
+torsion 4 3 13 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 4 3 13 13 0.000 0.0 1 1.166 180.0 2 0.000 0.0 3
+#torsion 4 3 13 13 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
+#torsion 4 3 13 13 -0.750 0.0 1 -0.550 180.0 2 -0.250 0.0 3
+#torsion 4 3 13 13 -0.277 0.0 1 1.228 180.0 2 -0.694 0.0 3
+#torsion 4 3 13 13 -1.000 0.0 1 -1.900 180.0 2 -0.900 0.0 3
+torsion 4 3 13 21 -0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 44 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 4 3 13 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 13 48 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
+torsion 5 3 13 13 0.000 0.0 1 1.412 180.0 2 0.000 0.0 3
+#torsion 5 3 13 13 1.000 0.0 1 0.546 180.0 2 0.450 0.0 3
+torsion 5 3 13 44 5.260 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 5 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 3 13 13 1.454 0.0 1 -0.144 180.0 2 -0.775 0.0 3
+torsion 13 3 13 46 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
+torsion 20 3 13 13 0.000 0.0 1 0.000 180.0 2 -0.553 0.0 3
+torsion 20 3 13 46 0.000 0.0 1 0.000 180.0 2 0.132 0.0 3
+torsion 21 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 24 3 13 13 1.173 0.0 1 0.189 180.0 2 -1.200 0.0 3
+#torsion 35 3 13 13 3.250 0.0 1 -0.402 180.0 2 -0.136 0.0 3
+#torsion 35 3 13 13 3.260 0.0 1 0.440 180.0 2 0.600 0.0 3
+torsion 24 3 13 21 0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 3 13 24 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
+torsion 24 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 48 3 13 46 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
+torsion 52 3 13 13 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 52 3 13 44 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 52 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 65 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 65 3 13 46 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
+torsion 107 3 13 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 20 13 0.000 0.0 1 5.124 180.0 2 0.000 0.0 3
+#torsion 4 3 29 13 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 4 3 20 48 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 13 3 20 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
+torsion 13 3 20 48 1.500 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 24 3 20 13 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 46 3 20 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
+torsion 48 3 20 13 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 3 3 24 13 0.400 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 3 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 3 24 5 0.000 0.0 1 6.603 180.0 2 0.000 0.0 3
+torsion 4 3 24 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 3 24 47 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 3 24 48 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 3 24 91 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 5 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 5 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 13 3 24 5 4.542 0.0 1 6.603 180.0 2 1.045 0.0 3
+torsion 13 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 13 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 13 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 20 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 20 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 24 3 24 3 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 24 3 24 13 4.600 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 46 3 24 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 46 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 47 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 48 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 48 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 48 3 24 84 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 48 3 24 87 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 84 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 84 3 24 84 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 84 3 24 87 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 87 3 24 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 87 3 24 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 87 3 24 84 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 87 3 24 87 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 0 3 47 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
+torsion 4 3 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 47 47 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 5 3 47 47 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 24 3 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 3 47 47 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 107 3 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 107 3 47 47 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 5 3 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 13 3 48 48 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 20 3 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 24 3 48 48 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 46 3 48 48 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
+torsion 0 3 50 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
+torsion 4 3 50 47 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 5 3 50 47 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 13 3 50 47 0.800 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 13 3 56 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 3 56 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 3 56 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 3 56 45 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 0 3 60 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
+torsion 4 3 60 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
+torsion 4 3 82 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 3 82 57 2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 4 3 82 61 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 82 3 82 57 -2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 82 3 82 61 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
+torsion 4 3 84 20 -0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 4 3 84 87 0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 84 3 84 20 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 84 3 84 87 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
+torsion 48 3 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 3 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 4 3 87 84 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 4 3 87 87 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 24 3 87 84 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 24 3 87 87 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 4 3 107 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 13 3 107 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 3 109 109 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 5 3 109 109 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
+torsion 0 4 106 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 10 2 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
+torsion 7 5 10 6 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
+torsion 7 5 13 2 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
+torsion 7 5 13 6 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
+torsion 7 5 13 13 -0.356 0.0 1 -0.174 180.0 2 0.492 0.0 3
+#torsion 7 5 13 13 4.478 0.0 1 -2.175 180.0 2 0.000 0.0 3
+#torsion 7 5 13 13 2.674 0.0 1 -2.883 180.0 2 1.026 0.0 3
+torsion 7 5 13 46 0.000 0.0 1 0.000 180.0 2 0.352 0.0 3
+#torsion 7 5 13 36 -2.589 0.0 1 -1.123 180.0 2 0.270 0.0 3
+#torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.476 0.0 3
+torsion 7 5 13 47 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 13 48 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 13 50 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 44 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 7 5 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 7 5 24 3 5.519 0.0 1 -6.700 180.0 2 0.581 0.0 3
+torsion 7 5 24 45 2.722 0.0 1 -5.154 180.0 2 0.000 0.0 3
+torsion 7 5 47 47 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
+torsion 7 5 48 48 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
+torsion 7 5 51 20 -1.257 0.0 1 -1.806 180.0 2 0.003 0.0 3
+torsion 7 5 56 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 7 5 64 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 64 5 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 79 13 -0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 79 23 0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 7 5 79 48 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 13 3 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
+torsion 0 13 13 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
+#torsion 0 13 13 13 -1.336 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 13 24 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
+torsion 1 13 13 1 -2.500 0.0 1 0.000 180.0 2 0.250 0.0 3
+torsion 1 13 13 5 0.000 0.0 1 0.000 180.0 2 0.540 0.0 3
+torsion 1 13 13 13 0.300 0.0 1 -0.400 180.0 2 0.400 0.0 3
+torsion 1 13 13 46 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 3 13 13 3 -0.550 0.0 1 0.000 180.0 2 1.000 0.0 3
+#torsion 3 13 13 3 0.800 0.0 1 0.000 180.0 2 0.900 0.0 3
+torsion 3 13 13 5 -6.180 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 13 13 -2.060 0.0 1 -0.313 180.0 2 0.315 0.0 3
+#torsion 3 13 13 13 -3.185 0.0 1 -0.825 180.0 2 0.493 0.0 3
+#torsion 3 13 13 13 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 15 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
+torsion 3 13 13 16 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
+torsion 3 13 13 24 -9.000 0.0 1 2.000 180.0 2 0.800 0.0 3
+torsion 3 13 13 46 0.000 0.0 1 0.000 180.0 2 -0.100 0.0 3
+#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 0.074 0.0 3
+#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.076 0.0 3
+torsion 3 13 13 48 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 80 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 5 13 13 5 9.508 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 5 13 13 5 12.234 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 5 13 13 5 9.066 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 13 -1.552 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 20 4.319 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 44 8.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 5 13 13 24 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
+torsion 5 13 13 46 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 13 13 13 13 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+#torsion 13 13 13 13 6.622 0. 1 0.948 180. 2 -1.388 0. 3 -2.118 180. 4
+torsion 13 13 13 15 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
+torsion 13 13 13 16 2.619 0.0 1 -0.620 180.0 2 0.258 0.0 3
+torsion 13 13 13 19 0.000 0.0 1 -0.650 180.0 2 0.000 0.0 3
+torsion 13 13 13 21 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 13 13 13 44 2.392 0.0 1 -0.674 180.0 2 0.550 0.0 3
+torsion 13 13 13 24 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+#torsion 13 13 13 35 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
+torsion 13 13 13 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 13 51 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+torsion 13 13 13 53 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
+torsion 13 13 13 65 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 13 13 13 66 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 13 13 13 79 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
+torsion 13 13 13 107 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
+torsion 13 13 13 108 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 15 13 13 46 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
+torsion 16 13 13 46 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
+torsion 19 13 13 46 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
+torsion 20 13 13 20 -0.550 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 20 13 13 46 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 21 13 13 21 -0.250 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 13 13 44 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 13 13 46 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 44 13 13 44 11.035 0.0 1 -0.968 180.0 2 0.270 0.0 3
+torsion 44 13 13 46 -1.013 0.0 1 -0.709 180.0 2 0.473 0.0 3
+torsion 44 13 13 48 -0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 13 13 46 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
+torsion 24 13 13 48 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 24 13 13 80 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 46 13 13 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 13 47 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
+torsion 46 13 13 48 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 51 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 13 53 0.000 0.0 1 0.000 180.0 2 0.384 0.0 3
+torsion 46 13 13 55 0.000 0.0 1 0.000 180.0 2 -0.582 0.0 3
+torsion 46 13 13 59 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 62 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 65 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 46 13 13 66 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 46 13 13 79 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
+#torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 13 80 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 82 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 83 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 84 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 87 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 88 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 13 102 0.000 0.0 1 0.000 180.0 2 -0.225 0.0 3
+torsion 46 13 13 104 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 13 107 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
+torsion 46 13 13 108 0.000 0.0 1 0.000 180.0 2 0.450 0.0 3
+torsion 46 13 13 109 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
+torsion 48 13 13 53 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 108 13 13 108 5.200 0.0 1 -0.500 180.0 2 0.000 0.0 3
+torsion 13 13 15 17 -0.759 0.0 1 -0.282 180.0 2 0.680 0.0 3
+torsion 46 13 15 17 0.000 0.0 1 0.000 180.0 2 0.480 0.0 3
+torsion 13 13 16 13 0.925 0.0 1 -0.576 180.0 2 0.677 0.0 3
+torsion 13 13 16 16 1.941 0.0 1 -0.836 180.0 2 0.935 0.0 3
+torsion 46 13 16 13 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
+torsion 46 13 16 16 0.000 0.0 1 0.000 180.0 2 0.558 0.0 3
+torsion 46 13 16 48 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
+torsion 0 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 19 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 20 13 -0.521 0.0 1 -2.018 180.0 2 1.996 0.0 3
+torsion 56 13 20 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
+torsion 57 13 20 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
+torsion 13 13 20 3 -1.220 0.0 1 -0.126 180.0 2 0.422 0.0 3
+torsion 13 13 20 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
+torsion 13 13 20 64 -1.420 0.0 1 -0.620 180.0 2 0.100 0.0 3
+torsion 46 13 20 0 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 3 0.000 0.0 1 0.000 180.0 2 0.198 0.0 3
+torsion 46 13 20 47 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 48 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 51 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 46 13 20 64 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 44 13 0.416 0.0 1 -0.128 180.0 2 0.695 0.0 3
+#torsion 13 13 33 13 1.536 0.0 1 -0.128 180.0 2 0.695 0.0 3
+#torsion 13 13 33 13 1.464 0.0 1 -0.128 180.0 2 0.695 0.0 3
+torsion 13 13 44 45 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
+#torsion 13 13 33 34 0.000 0.0 1 4.000 180.0 2 0.000 0.0 3
+#torsion 13 13 33 34 0.200 0.0 1 -0.417 180.0 2 0.418 0.0 3
+#torsion 13 13 33 34 0.819 0.0 1 -0.417 180.0 2 0.418 0.0 3
+#torsion 13 13 33 34 1.522 0.0 1 -0.417 180.0 2 0.418 0.0 3
+torsion 46 13 44 13 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
+torsion 46 13 44 45 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 46 13 44 48 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
+torsion 0 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 24 3 -2.365 0.0 1 0.912 180.0 2 -0.850 0.0 3
+torsion 3 13 24 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
+torsion 3 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 24 3 0.000 0.0 1 0.462 180.0 2 0.000 0.0 3
+#torsion 13 13 35 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+#torsion 13 13 35 3 1.130 0.0 1 -1.420 180.0 2 0.440 0.0 3
+torsion 13 13 24 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
+#torsion 13 13 35 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
+torsion 13 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 24 59 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 24 79 2.929 0.0 1 -2.533 180.0 2 0.497 0.0 3
+torsion 13 13 24 91 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 46 13 24 3 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
+torsion 46 13 24 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 24 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 24 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 24 79 1.362 0.0 1 -1.457 180.0 2 0.149 0.0 3
+torsion 48 13 24 59 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 47 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
+torsion 0 13 47 46 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 0 13 47 47 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 47 50 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 47 47 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 47 13 2.817 0.0 1 -0.169 180.0 2 0.543 0.0 3
+torsion 13 13 47 47 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 13 13 47 50 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 46 13 47 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 47 46 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
+torsion 46 13 47 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 47 50 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 47 110 0.000 0.0 1 0.000 180.0 2 -0.250 0.0 3
+torsion 47 13 47 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 47 13 47 46 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 0 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 48 48 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
+torsion 13 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 48 56 -0.500 0.0 1 0.500 180.0 2 -0.500 0.0 3
+torsion 21 13 48 48 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
+torsion 46 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 64 13 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 65 13 48 48 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
+torsion 0 13 50 47 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 50 50 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 46 13 50 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 50 50 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 13 50 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 13 13 51 0 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
+torsion 13 13 51 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 51 20 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
+torsion 13 13 53 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
+torsion 13 13 53 45 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
+torsion 46 13 53 13 0.000 0.0 1 0.000 180.0 2 0.302 0.0 3
+torsion 46 13 53 45 0.000 0.0 1 0.000 180.0 2 0.261 0.0 3
+torsion 46 13 53 48 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 46 13 53 54 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 55 45 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
+torsion 13 13 55 48 1.829 0.0 1 0.243 180.0 2 -0.498 0.0 3
+torsion 13 13 55 54 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
+torsion 46 13 55 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 55 45 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 55 48 0.000 0.0 1 0.000 180.0 2 0.177 0.0 3
+torsion 13 13 56 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 57 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 57 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+#torsion 13 13 47 0 0.000 0.0 1 -0.576 180.0 2 0.000 0.0 3
+torsion 13 13 57 62 2.756 0.0 1 -0.872 180.0 2 -3.680 0.0 3
+#torsion 13 13 47 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 13 13 57 82 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 20 13 57 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+#torsion 29 13 47 0 0.000 0.0 1 -1.876 180.0 2 0.000 0.0 3
+torsion 20 13 57 62 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 20 13 57 82 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 13 13 59 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 59 56 0.000 0.0 1 0.500 180.0 2 -0.500 0.0 3
+torsion 46 13 59 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 62 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 62 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 64 20 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
+torsion 46 13 64 52 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
+torsion 48 13 64 20 2.250 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 48 13 64 52 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 79 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 79 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 79 5 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 79 13 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 79 23 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 46 13 79 48 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
+torsion 13 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 80 60 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 80 84 -0.714 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 80 60 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 80 84 0.000 0.0 1 0.000 180.0 2 -0.480 0.0 3
+torsion 13 13 82 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 82 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 83 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 83 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 84 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
+torsion 13 13 84 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 84 57 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
+torsion 21 13 84 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
+torsion 46 13 84 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 1 13 87 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
+torsion 13 13 87 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 21 13 87 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
+torsion 46 13 87 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 88 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 88 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 13 90 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 90 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 91 91 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 13 95 13 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
+torsion 13 13 95 46 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
+torsion 13 13 102 103 0.000 0.0 1 0.400 180.0 2 0.000 0.0 3
+torsion 46 13 102 103 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 104 13 1.000 0.0 1 -0.500 180.0 2 0.500 0.0 3
+torsion 46 13 104 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 0 13 105 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 105 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 13 13 105 62 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 13 13 105 82 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
+torsion 20 13 105 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 20 13 105 62 3.132 0.0 1 -1.491 180.0 2 2.744 0.0 3
+#torsion 29 13 95 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 20 13 105 82 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
+torsion 3 13 107 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
+torsion 13 13 107 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+torsion 13 13 107 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
+#torsion 13 13 97 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
+torsion 46 13 107 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
+torsion 46 13 107 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 107 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 108 13 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 108 45 0.000 0.0 1 0.000 180.0 2 0.260 0.0 3
+torsion 46 13 108 13 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
+torsion 46 13 108 20 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 13 108 45 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
+torsion 13 13 109 109 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
+torsion 46 13 109 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 13 109 46 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
+torsion 46 13 109 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 17 15 48 0 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+#torsion 17 15 38 0 -3.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 17 15 48 48 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
+torsion 13 16 16 13 0.000 0.0 1 -7.414 180.0 2 1.705 0.0 3
+torsion 13 16 48 48 0.000 0.0 1 0.600 180.0 2 0.000 0.0 3
+torsion 13 16 48 56 1.600 0.0 1 5.100 180.0 2 0.000 0.0 3
+torsion 13 16 59 56 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
+torsion 84 16 82 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 84 16 82 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 16 84 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 16 84 83 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 16 84 88 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 16 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 18 48 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 18 48 48 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 18 18 56 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 18 18 56 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 19 19 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 19 19 109 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 19 19 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 19 19 109 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 19 47 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 19 47 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 19 19 47 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 20 44 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 20 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 20 47 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
+torsion 13 20 47 46 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 13 20 47 47 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 13 20 47 50 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 3 20 48 48 0.000 0.0 1 2.500 180.0 2 0.000 0.0 3
+torsion 13 20 48 48 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 13 20 48 56 0.400 0.0 1 5.500 180.0 2 0.000 0.0 3
+torsion 64 20 48 48 0.000 0.0 1 2.990 180.0 2 0.000 0.0 3
+torsion 13 20 51 5 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
+torsion 13 20 51 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
+torsion 13 20 51 20 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
+torsion 13 20 51 46 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
+torsion 13 20 56 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 13 20 59 56 0.000 0.0 1 5.200 180.0 2 0.000 0.0 3
+torsion 0 20 64 52 0.000 0.0 1 0.000 180.0 2 0.562 0.0 3
+torsion 13 20 64 13 3.500 0.0 1 -3.300 180.0 2 1.500 0.0 3
+torsion 13 20 64 52 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+#torsion 13 29 54 42 0.900 0.0 1 -2.930 180.0 2 2.640 0.0 3
+torsion 48 20 64 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 84 20 82 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 20 84 88 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 84 20 84 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 84 20 84 87 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 108 20 108 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 108 20 108 20 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 44 44 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 44 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 45 44 44 45 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 44 48 48 -7.582 0.0 1 3.431 180.0 2 3.198 0.0 3
+torsion 45 44 48 48 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 59 44 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 82 44 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 84 44 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 44 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 44 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 44 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 44 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 0 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 3 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 13 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 59 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 82 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 84 24 48 48 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 0 24 59 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 24 59 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 45 24 59 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 24 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 24 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 24 79 48 2.074 0.0 1 -2.966 180.0 2 2.473 0.0 3
+torsion 45 24 79 48 1.671 0.0 1 -4.901 180.0 2 0.669 0.0 3
+torsion 13 24 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 24 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+#torsion 34 35 72 16 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 45 24 82 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+#torsion 34 35 72 29 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 45 24 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 82 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 82 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 0 24 84 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 84 84 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 45 24 84 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 24 84 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 84 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 24 84 20 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 3 24 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 86 56 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 47 24 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 47 24 86 56 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 24 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 24 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 24 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 24 91 89 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+torsion 3 24 91 91 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
+torsion 45 24 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 45 24 91 89 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 45 24 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 24 106 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 47 46 47 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 47 46 47 46 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
+torsion 0 47 47 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 0 47 47 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 3 47 47 24 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 3 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 5 47 47 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 5 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 20 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 19 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 20 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 21 47 47 21 -1.600 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 21 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 47 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 48 48 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
+torsion 46 47 48 48 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 47 48 56 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 47 48 48 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 13 47 50 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 47 50 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 24 47 50 3 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 47 50 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 0 47 84 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 47 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 3 47 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 47 86 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 47 86 24 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 47 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 47 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 13 47 110 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 47 110 47 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 48 48 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 1 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 1 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 48 48 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 21 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 21 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 44 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 47 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 55 0.0 0. 1 1.62 180. 2 0.0 0. 3 -0.44 180. 4
+torsion 48 48 48 60 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 65 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 66 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 48 109 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 60 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 65 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 66 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 48 109 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 48 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 50 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 48 48 50 47 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 56 48 50 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 56 48 50 47 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 48 48 53 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 48 48 53 54 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 48 55 45 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 48 48 55 45 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
+torsion 55 48 55 13 0.000 0.0 1 7.936 180.0 2 0.000 0.0 3
+torsion 55 48 55 45 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
+torsion 60 48 55 45 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 0 48 56 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 48 60 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
+torsion 0 48 79 23 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 48 48 79 13 0.000 0.0 1 -0.900 180.0 2 0.000 0.0 3
+torsion 48 48 79 24 1.656 0.0 1 -0.768 180.0 2 -0.117 0.0 3
+torsion 48 48 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 86 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 48 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 86 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 48 88 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 56 48 101 13 0.000 0.0 1 3.651 180.0 2 0.000 0.0 3
+torsion 48 48 102 103 0.000 0.0 1 1.150 180.0 2 0.000 0.0 3
+torsion 48 48 109 13 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
+torsion 48 48 109 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 48 48 109 109 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
+torsion 0 50 50 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 3 50 50 3 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 50 50 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 50 50 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 50 50 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+#torsion 13 40 40 37 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
+torsion 46 50 50 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 50 50 47 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 50 47 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
+torsion 13 50 109 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 13 50 109 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 46 50 109 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 50 109 46 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
+torsion 46 50 109 109 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 109 13 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 109 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
+torsion 47 50 109 109 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
+torsion 13 53 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 48 53 82 61 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
+torsion 45 55 59 0 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
+torsion 13 56 56 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 13 56 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 56 56 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 59 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 59 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 56 62 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 56 82 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+#torsion 0 46 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 48 56 86 48 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 56 86 86 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 57 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 45 57 60 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 0 57 61 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 57 62 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 57 81 0 0.000 0.0 1 3.050 180.0 2 0.000 0.0 3
+torsion 0 57 82 0 0.000 0.0 1 4.650 180.0 2 0.000 0.0 3
+#torsion 0 47 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 57 82 49 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 45 57 82 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 0 57 84 0 0.000 0.0 1 2.800 180.0 2 0.000 0.0 3
+#torsion 0 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+#torsion 0 47 74 0 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
+torsion 45 57 84 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 61 57 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 84 57 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 60 60 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 60 61 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 60 80 0 0.000 0.0 1 3.350 180.0 2 0.000 0.0 3
+torsion 0 60 81 0 0.000 0.0 1 6.000 180.0 2 0.000 0.0 3
+torsion 0 60 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 60 87 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 60 60 87 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 61 61 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 62 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 82 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+#torsion 0 51 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 82 49 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 83 61 82 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 88 61 82 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 88 61 82 20 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 61 83 0 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
+torsion 82 61 83 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 61 83 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 61 84 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
+torsion 0 61 88 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 82 61 88 84 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 80 84 0 0.000 0.0 1 13.050 180.0 2 0.000 0.0 3
+torsion 0 82 84 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 16 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 20 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 57 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 61 82 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 82 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+#torsion 0 72 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 83 84 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 0 83 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 83 84 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 83 84 16 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 83 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 61 83 84 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 61 83 84 20 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 61 83 84 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 83 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 61 83 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 61 83 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 84 83 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 84 84 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 0 84 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 16 84 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 49 84 84 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 0 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 16 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 20 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 57 84 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 84 87 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 84 87 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 84 87 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 84 88 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 16 84 88 49 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+torsion 16 84 88 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 20 84 88 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 84 88 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 49 84 88 61 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 48 86 86 48 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 86 56 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 87 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 48 86 88 61 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 56 86 88 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 87 87 20 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 87 87 57 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 0 87 87 87 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
+torsion 49 87 87 49 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 4 89 90 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 89 90 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 4 89 90 48 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 4 89 90 91 0.000 0.0 1 20.000 180.0 2 0.000 0.0 3
+torsion 91 89 90 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 91 89 90 45 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
+torsion 91 89 90 48 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 91 89 90 91 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
+torsion 0 89 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 89 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 4 89 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 90 89 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 90 89 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 90 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 90 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 90 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 91 91 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 91 91 24 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 91 91 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 91 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 91 91 46 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 46 91 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 91 91 91 91 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 0 109 109 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 13 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 46 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 46 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 109 109 48 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 48 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 50 109 109 50 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 50 109 109 109 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
+torsion 109 109 109 109 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
+
+
+ ################################################################
+ ## ##
+ ## Additional Torsional Parameter Values Used with OPLS-AA ##
+ ## ##
+ ## The torsions listed below were added to official OPLS-AA ##
+ ## to complete the set needed for proteins; the values were ##
+ ## obtained by analogy from the closest OPLS-AA torsions; ##
+ ## most of the added values are for HIP or N-terminal AAs; ##
+ ## ##
+ ################################################################
+
+
+torsion 24 3 13 53 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
+torsion 52 3 13 24 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
+torsion 3 13 13 53 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 13 83 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 84 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 3 13 13 85 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
+torsion 5 13 13 53 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
+torsion 15 13 13 53 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
+torsion 16 13 13 53 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
+torsion 13 13 13 55 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
+torsion 24 13 13 83 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 53 13 13 83 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 13 13 84 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 53 13 13 84 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 24 13 13 85 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
+torsion 46 13 13 85 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
+torsion 53 13 13 85 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 3 13 53 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
+torsion 3 13 53 54 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
+torsion 13 13 53 54 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
+torsion 46 13 55 54 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 85 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 13 13 85 57 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
+torsion 46 13 85 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
+torsion 55 48 55 54 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
+torsion 0 48 81 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
+torsion 0 57 85 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
+torsion 0 85 85 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
+
+
+ ################################################################
+ ## ##
+ ## Additional Torsional Parameter Values Used with OPLS-AA ##
+ ## ##
+ ## The torsions listed below were added to official OPLS-AA ##
+ ## to complete the values needed for selected organics ##
+ ## ##
+ ################################################################
+
+
+torsion 13 13 13 20 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+torsion 13 13 13 47 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
+
+
+ ########################################
+ ## ##
+ ## Atomic Partial Charge Parameters ##
+ ## ##
+ ########################################
+
+
+charge 1 -0.2200
+charge 2 0.2200
+charge 3 0.5500
+charge 4 -0.5000
+charge 5 -0.5800
+charge 6 0.0800
+charge 7 0.4500
+charge 8 0.0000
+charge 9 0.0000
+charge 10 0.0000
+charge 11 0.0000
+charge 12 0.0000
+charge 13 0.0000
+charge 14 0.0000
+charge 15 0.0000
+charge 16 0.0000
+charge 17 0.0000
+charge 18 0.0000
+charge 19 0.0000
+charge 20 -0.7000
+charge 21 0.4350
+charge 22 0.2650
+charge 23 0.2650
+charge 24 -0.4700
+charge 25 -0.4500
+charge 26 -0.4700
+charge 27 -0.3000
+charge 28 0.2350
+charge 29 0.2700
+charge 30 0.1800
+charge 31 0.1800
+charge 32 0.2350
+charge 33 0.2350
+charge 34 0.3000
+charge 35 0.3000
+charge 36 -0.4300
+charge 37 0.2800
+charge 38 0.1500
+charge 39 0.2650
+charge 40 0.2650
+charge 41 -0.5000
+charge 42 0.2500
+charge 43 0.2500
+charge 44 0.5000
+charge 45 -0.2500
+charge 46 0.4200
+charge 47 -0.1400
+charge 48 0.2480
+charge 49 -0.0620
+charge 50 0.1390
+charge 51 -0.4590
+charge 52 0.1600
+charge 53 -0.5000
+charge 54 -0.5700
+charge 55 0.5000
+charge 56 0.2850
+charge 57 0.0000
+charge 58 0.0000
+charge 59 0.0000
+charge 60 0.0000
+charge 61 0.0000
+charge 62 0.0000
+charge 63 -0.8340
+charge 64 0.4170
+charge 65 0.0000
+charge 66 0.5200
+charge 67 -1.0400
+charge 68 -0.8220
+charge 69 0.4110
+charge 70 0.0000
+charge 71 0.5110
+charge 72 -1.0220
+charge 73 0.0000
+charge 74 0.2410
+charge 75 -0.2410
+charge 76 -0.8200
+charge 77 0.4100
+charge 78 -1.0200
+charge 79 0.3400
+charge 80 -0.1800
+charge 81 -0.1200
+charge 82 -0.0600
+charge 83 -0.2400
+charge 84 0.0000
+charge 85 0.0600
+charge 86 0.0000
+charge 87 -0.1150
+charge 88 -0.2300
+charge 89 0.1150
+charge 90 -0.1150
+charge 91 0.1150
+charge 92 0.0000
+charge 93 -0.0650
+charge 94 -0.0050
+charge 95 -0.1150
+charge 96 -0.6830
+charge 97 0.4180
+charge 98 0.0400
+charge 99 0.1450
+charge 100 0.2050
+charge 101 0.2650
+charge 102 0.1263
+charge 103 0.5323
+charge 104 -0.6351
+charge 105 0.4286
+charge 106 -0.2057
+charge 107 0.0825
+charge 108 0.1500
+charge 109 -0.5850
+charge 110 0.4350
+charge 111 -0.7000
+charge 112 0.4350
+charge 113 -0.7300
+charge 114 0.4650
+charge 115 0.1450
+charge 116 0.2050
+charge 117 0.2650
+charge 118 0.0600
+charge 119 -0.1700
+charge 120 0.0000
+charge 121 -0.2850
+charge 122 -0.4000
+charge 123 0.1100
+charge 124 0.1400
+charge 125 0.1700
+charge 126 0.2000
+charge 127 0.0300
+charge 128 -0.4000
+charge 129 -0.7000
+charge 130 0.4350
+charge 131 0.2000
+charge 132 0.1000
+charge 133 0.2650
+charge 134 0.1000
+charge 135 0.3000
+charge 136 0.1000
+charge 137 0.3650
+charge 138 0.1000
+charge 139 0.4000
+charge 140 0.4650
+charge 141 0.0850
+charge 142 -0.3350
+charge 143 -0.4700
+charge 144 -0.4350
+charge 145 -0.2175
+charge 146 0.1550
+charge 147 0.2350
+charge 148 0.0600
+charge 149 0.1200
+charge 150 0.1800
+charge 151 0.0375
+charge 152 0.0975
+charge 153 0.1575
+charge 154 0.2175
+charge 155 0.0375
+charge 156 0.0975
+charge 157 0.1575
+charge 158 0.2175
+charge 159 0.0000
+charge 160 0.2000
+charge 161 0.2600
+charge 162 0.3200
+charge 163 -0.0550
+charge 164 -0.3200
+charge 165 0.0800
+charge 166 0.1400
+charge 167 0.2000
+charge 168 -0.1200
+charge 169 0.0050
+charge 170 0.1025
+charge 171 0.1400
+charge 172 0.2000
+charge 173 0.7000
+charge 174 0.5650
+charge 175 0.5850
+charge 176 0.6150
+charge 177 0.5000
+charge 178 -0.5000
+charge 179 -0.7600
+charge 180 -0.5000
+charge 181 -0.1400
+charge 182 0.3800
+charge 183 0.3000
+charge 184 0.0200
+charge 185 -0.1100
+charge 186 0.0800
+charge 187 -0.0500
+charge 188 0.0100
+charge 189 0.1420
+charge 190 -0.3900
+charge 191 -0.5420
+charge 192 0.3330
+charge 193 -0.4900
+charge 194 0.4200
+charge 195 -0.4200
+charge 196 0.3700
+charge 197 0.0600
+charge 198 -0.1200
+charge 199 -0.0600
+charge 200 0.0000
+charge 201 0.0600
+charge 202 0.0350
+charge 203 0.3950
+charge 204 -0.4300
+charge 205 0.1800
+charge 206 -0.1800
+charge 207 -0.3850
+charge 208 0.0850
+charge 209 0.5200
+charge 210 -0.4400
+charge 211 -0.5300
+charge 212 0.4500
+charge 213 0.7000
+charge 214 -0.8000
+charge 215 -0.2800
+charge 216 -0.2200
+charge 217 -0.1600
+charge 218 -0.1000
+charge 219 0.4500
+charge 220 -0.4500
+charge 221 0.0000
+charge 222 0.4700
+charge 223 -0.4700
+charge 224 0.0600
+charge 225 0.0400
+charge 226 -0.0200
+charge 227 0.1000
+charge 228 -0.0900
+charge 229 -0.4000
+charge 230 -0.3000
+charge 231 0.0000
+charge 232 0.3500
+charge 233 0.3300
+charge 234 0.1300
+charge 235 0.1900
+charge 236 0.2500
+charge 237 0.3100
+charge 238 0.2300
+charge 239 0.1700
+charge 240 0.1100
+charge 241 0.0900
+charge 242 0.1500
+charge 243 -0.8000
+charge 244 0.4600
+charge 245 0.6400
+charge 246 -0.7000
+charge 247 0.4400
+charge 248 0.2000
+charge 249 -0.1100
+charge 250 0.1900
+charge 251 -0.0500
+charge 252 -0.2000
+charge 253 0.3100
+charge 254 -0.4600
+charge 255 0.3600
+charge 256 -0.8500
+charge 257 0.3700
+charge 258 -0.1500
+charge 259 0.1000
+charge 260 -0.0400
+charge 261 0.1000
+charge 262 -0.6000
+charge 263 0.5000
+charge 264 -0.5100
+charge 265 0.4500
+charge 266 -0.0700
+charge 267 0.0800
+charge 268 0.4100
+charge 269 -0.4000
+charge 270 0.3600
+charge 271 -0.4200
+charge 272 0.1000
+charge 273 0.1000
+charge 274 -0.1400
+charge 275 0.0800
+charge 276 -0.5600
+charge 277 0.5500
+charge 278 -0.5400
+charge 279 0.4600
+charge 280 -0.0600
+charge 281 0.1000
+charge 282 0.3800
+charge 283 -0.4800
+charge 284 -0.7900
+charge 285 0.3850
+charge 286 0.3550
+charge 287 0.1000
+charge 288 0.1000
+charge 289 -0.5300
+charge 290 0.2200
+charge 291 -0.5500
+charge 292 0.3800
+charge 293 0.1500
+charge 294 0.4400
+charge 295 -0.4900
+charge 296 0.2000
+charge 297 -0.5000
+charge 298 0.2000
+charge 299 -0.8100
+charge 300 0.3850
+charge 301 0.3550
+charge 302 0.2000
+charge 303 0.3500
+charge 304 -0.5600
+charge 305 0.4600
+charge 306 -0.5100
+charge 307 0.3400
+charge 308 0.1200
+charge 309 0.5200
+charge 310 0.3800
+charge 311 -0.8000
+charge 312 0.4000
+charge 313 -0.5100
+charge 314 -0.0100
+charge 315 0.1200
+charge 316 -0.0100
+charge 317 0.1400
+charge 318 -0.0100
+charge 319 0.1300
+charge 320 -0.6400
+charge 321 0.6500
+charge 322 -0.7400
+charge 323 0.6600
+charge 324 -0.0600
+charge 325 0.1000
+charge 326 0.4900
+charge 327 -0.3000
+charge 328 0.4800
+charge 329 -0.8100
+charge 330 0.4600
+charge 331 0.4300
+charge 332 0.1400
+charge 333 0.1400
+charge 334 0.0100
+charge 335 0.1600
+charge 336 0.7800
+charge 337 -0.6600
+charge 338 -0.4300
+charge 339 0.2000
+charge 340 0.1800
+charge 341 -0.0600
+charge 342 0.1200
+charge 343 -1.0000
+charge 344 -1.0000
+charge 345 -1.0000
+charge 346 -1.0000
+charge 347 1.0000
+charge 348 1.0000
+charge 349 1.0000
+charge 350 1.0000
+charge 351 1.0000
+charge 352 1.0000
+charge 353 2.0000
+charge 354 2.0000
+charge 355 2.0000
+charge 356 2.0000
+charge 357 -0.4000
+charge 358 0.1000
+charge 359 -0.9000
+charge 360 -0.2000
+charge 361 0.0600
+charge 362 -0.9800
+charge 363 -1.0700
+charge 364 0.1900
+charge 365 0.5100
+charge 366 -0.8200
+charge 367 -0.3000
+charge 368 0.0700
+charge 369 -1.3100
+charge 370 0.4000
+charge 371 -0.4000
+charge 372 0.0800
+charge 373 0.0000
+charge 374 0.0700
+charge 375 -0.9800
+charge 376 -1.3000
+charge 377 0.3000
+charge 378 2.5000
+charge 379 -0.2500
+charge 380 -0.8650
+charge 381 1.6200
+charge 382 -0.9200
+charge 383 -0.6000
+charge 384 0.3000
+charge 385 -0.0300
+charge 386 1.9200
+charge 387 -1.1200
+charge 388 -0.7000
+charge 389 0.4400
+charge 390 -0.1000
+charge 391 1.6200
+charge 392 -0.9700
+charge 393 -0.6300
+charge 394 0.2800
+charge 395 -0.0200
+charge 396 -0.5100
+charge 397 0.0800
+charge 398 -0.1400
+charge 399 0.3200
+charge 400 0.0200
+charge 401 -0.0400
+charge 402 -0.4700
+charge 403 0.1200
+charge 404 0.1400
+charge 405 0.2400
+charge 406 0.5100
+charge 407 -0.4300
+charge 408 -0.3300
+charge 409 0.1600
+charge 410 0.0300
+charge 411 0.6350
+charge 412 0.6250
+charge 413 0.1350
+charge 414 -0.2150
+charge 415 1.4800
+charge 416 -0.6800
+charge 417 -0.5400
+charge 418 0.1800
+charge 419 -1.0000
+charge 420 0.4400
+charge 421 -0.8000
+charge 422 0.4100
+charge 423 0.1800
+charge 424 0.0300
+charge 425 0.3900
+charge 426 -0.0600
+charge 427 -0.1800
+charge 428 0.0600
+charge 429 0.0000
+charge 430 0.0300
+charge 431 0.1900
+charge 432 0.2200
+charge 433 0.2500
+charge 434 1.3740
+charge 435 -0.6870
+charge 436 0.2450
+charge 437 0.1300
+charge 438 -0.4200
+charge 439 -0.0350
+charge 440 0.0250
+charge 441 0.0750
+charge 442 -0.0550
+charge 443 0.1300
+charge 444 -0.5700
+charge 445 0.4200
+charge 446 -0.0050
+charge 447 0.2950
+charge 448 -0.0150
+charge 449 0.0150
+charge 450 0.3850
+charge 451 0.2150
+charge 452 -0.4900
+charge 453 -0.5400
+charge 454 0.4600
+charge 455 -0.1150
+charge 456 0.0550
+charge 457 0.1150
+charge 458 -0.0300
+charge 459 0.0850
+charge 460 0.0000
+charge 461 -0.6780
+charge 462 0.4730
+charge 463 -0.4470
+charge 464 0.2270
+charge 465 0.0120
+charge 466 0.1550
+charge 467 0.0650
+charge 468 -0.4680
+charge 469 0.1920
+charge 470 0.0420
+charge 471 -0.8390
+charge 472 0.8740
+charge 473 0.6530
+charge 474 -0.6890
+charge 475 -0.0320
+charge 476 0.0110
+charge 477 0.1970
+charge 478 -0.3310
+charge 479 0.3780
+charge 480 -0.1600
+charge 481 -0.0090
+charge 482 0.1220
+charge 483 -0.2390
+charge 484 -0.1630
+charge 485 -0.1490
+charge 486 0.3170
+charge 487 0.1550
+charge 488 0.1180
+charge 489 -0.0590
+charge 490 -0.4910
+charge 491 0.2460
+charge 492 -0.3200
+charge 493 -0.0340
+charge 494 0.3010
+charge 495 0.0720
+charge 496 0.1500
+charge 497 0.1350
+charge 498 -0.2570
+charge 499 0.2750
+charge 500 -0.5630
+charge 501 0.1850
+charge 502 -0.2860
+charge 503 0.3060
+charge 504 0.0780
+charge 505 0.0750
+charge 506 0.1870
+charge 507 -0.1900
+charge 508 -0.0190
+charge 509 -0.1540
+charge 510 0.1420
+charge 511 0.1260
+charge 512 -0.2570
+charge 513 0.5110
+charge 514 -0.5900
+charge 515 0.1690
+charge 516 -0.1480
+charge 517 0.0430
+charge 518 0.0910
+charge 519 0.1810
+charge 520 -0.1220
+charge 521 -0.4130
+charge 522 0.4050
+charge 523 -0.4550
+charge 524 0.2500
+charge 525 0.0530
+charge 526 0.1840
+charge 527 0.0980
+charge 528 -0.5000
+charge 529 0.0010
+charge 530 -0.3900
+charge 531 -0.2700
+charge 532 -0.1270
+charge 533 -0.1080
+charge 534 -0.2580
+charge 535 0.2200
+charge 536 0.2250
+charge 537 0.3760
+charge 538 0.1470
+charge 539 0.1720
+charge 540 0.1550
+charge 541 0.1070
+charge 542 0.1100
+charge 543 0.1400
+charge 544 -0.6940
+charge 545 0.4250
+charge 546 -0.3590
+charge 547 -0.0080
+charge 548 -0.1970
+charge 549 -0.1120
+charge 550 -0.0700
+charge 551 -0.3070
+charge 552 0.5630
+charge 553 -0.0510
+charge 554 0.0280
+charge 555 0.1460
+charge 556 0.1190
+charge 557 0.1330
+charge 558 0.1130
+charge 559 0.1140
+charge 560 0.1570
+charge 561 -0.7600
+charge 562 0.6790
+charge 563 -0.7880
+charge 564 0.7360
+charge 565 0.0380
+charge 566 0.3430
+charge 567 -0.6420
+charge 568 0.4520
+charge 569 -0.6820
+charge 570 0.0240
+charge 571 0.1010
+charge 572 0.0860
+charge 573 0.4130
+charge 574 -0.0300
+charge 575 0.2420
+charge 576 -0.5150
+charge 577 0.2280
+charge 578 -0.2990
+charge 579 0.1010
+charge 580 0.0680
+charge 581 0.2050
+charge 582 -0.9510
+charge 583 0.9650
+charge 584 -0.0140
+charge 585 0.1300
+charge 586 0.0520
+charge 587 -0.5990
+charge 588 0.3920
+charge 589 -0.3480
+charge 590 0.0200
+charge 591 -0.0420
+charge 592 0.3470
+charge 593 -0.1960
+charge 594 0.0320
+charge 595 0.1460
+charge 596 0.1080
+charge 597 0.1400
+charge 598 0.1220
+charge 599 0.1660
+charge 600 -0.5800
+charge 601 0.1730
+charge 602 -0.3950
+charge 603 -0.1990
+charge 604 0.1180
+charge 605 0.0930
+charge 606 0.2080
+charge 607 0.0980
+charge 608 -0.1390
+charge 609 -0.0790
+charge 610 0.0990
+charge 611 -0.1680
+charge 612 -0.1080
+charge 613 -0.1890
+charge 614 -0.1290
+charge 615 -0.1690
+charge 616 -0.1090
+charge 617 -0.1380
+charge 618 -0.0780
+charge 619 -0.0250
+charge 620 0.0350
+charge 621 -0.0380
+charge 622 0.0220
+charge 623 -0.3340
+charge 624 0.2550
+charge 625 0.5230
+charge 626 0.5000
+charge 627 -0.1400
+charge 628 0.2275
+charge 629 0.1400
+charge 630 -0.0080
+charge 631 0.5880
+charge 632 -0.1030
+charge 633 -0.3320
+charge 634 0.0400
+charge 635 0.3420
+charge 636 -0.0500
+charge 637 -0.2050
+charge 638 3.0000
+charge 639 4.0000
+charge 640 3.0000
+charge 641 0.6190
+charge 642 -0.3950
+charge 643 0.1740
+charge 644 3.0000
+charge 645 3.0000
+charge 646 3.0000
+charge 647 3.0000
+charge 648 3.0000
+charge 649 -0.3440
+charge 650 -0.6280
+charge 651 0.2000
+charge 652 -0.1200
+charge 653 -0.0600
+charge 654 0.0000
+charge 655 -0.2300
+charge 656 0.0300
+charge 657 -0.0990
+charge 658 0.0990
+charge 659 0.2200
+charge 660 -0.2200
+charge 661 0.1300
+charge 662 -0.1300
+charge 663 -0.2200
+charge 664 0.2200
+charge 665 0.1500
+charge 666 0.4500
+charge 667 -0.2000
+charge 668 0.2000
+charge 669 -0.2000
+charge 670 0.2000
+charge 671 -0.2000
+charge 672 0.1000
+charge 673 -0.1000
+charge 674 0.0550
+charge 675 -0.2200
+charge 676 0.0650
+charge 677 0.0130
+charge 678 -0.1060
+charge 679 -0.0900
+charge 680 -0.1190
+charge 681 0.1410
+charge 682 0.1290
+charge 683 0.8270
+charge 684 -0.8850
+charge 685 0.4260
+charge 686 0.4650
+charge 687 0.1190
+charge 688 -0.0200
+charge 689 0.0400
+charge 690 -0.6200
+charge 691 -0.7850
+charge 692 -0.7850
+charge 693 0.5500
+charge 694 -0.5600
+charge 695 0.4600
+charge 696 -0.0800
+charge 697 -0.0200
+charge 698 0.0400
+charge 699 0.1000
+charge 700 0.0600
+charge 701 0.5400
+charge 702 -0.3700
+charge 703 0.0200
+charge 704 0.0600
+charge 705 0.0800
+charge 706 0.1400
+charge 707 0.2000
+charge 708 0.6500
+charge 709 0.0900
+charge 710 0.0350
+charge 711 -0.9000
+charge 712 -0.5000
+charge 713 0.8600
+charge 714 -0.4500
+charge 715 0.2100
+charge 716 0.1600
+charge 717 -0.1000
+charge 718 0.0300
+charge 719 0.0300
+charge 720 0.0600
+charge 721 -0.7800
+charge 722 0.9684
+charge 723 -0.5081
+charge 724 -0.0080
+charge 725 0.1720
+charge 726 1.3400
+charge 727 -0.3900
+charge 728 0.7940
+charge 729 -0.5980
+charge 730 -0.9000
+charge 731 -0.7800
+charge 732 -0.6300
+charge 733 0.0000
+charge 734 0.0200
+charge 735 0.0300
+charge 736 0.0600
+charge 737 0.0800
+charge 738 0.0900
+charge 739 0.3600
+charge 740 0.3800
+charge 741 0.0600
+charge 742 0.1200
+charge 743 0.1800
+charge 744 0.1400
+charge 745 0.1500
+charge 746 0.1800
+charge 747 0.2000
+charge 748 0.2100
+charge 749 0.1150
+charge 750 0.1750
+charge 751 0.2350
+charge 752 0.1950
+charge 753 0.1525
+charge 754 0.1350
+charge 755 -0.2100
+charge 756 0.2000
+charge 757 0.0100
+charge 758 0.0100
+charge 759 0.0100
+charge 760 0.0600
+charge 761 0.4500
+charge 762 0.4800
+charge 763 0.5100
+charge 764 -0.6550
+charge 765 0.3900
+charge 766 -0.5000
+charge 767 -0.5600
+charge 768 -0.6000
+charge 769 0.0000
+charge 770 -0.1000
+charge 771 0.2900
+charge 772 0.0900
+charge 773 0.1500
+charge 774 0.2100
+charge 775 0.2700
+charge 776 0.0960
+charge 777 -0.0390
+charge 778 0.0270
+charge 779 0.0110
+charge 780 0.0740
+charge 781 -0.0290
+charge 782 0.7000
+charge 783 -0.3520
+charge 784 -0.7090
+charge 785 0.3170
+charge 786 -0.2200
+charge 787 0.0200
+charge 788 0.1000
+charge 789 0.1200
+charge 790 0.2200
+charge 791 0.3600
+charge 792 0.2400
+charge 793 0.1200
+charge 794 0.4800
+charge 795 -0.1200
+charge 796 0.2500
+charge 797 0.1500
+charge 798 -0.0800
+charge 799 -0.1060
+charge 800 -0.2000
+charge 801 -0.0060
+charge 802 0.1030
+charge 803 0.0970
+charge 804 0.2000
+charge 805 -0.2000
+charge 806 -0.0060
+charge 807 0.1030
+charge 808 0.0970
+charge 809 0.2000
+charge 810 -0.0800
+charge 811 -0.0800
+charge 812 -0.0800
+charge 813 0.1000
+charge 814 -0.2500
+charge 815 0.6000
+charge 816 -0.1500
+charge 817 -0.0250
+charge 818 -0.0450
+charge 819 0.1450
+charge 820 0.8880
+charge 821 1.0030
+charge 822 -0.6580
+charge 823 -0.6340
+charge 824 0.4110
+charge 825 -0.4420
+charge 826 0.4350
+charge 827 0.2250
+charge 828 0.2550
+charge 829 -0.0340
+charge 830 0.0030
+charge 831 0.3000
+charge 832 -0.0400
+charge 833 -0.0575
+charge 834 2.0000
+charge 835 -0.0700
+charge 836 0.0300
+charge 837 0.1300
+charge 838 -0.1300
+charge 839 0.1000
+charge 840 -0.6850
+charge 841 0.1550
+charge 842 -0.1000
+charge 843 -0.4270
+charge 844 0.2180
+charge 845 0.6000
+charge 846 -0.6000
+charge 847 -0.3600
+charge 848 0.0000
+charge 849 0.0600
+charge 850 0.1200
+charge 851 0.1800
+charge 852 0.0600
+charge 853 0.5700
+charge 854 -0.5700
+charge 855 0.0000
+charge 856 0.0200
+charge 857 -0.0400
+charge 858 0.0000
+charge 859 0.0600
+charge 860 -0.0700
+charge 861 -0.1400
+charge 862 0.1700
+charge 863 0.1100
+charge 864 0.1500
+charge 865 0.1700
+charge 866 1.0000
+charge 867 0.8500
+charge 868 0.7000
+charge 869 0.5500
+charge 870 -0.1000
+charge 871 -0.4300
+charge 872 -0.3700
+charge 873 -0.3100
+charge 874 -0.2500
+charge 875 -1.0000
+charge 876 -1.0000
+charge 877 -1.0000
+charge 878 -1.0000
+charge 879 1.0000
+charge 880 1.0000
+charge 881 1.0000
+charge 882 1.0000
+charge 883 1.0000
+charge 884 2.0000
+charge 885 2.0000
+charge 886 2.0000
+charge 887 2.0000
+charge 888 -0.0500
+charge 889 0.0500
+charge 890 0.1500
+charge 891 0.2500
+charge 892 0.1000
+charge 893 0.1150
+charge 894 0.1350
+charge 895 0.0150
+charge 896 0.1550
+charge 897 0.0000
+charge 898 -0.1150
+charge 899 0.1500
+charge 900 -0.2500
+charge 901 -0.1000
+charge 902 0.0500
+charge 903 -0.1000
+charge 904 0.2000
+charge 905 -0.2500
+charge 906 0.0880
+
+
+ ########################################
+ ## ##
+ ## Biopolymer Atom Type Conversions ##
+ ## ##
+ ########################################
+
+
+biotype 1 N "Glycine" 180
+biotype 2 CA "Glycine" 165
+biotype 3 C "Glycine" 177
+biotype 4 HN "Glycine" 183
+biotype 5 O "Glycine" 178
+biotype 6 HA "Glycine" 85
+biotype 7 N "Alanine" 180
+biotype 8 CA "Alanine" 166
+biotype 9 C "Alanine" 177
+biotype 10 HN "Alanine" 183
+biotype 11 O "Alanine" 178
+biotype 12 HA "Alanine" 85
+biotype 13 CB "Alanine" 80
+biotype 14 HB "Alanine" 85
+biotype 15 N "Valine" 180
+biotype 16 CA "Valine" 166
+biotype 17 C "Valine" 177
+biotype 18 HN "Valine" 183
+biotype 19 O "Valine" 178
+biotype 20 HA "Valine" 85
+biotype 21 CB "Valine" 82
+biotype 22 HB "Valine" 85
+biotype 23 CG1 "Valine" 80
+biotype 24 HG1 "Valine" 85
+biotype 25 CG2 "Valine" 80
+biotype 26 HG2 "Valine" 85
+biotype 27 N "Leucine" 180
+biotype 28 CA "Leucine" 166
+biotype 29 C "Leucine" 177
+biotype 30 HN "Leucine" 183
+biotype 31 O "Leucine" 178
+biotype 32 HA "Leucine" 85
+biotype 33 CB "Leucine" 81
+biotype 34 HB "Leucine" 85
+biotype 35 CG "Leucine" 82
+biotype 36 HG "Leucine" 85
+biotype 37 CD1 "Leucine" 80
+biotype 38 HD1 "Leucine" 85
+biotype 39 CD2 "Leucine" 80
+biotype 40 HD2 "Leucine" 85
+biotype 41 N "Isoleucine" 180
+biotype 42 CA "Isoleucine" 166
+biotype 43 C "Isoleucine" 177
+biotype 44 HN "Isoleucine" 183
+biotype 45 O "Isoleucine" 178
+biotype 46 HA "Isoleucine" 85
+biotype 47 CB "Isoleucine" 82
+biotype 48 HB "Isoleucine" 85
+biotype 49 CG1 "Isoleucine" 80
+biotype 50 HG1 "Isoleucine" 85
+biotype 51 CG2 "Isoleucine" 81
+biotype 52 HG2 "Isoleucine" 85
+biotype 53 CD "Isoleucine" 80
+biotype 54 HD "Isoleucine" 85
+biotype 55 N "Serine" 180
+biotype 56 CA "Serine" 166
+biotype 57 C "Serine" 177
+biotype 58 HN "Serine" 183
+biotype 59 O "Serine" 178
+biotype 60 HA "Serine" 85
+biotype 61 CB "Serine" 99
+biotype 62 HB "Serine" 85
+biotype 63 OG "Serine" 96
+biotype 64 HG "Serine" 97
+biotype 65 N "Threonine" 180
+biotype 66 CA "Threonine" 166
+biotype 67 C "Threonine" 177
+biotype 68 HN "Threonine" 183
+biotype 69 O "Threonine" 178
+biotype 70 HA "Threonine" 85
+biotype 71 CB "Threonine" 100
+biotype 72 HB "Threonine" 85
+biotype 73 OG1 "Threonine" 96
+biotype 74 HG1 "Threonine" 97
+biotype 75 CG2 "Threonine" 80
+biotype 76 HG2 "Threonine" 85
+biotype 77 N "Cysteine (SH)" 180
+biotype 78 CA "Cysteine (SH)" 166
+biotype 79 C "Cysteine (SH)" 177
+biotype 80 HN "Cysteine (SH)" 183
+biotype 81 O "Cysteine (SH)" 178
+biotype 82 HA "Cysteine (SH)" 85
+biotype 83 CB "Cysteine (SH)" 148
+biotype 84 HB "Cysteine (SH)" 85
+biotype 85 SG "Cysteine (SH)" 142
+biotype 86 HG "Cysteine (SH)" 146
+biotype 87 N "Cystine (SS)" 180
+biotype 88 CA "Cystine (SS)" 166
+biotype 89 C "Cystine (SS)" 177
+biotype 90 HN "Cystine (SS)" 183
+biotype 91 O "Cystine (SS)" 178
+biotype 92 HA "Cystine (SS)" 85
+biotype 93 CB "Cystine (SS)" 156
+biotype 94 HB "Cystine (SS)" 85
+biotype 95 SG "Cystine (SS)" 145
+biotype 96 N "Cysteine (S-)" -1
+biotype 97 CA "Cysteine (S-)" -1
+biotype 98 C "Cysteine (S-)" -1
+biotype 99 HN "Cysteine (S-)" -1
+biotype 100 O "Cysteine (S-)" -1
+biotype 101 HA "Cysteine (S-)" -1
+biotype 102 CB "Cysteine (S-)" -1
+biotype 103 HB "Cysteine (S-)" -1
+biotype 104 SG "Cysteine (S-)" -1
+biotype 105 N "Proline" 181
+biotype 106 CA "Proline" 188
+biotype 107 C "Proline" 177
+biotype 108 O "Proline" 178
+biotype 109 HA "Proline" 85
+biotype 110 CB "Proline" 81
+biotype 111 HB "Proline" 85
+biotype 112 CG "Proline" 81
+biotype 113 HG "Proline" 85
+biotype 114 CD "Proline" 187
+biotype 115 HD "Proline" 85
+biotype 116 N "Phenylalanine" 180
+biotype 117 CA "Phenylalanine" 166
+biotype 118 C "Phenylalanine" 177
+biotype 119 HN "Phenylalanine" 183
+biotype 120 O "Phenylalanine" 178
+biotype 121 HA "Phenylalanine" 85
+biotype 122 CB "Phenylalanine" 94
+biotype 123 HB "Phenylalanine" 85
+biotype 124 CG "Phenylalanine" 90
+biotype 125 CD "Phenylalanine" 90
+biotype 126 HD "Phenylalanine" 91
+biotype 127 CE "Phenylalanine" 90
+biotype 128 HE "Phenylalanine" 91
+biotype 129 CZ "Phenylalanine" 90
+biotype 130 HZ "Phenylalanine" 91
+biotype 131 N "Tyrosine" 180
+biotype 132 CA "Tyrosine" 166
+biotype 133 C "Tyrosine" 177
+biotype 134 HN "Tyrosine" 183
+biotype 135 O "Tyrosine" 178
+biotype 136 HA "Tyrosine" 85
+biotype 137 CB "Tyrosine" 94
+biotype 138 HB "Tyrosine" 85
+biotype 139 CG "Tyrosine" 90
+biotype 140 CD "Tyrosine" 90
+biotype 141 HD "Tyrosine" 91
+biotype 142 CE "Tyrosine" 90
+biotype 143 HE "Tyrosine" 91
+biotype 144 CZ "Tyrosine" 108
+biotype 145 OH "Tyrosine" 109
+biotype 146 HH "Tyrosine" 110
+biotype 147 N "Tyrosine (O-)" -1
+biotype 148 CA "Tyrosine (O-)" -1
+biotype 149 C "Tyrosine (O-)" -1
+biotype 150 HN "Tyrosine (O-)" -1
+biotype 151 O "Tyrosine (O-)" -1
+biotype 152 HA "Tyrosine (O-)" -1
+biotype 153 CB "Tyrosine (O-)" -1
+biotype 154 HB "Tyrosine (O-)" -1
+biotype 155 CG "Tyrosine (O-)" -1
+biotype 156 CD "Tyrosine (O-)" -1
+biotype 157 HD "Tyrosine (O-)" -1
+biotype 158 CE "Tyrosine (O-)" -1
+biotype 159 HE "Tyrosine (O-)" -1
+biotype 160 CZ "Tyrosine (O-)" -1
+biotype 161 OH "Tyrosine (O-)" -1
+biotype 162 N "Tryptophan" 180
+biotype 163 CA "Tryptophan" 166
+biotype 164 C "Tryptophan" 177
+biotype 165 HN "Tryptophan" 183
+biotype 166 O "Tryptophan" 178
+biotype 167 HA "Tryptophan" 85
+biotype 168 CB "Tryptophan" 81
+biotype 169 HB "Tryptophan" 85
+biotype 170 CG "Tryptophan" 441
+biotype 171 CD1 "Tryptophan" 455
+biotype 172 HD1 "Tryptophan" 91
+biotype 173 CD2 "Tryptophan" 442
+biotype 174 NE1 "Tryptophan" 444
+biotype 175 HE1 "Tryptophan" 445
+biotype 176 CE2 "Tryptophan" 443
+biotype 177 CE3 "Tryptophan" 90
+biotype 178 HE3 "Tryptophan" 91
+biotype 179 CZ2 "Tryptophan" 90
+biotype 180 HZ2 "Tryptophan" 91
+biotype 181 CZ3 "Tryptophan" 90
+biotype 182 HZ3 "Tryptophan" 91
+biotype 183 CH2 "Tryptophan" 90
+biotype 184 HH2 "Tryptophan" 91
+biotype 185 N "Histidine (+)" 180
+biotype 186 CA "Histidine (+)" 166
+biotype 187 C "Histidine (+)" 177
+biotype 188 HN "Histidine (+)" 183
+biotype 189 O "Histidine (+)" 178
+biotype 190 HA "Histidine (+)" 85
+biotype 191 CB "Histidine (+)" 446
+biotype 192 HB "Histidine (+)" 85
+biotype 193 CG "Histidine (+)" 451
+biotype 194 ND1 "Histidine (+)" 453
+biotype 195 HD1 "Histidine (+)" 454
+biotype 196 CD2 "Histidine (+)" 451
+biotype 197 HD2 "Histidine (+)" 91
+biotype 198 CE1 "Histidine (+)" 450
+biotype 199 HE1 "Histidine (+)" 91
+biotype 200 NE2 "Histidine (+)" 453
+biotype 201 HE2 "Histidine (+)" 454
+biotype 202 N "Histidine (HD)" 180
+biotype 203 CA "Histidine (HD)" 166
+biotype 204 C "Histidine (HD)" 177
+biotype 205 HN "Histidine (HD)" 183
+biotype 206 O "Histidine (HD)" 178
+biotype 207 HA "Histidine (HD)" 85
+biotype 208 CB "Histidine (HD)" 446
+biotype 209 HB "Histidine (HD)" 85
+biotype 210 CG "Histidine (HD)" 449
+biotype 211 ND1 "Histidine (HD)" 444
+biotype 212 HD1 "Histidine (HD)" 445
+biotype 213 CD2 "Histidine (HD)" 448
+biotype 214 HD2 "Histidine (HD)" 91
+biotype 215 CE1 "Histidine (HD)" 447
+biotype 216 HE1 "Histidine (HD)" 91
+biotype 217 NE2 "Histidine (HD)" 452
+biotype 218 N "Histidine (HE)" 180
+biotype 219 CA "Histidine (HE)" 166
+biotype 220 C "Histidine (HE)" 177
+biotype 221 HN "Histidine (HE)" 183
+biotype 222 O "Histidine (HE)" 178
+biotype 223 HA "Histidine (HE)" 85
+biotype 224 CB "Histidine (HE)" 446
+biotype 225 HB "Histidine (HE)" 85
+biotype 226 CG "Histidine (HE)" 448
+biotype 227 ND1 "Histidine (HE)" 452
+biotype 228 CD2 "Histidine (HE)" 449
+biotype 229 HD2 "Histidine (HE)" 91
+biotype 230 CE1 "Histidine (HE)" 447
+biotype 231 HE1 "Histidine (HE)" 91
+biotype 232 NE2 "Histidine (HE)" 444
+biotype 233 HE2 "Histidine (HE)" 445
+biotype 234 N "Aspartic Acid" 180
+biotype 235 CA "Aspartic Acid" 166
+biotype 236 C "Aspartic Acid" 177
+biotype 237 HN "Aspartic Acid" 183
+biotype 238 O "Aspartic Acid" 178
+biotype 239 HA "Aspartic Acid" 85
+biotype 240 CB "Aspartic Acid" 216
+biotype 241 HB "Aspartic Acid" 85
+biotype 242 CG "Aspartic Acid" 213
+biotype 243 OD "Aspartic Acid" 214
+biotype 244 N "Aspartic Acid (COOH)" -1
+biotype 245 CA "Aspartic Acid (COOH)" -1
+biotype 246 C "Aspartic Acid (COOH)" -1
+biotype 247 HN "Aspartic Acid (COOH)" -1
+biotype 248 O "Aspartic Acid (COOH)" -1
+biotype 249 HA "Aspartic Acid (COOH)" -1
+biotype 250 CB "Aspartic Acid (COOH)" -1
+biotype 251 HB "Aspartic Acid (COOH)" -1
+biotype 252 CG "Aspartic Acid (COOH)" -1
+biotype 253 OD1 "Aspartic Acid (COOH)" -1
+biotype 254 OD2 "Aspartic Acid (COOH)" -1
+biotype 255 HD2 "Aspartic Acid (COOH)" -1
+biotype 256 N "Asparagine" 180
+biotype 257 CA "Asparagine" 166
+biotype 258 C "Asparagine" 177
+biotype 259 HN "Asparagine" 183
+biotype 260 O "Asparagine" 178
+biotype 261 HA "Asparagine" 85
+biotype 262 CB "Asparagine" 81
+biotype 263 HB "Asparagine" 85
+biotype 264 CG "Asparagine" 177
+biotype 265 OD1 "Asparagine" 178
+biotype 266 ND2 "Asparagine" 179
+biotype 267 HD2 "Asparagine" 182
+biotype 268 N "Glutamic Acid" 180
+biotype 269 CA "Glutamic Acid" 166
+biotype 270 C "Glutamic Acid" 177
+biotype 271 HN "Glutamic Acid" 183
+biotype 272 O "Glutamic Acid" 178
+biotype 273 HA "Glutamic Acid" 85
+biotype 274 CB "Glutamic Acid" 81
+biotype 275 HB "Glutamic Acid" 85
+biotype 276 CG "Glutamic Acid" 216
+biotype 277 HG "Glutamic Acid" 85
+biotype 278 CD "Glutamic Acid" 213
+biotype 279 OE "Glutamic Acid" 214
+biotype 280 N "Glutamic Acid (COOH)" -1
+biotype 281 CA "Glutamic Acid (COOH)" -1
+biotype 282 C "Glutamic Acid (COOH)" -1
+biotype 283 HN "Glutamic Acid (COOH)" -1
+biotype 284 O "Glutamic Acid (COOH)" -1
+biotype 285 HA "Glutamic Acid (COOH)" -1
+biotype 286 CB "Glutamic Acid (COOH)" -1
+biotype 287 HB "Glutamic Acid (COOH)" -1
+biotype 288 CG "Glutamic Acid (COOH)" -1
+biotype 289 HG "Glutamic Acid (COOH)" -1
+biotype 290 CD "Glutamic Acid (COOH)" -1
+biotype 291 OE1 "Glutamic Acid (COOH)" -1
+biotype 292 OE2 "Glutamic Acid (COOH)" -1
+biotype 293 HE2 "Glutamic Acid (COOH)" -1
+biotype 294 N "Glutamine" 180
+biotype 295 CA "Glutamine" 166
+biotype 296 C "Glutamine" 177
+biotype 297 HN "Glutamine" 183
+biotype 298 O "Glutamine" 178
+biotype 299 HA "Glutamine" 85
+biotype 300 CB "Glutamine" 81
+biotype 301 HB "Glutamine" 85
+biotype 302 CG "Glutamine" 81
+biotype 303 HG "Glutamine" 85
+biotype 304 CD "Glutamine" 177
+biotype 305 OE1 "Glutamine" 178
+biotype 306 NE2 "Glutamine" 179
+biotype 307 HE2 "Glutamine" 182
+biotype 308 N "Methionine" 180
+biotype 309 CA "Methionine" 166
+biotype 310 C "Methionine" 177
+biotype 311 HN "Methionine" 183
+biotype 312 O "Methionine" 178
+biotype 313 HA "Methionine" 85
+biotype 314 CB "Methionine" 81
+biotype 315 HB "Methionine" 85
+biotype 316 CG "Methionine" 152
+biotype 317 HG "Methionine" 85
+biotype 318 SD "Methionine" 144
+biotype 319 CE "Methionine" 151
+biotype 320 HE "Methionine" 85
+biotype 321 N "Lysine" 180
+biotype 322 CA "Lysine" 166
+biotype 323 C "Lysine" 177
+biotype 324 HN "Lysine" 183
+biotype 325 O "Lysine" 178
+biotype 326 HA "Lysine" 85
+biotype 327 CB "Lysine" 81
+biotype 328 HB "Lysine" 85
+biotype 329 CG "Lysine" 81
+biotype 330 HG "Lysine" 85
+biotype 331 CD "Lysine" 81
+biotype 332 HD "Lysine" 85
+biotype 333 CE "Lysine" 235
+biotype 334 HE "Lysine" 85
+biotype 335 NZ "Lysine" 230
+biotype 336 HZ "Lysine" 233
+biotype 337 N "Lysine (NH2)" -1
+biotype 338 CA "Lysine (NH2)" -1
+biotype 339 C "Lysine (NH2)" -1
+biotype 340 HN "Lysine (NH2)" -1
+biotype 341 O "Lysine (NH2)" -1
+biotype 342 HA "Lysine (NH2)" -1
+biotype 343 CB "Lysine (NH2)" -1
+biotype 344 HB "Lysine (NH2)" -1
+biotype 345 CG "Lysine (NH2)" -1
+biotype 346 HG "Lysine (NH2)" -1
+biotype 347 CD "Lysine (NH2)" -1
+biotype 348 HD "Lysine (NH2)" -1
+biotype 349 CE "Lysine (NH2)" -1
+biotype 350 HE "Lysine (NH2)" -1
+biotype 351 NZ "Lysine (NH2)" -1
+biotype 352 HZ "Lysine (NH2)" -1
+biotype 353 N "Arginine" 180
+biotype 354 CA "Arginine" 166
+biotype 355 C "Arginine" 177
+biotype 356 HN "Arginine" 183
+biotype 357 O "Arginine" 178
+biotype 358 HA "Arginine" 85
+biotype 359 CB "Arginine" 81
+biotype 360 HB "Arginine" 85
+biotype 361 CG "Arginine" 251
+biotype 362 HG "Arginine" 85
+biotype 363 CD "Arginine" 250
+biotype 364 HD "Arginine" 85
+biotype 365 NE "Arginine" 246
+biotype 366 HE "Arginine" 247
+biotype 367 CZ "Arginine" 245
+biotype 368 NH "Arginine" 243
+biotype 369 HH "Arginine" 244
+biotype 370 N "Ornithine" 180
+biotype 371 CA "Ornithine" 166
+biotype 372 C "Ornithine" 177
+biotype 373 HN "Ornithine" 183
+biotype 374 O "Ornithine" 178
+biotype 375 HA "Ornithine" 85
+biotype 376 CB "Ornithine" 81
+biotype 377 HB "Ornithine" 85
+biotype 378 CG "Ornithine" 81
+biotype 379 HG "Ornithine" 85
+biotype 380 CD "Ornithine" 235
+biotype 381 HD "Ornithine" 85
+biotype 382 NE "Ornithine" 230
+biotype 383 HE "Ornithine" 233
+biotype 384 N "MethylAlanine (AIB)" 180
+biotype 385 CA "MethylAlanine (AIB)" 167
+biotype 386 C "MethylAlanine (AIB)" 177
+biotype 387 HN "MethylAlanine (AIB)" 183
+biotype 388 O "MethylAlanine (AIB)" 178
+biotype 389 CB "MethylAlanine (AIB)" 80
+biotype 390 HB "MethylAlanine (AIB)" 85
+biotype 391 N "Pyroglutamic Acid" 180
+biotype 392 CA "Pyroglutamic Acid" 166
+biotype 393 C "Pyroglutamic Acid" 177
+biotype 394 HN "Pyroglutamic Acid" 183
+biotype 395 O "Pyroglutamic Acid" 178
+biotype 396 HA "Pyroglutamic Acid" 85
+biotype 397 CB "Pyroglutamic Acid" 81
+biotype 398 HB "Pyroglutamic Acid" 85
+biotype 399 CG "Pyroglutamic Acid" 216
+biotype 400 HG "Pyroglutamic Acid" 85
+biotype 401 CD "Pyroglutamic Acid" 177
+biotype 402 OE "Pyroglutamic Acid" 178
+biotype 403 N "N-Terminal GLY" 230
+biotype 404 CA "N-Terminal GLY" 235
+biotype 405 C "N-Terminal GLY" 177
+biotype 406 HN "N-Terminal GLY" 233
+biotype 407 O "N-Terminal GLY" 178
+biotype 408 HA "N-Terminal GLY" 85
+biotype 409 N "N-Terminal ALA" 230
+biotype 410 CA "N-Terminal ALA" 236
+biotype 411 C "N-Terminal ALA" 177
+biotype 412 HN "N-Terminal ALA" 233
+biotype 413 O "N-Terminal ALA" 178
+biotype 414 HA "N-Terminal ALA" 85
+biotype 415 N "N-Terminal VAL" 230
+biotype 416 CA "N-Terminal VAL" 236
+biotype 417 C "N-Terminal VAL" 177
+biotype 418 HN "N-Terminal VAL" 233
+biotype 419 O "N-Terminal VAL" 178
+biotype 420 HA "N-Terminal VAL" 85
+biotype 421 N "N-Terminal LEU" 230
+biotype 422 CA "N-Terminal LEU" 236
+biotype 423 C "N-Terminal LEU" 177
+biotype 424 HN "N-Terminal LEU" 233
+biotype 425 O "N-Terminal LEU" 178
+biotype 426 HA "N-Terminal LEU" 85
+biotype 427 N "N-Terminal ILE" 230
+biotype 428 CA "N-Terminal ILE" 236
+biotype 429 C "N-Terminal ILE" 177
+biotype 430 HN "N-Terminal ILE" 233
+biotype 431 O "N-Terminal ILE" 178
+biotype 432 HA "N-Terminal ILE" 85
+biotype 433 N "N-Terminal SER" 230
+biotype 434 CA "N-Terminal SER" 236
+biotype 435 C "N-Terminal SER" 177
+biotype 436 HN "N-Terminal SER" 233
+biotype 437 O "N-Terminal SER" 178
+biotype 438 HA "N-Terminal SER" 85
+biotype 439 N "N-Terminal THR" 230
+biotype 440 CA "N-Terminal THR" 236
+biotype 441 C "N-Terminal THR" 177
+biotype 442 HN "N-Terminal THR" 233
+biotype 443 O "N-Terminal THR" 178
+biotype 444 HA "N-Terminal THR" 85
+biotype 445 N "N-Terminal CYS (SH)" 230
+biotype 446 CA "N-Terminal CYS (SH)" 236
+biotype 447 C "N-Terminal CYS (SH)" 177
+biotype 448 HN "N-Terminal CYS (SH)" 233
+biotype 449 O "N-Terminal CYS (SH)" 178
+biotype 450 HA "N-Terminal CYS (SH)" 85
+biotype 451 N "N-Terminal CYX (SS)" 230
+biotype 452 CA "N-Terminal CYX (SS)" 236
+biotype 453 C "N-Terminal CYX (SS)" 177
+biotype 454 HN "N-Terminal CYX (SS)" 233
+biotype 455 O "N-Terminal CYX (SS)" 178
+biotype 456 HA "N-Terminal CYX (SS)" 85
+biotype 457 N "N-Terminal CYD (S-)" -1
+biotype 458 CA "N-Terminal CYD (S-)" -1
+biotype 459 C "N-Terminal CYD (S-)" -1
+biotype 460 HN "N-Terminal CYD (S-)" -1
+biotype 461 O "N-Terminal CYD (S-)" -1
+biotype 462 HA "N-Terminal CYD (S-)" -1
+biotype 463 N "N-Terminal PRO" 252
+biotype 464 CA "N-Terminal PRO" 238
+biotype 465 C "N-Terminal PRO" 177
+biotype 466 HN "N-Terminal PRO" 253
+biotype 467 O "N-Terminal PRO" 178
+biotype 468 HA "N-Terminal PRO" 85
+biotype 469 CD "N-Terminal PRO" 239
+biotype 470 HD "N-Terminal PRO" 85
+biotype 471 N "N-Terminal PHE" 230
+biotype 472 CA "N-Terminal PHE" 236
+biotype 473 C "N-Terminal PHE" 177
+biotype 474 HN "N-Terminal PHE" 233
+biotype 475 O "N-Terminal PHE" 178
+biotype 476 HA "N-Terminal PHE" 85
+biotype 477 N "N-Terminal TYR" 230
+biotype 478 CA "N-Terminal TYR" 236
+biotype 479 C "N-Terminal TYR" 177
+biotype 480 HN "N-Terminal TYR" 233
+biotype 481 O "N-Terminal TYR" 178
+biotype 482 HA "N-Terminal TYR" 85
+biotype 483 N "N-Terminal TYD (O-)" -1
+biotype 484 CA "N-Terminal TYD (O-)" -1
+biotype 485 C "N-Terminal TYD (O-)" -1
+biotype 486 HN "N-Terminal TYD (O-)" -1
+biotype 487 O "N-Terminal TYD (O-)" -1
+biotype 488 HA "N-Terminal TYD (O-)" -1
+biotype 489 N "N-Terminal TRP" 230
+biotype 490 CA "N-Terminal TRP" 236
+biotype 491 C "N-Terminal TRP" 177
+biotype 492 HN "N-Terminal TRP" 233
+biotype 493 O "N-Terminal TRP" 178
+biotype 494 HA "N-Terminal TRP" 85
+biotype 495 N "N-Terminal HIS (+)" 230
+biotype 496 CA "N-Terminal HIS (+)" 236
+biotype 497 C "N-Terminal HIS (+)" 177
+biotype 498 HN "N-Terminal HIS (+)" 233
+biotype 499 O "N-Terminal HIS (+)" 178
+biotype 500 HA "N-Terminal HIS (+)" 85
+biotype 501 N "N-Terminal HIS (HD)" 230
+biotype 502 CA "N-Terminal HIS (HD)" 236
+biotype 503 C "N-Terminal HIS (HD)" 177
+biotype 504 HN "N-Terminal HIS (HD)" 233
+biotype 505 O "N-Terminal HIS (HD)" 178
+biotype 506 HA "N-Terminal HIS (HD)" 85
+biotype 507 N "N-Terminal HIS (HE)" 230
+biotype 508 CA "N-Terminal HIS (HE)" 236
+biotype 509 C "N-Terminal HIS (HE)" 177
+biotype 510 HN "N-Terminal HIS (HE)" 233
+biotype 511 O "N-Terminal HIS (HE)" 178
+biotype 512 HA "N-Terminal HIS (HE)" 85
+biotype 513 N "N-Terminal ASP" 230
+biotype 514 CA "N-Terminal ASP" 236
+biotype 515 C "N-Terminal ASP" 177
+biotype 516 HN "N-Terminal ASP" 233
+biotype 517 O "N-Terminal ASP" 178
+biotype 518 HA "N-Terminal ASP" 85
+biotype 519 N "N-Terminal ASH (COOH)" -1
+biotype 520 CA "N-Terminal ASH (COOH)" -1
+biotype 521 C "N-Terminal ASH (COOH)" -1
+biotype 522 HN "N-Terminal ASH (COOH)" -1
+biotype 523 O "N-Terminal ASH (COOH)" -1
+biotype 524 HA "N-Terminal ASH (COOH)" -1
+biotype 525 N "N-Terminal ASN" 230
+biotype 526 CA "N-Terminal ASN" 236
+biotype 527 C "N-Terminal ASN" 177
+biotype 528 HN "N-Terminal ASN" 233
+biotype 529 O "N-Terminal ASN" 178
+biotype 530 HA "N-Terminal ASN" 85
+biotype 531 N "N-Terminal GLU" 230
+biotype 532 CA "N-Terminal GLU" 236
+biotype 533 C "N-Terminal GLU" 177
+biotype 534 HN "N-Terminal GLU" 233
+biotype 535 O "N-Terminal GLU" 178
+biotype 536 HA "N-Terminal GLU" 85
+biotype 537 N "N-Terminal GLH (COOH)" -1
+biotype 538 CA "N-Terminal GLH (COOH)" -1
+biotype 539 C "N-Terminal GLH (COOH)" -1
+biotype 540 HN "N-Terminal GLH (COOH)" -1
+biotype 541 O "N-Terminal GLH (COOH)" -1
+biotype 542 HA "N-Terminal GLH (COOH)" -1
+biotype 543 N "N-Terminal GLN" 230
+biotype 544 CA "N-Terminal GLN" 236
+biotype 545 C "N-Terminal GLN" 177
+biotype 546 HN "N-Terminal GLN" 233
+biotype 547 O "N-Terminal GLN" 178
+biotype 548 HA "N-Terminal GLN" 85
+biotype 549 N "N-Terminal MET" 230
+biotype 550 CA "N-Terminal MET" 236
+biotype 551 C "N-Terminal MET" 177
+biotype 552 HN "N-Terminal MET" 233
+biotype 553 O "N-Terminal MET" 178
+biotype 554 HA "N-Terminal MET" 85
+biotype 555 N "N-Terminal LYS" 230
+biotype 556 CA "N-Terminal LYS" 236
+biotype 557 C "N-Terminal LYS" 177
+biotype 558 HN "N-Terminal LYS" 233
+biotype 559 O "N-Terminal LYS" 178
+biotype 560 HA "N-Terminal LYS" 85
+biotype 561 N "N-Terminal LYD (NH2)" -1
+biotype 562 CA "N-Terminal LYD (NH2)" -1
+biotype 563 C "N-Terminal LYD (NH2)" -1
+biotype 564 HN "N-Terminal LYD (NH2)" -1
+biotype 565 O "N-Terminal LYD (NH2)" -1
+biotype 566 HA "N-Terminal LYD (NH2)" -1
+biotype 567 N "N-Terminal ARG" 230
+biotype 568 CA "N-Terminal ARG" 236
+biotype 569 C "N-Terminal ARG" 177
+biotype 570 HN "N-Terminal ARG" 233
+biotype 571 O "N-Terminal ARG" 178
+biotype 572 HA "N-Terminal ARG" 85
+biotype 573 N "N-Terminal ORN" 230
+biotype 574 CA "N-Terminal ORN" 236
+biotype 575 C "N-Terminal ORN" 177
+biotype 576 HN "N-Terminal ORN" 233
+biotype 577 O "N-Terminal ORN" 178
+biotype 578 HA "N-Terminal ORN" 85
+biotype 579 N "N-Terminal AIB" 230
+biotype 580 CA "N-Terminal AIB" 237
+biotype 581 C "N-Terminal AIB" 177
+biotype 582 HN "N-Terminal AIB" 233
+biotype 583 O "N-Terminal AIB" 178
+biotype 584 N "C-Terminal GLY" 180
+biotype 585 CA "C-Terminal GLY" 226
+biotype 586 C "C-Terminal GLY" 213
+biotype 587 HN "C-Terminal GLY" 183
+biotype 588 OXT "C-Terminal GLY" 214
+biotype 589 HA "C-Terminal GLY" 85
+biotype 590 N "C-Terminal ALA" 180
+biotype 591 CA "C-Terminal ALA" 225
+biotype 592 C "C-Terminal ALA" 213
+biotype 593 HN "C-Terminal ALA" 183
+biotype 594 OXT "C-Terminal ALA" 214
+biotype 595 HA "C-Terminal ALA" 85
+biotype 596 N "C-Terminal VAL" 180
+biotype 597 CA "C-Terminal VAL" 225
+biotype 598 C "C-Terminal VAL" 213
+biotype 599 HN "C-Terminal VAL" 183
+biotype 600 OXT "C-Terminal VAL" 214
+biotype 601 HA "C-Terminal VAL" 85
+biotype 602 N "C-Terminal LEU" 180
+biotype 603 CA "C-Terminal LEU" 225
+biotype 604 C "C-Terminal LEU" 213
+biotype 605 HN "C-Terminal LEU" 183
+biotype 606 OXT "C-Terminal LEU" 214
+biotype 607 HA "C-Terminal LEU" 85
+biotype 608 N "C-Terminal ILE" 180
+biotype 609 CA "C-Terminal ILE" 225
+biotype 610 C "C-Terminal ILE" 213
+biotype 611 HN "C-Terminal ILE" 183
+biotype 612 OXT "C-Terminal ILE" 214
+biotype 613 HA "C-Terminal ILE" 85
+biotype 614 N "C-Terminal SER" 180
+biotype 615 CA "C-Terminal SER" 225
+biotype 616 C "C-Terminal SER" 213
+biotype 617 HN "C-Terminal SER" 183
+biotype 618 OXT "C-Terminal SER" 214
+biotype 619 HA "C-Terminal SER" 85
+biotype 620 N "C-Terminal THR" 180
+biotype 621 CA "C-Terminal THR" 225
+biotype 622 C "C-Terminal THR" 213
+biotype 623 HN "C-Terminal THR" 183
+biotype 624 OXT "C-Terminal THR" 214
+biotype 625 HA "C-Terminal THR" 85
+biotype 626 N "C-Terminal CYS (SH)" 180
+biotype 627 CA "C-Terminal CYS (SH)" 225
+biotype 628 C "C-Terminal CYS (SH)" 213
+biotype 629 HN "C-Terminal CYS (SH)" 183
+biotype 630 OXT "C-Terminal CYS (SH)" 214
+biotype 631 HA "C-Terminal CYS (SH)" 85
+biotype 632 N "C-Terminal CYX (SS)" 180
+biotype 633 CA "C-Terminal CYX (SS)" 225
+biotype 634 C "C-Terminal CYX (SS)" 213
+biotype 635 HN "C-Terminal CYX (SS)" 183
+biotype 636 OXT "C-Terminal CYX (SS)" 214
+biotype 637 HA "C-Terminal CYX (SS)" 85
+biotype 638 N "C-Terminal CYD (S-)" -1
+biotype 639 CA "C-Terminal CYD (S-)" -1
+biotype 640 C "C-Terminal CYD (S-)" -1
+biotype 641 HN "C-Terminal CYD (S-)" -1
+biotype 642 OXT "C-Terminal CYD (S-)" -1
+biotype 643 HA "C-Terminal CYD (S-)" -1
+biotype 644 N "C-Terminal PRO" 181
+biotype 645 CA "C-Terminal PRO" 228
+biotype 646 C "C-Terminal PRO" 213
+biotype 647 OXT "C-Terminal PRO" 214
+biotype 648 HA "C-Terminal PRO" 85
+biotype 649 N "C-Terminal PHE" 180
+biotype 650 CA "C-Terminal PHE" 225
+biotype 651 C "C-Terminal PHE" 213
+biotype 652 HN "C-Terminal PHE" 183
+biotype 653 OXT "C-Terminal PHE" 214
+biotype 654 HA "C-Terminal PHE" 85
+biotype 655 N "C-Terminal TYR" 180
+biotype 656 CA "C-Terminal TYR" 225
+biotype 657 C "C-Terminal TYR" 213
+biotype 658 HN "C-Terminal TYR" 183
+biotype 659 OXT "C-Terminal TYR" 214
+biotype 660 HA "C-Terminal TYR" 85
+biotype 661 N "C-Terminal TYD (O-)" -1
+biotype 662 CA "C-Terminal TYD (O-)" -1
+biotype 663 C "C-Terminal TYD (O-)" -1
+biotype 664 HN "C-Terminal TYD (O-)" -1
+biotype 665 OXT "C-Terminal TYD (O-)" -1
+biotype 666 HA "C-Terminal TYD (O-)" -1
+biotype 667 N "C-Terminal TRP" 180
+biotype 668 CA "C-Terminal TRP" 225
+biotype 669 C "C-Terminal TRP" 213
+biotype 670 HN "C-Terminal TRP" 183
+biotype 671 OXT "C-Terminal TRP" 214
+biotype 672 HA "C-Terminal TRP" 85
+biotype 673 N "C-Terminal HIS (+)" 180
+biotype 674 CA "C-Terminal HIS (+)" 225
+biotype 675 C "C-Terminal HIS (+)" 213
+biotype 676 HN "C-Terminal HIS (+)" 183
+biotype 677 OXT "C-Terminal HIS (+)" 214
+biotype 678 HA "C-Terminal HIS (+)" 85
+biotype 679 N "C-Terminal HIS (HD)" 180
+biotype 680 CA "C-Terminal HIS (HD)" 225
+biotype 681 C "C-Terminal HIS (HD)" 213
+biotype 682 HN "C-Terminal HIS (HD)" 183
+biotype 683 OXT "C-Terminal HIS (HD)" 214
+biotype 684 HA "C-Terminal HIS (HD)" 85
+biotype 685 N "C-Terminal HIS (HE)" 180
+biotype 686 CA "C-Terminal HIS (HE)" 225
+biotype 687 C "C-Terminal HIS (HE)" 213
+biotype 688 HN "C-Terminal HIS (HE)" 183
+biotype 689 OXT "C-Terminal HIS (HE)" 214
+biotype 690 HA "C-Terminal HIS (HE)" 85
+biotype 691 N "C-Terminal ASP" 180
+biotype 692 CA "C-Terminal ASP" 225
+biotype 693 C "C-Terminal ASP" 213
+biotype 694 HN "C-Terminal ASP" 183
+biotype 695 OXT "C-Terminal ASP" 214
+biotype 696 HA "C-Terminal ASP" 85
+biotype 697 N "C-Terminal ASH (COOH)" -1
+biotype 698 CA "C-Terminal ASH (COOH)" -1
+biotype 699 C "C-Terminal ASH (COOH)" -1
+biotype 700 HN "C-Terminal ASH (COOH)" -1
+biotype 701 OXT "C-Terminal ASH (COOH)" -1
+biotype 702 HA "C-Terminal ASH (COOH)" -1
+biotype 703 N "C-Terminal ASN" 180
+biotype 704 CA "C-Terminal ASN" 225
+biotype 705 C "C-Terminal ASN" 213
+biotype 706 HN "C-Terminal ASN" 183
+biotype 707 OXT "C-Terminal ASN" 214
+biotype 708 HA "C-Terminal ASN" 85
+biotype 709 N "C-Terminal GLU" 180
+biotype 710 CA "C-Terminal GLU" 225
+biotype 711 C "C-Terminal GLU" 213
+biotype 712 HN "C-Terminal GLU" 183
+biotype 713 OXT "C-Terminal GLU" 214
+biotype 714 HA "C-Terminal GLU" 85
+biotype 715 N "C-Terminal GLH (COOH)" -1
+biotype 716 CA "C-Terminal GLH (COOH)" -1
+biotype 717 C "C-Terminal GLH (COOH)" -1
+biotype 718 HN "C-Terminal GLH (COOH)" -1
+biotype 719 OXT "C-Terminal GLH (COOH)" -1
+biotype 720 HA "C-Terminal GLH (COOH)" -1
+biotype 721 N "C-Terminal GLN" 180
+biotype 722 CA "C-Terminal GLN" 225
+biotype 723 C "C-Terminal GLN" 213
+biotype 724 HN "C-Terminal GLN" 183
+biotype 725 OXT "C-Terminal GLN" 214
+biotype 726 HA "C-Terminal GLN" 85
+biotype 727 N "C-Terminal MET" 180
+biotype 728 CA "C-Terminal MET" 225
+biotype 729 C "C-Terminal MET" 213
+biotype 730 HN "C-Terminal MET" 183
+biotype 731 OXT "C-Terminal MET" 214
+biotype 732 HA "C-Terminal MET" 85
+biotype 733 N "C-Terminal LYS" 180
+biotype 734 CA "C-Terminal LYS" 225
+biotype 735 C "C-Terminal LYS" 213
+biotype 736 HN "C-Terminal LYS" 183
+biotype 737 OXT "C-Terminal LYS" 214
+biotype 738 HA "C-Terminal LYS" 85
+biotype 739 N "C-Terminal LYD (NH2)" -1
+biotype 740 CA "C-Terminal LYD (NH2)" -1
+biotype 741 C "C-Terminal LYD (NH2)" -1
+biotype 742 HN "C-Terminal LYD (NH2)" -1
+biotype 743 OXT "C-Terminal LYD (NH2)" -1
+biotype 744 HA "C-Terminal LYD (NH2)" -1
+biotype 745 N "C-Terminal ARG" 180
+biotype 746 CA "C-Terminal ARG" 225
+biotype 747 C "C-Terminal ARG" 213
+biotype 748 HN "C-Terminal ARG" 183
+biotype 749 OXT "C-Terminal ARG" 214
+biotype 750 HA "C-Terminal ARG" 85
+biotype 751 N "C-Terminal ORN" 180
+biotype 752 CA "C-Terminal ORN" 225
+biotype 753 C "C-Terminal ORN" 213
+biotype 754 HN "C-Terminal ORN" 183
+biotype 755 OXT "C-Terminal ORN" 214
+biotype 756 HA "C-Terminal ORN" 85
+biotype 757 N "C-Terminal AIB" 180
+biotype 758 CA "C-Terminal AIB" 227
+biotype 759 C "C-Terminal AIB" 213
+biotype 760 HN "C-Terminal AIB" 183
+biotype 761 OXT "C-Terminal AIB" 214
+biotype 762 N "Deprotonated N-Terminus" -1
+biotype 763 H "Deprotonated N-Terminus" -1
+biotype 764 C "Formyl N-Terminus" 177
+biotype 765 H "Formyl N-Terminus" 221
+biotype 766 O "Formyl N-Terminus" 178
+biotype 767 CH3 "Acetyl N-Terminus" 80
+biotype 768 H "Acetyl N-Terminus" 85
+biotype 769 C "Acetyl N-Terminus" 177
+biotype 770 O "Acetyl N-Terminus" 178
+biotype 771 C "Protonated C-Terminus" -1
+biotype 772 O "Protonated C-Terminus" -1
+biotype 773 OH "Protonated C-Terminus" -1
+biotype 774 HO "Protonated C-Terminus" -1
+biotype 775 N "Amide C-Terminus" 179
+biotype 776 HN "Amide C-Terminus" 182
+biotype 777 N "N-MeAmide C-Terminus" 180
+biotype 778 HN "N-MeAmide C-Terminus" 183
+biotype 779 CH3 "N-MeAmide C-Terminus" 184
+biotype 780 H "N-MeAmide C-Terminus" 85
+biotype 2001 O "Water" 63
+biotype 2002 H "Water" 64
+biotype 2003 NA "Sodium Ion" -1
+biotype 2004 K "Potassium Ion" -1
+biotype 2005 MG "Magnesium Ion" -1
+biotype 2006 CA "Calcium Ion" -1
+biotype 2007 CL "Chloride Ion" -1
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.txt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.txt
deleted file mode 100644
index 7684e1a92..000000000
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/oplsaa_lt_generator/oplsaa_subset.txt
+++ /dev/null
@@ -1,3450 +0,0 @@
-
- ##############################
- ## ##
- ## Force Field Definition ##
- ## ##
- ##############################
-
-
-#forcefield OPLS-AA
-#vdwindex TYPE
-#vdwtype LENNARD-JONES
-#radiusrule GEOMETRIC
-#radiustype SIGMA
-#radiussize DIAMETER
-#epsilonrule GEOMETRIC
-#torsionunit 0.5
-#imptorunit 0.5
-#vdw-14-scale 2.0
-#chg-14-scale 2.0
-#electric 332.06
-#dielectric 1.0
-
-
- #############################
- ## ##
- ## Literature References ##
- ## ##
- #############################
-
-
-#The parameters supplied with TINKER are from "OPLS All-Atom Parameters
-#for Organic Molecules, Ions, Peptides & Nucleic Acids, July 2008" as
-#provided by W. L. Jorgensen, Yale University during June 2009. These
-#parameters are taken from those distributed with BOSS Version 4.8.
-
-#Note that "atom type" numbers and not "atom class" numbers are used
-#to index van der Waals parameters, see the "vdwindex" keyword above
-
-#The atom types with (UA) in the description are "united atom" values,
-#ie, OPLS-UA, where any nonpolar hydrogen atoms are combined onto their
-#attached atoms. All other parameters are "all-atom", OPLS-AA, including
-#explicit hydrogen atoms.
-
-
- #############################
- ## ##
- ## Atom Type Definitions ##
- ## ##
- #############################
-
-
-atom 85 37 CM "Alkene H2-C=" 6 12.011 3
-atom 86 36 HC "Alkene H-C=" 1 1.008 1
-
-
- ################################
- ## ##
- ## Van der Waals Parameters ##
- ## ##
- ################################
-
-
-vdw 1 2.9400 0.0610
-vdw 2 3.9050 0.1180
-vdw 3 3.7500 0.1050
-vdw 4 2.9600 0.2100
-vdw 5 3.0000 0.1700
-vdw 6 3.9100 0.1600
-vdw 7 0.0000 0.0000
-vdw 8 3.7300 0.2940
-vdw 9 3.7750 0.2070
-vdw 10 3.9050 0.1750
-vdw 11 3.9100 0.1600
-vdw 12 3.9600 0.1450
-vdw 13 3.9050 0.1180
-vdw 14 3.8500 0.1400
-vdw 15 3.8500 0.0800
-vdw 16 3.8000 0.1150
-vdw 17 3.7500 0.1100
-vdw 18 3.8000 0.0500
-vdw 19 3.7500 0.1050
-vdw 20 3.0700 0.1700
-vdw 21 0.0000 0.0000
-vdw 22 3.7750 0.2070
-vdw 23 3.9050 0.1180
-vdw 24 3.7000 0.2500
-vdw 25 3.5500 0.2500
-vdw 26 3.5500 0.2500
-vdw 27 3.5500 0.2500
-vdw 28 0.0000 0.0000
-vdw 29 0.0000 0.0000
-vdw 30 3.7750 0.2070
-vdw 31 3.9050 0.1180
-vdw 32 3.8000 0.1700
-vdw 33 3.8000 0.1180
-vdw 34 3.8000 0.1700
-vdw 35 3.8000 0.1180
-vdw 36 3.2000 0.1700
-vdw 37 3.6500 0.1500
-vdw 38 3.7750 0.2070
-vdw 39 3.1200 0.1600
-vdw 40 0.0000 0.0000
-vdw 41 0.0000 0.0000
-vdw 42 0.0000 0.0000
-vdw 43 2.5560 0.0200
-vdw 44 2.7800 0.0690
-vdw 45 3.4010 0.2339
-vdw 46 3.6240 0.3170
-vdw 47 3.9350 0.4330
-vdw 48 3.8500 0.0800
-vdw 49 3.8000 0.0500
-vdw 50 3.0000 0.1700
-vdw 51 3.8000 0.1700
-vdw 52 3.8000 0.1180
-vdw 53 3.15061 0.1521
-vdw 54 0.0000 0.0000
-vdw 55 3.15365 0.1550
-vdw 56 0.0000 0.0000
-vdw 57 0.0000 0.0000
-vdw 58 3.1760 0.1500
-vdw 59 0.0000 0.0000
-vdw 60 3.8000 0.1180
-vdw 61 3.4000 0.3000
-vdw 62 3.8000 0.0800
-vdw 63 3.4700 0.3000
-vdw 64 3.8000 0.0500
-vdw 65 3.4700 0.2660
-vdw 66 3.5600 0.3950
-vdw 67 2.9300 0.2800
-vdw 68 3.8100 0.1600
-vdw 69 3.4200 0.1700
-vdw 70 0.0000 0.0000
-vdw 71 2.9600 0.2100
-vdw 72 3.2500 0.1700
-vdw 73 3.8000 0.1150
-vdw 74 3.8000 0.1700
-vdw 75 3.16557 0.1554
-vdw 76 0.0000 0.0000
-vdw 77 3.5000 0.0660
-vdw 78 3.5000 0.0660
-vdw 79 3.5000 0.0660
-vdw 80 3.5000 0.0660
-vdw 81 3.5000 0.0660
-vdw 82 2.5000 0.0300
-vdw 83 3.5500 0.0760
-vdw 84 3.5500 0.0760
-vdw 85 3.5500 0.0760
-vdw 86 2.4200 0.0300
-vdw 87 3.5500 0.0700
-vdw 88 2.4200 0.0300
-vdw 89 3.5500 0.0700
-vdw 90 3.5000 0.0660
-vdw 91 3.5000 0.0660
-vdw 92 3.5500 0.0760
-vdw 93 3.1200 0.1700
-vdw 94 0.0000 0.0000
-vdw 95 2.5000 0.0300
-vdw 96 3.5000 0.0660
-vdw 97 3.5000 0.0660
-vdw 98 3.5000 0.0660
-vdw 99 3.5000 0.0660
-vdw 100 3.2500 0.0620
-
-
- ##################################
- ## ##
- ## Bond Stretching Parameters ##
- ## ##
- ##################################
-
-
-bond 1 2 367.00 1.3800
-bond 1 3 420.00 1.3570
-bond 1 13 367.00 1.3600
-bond 1 19 450.00 1.2790
-bond 1 23 300.00 0.3000
-bond 1 37 420.00 1.3400
-bond 1 38 420.00 1.3540
-bond 1 72 420.00 1.3540
-bond 1 73 420.00 1.3540
-bond 1 74 420.00 1.3540
-bond 1 77 420.00 1.3540
-bond 1 78 420.00 1.3540
-bond 1 98 461.00 1.5700
-bond 2 2 260.00 1.5260
-bond 2 3 317.00 1.5220
-bond 2 5 386.00 1.4250
-bond 2 6 260.00 1.5260
-bond 2 10 260.00 1.5260
-bond 2 11 317.00 1.5000
-bond 2 12 317.00 1.5100
-bond 2 13 260.00 1.5260
-bond 2 14 317.00 1.5000
-bond 2 15 222.00 1.8100
-bond 2 16 222.00 1.8100
-bond 2 29 320.00 1.4250
-bond 2 33 382.00 1.4480
-bond 2 35 337.00 1.4490
-bond 2 38 317.00 1.5100
-bond 2 41 260.00 1.5260
-bond 2 43 367.00 1.4710
-bond 2 45 337.00 1.4630
-bond 2 70 317.00 1.4950
-bond 3 3 350.00 1.5100
-bond 3 4 570.00 1.2290
-bond 3 5 450.00 1.3640
-bond 3 6 317.00 1.5220
-bond 3 10 317.00 1.5220
-bond 3 12 469.00 1.4000
-bond 3 13 317.00 1.5220
-bond 3 19 400.00 1.4440
-bond 3 29 214.00 1.3270
-bond 3 30 300.00 1.7900
-bond 3 33 317.00 1.5220
-bond 3 35 490.00 1.3350
-bond 3 36 340.00 1.0900
-bond 3 37 410.00 1.4440
-bond 3 38 400.00 1.4900
-bond 3 40 385.00 1.4600
-bond 3 42 656.00 1.2500
-bond 3 46 457.00 1.3580
-bond 3 47 418.00 1.3880
-bond 3 50 447.00 1.4190
-bond 3 55 300.00 1.9800
-bond 3 74 400.00 1.4900
-bond 3 76 385.00 1.4600
-bond 3 95 424.00 1.3830
-bond 3 97 490.00 1.3350
-bond 4 23 553.00 0.3000
-bond 4 54 525.00 1.4800
-bond 4 79 570.00 1.2290
-bond 4 100 700.00 1.1710
-bond 5 6 386.00 1.4250
-bond 5 7 553.00 0.9450
-bond 5 10 386.00 1.4250
-bond 5 13 320.00 1.4100
-bond 5 23 340.00 0.3000
-bond 5 29 250.00 1.4700
-bond 5 33 320.00 1.4500
-bond 5 35 400.00 1.3800
-bond 5 37 450.00 1.3700
-bond 5 38 450.00 1.3640
-bond 5 41 320.00 1.3800
-bond 5 54 230.00 1.6100
-bond 5 69 450.00 1.6700
-bond 5 96 94.00 1.8000
-bond 5 98 374.00 1.6400
-bond 6 6 260.00 1.5260
-bond 6 10 260.00 1.5260
-bond 6 11 317.00 1.5000
-bond 6 13 260.00 1.5260
-bond 6 14 317.00 1.5000
-bond 6 15 222.00 1.8100
-bond 6 16 222.00 1.8100
-bond 6 29 320.00 1.4250
-bond 6 33 382.00 1.4480
-bond 6 35 337.00 1.4490
-bond 6 37 317.00 1.5100
-bond 6 41 260.00 1.5260
-bond 6 43 367.00 1.4710
-bond 6 45 337.00 1.4630
-bond 6 69 222.00 1.8100
-bond 6 95 337.00 1.4750
-bond 7 23 340.00 0.1000
-bond 7 29 553.00 0.9450
-bond 9 9 530.00 1.3400
-bond 9 11 530.00 1.3400
-bond 9 14 530.00 1.3400
-bond 10 10 260.00 1.5260
-bond 10 11 317.00 1.5000
-bond 10 14 317.00 1.5000
-bond 10 29 320.00 1.4250
-bond 10 33 382.00 1.4480
-bond 10 35 337.00 1.4490
-bond 10 95 337.00 1.4750
-bond 11 11 530.00 1.3400
-bond 11 13 317.00 1.5000
-bond 11 14 530.00 1.3400
-bond 11 69 222.00 1.7600
-bond 12 12 469.00 1.4000
-bond 12 38 469.00 1.4000
-bond 12 50 469.00 1.4000
-bond 12 71 469.00 1.4000
-bond 13 13 268.00 1.5290
-bond 13 14 317.00 1.5000
-bond 13 15 222.00 1.8100
-bond 13 16 222.00 1.8100
-bond 13 18 390.00 1.4300
-bond 13 19 390.00 1.4700
-bond 13 23 340.00 0.3000
-bond 13 29 320.00 1.4100
-bond 13 30 245.00 1.7810
-bond 13 31 340.00 1.7900
-bond 13 33 382.00 1.4480
-bond 13 35 337.00 1.4490
-bond 13 36 340.00 1.0900
-bond 13 37 317.00 1.5100
-bond 13 38 317.00 1.5100
-bond 13 40 317.00 1.5100
-bond 13 41 268.00 1.5290
-bond 13 43 367.00 1.4710
-bond 13 45 337.00 1.4630
-bond 13 46 337.00 1.4490
-bond 13 47 337.00 1.4750
-bond 13 50 317.00 1.5100
-bond 13 54 212.00 1.8430
-bond 13 55 245.00 1.9450
-bond 13 56 200.00 2.1900
-bond 13 69 340.00 1.7700
-bond 13 70 317.00 1.4950
-bond 13 73 317.00 1.5040
-bond 13 74 317.00 1.5040
-bond 13 75 317.00 1.5040
-bond 13 77 317.00 1.4950
-bond 13 80 337.00 1.4490
-bond 13 81 280.00 1.5100
-bond 13 85 532.80 1.4600
-bond 13 91 382.00 1.4480
-bond 13 92 375.00 1.4900
-bond 13 94 212.00 1.8200
-bond 13 95 337.00 1.4750
-bond 13 97 337.00 1.4490
-bond 13 98 187.00 1.8600
-bond 13 99 317.00 1.5100
-bond 14 14 530.00 1.3400
-bond 15 17 274.00 1.3360
-bond 15 38 250.00 1.7400
-bond 16 16 166.00 2.0380
-bond 16 19 300.00 1.6850
-bond 16 23 340.00 0.5000
-bond 16 35 250.00 1.7300
-bond 16 37 250.00 1.7600
-bond 16 38 250.00 1.7600
-bond 16 51 250.00 1.7300
-bond 16 72 250.00 1.7600
-bond 16 74 250.00 1.7400
-bond 16 81 222.00 1.8100
-bond 16 98 144.00 2.1500
-bond 17 23 340.00 0.1000
-bond 18 18 550.00 1.1200
-bond 18 19 650.00 1.1570
-bond 18 38 400.00 1.4100
-bond 18 46 550.00 1.2400
-bond 19 19 1150.00 1.2100
-bond 19 30 330.00 1.6370
-bond 19 36 420.00 1.0800
-bond 19 37 400.00 1.4260
-bond 19 38 400.00 1.4510
-bond 19 40 400.00 1.4260
-bond 19 55 330.00 1.7840
-bond 19 78 400.00 1.4510
-bond 19 81 400.00 1.4510
-bond 20 21 600.00 0.9572
-bond 20 22 900.00 0.1750
-bond 20 96 40.00 2.0500
-bond 23 23 340.00 0.3000
-bond 23 29 340.00 0.3000
-bond 23 30 300.00 0.3000
-bond 23 31 340.00 0.5000
-bond 23 32 340.00 0.3000
-bond 23 33 340.00 0.3000
-bond 23 34 340.00 0.1000
-bond 23 35 367.00 0.3000
-bond 23 36 340.00 0.3000
-bond 23 37 340.00 0.3000
-bond 23 38 367.00 0.3000
-bond 23 39 340.00 0.3000
-bond 23 43 340.00 0.3000
-bond 23 46 367.00 0.3000
-bond 23 51 367.00 0.3000
-bond 23 55 300.00 0.3000
-bond 23 93 340.00 0.1000
-bond 29 29 250.00 1.4700
-bond 29 30 200.00 1.6900
-bond 29 33 320.00 1.4500
-bond 29 35 320.00 1.4500
-bond 29 37 450.00 1.3700
-bond 29 38 450.00 1.3640
-bond 29 41 320.00 1.3800
-bond 29 50 340.00 1.3600
-bond 29 51 462.00 1.3990
-bond 29 54 230.00 1.6100
-bond 29 72 462.00 1.3570
-bond 29 74 340.00 1.3600
-bond 29 98 374.00 1.6400
-bond 30 37 300.00 1.7250
-bond 30 38 300.00 1.7250
-bond 30 72 300.00 1.7250
-bond 30 73 300.00 1.7250
-bond 30 74 300.00 1.7250
-bond 30 77 300.00 1.7250
-bond 30 78 300.00 1.7250
-bond 30 98 223.00 2.0200
-bond 31 32 700.00 1.5300
-bond 32 69 700.00 1.4400
-bond 33 33 350.00 1.4450
-bond 33 34 434.00 1.0100
-bond 33 38 481.00 1.3400
-bond 33 69 340.00 1.7700
-bond 33 81 382.00 1.4480
-bond 33 98 266.00 1.7400
-bond 34 35 434.00 1.0100
-bond 34 43 434.00 1.0100
-bond 34 45 434.00 1.0100
-bond 34 46 434.00 1.0100
-bond 34 47 434.00 1.0100
-bond 34 91 434.00 1.0100
-bond 34 95 434.00 1.0100
-bond 34 98 166.00 1.4800
-bond 35 38 427.00 1.3810
-bond 35 49 427.00 1.3810
-bond 35 69 434.00 1.6700
-bond 35 74 427.00 1.3810
-bond 35 78 427.00 1.3810
-bond 35 81 337.00 1.4490
-bond 35 93 500.00 1.2700
-bond 35 96 40.00 2.0500
-bond 36 37 340.00 1.0800
-bond 36 40 340.00 1.0800
-bond 36 41 340.00 1.0900
-bond 36 70 340.00 1.0800
-bond 36 81 340.00 1.0880
-bond 36 85 532.80 1.0840
-bond 36 98 166.00 1.4800
-bond 36 99 340.00 1.0800
-bond 37 37 549.00 1.3400
-bond 37 38 427.00 1.4330
-bond 37 40 549.00 1.3400
-bond 37 47 448.00 1.3650
-bond 37 48 367.00 1.0800
-bond 37 55 300.00 1.9000
-bond 37 56 250.00 2.0800
-bond 37 76 385.00 1.4600
-bond 37 81 317.00 1.5100
-bond 37 95 448.00 1.3650
-bond 37 100 700.00 1.3050
-bond 38 38 469.00 1.4000
-bond 38 39 367.00 1.0800
-bond 38 40 427.00 1.4330
-bond 38 43 400.00 1.4500
-bond 38 45 481.00 1.3400
-bond 38 46 483.00 1.3390
-bond 38 47 427.00 1.3810
-bond 38 50 469.00 1.4040
-bond 38 51 414.00 1.3910
-bond 38 54 220.00 1.7800
-bond 38 55 300.00 1.8700
-bond 38 56 250.00 2.0800
-bond 38 69 340.00 1.7700
-bond 38 71 469.00 1.4000
-bond 38 74 546.00 1.3670
-bond 38 76 469.00 1.4000
-bond 38 78 469.00 1.4210
-bond 38 81 317.00 1.4900
-bond 38 91 382.00 1.3850
-bond 38 92 400.00 1.4600
-bond 38 99 427.00 1.4330
-bond 39 49 367.00 1.0800
-bond 39 52 340.00 1.0800
-bond 39 72 367.00 1.0800
-bond 39 73 367.00 1.0800
-bond 39 74 367.00 1.0800
-bond 39 75 367.00 1.0800
-bond 39 77 367.00 1.0800
-bond 39 78 367.00 1.0800
-bond 40 40 385.00 1.4600
-bond 40 46 457.00 1.2900
-bond 40 74 549.00 1.3650
-bond 40 99 385.00 1.4600
-bond 41 95 337.00 1.4750
-bond 42 54 525.00 1.4800
-bond 43 44 434.00 1.0100
-bond 44 45 434.00 1.0100
-bond 45 49 481.00 1.3400
-bond 45 72 481.00 1.3400
-bond 46 46 500.00 1.3200
-bond 46 49 502.00 1.3240
-bond 46 50 461.00 1.3540
-bond 46 72 461.00 1.3540
-bond 46 76 483.00 1.3390
-bond 46 93 550.00 1.2100
-bond 46 99 457.00 1.2900
-bond 47 50 436.00 1.3740
-bond 47 51 400.00 1.3490
-bond 47 52 440.00 1.3710
-bond 47 71 428.00 1.3800
-bond 47 72 477.00 1.3430
-bond 47 74 427.00 1.3810
-bond 47 75 427.00 1.3810
-bond 47 76 385.00 1.4400
-bond 48 73 367.00 1.0800
-bond 48 74 367.00 1.0800
-bond 49 53 367.00 1.0800
-bond 50 50 520.00 1.3700
-bond 50 51 414.00 1.3910
-bond 50 70 388.00 1.4590
-bond 50 71 447.00 1.4190
-bond 50 77 469.00 1.4240
-bond 50 95 436.00 1.3740
-bond 51 51 400.00 1.2800
-bond 51 52 529.00 1.3040
-bond 51 72 488.00 1.3350
-bond 51 73 410.00 1.3940
-bond 51 74 410.00 1.3940
-bond 51 78 410.00 1.3200
-bond 52 53 367.00 1.0800
-bond 52 95 440.00 1.3710
-bond 53 72 367.00 1.0800
-bond 54 98 108.00 2.2500
-bond 55 72 300.00 1.8700
-bond 55 73 300.00 1.8700
-bond 55 74 300.00 1.8700
-bond 55 77 300.00 1.8700
-bond 55 78 300.00 1.8700
-bond 55 98 151.00 2.1900
-bond 56 72 250.00 2.0800
-bond 56 73 250.00 2.0800
-bond 56 74 250.00 2.0800
-bond 56 77 250.00 2.0800
-bond 56 78 250.00 2.0800
-bond 56 98 108.00 2.4400
-bond 67 68 500.00 1.8000
-bond 70 74 546.00 1.3520
-bond 72 76 385.00 1.4600
-bond 72 77 520.00 1.3700
-bond 73 74 520.00 1.3700
-bond 73 76 385.00 1.4600
-bond 74 74 512.00 1.3750
-bond 74 76 385.00 1.4600
-bond 74 77 546.00 1.3670
-bond 74 78 520.00 1.3700
-bond 75 75 520.00 1.3700
-bond 76 76 385.00 1.4600
-bond 76 77 385.00 1.4600
-bond 76 78 385.00 1.4600
-bond 77 77 469.00 1.4240
-bond 77 78 469.00 1.4240
-bond 79 80 490.00 1.3350
-bond 79 81 317.00 1.5220
-bond 80 81 337.00 1.4490
-bond 81 81 260.00 1.5200
-bond 92 93 550.00 1.2250
-bond 98 98 94.00 2.3200
-bond 99 99 549.00 1.3450
-
-
- ################################
- ## ##
- ## Angle Bending Parameters ##
- ## ##
- ################################
-
-
-angle 23 1 23 33.00 109.47
-angle 1 2 2 50.00 109.50
-angle 2 2 2 63.00 112.40
-angle 2 2 3 63.00 112.40
-angle 2 2 5 80.00 109.50
-angle 2 2 6 63.00 112.40
-angle 2 2 10 63.00 112.40
-angle 2 2 16 50.00 114.70
-angle 2 2 29 80.00 109.50
-angle 2 2 33 56.20 109.47
-angle 2 2 35 80.00 111.20
-angle 2 2 38 63.00 112.40
-angle 2 2 41 63.00 112.40
-angle 2 2 43 80.00 111.20
-angle 2 2 45 80.00 111.20
-angle 3 2 10 63.00 112.40
-angle 3 2 33 80.00 111.20
-angle 3 2 35 80.00 110.30
-angle 5 2 6 80.00 109.50
-angle 5 2 10 80.00 109.50
-angle 6 2 6 63.00 112.40
-angle 6 2 10 63.00 112.40
-angle 6 2 13 63.00 112.40
-angle 6 2 29 80.00 109.50
-angle 6 2 33 56.20 109.47
-angle 6 2 41 63.00 112.40
-angle 10 2 10 63.00 112.40
-angle 10 2 12 63.00 114.00
-angle 10 2 15 50.00 108.60
-angle 10 2 16 50.00 114.70
-angle 10 2 29 80.00 109.50
-angle 10 2 33 56.20 109.47
-angle 10 2 38 63.00 114.00
-angle 10 2 70 63.00 115.60
-angle 13 2 33 56.20 109.47
-angle 1 3 4 80.00 121.00
-angle 1 3 13 80.00 111.00
-angle 2 3 4 80.00 120.40
-angle 2 3 35 70.00 116.60
-angle 2 3 42 70.00 117.00
-angle 3 3 4 80.00 121.40
-angle 3 3 13 80.00 117.20
-angle 3 3 35 70.00 116.60
-angle 4 3 4 80.00 126.00
-angle 4 3 5 80.00 121.00
-angle 4 3 6 80.00 120.40
-angle 4 3 10 80.00 120.40
-angle 4 3 13 80.00 120.40
-angle 4 3 29 83.00 123.40
-angle 4 3 30 75.00 119.00
-angle 4 3 33 80.00 120.40
-angle 4 3 35 80.00 122.90
-angle 4 3 36 35.00 123.00
-angle 4 3 37 80.00 125.30
-angle 4 3 38 80.00 120.40
-angle 4 3 40 80.00 124.00
-angle 4 3 42 80.00 126.00
-angle 4 3 46 80.00 122.50
-angle 4 3 47 80.00 120.60
-angle 4 3 50 80.00 128.80
-angle 4 3 55 75.00 119.00
-angle 4 3 74 80.00 120.40
-angle 4 3 77 80.00 128.20
-angle 4 3 95 80.00 120.90
-angle 4 3 97 80.00 122.90
-angle 5 3 10 70.00 115.00
-angle 5 3 12 70.00 120.00
-angle 5 3 13 70.00 108.00
-angle 5 3 36 40.00 115.00
-angle 5 3 38 70.00 120.00
-angle 6 3 35 70.00 116.60
-angle 6 3 42 70.00 117.00
-angle 10 3 29 81.00 111.40
-angle 10 3 35 70.00 116.60
-angle 10 3 42 65.00 117.00
-angle 12 3 12 85.00 120.00
-angle 13 3 13 70.00 116.00
-angle 13 3 29 81.00 111.40
-angle 13 3 30 75.00 109.00
-angle 13 3 33 70.00 116.00
-angle 13 3 35 70.00 116.60
-angle 13 3 36 35.00 115.00
-angle 13 3 38 70.00 116.00
-angle 13 3 40 70.00 116.00
-angle 13 3 42 70.00 117.00
-angle 13 3 55 75.00 109.00
-angle 13 3 97 70.00 116.60
-angle 29 3 35 81.00 111.40
-angle 29 3 36 40.00 115.00
-angle 29 3 38 81.00 111.40
-angle 33 3 74 70.00 116.00
-angle 35 3 35 70.00 114.20
-angle 35 3 36 40.00 114.00
-angle 35 3 37 70.00 115.50
-angle 35 3 38 70.00 115.50
-angle 35 3 50 70.00 111.30
-angle 36 3 36 35.00 115.00
-angle 36 3 38 35.00 115.00
-angle 36 3 40 80.00 116.00
-angle 36 3 46 35.00 116.00
-angle 36 3 46 35.00 122.00
-angle 37 3 47 70.00 114.10
-angle 38 3 38 85.00 120.00
-angle 38 3 42 70.00 117.00
-angle 42 3 42 80.00 126.00
-angle 46 3 47 70.00 118.60
-angle 46 3 95 70.00 118.60
-angle 47 3 47 70.00 118.60
-angle 47 3 50 70.00 111.30
-angle 47 3 95 70.00 115.40
-angle 3 4 23 35.00 113.00
-angle 23 4 23 10.00 117.00
-angle 2 5 7 55.00 108.50
-angle 3 5 7 35.00 113.00
-angle 6 5 7 55.00 108.50
-angle 7 5 10 55.00 108.50
-angle 7 5 13 55.00 108.50
-angle 7 5 23 10.00 109.47
-angle 7 5 35 49.00 105.40
-angle 7 5 37 35.00 109.00
-angle 7 5 38 35.00 113.00
-angle 7 5 41 55.00 108.50
-angle 7 5 54 55.00 108.50
-angle 7 5 69 74.00 110.00
-angle 7 5 96 100.00 126.00
-angle 13 5 23 10.00 109.47
-angle 13 5 54 100.00 120.50
-angle 23 5 23 5.00 109.47
-angle 23 5 38 10.00 109.47
-angle 5 7 23 10.00 109.47
-angle 23 7 23 33.00 109.47
-angle 2 10 2 63.00 112.40
-angle 2 10 3 63.00 111.10
-angle 2 10 5 80.00 109.50
-angle 2 10 6 63.00 112.40
-angle 2 10 10 63.00 111.50
-angle 2 10 29 80.00 109.50
-angle 2 10 33 56.20 109.47
-angle 2 10 35 80.00 109.70
-angle 2 10 38 63.00 112.40
-angle 2 10 95 80.00 109.50
-angle 3 10 6 63.00 111.10
-angle 3 10 10 63.00 111.10
-angle 3 10 33 80.00 109.70
-angle 3 10 35 63.00 110.10
-angle 5 10 6 80.00 109.50
-angle 5 10 10 80.00 109.50
-angle 6 10 6 63.00 111.50
-angle 6 10 10 63.00 111.50
-angle 6 10 29 80.00 109.50
-angle 6 10 33 56.20 109.47
-angle 6 10 35 80.00 109.50
-angle 10 10 10 63.00 111.50
-angle 10 10 29 80.00 109.50
-angle 10 10 33 56.20 109.47
-angle 10 10 35 80.00 109.70
-angle 10 10 95 80.00 109.50
-angle 13 10 33 56.20 109.47
-angle 29 10 38 80.00 109.50
-angle 29 10 95 80.00 109.50
-angle 2 11 2 70.00 124.00
-angle 2 11 6 70.00 124.00
-angle 2 11 9 70.00 118.00
-angle 2 11 10 70.00 124.00
-angle 2 11 11 70.00 118.00
-angle 2 11 13 70.00 124.00
-angle 6 11 6 70.00 124.00
-angle 6 11 9 70.00 118.00
-angle 6 11 10 70.00 124.00
-angle 6 11 11 70.00 118.00
-angle 6 11 13 70.00 124.00
-angle 9 11 10 70.00 118.00
-angle 9 11 11 70.00 118.00
-angle 9 11 13 70.00 118.00
-angle 9 11 14 70.00 118.00
-angle 9 11 69 70.00 118.00
-angle 10 11 10 70.00 124.00
-angle 10 11 11 70.00 118.00
-angle 10 11 13 70.00 124.00
-angle 11 11 11 70.00 118.00
-angle 11 11 13 70.00 118.00
-angle 11 11 14 70.00 118.00
-angle 13 11 13 70.00 124.00
-angle 2 12 12 70.00 120.00
-angle 3 12 12 85.00 120.00
-angle 12 12 12 85.00 120.00
-angle 12 12 38 85.00 120.00
-angle 12 12 50 85.00 120.00
-angle 12 12 71 85.00 120.00
-angle 1 13 1 77.00 109.10
-angle 1 13 3 50.00 109.50
-angle 1 13 13 50.00 109.50
-angle 1 13 36 40.00 107.00
-angle 1 13 37 50.00 109.50
-angle 1 13 38 50.00 109.50
-angle 1 13 69 50.00 109.50
-angle 2 13 2 40.00 109.50
-angle 2 13 3 63.00 111.10
-angle 2 13 6 40.00 109.50
-angle 2 13 33 56.20 109.47
-angle 2 13 35 80.00 109.70
-angle 2 13 36 35.00 109.50
-angle 2 13 38 63.00 114.00
-angle 3 13 3 63.00 111.10
-angle 3 13 6 63.00 109.50
-angle 3 13 13 63.00 111.10
-angle 3 13 29 50.00 109.50
-angle 3 13 30 69.00 109.80
-angle 3 13 33 80.00 111.20
-angle 3 13 35 63.00 110.10
-angle 3 13 36 35.00 109.50
-angle 3 13 38 63.00 112.00
-angle 3 13 43 80.00 111.20
-angle 3 13 46 63.00 110.10
-angle 3 13 55 69.00 109.80
-angle 3 13 80 80.00 113.00
-angle 5 13 13 50.00 109.50
-angle 5 13 36 35.00 109.50
-angle 5 13 38 50.00 109.50
-angle 5 13 41 50.00 109.50
-angle 6 13 6 40.00 109.50
-angle 6 13 33 56.20 109.47
-angle 10 13 33 56.20 109.47
-angle 13 13 13 58.35 112.70
-angle 13 13 15 50.00 108.60
-angle 13 13 16 50.00 114.70
-angle 13 13 19 58.35 112.70
-angle 13 13 29 50.00 109.50
-angle 13 13 30 69.00 109.80
-angle 13 13 31 50.00 108.60
-angle 13 13 33 56.20 109.47
-angle 13 13 35 80.00 109.70
-angle 13 13 36 37.50 110.70
-angle 13 13 37 63.00 111.10
-angle 13 13 38 63.00 114.00
-angle 13 13 41 58.35 112.70
-angle 13 13 43 80.00 111.20
-angle 13 13 45 80.00 111.20
-angle 13 13 46 65.00 109.00
-angle 13 13 50 63.00 114.00
-angle 13 13 54 43.00 109.50
-angle 13 13 55 69.00 110.00
-angle 13 13 56 75.00 112.00
-angle 13 13 69 50.00 108.60
-angle 13 13 70 63.00 115.60
-angle 13 13 73 63.00 114.00
-angle 13 13 74 63.00 114.00
-angle 13 13 75 63.00 114.00
-angle 13 13 77 63.00 115.60
-angle 13 13 80 80.00 110.00
-angle 13 13 85 63.00 105.00
-angle 13 13 91 80.00 111.20
-angle 13 13 92 63.00 111.10
-angle 13 13 94 43.00 109.50
-angle 13 13 95 50.00 109.50
-angle 13 13 97 80.00 109.70
-angle 13 13 98 60.00 112.00
-angle 15 13 36 35.00 109.50
-angle 16 13 33 50.00 114.70
-angle 16 13 36 35.00 109.50
-angle 16 13 38 50.00 114.70
-angle 16 13 74 50.00 114.70
-angle 18 13 36 35.00 108.50
-angle 19 13 36 35.00 108.50
-angle 29 13 35 50.00 109.50
-angle 29 13 36 35.00 109.50
-angle 29 13 38 50.00 109.50
-angle 29 13 95 50.00 109.50
-angle 30 13 30 78.00 111.70
-angle 30 13 36 51.00 107.60
-angle 31 13 36 35.00 109.50
-angle 33 13 36 35.00 109.50
-angle 33 13 38 80.00 111.20
-angle 35 13 36 35.00 109.50
-angle 36 13 36 33.00 107.80
-angle 36 13 37 35.00 109.50
-angle 36 13 38 35.00 109.50
-angle 36 13 40 35.00 109.50
-angle 36 13 41 37.50 110.70
-angle 36 13 43 35.00 109.50
-angle 36 13 45 35.00 109.50
-angle 36 13 46 35.00 109.50
-angle 36 13 47 35.00 109.50
-angle 36 13 50 35.00 109.50
-angle 36 13 54 41.00 109.50
-angle 36 13 55 51.00 107.60
-angle 36 13 56 75.00 111.00
-angle 36 13 69 35.00 109.50
-angle 36 13 70 35.00 109.50
-angle 36 13 73 35.00 109.50
-angle 36 13 74 35.00 109.50
-angle 36 13 75 35.00 109.50
-angle 36 13 77 35.00 109.50
-angle 36 13 80 35.00 109.50
-angle 36 13 81 37.50 110.70
-angle 36 13 85 35.00 105.00
-angle 36 13 91 35.00 109.50
-angle 36 13 92 35.00 105.00
-angle 36 13 94 41.00 109.50
-angle 36 13 95 35.00 109.50
-angle 36 13 97 35.00 109.50
-angle 36 13 98 35.00 109.50
-angle 37 13 37 63.00 112.40
-angle 37 13 38 40.00 109.50
-angle 38 13 38 40.00 109.50
-angle 38 13 47 80.00 111.20
-angle 38 13 54 43.00 109.50
-angle 38 13 55 69.00 110.00
-angle 55 13 55 78.00 111.70
-angle 2 14 2 70.00 124.00
-angle 2 14 6 70.00 124.00
-angle 2 14 9 70.00 118.00
-angle 2 14 10 70.00 124.00
-angle 2 14 11 70.00 118.00
-angle 2 14 13 70.00 124.00
-angle 2 14 14 70.00 118.00
-angle 6 14 6 70.00 124.00
-angle 6 14 9 70.00 118.00
-angle 6 14 10 70.00 124.00
-angle 6 14 11 70.00 118.00
-angle 6 14 13 70.00 124.00
-angle 6 14 14 70.00 118.00
-angle 9 14 10 70.00 118.00
-angle 9 14 11 70.00 118.00
-angle 9 14 13 70.00 118.00
-angle 9 14 14 70.00 118.00
-angle 10 14 10 70.00 124.00
-angle 10 14 11 70.00 118.00
-angle 10 14 13 70.00 124.00
-angle 10 14 14 70.00 118.00
-angle 11 14 11 70.00 118.00
-angle 11 14 13 70.00 118.00
-angle 11 14 14 70.00 118.00
-angle 13 14 13 70.00 124.00
-angle 13 14 14 70.00 118.00
-angle 14 14 14 70.00 118.00
-angle 2 15 17 44.00 96.00
-angle 2 15 22 150.00 96.70
-angle 6 15 17 44.00 96.00
-angle 6 15 22 150.00 96.70
-angle 13 15 17 44.00 96.00
-angle 13 15 22 150.00 96.70
-angle 13 15 23 10.00 109.47
-angle 17 15 17 35.00 92.07
-angle 17 15 22 150.00 96.70
-angle 17 15 38 50.00 96.00
-angle 22 15 22 10.00 160.00
-angle 23 15 23 5.00 109.47
-angle 2 16 6 62.00 98.90
-angle 2 16 16 68.00 103.70
-angle 2 16 22 150.00 96.70
-angle 6 16 16 68.00 103.70
-angle 6 16 22 150.00 96.70
-angle 13 16 13 62.00 98.90
-angle 13 16 16 68.00 103.70
-angle 13 16 19 65.00 100.00
-angle 13 16 22 150.00 96.70
-angle 13 16 23 10.00 109.47
-angle 13 16 38 62.00 104.20
-angle 13 16 81 62.00 94.00
-angle 16 16 22 150.00 96.70
-angle 22 16 22 10.00 160.00
-angle 23 16 23 5.00 109.47
-angle 23 16 51 10.00 130.00
-angle 23 16 72 10.00 130.00
-angle 23 16 74 10.00 130.00
-angle 35 16 50 74.00 92.40
-angle 37 16 38 62.00 104.20
-angle 50 16 72 74.00 97.00
-angle 50 16 74 74.00 97.00
-angle 72 16 74 74.00 90.00
-angle 74 16 74 74.00 97.00
-angle 15 17 23 10.00 109.47
-angle 23 17 23 33.00 109.47
-angle 13 18 19 150.00 180.00
-angle 18 18 46 100.00 180.00
-angle 19 18 38 170.00 180.00
-angle 13 19 18 150.00 180.00
-angle 13 19 19 150.00 180.00
-angle 16 19 19 140.00 180.00
-angle 18 19 23 10.00 90.00
-angle 18 19 37 150.00 180.00
-angle 18 19 38 150.00 180.00
-angle 18 19 45 150.00 180.00
-angle 18 19 78 150.00 180.00
-angle 19 19 36 112.00 180.00
-angle 19 19 37 160.00 180.00
-angle 19 19 38 160.00 180.00
-angle 19 19 40 160.00 180.00
-angle 21 20 21 75.00 109.50
-angle 21 20 22 50.00 54.75
-angle 23 23 23 33.00 109.47
-angle 2 29 2 100.00 111.80
-angle 2 29 3 83.00 116.90
-angle 2 29 6 100.00 111.80
-angle 2 29 7 55.00 108.50
-angle 2 29 38 100.00 111.80
-angle 2 29 41 100.00 113.00
-angle 2 29 54 100.00 120.50
-angle 3 29 6 83.00 116.90
-angle 3 29 10 83.00 116.90
-angle 3 29 13 83.00 116.90
-angle 3 29 38 83.00 116.90
-angle 6 29 41 100.00 113.00
-angle 6 29 54 100.00 120.50
-angle 7 29 10 55.00 108.50
-angle 10 29 10 100.00 111.80
-angle 10 29 41 100.00 113.00
-angle 10 29 54 100.00 120.50
-angle 13 29 13 60.00 109.50
-angle 13 29 23 10.00 109.47
-angle 13 29 37 75.00 111.00
-angle 13 29 38 75.00 111.00
-angle 13 29 41 60.00 109.50
-angle 13 29 54 100.00 120.50
-angle 13 29 98 40.00 130.00
-angle 23 29 23 5.00 109.47
-angle 23 29 38 10.00 109.47
-angle 23 29 51 10.00 125.00
-angle 23 29 72 10.00 125.00
-angle 23 29 74 10.00 125.00
-angle 35 29 50 70.00 104.50
-angle 37 29 38 75.00 111.00
-angle 38 29 38 75.00 111.00
-angle 38 29 54 100.00 120.50
-angle 50 29 72 70.00 106.50
-angle 50 29 74 70.00 106.50
-angle 51 29 74 70.00 108.90
-angle 54 29 54 100.00 120.50
-angle 72 29 72 70.00 107.00
-angle 72 29 74 70.00 104.00
-angle 74 29 74 70.00 106.50
-angle 98 29 98 20.00 145.00
-angle 23 30 23 33.00 109.47
-angle 13 31 13 62.00 96.00
-angle 13 31 32 74.00 107.00
-angle 23 31 32 10.00 90.00
-angle 2 33 2 51.80 107.20
-angle 2 33 6 51.80 107.20
-angle 2 33 10 51.80 107.20
-angle 2 33 13 51.80 107.20
-angle 2 33 34 43.20 108.10
-angle 3 33 13 63.00 111.10
-angle 3 33 38 63.00 112.00
-angle 6 33 6 51.80 107.20
-angle 6 33 10 51.80 107.20
-angle 6 33 13 51.80 107.20
-angle 6 33 34 43.20 108.10
-angle 10 33 10 51.80 107.20
-angle 10 33 13 51.80 107.20
-angle 10 33 34 43.20 108.10
-angle 13 33 13 51.80 107.20
-angle 13 33 34 35.00 109.50
-angle 13 33 38 50.00 116.00
-angle 13 33 69 50.00 108.60
-angle 23 33 34 10.00 100.00
-angle 23 33 38 10.00 109.50
-angle 34 33 34 43.60 106.40
-angle 34 33 38 35.00 116.00
-angle 34 33 69 35.00 115.00
-angle 38 33 38 50.00 116.00
-angle 38 33 69 50.00 108.60
-angle 38 33 81 50.00 109.50
-angle 23 34 23 33.00 109.47
-angle 23 34 33 10.00 109.50
-angle 2 35 3 50.00 121.90
-angle 2 35 6 50.00 121.90
-angle 2 35 10 50.00 118.00
-angle 2 35 34 38.00 118.40
-angle 3 35 3 70.00 126.40
-angle 3 35 5 46.00 115.70
-angle 3 35 6 50.00 121.90
-angle 3 35 10 50.00 121.90
-angle 3 35 13 50.00 121.90
-angle 3 35 16 70.00 112.00
-angle 3 35 23 10.00 109.50
-angle 3 35 29 70.00 108.60
-angle 3 35 34 35.00 119.80
-angle 3 35 38 50.00 121.90
-angle 3 35 49 70.00 125.20
-angle 3 35 81 55.00 128.00
-angle 3 35 96 20.00 126.00
-angle 5 35 34 35.00 110.20
-angle 6 35 34 38.00 118.40
-angle 10 35 34 38.00 118.40
-angle 13 35 13 50.00 118.00
-angle 13 35 34 38.00 118.40
-angle 13 35 38 50.00 118.00
-angle 13 35 69 50.00 120.00
-angle 16 35 76 70.00 117.00
-angle 23 35 34 10.00 100.00
-angle 34 35 34 35.00 120.00
-angle 34 35 38 35.00 119.80
-angle 34 35 49 35.00 118.00
-angle 34 35 69 100.00 111.00
-angle 34 35 74 35.00 119.80
-angle 34 35 77 35.00 119.80
-angle 34 35 78 35.00 119.80
-angle 34 35 81 40.00 113.00
-angle 38 35 38 70.00 118.00
-angle 38 35 74 70.00 118.00
-angle 38 35 77 70.00 118.00
-angle 38 35 78 70.00 118.00
-angle 38 35 93 70.00 121.00
-angle 44 35 44 35.00 120.00
-angle 13 36 23 37.50 109.47
-angle 23 36 23 33.00 109.47
-angle 1 37 1 80.00 108.00
-angle 1 37 3 80.00 121.50
-angle 1 37 36 50.00 112.00
-angle 1 37 37 80.00 121.50
-angle 1 37 100 80.00 125.00
-angle 3 37 6 85.00 119.70
-angle 3 37 13 70.00 119.70
-angle 3 37 36 35.00 119.70
-angle 3 37 37 85.00 120.70
-angle 3 37 81 70.00 119.70
-angle 5 37 37 70.00 123.00
-angle 5 37 40 70.00 123.00
-angle 13 37 13 70.00 130.00
-angle 13 37 36 35.00 117.00
-angle 13 37 37 70.00 124.00
-angle 13 37 38 85.00 119.70
-angle 13 37 40 70.00 124.00
-angle 13 37 47 70.00 120.00
-angle 13 37 95 70.00 120.00
-angle 13 37 100 80.00 122.00
-angle 16 37 37 85.00 119.40
-angle 16 37 47 85.00 119.40
-angle 16 37 95 85.00 119.40
-angle 19 37 36 35.00 120.00
-angle 19 37 37 70.00 124.00
-angle 23 37 36 10.00 90.00
-angle 23 37 37 2.00 90.00
-angle 23 37 40 2.00 90.00
-angle 29 37 36 35.00 114.50
-angle 29 37 37 70.00 123.00
-angle 29 37 40 70.00 123.00
-angle 29 37 47 70.00 120.00
-angle 29 37 95 70.00 120.00
-angle 30 37 36 60.00 114.00
-angle 30 37 37 75.00 121.50
-angle 36 37 36 35.00 117.00
-angle 36 37 37 35.00 120.00
-angle 36 37 38 35.00 123.30
-angle 36 37 40 35.00 120.00
-angle 36 37 47 35.00 119.10
-angle 36 37 55 60.00 114.00
-angle 36 37 81 35.00 135.00
-angle 36 37 95 35.00 119.10
-angle 36 37 100 40.00 121.00
-angle 37 37 38 85.00 117.00
-angle 37 37 47 70.00 121.20
-angle 37 37 48 35.00 119.70
-angle 37 37 55 75.00 120.00
-angle 37 37 81 70.00 124.00
-angle 37 37 95 70.00 121.20
-angle 38 37 100 80.00 122.00
-angle 47 37 48 35.00 119.10
-angle 48 37 95 35.00 119.10
-angle 1 38 38 80.00 120.00
-angle 2 38 12 70.00 120.00
-angle 2 38 38 70.00 120.00
-angle 2 38 50 70.00 128.60
-angle 3 38 13 70.00 119.70
-angle 3 38 38 85.00 120.00
-angle 3 38 39 35.00 120.00
-angle 5 38 38 70.00 120.00
-angle 5 38 46 70.00 120.00
-angle 10 38 38 70.00 120.00
-angle 12 38 12 85.00 120.00
-angle 13 38 38 70.00 120.00
-angle 13 38 46 70.00 116.00
-angle 13 38 47 70.00 120.00
-angle 13 38 50 70.00 128.60
-angle 15 38 38 70.00 120.00
-angle 16 38 38 85.00 119.40
-angle 18 38 38 80.00 120.00
-angle 19 38 38 70.00 120.00
-angle 23 38 38 10.00 90.00
-angle 23 38 39 2.00 90.00
-angle 29 38 38 70.00 120.00
-angle 30 38 38 75.00 120.00
-angle 30 38 46 75.00 120.00
-angle 33 38 38 70.00 120.00
-angle 33 38 46 70.00 116.00
-angle 35 38 38 70.00 120.00
-angle 35 38 39 35.00 119.10
-angle 37 38 38 70.00 124.00
-angle 37 38 45 70.00 120.10
-angle 37 38 46 70.00 121.50
-angle 37 38 47 70.00 121.50
-angle 38 38 38 63.00 120.00
-angle 38 38 39 35.00 120.00
-angle 38 38 40 70.00 124.00
-angle 38 38 43 70.00 120.00
-angle 38 38 45 70.00 120.10
-angle 38 38 46 70.00 124.00
-angle 38 38 47 70.00 108.70
-angle 38 38 50 63.00 120.00
-angle 38 38 51 70.00 108.70
-angle 38 38 54 85.00 119.40
-angle 38 38 55 75.00 120.00
-angle 38 38 56 75.00 120.00
-angle 38 38 69 85.00 119.40
-angle 38 38 71 85.00 120.00
-angle 38 38 74 70.00 107.40
-angle 38 38 76 63.00 120.00
-angle 38 38 92 85.00 120.00
-angle 38 38 99 70.00 124.00
-angle 39 38 46 35.00 116.00
-angle 39 38 47 35.00 120.00
-angle 39 38 50 35.00 120.00
-angle 39 38 51 35.00 119.10
-angle 39 38 71 35.00 120.00
-angle 39 38 74 35.00 126.90
-angle 39 38 76 35.00 120.00
-angle 39 38 78 35.00 128.20
-angle 40 38 46 70.00 121.50
-angle 45 38 45 70.00 120.00
-angle 45 38 46 70.00 119.30
-angle 45 38 47 70.00 116.00
-angle 45 38 50 70.00 123.50
-angle 46 38 47 70.00 123.30
-angle 46 38 50 70.00 117.30
-angle 46 38 76 70.00 124.00
-angle 46 38 91 70.00 124.10
-angle 47 38 50 70.00 108.70
-angle 47 38 51 70.00 123.30
-angle 50 38 74 63.00 106.40
-angle 91 38 91 70.00 111.80
-angle 3 40 37 70.00 118.70
-angle 13 40 37 70.00 124.00
-angle 13 40 40 70.00 124.00
-angle 13 40 99 70.00 124.00
-angle 19 40 36 35.00 120.00
-angle 23 40 36 10.00 90.00
-angle 23 40 37 2.00 90.00
-angle 23 40 40 2.00 90.00
-angle 36 40 37 35.00 120.00
-angle 36 40 38 35.00 123.30
-angle 36 40 40 35.00 120.00
-angle 36 40 74 35.00 122.00
-angle 36 40 99 35.00 120.00
-angle 37 40 38 85.00 117.00
-angle 37 40 40 70.00 124.00
-angle 37 40 99 70.00 124.00
-angle 40 40 74 35.00 106.00
-angle 2 41 29 80.00 109.50
-angle 5 41 13 50.00 109.50
-angle 5 41 29 92.60 111.55
-angle 5 41 36 35.00 109.50
-angle 6 41 6 40.00 109.50
-angle 6 41 29 80.00 109.50
-angle 13 41 29 50.00 109.50
-angle 13 41 36 37.50 110.70
-angle 13 41 95 50.00 109.50
-angle 29 41 29 92.60 111.55
-angle 29 41 36 35.00 109.50
-angle 29 41 95 50.00 109.50
-angle 36 41 36 33.00 109.50
-angle 36 41 95 35.00 109.50
-angle 2 43 44 35.00 109.50
-angle 6 43 44 35.00 109.50
-angle 13 43 13 50.00 113.00
-angle 13 43 23 10.00 100.00
-angle 13 43 38 55.00 114.00
-angle 13 43 44 35.00 109.50
-angle 23 43 38 10.00 100.00
-angle 23 43 72 10.00 100.00
-angle 34 43 34 43.60 109.50
-angle 38 43 44 35.00 109.50
-angle 44 43 44 35.00 109.50
-angle 2 45 38 50.00 123.20
-angle 2 45 44 35.00 118.40
-angle 6 45 38 50.00 123.20
-angle 13 45 13 50.00 118.00
-angle 13 45 34 35.00 118.40
-angle 13 45 38 50.00 123.20
-angle 13 45 44 35.00 118.40
-angle 34 45 34 35.00 113.00
-angle 34 45 38 35.00 120.00
-angle 34 45 49 35.00 120.00
-angle 38 45 44 35.00 120.00
-angle 44 45 44 35.00 120.00
-angle 3 46 13 70.00 120.50
-angle 3 46 38 70.00 120.50
-angle 13 46 18 70.00 120.00
-angle 13 46 38 50.00 118.00
-angle 13 46 46 70.00 117.00
-angle 13 46 93 70.00 114.00
-angle 23 46 38 5.00 120.00
-angle 23 46 49 5.00 119.80
-angle 34 46 38 35.00 113.00
-angle 38 46 38 70.00 117.00
-angle 38 46 46 70.00 117.00
-angle 38 46 49 70.00 118.60
-angle 38 46 50 70.00 112.20
-angle 38 46 76 70.00 117.00
-angle 49 46 49 70.00 118.60
-angle 49 46 50 70.00 111.00
-angle 49 46 72 70.00 111.00
-angle 3 47 3 70.00 126.40
-angle 3 47 34 35.00 116.80
-angle 3 47 37 70.00 121.60
-angle 3 47 38 70.00 125.20
-angle 13 47 50 70.00 125.80
-angle 13 47 51 70.00 118.40
-angle 13 47 52 70.00 128.80
-angle 34 47 37 35.00 119.20
-angle 34 47 38 35.00 118.00
-angle 34 47 50 30.00 125.80
-angle 34 47 51 56.00 118.40
-angle 34 47 52 30.00 128.80
-angle 34 47 71 35.00 123.10
-angle 34 47 72 35.00 120.00
-angle 34 47 74 35.00 120.00
-angle 34 47 75 35.00 120.00
-angle 38 47 38 70.00 125.20
-angle 38 47 51 70.00 118.40
-angle 38 47 52 70.00 109.80
-angle 50 47 51 56.00 113.10
-angle 50 47 52 70.00 105.40
-angle 50 47 72 70.00 109.80
-angle 50 47 74 70.00 109.80
-angle 51 47 72 56.00 113.10
-angle 51 47 74 56.00 113.10
-angle 71 47 74 70.00 111.60
-angle 72 47 74 70.00 109.80
-angle 72 47 75 70.00 109.80
-angle 74 47 74 70.00 109.80
-angle 13 49 46 70.00 115.50
-angle 35 49 45 70.00 116.00
-angle 35 49 46 70.00 123.30
-angle 39 49 46 35.00 115.45
-angle 45 49 46 70.00 119.30
-angle 46 49 46 70.00 129.10
-angle 46 49 53 35.00 115.45
-angle 3 50 50 85.00 119.20
-angle 3 50 51 70.00 130.00
-angle 3 50 74 70.00 130.00
-angle 12 50 70 85.00 134.90
-angle 12 50 71 85.00 116.20
-angle 12 50 77 85.00 134.90
-angle 13 50 38 70.00 120.00
-angle 13 50 50 70.00 120.00
-angle 16 50 50 70.00 111.00
-angle 29 50 50 70.00 110.60
-angle 35 50 50 70.00 127.70
-angle 35 50 51 70.00 126.20
-angle 38 50 38 85.00 134.90
-angle 38 50 50 85.00 117.30
-angle 38 50 51 70.00 132.40
-angle 38 50 70 85.00 134.90
-angle 38 50 71 85.00 116.20
-angle 38 50 77 85.00 134.90
-angle 46 50 47 70.00 126.20
-angle 46 50 50 70.00 127.70
-angle 46 50 95 70.00 126.20
-angle 47 50 50 70.00 106.20
-angle 47 50 77 70.00 107.70
-angle 50 50 51 70.00 111.00
-angle 50 50 77 70.00 107.30
-angle 50 50 95 70.00 106.20
-angle 70 50 71 85.00 108.80
-angle 71 50 77 85.00 108.80
-angle 23 51 47 10.00 125.00
-angle 23 51 51 10.00 125.00
-angle 23 51 72 10.00 125.00
-angle 29 51 78 70.00 105.30
-angle 38 51 38 70.00 125.20
-angle 47 51 74 70.00 104.10
-angle 47 51 78 70.00 104.10
-angle 50 51 52 70.00 103.80
-angle 50 51 72 70.00 110.00
-angle 51 51 72 70.00 109.00
-angle 72 51 73 70.00 110.00
-angle 72 51 74 70.00 110.00
-angle 39 52 47 35.00 120.00
-angle 39 52 51 35.00 120.00
-angle 39 52 95 35.00 120.00
-angle 47 52 51 70.00 113.90
-angle 47 52 53 35.00 123.05
-angle 51 52 53 35.00 123.05
-angle 51 52 95 70.00 113.90
-angle 53 52 95 35.00 123.05
-angle 4 54 5 100.00 108.23
-angle 4 54 13 45.00 109.50
-angle 4 54 29 100.00 108.23
-angle 4 54 38 45.00 109.50
-angle 5 54 5 45.00 102.60
-angle 5 54 29 45.00 102.60
-angle 5 54 38 45.00 109.50
-angle 5 54 42 45.00 108.23
-angle 13 54 29 45.00 109.50
-angle 13 54 42 45.00 109.50
-angle 29 54 29 45.00 102.60
-angle 29 54 38 45.00 109.50
-angle 29 54 42 100.00 108.23
-angle 42 54 42 140.00 119.90
-angle 23 55 23 33.00 109.47
-angle 23 56 23 33.00 109.47
-angle 68 67 68 150.00 180.00
-angle 5 69 13 75.00 96.40
-angle 5 69 32 74.00 108.70
-angle 5 69 38 75.00 96.40
-angle 6 69 11 62.00 98.90
-angle 13 69 13 62.00 102.00
-angle 13 69 32 74.00 108.90
-angle 13 69 33 62.00 102.00
-angle 13 69 35 100.00 103.00
-angle 13 69 38 62.00 102.00
-angle 13 69 72 62.00 102.00
-angle 32 69 32 104.00 119.00
-angle 32 69 33 74.00 108.90
-angle 32 69 35 120.00 107.00
-angle 32 69 38 74.00 107.20
-angle 35 69 38 100.00 103.00
-angle 2 70 50 70.00 128.60
-angle 2 70 74 70.00 125.00
-angle 13 70 50 70.00 128.60
-angle 13 70 74 70.00 125.00
-angle 36 70 50 35.00 126.80
-angle 36 70 74 35.00 126.80
-angle 50 70 74 85.00 106.40
-angle 12 71 47 70.00 132.80
-angle 12 71 50 85.00 122.70
-angle 38 71 47 70.00 132.80
-angle 38 71 50 85.00 122.70
-angle 47 71 50 70.00 104.40
-angle 13 72 16 70.00 125.00
-angle 13 72 47 70.00 125.00
-angle 13 72 51 70.00 125.00
-angle 16 72 33 70.00 120.20
-angle 16 72 35 70.00 125.00
-angle 16 72 39 35.00 125.00
-angle 16 72 51 70.00 113.60
-angle 16 72 51 70.00 115.00
-angle 29 72 39 35.00 117.00
-angle 29 72 51 70.00 115.00
-angle 29 72 76 70.00 122.00
-angle 33 72 51 70.00 126.10
-angle 35 72 51 70.00 126.20
-angle 38 72 47 70.00 125.00
-angle 39 72 47 35.00 120.00
-angle 39 72 51 35.00 120.00
-angle 46 72 47 70.00 126.20
-angle 46 72 77 70.00 127.70
-angle 47 72 47 70.00 120.00
-angle 47 72 51 70.00 120.00
-angle 47 72 69 70.00 120.00
-angle 47 72 77 70.00 106.20
-angle 51 72 69 70.00 120.00
-angle 51 72 76 70.00 130.00
-angle 13 73 51 70.00 124.50
-angle 13 73 74 70.00 130.70
-angle 38 73 51 70.00 111.00
-angle 39 73 51 35.00 120.00
-angle 39 73 74 35.00 128.20
-angle 51 73 74 70.00 111.00
-angle 3 74 47 85.00 120.00
-angle 3 74 77 85.00 120.00
-angle 13 74 16 70.00 125.00
-angle 13 74 29 70.00 121.60
-angle 13 74 47 70.00 121.60
-angle 13 74 51 70.00 118.90
-angle 13 74 73 70.00 130.70
-angle 13 74 74 70.00 120.00
-angle 13 74 77 70.00 132.10
-angle 16 74 35 70.00 125.00
-angle 16 74 39 35.00 125.00
-angle 16 74 73 70.00 111.00
-angle 16 74 77 70.00 111.00
-angle 29 74 39 35.00 113.40
-angle 29 74 40 70.00 110.00
-angle 29 74 73 70.00 108.00
-angle 29 74 76 70.00 121.60
-angle 29 74 77 70.00 110.60
-angle 38 74 39 35.00 130.70
-angle 38 74 47 70.00 121.60
-angle 38 74 77 70.00 132.10
-angle 39 74 40 35.00 130.70
-angle 39 74 47 35.00 121.60
-angle 39 74 70 35.00 120.00
-angle 39 74 73 35.00 130.70
-angle 39 74 77 35.00 132.10
-angle 47 74 48 35.00 120.00
-angle 47 74 70 70.00 108.70
-angle 47 74 73 70.00 106.30
-angle 47 74 74 70.00 120.00
-angle 47 74 76 70.00 121.60
-angle 47 74 77 70.00 107.70
-angle 51 74 74 70.00 120.00
-angle 51 74 77 70.00 111.90
-angle 76 74 77 70.00 132.10
-angle 13 75 47 70.00 121.60
-angle 13 75 75 70.00 130.70
-angle 39 75 47 35.00 120.00
-angle 39 75 75 35.00 130.70
-angle 47 75 75 70.00 106.30
-angle 38 76 38 63.00 120.00
-angle 38 76 46 70.00 124.00
-angle 38 76 72 63.00 120.00
-angle 38 76 73 63.00 120.00
-angle 38 76 74 63.00 120.00
-angle 38 76 76 63.00 120.00
-angle 38 76 77 63.00 120.00
-angle 38 76 78 63.00 120.00
-angle 46 76 76 70.00 124.00
-angle 2 77 74 70.00 125.00
-angle 3 77 74 70.00 130.00
-angle 13 77 50 70.00 128.60
-angle 13 77 74 70.00 125.00
-angle 36 77 50 35.00 126.80
-angle 36 77 74 35.00 126.80
-angle 39 77 50 35.00 120.00
-angle 39 77 74 35.00 125.70
-angle 39 77 77 35.00 127.50
-angle 50 77 74 85.00 106.40
-angle 50 77 77 70.00 107.30
-angle 72 77 74 70.00 110.40
-angle 74 77 74 70.00 103.80
-angle 74 77 76 70.00 125.70
-angle 74 77 77 70.00 107.30
-angle 74 77 78 70.00 103.80
-angle 76 77 77 70.00 127.50
-angle 13 78 51 70.00 118.90
-angle 19 78 51 70.00 118.90
-angle 38 78 39 35.00 128.60
-angle 39 78 51 35.00 118.90
-angle 51 78 77 70.00 111.90
-angle 4 79 80 80.00 134.00
-angle 4 79 81 80.00 134.00
-angle 80 79 81 70.00 91.00
-angle 13 80 79 55.00 127.00
-angle 13 80 81 50.00 126.00
-angle 79 80 81 50.00 94.00
-angle 13 81 36 35.00 114.30
-angle 13 81 81 37.50 117.20
-angle 16 81 36 37.50 108.00
-angle 16 81 80 55.00 109.00
-angle 16 81 81 55.00 128.00
-angle 33 81 36 35.00 114.30
-angle 33 81 81 37.50 117.20
-angle 35 81 36 35.00 108.00
-angle 35 81 79 70.00 117.00
-angle 35 81 81 37.50 126.00
-angle 36 81 36 35.00 114.30
-angle 36 81 37 35.00 109.50
-angle 36 81 79 37.50 110.00
-angle 36 81 80 35.00 111.00
-angle 36 81 81 37.50 117.20
-angle 37 81 81 63.00 114.00
-angle 79 81 81 63.00 85.00
-angle 80 81 81 80.00 89.00
-angle 81 81 81 30.00 79.20
-angle 13 85 13 172.80 120.00
-angle 13 85 36 144.00 120.00
-angle 13 91 34 35.00 109.50
-angle 13 91 38 50.00 120.50
-angle 34 91 34 43.60 106.40
-angle 34 91 38 50.00 112.50
-angle 13 92 93 80.00 117.50
-angle 38 92 93 80.00 117.50
-angle 93 92 93 80.00 125.00
-angle 23 93 23 10.00 109.50
-angle 23 93 92 10.00 109.50
-angle 13 94 13 45.00 109.50
-angle 3 95 10 70.00 117.60
-angle 3 95 13 70.00 117.60
-angle 3 95 34 35.00 119.20
-angle 3 95 37 70.00 121.60
-angle 3 95 41 70.00 117.60
-angle 6 95 50 70.00 125.80
-angle 6 95 52 70.00 128.80
-angle 10 95 50 70.00 125.80
-angle 10 95 52 70.00 128.80
-angle 13 95 37 70.00 121.20
-angle 13 95 50 70.00 125.80
-angle 13 95 52 70.00 128.80
-angle 34 95 37 35.00 119.20
-angle 34 95 50 30.00 125.80
-angle 34 95 52 30.00 128.80
-angle 37 95 41 70.00 121.20
-angle 41 95 50 70.00 125.80
-angle 41 95 52 70.00 128.80
-angle 50 95 52 70.00 105.40
-angle 4 96 35 20.00 109.50
-angle 35 96 35 20.00 109.50
-angle 3 97 13 50.00 121.90
-angle 13 97 13 50.00 118.00
-angle 1 98 13 35.00 110.50
-angle 13 98 13 60.00 110.00
-angle 13 98 29 60.00 100.00
-angle 13 98 30 35.00 110.50
-angle 13 98 34 35.00 110.50
-angle 13 98 36 35.00 110.50
-angle 13 98 55 35.00 110.50
-angle 13 98 56 35.00 110.50
-angle 13 98 98 50.00 112.00
-angle 29 98 29 60.00 110.00
-angle 34 98 34 35.00 109.50
-angle 36 98 36 35.00 109.50
-angle 13 99 40 70.00 124.00
-angle 13 99 99 70.00 124.00
-angle 36 99 38 35.00 123.30
-angle 36 99 40 35.00 120.00
-angle 36 99 99 35.00 120.00
-angle 38 99 99 85.00 117.00
-angle 40 99 99 70.00 124.00
-angle 4 100 37 160.00 180.00
-angle 37 100 37 160.00 180.00
-
-
- #####################################
- ## ##
- ## Improper Torsional Parameters ##
- ## ##
- #####################################
-
-
-imptors 0 0 3 4 21.000 180.0 2
-imptors 0 0 3 42 21.000 180.0 2
-imptors 0 0 35 0 5.000 180.0 2
-imptors 0 0 37 0 30.000 180.0 2
-imptors 0 0 38 0 5.000 180.0 2
-
-
- ############################
- ## ##
- ## Torsional Parameters ##
- ## ##
- ############################
-
-
- ###################################################################
- ## ##
- ## Alternative Torsional Parameter Values for Use with OPLS-AA ##
- ## ##
- ## For some torsions, OPLS-AA has multiple possible parameter ##
- ## values; the list below shows functional groups for which ##
- ## these alternate (commented) values should be preferred; the ##
- ## values are in the same order as in the full parameter list ##
- ## ##
- ## 4 3 3 36 generic (default) ##
- ## 4 3 3 36 dicarbonyls ##
- ## 36 3 3 36 hydrocarbon (default) ##
- ## 36 3 3 36 dicarbonyls ##
- ## 13 3 5 7 carboxylic acid (default) ##
- ## 13 3 5 7 1,2-diacid monoanion ##
- ## 4 3 13 13 peptide (default) ##
- ## 4 3 13 13 propanamide ##
- ## 4 3 13 13 carboxylic acid ##
- ## 4 3 13 13 dicarboxylic acid ##
- ## 4 3 13 13 aldyhyde, ketone, acyl halide ##
- ## 4 3 13 13 1,2-diacid monoanion ##
- ## 5 3 13 13 carboxylic acid (default) ##
- ## 5 3 13 13 dicarboxylic acid ##
- ## 35 3 13 13 peptide psi' (default) ##
- ## 35 3 13 13 propanamide ##
- ## 35 3 13 13 beta-3-peptide, last psi ##
- ## 4 3 29 13 esters (default) ##
- ## 4 3 29 13 benzoic esters ##
- ## 7 5 13 13 alcohols (default) ##
- ## 7 5 13 13 trifluoroethanol ##
- ## 7 5 13 13 hexopyranoses ##
- ## 7 5 13 36 alcohols (default) ##
- ## 7 5 13 36 axial cyclohexanol ##
- ## 7 5 13 36 trifluoroethanol ##
- ## 0 13 13 13 alcohols, ethers (default) ##
- ## 0 13 13 13 hexopyranoses ##
- ## 3 13 13 3 dicarboxylic acid (default) ##
- ## 3 13 13 3 1,2-diacid monoanion ##
- ## 3 13 13 13 butanamide (default) ##
- ## 3 13 13 13 carboxylate ion ##
- ## 3 13 13 13 aldyhyde, ketone, acyl halide ##
- ## 3 13 13 36 all carbonyls (default) ##
- ## 3 13 13 36 dicarboxylic acid ##
- ## 3 13 13 36 aldehyde, ketone, acyl halide ##
- ## 5 13 13 5 diols only (default) ##
- ## 5 13 13 5 triols only ##
- ## 5 13 13 5 hexopyranoses ##
- ## 13 13 13 13 hydrocarbon (default) ##
- ## 13 13 13 13 perfluoroalkane ##
- ## 13 13 13 35 peptide chi-1 (default) ##
- ## 13 13 13 35 N-propylformamide ##
- ## 36 13 13 69 generic (default) ##
- ## 36 13 13 69 sulfone ##
- ## 13 13 33 13 amine (default) ##
- ## 13 13 33 13 exocyclic amine ##
- ## 13 13 33 13 exocyclic 1,4-diamine ##
- ## 13 13 33 34 amine (default) ##
- ## 13 13 33 34 azetidine, 4-ring ##
- ## 13 13 33 34 pyrrolidine, 5-ring ##
- ## 13 13 33 34 cyclic amine ##
- ## 13 13 33 34 cyclic 1,4-diamine ##
- ## 13 13 35 3 peptide phi' (default) ##
- ## 13 13 35 3 N-ethylformamide ##
- ## 13 13 35 3 beta-3-peptide, first theta tors ##
- ## 13 13 35 13 proline, CD-N-CA-CB (default) ##
- ## 13 13 35 13 proline, CG-CD-N-CA ##
- ## 36 13 35 3 peptide phi'' (default) ##
- ## 36 13 35 3 N-methylformamide ##
- ## 13 13 47 0 imidazole, indole, purine (default) ##
- ## 13 13 47 0 nucleoside chi ##
- ## 13 13 47 52 nucleoside (default) ##
- ## 13 13 47 52 imidazole, indole, purine ##
- ## 29 13 47 0 imidazole, indole, purine (default) ##
- ## 29 13 47 0 nucleoside chi ##
- ## 29 13 95 52 nucleoside (default) ##
- ## 29 13 95 52 imidazole, indole, purine ##
- ## 13 13 97 13 generic (default) ##
- ## 13 13 97 13 generic ##
- ## 17 15 38 0 aromatic thiol (default) ##
- ## 17 15 38 0 aromatic thiol, N-C-S-H ##
- ## 13 29 54 42 phosphonates (default) ##
- ## 13 29 54 42 dimethyl phosphate ##
- ## 34 35 72 16 diaryl amine (default) ##
- ## 34 35 72 16 aniline-like ##
- ## 34 35 72 29 diaryl amine (default) ##
- ## 34 35 72 29 aniline-like ##
- ## 13 40 40 37 diene (default) ##
- ## 13 40 40 37 2-methyl-1,3-butadiene ##
- ## 0 46 72 0 generic (default) ##
- ## 0 46 72 0 generic ##
- ## 0 47 72 0 generic (default) ##
- ## 0 47 72 0 generic ##
- ## 0 47 74 0 generic (default) ##
- ## 0 47 74 0 generic ##
- ## 0 47 74 0 generic ##
- ## 0 51 72 0 generic (default) ##
- ## 0 51 72 0 HA-CR-NB-?? or N?-CR-NB-?? ##
- ## 0 72 77 0 generic (default) ##
- ## 0 72 77 0 biphenyl-like, N-C-C-C ##
- ## ##
- ###################################################################
-
-
-torsion 0 2 2 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 0 2 2 6 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 1 2 2 2 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
-torsion 1 2 2 6 -2.000 0.0 1 0.700 180.0 2 3.000 0.0 3
-torsion 2 2 2 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 13 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 2 55 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
-torsion 6 2 2 6 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 6 2 2 55 -2.000 0.0 1 0.500 180.0 2 3.250 0.0 3
-torsion 10 2 2 10 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
-torsion 6 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
-torsion 10 2 5 7 0.300 0.0 1 0.000 180.0 2 1.300 0.0 3
-torsion 0 2 10 2 -2.500 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 10 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 2 2 13 2 -3.400 0.0 1 1.250 180.0 2 3.100 0.0 3
-torsion 6 2 29 2 -7.400 0.0 1 3.000 180.0 2 1.800 0.0 3
-torsion 6 2 29 6 -8.400 0.0 1 3.000 180.0 2 1.800 0.0 3
-torsion 4 3 3 4 1.600 0.0 1 3.200 180.0 2 0.000 0.0 3
-torsion 4 3 3 13 0.000 0.0 1 0.500 180.0 2 0.000 0.0 3
-torsion 4 3 3 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 3 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 4 3 3 36 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 13 3 3 13 0.700 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 13 3 3 35 -0.500 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 13 3 3 36 0.800 0.0 1 -0.760 180.0 2 0.000 0.0 3
-torsion 35 3 3 36 -0.900 0.0 1 0.300 180.0 2 0.000 0.0 3
-torsion 36 3 3 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-#torsion 36 3 3 36 0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 3 5 7 3.000 0.0 1 5.500 180.0 2 0.000 0.0 3
-torsion 4 3 5 7 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 13 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
-#torsion 13 3 5 7 3.200 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 35 3 5 7 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 36 3 5 7 1.500 0.0 1 5.500 180.0 2 0.000 0.0 3
-torsion 38 3 5 7 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 1 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 3 3 13 36 0.000 0.0 1 0.000 180.0 2 0.085 0.0 3
-torsion 4 3 13 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 4 3 13 13 0.000 0.0 1 1.166 180.0 2 0.000 0.0 3
-#torsion 4 3 13 13 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
-#torsion 4 3 13 13 -0.750 0.0 1 -0.550 180.0 2 -0.250 0.0 3
-#torsion 4 3 13 13 -0.277 0.0 1 1.228 180.0 2 -0.694 0.0 3
-#torsion 4 3 13 13 -1.000 0.0 1 -1.900 180.0 2 -0.900 0.0 3
-torsion 4 3 13 30 -0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 33 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 4 3 13 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 13 38 0.000 0.0 1 0.546 180.0 2 0.000 0.0 3
-torsion 5 3 13 13 0.000 0.0 1 1.412 180.0 2 0.000 0.0 3
-#torsion 5 3 13 13 1.000 0.0 1 0.546 180.0 2 0.450 0.0 3
-torsion 5 3 13 33 5.260 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 5 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 3 13 13 1.454 0.0 1 -0.144 180.0 2 -0.775 0.0 3
-torsion 13 3 13 36 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
-torsion 29 3 13 13 0.000 0.0 1 0.000 180.0 2 -0.553 0.0 3
-torsion 29 3 13 36 0.000 0.0 1 0.000 180.0 2 0.132 0.0 3
-torsion 30 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 35 3 13 13 1.173 0.0 1 0.189 180.0 2 -1.200 0.0 3
-#torsion 35 3 13 13 3.250 0.0 1 -0.402 180.0 2 -0.136 0.0 3
-#torsion 35 3 13 13 3.260 0.0 1 0.440 180.0 2 0.600 0.0 3
-torsion 35 3 13 30 0.650 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 3 13 35 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
-torsion 35 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 38 3 13 36 0.000 0.0 1 0.000 180.0 2 0.275 0.0 3
-torsion 42 3 13 13 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 42 3 13 33 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 42 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 55 3 13 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 55 3 13 36 0.000 0.0 1 0.000 180.0 2 0.360 0.0 3
-torsion 97 3 13 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 29 13 0.000 0.0 1 5.124 180.0 2 0.000 0.0 3
-#torsion 4 3 29 13 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 4 3 29 38 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 13 3 29 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
-torsion 13 3 29 38 1.500 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 35 3 29 13 -2.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 36 3 29 13 4.669 0.0 1 5.124 180.0 2 0.000 0.0 3
-torsion 38 3 29 13 4.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 3 3 35 13 0.400 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 3 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 3 35 5 0.000 0.0 1 6.603 180.0 2 0.000 0.0 3
-torsion 4 3 35 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 3 35 37 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 3 35 38 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 3 35 81 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 5 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 5 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 13 3 35 5 4.542 0.0 1 6.603 180.0 2 1.045 0.0 3
-torsion 13 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 13 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 13 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 29 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 29 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 35 3 35 3 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 35 3 35 13 4.600 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 36 3 35 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 36 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 37 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 38 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 38 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 38 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 38 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 74 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 74 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 74 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 77 3 35 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 77 3 35 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 77 3 35 74 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 77 3 35 77 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 0 3 37 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
-torsion 4 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 37 37 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 5 3 37 37 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 35 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 3 37 37 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 97 3 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 97 3 37 37 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 5 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 13 3 38 38 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 29 3 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 35 3 38 38 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 36 3 38 38 0.000 0.0 1 0.200 180.0 2 0.000 0.0 3
-torsion 0 3 40 13 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
-torsion 4 3 40 37 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 5 3 40 37 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 13 3 40 37 0.800 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 13 3 46 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 3 46 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 3 46 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 3 46 34 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 0 3 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
-torsion 4 3 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
-torsion 4 3 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 3 72 47 2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 4 3 72 51 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 72 3 72 47 -2.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 72 3 72 51 0.000 0.0 1 1.000 180.0 2 0.000 0.0 3
-torsion 4 3 74 29 -0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 4 3 74 77 0.750 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 74 3 74 29 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 74 3 74 77 0.000 0.0 1 1.500 180.0 2 0.000 0.0 3
-torsion 38 3 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 3 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 4 3 77 74 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 4 3 77 77 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 35 3 77 74 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 35 3 77 77 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 4 3 97 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 13 3 97 13 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 3 99 99 2.500 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 5 3 99 99 3.200 0.0 1 -3.000 180.0 2 0.000 0.0 3
-torsion 0 4 96 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 10 2 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
-torsion 7 5 10 6 0.300 0.0 1 0.000 180.0 2 0.500 0.0 3
-torsion 7 5 13 2 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
-torsion 7 5 13 6 0.000 0.0 1 0.000 180.0 2 0.200 0.0 3
-torsion 7 5 13 13 -0.356 0.0 1 -0.174 180.0 2 0.492 0.0 3
-#torsion 7 5 13 13 4.478 0.0 1 -2.175 180.0 2 0.000 0.0 3
-#torsion 7 5 13 13 2.674 0.0 1 -2.883 180.0 2 1.026 0.0 3
-torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.352 0.0 3
-#torsion 7 5 13 36 -2.589 0.0 1 -1.123 180.0 2 0.270 0.0 3
-#torsion 7 5 13 36 0.000 0.0 1 0.000 180.0 2 0.476 0.0 3
-torsion 7 5 13 37 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 13 38 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 13 40 -0.900 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 7 5 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 7 5 35 3 5.519 0.0 1 -6.700 180.0 2 0.581 0.0 3
-torsion 7 5 35 34 2.722 0.0 1 -5.154 180.0 2 0.000 0.0 3
-torsion 7 5 37 37 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
-torsion 7 5 38 38 0.000 0.0 1 1.682 180.0 2 0.000 0.0 3
-torsion 7 5 41 29 -1.257 0.0 1 -1.806 180.0 2 0.003 0.0 3
-torsion 7 5 46 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 7 5 54 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 54 5 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 69 13 -0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 69 32 0.750 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 7 5 69 38 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 13 3 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
-torsion 0 13 13 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-#torsion 0 13 13 13 -1.336 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 13 35 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
-torsion 1 13 13 1 -2.500 0.0 1 0.000 180.0 2 0.250 0.0 3
-torsion 1 13 13 5 0.000 0.0 1 0.000 180.0 2 0.540 0.0 3
-torsion 1 13 13 13 0.300 0.0 1 -0.400 180.0 2 0.400 0.0 3
-torsion 1 13 13 36 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 3 13 13 3 -0.550 0.0 1 0.000 180.0 2 1.000 0.0 3
-#torsion 3 13 13 3 0.800 0.0 1 0.000 180.0 2 0.900 0.0 3
-torsion 3 13 13 5 -6.180 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 13 13 -2.060 0.0 1 -0.313 180.0 2 0.315 0.0 3
-#torsion 3 13 13 13 -3.185 0.0 1 -0.825 180.0 2 0.493 0.0 3
-#torsion 3 13 13 13 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 15 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
-torsion 3 13 13 16 -4.344 0.0 1 -1.714 180.0 2 0.000 0.0 3
-torsion 3 13 13 35 -9.000 0.0 1 2.000 180.0 2 0.800 0.0 3
-torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.100 0.0 3
-#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 0.074 0.0 3
-#torsion 3 13 13 36 0.000 0.0 1 0.000 180.0 2 -0.076 0.0 3
-torsion 3 13 13 38 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 70 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 5 13 13 5 9.508 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 5 13 13 5 12.234 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 5 13 13 5 9.066 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 13 -1.552 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 29 4.319 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 33 8.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 5 13 13 35 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
-torsion 5 13 13 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 13 13 13 13 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
-#torsion 13 13 13 13 6.622 0. 1 0.948 180. 2 -1.388 0. 3 -2.118 180. 4
-torsion 13 13 13 15 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
-torsion 13 13 13 16 2.619 0.0 1 -0.620 180.0 2 0.258 0.0 3
-torsion 13 13 13 19 0.000 0.0 1 -0.650 180.0 2 0.000 0.0 3
-torsion 13 13 13 30 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 13 13 13 33 2.392 0.0 1 -0.674 180.0 2 0.550 0.0 3
-torsion 13 13 13 35 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-#torsion 13 13 13 35 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
-torsion 13 13 13 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-#the parameter was added because it did not exist.
-torsion 13 13 13 37 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-torsion 13 13 13 41 1.300 0.0 1 -0.050 180.0 2 0.200 0.0 3
-torsion 13 13 13 43 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
-torsion 13 13 13 55 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 13 13 13 56 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 13 13 13 69 1.262 0.0 1 -0.198 180.0 2 0.465 0.0 3
-torsion 13 13 13 97 1.964 0.0 1 0.000 180.0 2 0.659 0.0 3
-torsion 13 13 13 98 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 15 13 13 36 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
-torsion 16 13 13 36 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
-torsion 19 13 13 36 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
-torsion 29 13 13 29 -0.550 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 29 13 13 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 30 13 13 30 -0.250 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 13 13 33 2.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 13 13 36 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 33 13 13 33 11.035 0.0 1 -0.968 180.0 2 0.270 0.0 3
-torsion 33 13 13 36 -1.013 0.0 1 -0.709 180.0 2 0.473 0.0 3
-torsion 33 13 13 38 -0.800 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 13 13 36 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
-torsion 35 13 13 38 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 35 13 13 70 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 36 13 13 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 13 37 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
-torsion 36 13 13 38 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 41 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 13 43 0.000 0.0 1 0.000 180.0 2 0.384 0.0 3
-torsion 36 13 13 45 0.000 0.0 1 0.000 180.0 2 -0.582 0.0 3
-torsion 36 13 13 49 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 52 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 55 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 36 13 13 56 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.452 0.0 3
-#torsion 36 13 13 69 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 13 70 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 72 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 73 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 74 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 77 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 78 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 13 92 0.000 0.0 1 0.000 180.0 2 -0.225 0.0 3
-torsion 36 13 13 94 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 13 97 0.000 0.0 1 0.000 180.0 2 0.464 0.0 3
-torsion 36 13 13 98 0.000 0.0 1 0.000 180.0 2 0.450 0.0 3
-torsion 36 13 13 99 0.000 0.0 1 0.000 180.0 2 0.366 0.0 3
-torsion 38 13 13 43 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 98 13 13 98 5.200 0.0 1 -0.500 180.0 2 0.000 0.0 3
-torsion 13 13 15 17 -0.759 0.0 1 -0.282 180.0 2 0.680 0.0 3
-torsion 36 13 15 17 0.000 0.0 1 0.000 180.0 2 0.480 0.0 3
-torsion 13 13 16 13 0.925 0.0 1 -0.576 180.0 2 0.677 0.0 3
-torsion 13 13 16 16 1.941 0.0 1 -0.836 180.0 2 0.935 0.0 3
-torsion 36 13 16 13 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
-torsion 36 13 16 16 0.000 0.0 1 0.000 180.0 2 0.558 0.0 3
-torsion 36 13 16 38 0.000 0.0 1 0.000 180.0 2 0.647 0.0 3
-torsion 0 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 18 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 19 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 19 19 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 29 13 -0.521 0.0 1 -2.018 180.0 2 1.996 0.0 3
-torsion 46 13 29 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
-torsion 47 13 29 13 -0.500 0.0 1 -1.500 180.0 2 1.000 0.0 3
-torsion 13 13 29 3 -1.220 0.0 1 -0.126 180.0 2 0.422 0.0 3
-torsion 13 13 29 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
-torsion 13 13 29 54 -1.420 0.0 1 -0.620 180.0 2 0.100 0.0 3
-torsion 36 13 29 0 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 3 0.000 0.0 1 0.000 180.0 2 0.198 0.0 3
-torsion 36 13 29 37 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 38 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 41 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 36 13 29 54 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 13 33 13 0.416 0.0 1 -0.128 180.0 2 0.695 0.0 3
-#torsion 13 13 33 13 1.536 0.0 1 -0.128 180.0 2 0.695 0.0 3
-#torsion 13 13 33 13 1.464 0.0 1 -0.128 180.0 2 0.695 0.0 3
-torsion 13 13 33 34 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
-#torsion 13 13 33 34 0.000 0.0 1 4.000 180.0 2 0.000 0.0 3
-#torsion 13 13 33 34 0.200 0.0 1 -0.417 180.0 2 0.418 0.0 3
-#torsion 13 13 33 34 0.819 0.0 1 -0.417 180.0 2 0.418 0.0 3
-#torsion 13 13 33 34 1.522 0.0 1 -0.417 180.0 2 0.418 0.0 3
-torsion 36 13 33 13 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
-torsion 36 13 33 34 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 36 13 33 38 0.000 0.0 1 0.000 180.0 2 0.560 0.0 3
-torsion 0 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 35 3 -2.365 0.0 1 0.912 180.0 2 -0.850 0.0 3
-torsion 3 13 35 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
-torsion 3 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 35 3 0.000 0.0 1 0.462 180.0 2 0.000 0.0 3
-#torsion 13 13 35 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-#torsion 13 13 35 3 1.130 0.0 1 -1.420 180.0 2 0.440 0.0 3
-torsion 13 13 35 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
-#torsion 13 13 35 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
-torsion 13 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 35 49 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 35 69 2.929 0.0 1 -2.533 180.0 2 0.497 0.0 3
-torsion 13 13 35 81 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 36 13 35 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
-torsion 36 13 35 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 35 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 35 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 35 69 1.362 0.0 1 -1.457 180.0 2 0.149 0.0 3
-torsion 38 13 35 49 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 37 13 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-torsion 0 13 37 36 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 0 13 37 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 37 40 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 37 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 37 13 2.817 0.0 1 -0.169 180.0 2 0.543 0.0 3
-torsion 13 13 37 37 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 13 13 37 40 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 36 13 37 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 37 36 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
-torsion 36 13 37 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 37 40 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 37 100 0.000 0.0 1 0.000 180.0 2 -0.250 0.0 3
-torsion 37 13 37 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 37 13 37 36 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 0 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 38 38 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
-torsion 13 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 38 46 -0.500 0.0 1 0.500 180.0 2 -0.500 0.0 3
-torsion 30 13 38 38 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
-torsion 36 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 54 13 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 55 13 38 38 0.000 0.0 1 0.000 180.0 2 0.400 0.0 3
-torsion 0 13 40 37 0.500 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 40 40 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 36 13 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 40 40 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 13 40 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 13 13 41 0 1.711 0.0 1 -0.500 180.0 2 0.663 0.0 3
-torsion 13 13 41 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 41 29 0.000 0.0 1 0.000 180.0 2 0.468 0.0 3
-torsion 13 13 43 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
-torsion 13 13 43 34 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
-torsion 36 13 43 13 0.000 0.0 1 0.000 180.0 2 0.302 0.0 3
-torsion 36 13 43 34 0.000 0.0 1 0.000 180.0 2 0.261 0.0 3
-torsion 36 13 43 38 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 36 13 43 44 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 13 45 34 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
-torsion 13 13 45 38 1.829 0.0 1 0.243 180.0 2 -0.498 0.0 3
-torsion 13 13 45 44 -0.190 0.0 1 -0.417 180.0 2 0.418 0.0 3
-torsion 36 13 45 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 45 34 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 45 38 0.000 0.0 1 0.000 180.0 2 0.177 0.0 3
-torsion 13 13 46 18 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 47 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 47 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-#torsion 13 13 47 0 0.000 0.0 1 -0.576 180.0 2 0.000 0.0 3
-torsion 13 13 47 52 2.756 0.0 1 -0.872 180.0 2 -3.680 0.0 3
-#torsion 13 13 47 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 13 13 47 72 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 29 13 47 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-#torsion 29 13 47 0 0.000 0.0 1 -1.876 180.0 2 0.000 0.0 3
-torsion 29 13 47 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 29 13 47 72 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 13 13 49 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 49 46 0.000 0.0 1 0.500 180.0 2 -0.500 0.0 3
-torsion 36 13 49 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 52 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 52 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 54 29 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
-torsion 36 13 54 42 0.000 0.0 1 0.000 180.0 2 0.250 0.0 3
-torsion 38 13 54 29 2.250 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 38 13 54 42 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 69 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 69 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 69 5 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 69 13 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 69 32 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 36 13 69 38 0.000 0.0 1 0.000 180.0 2 0.350 0.0 3
-torsion 13 13 70 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 70 50 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 70 74 -0.714 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 70 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 70 50 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 70 74 0.000 0.0 1 0.000 180.0 2 -0.480 0.0 3
-torsion 13 13 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 72 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 73 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 73 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 74 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
-torsion 13 13 74 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 74 47 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
-torsion 30 13 74 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
-torsion 36 13 74 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 1 13 77 0 0.000 0.0 1 0.450 180.0 2 0.000 0.0 3
-torsion 13 13 77 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 30 13 77 0 0.000 0.0 1 -0.400 180.0 2 0.000 0.0 3
-torsion 36 13 77 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 78 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 78 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 80 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 81 81 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 13 85 13 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
-torsion 13 13 85 36 0.000 0.0 1 -1.000 180.0 2 0.000 0.0 3
-torsion 13 13 92 93 0.000 0.0 1 0.400 180.0 2 0.000 0.0 3
-torsion 36 13 92 93 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 94 13 1.000 0.0 1 -0.500 180.0 2 0.500 0.0 3
-torsion 36 13 94 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 0 13 95 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 95 0 1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 13 13 95 52 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 13 13 95 72 -1.000 0.0 1 -0.350 180.0 2 0.000 0.0 3
-torsion 29 13 95 0 1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 29 13 95 52 3.132 0.0 1 -1.491 180.0 2 2.744 0.0 3
-#torsion 29 13 95 52 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 29 13 95 72 -1.500 0.0 1 -1.500 180.0 2 0.000 0.0 3
-torsion 3 13 97 13 -1.737 0.0 1 1.251 180.0 2 -3.501 0.0 3
-torsion 13 13 97 3 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-torsion 13 13 97 13 4.753 0.0 1 -0.734 180.0 2 0.000 0.0 3
-#torsion 13 13 97 13 2.859 0.0 1 2.058 180.0 2 -11.266 0.0 3
-torsion 36 13 97 3 0.000 0.0 1 0.000 180.0 2 -0.139 0.0 3
-torsion 36 13 97 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 97 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 98 13 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 98 34 0.000 0.0 1 0.000 180.0 2 0.260 0.0 3
-torsion 36 13 98 13 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
-torsion 36 13 98 29 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 13 98 34 0.000 0.0 1 0.000 180.0 2 0.180 0.0 3
-torsion 13 13 99 99 0.346 0.0 1 0.405 180.0 2 -0.904 0.0 3
-torsion 36 13 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 13 99 36 0.000 0.0 1 0.000 180.0 2 0.318 0.0 3
-torsion 36 13 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 17 15 38 0 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-#torsion 17 15 38 0 -3.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 17 15 38 38 0.000 0.0 1 1.100 180.0 2 0.000 0.0 3
-torsion 13 16 16 13 0.000 0.0 1 -7.414 180.0 2 1.705 0.0 3
-torsion 13 16 38 38 0.000 0.0 1 0.600 180.0 2 0.000 0.0 3
-torsion 13 16 38 46 1.600 0.0 1 5.100 180.0 2 0.000 0.0 3
-torsion 13 16 49 46 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
-torsion 74 16 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 74 16 72 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 16 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 16 74 73 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 16 74 78 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 16 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 18 38 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 18 38 38 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 18 18 46 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 18 18 46 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 19 19 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 19 19 99 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 19 19 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 19 19 99 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 19 37 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 19 37 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 19 19 37 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 29 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 29 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 29 37 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
-torsion 13 29 37 36 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 13 29 37 37 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 13 29 37 40 -3.500 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 3 29 38 38 0.000 0.0 1 2.500 180.0 2 0.000 0.0 3
-torsion 13 29 38 38 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 13 29 38 46 0.400 0.0 1 5.500 180.0 2 0.000 0.0 3
-torsion 54 29 38 38 0.000 0.0 1 2.990 180.0 2 0.000 0.0 3
-torsion 13 29 41 5 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
-torsion 13 29 41 13 0.650 0.0 1 -0.250 180.0 2 0.670 0.0 3
-torsion 13 29 41 29 -0.375 0.0 1 -1.358 180.0 2 0.004 0.0 3
-torsion 13 29 41 36 0.000 0.0 1 0.000 180.0 2 0.760 0.0 3
-torsion 13 29 46 3 3.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 13 29 49 46 0.000 0.0 1 5.200 180.0 2 0.000 0.0 3
-torsion 0 29 54 42 0.000 0.0 1 0.000 180.0 2 0.562 0.0 3
-torsion 13 29 54 13 3.500 0.0 1 -3.300 180.0 2 1.500 0.0 3
-torsion 13 29 54 42 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-#torsion 13 29 54 42 0.900 0.0 1 -2.930 180.0 2 2.640 0.0 3
-torsion 38 29 54 4 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 74 29 72 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 29 74 78 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 74 29 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 74 29 74 77 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 98 29 98 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 98 29 98 29 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 33 33 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 33 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 34 33 33 34 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 33 38 38 -7.582 0.0 1 3.431 180.0 2 3.198 0.0 3
-torsion 34 33 38 38 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 49 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 72 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 74 33 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 33 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 33 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 33 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 33 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 0 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 3 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 13 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 49 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 72 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 74 35 38 38 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 0 35 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 35 49 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 34 35 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 35 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 35 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 35 69 38 2.074 0.0 1 -2.966 180.0 2 2.473 0.0 3
-torsion 34 35 69 38 1.671 0.0 1 -4.901 180.0 2 0.669 0.0 3
-torsion 13 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 35 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-#torsion 34 35 72 16 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 34 35 72 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-#torsion 34 35 72 29 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 34 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 72 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 72 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 0 35 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 74 74 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 34 35 74 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 35 74 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 74 16 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 35 74 29 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 3 35 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 37 35 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 37 35 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 35 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 35 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 35 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 35 81 79 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-torsion 3 35 81 81 -1.396 0.0 1 -0.427 180.0 2 0.000 0.0 3
-torsion 34 35 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 34 35 81 79 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 34 35 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 35 96 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 37 36 37 13 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 37 36 37 36 0.000 0.0 1 -8.000 180.0 2 0.000 0.0 3
-torsion 0 37 37 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 0 37 37 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 3 37 37 35 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 3 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 5 37 37 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 5 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 19 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 29 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 19 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 29 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 30 37 37 30 -1.600 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 30 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 37 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 37 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 38 38 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
-torsion 36 37 38 38 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 37 38 46 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 37 38 38 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 13 37 40 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 37 40 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 35 37 40 3 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 37 40 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 0 37 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 37 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 3 37 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 37 76 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 37 76 35 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 37 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 37 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 13 37 100 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 37 100 37 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 38 38 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 38 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 1 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 1 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 30 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 30 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 33 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 37 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 45 0.0 0. 1 1.62 180. 2 0.0 0. 3 -0.44 180. 4
-torsion 38 38 38 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 55 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 38 99 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 40 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 50 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 55 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 56 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 38 99 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 38 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 40 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 38 38 40 37 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 46 38 40 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 46 38 40 37 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 38 38 43 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 38 38 43 44 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 38 45 34 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 38 38 45 34 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
-torsion 45 38 45 13 0.000 0.0 1 7.936 180.0 2 0.000 0.0 3
-torsion 45 38 45 34 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
-torsion 50 38 45 34 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 0 38 46 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 38 50 0 0.000 0.0 1 7.000 180.0 2 0.000 0.0 3
-torsion 0 38 69 32 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 38 38 69 13 0.000 0.0 1 -0.900 180.0 2 0.000 0.0 3
-torsion 38 38 69 35 1.656 0.0 1 -0.768 180.0 2 -0.117 0.0 3
-torsion 38 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 76 46 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 76 46 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 38 78 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 46 38 91 13 0.000 0.0 1 3.651 180.0 2 0.000 0.0 3
-torsion 38 38 92 93 0.000 0.0 1 1.150 180.0 2 0.000 0.0 3
-torsion 38 38 99 13 0.205 0.0 1 -0.531 180.0 2 0.000 0.0 3
-torsion 38 38 99 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 38 38 99 99 1.241 0.0 1 3.353 180.0 2 -0.286 0.0 3
-torsion 0 40 40 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 3 40 40 3 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 40 40 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 40 40 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 40 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-#torsion 13 40 40 37 0.900 0.0 1 0.230 180.0 2 -0.505 0.0 3
-torsion 36 40 40 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 40 40 37 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 40 37 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
-torsion 13 40 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 13 40 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 36 40 99 13 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 40 99 36 0.000 0.0 1 0.000 180.0 2 0.300 0.0 3
-torsion 36 40 99 99 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 99 13 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 99 36 0.000 0.0 1 0.000 180.0 2 -0.372 0.0 3
-torsion 37 40 99 99 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
-torsion 13 43 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 38 43 72 51 0.000 0.0 1 2.100 180.0 2 0.000 0.0 3
-torsion 34 45 49 0 0.000 0.0 1 2.030 180.0 2 0.000 0.0 3
-torsion 13 46 46 13 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 13 46 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 46 46 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 49 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 49 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 46 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 46 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-#torsion 0 46 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 38 46 76 38 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 46 76 76 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 47 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 34 47 50 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 0 47 51 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 47 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 47 71 0 0.000 0.0 1 3.050 180.0 2 0.000 0.0 3
-torsion 0 47 72 0 0.000 0.0 1 4.650 180.0 2 0.000 0.0 3
-#torsion 0 47 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 47 72 39 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 34 47 72 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 0 47 74 0 0.000 0.0 1 2.800 180.0 2 0.000 0.0 3
-#torsion 0 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-#torsion 0 47 74 0 0.000 0.0 1 3.000 180.0 2 0.000 0.0 3
-torsion 34 47 74 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 51 47 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 74 47 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 50 50 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 50 51 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 50 70 0 0.000 0.0 1 3.350 180.0 2 0.000 0.0 3
-torsion 0 50 71 0 0.000 0.0 1 6.000 180.0 2 0.000 0.0 3
-torsion 0 50 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 50 77 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 50 50 77 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 51 51 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 52 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 72 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-#torsion 0 51 72 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 72 39 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 73 51 72 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 78 51 72 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 78 51 72 29 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 51 73 0 0.000 0.0 1 4.800 180.0 2 0.000 0.0 3
-torsion 72 51 73 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 51 73 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 51 74 0 0.000 0.0 1 10.000 180.0 2 0.000 0.0 3
-torsion 0 51 78 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 72 51 78 74 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 70 74 0 0.000 0.0 1 13.050 180.0 2 0.000 0.0 3
-torsion 0 72 74 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 16 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 29 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 47 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 51 72 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 72 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-#torsion 0 72 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 73 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 0 73 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 73 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 73 74 16 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 73 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 51 73 74 16 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 51 73 74 29 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 51 73 74 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 73 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 51 73 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 51 73 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 74 73 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 74 74 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 0 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 16 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 39 74 74 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 0 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 16 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 29 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 47 74 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 74 77 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 74 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 74 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 74 78 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 16 74 78 39 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-torsion 16 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 29 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 74 78 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 39 74 78 51 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 38 76 76 38 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 76 46 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 77 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 38 76 78 51 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 46 76 78 0 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 77 77 29 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 77 77 47 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 0 77 77 77 0.000 0.0 1 2.170 180.0 2 0.000 0.0 3
-torsion 39 77 77 39 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 4 79 80 13 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 79 80 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 4 79 80 38 0.000 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 4 79 80 81 0.000 0.0 1 20.000 180.0 2 0.000 0.0 3
-torsion 81 79 80 13 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 81 79 80 34 0.000 0.0 1 4.900 180.0 2 0.000 0.0 3
-torsion 81 79 80 38 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 81 79 80 81 2.300 0.0 1 6.089 180.0 2 0.000 0.0 3
-torsion 0 79 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 79 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 4 79 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 80 79 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 80 79 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 80 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 80 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 80 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 81 81 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 81 81 35 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 81 81 13 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 81 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 81 81 36 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 36 81 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 81 81 81 81 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 0 99 99 0 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 13 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 13 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 36 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 36 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 38 99 99 38 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 38 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 38 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 40 99 99 40 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 40 99 99 99 0.000 0.0 1 14.000 180.0 2 0.000 0.0 3
-torsion 99 99 99 99 1.423 0.0 1 4.055 180.0 2 0.858 0.0 3
-
-
- ################################################################
- ## ##
- ## Additional Torsional Parameter Values Used with OPLS-AA ##
- ## ##
- ## The torsions listed below were added to official OPLS-AA ##
- ## to complete the set needed for proteins; the values were ##
- ## obtained by analogy from the closest OPLS-AA torsions; ##
- ## most of the added values are for HIP or N-terminal AAs ##
- ## ##
- ################################################################
-
-
-torsion 35 3 13 43 1.816 0.0 1 1.222 180.0 2 1.581 0.0 3
-torsion 42 3 13 35 0.000 0.0 1 0.820 180.0 2 0.000 0.0 3
-torsion 3 13 13 43 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 13 73 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 74 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 3 13 13 75 -1.697 0.0 1 -0.456 180.0 2 0.585 0.0 3
-torsion 5 13 13 43 6.280 0.0 1 -1.467 180.0 2 2.030 0.0 3
-torsion 15 13 13 43 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
-torsion 16 13 13 43 1.428 0.0 1 0.086 180.0 2 0.029 0.0 3
-torsion 13 13 13 45 2.732 0.0 1 -0.229 180.0 2 0.485 0.0 3
-torsion 35 13 13 73 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 43 13 13 73 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 13 13 74 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 43 13 13 74 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 35 13 13 75 0.845 0.0 1 -0.962 180.0 2 0.713 0.0 3
-torsion 36 13 13 75 0.000 0.0 1 0.000 180.0 2 0.462 0.0 3
-torsion 43 13 13 75 1.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 3 13 43 13 1.438 0.0 1 -0.124 180.0 2 0.264 0.0 3
-torsion 3 13 43 44 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
-torsion 13 13 43 44 0.000 0.0 1 0.000 180.0 2 0.347 0.0 3
-torsion 36 13 45 44 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 75 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 13 13 75 47 1.700 0.0 1 -0.600 180.0 2 0.000 0.0 3
-torsion 36 13 75 0 0.000 0.0 1 0.000 180.0 2 0.000 0.0 3
-torsion 45 38 45 44 0.000 0.0 1 3.900 180.0 2 0.000 0.0 3
-torsion 0 38 71 0 0.000 0.0 1 7.250 180.0 2 0.000 0.0 3
-torsion 0 47 75 0 0.000 0.0 1 5.000 180.0 2 0.000 0.0 3
-torsion 0 75 75 0 0.000 0.0 1 10.750 180.0 2 0.000 0.0 3
-
-
- ########################################
- ## ##
- ## Atomic Partial Charge Parameters ##
- ## ##
- ########################################
-
-
-charge 1 -0.2200
-charge 2 0.2200
-charge 3 0.5500
-charge 4 -0.5000
-charge 5 -0.5800
-charge 6 0.0800
-charge 7 0.4500
-charge 8 0.0000
-charge 9 0.0000
-charge 10 0.0000
-charge 11 0.0000
-charge 12 0.0000
-charge 13 0.0000
-charge 14 0.0000
-charge 15 0.0000
-charge 16 0.0000
-charge 17 0.0000
-charge 18 0.0000
-charge 19 0.0000
-charge 20 -0.7000
-charge 21 0.4350
-charge 22 0.2650
-charge 23 0.2650
-charge 24 -0.4700
-charge 25 -0.4500
-charge 26 -0.4700
-charge 27 -0.3000
-charge 28 0.2350
-charge 29 0.2700
-charge 30 0.1800
-charge 31 0.1800
-charge 32 0.2350
-charge 33 0.2350
-charge 34 0.3000
-charge 35 0.3000
-charge 36 -0.4300
-charge 37 0.2800
-charge 38 0.1500
-charge 39 0.0000
-charge 40 0.2410
-charge 41 -0.2410
-charge 42 0.0000
-charge 43 0.0000
-charge 44 0.0000
-charge 45 0.0000
-charge 46 0.0000
-charge 47 0.0000
-charge 48 0.2650
-charge 49 0.2650
-charge 50 -0.5000
-charge 51 0.2500
-charge 52 0.2500
-charge 53 -0.8340
-charge 54 0.4170
-charge 55 0.0000
-charge 56 0.5200
-charge 57 -1.0400
-charge 58 -0.8220
-charge 59 0.4110
-charge 60 0.5000
-charge 61 -0.2500
-charge 62 0.4200
-charge 63 -0.1400
-charge 64 0.2480
-charge 65 -0.0620
-charge 66 0.1390
-charge 67 -0.4590
-charge 68 0.1600
-charge 69 -1.0200
-charge 70 0.3400
-charge 71 -0.5000
-charge 72 -0.5700
-charge 73 0.5000
-charge 74 0.2850
-charge 75 -0.8200
-charge 76 0.4100
-charge 77 -0.1800
-charge 78 -0.1200
-charge 79 -0.0600
-charge 80 -0.2400
-charge 81 0.0000
-charge 82 0.0600
-charge 83 0.0000
-charge 84 -0.1150
-charge 85 -0.2300
-charge 86 0.1150
-charge 87 -0.1150
-charge 88 0.1150
-charge 89 0.0000
-charge 90 -0.0650
-charge 91 -0.0050
-charge 92 -0.1150
-charge 93 -0.6830
-charge 94 0.4180
-charge 95 0.0400
-charge 96 0.1450
-charge 97 0.2050
-charge 98 0.2650
-charge 99 0.1263
-charge 100 0.5323
-
-
- ########################################
- ## ##
- ## Biopolymer Atom Type Conversions ##
- ## ##
- ########################################
-
-
-biotype 1 N "Glycine" 177
-biotype 2 CA "Glycine" 162
-biotype 3 C "Glycine" 174
-biotype 4 HN "Glycine" 180
-biotype 5 O "Glycine" 175
-biotype 6 HA "Glycine" 82
-biotype 7 N "Alanine" 177
-biotype 8 CA "Alanine" 163
-biotype 9 C "Alanine" 174
-biotype 10 HN "Alanine" 180
-biotype 11 O "Alanine" 175
-biotype 12 HA "Alanine" 82
-biotype 13 CB "Alanine" 77
-biotype 14 HB "Alanine" 82
-biotype 15 N "Valine" 177
-biotype 16 CA "Valine" 163
-biotype 17 C "Valine" 174
-biotype 18 HN "Valine" 180
-biotype 19 O "Valine" 175
-biotype 20 HA "Valine" 82
-biotype 21 CB "Valine" 79
-biotype 22 HB "Valine" 82
-biotype 23 CG1 "Valine" 77
-biotype 24 HG1 "Valine" 82
-biotype 25 CG2 "Valine" 77
-biotype 26 HG2 "Valine" 82
-biotype 27 N "Leucine" 177
-biotype 28 CA "Leucine" 163
-biotype 29 C "Leucine" 174
-biotype 30 HN "Leucine" 180
-biotype 31 O "Leucine" 175
-biotype 32 HA "Leucine" 82
-biotype 33 CB "Leucine" 78
-biotype 34 HB "Leucine" 82
-biotype 35 CG "Leucine" 79
-biotype 36 HG "Leucine" 82
-biotype 37 CD1 "Leucine" 77
-biotype 38 HD1 "Leucine" 82
-biotype 39 CD2 "Leucine" 77
-biotype 40 HD2 "Leucine" 82
-biotype 41 N "Isoleucine" 177
-biotype 42 CA "Isoleucine" 163
-biotype 43 C "Isoleucine" 174
-biotype 44 HN "Isoleucine" 180
-biotype 45 O "Isoleucine" 175
-biotype 46 HA "Isoleucine" 82
-biotype 47 CB "Isoleucine" 79
-biotype 48 HB "Isoleucine" 82
-biotype 49 CG1 "Isoleucine" 77
-biotype 50 HG1 "Isoleucine" 82
-biotype 51 CG2 "Isoleucine" 78
-biotype 52 HG2 "Isoleucine" 82
-biotype 53 CD "Isoleucine" 77
-biotype 54 HD "Isoleucine" 82
-biotype 55 N "Serine" 177
-biotype 56 CA "Serine" 163
-biotype 57 C "Serine" 174
-biotype 58 HN "Serine" 180
-biotype 59 O "Serine" 175
-biotype 60 HA "Serine" 82
-biotype 61 CB "Serine" 96
-biotype 62 HB "Serine" 82
-biotype 63 OG "Serine" 93
-biotype 64 HG "Serine" 94
-biotype 65 N "Threonine" 177
-biotype 66 CA "Threonine" 163
-biotype 67 C "Threonine" 174
-biotype 68 HN "Threonine" 180
-biotype 69 O "Threonine" 175
-biotype 70 HA "Threonine" 82
-biotype 71 CB "Threonine" 97
-biotype 72 HB "Threonine" 82
-biotype 73 OG1 "Threonine" 93
-biotype 74 HG1 "Threonine" 94
-biotype 75 CG2 "Threonine" 77
-biotype 76 HG2 "Threonine" 82
-biotype 77 N "Cysteine (SH)" 177
-biotype 78 CA "Cysteine (SH)" 163
-biotype 79 C "Cysteine (SH)" 174
-biotype 80 HN "Cysteine (SH)" 180
-biotype 81 O "Cysteine (SH)" 175
-biotype 82 HA "Cysteine (SH)" 82
-biotype 83 CB "Cysteine (SH)" 145
-biotype 84 HB "Cysteine (SH)" 82
-biotype 85 SG "Cysteine (SH)" 139
-biotype 86 HG "Cysteine (SH)" 143
-biotype 87 N "Cystine (SS)" 177
-biotype 88 CA "Cystine (SS)" 163
-biotype 89 C "Cystine (SS)" 174
-biotype 90 HN "Cystine (SS)" 180
-biotype 91 O "Cystine (SS)" 175
-biotype 92 HA "Cystine (SS)" 82
-biotype 93 CB "Cystine (SS)" 153
-biotype 94 HB "Cystine (SS)" 82
-biotype 95 SG "Cystine (SS)" 142
-biotype 96 N "Cysteine (S-)" -1
-biotype 97 CA "Cysteine (S-)" -1
-biotype 98 C "Cysteine (S-)" -1
-biotype 99 HN "Cysteine (S-)" -1
-biotype 100 O "Cysteine (S-)" -1
-biotype 101 HA "Cysteine (S-)" -1
-biotype 102 CB "Cysteine (S-)" -1
-biotype 103 HB "Cysteine (S-)" -1
-biotype 104 SG "Cysteine (S-)" -1
-biotype 105 N "Proline" 178
-biotype 106 CA "Proline" 185
-biotype 107 C "Proline" 174
-biotype 108 O "Proline" 175
-biotype 109 HA "Proline" 82
-biotype 110 CB "Proline" 78
-biotype 111 HB "Proline" 82
-biotype 112 CG "Proline" 78
-biotype 113 HG "Proline" 82
-biotype 114 CD "Proline" 184
-biotype 115 HD "Proline" 82
-biotype 116 N "Phenylalanine" 177
-biotype 117 CA "Phenylalanine" 163
-biotype 118 C "Phenylalanine" 174
-biotype 119 HN "Phenylalanine" 180
-biotype 120 O "Phenylalanine" 175
-biotype 121 HA "Phenylalanine" 82
-biotype 122 CB "Phenylalanine" 91
-biotype 123 HB "Phenylalanine" 82
-biotype 124 CG "Phenylalanine" 87
-biotype 125 CD "Phenylalanine" 87
-biotype 126 HD "Phenylalanine" 88
-biotype 127 CE "Phenylalanine" 87
-biotype 128 HE "Phenylalanine" 88
-biotype 129 CZ "Phenylalanine" 87
-biotype 130 HZ "Phenylalanine" 88
-biotype 131 N "Tyrosine" 177
-biotype 132 CA "Tyrosine" 163
-biotype 133 C "Tyrosine" 174
-biotype 134 HN "Tyrosine" 180
-biotype 135 O "Tyrosine" 175
-biotype 136 HA "Tyrosine" 82
-biotype 137 CB "Tyrosine" 91
-biotype 138 HB "Tyrosine" 82
-biotype 139 CG "Tyrosine" 87
-biotype 140 CD "Tyrosine" 87
-biotype 141 HD "Tyrosine" 88
-biotype 142 CE "Tyrosine" 87
-biotype 143 HE "Tyrosine" 88
-biotype 144 CZ "Tyrosine" 105
-biotype 145 OH "Tyrosine" 106
-biotype 146 HH "Tyrosine" 107
-biotype 147 N "Tyrosine (O-)" -1
-biotype 148 CA "Tyrosine (O-)" -1
-biotype 149 C "Tyrosine (O-)" -1
-biotype 150 HN "Tyrosine (O-)" -1
-biotype 151 O "Tyrosine (O-)" -1
-biotype 152 HA "Tyrosine (O-)" -1
-biotype 153 CB "Tyrosine (O-)" -1
-biotype 154 HB "Tyrosine (O-)" -1
-biotype 155 CG "Tyrosine (O-)" -1
-biotype 156 CD "Tyrosine (O-)" -1
-biotype 157 HD "Tyrosine (O-)" -1
-biotype 158 CE "Tyrosine (O-)" -1
-biotype 159 HE "Tyrosine (O-)" -1
-biotype 160 CZ "Tyrosine (O-)" -1
-biotype 161 OH "Tyrosine (O-)" -1
-biotype 162 N "Tryptophan" 177
-biotype 163 CA "Tryptophan" 163
-biotype 164 C "Tryptophan" 174
-biotype 165 HN "Tryptophan" 180
-biotype 166 O "Tryptophan" 175
-biotype 167 HA "Tryptophan" 82
-biotype 168 CB "Tryptophan" 78
-biotype 169 HB "Tryptophan" 82
-biotype 170 CG "Tryptophan" 438
-biotype 171 CD1 "Tryptophan" 452
-biotype 172 HD1 "Tryptophan" 88
-biotype 173 CD2 "Tryptophan" 439
-biotype 174 NE1 "Tryptophan" 441
-biotype 175 HE1 "Tryptophan" 442
-biotype 176 CE2 "Tryptophan" 440
-biotype 177 CE3 "Tryptophan" 87
-biotype 178 HE3 "Tryptophan" 88
-biotype 179 CZ2 "Tryptophan" 87
-biotype 180 HZ2 "Tryptophan" 88
-biotype 181 CZ3 "Tryptophan" 87
-biotype 182 HZ3 "Tryptophan" 88
-biotype 183 CH2 "Tryptophan" 87
-biotype 184 HH2 "Tryptophan" 88
-biotype 185 N "Histidine (+)" 177
-biotype 186 CA "Histidine (+)" 163
-biotype 187 C "Histidine (+)" 174
-biotype 188 HN "Histidine (+)" 180
-biotype 189 O "Histidine (+)" 175
-biotype 190 HA "Histidine (+)" 82
-biotype 191 CB "Histidine (+)" 443
-biotype 192 HB "Histidine (+)" 82
-biotype 193 CG "Histidine (+)" 448
-biotype 194 ND1 "Histidine (+)" 450
-biotype 195 HD1 "Histidine (+)" 451
-biotype 196 CD2 "Histidine (+)" 448
-biotype 197 HD2 "Histidine (+)" 88
-biotype 198 CE1 "Histidine (+)" 447
-biotype 199 HE1 "Histidine (+)" 88
-biotype 200 NE2 "Histidine (+)" 450
-biotype 201 HE2 "Histidine (+)" 451
-biotype 202 N "Histidine (HD)" 177
-biotype 203 CA "Histidine (HD)" 163
-biotype 204 C "Histidine (HD)" 174
-biotype 205 HN "Histidine (HD)" 180
-biotype 206 O "Histidine (HD)" 175
-biotype 207 HA "Histidine (HD)" 82
-biotype 208 CB "Histidine (HD)" 443
-biotype 209 HB "Histidine (HD)" 82
-biotype 210 CG "Histidine (HD)" 446
-biotype 211 ND1 "Histidine (HD)" 441
-biotype 212 HD1 "Histidine (HD)" 442
-biotype 213 CD2 "Histidine (HD)" 445
-biotype 214 HD2 "Histidine (HD)" 88
-biotype 215 CE1 "Histidine (HD)" 444
-biotype 216 HE1 "Histidine (HD)" 88
-biotype 217 NE2 "Histidine (HD)" 449
-biotype 218 N "Histidine (HE)" 177
-biotype 219 CA "Histidine (HE)" 163
-biotype 220 C "Histidine (HE)" 174
-biotype 221 HN "Histidine (HE)" 180
-biotype 222 O "Histidine (HE)" 175
-biotype 223 HA "Histidine (HE)" 82
-biotype 224 CB "Histidine (HE)" 443
-biotype 225 HB "Histidine (HE)" 82
-biotype 226 CG "Histidine (HE)" 445
-biotype 227 ND1 "Histidine (HE)" 449
-biotype 228 CD2 "Histidine (HE)" 446
-biotype 229 HD2 "Histidine (HE)" 88
-biotype 230 CE1 "Histidine (HE)" 444
-biotype 231 HE1 "Histidine (HE)" 88
-biotype 232 NE2 "Histidine (HE)" 441
-biotype 233 HE2 "Histidine (HE)" 442
-biotype 234 N "Aspartic Acid" 177
-biotype 235 CA "Aspartic Acid" 163
-biotype 236 C "Aspartic Acid" 174
-biotype 237 HN "Aspartic Acid" 180
-biotype 238 O "Aspartic Acid" 175
-biotype 239 HA "Aspartic Acid" 82
-biotype 240 CB "Aspartic Acid" 213
-biotype 241 HB "Aspartic Acid" 82
-biotype 242 CG "Aspartic Acid" 210
-biotype 243 OD "Aspartic Acid" 211
-biotype 244 N "Aspartic Acid (COOH)" -1
-biotype 245 CA "Aspartic Acid (COOH)" -1
-biotype 246 C "Aspartic Acid (COOH)" -1
-biotype 247 HN "Aspartic Acid (COOH)" -1
-biotype 248 O "Aspartic Acid (COOH)" -1
-biotype 249 HA "Aspartic Acid (COOH)" -1
-biotype 250 CB "Aspartic Acid (COOH)" -1
-biotype 251 HB "Aspartic Acid (COOH)" -1
-biotype 252 CG "Aspartic Acid (COOH)" -1
-biotype 253 OD1 "Aspartic Acid (COOH)" -1
-biotype 254 OD2 "Aspartic Acid (COOH)" -1
-biotype 255 HD2 "Aspartic Acid (COOH)" -1
-biotype 256 N "Asparagine" 177
-biotype 257 CA "Asparagine" 163
-biotype 258 C "Asparagine" 174
-biotype 259 HN "Asparagine" 180
-biotype 260 O "Asparagine" 175
-biotype 261 HA "Asparagine" 82
-biotype 262 CB "Asparagine" 78
-biotype 263 HB "Asparagine" 82
-biotype 264 CG "Asparagine" 174
-biotype 265 OD1 "Asparagine" 175
-biotype 266 ND2 "Asparagine" 176
-biotype 267 HD2 "Asparagine" 179
-biotype 268 N "Glutamic Acid" 177
-biotype 269 CA "Glutamic Acid" 163
-biotype 270 C "Glutamic Acid" 174
-biotype 271 HN "Glutamic Acid" 180
-biotype 272 O "Glutamic Acid" 175
-biotype 273 HA "Glutamic Acid" 82
-biotype 274 CB "Glutamic Acid" 78
-biotype 275 HB "Glutamic Acid" 82
-biotype 276 CG "Glutamic Acid" 213
-biotype 277 HG "Glutamic Acid" 82
-biotype 278 CD "Glutamic Acid" 210
-biotype 279 OE "Glutamic Acid" 211
-biotype 280 N "Glutamic Acid (COOH)" -1
-biotype 281 CA "Glutamic Acid (COOH)" -1
-biotype 282 C "Glutamic Acid (COOH)" -1
-biotype 283 HN "Glutamic Acid (COOH)" -1
-biotype 284 O "Glutamic Acid (COOH)" -1
-biotype 285 HA "Glutamic Acid (COOH)" -1
-biotype 286 CB "Glutamic Acid (COOH)" -1
-biotype 287 HB "Glutamic Acid (COOH)" -1
-biotype 288 CG "Glutamic Acid (COOH)" -1
-biotype 289 HG "Glutamic Acid (COOH)" -1
-biotype 290 CD "Glutamic Acid (COOH)" -1
-biotype 291 OE1 "Glutamic Acid (COOH)" -1
-biotype 292 OE2 "Glutamic Acid (COOH)" -1
-biotype 293 HE2 "Glutamic Acid (COOH)" -1
-biotype 294 N "Glutamine" 177
-biotype 295 CA "Glutamine" 163
-biotype 296 C "Glutamine" 174
-biotype 297 HN "Glutamine" 180
-biotype 298 O "Glutamine" 175
-biotype 299 HA "Glutamine" 82
-biotype 300 CB "Glutamine" 78
-biotype 301 HB "Glutamine" 82
-biotype 302 CG "Glutamine" 78
-biotype 303 HG "Glutamine" 82
-biotype 304 CD "Glutamine" 174
-biotype 305 OE1 "Glutamine" 175
-biotype 306 NE2 "Glutamine" 176
-biotype 307 HE2 "Glutamine" 179
-biotype 308 N "Methionine" 177
-biotype 309 CA "Methionine" 163
-biotype 310 C "Methionine" 174
-biotype 311 HN "Methionine" 180
-biotype 312 O "Methionine" 175
-biotype 313 HA "Methionine" 82
-biotype 314 CB "Methionine" 78
-biotype 315 HB "Methionine" 82
-biotype 316 CG "Methionine" 149
-biotype 317 HG "Methionine" 82
-biotype 318 SD "Methionine" 141
-biotype 319 CE "Methionine" 148
-biotype 320 HE "Methionine" 82
-biotype 321 N "Lysine" 177
-biotype 322 CA "Lysine" 163
-biotype 323 C "Lysine" 174
-biotype 324 HN "Lysine" 180
-biotype 325 O "Lysine" 175
-biotype 326 HA "Lysine" 82
-biotype 327 CB "Lysine" 78
-biotype 328 HB "Lysine" 82
-biotype 329 CG "Lysine" 78
-biotype 330 HG "Lysine" 82
-biotype 331 CD "Lysine" 78
-biotype 332 HD "Lysine" 82
-biotype 333 CE "Lysine" 232
-biotype 334 HE "Lysine" 82
-biotype 335 NZ "Lysine" 227
-biotype 336 HZ "Lysine" 230
-biotype 337 N "Lysine (NH2)" -1
-biotype 338 CA "Lysine (NH2)" -1
-biotype 339 C "Lysine (NH2)" -1
-biotype 340 HN "Lysine (NH2)" -1
-biotype 341 O "Lysine (NH2)" -1
-biotype 342 HA "Lysine (NH2)" -1
-biotype 343 CB "Lysine (NH2)" -1
-biotype 344 HB "Lysine (NH2)" -1
-biotype 345 CG "Lysine (NH2)" -1
-biotype 346 HG "Lysine (NH2)" -1
-biotype 347 CD "Lysine (NH2)" -1
-biotype 348 HD "Lysine (NH2)" -1
-biotype 349 CE "Lysine (NH2)" -1
-biotype 350 HE "Lysine (NH2)" -1
-biotype 351 NZ "Lysine (NH2)" -1
-biotype 352 HZ "Lysine (NH2)" -1
-biotype 353 N "Arginine" 177
-biotype 354 CA "Arginine" 163
-biotype 355 C "Arginine" 174
-biotype 356 HN "Arginine" 180
-biotype 357 O "Arginine" 175
-biotype 358 HA "Arginine" 82
-biotype 359 CB "Arginine" 78
-biotype 360 HB "Arginine" 82
-biotype 361 CG "Arginine" 248
-biotype 362 HG "Arginine" 82
-biotype 363 CD "Arginine" 247
-biotype 364 HD "Arginine" 82
-biotype 365 NE "Arginine" 243
-biotype 366 HE "Arginine" 244
-biotype 367 CZ "Arginine" 242
-biotype 368 NH "Arginine" 240
-biotype 369 HH "Arginine" 241
-biotype 370 N "Ornithine" 177
-biotype 371 CA "Ornithine" 163
-biotype 372 C "Ornithine" 174
-biotype 373 HN "Ornithine" 180
-biotype 374 O "Ornithine" 175
-biotype 375 HA "Ornithine" 82
-biotype 376 CB "Ornithine" 78
-biotype 377 HB "Ornithine" 82
-biotype 378 CG "Ornithine" 78
-biotype 379 HG "Ornithine" 82
-biotype 380 CD "Ornithine" 232
-biotype 381 HD "Ornithine" 82
-biotype 382 NE "Ornithine" 227
-biotype 383 HE "Ornithine" 230
-biotype 384 N "MethylAlanine (AIB)" 177
-biotype 385 CA "MethylAlanine (AIB)" 164
-biotype 386 C "MethylAlanine (AIB)" 174
-biotype 387 HN "MethylAlanine (AIB)" 180
-biotype 388 O "MethylAlanine (AIB)" 175
-biotype 389 CB "MethylAlanine (AIB)" 77
-biotype 390 HB "MethylAlanine (AIB)" 82
-biotype 391 N "Pyroglutamic Acid" 177
-biotype 392 CA "Pyroglutamic Acid" 163
-biotype 393 C "Pyroglutamic Acid" 174
-biotype 394 HN "Pyroglutamic Acid" 180
-biotype 395 O "Pyroglutamic Acid" 175
-biotype 396 HA "Pyroglutamic Acid" 82
-biotype 397 CB "Pyroglutamic Acid" 78
-biotype 398 HB "Pyroglutamic Acid" 82
-biotype 399 CG "Pyroglutamic Acid" 213
-biotype 400 HG "Pyroglutamic Acid" 82
-biotype 401 CD "Pyroglutamic Acid" 174
-biotype 402 OE "Pyroglutamic Acid" 175
-biotype 403 C "Formyl N-Terminus" 174
-biotype 404 H "Formyl N-Terminus" 218
-biotype 405 O "Formyl N-Terminus" 175
-biotype 406 CH3 "Acetyl N-Terminus" 77
-biotype 407 H "Acetyl N-Terminus" 82
-biotype 408 C "Acetyl N-Terminus" 174
-biotype 409 O "Acetyl N-Terminus" 175
-biotype 410 N "Amide C-Terminus" 176
-biotype 411 HN "Amide C-Terminus" 179
-biotype 412 N "N-MeAmide C-Terminus" 177
-biotype 413 HN "N-MeAmide C-Terminus" 180
-biotype 414 CH3 "N-MeAmide C-Terminus" 181
-biotype 415 H "N-MeAmide C-Terminus" 82
-biotype 416 N "N-Terminal GLY" 227
-biotype 417 CA "N-Terminal GLY" 232
-biotype 418 C "N-Terminal GLY" 174
-biotype 419 HN "N-Terminal GLY" 230
-biotype 420 O "N-Terminal GLY" 175
-biotype 421 HA "N-Terminal GLY" 82
-biotype 422 N "N-Terminal ALA" 227
-biotype 423 CA "N-Terminal ALA" 233
-biotype 424 C "N-Terminal ALA" 174
-biotype 425 HN "N-Terminal ALA" 230
-biotype 426 O "N-Terminal ALA" 175
-biotype 427 HA "N-Terminal ALA" 82
-biotype 428 N "N-Terminal VAL" 227
-biotype 429 CA "N-Terminal VAL" 233
-biotype 430 C "N-Terminal VAL" 174
-biotype 431 HN "N-Terminal VAL" 230
-biotype 432 O "N-Terminal VAL" 175
-biotype 433 HA "N-Terminal VAL" 82
-biotype 434 N "N-Terminal LEU" 227
-biotype 435 CA "N-Terminal LEU" 233
-biotype 436 C "N-Terminal LEU" 174
-biotype 437 HN "N-Terminal LEU" 230
-biotype 438 O "N-Terminal LEU" 175
-biotype 439 HA "N-Terminal LEU" 82
-biotype 440 N "N-Terminal ILE" 227
-biotype 441 CA "N-Terminal ILE" 233
-biotype 442 C "N-Terminal ILE" 174
-biotype 443 HN "N-Terminal ILE" 230
-biotype 444 O "N-Terminal ILE" 175
-biotype 445 HA "N-Terminal ILE" 82
-biotype 446 N "N-Terminal SER" 227
-biotype 447 CA "N-Terminal SER" 233
-biotype 448 C "N-Terminal SER" 174
-biotype 449 HN "N-Terminal SER" 230
-biotype 450 O "N-Terminal SER" 175
-biotype 451 HA "N-Terminal SER" 82
-biotype 452 N "N-Terminal THR" 227
-biotype 453 CA "N-Terminal THR" 233
-biotype 454 C "N-Terminal THR" 174
-biotype 455 HN "N-Terminal THR" 230
-biotype 456 O "N-Terminal THR" 175
-biotype 457 HA "N-Terminal THR" 82
-biotype 458 N "N-Terminal CYS (SH)" 227
-biotype 459 CA "N-Terminal CYS (SH)" 233
-biotype 460 C "N-Terminal CYS (SH)" 174
-biotype 461 HN "N-Terminal CYS (SH)" 230
-biotype 462 O "N-Terminal CYS (SH)" 175
-biotype 463 HA "N-Terminal CYS (SH)" 82
-biotype 464 N "N-Terminal CYX (SS)" 227
-biotype 465 CA "N-Terminal CYX (SS)" 233
-biotype 466 C "N-Terminal CYX (SS)" 174
-biotype 467 HN "N-Terminal CYX (SS)" 230
-biotype 468 O "N-Terminal CYX (SS)" 175
-biotype 469 HA "N-Terminal CYX (SS)" 82
-biotype 470 N "N-Terminal CYD (S-)" -1
-biotype 471 CA "N-Terminal CYD (S-)" -1
-biotype 472 C "N-Terminal CYD (S-)" -1
-biotype 473 HN "N-Terminal CYD (S-)" -1
-biotype 474 O "N-Terminal CYD (S-)" -1
-biotype 475 HA "N-Terminal CYD (S-)" -1
-biotype 476 N "N-Terminal PRO" 249
-biotype 477 CA "N-Terminal PRO" 235
-biotype 478 C "N-Terminal PRO" 174
-biotype 479 HN "N-Terminal PRO" 250
-biotype 480 O "N-Terminal PRO" 175
-biotype 481 HA "N-Terminal PRO" 82
-biotype 482 CD "N-Terminal PRO" 236
-biotype 483 HD "N-Terminal PRO" 82
-biotype 484 N "N-Terminal PHE" 227
-biotype 485 CA "N-Terminal PHE" 233
-biotype 486 C "N-Terminal PHE" 174
-biotype 487 HN "N-Terminal PHE" 230
-biotype 488 O "N-Terminal PHE" 175
-biotype 489 HA "N-Terminal PHE" 82
-biotype 490 N "N-Terminal TYR" 227
-biotype 491 CA "N-Terminal TYR" 233
-biotype 492 C "N-Terminal TYR" 174
-biotype 493 HN "N-Terminal TYR" 230
-biotype 494 O "N-Terminal TYR" 175
-biotype 495 HA "N-Terminal TYR" 82
-biotype 496 N "N-Terminal TYD (O-)" -1
-biotype 497 CA "N-Terminal TYD (O-)" -1
-biotype 498 C "N-Terminal TYD (O-)" -1
-biotype 499 HN "N-Terminal TYD (O-)" -1
-biotype 500 O "N-Terminal TYD (O-)" -1
-biotype 501 HA "N-Terminal TYD (O-)" -1
-biotype 502 N "N-Terminal TRP" 227
-biotype 503 CA "N-Terminal TRP" 233
-biotype 504 C "N-Terminal TRP" 174
-biotype 505 HN "N-Terminal TRP" 230
-biotype 506 O "N-Terminal TRP" 175
-biotype 507 HA "N-Terminal TRP" 82
-biotype 508 N "N-Terminal HIS (+)" 227
-biotype 509 CA "N-Terminal HIS (+)" 233
-biotype 510 C "N-Terminal HIS (+)" 174
-biotype 511 HN "N-Terminal HIS (+)" 230
-biotype 512 O "N-Terminal HIS (+)" 175
-biotype 513 HA "N-Terminal HIS (+)" 82
-biotype 514 N "N-Terminal HIS (HD)" 227
-biotype 515 CA "N-Terminal HIS (HD)" 233
-biotype 516 C "N-Terminal HIS (HD)" 174
-biotype 517 HN "N-Terminal HIS (HD)" 230
-biotype 518 O "N-Terminal HIS (HD)" 175
-biotype 519 HA "N-Terminal HIS (HD)" 82
-biotype 520 N "N-Terminal HIS (HE)" 227
-biotype 521 CA "N-Terminal HIS (HE)" 233
-biotype 522 C "N-Terminal HIS (HE)" 174
-biotype 523 HN "N-Terminal HIS (HE)" 230
-biotype 524 O "N-Terminal HIS (HE)" 175
-biotype 525 HA "N-Terminal HIS (HE)" 82
-biotype 526 N "N-Terminal ASP" 227
-biotype 527 CA "N-Terminal ASP" 233
-biotype 528 C "N-Terminal ASP" 174
-biotype 529 HN "N-Terminal ASP" 230
-biotype 530 O "N-Terminal ASP" 175
-biotype 531 HA "N-Terminal ASP" 82
-biotype 532 N "N-Terminal ASH (COOH)" -1
-biotype 533 CA "N-Terminal ASH (COOH)" -1
-biotype 534 C "N-Terminal ASH (COOH)" -1
-biotype 535 HN "N-Terminal ASH (COOH)" -1
-biotype 536 O "N-Terminal ASH (COOH)" -1
-biotype 537 HA "N-Terminal ASH (COOH)" -1
-biotype 538 N "N-Terminal ASN" 227
-biotype 539 CA "N-Terminal ASN" 233
-biotype 540 C "N-Terminal ASN" 174
-biotype 541 HN "N-Terminal ASN" 230
-biotype 542 O "N-Terminal ASN" 175
-biotype 543 HA "N-Terminal ASN" 82
-biotype 544 N "N-Terminal GLU" 227
-biotype 545 CA "N-Terminal GLU" 233
-biotype 546 C "N-Terminal GLU" 174
-biotype 547 HN "N-Terminal GLU" 230
-biotype 548 O "N-Terminal GLU" 175
-biotype 549 HA "N-Terminal GLU" 82
-biotype 550 N "N-Terminal GLH (COOH)" -1
-biotype 551 CA "N-Terminal GLH (COOH)" -1
-biotype 552 C "N-Terminal GLH (COOH)" -1
-biotype 553 HN "N-Terminal GLH (COOH)" -1
-biotype 554 O "N-Terminal GLH (COOH)" -1
-biotype 555 HA "N-Terminal GLH (COOH)" -1
-biotype 556 N "N-Terminal GLN" 227
-biotype 557 CA "N-Terminal GLN" 233
-biotype 558 C "N-Terminal GLN" 174
-biotype 559 HN "N-Terminal GLN" 230
-biotype 560 O "N-Terminal GLN" 175
-biotype 561 HA "N-Terminal GLN" 82
-biotype 562 N "N-Terminal MET" 227
-biotype 563 CA "N-Terminal MET" 233
-biotype 564 C "N-Terminal MET" 174
-biotype 565 HN "N-Terminal MET" 230
-biotype 566 O "N-Terminal MET" 175
-biotype 567 HA "N-Terminal MET" 82
-biotype 568 N "N-Terminal LYS" 227
-biotype 569 CA "N-Terminal LYS" 233
-biotype 570 C "N-Terminal LYS" 174
-biotype 571 HN "N-Terminal LYS" 230
-biotype 572 O "N-Terminal LYS" 175
-biotype 573 HA "N-Terminal LYS" 82
-biotype 574 N "N-Terminal LYD (NH2)" -1
-biotype 575 CA "N-Terminal LYD (NH2)" -1
-biotype 576 C "N-Terminal LYD (NH2)" -1
-biotype 577 HN "N-Terminal LYD (NH2)" -1
-biotype 578 O "N-Terminal LYD (NH2)" -1
-biotype 579 HA "N-Terminal LYD (NH2)" -1
-biotype 580 N "N-Terminal ARG" 227
-biotype 581 CA "N-Terminal ARG" 233
-biotype 582 C "N-Terminal ARG" 174
-biotype 583 HN "N-Terminal ARG" 230
-biotype 584 O "N-Terminal ARG" 175
-biotype 585 HA "N-Terminal ARG" 82
-biotype 586 N "N-Terminal ORN" 227
-biotype 587 CA "N-Terminal ORN" 233
-biotype 588 C "N-Terminal ORN" 174
-biotype 589 HN "N-Terminal ORN" 230
-biotype 590 O "N-Terminal ORN" 175
-biotype 591 HA "N-Terminal ORN" 82
-biotype 592 N "N-Terminal AIB" 227
-biotype 593 CA "N-Terminal AIB" 234
-biotype 594 C "N-Terminal AIB" 174
-biotype 595 HN "N-Terminal AIB" 230
-biotype 596 O "N-Terminal AIB" 175
-biotype 597 N "C-Terminal GLY" 177
-biotype 598 CA "C-Terminal GLY" 223
-biotype 599 C "C-Terminal GLY" 210
-biotype 600 HN "C-Terminal GLY" 180
-biotype 601 OXT "C-Terminal GLY" 211
-biotype 602 HA "C-Terminal GLY" 82
-biotype 603 N "C-Terminal ALA" 177
-biotype 604 CA "C-Terminal ALA" 222
-biotype 605 C "C-Terminal ALA" 210
-biotype 606 HN "C-Terminal ALA" 180
-biotype 607 OXT "C-Terminal ALA" 211
-biotype 608 HA "C-Terminal ALA" 82
-biotype 609 N "C-Terminal VAL" 177
-biotype 610 CA "C-Terminal VAL" 222
-biotype 611 C "C-Terminal VAL" 210
-biotype 612 HN "C-Terminal VAL" 180
-biotype 613 OXT "C-Terminal VAL" 211
-biotype 614 HA "C-Terminal VAL" 82
-biotype 615 N "C-Terminal LEU" 177
-biotype 616 CA "C-Terminal LEU" 222
-biotype 617 C "C-Terminal LEU" 210
-biotype 618 HN "C-Terminal LEU" 180
-biotype 619 OXT "C-Terminal LEU" 211
-biotype 620 HA "C-Terminal LEU" 82
-biotype 621 N "C-Terminal ILE" 177
-biotype 622 CA "C-Terminal ILE" 222
-biotype 623 C "C-Terminal ILE" 210
-biotype 624 HN "C-Terminal ILE" 180
-biotype 625 OXT "C-Terminal ILE" 211
-biotype 626 HA "C-Terminal ILE" 82
-biotype 627 N "C-Terminal SER" 177
-biotype 628 CA "C-Terminal SER" 222
-biotype 629 C "C-Terminal SER" 210
-biotype 630 HN "C-Terminal SER" 180
-biotype 631 OXT "C-Terminal SER" 211
-biotype 632 HA "C-Terminal SER" 82
-biotype 633 N "C-Terminal THR" 177
-biotype 634 CA "C-Terminal THR" 222
-biotype 635 C "C-Terminal THR" 210
-biotype 636 HN "C-Terminal THR" 180
-biotype 637 OXT "C-Terminal THR" 211
-biotype 638 HA "C-Terminal THR" 82
-biotype 639 N "C-Terminal CYS (SH)" 177
-biotype 640 CA "C-Terminal CYS (SH)" 222
-biotype 641 C "C-Terminal CYS (SH)" 210
-biotype 642 HN "C-Terminal CYS (SH)" 180
-biotype 643 OXT "C-Terminal CYS (SH)" 211
-biotype 644 HA "C-Terminal CYS (SH)" 82
-biotype 645 N "C-Terminal CYX (SS)" 177
-biotype 646 CA "C-Terminal CYX (SS)" 222
-biotype 647 C "C-Terminal CYX (SS)" 210
-biotype 648 HN "C-Terminal CYX (SS)" 180
-biotype 649 OXT "C-Terminal CYX (SS)" 211
-biotype 650 HA "C-Terminal CYX (SS)" 82
-biotype 651 N "C-Terminal CYD (S-)" -1
-biotype 652 CA "C-Terminal CYD (S-)" -1
-biotype 653 C "C-Terminal CYD (S-)" -1
-biotype 654 HN "C-Terminal CYD (S-)" -1
-biotype 655 OXT "C-Terminal CYD (S-)" -1
-biotype 656 HA "C-Terminal CYD (S-)" -1
-biotype 657 N "C-Terminal PRO" 178
-biotype 658 CA "C-Terminal PRO" 225
-biotype 659 C "C-Terminal PRO" 210
-biotype 660 OXT "C-Terminal PRO" 211
-biotype 661 HA "C-Terminal PRO" 82
-biotype 662 N "C-Terminal PHE" 177
-biotype 663 CA "C-Terminal PHE" 222
-biotype 664 C "C-Terminal PHE" 210
-biotype 665 HN "C-Terminal PHE" 180
-biotype 666 OXT "C-Terminal PHE" 211
-biotype 667 HA "C-Terminal PHE" 82
-biotype 668 N "C-Terminal TYR" 177
-biotype 669 CA "C-Terminal TYR" 222
-biotype 670 C "C-Terminal TYR" 210
-biotype 671 HN "C-Terminal TYR" 180
-biotype 672 OXT "C-Terminal TYR" 211
-biotype 673 HA "C-Terminal TYR" 82
-biotype 674 N "C-Terminal TYD (O-)" -1
-biotype 675 CA "C-Terminal TYD (O-)" -1
-biotype 676 C "C-Terminal TYD (O-)" -1
-biotype 677 HN "C-Terminal TYD (O-)" -1
-biotype 678 OXT "C-Terminal TYD (O-)" -1
-biotype 679 HA "C-Terminal TYD (O-)" -1
-biotype 680 N "C-Terminal TRP" 177
-biotype 681 CA "C-Terminal TRP" 222
-biotype 682 C "C-Terminal TRP" 210
-biotype 683 HN "C-Terminal TRP" 180
-biotype 684 OXT "C-Terminal TRP" 211
-biotype 685 HA "C-Terminal TRP" 82
-biotype 686 N "C-Terminal HIS (+)" 177
-biotype 687 CA "C-Terminal HIS (+)" 222
-biotype 688 C "C-Terminal HIS (+)" 210
-biotype 689 HN "C-Terminal HIS (+)" 180
-biotype 690 OXT "C-Terminal HIS (+)" 211
-biotype 691 HA "C-Terminal HIS (+)" 82
-biotype 692 N "C-Terminal HIS (HD)" 177
-biotype 693 CA "C-Terminal HIS (HD)" 222
-biotype 694 C "C-Terminal HIS (HD)" 210
-biotype 695 HN "C-Terminal HIS (HD)" 180
-biotype 696 OXT "C-Terminal HIS (HD)" 211
-biotype 697 HA "C-Terminal HIS (HD)" 82
-biotype 698 N "C-Terminal HIS (HE)" 177
-biotype 699 CA "C-Terminal HIS (HE)" 222
-biotype 700 C "C-Terminal HIS (HE)" 210
-biotype 701 HN "C-Terminal HIS (HE)" 180
-biotype 702 OXT "C-Terminal HIS (HE)" 211
-biotype 703 HA "C-Terminal HIS (HE)" 82
-biotype 704 N "C-Terminal ASP" 177
-biotype 705 CA "C-Terminal ASP" 222
-biotype 706 C "C-Terminal ASP" 210
-biotype 707 HN "C-Terminal ASP" 180
-biotype 708 OXT "C-Terminal ASP" 211
-biotype 709 HA "C-Terminal ASP" 82
-biotype 710 N "C-Terminal ASH (COOH)" -1
-biotype 711 CA "C-Terminal ASH (COOH)" -1
-biotype 712 C "C-Terminal ASH (COOH)" -1
-biotype 713 HN "C-Terminal ASH (COOH)" -1
-biotype 714 OXT "C-Terminal ASH (COOH)" -1
-biotype 715 HA "C-Terminal ASH (COOH)" -1
-biotype 716 N "C-Terminal ASN" 177
-biotype 717 CA "C-Terminal ASN" 222
-biotype 718 C "C-Terminal ASN" 210
-biotype 719 HN "C-Terminal ASN" 180
-biotype 720 OXT "C-Terminal ASN" 211
-biotype 721 HA "C-Terminal ASN" 82
-biotype 722 N "C-Terminal GLU" 177
-biotype 723 CA "C-Terminal GLU" 222
-biotype 724 C "C-Terminal GLU" 210
-biotype 725 HN "C-Terminal GLU" 180
-biotype 726 OXT "C-Terminal GLU" 211
-biotype 727 HA "C-Terminal GLU" 82
-biotype 728 N "C-Terminal GLH (COOH)" -1
-biotype 729 CA "C-Terminal GLH (COOH)" -1
-biotype 730 C "C-Terminal GLH (COOH)" -1
-biotype 731 HN "C-Terminal GLH (COOH)" -1
-biotype 732 OXT "C-Terminal GLH (COOH)" -1
-biotype 733 HA "C-Terminal GLH (COOH)" -1
-biotype 734 N "C-Terminal GLN" 177
-biotype 735 CA "C-Terminal GLN" 222
-biotype 736 C "C-Terminal GLN" 210
-biotype 737 HN "C-Terminal GLN" 180
-biotype 738 OXT "C-Terminal GLN" 211
-biotype 739 HA "C-Terminal GLN" 82
-biotype 740 N "C-Terminal MET" 177
-biotype 741 CA "C-Terminal MET" 222
-biotype 742 C "C-Terminal MET" 210
-biotype 743 HN "C-Terminal MET" 180
-biotype 744 OXT "C-Terminal MET" 211
-biotype 745 HA "C-Terminal MET" 82
-biotype 746 N "C-Terminal LYS" 177
-biotype 747 CA "C-Terminal LYS" 222
-biotype 748 C "C-Terminal LYS" 210
-biotype 749 HN "C-Terminal LYS" 180
-biotype 750 OXT "C-Terminal LYS" 211
-biotype 751 HA "C-Terminal LYS" 82
-biotype 752 N "C-Terminal LYD (NH2)" -1
-biotype 753 CA "C-Terminal LYD (NH2)" -1
-biotype 754 C "C-Terminal LYD (NH2)" -1
-biotype 755 HN "C-Terminal LYD (NH2)" -1
-biotype 756 OXT "C-Terminal LYD (NH2)" -1
-biotype 757 HA "C-Terminal LYD (NH2)" -1
-biotype 758 N "C-Terminal ARG" 177
-biotype 759 CA "C-Terminal ARG" 222
-biotype 760 C "C-Terminal ARG" 210
-biotype 761 HN "C-Terminal ARG" 180
-biotype 762 OXT "C-Terminal ARG" 211
-biotype 763 HA "C-Terminal ARG" 82
-biotype 764 N "C-Terminal ORN" 177
-biotype 765 CA "C-Terminal ORN" 222
-biotype 766 C "C-Terminal ORN" 210
-biotype 767 HN "C-Terminal ORN" 180
-biotype 768 OXT "C-Terminal ORN" 211
-biotype 769 HA "C-Terminal ORN" 82
-biotype 770 N "C-Terminal AIB" 177
-biotype 771 CA "C-Terminal AIB" 224
-biotype 772 C "C-Terminal AIB" 210
-biotype 773 HN "C-Terminal AIB" 180
-biotype 774 OXT "C-Terminal AIB" 211
diff --git a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/system.lt b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/system.lt
index 297df69dc..9f577532e 100644
--- a/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/system.lt
+++ b/tools/moltemplate/examples/all_atom_examples/OPLSAA_force_field_examples/ethylene/moltemplate_files/system.lt
@@ -1,19 +1,19 @@
import "ethylene.lt" # <- defines the "Ethylene" molecule type.
# Periodic boundary conditions:
write_once("Data Boundary") {
0.0 70.00 xlo xhi
0.0 70.00 ylo yhi
0.0 70.00 zlo zhi
}
# The next command generates a cubic lattice with 10.0 Angstroms spacing.
# This lattice spacing was not chosen carefully.
# The pressure must be equilibrated later.
-isobutane = new Ethylene [7].move(0, 0, 10.0)
+ethylenes = new Ethylene [7].move(0, 0, 10.0)
[7].move(0, 10.0, 0)
[7].move(10.0, 0, 0)
diff --git a/tools/moltemplate/examples/all_atom_examples/convert_LAMMPS_to_LT_examples/cnad-cnt/cnt.lt b/tools/moltemplate/examples/all_atom_examples/convert_LAMMPS_to_LT_examples/cnad-cnt/cnt.lt
deleted file mode 100644
index 5f53579d6..000000000
--- a/tools/moltemplate/examples/all_atom_examples/convert_LAMMPS_to_LT_examples/cnad-cnt/cnt.lt
+++ /dev/null
@@ -1,779 +0,0 @@
-CNT {
-
-### LAMMPS commands for initialization
-### (These can be overridden later.)
-
-
- write_once("In Init") {
- units real
- atom_style full
- bond_style harmonic
- angle_style charmm
- dihedral_style charmm
- pair_style lj/charmm/coul/charmm 8.0 10.0
- pair_modify mix arithmetic
- special_bonds charmm
- }
-
- write_once("In Settings") {
- pair_coeff @atom:type1 @atom:type1 0.02 4.0
- }
-
-### DATA sections
-
-
- write_once("Data Masses") {
- @atom:type1 10.0
- }
-
- write_once("Data Bond Coeffs") {
- @bond:type1 2.0 1.4
- }
-
- write_once("Data Angle Coeffs") {
- @angle:type1 0 120.0 0 2.0
- }
-
- write_once("Data Dihedral Coeffs") {
- @dihedral:type1 0.0 2 180 1
- }
-
- write("Data Atoms") {
- $atom:id1 $mol:id2 @atom:type1 0.000000 12.345 10.000 4.328
- $atom:id2 $mol:id2 @atom:type1 0.000000 12.031 11.173 5.037
- $atom:id3 $mol:id2 @atom:type1 0.000000 12.031 11.173 6.455
- $atom:id4 $mol:id2 @atom:type1 0.000000 11.173 12.031 7.164
- $atom:id5 $mol:id2 @atom:type1 0.000000 11.173 12.031 4.328
- $atom:id6 $mol:id2 @atom:type1 0.000000 10.000 12.345 5.037
- $atom:id7 $mol:id2 @atom:type1 0.000000 10.000 12.345 6.455
- $atom:id8 $mol:id2 @atom:type1 0.000000 8.827 12.031 7.164
- $atom:id9 $mol:id2 @atom:type1 0.000000 8.827 12.031 4.328
- $atom:id10 $mol:id2 @atom:type1 0.000000 7.969 11.173 5.037
- $atom:id11 $mol:id2 @atom:type1 0.000000 7.969 11.173 6.455
- $atom:id12 $mol:id2 @atom:type1 0.000000 7.655 10.000 7.164
- $atom:id13 $mol:id2 @atom:type1 0.000000 7.655 10.000 4.328
- $atom:id14 $mol:id2 @atom:type1 0.000000 7.969 8.827 5.037
- $atom:id15 $mol:id2 @atom:type1 0.000000 7.969 8.827 6.455
- $atom:id16 $mol:id2 @atom:type1 0.000000 8.827 7.969 7.164
- $atom:id17 $mol:id2 @atom:type1 0.000000 8.827 7.969 4.328
- $atom:id18 $mol:id2 @atom:type1 0.000000 10.000 7.655 5.037
- $atom:id19 $mol:id2 @atom:type1 0.000000 10.000 7.655 6.455
- $atom:id20 $mol:id2 @atom:type1 0.000000 11.173 7.969 7.164
- $atom:id21 $mol:id2 @atom:type1 0.000000 11.173 7.969 4.328
- $atom:id22 $mol:id2 @atom:type1 0.000000 12.031 8.827 5.037
- $atom:id23 $mol:id2 @atom:type1 0.000000 12.031 8.827 6.455
- $atom:id24 $mol:id2 @atom:type1 0.000000 12.345 10.000 7.164
- $atom:id25 $mol:id2 @atom:type1 0.000000 12.345 10.000 8.582
- $atom:id26 $mol:id2 @atom:type1 0.000000 12.031 11.173 9.291
- $atom:id27 $mol:id2 @atom:type1 0.000000 12.031 11.173 10.709
- $atom:id28 $mol:id2 @atom:type1 0.000000 11.173 12.031 11.418
- $atom:id29 $mol:id2 @atom:type1 0.000000 11.173 12.031 8.582
- $atom:id30 $mol:id2 @atom:type1 0.000000 10.000 12.345 9.291
- $atom:id31 $mol:id2 @atom:type1 0.000000 10.000 12.345 10.709
- $atom:id32 $mol:id2 @atom:type1 0.000000 8.827 12.031 11.418
- $atom:id33 $mol:id2 @atom:type1 0.000000 8.827 12.031 8.582
- $atom:id34 $mol:id2 @atom:type1 0.000000 7.969 11.173 9.291
- $atom:id35 $mol:id2 @atom:type1 0.000000 7.969 11.173 10.709
- $atom:id36 $mol:id2 @atom:type1 0.000000 7.655 10.000 11.418
- $atom:id37 $mol:id2 @atom:type1 0.000000 7.655 10.000 8.582
- $atom:id38 $mol:id2 @atom:type1 0.000000 7.969 8.827 9.291
- $atom:id39 $mol:id2 @atom:type1 0.000000 7.969 8.827 10.709
- $atom:id40 $mol:id2 @atom:type1 0.000000 8.827 7.969 11.418
- $atom:id41 $mol:id2 @atom:type1 0.000000 8.827 7.969 8.582
- $atom:id42 $mol:id2 @atom:type1 0.000000 10.000 7.655 9.291
- $atom:id43 $mol:id2 @atom:type1 0.000000 10.000 7.655 10.709
- $atom:id44 $mol:id2 @atom:type1 0.000000 11.173 7.969 11.418
- $atom:id45 $mol:id2 @atom:type1 0.000000 11.173 7.969 8.582
- $atom:id46 $mol:id2 @atom:type1 0.000000 12.031 8.827 9.291
- $atom:id47 $mol:id2 @atom:type1 0.000000 12.031 8.827 10.709
- $atom:id48 $mol:id2 @atom:type1 0.000000 12.345 10.000 11.418
- $atom:id49 $mol:id2 @atom:type1 0.000000 12.345 10.000 12.836
- $atom:id50 $mol:id2 @atom:type1 0.000000 12.031 11.173 13.545
- $atom:id51 $mol:id2 @atom:type1 0.000000 12.031 11.173 14.963
- $atom:id52 $mol:id2 @atom:type1 0.000000 11.173 12.031 15.672
- $atom:id53 $mol:id2 @atom:type1 0.000000 11.173 12.031 12.836
- $atom:id54 $mol:id2 @atom:type1 0.000000 10.000 12.345 13.545
- $atom:id55 $mol:id2 @atom:type1 0.000000 10.000 12.345 14.963
- $atom:id56 $mol:id2 @atom:type1 0.000000 8.827 12.031 15.672
- $atom:id57 $mol:id2 @atom:type1 0.000000 8.827 12.031 12.836
- $atom:id58 $mol:id2 @atom:type1 0.000000 7.969 11.173 13.545
- $atom:id59 $mol:id2 @atom:type1 0.000000 7.969 11.173 14.963
- $atom:id60 $mol:id2 @atom:type1 0.000000 7.655 10.000 15.672
- $atom:id61 $mol:id2 @atom:type1 0.000000 7.655 10.000 12.836
- $atom:id62 $mol:id2 @atom:type1 0.000000 7.969 8.827 13.545
- $atom:id63 $mol:id2 @atom:type1 0.000000 7.969 8.827 14.963
- $atom:id64 $mol:id2 @atom:type1 0.000000 8.827 7.969 15.672
- $atom:id65 $mol:id2 @atom:type1 0.000000 8.827 7.969 12.836
- $atom:id66 $mol:id2 @atom:type1 0.000000 10.000 7.655 13.545
- $atom:id67 $mol:id2 @atom:type1 0.000000 10.000 7.655 14.963
- $atom:id68 $mol:id2 @atom:type1 0.000000 11.173 7.969 15.672
- $atom:id69 $mol:id2 @atom:type1 0.000000 11.173 7.969 12.836
- $atom:id70 $mol:id2 @atom:type1 0.000000 12.031 8.827 13.545
- $atom:id71 $mol:id2 @atom:type1 0.000000 12.031 8.827 14.963
- $atom:id72 $mol:id2 @atom:type1 0.000000 12.345 10.000 15.672
- }
-
- write("Data Bonds") {
- $bond:id1 @bond:type1 $atom:id1 $atom:id2
- $bond:id2 @bond:type1 $atom:id1 $atom:id22
- $bond:id3 @bond:type1 $atom:id2 $atom:id3
- $bond:id4 @bond:type1 $atom:id2 $atom:id5
- $bond:id5 @bond:type1 $atom:id3 $atom:id24
- $bond:id6 @bond:type1 $atom:id3 $atom:id4
- $bond:id7 @bond:type1 $atom:id4 $atom:id7
- $bond:id8 @bond:type1 $atom:id4 $atom:id29
- $bond:id9 @bond:type1 $atom:id5 $atom:id6
- $bond:id10 @bond:type1 $atom:id6 $atom:id7
- $bond:id11 @bond:type1 $atom:id6 $atom:id9
- $bond:id12 @bond:type1 $atom:id7 $atom:id8
- $bond:id13 @bond:type1 $atom:id8 $atom:id33
- $bond:id14 @bond:type1 $atom:id8 $atom:id11
- $bond:id15 @bond:type1 $atom:id9 $atom:id10
- $bond:id16 @bond:type1 $atom:id10 $atom:id13
- $bond:id17 @bond:type1 $atom:id10 $atom:id11
- $bond:id18 @bond:type1 $atom:id11 $atom:id12
- $bond:id19 @bond:type1 $atom:id12 $atom:id15
- $bond:id20 @bond:type1 $atom:id12 $atom:id37
- $bond:id21 @bond:type1 $atom:id13 $atom:id14
- $bond:id22 @bond:type1 $atom:id14 $atom:id17
- $bond:id23 @bond:type1 $atom:id14 $atom:id15
- $bond:id24 @bond:type1 $atom:id15 $atom:id16
- $bond:id25 @bond:type1 $atom:id16 $atom:id19
- $bond:id26 @bond:type1 $atom:id16 $atom:id41
- $bond:id27 @bond:type1 $atom:id17 $atom:id18
- $bond:id28 @bond:type1 $atom:id18 $atom:id21
- $bond:id29 @bond:type1 $atom:id18 $atom:id19
- $bond:id30 @bond:type1 $atom:id19 $atom:id20
- $bond:id31 @bond:type1 $atom:id20 $atom:id23
- $bond:id32 @bond:type1 $atom:id20 $atom:id45
- $bond:id33 @bond:type1 $atom:id21 $atom:id22
- $bond:id34 @bond:type1 $atom:id22 $atom:id23
- $bond:id35 @bond:type1 $atom:id23 $atom:id24
- $bond:id36 @bond:type1 $atom:id24 $atom:id25
- $bond:id37 @bond:type1 $atom:id25 $atom:id26
- $bond:id38 @bond:type1 $atom:id25 $atom:id46
- $bond:id39 @bond:type1 $atom:id26 $atom:id27
- $bond:id40 @bond:type1 $atom:id26 $atom:id29
- $bond:id41 @bond:type1 $atom:id27 $atom:id48
- $bond:id42 @bond:type1 $atom:id27 $atom:id28
- $bond:id43 @bond:type1 $atom:id28 $atom:id31
- $bond:id44 @bond:type1 $atom:id28 $atom:id53
- $bond:id45 @bond:type1 $atom:id29 $atom:id30
- $bond:id46 @bond:type1 $atom:id30 $atom:id31
- $bond:id47 @bond:type1 $atom:id30 $atom:id33
- $bond:id48 @bond:type1 $atom:id31 $atom:id32
- $bond:id49 @bond:type1 $atom:id32 $atom:id57
- $bond:id50 @bond:type1 $atom:id32 $atom:id35
- $bond:id51 @bond:type1 $atom:id33 $atom:id34
- $bond:id52 @bond:type1 $atom:id34 $atom:id37
- $bond:id53 @bond:type1 $atom:id34 $atom:id35
- $bond:id54 @bond:type1 $atom:id35 $atom:id36
- $bond:id55 @bond:type1 $atom:id36 $atom:id39
- $bond:id56 @bond:type1 $atom:id36 $atom:id61
- $bond:id57 @bond:type1 $atom:id37 $atom:id38
- $bond:id58 @bond:type1 $atom:id38 $atom:id41
- $bond:id59 @bond:type1 $atom:id38 $atom:id39
- $bond:id60 @bond:type1 $atom:id39 $atom:id40
- $bond:id61 @bond:type1 $atom:id40 $atom:id43
- $bond:id62 @bond:type1 $atom:id40 $atom:id65
- $bond:id63 @bond:type1 $atom:id41 $atom:id42
- $bond:id64 @bond:type1 $atom:id42 $atom:id45
- $bond:id65 @bond:type1 $atom:id42 $atom:id43
- $bond:id66 @bond:type1 $atom:id43 $atom:id44
- $bond:id67 @bond:type1 $atom:id44 $atom:id47
- $bond:id68 @bond:type1 $atom:id44 $atom:id69
- $bond:id69 @bond:type1 $atom:id45 $atom:id46
- $bond:id70 @bond:type1 $atom:id46 $atom:id47
- $bond:id71 @bond:type1 $atom:id47 $atom:id48
- $bond:id72 @bond:type1 $atom:id48 $atom:id49
- $bond:id73 @bond:type1 $atom:id49 $atom:id50
- $bond:id74 @bond:type1 $atom:id49 $atom:id70
- $bond:id75 @bond:type1 $atom:id50 $atom:id51
- $bond:id76 @bond:type1 $atom:id50 $atom:id53
- $bond:id77 @bond:type1 $atom:id51 $atom:id72
- $bond:id78 @bond:type1 $atom:id51 $atom:id52
- $bond:id79 @bond:type1 $atom:id52 $atom:id55
- $bond:id80 @bond:type1 $atom:id53 $atom:id54
- $bond:id81 @bond:type1 $atom:id54 $atom:id55
- $bond:id82 @bond:type1 $atom:id54 $atom:id57
- $bond:id83 @bond:type1 $atom:id55 $atom:id56
- $bond:id84 @bond:type1 $atom:id56 $atom:id59
- $bond:id85 @bond:type1 $atom:id57 $atom:id58
- $bond:id86 @bond:type1 $atom:id58 $atom:id61
- $bond:id87 @bond:type1 $atom:id58 $atom:id59
- $bond:id88 @bond:type1 $atom:id59 $atom:id60
- $bond:id89 @bond:type1 $atom:id60 $atom:id63
- $bond:id90 @bond:type1 $atom:id61 $atom:id62
- $bond:id91 @bond:type1 $atom:id62 $atom:id65
- $bond:id92 @bond:type1 $atom:id62 $atom:id63
- $bond:id93 @bond:type1 $atom:id63 $atom:id64
- $bond:id94 @bond:type1 $atom:id64 $atom:id67
- $bond:id95 @bond:type1 $atom:id65 $atom:id66
- $bond:id96 @bond:type1 $atom:id66 $atom:id69
- $bond:id97 @bond:type1 $atom:id66 $atom:id67
- $bond:id98 @bond:type1 $atom:id67 $atom:id68
- $bond:id99 @bond:type1 $atom:id68 $atom:id71
- $bond:id100 @bond:type1 $atom:id69 $atom:id70
- $bond:id101 @bond:type1 $atom:id70 $atom:id71
- $bond:id102 @bond:type1 $atom:id71 $atom:id72
- }
-
- write("Data Angles") {
- $angle:id1 @angle:type1 $atom:id2 $atom:id1 $atom:id22
- $angle:id2 @angle:type1 $atom:id1 $atom:id2 $atom:id3
- $angle:id3 @angle:type1 $atom:id1 $atom:id2 $atom:id5
- $angle:id4 @angle:type1 $atom:id3 $atom:id2 $atom:id5
- $angle:id5 @angle:type1 $atom:id2 $atom:id3 $atom:id24
- $angle:id6 @angle:type1 $atom:id2 $atom:id3 $atom:id4
- $angle:id7 @angle:type1 $atom:id4 $atom:id3 $atom:id24
- $angle:id8 @angle:type1 $atom:id3 $atom:id4 $atom:id7
- $angle:id9 @angle:type1 $atom:id3 $atom:id4 $atom:id29
- $angle:id10 @angle:type1 $atom:id7 $atom:id4 $atom:id29
- $angle:id11 @angle:type1 $atom:id2 $atom:id5 $atom:id6
- $angle:id12 @angle:type1 $atom:id5 $atom:id6 $atom:id7
- $angle:id13 @angle:type1 $atom:id5 $atom:id6 $atom:id9
- $angle:id14 @angle:type1 $atom:id7 $atom:id6 $atom:id9
- $angle:id15 @angle:type1 $atom:id4 $atom:id7 $atom:id6
- $angle:id16 @angle:type1 $atom:id4 $atom:id7 $atom:id8
- $angle:id17 @angle:type1 $atom:id6 $atom:id7 $atom:id8
- $angle:id18 @angle:type1 $atom:id7 $atom:id8 $atom:id33
- $angle:id19 @angle:type1 $atom:id7 $atom:id8 $atom:id11
- $angle:id20 @angle:type1 $atom:id11 $atom:id8 $atom:id33
- $angle:id21 @angle:type1 $atom:id6 $atom:id9 $atom:id10
- $angle:id22 @angle:type1 $atom:id9 $atom:id10 $atom:id13
- $angle:id23 @angle:type1 $atom:id9 $atom:id10 $atom:id11
- $angle:id24 @angle:type1 $atom:id11 $atom:id10 $atom:id13
- $angle:id25 @angle:type1 $atom:id8 $atom:id11 $atom:id10
- $angle:id26 @angle:type1 $atom:id8 $atom:id11 $atom:id12
- $angle:id27 @angle:type1 $atom:id10 $atom:id11 $atom:id12
- $angle:id28 @angle:type1 $atom:id11 $atom:id12 $atom:id15
- $angle:id29 @angle:type1 $atom:id11 $atom:id12 $atom:id37
- $angle:id30 @angle:type1 $atom:id15 $atom:id12 $atom:id37
- $angle:id31 @angle:type1 $atom:id10 $atom:id13 $atom:id14
- $angle:id32 @angle:type1 $atom:id13 $atom:id14 $atom:id17
- $angle:id33 @angle:type1 $atom:id13 $atom:id14 $atom:id15
- $angle:id34 @angle:type1 $atom:id15 $atom:id14 $atom:id17
- $angle:id35 @angle:type1 $atom:id12 $atom:id15 $atom:id14
- $angle:id36 @angle:type1 $atom:id12 $atom:id15 $atom:id16
- $angle:id37 @angle:type1 $atom:id14 $atom:id15 $atom:id16
- $angle:id38 @angle:type1 $atom:id15 $atom:id16 $atom:id19
- $angle:id39 @angle:type1 $atom:id15 $atom:id16 $atom:id41
- $angle:id40 @angle:type1 $atom:id19 $atom:id16 $atom:id41
- $angle:id41 @angle:type1 $atom:id14 $atom:id17 $atom:id18
- $angle:id42 @angle:type1 $atom:id17 $atom:id18 $atom:id21
- $angle:id43 @angle:type1 $atom:id17 $atom:id18 $atom:id19
- $angle:id44 @angle:type1 $atom:id19 $atom:id18 $atom:id21
- $angle:id45 @angle:type1 $atom:id16 $atom:id19 $atom:id18
- $angle:id46 @angle:type1 $atom:id16 $atom:id19 $atom:id20
- $angle:id47 @angle:type1 $atom:id18 $atom:id19 $atom:id20
- $angle:id48 @angle:type1 $atom:id19 $atom:id20 $atom:id23
- $angle:id49 @angle:type1 $atom:id19 $atom:id20 $atom:id45
- $angle:id50 @angle:type1 $atom:id23 $atom:id20 $atom:id45
- $angle:id51 @angle:type1 $atom:id18 $atom:id21 $atom:id22
- $angle:id52 @angle:type1 $atom:id1 $atom:id22 $atom:id21
- $angle:id53 @angle:type1 $atom:id1 $atom:id22 $atom:id23
- $angle:id54 @angle:type1 $atom:id21 $atom:id22 $atom:id23
- $angle:id55 @angle:type1 $atom:id20 $atom:id23 $atom:id22
- $angle:id56 @angle:type1 $atom:id20 $atom:id23 $atom:id24
- $angle:id57 @angle:type1 $atom:id22 $atom:id23 $atom:id24
- $angle:id58 @angle:type1 $atom:id3 $atom:id24 $atom:id23
- $angle:id59 @angle:type1 $atom:id3 $atom:id24 $atom:id25
- $angle:id60 @angle:type1 $atom:id23 $atom:id24 $atom:id25
- $angle:id61 @angle:type1 $atom:id24 $atom:id25 $atom:id26
- $angle:id62 @angle:type1 $atom:id24 $atom:id25 $atom:id46
- $angle:id63 @angle:type1 $atom:id26 $atom:id25 $atom:id46
- $angle:id64 @angle:type1 $atom:id25 $atom:id26 $atom:id27
- $angle:id65 @angle:type1 $atom:id25 $atom:id26 $atom:id29
- $angle:id66 @angle:type1 $atom:id27 $atom:id26 $atom:id29
- $angle:id67 @angle:type1 $atom:id26 $atom:id27 $atom:id48
- $angle:id68 @angle:type1 $atom:id26 $atom:id27 $atom:id28
- $angle:id69 @angle:type1 $atom:id28 $atom:id27 $atom:id48
- $angle:id70 @angle:type1 $atom:id27 $atom:id28 $atom:id31
- $angle:id71 @angle:type1 $atom:id27 $atom:id28 $atom:id53
- $angle:id72 @angle:type1 $atom:id31 $atom:id28 $atom:id53
- $angle:id73 @angle:type1 $atom:id4 $atom:id29 $atom:id26
- $angle:id74 @angle:type1 $atom:id4 $atom:id29 $atom:id30
- $angle:id75 @angle:type1 $atom:id26 $atom:id29 $atom:id30
- $angle:id76 @angle:type1 $atom:id29 $atom:id30 $atom:id31
- $angle:id77 @angle:type1 $atom:id29 $atom:id30 $atom:id33
- $angle:id78 @angle:type1 $atom:id31 $atom:id30 $atom:id33
- $angle:id79 @angle:type1 $atom:id28 $atom:id31 $atom:id30
- $angle:id80 @angle:type1 $atom:id28 $atom:id31 $atom:id32
- $angle:id81 @angle:type1 $atom:id30 $atom:id31 $atom:id32
- $angle:id82 @angle:type1 $atom:id31 $atom:id32 $atom:id57
- $angle:id83 @angle:type1 $atom:id31 $atom:id32 $atom:id35
- $angle:id84 @angle:type1 $atom:id35 $atom:id32 $atom:id57
- $angle:id85 @angle:type1 $atom:id8 $atom:id33 $atom:id30
- $angle:id86 @angle:type1 $atom:id8 $atom:id33 $atom:id34
- $angle:id87 @angle:type1 $atom:id30 $atom:id33 $atom:id34
- $angle:id88 @angle:type1 $atom:id33 $atom:id34 $atom:id37
- $angle:id89 @angle:type1 $atom:id33 $atom:id34 $atom:id35
- $angle:id90 @angle:type1 $atom:id35 $atom:id34 $atom:id37
- $angle:id91 @angle:type1 $atom:id32 $atom:id35 $atom:id34
- $angle:id92 @angle:type1 $atom:id32 $atom:id35 $atom:id36
- $angle:id93 @angle:type1 $atom:id34 $atom:id35 $atom:id36
- $angle:id94 @angle:type1 $atom:id35 $atom:id36 $atom:id39
- $angle:id95 @angle:type1 $atom:id35 $atom:id36 $atom:id61
- $angle:id96 @angle:type1 $atom:id39 $atom:id36 $atom:id61
- $angle:id97 @angle:type1 $atom:id12 $atom:id37 $atom:id34
- $angle:id98 @angle:type1 $atom:id12 $atom:id37 $atom:id38
- $angle:id99 @angle:type1 $atom:id34 $atom:id37 $atom:id38
- $angle:id100 @angle:type1 $atom:id37 $atom:id38 $atom:id41
- $angle:id101 @angle:type1 $atom:id37 $atom:id38 $atom:id39
- $angle:id102 @angle:type1 $atom:id39 $atom:id38 $atom:id41
- $angle:id103 @angle:type1 $atom:id36 $atom:id39 $atom:id38
- $angle:id104 @angle:type1 $atom:id36 $atom:id39 $atom:id40
- $angle:id105 @angle:type1 $atom:id38 $atom:id39 $atom:id40
- $angle:id106 @angle:type1 $atom:id39 $atom:id40 $atom:id43
- $angle:id107 @angle:type1 $atom:id39 $atom:id40 $atom:id65
- $angle:id108 @angle:type1 $atom:id43 $atom:id40 $atom:id65
- $angle:id109 @angle:type1 $atom:id16 $atom:id41 $atom:id38
- $angle:id110 @angle:type1 $atom:id16 $atom:id41 $atom:id42
- $angle:id111 @angle:type1 $atom:id38 $atom:id41 $atom:id42
- $angle:id112 @angle:type1 $atom:id41 $atom:id42 $atom:id45
- $angle:id113 @angle:type1 $atom:id41 $atom:id42 $atom:id43
- $angle:id114 @angle:type1 $atom:id43 $atom:id42 $atom:id45
- $angle:id115 @angle:type1 $atom:id40 $atom:id43 $atom:id42
- $angle:id116 @angle:type1 $atom:id40 $atom:id43 $atom:id44
- $angle:id117 @angle:type1 $atom:id42 $atom:id43 $atom:id44
- $angle:id118 @angle:type1 $atom:id43 $atom:id44 $atom:id47
- $angle:id119 @angle:type1 $atom:id43 $atom:id44 $atom:id69
- $angle:id120 @angle:type1 $atom:id47 $atom:id44 $atom:id69
- $angle:id121 @angle:type1 $atom:id20 $atom:id45 $atom:id42
- $angle:id122 @angle:type1 $atom:id20 $atom:id45 $atom:id46
- $angle:id123 @angle:type1 $atom:id42 $atom:id45 $atom:id46
- $angle:id124 @angle:type1 $atom:id25 $atom:id46 $atom:id45
- $angle:id125 @angle:type1 $atom:id25 $atom:id46 $atom:id47
- $angle:id126 @angle:type1 $atom:id45 $atom:id46 $atom:id47
- $angle:id127 @angle:type1 $atom:id44 $atom:id47 $atom:id46
- $angle:id128 @angle:type1 $atom:id44 $atom:id47 $atom:id48
- $angle:id129 @angle:type1 $atom:id46 $atom:id47 $atom:id48
- $angle:id130 @angle:type1 $atom:id27 $atom:id48 $atom:id47
- $angle:id131 @angle:type1 $atom:id27 $atom:id48 $atom:id49
- $angle:id132 @angle:type1 $atom:id47 $atom:id48 $atom:id49
- $angle:id133 @angle:type1 $atom:id48 $atom:id49 $atom:id50
- $angle:id134 @angle:type1 $atom:id48 $atom:id49 $atom:id70
- $angle:id135 @angle:type1 $atom:id50 $atom:id49 $atom:id70
- $angle:id136 @angle:type1 $atom:id49 $atom:id50 $atom:id51
- $angle:id137 @angle:type1 $atom:id49 $atom:id50 $atom:id53
- $angle:id138 @angle:type1 $atom:id51 $atom:id50 $atom:id53
- $angle:id139 @angle:type1 $atom:id50 $atom:id51 $atom:id72
- $angle:id140 @angle:type1 $atom:id50 $atom:id51 $atom:id52
- $angle:id141 @angle:type1 $atom:id52 $atom:id51 $atom:id72
- $angle:id142 @angle:type1 $atom:id51 $atom:id52 $atom:id55
- $angle:id143 @angle:type1 $atom:id28 $atom:id53 $atom:id50
- $angle:id144 @angle:type1 $atom:id28 $atom:id53 $atom:id54
- $angle:id145 @angle:type1 $atom:id50 $atom:id53 $atom:id54
- $angle:id146 @angle:type1 $atom:id53 $atom:id54 $atom:id55
- $angle:id147 @angle:type1 $atom:id53 $atom:id54 $atom:id57
- $angle:id148 @angle:type1 $atom:id55 $atom:id54 $atom:id57
- $angle:id149 @angle:type1 $atom:id52 $atom:id55 $atom:id54
- $angle:id150 @angle:type1 $atom:id52 $atom:id55 $atom:id56
- $angle:id151 @angle:type1 $atom:id54 $atom:id55 $atom:id56
- $angle:id152 @angle:type1 $atom:id55 $atom:id56 $atom:id59
- $angle:id153 @angle:type1 $atom:id32 $atom:id57 $atom:id54
- $angle:id154 @angle:type1 $atom:id32 $atom:id57 $atom:id58
- $angle:id155 @angle:type1 $atom:id54 $atom:id57 $atom:id58
- $angle:id156 @angle:type1 $atom:id57 $atom:id58 $atom:id61
- $angle:id157 @angle:type1 $atom:id57 $atom:id58 $atom:id59
- $angle:id158 @angle:type1 $atom:id59 $atom:id58 $atom:id61
- $angle:id159 @angle:type1 $atom:id56 $atom:id59 $atom:id58
- $angle:id160 @angle:type1 $atom:id56 $atom:id59 $atom:id60
- $angle:id161 @angle:type1 $atom:id58 $atom:id59 $atom:id60
- $angle:id162 @angle:type1 $atom:id59 $atom:id60 $atom:id63
- $angle:id163 @angle:type1 $atom:id36 $atom:id61 $atom:id58
- $angle:id164 @angle:type1 $atom:id36 $atom:id61 $atom:id62
- $angle:id165 @angle:type1 $atom:id58 $atom:id61 $atom:id62
- $angle:id166 @angle:type1 $atom:id61 $atom:id62 $atom:id65
- $angle:id167 @angle:type1 $atom:id61 $atom:id62 $atom:id63
- $angle:id168 @angle:type1 $atom:id63 $atom:id62 $atom:id65
- $angle:id169 @angle:type1 $atom:id60 $atom:id63 $atom:id62
- $angle:id170 @angle:type1 $atom:id60 $atom:id63 $atom:id64
- $angle:id171 @angle:type1 $atom:id62 $atom:id63 $atom:id64
- $angle:id172 @angle:type1 $atom:id63 $atom:id64 $atom:id67
- $angle:id173 @angle:type1 $atom:id40 $atom:id65 $atom:id62
- $angle:id174 @angle:type1 $atom:id40 $atom:id65 $atom:id66
- $angle:id175 @angle:type1 $atom:id62 $atom:id65 $atom:id66
- $angle:id176 @angle:type1 $atom:id65 $atom:id66 $atom:id69
- $angle:id177 @angle:type1 $atom:id65 $atom:id66 $atom:id67
- $angle:id178 @angle:type1 $atom:id67 $atom:id66 $atom:id69
- $angle:id179 @angle:type1 $atom:id64 $atom:id67 $atom:id66
- $angle:id180 @angle:type1 $atom:id64 $atom:id67 $atom:id68
- $angle:id181 @angle:type1 $atom:id66 $atom:id67 $atom:id68
- $angle:id182 @angle:type1 $atom:id67 $atom:id68 $atom:id71
- $angle:id183 @angle:type1 $atom:id44 $atom:id69 $atom:id66
- $angle:id184 @angle:type1 $atom:id44 $atom:id69 $atom:id70
- $angle:id185 @angle:type1 $atom:id66 $atom:id69 $atom:id70
- $angle:id186 @angle:type1 $atom:id49 $atom:id70 $atom:id69
- $angle:id187 @angle:type1 $atom:id49 $atom:id70 $atom:id71
- $angle:id188 @angle:type1 $atom:id69 $atom:id70 $atom:id71
- $angle:id189 @angle:type1 $atom:id68 $atom:id71 $atom:id70
- $angle:id190 @angle:type1 $atom:id68 $atom:id71 $atom:id72
- $angle:id191 @angle:type1 $atom:id70 $atom:id71 $atom:id72
- $angle:id192 @angle:type1 $atom:id51 $atom:id72 $atom:id71
- }
-
- write("Data Dihedrals") {
- $dihedral:id1 @dihedral:type1 $atom:id22 $atom:id1 $atom:id2 $atom:id3
- $dihedral:id2 @dihedral:type1 $atom:id22 $atom:id1 $atom:id2 $atom:id5
- $dihedral:id3 @dihedral:type1 $atom:id2 $atom:id1 $atom:id22 $atom:id21
- $dihedral:id4 @dihedral:type1 $atom:id2 $atom:id1 $atom:id22 $atom:id23
- $dihedral:id5 @dihedral:type1 $atom:id1 $atom:id2 $atom:id3 $atom:id24
- $dihedral:id6 @dihedral:type1 $atom:id1 $atom:id2 $atom:id3 $atom:id4
- $dihedral:id7 @dihedral:type1 $atom:id5 $atom:id2 $atom:id3 $atom:id24
- $dihedral:id8 @dihedral:type1 $atom:id5 $atom:id2 $atom:id3 $atom:id4
- $dihedral:id9 @dihedral:type1 $atom:id1 $atom:id2 $atom:id5 $atom:id6
- $dihedral:id10 @dihedral:type1 $atom:id3 $atom:id2 $atom:id5 $atom:id6
- $dihedral:id11 @dihedral:type1 $atom:id2 $atom:id3 $atom:id24 $atom:id23
- $dihedral:id12 @dihedral:type1 $atom:id2 $atom:id3 $atom:id24 $atom:id25
- $dihedral:id13 @dihedral:type1 $atom:id4 $atom:id3 $atom:id24 $atom:id23
- $dihedral:id14 @dihedral:type1 $atom:id4 $atom:id3 $atom:id24 $atom:id25
- $dihedral:id15 @dihedral:type1 $atom:id2 $atom:id3 $atom:id4 $atom:id7
- $dihedral:id16 @dihedral:type1 $atom:id2 $atom:id3 $atom:id4 $atom:id29
- $dihedral:id17 @dihedral:type1 $atom:id24 $atom:id3 $atom:id4 $atom:id7
- $dihedral:id18 @dihedral:type1 $atom:id24 $atom:id3 $atom:id4 $atom:id29
- $dihedral:id19 @dihedral:type1 $atom:id3 $atom:id4 $atom:id7 $atom:id6
- $dihedral:id20 @dihedral:type1 $atom:id3 $atom:id4 $atom:id7 $atom:id8
- $dihedral:id21 @dihedral:type1 $atom:id29 $atom:id4 $atom:id7 $atom:id6
- $dihedral:id22 @dihedral:type1 $atom:id29 $atom:id4 $atom:id7 $atom:id8
- $dihedral:id23 @dihedral:type1 $atom:id3 $atom:id4 $atom:id29 $atom:id26
- $dihedral:id24 @dihedral:type1 $atom:id3 $atom:id4 $atom:id29 $atom:id30
- $dihedral:id25 @dihedral:type1 $atom:id7 $atom:id4 $atom:id29 $atom:id26
- $dihedral:id26 @dihedral:type1 $atom:id7 $atom:id4 $atom:id29 $atom:id30
- $dihedral:id27 @dihedral:type1 $atom:id2 $atom:id5 $atom:id6 $atom:id7
- $dihedral:id28 @dihedral:type1 $atom:id2 $atom:id5 $atom:id6 $atom:id9
- $dihedral:id29 @dihedral:type1 $atom:id5 $atom:id6 $atom:id7 $atom:id4
- $dihedral:id30 @dihedral:type1 $atom:id5 $atom:id6 $atom:id7 $atom:id8
- $dihedral:id31 @dihedral:type1 $atom:id9 $atom:id6 $atom:id7 $atom:id4
- $dihedral:id32 @dihedral:type1 $atom:id9 $atom:id6 $atom:id7 $atom:id8
- $dihedral:id33 @dihedral:type1 $atom:id5 $atom:id6 $atom:id9 $atom:id10
- $dihedral:id34 @dihedral:type1 $atom:id7 $atom:id6 $atom:id9 $atom:id10
- $dihedral:id35 @dihedral:type1 $atom:id4 $atom:id7 $atom:id8 $atom:id33
- $dihedral:id36 @dihedral:type1 $atom:id4 $atom:id7 $atom:id8 $atom:id11
- $dihedral:id37 @dihedral:type1 $atom:id6 $atom:id7 $atom:id8 $atom:id33
- $dihedral:id38 @dihedral:type1 $atom:id6 $atom:id7 $atom:id8 $atom:id11
- $dihedral:id39 @dihedral:type1 $atom:id7 $atom:id8 $atom:id33 $atom:id30
- $dihedral:id40 @dihedral:type1 $atom:id7 $atom:id8 $atom:id33 $atom:id34
- $dihedral:id41 @dihedral:type1 $atom:id11 $atom:id8 $atom:id33 $atom:id30
- $dihedral:id42 @dihedral:type1 $atom:id11 $atom:id8 $atom:id33 $atom:id34
- $dihedral:id43 @dihedral:type1 $atom:id7 $atom:id8 $atom:id11 $atom:id10
- $dihedral:id44 @dihedral:type1 $atom:id7 $atom:id8 $atom:id11 $atom:id12
- $dihedral:id45 @dihedral:type1 $atom:id33 $atom:id8 $atom:id11 $atom:id10
- $dihedral:id46 @dihedral:type1 $atom:id33 $atom:id8 $atom:id11 $atom:id12
- $dihedral:id47 @dihedral:type1 $atom:id6 $atom:id9 $atom:id10 $atom:id13
- $dihedral:id48 @dihedral:type1 $atom:id6 $atom:id9 $atom:id10 $atom:id11
- $dihedral:id49 @dihedral:type1 $atom:id9 $atom:id10 $atom:id13 $atom:id14
- $dihedral:id50 @dihedral:type1 $atom:id11 $atom:id10 $atom:id13 $atom:id14
- $dihedral:id51 @dihedral:type1 $atom:id9 $atom:id10 $atom:id11 $atom:id8
- $dihedral:id52 @dihedral:type1 $atom:id9 $atom:id10 $atom:id11 $atom:id12
- $dihedral:id53 @dihedral:type1 $atom:id13 $atom:id10 $atom:id11 $atom:id8
- $dihedral:id54 @dihedral:type1 $atom:id13 $atom:id10 $atom:id11 $atom:id12
- $dihedral:id55 @dihedral:type1 $atom:id8 $atom:id11 $atom:id12 $atom:id15
- $dihedral:id56 @dihedral:type1 $atom:id8 $atom:id11 $atom:id12 $atom:id37
- $dihedral:id57 @dihedral:type1 $atom:id10 $atom:id11 $atom:id12 $atom:id15
- $dihedral:id58 @dihedral:type1 $atom:id10 $atom:id11 $atom:id12 $atom:id37
- $dihedral:id59 @dihedral:type1 $atom:id11 $atom:id12 $atom:id15 $atom:id14
- $dihedral:id60 @dihedral:type1 $atom:id11 $atom:id12 $atom:id15 $atom:id16
- $dihedral:id61 @dihedral:type1 $atom:id37 $atom:id12 $atom:id15 $atom:id14
- $dihedral:id62 @dihedral:type1 $atom:id37 $atom:id12 $atom:id15 $atom:id16
- $dihedral:id63 @dihedral:type1 $atom:id11 $atom:id12 $atom:id37 $atom:id34
- $dihedral:id64 @dihedral:type1 $atom:id11 $atom:id12 $atom:id37 $atom:id38
- $dihedral:id65 @dihedral:type1 $atom:id15 $atom:id12 $atom:id37 $atom:id34
- $dihedral:id66 @dihedral:type1 $atom:id15 $atom:id12 $atom:id37 $atom:id38
- $dihedral:id67 @dihedral:type1 $atom:id10 $atom:id13 $atom:id14 $atom:id17
- $dihedral:id68 @dihedral:type1 $atom:id10 $atom:id13 $atom:id14 $atom:id15
- $dihedral:id69 @dihedral:type1 $atom:id13 $atom:id14 $atom:id17 $atom:id18
- $dihedral:id70 @dihedral:type1 $atom:id15 $atom:id14 $atom:id17 $atom:id18
- $dihedral:id71 @dihedral:type1 $atom:id13 $atom:id14 $atom:id15 $atom:id12
- $dihedral:id72 @dihedral:type1 $atom:id13 $atom:id14 $atom:id15 $atom:id16
- $dihedral:id73 @dihedral:type1 $atom:id17 $atom:id14 $atom:id15 $atom:id12
- $dihedral:id74 @dihedral:type1 $atom:id17 $atom:id14 $atom:id15 $atom:id16
- $dihedral:id75 @dihedral:type1 $atom:id12 $atom:id15 $atom:id16 $atom:id19
- $dihedral:id76 @dihedral:type1 $atom:id12 $atom:id15 $atom:id16 $atom:id41
- $dihedral:id77 @dihedral:type1 $atom:id14 $atom:id15 $atom:id16 $atom:id19
- $dihedral:id78 @dihedral:type1 $atom:id14 $atom:id15 $atom:id16 $atom:id41
- $dihedral:id79 @dihedral:type1 $atom:id15 $atom:id16 $atom:id19 $atom:id18
- $dihedral:id80 @dihedral:type1 $atom:id15 $atom:id16 $atom:id19 $atom:id20
- $dihedral:id81 @dihedral:type1 $atom:id41 $atom:id16 $atom:id19 $atom:id18
- $dihedral:id82 @dihedral:type1 $atom:id41 $atom:id16 $atom:id19 $atom:id20
- $dihedral:id83 @dihedral:type1 $atom:id15 $atom:id16 $atom:id41 $atom:id38
- $dihedral:id84 @dihedral:type1 $atom:id15 $atom:id16 $atom:id41 $atom:id42
- $dihedral:id85 @dihedral:type1 $atom:id19 $atom:id16 $atom:id41 $atom:id38
- $dihedral:id86 @dihedral:type1 $atom:id19 $atom:id16 $atom:id41 $atom:id42
- $dihedral:id87 @dihedral:type1 $atom:id14 $atom:id17 $atom:id18 $atom:id21
- $dihedral:id88 @dihedral:type1 $atom:id14 $atom:id17 $atom:id18 $atom:id19
- $dihedral:id89 @dihedral:type1 $atom:id17 $atom:id18 $atom:id21 $atom:id22
- $dihedral:id90 @dihedral:type1 $atom:id19 $atom:id18 $atom:id21 $atom:id22
- $dihedral:id91 @dihedral:type1 $atom:id17 $atom:id18 $atom:id19 $atom:id16
- $dihedral:id92 @dihedral:type1 $atom:id17 $atom:id18 $atom:id19 $atom:id20
- $dihedral:id93 @dihedral:type1 $atom:id21 $atom:id18 $atom:id19 $atom:id16
- $dihedral:id94 @dihedral:type1 $atom:id21 $atom:id18 $atom:id19 $atom:id20
- $dihedral:id95 @dihedral:type1 $atom:id16 $atom:id19 $atom:id20 $atom:id23
- $dihedral:id96 @dihedral:type1 $atom:id16 $atom:id19 $atom:id20 $atom:id45
- $dihedral:id97 @dihedral:type1 $atom:id18 $atom:id19 $atom:id20 $atom:id23
- $dihedral:id98 @dihedral:type1 $atom:id18 $atom:id19 $atom:id20 $atom:id45
- $dihedral:id99 @dihedral:type1 $atom:id19 $atom:id20 $atom:id23 $atom:id22
- $dihedral:id100 @dihedral:type1 $atom:id19 $atom:id20 $atom:id23 $atom:id24
- $dihedral:id101 @dihedral:type1 $atom:id45 $atom:id20 $atom:id23 $atom:id22
- $dihedral:id102 @dihedral:type1 $atom:id45 $atom:id20 $atom:id23 $atom:id24
- $dihedral:id103 @dihedral:type1 $atom:id19 $atom:id20 $atom:id45 $atom:id42
- $dihedral:id104 @dihedral:type1 $atom:id19 $atom:id20 $atom:id45 $atom:id46
- $dihedral:id105 @dihedral:type1 $atom:id23 $atom:id20 $atom:id45 $atom:id42
- $dihedral:id106 @dihedral:type1 $atom:id23 $atom:id20 $atom:id45 $atom:id46
- $dihedral:id107 @dihedral:type1 $atom:id18 $atom:id21 $atom:id22 $atom:id1
- $dihedral:id108 @dihedral:type1 $atom:id18 $atom:id21 $atom:id22 $atom:id23
- $dihedral:id109 @dihedral:type1 $atom:id1 $atom:id22 $atom:id23 $atom:id20
- $dihedral:id110 @dihedral:type1 $atom:id1 $atom:id22 $atom:id23 $atom:id24
- $dihedral:id111 @dihedral:type1 $atom:id21 $atom:id22 $atom:id23 $atom:id20
- $dihedral:id112 @dihedral:type1 $atom:id21 $atom:id22 $atom:id23 $atom:id24
- $dihedral:id113 @dihedral:type1 $atom:id20 $atom:id23 $atom:id24 $atom:id3
- $dihedral:id114 @dihedral:type1 $atom:id20 $atom:id23 $atom:id24 $atom:id25
- $dihedral:id115 @dihedral:type1 $atom:id22 $atom:id23 $atom:id24 $atom:id3
- $dihedral:id116 @dihedral:type1 $atom:id22 $atom:id23 $atom:id24 $atom:id25
- $dihedral:id117 @dihedral:type1 $atom:id3 $atom:id24 $atom:id25 $atom:id26
- $dihedral:id118 @dihedral:type1 $atom:id3 $atom:id24 $atom:id25 $atom:id46
- $dihedral:id119 @dihedral:type1 $atom:id23 $atom:id24 $atom:id25 $atom:id26
- $dihedral:id120 @dihedral:type1 $atom:id23 $atom:id24 $atom:id25 $atom:id46
- $dihedral:id121 @dihedral:type1 $atom:id24 $atom:id25 $atom:id26 $atom:id27
- $dihedral:id122 @dihedral:type1 $atom:id24 $atom:id25 $atom:id26 $atom:id29
- $dihedral:id123 @dihedral:type1 $atom:id46 $atom:id25 $atom:id26 $atom:id27
- $dihedral:id124 @dihedral:type1 $atom:id46 $atom:id25 $atom:id26 $atom:id29
- $dihedral:id125 @dihedral:type1 $atom:id24 $atom:id25 $atom:id46 $atom:id45
- $dihedral:id126 @dihedral:type1 $atom:id24 $atom:id25 $atom:id46 $atom:id47
- $dihedral:id127 @dihedral:type1 $atom:id26 $atom:id25 $atom:id46 $atom:id45
- $dihedral:id128 @dihedral:type1 $atom:id26 $atom:id25 $atom:id46 $atom:id47
- $dihedral:id129 @dihedral:type1 $atom:id25 $atom:id26 $atom:id27 $atom:id48
- $dihedral:id130 @dihedral:type1 $atom:id25 $atom:id26 $atom:id27 $atom:id28
- $dihedral:id131 @dihedral:type1 $atom:id29 $atom:id26 $atom:id27 $atom:id48
- $dihedral:id132 @dihedral:type1 $atom:id29 $atom:id26 $atom:id27 $atom:id28
- $dihedral:id133 @dihedral:type1 $atom:id25 $atom:id26 $atom:id29 $atom:id4
- $dihedral:id134 @dihedral:type1 $atom:id25 $atom:id26 $atom:id29 $atom:id30
- $dihedral:id135 @dihedral:type1 $atom:id27 $atom:id26 $atom:id29 $atom:id4
- $dihedral:id136 @dihedral:type1 $atom:id27 $atom:id26 $atom:id29 $atom:id30
- $dihedral:id137 @dihedral:type1 $atom:id26 $atom:id27 $atom:id48 $atom:id47
- $dihedral:id138 @dihedral:type1 $atom:id26 $atom:id27 $atom:id48 $atom:id49
- $dihedral:id139 @dihedral:type1 $atom:id28 $atom:id27 $atom:id48 $atom:id47
- $dihedral:id140 @dihedral:type1 $atom:id28 $atom:id27 $atom:id48 $atom:id49
- $dihedral:id141 @dihedral:type1 $atom:id26 $atom:id27 $atom:id28 $atom:id31
- $dihedral:id142 @dihedral:type1 $atom:id26 $atom:id27 $atom:id28 $atom:id53
- $dihedral:id143 @dihedral:type1 $atom:id48 $atom:id27 $atom:id28 $atom:id31
- $dihedral:id144 @dihedral:type1 $atom:id48 $atom:id27 $atom:id28 $atom:id53
- $dihedral:id145 @dihedral:type1 $atom:id27 $atom:id28 $atom:id31 $atom:id30
- $dihedral:id146 @dihedral:type1 $atom:id27 $atom:id28 $atom:id31 $atom:id32
- $dihedral:id147 @dihedral:type1 $atom:id53 $atom:id28 $atom:id31 $atom:id30
- $dihedral:id148 @dihedral:type1 $atom:id53 $atom:id28 $atom:id31 $atom:id32
- $dihedral:id149 @dihedral:type1 $atom:id27 $atom:id28 $atom:id53 $atom:id50
- $dihedral:id150 @dihedral:type1 $atom:id27 $atom:id28 $atom:id53 $atom:id54
- $dihedral:id151 @dihedral:type1 $atom:id31 $atom:id28 $atom:id53 $atom:id50
- $dihedral:id152 @dihedral:type1 $atom:id31 $atom:id28 $atom:id53 $atom:id54
- $dihedral:id153 @dihedral:type1 $atom:id4 $atom:id29 $atom:id30 $atom:id31
- $dihedral:id154 @dihedral:type1 $atom:id4 $atom:id29 $atom:id30 $atom:id33
- $dihedral:id155 @dihedral:type1 $atom:id26 $atom:id29 $atom:id30 $atom:id31
- $dihedral:id156 @dihedral:type1 $atom:id26 $atom:id29 $atom:id30 $atom:id33
- $dihedral:id157 @dihedral:type1 $atom:id29 $atom:id30 $atom:id31 $atom:id28
- $dihedral:id158 @dihedral:type1 $atom:id29 $atom:id30 $atom:id31 $atom:id32
- $dihedral:id159 @dihedral:type1 $atom:id33 $atom:id30 $atom:id31 $atom:id28
- $dihedral:id160 @dihedral:type1 $atom:id33 $atom:id30 $atom:id31 $atom:id32
- $dihedral:id161 @dihedral:type1 $atom:id29 $atom:id30 $atom:id33 $atom:id8
- $dihedral:id162 @dihedral:type1 $atom:id29 $atom:id30 $atom:id33 $atom:id34
- $dihedral:id163 @dihedral:type1 $atom:id31 $atom:id30 $atom:id33 $atom:id8
- $dihedral:id164 @dihedral:type1 $atom:id31 $atom:id30 $atom:id33 $atom:id34
- $dihedral:id165 @dihedral:type1 $atom:id28 $atom:id31 $atom:id32 $atom:id57
- $dihedral:id166 @dihedral:type1 $atom:id28 $atom:id31 $atom:id32 $atom:id35
- $dihedral:id167 @dihedral:type1 $atom:id30 $atom:id31 $atom:id32 $atom:id57
- $dihedral:id168 @dihedral:type1 $atom:id30 $atom:id31 $atom:id32 $atom:id35
- $dihedral:id169 @dihedral:type1 $atom:id31 $atom:id32 $atom:id57 $atom:id54
- $dihedral:id170 @dihedral:type1 $atom:id31 $atom:id32 $atom:id57 $atom:id58
- $dihedral:id171 @dihedral:type1 $atom:id35 $atom:id32 $atom:id57 $atom:id54
- $dihedral:id172 @dihedral:type1 $atom:id35 $atom:id32 $atom:id57 $atom:id58
- $dihedral:id173 @dihedral:type1 $atom:id31 $atom:id32 $atom:id35 $atom:id34
- $dihedral:id174 @dihedral:type1 $atom:id31 $atom:id32 $atom:id35 $atom:id36
- $dihedral:id175 @dihedral:type1 $atom:id57 $atom:id32 $atom:id35 $atom:id34
- $dihedral:id176 @dihedral:type1 $atom:id57 $atom:id32 $atom:id35 $atom:id36
- $dihedral:id177 @dihedral:type1 $atom:id8 $atom:id33 $atom:id34 $atom:id37
- $dihedral:id178 @dihedral:type1 $atom:id8 $atom:id33 $atom:id34 $atom:id35
- $dihedral:id179 @dihedral:type1 $atom:id30 $atom:id33 $atom:id34 $atom:id37
- $dihedral:id180 @dihedral:type1 $atom:id30 $atom:id33 $atom:id34 $atom:id35
- $dihedral:id181 @dihedral:type1 $atom:id33 $atom:id34 $atom:id37 $atom:id12
- $dihedral:id182 @dihedral:type1 $atom:id33 $atom:id34 $atom:id37 $atom:id38
- $dihedral:id183 @dihedral:type1 $atom:id35 $atom:id34 $atom:id37 $atom:id12
- $dihedral:id184 @dihedral:type1 $atom:id35 $atom:id34 $atom:id37 $atom:id38
- $dihedral:id185 @dihedral:type1 $atom:id33 $atom:id34 $atom:id35 $atom:id32
- $dihedral:id186 @dihedral:type1 $atom:id33 $atom:id34 $atom:id35 $atom:id36
- $dihedral:id187 @dihedral:type1 $atom:id37 $atom:id34 $atom:id35 $atom:id32
- $dihedral:id188 @dihedral:type1 $atom:id37 $atom:id34 $atom:id35 $atom:id36
- $dihedral:id189 @dihedral:type1 $atom:id32 $atom:id35 $atom:id36 $atom:id39
- $dihedral:id190 @dihedral:type1 $atom:id32 $atom:id35 $atom:id36 $atom:id61
- $dihedral:id191 @dihedral:type1 $atom:id34 $atom:id35 $atom:id36 $atom:id39
- $dihedral:id192 @dihedral:type1 $atom:id34 $atom:id35 $atom:id36 $atom:id61
- $dihedral:id193 @dihedral:type1 $atom:id35 $atom:id36 $atom:id39 $atom:id38
- $dihedral:id194 @dihedral:type1 $atom:id35 $atom:id36 $atom:id39 $atom:id40
- $dihedral:id195 @dihedral:type1 $atom:id61 $atom:id36 $atom:id39 $atom:id38
- $dihedral:id196 @dihedral:type1 $atom:id61 $atom:id36 $atom:id39 $atom:id40
- $dihedral:id197 @dihedral:type1 $atom:id35 $atom:id36 $atom:id61 $atom:id58
- $dihedral:id198 @dihedral:type1 $atom:id35 $atom:id36 $atom:id61 $atom:id62
- $dihedral:id199 @dihedral:type1 $atom:id39 $atom:id36 $atom:id61 $atom:id58
- $dihedral:id200 @dihedral:type1 $atom:id39 $atom:id36 $atom:id61 $atom:id62
- $dihedral:id201 @dihedral:type1 $atom:id12 $atom:id37 $atom:id38 $atom:id41
- $dihedral:id202 @dihedral:type1 $atom:id12 $atom:id37 $atom:id38 $atom:id39
- $dihedral:id203 @dihedral:type1 $atom:id34 $atom:id37 $atom:id38 $atom:id41
- $dihedral:id204 @dihedral:type1 $atom:id34 $atom:id37 $atom:id38 $atom:id39
- $dihedral:id205 @dihedral:type1 $atom:id37 $atom:id38 $atom:id41 $atom:id16
- $dihedral:id206 @dihedral:type1 $atom:id37 $atom:id38 $atom:id41 $atom:id42
- $dihedral:id207 @dihedral:type1 $atom:id39 $atom:id38 $atom:id41 $atom:id16
- $dihedral:id208 @dihedral:type1 $atom:id39 $atom:id38 $atom:id41 $atom:id42
- $dihedral:id209 @dihedral:type1 $atom:id37 $atom:id38 $atom:id39 $atom:id36
- $dihedral:id210 @dihedral:type1 $atom:id37 $atom:id38 $atom:id39 $atom:id40
- $dihedral:id211 @dihedral:type1 $atom:id41 $atom:id38 $atom:id39 $atom:id36
- $dihedral:id212 @dihedral:type1 $atom:id41 $atom:id38 $atom:id39 $atom:id40
- $dihedral:id213 @dihedral:type1 $atom:id36 $atom:id39 $atom:id40 $atom:id43
- $dihedral:id214 @dihedral:type1 $atom:id36 $atom:id39 $atom:id40 $atom:id65
- $dihedral:id215 @dihedral:type1 $atom:id38 $atom:id39 $atom:id40 $atom:id43
- $dihedral:id216 @dihedral:type1 $atom:id38 $atom:id39 $atom:id40 $atom:id65
- $dihedral:id217 @dihedral:type1 $atom:id39 $atom:id40 $atom:id43 $atom:id42
- $dihedral:id218 @dihedral:type1 $atom:id39 $atom:id40 $atom:id43 $atom:id44
- $dihedral:id219 @dihedral:type1 $atom:id65 $atom:id40 $atom:id43 $atom:id42
- $dihedral:id220 @dihedral:type1 $atom:id65 $atom:id40 $atom:id43 $atom:id44
- $dihedral:id221 @dihedral:type1 $atom:id39 $atom:id40 $atom:id65 $atom:id62
- $dihedral:id222 @dihedral:type1 $atom:id39 $atom:id40 $atom:id65 $atom:id66
- $dihedral:id223 @dihedral:type1 $atom:id43 $atom:id40 $atom:id65 $atom:id62
- $dihedral:id224 @dihedral:type1 $atom:id43 $atom:id40 $atom:id65 $atom:id66
- $dihedral:id225 @dihedral:type1 $atom:id16 $atom:id41 $atom:id42 $atom:id45
- $dihedral:id226 @dihedral:type1 $atom:id16 $atom:id41 $atom:id42 $atom:id43
- $dihedral:id227 @dihedral:type1 $atom:id38 $atom:id41 $atom:id42 $atom:id45
- $dihedral:id228 @dihedral:type1 $atom:id38 $atom:id41 $atom:id42 $atom:id43
- $dihedral:id229 @dihedral:type1 $atom:id41 $atom:id42 $atom:id45 $atom:id20
- $dihedral:id230 @dihedral:type1 $atom:id41 $atom:id42 $atom:id45 $atom:id46
- $dihedral:id231 @dihedral:type1 $atom:id43 $atom:id42 $atom:id45 $atom:id20
- $dihedral:id232 @dihedral:type1 $atom:id43 $atom:id42 $atom:id45 $atom:id46
- $dihedral:id233 @dihedral:type1 $atom:id41 $atom:id42 $atom:id43 $atom:id40
- $dihedral:id234 @dihedral:type1 $atom:id41 $atom:id42 $atom:id43 $atom:id44
- $dihedral:id235 @dihedral:type1 $atom:id45 $atom:id42 $atom:id43 $atom:id40
- $dihedral:id236 @dihedral:type1 $atom:id45 $atom:id42 $atom:id43 $atom:id44
- $dihedral:id237 @dihedral:type1 $atom:id40 $atom:id43 $atom:id44 $atom:id47
- $dihedral:id238 @dihedral:type1 $atom:id40 $atom:id43 $atom:id44 $atom:id69
- $dihedral:id239 @dihedral:type1 $atom:id42 $atom:id43 $atom:id44 $atom:id47
- $dihedral:id240 @dihedral:type1 $atom:id42 $atom:id43 $atom:id44 $atom:id69
- $dihedral:id241 @dihedral:type1 $atom:id43 $atom:id44 $atom:id47 $atom:id46
- $dihedral:id242 @dihedral:type1 $atom:id43 $atom:id44 $atom:id47 $atom:id48
- $dihedral:id243 @dihedral:type1 $atom:id69 $atom:id44 $atom:id47 $atom:id46
- $dihedral:id244 @dihedral:type1 $atom:id69 $atom:id44 $atom:id47 $atom:id48
- $dihedral:id245 @dihedral:type1 $atom:id43 $atom:id44 $atom:id69 $atom:id66
- $dihedral:id246 @dihedral:type1 $atom:id43 $atom:id44 $atom:id69 $atom:id70
- $dihedral:id247 @dihedral:type1 $atom:id47 $atom:id44 $atom:id69 $atom:id66
- $dihedral:id248 @dihedral:type1 $atom:id47 $atom:id44 $atom:id69 $atom:id70
- $dihedral:id249 @dihedral:type1 $atom:id20 $atom:id45 $atom:id46 $atom:id25
- $dihedral:id250 @dihedral:type1 $atom:id20 $atom:id45 $atom:id46 $atom:id47
- $dihedral:id251 @dihedral:type1 $atom:id42 $atom:id45 $atom:id46 $atom:id25
- $dihedral:id252 @dihedral:type1 $atom:id42 $atom:id45 $atom:id46 $atom:id47
- $dihedral:id253 @dihedral:type1 $atom:id25 $atom:id46 $atom:id47 $atom:id44
- $dihedral:id254 @dihedral:type1 $atom:id25 $atom:id46 $atom:id47 $atom:id48
- $dihedral:id255 @dihedral:type1 $atom:id45 $atom:id46 $atom:id47 $atom:id44
- $dihedral:id256 @dihedral:type1 $atom:id45 $atom:id46 $atom:id47 $atom:id48
- $dihedral:id257 @dihedral:type1 $atom:id44 $atom:id47 $atom:id48 $atom:id27
- $dihedral:id258 @dihedral:type1 $atom:id44 $atom:id47 $atom:id48 $atom:id49
- $dihedral:id259 @dihedral:type1 $atom:id46 $atom:id47 $atom:id48 $atom:id27
- $dihedral:id260 @dihedral:type1 $atom:id46 $atom:id47 $atom:id48 $atom:id49
- $dihedral:id261 @dihedral:type1 $atom:id27 $atom:id48 $atom:id49 $atom:id50
- $dihedral:id262 @dihedral:type1 $atom:id27 $atom:id48 $atom:id49 $atom:id70
- $dihedral:id263 @dihedral:type1 $atom:id47 $atom:id48 $atom:id49 $atom:id50
- $dihedral:id264 @dihedral:type1 $atom:id47 $atom:id48 $atom:id49 $atom:id70
- $dihedral:id265 @dihedral:type1 $atom:id48 $atom:id49 $atom:id50 $atom:id51
- $dihedral:id266 @dihedral:type1 $atom:id48 $atom:id49 $atom:id50 $atom:id53
- $dihedral:id267 @dihedral:type1 $atom:id70 $atom:id49 $atom:id50 $atom:id51
- $dihedral:id268 @dihedral:type1 $atom:id70 $atom:id49 $atom:id50 $atom:id53
- $dihedral:id269 @dihedral:type1 $atom:id48 $atom:id49 $atom:id70 $atom:id69
- $dihedral:id270 @dihedral:type1 $atom:id48 $atom:id49 $atom:id70 $atom:id71
- $dihedral:id271 @dihedral:type1 $atom:id50 $atom:id49 $atom:id70 $atom:id69
- $dihedral:id272 @dihedral:type1 $atom:id50 $atom:id49 $atom:id70 $atom:id71
- $dihedral:id273 @dihedral:type1 $atom:id49 $atom:id50 $atom:id51 $atom:id72
- $dihedral:id274 @dihedral:type1 $atom:id49 $atom:id50 $atom:id51 $atom:id52
- $dihedral:id275 @dihedral:type1 $atom:id53 $atom:id50 $atom:id51 $atom:id72
- $dihedral:id276 @dihedral:type1 $atom:id53 $atom:id50 $atom:id51 $atom:id52
- $dihedral:id277 @dihedral:type1 $atom:id49 $atom:id50 $atom:id53 $atom:id28
- $dihedral:id278 @dihedral:type1 $atom:id49 $atom:id50 $atom:id53 $atom:id54
- $dihedral:id279 @dihedral:type1 $atom:id51 $atom:id50 $atom:id53 $atom:id28
- $dihedral:id280 @dihedral:type1 $atom:id51 $atom:id50 $atom:id53 $atom:id54
- $dihedral:id281 @dihedral:type1 $atom:id50 $atom:id51 $atom:id72 $atom:id71
- $dihedral:id282 @dihedral:type1 $atom:id52 $atom:id51 $atom:id72 $atom:id71
- $dihedral:id283 @dihedral:type1 $atom:id50 $atom:id51 $atom:id52 $atom:id55
- $dihedral:id284 @dihedral:type1 $atom:id72 $atom:id51 $atom:id52 $atom:id55
- $dihedral:id285 @dihedral:type1 $atom:id51 $atom:id52 $atom:id55 $atom:id54
- $dihedral:id286 @dihedral:type1 $atom:id51 $atom:id52 $atom:id55 $atom:id56
- $dihedral:id287 @dihedral:type1 $atom:id28 $atom:id53 $atom:id54 $atom:id55
- $dihedral:id288 @dihedral:type1 $atom:id28 $atom:id53 $atom:id54 $atom:id57
- $dihedral:id289 @dihedral:type1 $atom:id50 $atom:id53 $atom:id54 $atom:id55
- $dihedral:id290 @dihedral:type1 $atom:id50 $atom:id53 $atom:id54 $atom:id57
- $dihedral:id291 @dihedral:type1 $atom:id53 $atom:id54 $atom:id55 $atom:id52
- $dihedral:id292 @dihedral:type1 $atom:id53 $atom:id54 $atom:id55 $atom:id56
- $dihedral:id293 @dihedral:type1 $atom:id57 $atom:id54 $atom:id55 $atom:id52
- $dihedral:id294 @dihedral:type1 $atom:id57 $atom:id54 $atom:id55 $atom:id56
- $dihedral:id295 @dihedral:type1 $atom:id53 $atom:id54 $atom:id57 $atom:id32
- $dihedral:id296 @dihedral:type1 $atom:id53 $atom:id54 $atom:id57 $atom:id58
- $dihedral:id297 @dihedral:type1 $atom:id55 $atom:id54 $atom:id57 $atom:id32
- $dihedral:id298 @dihedral:type1 $atom:id55 $atom:id54 $atom:id57 $atom:id58
- $dihedral:id299 @dihedral:type1 $atom:id52 $atom:id55 $atom:id56 $atom:id59
- $dihedral:id300 @dihedral:type1 $atom:id54 $atom:id55 $atom:id56 $atom:id59
- $dihedral:id301 @dihedral:type1 $atom:id55 $atom:id56 $atom:id59 $atom:id58
- $dihedral:id302 @dihedral:type1 $atom:id55 $atom:id56 $atom:id59 $atom:id60
- $dihedral:id303 @dihedral:type1 $atom:id32 $atom:id57 $atom:id58 $atom:id61
- $dihedral:id304 @dihedral:type1 $atom:id32 $atom:id57 $atom:id58 $atom:id59
- $dihedral:id305 @dihedral:type1 $atom:id54 $atom:id57 $atom:id58 $atom:id61
- $dihedral:id306 @dihedral:type1 $atom:id54 $atom:id57 $atom:id58 $atom:id59
- $dihedral:id307 @dihedral:type1 $atom:id57 $atom:id58 $atom:id61 $atom:id36
- $dihedral:id308 @dihedral:type1 $atom:id57 $atom:id58 $atom:id61 $atom:id62
- $dihedral:id309 @dihedral:type1 $atom:id59 $atom:id58 $atom:id61 $atom:id36
- $dihedral:id310 @dihedral:type1 $atom:id59 $atom:id58 $atom:id61 $atom:id62
- $dihedral:id311 @dihedral:type1 $atom:id57 $atom:id58 $atom:id59 $atom:id56
- $dihedral:id312 @dihedral:type1 $atom:id57 $atom:id58 $atom:id59 $atom:id60
- $dihedral:id313 @dihedral:type1 $atom:id61 $atom:id58 $atom:id59 $atom:id56
- $dihedral:id314 @dihedral:type1 $atom:id61 $atom:id58 $atom:id59 $atom:id60
- $dihedral:id315 @dihedral:type1 $atom:id56 $atom:id59 $atom:id60 $atom:id63
- $dihedral:id316 @dihedral:type1 $atom:id58 $atom:id59 $atom:id60 $atom:id63
- $dihedral:id317 @dihedral:type1 $atom:id59 $atom:id60 $atom:id63 $atom:id62
- $dihedral:id318 @dihedral:type1 $atom:id59 $atom:id60 $atom:id63 $atom:id64
- $dihedral:id319 @dihedral:type1 $atom:id36 $atom:id61 $atom:id62 $atom:id65
- $dihedral:id320 @dihedral:type1 $atom:id36 $atom:id61 $atom:id62 $atom:id63
- $dihedral:id321 @dihedral:type1 $atom:id58 $atom:id61 $atom:id62 $atom:id65
- $dihedral:id322 @dihedral:type1 $atom:id58 $atom:id61 $atom:id62 $atom:id63
- $dihedral:id323 @dihedral:type1 $atom:id61 $atom:id62 $atom:id65 $atom:id40
- $dihedral:id324 @dihedral:type1 $atom:id61 $atom:id62 $atom:id65 $atom:id66
- $dihedral:id325 @dihedral:type1 $atom:id63 $atom:id62 $atom:id65 $atom:id40
- $dihedral:id326 @dihedral:type1 $atom:id63 $atom:id62 $atom:id65 $atom:id66
- $dihedral:id327 @dihedral:type1 $atom:id61 $atom:id62 $atom:id63 $atom:id60
- $dihedral:id328 @dihedral:type1 $atom:id61 $atom:id62 $atom:id63 $atom:id64
- $dihedral:id329 @dihedral:type1 $atom:id65 $atom:id62 $atom:id63 $atom:id60
- $dihedral:id330 @dihedral:type1 $atom:id65 $atom:id62 $atom:id63 $atom:id64
- $dihedral:id331 @dihedral:type1 $atom:id60 $atom:id63 $atom:id64 $atom:id67
- $dihedral:id332 @dihedral:type1 $atom:id62 $atom:id63 $atom:id64 $atom:id67
- $dihedral:id333 @dihedral:type1 $atom:id63 $atom:id64 $atom:id67 $atom:id66
- $dihedral:id334 @dihedral:type1 $atom:id63 $atom:id64 $atom:id67 $atom:id68
- $dihedral:id335 @dihedral:type1 $atom:id40 $atom:id65 $atom:id66 $atom:id69
- $dihedral:id336 @dihedral:type1 $atom:id40 $atom:id65 $atom:id66 $atom:id67
- $dihedral:id337 @dihedral:type1 $atom:id62 $atom:id65 $atom:id66 $atom:id69
- $dihedral:id338 @dihedral:type1 $atom:id62 $atom:id65 $atom:id66 $atom:id67
- $dihedral:id339 @dihedral:type1 $atom:id65 $atom:id66 $atom:id69 $atom:id44
- $dihedral:id340 @dihedral:type1 $atom:id65 $atom:id66 $atom:id69 $atom:id70
- $dihedral:id341 @dihedral:type1 $atom:id67 $atom:id66 $atom:id69 $atom:id44
- $dihedral:id342 @dihedral:type1 $atom:id67 $atom:id66 $atom:id69 $atom:id70
- $dihedral:id343 @dihedral:type1 $atom:id65 $atom:id66 $atom:id67 $atom:id64
- $dihedral:id344 @dihedral:type1 $atom:id65 $atom:id66 $atom:id67 $atom:id68
- $dihedral:id345 @dihedral:type1 $atom:id69 $atom:id66 $atom:id67 $atom:id64
- $dihedral:id346 @dihedral:type1 $atom:id69 $atom:id66 $atom:id67 $atom:id68
- $dihedral:id347 @dihedral:type1 $atom:id64 $atom:id67 $atom:id68 $atom:id71
- $dihedral:id348 @dihedral:type1 $atom:id66 $atom:id67 $atom:id68 $atom:id71
- $dihedral:id349 @dihedral:type1 $atom:id67 $atom:id68 $atom:id71 $atom:id70
- $dihedral:id350 @dihedral:type1 $atom:id67 $atom:id68 $atom:id71 $atom:id72
- $dihedral:id351 @dihedral:type1 $atom:id44 $atom:id69 $atom:id70 $atom:id49
- $dihedral:id352 @dihedral:type1 $atom:id44 $atom:id69 $atom:id70 $atom:id71
- $dihedral:id353 @dihedral:type1 $atom:id66 $atom:id69 $atom:id70 $atom:id49
- $dihedral:id354 @dihedral:type1 $atom:id66 $atom:id69 $atom:id70 $atom:id71
- $dihedral:id355 @dihedral:type1 $atom:id49 $atom:id70 $atom:id71 $atom:id68
- $dihedral:id356 @dihedral:type1 $atom:id49 $atom:id70 $atom:id71 $atom:id72
- $dihedral:id357 @dihedral:type1 $atom:id69 $atom:id70 $atom:id71 $atom:id68
- $dihedral:id358 @dihedral:type1 $atom:id69 $atom:id70 $atom:id71 $atom:id72
- $dihedral:id359 @dihedral:type1 $atom:id68 $atom:id71 $atom:id72 $atom:id51
- $dihedral:id360 @dihedral:type1 $atom:id70 $atom:id71 $atom:id72 $atom:id51
- }
-
-} # end of "CNT" type definition
diff --git a/tools/moltemplate/examples/all_atom_examples/hexadecane/WARNING.TXT b/tools/moltemplate/examples/all_atom_examples/hexadecane/WARNING.TXT
index def26ba76..faf178fbc 100644
--- a/tools/moltemplate/examples/all_atom_examples/hexadecane/WARNING.TXT
+++ b/tools/moltemplate/examples/all_atom_examples/hexadecane/WARNING.TXT
@@ -1,16 +1,16 @@
# -------- WARNING: --------
This software is experimental, and the force-fields and equilbration protocols
have not been tested carefully by me. There is no gaurantee that the simulation
will reproduce the behavior of real hexadecane molecules,
(or even of hexadecane molecules simulated using AMBER, which should
be using the same force-field).
# -------- REQUEST FOR HELP: --------
However, if you notice a problem with this example, please report it.
I confess I do not have a lot of experience running all-atom simulations.
Peer-review is the only way to improve this software (or any software).
Other suggestions are also welcome!
-(Contact jewett.aij@gmail.com, 2013-10-16)
+(Contact jewett.aij@gmail.com, 2014-4-19)
diff --git a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/alkanes.lt b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/alkanes.lt
index 5b6642b04..ee8cbadb5 100644
--- a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/alkanes.lt
+++ b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/alkanes.lt
@@ -1,84 +1,78 @@
Alkanes {
# LAMMPS offers many different force-field styles and atom-styles.
# We must select which kind of atoms and force fields we want to use.
# (This will effect the syntax of the "_coeff" commands below.)
write_once("In Init") {
# Default styles and settings for AMBER based force-fields:
units real
atom_style full
bond_style hybrid harmonic
angle_style hybrid harmonic
dihedral_style hybrid fourier
#improper_style hybrid cvff
-
- pair_style hybrid lj/cut 9.0
+ pair_style hybrid lj/charmm/coul/long 9.0 10.0 10.0
+ kspace_style pppm 0.0001
pair_modify shift yes
-
- # If you have charges on the atoms, then comment out the line above
- # and use this instead:
- #pair_style hybrid lj/charmm/coul/long 9.0 10.0 10.0
- #kspace_style pppm 0.0001
-
pair_modify mix arithmetic
special_bonds amber
}
# The "Alkanes" object contains the definition of atoms, bonds, bond-angles,
# and all of the force-field parameters for simple n-Alkanes.
# (These parameters were taken from the January 2013 version of the
# AMBER GAFF force-field. See "common/gaff.lt" for details.)
# atom-type mass
write_once("Data Masses") {
@atom:c3 12.01
@atom:h1 1.008
}
# Pairwise (non-bonded) force-field parameters:
write_once("In Settings") {
- pair_coeff @atom:c3 @atom:c3 lj/cut 0.1094 1.9080
- pair_coeff @atom:h1 @atom:h1 lj/cut 0.0157 1.3870
+ pair_coeff @atom:c3 @atom:c3 lj/charmm/coul/long 0.1094 1.9080
+ pair_coeff @atom:h1 @atom:h1 lj/charmm/coul/long 0.0157 1.3870
}
# Rules for determining 3 and 4-body bonded interactions by type
# angle-type atomType1 atomType2 atomType3 bondType1 bondType2
write_once("Data Angles By Type") {
@angle:CCC @atom:c3 @atom:c3 @atom:c3 @bond:* @bond:*
@angle:CCH @atom:c3 @atom:c3 @atom:h1 @bond:* @bond:*
@angle:HCH @atom:h1 @atom:c3 @atom:h1 @bond:* @bond:*
}
# dihedral-type AtomType1 AtomType2 AtomType3 AtomType4 bondType1 btyp2 btyp3
write_once("Data Dihedrals By Type") {
@dihedral:XCCX @atom:* @atom:c3 @atom:c3 @atom:* @bond:* @bond:* @bond:*
@dihedral:CCCC @atom:c3 @atom:c3 @atom:c3 @atom:c3 @bond:* @bond:* @bond:*
}
# Parameters for these new angular interactions must be defined. (I recommend
# putting all force-field parameters (coeffs) in the "In Settings" section.)
write_once("In Settings") {
# bond-type k r0
bond_coeff @bond:CC harmonic 303.1 1.5350
bond_coeff @bond:CH harmonic 335.9 1.0930
# angle-type k theta0
angle_coeff @angle:CCC harmonic 63.210 110.630
angle_coeff @angle:CCH harmonic 46.360 110.070
angle_coeff @angle:HCH harmonic 39.180 109.550
# dihedral-type
dihedral_coeff @dihedral:XCCX fourier 1 0.155555555556 3 0.0
dihedral_coeff @dihedral:CCCC fourier 3 0.18 3 0.0 0.25 2 180.0 0.2 1 180.0
}
} # Alkanes
diff --git a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch2group.lt b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch2group.lt
index 33051a0c1..e8c5b3bd0 100644
--- a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch2group.lt
+++ b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch2group.lt
@@ -1,44 +1,46 @@
import "alkanes.lt" # <-- Defines the atoms and force-field used for Alkanes
CH2 inherits Alkanes {
- # atom-id mol-id atom-type charge x y z
+ # atom-id mol-id atom-type charge x y z
write("Data Atoms") {
- $atom:C $mol:... @atom:c3 0.00 0.00 0.000 0.000
- $atom:H1 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 0.8924307629540046
- $atom:H2 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 -0.8924307629540046
+ $atom:C $mol:... @atom:c3 -0.120 0.000 0.000 0.000
+ $atom:H1 $mol:... @atom:h1 0.060 0.000 0.63104384422426 0.892430762954
+ $atom:H2 $mol:... @atom:h1 0.060 0.000 0.63104384422426 -0.892430762954
}
# Note: The "..." in "$mol:..." tells moltemplate that this molecule may
# be a part of a larger molecule, and (if so) to use the larger
# parent object's molecule id number as it's own.
# The CH2 group is part of the Hexadecane molecule.
# Now specify which pairs of atoms are bonded:
# bond-id bond-type atom-id1 atom-id2
write('Data Bonds') {
$bond:b1 @bond:CH $atom:C $atom:H1
$bond:b2 @bond:CH $atom:C $atom:H2
}
} # CH2
-
+# Atom charges for this example were taken from the OPLSAA force field file:
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
+#
######### (scratchwork calculations for the atomic coordinates) #########
# Lcc = 1.5350 # length of the C-C bond (Sp3)
# Lch = 1.0930 # length of the C-H bond
# theta=2*atan(sqrt(2)) # ~= 109.5 degrees = tetrahedronal angle (C-C-C angle)
# DeltaXc = Lcc*sin(theta/2) # = 1.2533222517240594
# DeltaYc = Lcc*cos(theta/2) # = 0.8862326632060754
# # 0.5*DeltaYc = 0.4431163316030377
# DeltaZh = Lch*sin(theta/2) # = 0.8924307629540046
# DeltaYh = Lch*cos(theta/2) # = 0.6310438442242609
diff --git a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch3group.lt b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch3group.lt
index b78d9947f..f06e958dc 100644
--- a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch3group.lt
+++ b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/ch3group.lt
@@ -1,44 +1,46 @@
import "alkanes.lt" # <-- Defines the atoms and force-field used for Alkanes
CH3 inherits Alkanes {
- # atom-id mol-id atom-type charge x y z
+ # atom-id mol-id atom-type charge x y z
write("Data Atoms") {
- $atom:C $mol:... @atom:c3 0.00 0.00 0.000 0.000
- $atom:H1 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 0.8924307629540046
- $atom:H2 $mol:... @atom:h1 0.00 0.00 0.6310438442242609 -0.8924307629540046
- $atom:H3 $mol:... @atom:h1 0.00 -0.8924307629540046 -0.6310438442242609 0.00
+ $atom:C $mol:... @atom:c3 -0.180 0.000000 0.000000 0.000000
+ $atom:H1 $mol:... @atom:h1 0.060 0.000000 0.6310438442242609 0.8924307629540046
+ $atom:H2 $mol:... @atom:h1 0.060 0.000000 0.6310438442242609 -0.8924307629540046
+ $atom:H3 $mol:... @atom:h1 0.060 -0.8924307629540046 -0.6310438442242609 0.000000
}
# Note: The "..." in "$mol:..." tells moltemplate that this molecule may
# be a part of a larger molecule, and (if so) to use the larger
# parent object's molecule id number as it's own.
# The CH3 group is part of the Hexadecane molecule.
# Now specify which pairs of atoms are bonded:
# bond-id bond-type atom-id1 atom-id2
write('Data Bonds') {
$bond:b1 @bond:CH $atom:C $atom:H1
$bond:b2 @bond:CH $atom:C $atom:H2
$bond:b3 @bond:CH $atom:C $atom:H3
}
} # CH3
+# Atom charges for this example were taken from the OPLSAA force field file:
+# http://dasher.wustl.edu/tinker/distribution/params/oplsaa.prm
######### (scratchwork calculations for the atomic coordinates) #########
# Lcc = 1.5350 # length of the C-C bond (Sp3)
# Lch = 1.0930 # length of the C-H bond
# theta=2*atan(sqrt(2)) # ~= 109.5 degrees = tetrahedronal angle (C-C-C angle)
# DeltaXc = Lcc*sin(theta/2) # = 1.2533222517240594
# DeltaYc = Lcc*cos(theta/2) # = 0.8862326632060754
# # 0.5*DeltaYc = 0.4431163316030377
# DeltaZh = Lch*sin(theta/2) # = 0.8924307629540046
# DeltaYh = Lch*cos(theta/2) # = 0.6310438442242609
diff --git a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/hexadecane.lt b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/hexadecane.lt
index c6af2a7a7..93a59e36a 100644
--- a/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/hexadecane.lt
+++ b/tools/moltemplate/examples/all_atom_examples/hexadecane/moltemplate_files/hexadecane.lt
@@ -1,84 +1,85 @@
-# Define the "CH2" and "CH3" objects:
-
-import "ch2group.lt"
-import "ch3group.lt"
+# This example looks complicated because I split the
+# hexadecane molecule into individual CH2 and CH3 monomers.
+#
+# I defined it this way so that you can easily modify
+# it to change the length of the alkane chain.
+import "alkanes.lt" # load the "Alkanes" force-field information
+import "ch2group.lt" # load the definition of the "CH2" object
+import "ch3group.lt" # load the definition of the "CH3" object
Hexadecane inherits Alkanes {
- # Create an array of 16 "CH2" objects
+
+ # Create an array of 16 "CH2" objects distributed along the X axis
monomers = new CH2.move(0,0.4431163,0) [16].rot(180,1,0,0).move(1.2533223,0,0)
- # "monomers" is a 1-dimensional array containing 16 copies of the CH2 molecule
- # Each copy is rotated 180 degrees and shifted along the x axix.
- # (For an explanation, read sections 7.1-7.3 of the moltemplate manual.)
- # Notes:
- # 1.2533223 = DeltaXc = how far each CH2 group is shifted along the axis
- # 0.4431163 = DeltaYc/2 = lateral displacement of carbons along axis
+ # Each CH2 monomer is initial moved in the +Y direction by 0.43116
+ # angstroms. Then it is rotated 180 degrees with respect to the
+ # previous monomer, and moved 1.2533223 Angstroms down the X axis.
# ---- Now, modify the ends: ---
# Delete the CH2 groups at the beginning and end, and replace them with CH3.
- # (Note: Alternately, instead of deleting the CH2 groups at each end, you
- # could modify them by adding an extra hydrogen atom to those carbons.)
+ # (Note: Alternately, instead of deleting the CH2 groups at each end, you
+ # could modify them by adding an extra hydrogen atom to those carbons.)
delete monomers[0]
delete monomers[15]
- monomer_begin = new CH3
- monomer_end = new CH3
+ endcap1 = new CH3
+ endcap2 = new CH3
# Move the CH3 groups to the correct location at either end of the chain:
- monomer_begin.move(0,0.4431163,0)
- monomer_end.move(0,0.4431163,0).rot(180,0,0,1).move(18.7998345,0,0)
+ endcap1.move(0,0.4431163,0)
+ endcap2.move(0,0.4431163,0).rot(180,0,0,1).move(18.7998345,0,0)
- # Note: 18.7998345 = (16-1) * DeltaXc
+ # Note: 18.7998345 = (16-1) * 1.2533223
# Now add a list of bonds connecting the carbon atoms together:
write('Data Bonds') {
- $bond:b1 @bond:CC $atom:monomer_begin/C $atom:monomers[1]/C
+ $bond:b1 @bond:CC $atom:endcap1/C $atom:monomers[1]/C
$bond:b2 @bond:CC $atom:monomers[1]/C $atom:monomers[2]/C
$bond:b3 @bond:CC $atom:monomers[2]/C $atom:monomers[3]/C
$bond:b4 @bond:CC $atom:monomers[3]/C $atom:monomers[4]/C
$bond:b5 @bond:CC $atom:monomers[4]/C $atom:monomers[5]/C
$bond:b6 @bond:CC $atom:monomers[5]/C $atom:monomers[6]/C
$bond:b7 @bond:CC $atom:monomers[6]/C $atom:monomers[7]/C
$bond:b8 @bond:CC $atom:monomers[7]/C $atom:monomers[8]/C
$bond:b9 @bond:CC $atom:monomers[8]/C $atom:monomers[9]/C
$bond:b10 @bond:CC $atom:monomers[9]/C $atom:monomers[10]/C
$bond:b11 @bond:CC $atom:monomers[10]/C $atom:monomers[11]/C
$bond:b12 @bond:CC $atom:monomers[11]/C $atom:monomers[12]/C
$bond:b13 @bond:CC $atom:monomers[12]/C $atom:monomers[13]/C
$bond:b14 @bond:CC $atom:monomers[13]/C $atom:monomers[14]/C
- $bond:b15 @bond:CC $atom:monomers[14]/C $atom:monomer_end/C
+ $bond:b15 @bond:CC $atom:monomers[14]/C $atom:endcap2/C
}
- create_var { $mol } # Define a molecule ID number for this polymer
-
- # This causes monomer[0], monomer[1], ... to share the same molecule-ID.
- # (because in the ch2group.lt file, the "..." in "$mol:..." looks for
- # a counter of type "$mol" in a parent molecule or earlier ancestor.)
+ # OPTIONAL:
+ create_var { $mol } # Create a molecule ID number. This number will
+ # be shared by all of the atoms in this polymer.
+ # In ch2group.lt, "$mol:..." refers to this number.
} # Hexadecane
######### (scratchwork calculations for the atomic coordinates) #########
# Lcc = 1.5350 # length of the C-C bond (Sp3)
# Lch = 1.0930 # length of the C-H bond
# theta=2*atan(sqrt(2)) # ~= 109.5 degrees = tetrahedronal angle (C-C-C angle)
# DeltaXc = Lcc*sin(theta/2) # = 1.2533222517240594
# DeltaYc = Lcc*cos(theta/2) # = 0.8862326632060754
# # 0.5*DeltaYc = 0.4431163316030377
# DeltaZh = Lch*sin(theta/2) # = 0.8924307629540046
# DeltaYh = Lch*cos(theta/2) # = 0.6310438442242609
diff --git a/tools/moltemplate/examples/all_atom_examples/hexadecane/run.in.npt b/tools/moltemplate/examples/all_atom_examples/hexadecane/run.in.npt
index b1791c955..979376464 100644
--- a/tools/moltemplate/examples/all_atom_examples/hexadecane/run.in.npt
+++ b/tools/moltemplate/examples/all_atom_examples/hexadecane/run.in.npt
@@ -1,85 +1,85 @@
# PREREQUISITES:
#
# You must use moltemplate.sh to create 3 files:
# system.data system.in.init system.in.settings
# (Follow the instructions in README_setup.sh, or run it using ./README_sh.)
# ------------------------------- Initialization Section --------------------
include system.in.init
# ------------------------------- Atom Definition Section -------------------
read_data system.data
# ------------------------------- Settings Section --------------------------
include system.in.settings
# ------------------------------- Run Section -------------------------------
# To avvoid explosions, I have a 4-step equilibraion process (expand, minimize,
# reorient, compress). The system (as defined in the "system.data" file)
# is already expanded. That means there are 3 steps left:
dump dumpeq1 all custom 50 traj_eq1_min.lammpstrj id mol type x y z ix iy iz
thermo 50
# -- Equilibration: part 1: initial minimization --
# Note: In general, it's always a good idea to minimize the system at first.
minimize 1.0e-5 1.0e-7 100000 400000
undump dumpeq1
write_data system_after_eq1_min.data
# -- Equilibration part 2: reorienting the molecules (NVT) --
timestep 1.0
dump dumpeq2 all custom 200 traj_eq2_reorient.lammpstrj id mol type x y z ix iy iz
# Run the system at high temperature (at constant volume) to reorient the
# the molecules (which would otherwise be pointing in the same direction).
# To speed it up, I randomize the atomic positions for a few thousand steps
# using fix langevin (and fix nve). Then I switch to fix nvt (Nose-Hoover).
# (If I start with fix nvt (Nose-Hoover), it seems to get "stuck" for a while.)
fix fxlan all langevin 900.0 900.0 120 48279
fix fxnve all nve
run 2000
unfix fxlan
unfix fxnve
# Now continue the simulation at high temperature using fix nvt (Nose-Hoover).
fix fxnvt all nvt temp 900.0 900.0 100.0
run 5000
undump dumpeq2
write_data system_after_eq2_reorient.data
unfix fxnvt
# -- equilibration part 3: Equilibrating the density (NPT) --
# Originally, the simulation box (in "system.data" and "system.lt") was
# unrealistically large. The spacing between the molecules was large also.
# I did this to enable the molecules to move freely and reorient themselves.
# After doing that, we should run the simulation under NPT conditions to
# allow the simulation box to contract to it's natural size. We do that here:
# We begin the simulation at 100 barr (a relatively low pressure), and
# slowly decrease it to 1 barr, maintianing the temperature at 300K.
dump dumpeq3 all custom 200 traj_eq3_npt.lammpstrj id mol type x y z ix iy iz
fix fxnpt all npt temp 300.0 300.0 100.0 iso 100.0 1.0 1000.0 drag 2.0
timestep 1.0
-run 30000
+run 60000
write_data system_after_eq3_npt.data
diff --git a/tools/moltemplate/src/moltemplate.sh b/tools/moltemplate/src/moltemplate.sh
index 728edde24..ffacc0967 100755
--- a/tools/moltemplate/src/moltemplate.sh
+++ b/tools/moltemplate/src/moltemplate.sh
@@ -1,1801 +1,1801 @@
#!/usr/bin/env bash
# Author: Andrew Jewett (jewett.aij at g mail)
# http://www.chem.ucsb.edu/~sheagroup
# License: 3-clause BSD License (See LICENSE.TXT)
# Copyright (c) 2012, Regents of the University of California
# All rights reserved.
G_PROGRAM_NAME="moltemplate.sh"
-G_VERSION="1.20"
-G_DATE="2014-4-02"
+G_VERSION="1.21"
+G_DATE="2014-4-20"
echo "${G_PROGRAM_NAME} v${G_VERSION} ${G_DATE}" >&2
echo "" >&2
# Check for python:
# I prefer python over python3 because python3 requires
# more memory. Use regular python (ie 2.7) when available.
if which python > /dev/null; then
PYTHON_COMMAND='python'
elif which python3 > /dev/null; then
PYTHON_COMMAND='python3'
else
echo "Error: $G_PROGRAM_NAME requires python or python3" >&2
exit 1
fi
# First, determine the directory in which this shell script is located.
# (The python script files should also be located here as well.)
#SCRIPT_DIR=$(dirname $0)
SCRIPT_DIR=`dirname "$0"`
MSG_BAD_INSTALL=$(cat <<EOF
INSTALLATION ERROR:
Follow the instructions in the "Installation" chapter of the moltemplate manual.
(Note: You may need to log out and log in again before the changes take effect.)
EOF
)
ERR_BAD_INSTALL()
{
echo "$MSG_BAD_INSTALL" >&2
exit 1
}
ERR_INTERNAL()
{
echo " !!!!!! Possible internal error !!!!!!" >&2
echo "This could be a bug in moltemplate." >&2
echo "Please report this error." >&2
echo "(And please include the last few lines of moltemplate output preceeding this.)" >&2
echo " Thank you." >&2
exit 100
}
MOLTEMPLATE_FILES_NEEDED=$(cat <<EOF
ttree.py
lttree.py
lttree_check.py
lttree_postprocess.py
nbody_by_type.py
nbody_fix_ttree_assignments.py
nbody_reorder_atoms.py
pdbsort.py
postprocess_input_script.py
remove_duplicate_atoms.py
remove_duplicates_nbody.py
renumber_DATA_first_column.py
ttree_render.py
dump2data.py
raw2data.py
EOF
)
OIFS=$IFS
#IFS=$'\n'
IFS="
"
for f in $MOLTEMPLATE_FILES_NEEDED; do
if [ ! -s "${SCRIPT_DIR}/$f" ]; then
echo "Error: Missing file \"${SCRIPT_DIR}/$f\"" >&2
ERR_BAD_INSTALL
fi
done
IFS=$OIFS
IMOLPATH=""
if [ -n "${MOLTEMPLATE_PATH}" ]; then
IMOLPATH="-importpath \"${MOLTEMPLATE_PATH}\""
fi
# command that invokes lttree.py
LTTREE_COMMAND="$PYTHON_COMMAND \"${SCRIPT_DIR}/lttree.py\" ${IMOLPATH}"
# command that invokes lttree_check.py
LTTREE_CHECK_COMMAND="$PYTHON_COMMAND \"${SCRIPT_DIR}/lttree_check.py\" ${IMOLPATH}"
# command that invokes lttree_postprocess.py
LTTREE_POSTPROCESS_COMMAND="$PYTHON_COMMAND \"${SCRIPT_DIR}/lttree_postprocess.py\" ${IMOLPATH}"
# -----------------------------------------------------------
# If everything worked, then running ttree usually
# generates the following files:
#
# Users of lttree typically generate the following files:
# The variable below refer to file names generated by
# write() and write_once() commands in a lttree-file.
# (I keep changing my mind what I want these names to be.)
data_prefix="Data "
data_prefix_no_space="Data"
data_header="Data Header"
data_atoms="Data Atoms"
data_masses="Data Masses"
data_velocities="Data Velocities"
data_bonds="Data Bonds"
data_bond_list="Data Bond List"
data_angles="Data Angles"
data_dihedrals="Data Dihedrals"
data_impropers="Data Impropers"
data_bond_coeffs="Data Bond Coeffs"
data_angle_coeffs="Data Angle Coeffs"
data_dihedral_coeffs="Data Dihedral Coeffs"
data_improper_coeffs="Data Improper Coeffs"
data_pair_coeffs="Data Pair Coeffs"
# interactions-by-type (not id. This is not part of the LAMMPS standard.)
data_bonds_by_type="Data Bonds By Type"
data_angles_by_type="Data Angles By Type"
data_dihedrals_by_type="Data Dihedrals By Type"
data_impropers_by_type="Data Impropers By Type"
# class2 data sections
data_bondbond_coeffs="Data BondBond Coeffs"
data_bondangle_coeffs="Data BondAngle Coeffs"
data_middlebondtorsion_coeffs="Data MiddleBondTorsion Coeffs"
data_endbondtorsion_coeffs="Data EndBondTorsion Coeffs"
data_angletorsion_coeffs="Data AngleTorsion Coeffs"
data_angleangletorsion_coeffs="Data AngleAngleTorsion Coeffs"
data_bondbond13_coeffs="Data BondBond13 Coeffs"
data_angleangle_coeffs="Data AngleAngle Coeffs"
# sections for non-point-like particles:
data_ellipsoids="Data Ellipsoids"
data_lines="Data Lines"
data_triangles="Data Triangles"
# periodic boundary conditions
data_boundary="Data Boundary"
# (for backward compatibility), an older version of this file was named:
data_pbc="Data PBC"
# ---------------------------------------------------------------
# Note: The files above are fragments of a LAMMPS data file.
# In addition, moltemplate will probably also generate the following files:
# (These files represent different sections of the LAMMPS input script.)
# ---------------------------------------------------------------
in_prefix="In "
in_prefix_no_space="In"
in_init="In Init"
in_settings="In Settings"
in_coords="In Coords"
# If present, the various "In " files contain commands which should be
# included by the user in their LAMMPS input script. (This task is left
# to the user.) However, the "Data " files are processed and pasted together
# automatically in order to build a LAMMPS data file.
# ---------------------------------------------------------------
tmp_atom_coords="tmp_atom_coords.dat" #<-temporary file for storing coordinates
MOLTEMPLATE_TEMP_FILES=$(cat <<EOF
*.template
ttree_assignments.txt
$tmp_atom_coords
$data_masses
$data_pair_coeffs
$data_bond_coeffs
$data_angle_coeffs
$data_dihedral_coeffs
$data_improper_coeffs
$data_atoms
$data_velocities
$data_bonds
$data_bond_list
$data_angles
$data_dihedrals
$data_impropers
$data_bondbond_coeffs
$data_bondangle_coeffs
$data_middlebondtorsion_coeffs
$data_endbondtorsion_coeffs
$data_angletorsion_coeffs
$data_angleangletorsion_coeffs
$data_bondbond13_coeffs
$data_angleangle_coeffs
$data_ellipsoids
$data_lines
$data_triangles
$data_boundary
$data_bonds_by_type
$data_angles_by_type
$data_dihedrals_by_type
$data_impropers_by_type
$in_init
$in_settings
EOF
)
OIFS=$IFS
#IFS=$'\n'
IFS="
"
for f in $MOLTEMPLATE_TEMP_FILES; do
#echo "removing [$f]"
rm -f "$f"
done
IFS=$OIFS
rm -rf output_ttree
SYNTAX_MSG=$(cat <<EOF
Syntax example:
Usage:
moltemplate.sh [-atomstyle style] \
[-pdb/-xyz coord_file] \
[-a assignments.txt] file.lt
Optional arguments:
-atomstyle style By default, moltemplate.sh assumes you are using the "full"
atom style in LAMMPS. You can change the atom style to "dipole"
using -atomstyle dipole. If you are using a hybrid style,
you must enclose the list of styles in quotes. For example:
-atomstyle "hybrid full dipole"
For custom atom styles, you can also specify the
list of column names manually (enclosed in quotes):
-atomstyle "molid x y z atomid atomtype mux muy muz"
-xyz xyz_file An optional xyz_file argument can be supplied as an argument
following "-xyz".
This file should contain the atomic coordinates in xyz format.
(The atoms must appear in the same order in the data file.)
-pdb pdb_file An optional pdb_file argument can be supplied as an argument
following "-pdb".
This should be a PDB file (with ATOM or HETATM records) with
the coordinates you wish to appear in the LAMMPS data file.
(The atoms must appear in the same order in the data file.)
If the PDB file contains periodic boundary box information
(ie., a "CRYST1" record), this information is also copied
to the LAMMPS data file.
(Support for triclinic cells is experimental as of 2012-2-13.
Other molecular structure formats may be supported later.)
-a "@atom:x 1"
-a assignments.txt
The user can customize the numbers assigned to atom, bond,
angle, dihedral, and improper types or id numbers by using
-a "VARIABLE_NAME VALUE"
for each variable you want to modify. If there are many
variables you want to modify, you can save them in a file
(one variable per line). For an example of the file format
run moltemplat.sh once and search for a file named
"ttree_assignments.txt". (This file is often located in
the "output_ttree/" directory.) Once assigned, the remaining
variables in the same category will be automatically assigned
to values which do not overlap with your chosen values.
-b assignments.txt
"-b" is similar to "-a". However, in this case, no attempt
is made to assign exclusive (unique) values to each variable.
-nocheck
Normally moltemplate.sh checks for common errors and typos and
halts if it thinks it has found one. This forces the variables
and categories as well as write(file) and write_once(file)
commands to obey standard naming conventions. The "-nocheck"
argument bypasses these checks and eliminates these restrictions.
EOF
)
# --- Periodic boundary box information (default) ---
# We will determine these numbers later.
TRICLINIC=""
BOXSIZE_MINX=0.0
BOXSIZE_MINY=0.0
BOXSIZE_MINZ=0.0
BOXSIZE_MAXX=""
BOXSIZE_MAXY=""
BOXSIZE_MAXZ=""
BOXSIZE_XY=0.0
BOXSIZE_XZ=0.0
BOXSIZE_YZ=0.0
if [ "$1" = "--help" ]; then
echo "$SYNTAX_MSG" >&2
exit 0
fi
# --- Did the user specify a file containing atomic coordinates?
rm -f "$tmp_atom_coords"
# Optional files containing atom coordinates:
PDB_FILE=""
XYZ_FILE=""
RAW_FILE=""
LT_FILE=""
OUT_FILE_BASE="system"
# REMOVE_DUPLICATE variables:
# ...If true (default), then any duplicate entries in the lists of bonds
# bonds, angles, dihedrals, or impropers in the LAMMPS DATA file
# are removed, giving priority to the most recent entry in the list.
# (This might not be necessary, but I want to be careful.)
REMOVE_DUPLICATE_BONDS="true"
REMOVE_DUPLICATE_ANGLES="true"
REMOVE_DUPLICATE_DIHEDRALS="true"
REMOVE_DUPLICATE_IMPROPERS="true"
RUN_VMD_AT_END=""
ARGC=0
for A in "$@"; do
ARGC=$((ARGC+1))
eval ARGV${ARGC}=\"$A\"
done
TTREE_ARGS=""
ATOM_STYLE=""
i=0
while [ "$i" -lt "$ARGC" ]; do
i=$((i+1))
eval A=\${ARGV${i}}
if [ "$A" == "-nocheck" ]; then
# Disable syntax checking by undefining LTTREE_CHECK_COMMAND
unset LTTREE_CHECK_COMMAND
unset LTTREE_POSTPROCESS_COMMAND
elif [ "$A" == "-overlay-bonds" ]; then
# In that case, do not remove duplicate bond interactions
unset REMOVE_DUPLICATE_BONDS
elif [ "$A" == "-overlay-angles" ]; then
# In that case, do not remove duplicate angle interactions
unset REMOVE_DUPLICATE_ANGLES
elif [ "$A" == "-overlay-dihedrals" ]; then
# In that case, do not remove duplicate dihedral interactions
unset REMOVE_DUPLICATE_DIHEDRALS
elif [ "$A" == "-overlay-impropers" ]; then
# In that case, do not remove duplicate improper interactions
unset REMOVE_DUPLICATE_IMPROPERS
elif [ "$A" == "-vmd" ]; then
RUN_VMD_AT_END="true"
elif [ "$A" == "-raw" ]; then
if [ "$i" -eq "$ARGC" ]; then
echo "$SYNTAX_MSG" >&2
exit 7
fi
i=$((i+1))
eval A=\${ARGV${i}}
RAW_FILE=$A
if [ ! -s "$RAW_FILE" ]; then
echo "$SYNTAX_MSG" >&2
echo "-----------------------" >&2
echo "" >&2
echo "Error: Unable to open RAW-file \"$RAW_FILE\"." >&2
echo " (File is empty or does not exist.)" >&2
exit 8
fi
#echo " (extracting coordinates from \"$RAW_FILE\")" >&2
awk '{if (NF==3) {print $0}}' < "$RAW_FILE" > "$tmp_atom_coords"
elif [ "$A" == "-xyz" ]; then
if [ "$i" -eq "$ARGC" ]; then
echo "$SYNTAX_MSG" >&2
exit 7
fi
i=$((i+1))
eval A=\${ARGV${i}}
XYZ_FILE=$A
if [ ! -s "$XYZ_FILE" ]; then
echo "$SYNTAX_MSG" >&2
echo "-----------------------" >&2
echo "" >&2
echo "Error: Unable to open XYZ-file \"$XYZ_FILE\"." >&2
echo " (File is empty or does not exist.)" >&2
exit 8
fi
#echo " (extracting coordinates from \"$XYZ_FILE\")" >&2
# "isnum(x)" returns 1 or 0 depending upon whether or not
# a string is numeric.
#http://rosettacode.org/wiki/Determine_if_a_string_is_numeric#AWK
awk 'function isnum(x){return(x==x+0)} BEGIN{targetframe=1;framecount=0} {if (isnum($0)) {framecount++} else{if (framecount==targetframe){ if (NF>0) { if ((NF==3) && isnum($1)) {print $1" "$2" "$3} else if ((NF==4) && isnum($2)) {print $2" "$3" "$4} }}}}' < "$XYZ_FILE" > "$tmp_atom_coords"
elif [ "$A" == "-pdb" ]; then
if [ "$i" -eq "$ARGC" ]; then
echo "$SYNTAX_MSG" >&2
exit 9
fi
i=$((i+1))
eval A=\${ARGV${i}}
PDB_FILE=$A
if [ ! -s "$PDB_FILE" ]; then
echo "$SYNTAX_MSG" >&2
echo "-----------------------" >&2
echo "" >&2
echo "Error: Unable to open PDB-file \"$PDB_FILE\"." >&2
echo " (File is empty or does not exist.)" >&2
exit 10
fi
#echo " (extracting coordinates from \"$PDB_FILE\")" >&2
if grep -q '^ATOM \|^HETATM' "$PDB_FILE"; then
# Extract the coords from the "ATOM" records in the PDB file
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/pdbsort.py" < "$PDB_FILE" \
| awk '/^ATOM |^HETATM/{print substr($0,31,8)" "substr($0,39,8)" "substr($0,47,8)}' > "$tmp_atom_coords"; then
ERR_INTERNAL
fi
else
echo "$SYNTAX_MSG" >&2
echo "-----------------------" >&2
echo "" >&2
echo "Error: File \"$PDB_FILE\" is not a valid PDB file." >&2
exit 11
fi
# Now extract the periodic bounding-box informatio from the PDB file
# The CRYST1 records are described at:
# http://deposit.rcsb.org/adit/docs/pdb_atom_format.html
BOXSIZE_A=-1.0
BOXSIZE_B=-1.0
BOXSIZE_C=-1.0
ALPHA=" 90.00" #Note: The space before the number in " 90.00" is intentional.
BETA=" 90.00" # Later we will check to see if the system is triclinic
GAMMA=" 90.00" # by comparing these strings for equality with " 90.00"
if grep -qF "CRYST1" "$PDB_FILE"; then
BOXSIZE_A=`awk '/CRYST1/{print substr($0,8,8)}' < "$PDB_FILE"`
BOXSIZE_B=`awk '/CRYST1/{print substr($0,17,8)}' < "$PDB_FILE"`
BOXSIZE_C=`awk '/CRYST1/{print substr($0,26,8)}' < "$PDB_FILE"`
ALPHA=`awk '/CRYST1/{print substr($0,35,6)}' < "$PDB_FILE"`
BETA=`awk '/CRYST1/{print substr($0,42,6)}' < "$PDB_FILE"`
GAMMA=`awk '/CRYST1/{print substr($0,49,6)}' < "$PDB_FILE"`
fi
if [ `echo "$ALPHA!=90.0"|bc` -eq 1 ] || [ `echo "$BETA!=90.0"|bc` -eq 1 ] || [ `echo "$GAMMA!=90.0"|bc` -eq 1 ]; then
# I transform the parameters from one format to the other by inverting
# the transformation formula from the LAMMPS documentation (which matches
# http://www.ccl.net/cca/documents/molecular-modeling/node4.html)
# Disclaimer:
# As of September 2012, I have not tested the code below. I think the
# equations are correct, but I don't know if their are special cases
# that require the coordinates to be rotated or processed beforehand.
# This is an experimental feature.
TRICLINIC="True"
PI=3.1415926535897931
BOXSIZE_X=$BOXSIZE_A
BOXSIZE_Y=`awk "BEGIN{print $BOXSIZE_B*sin($GAMMA*$PI/180.0)}"`
BOXSIZE_XY=`awk "BEGIN{print $BOXSIZE_B*cos($GAMMA*$PI/180.0)}"`
BOXSIZE_XZ=`awk "BEGIN{print $BOXSIZE_C*cos($BETA*$PI/180.0)}"`
BOXSIZE_YZ=`awk "BEGIN{ca=cos($ALPHA*$PI/180.0); cb=cos($BETA*$PI/180.0); cg=cos($GAMMA*$PI/180.0); sg=sin($GAMMA*$PI/180.0); c=$BOXSIZE_C; print c*(ca-(cg*cb))/sg}"`
BOXSIZE_Z=`awk "BEGIN{print sqrt(($BOXSIZE_C**2)-(($BOXSIZE_XZ**2)+($BOXSIZE_YZ**2)))}"`
else
BOXSIZE_X=$BOXSIZE_A
BOXSIZE_Y=$BOXSIZE_B
BOXSIZE_Z=$BOXSIZE_C
BOXSIZE_XY=0.0
BOXSIZE_XZ=0.0
BOXSIZE_YZ=0.0
fi
BOXSIZE_MINX=0.0
BOXSIZE_MINY=0.0
BOXSIZE_MINZ=0.0
BOXSIZE_MAXX=$BOXSIZE_X
BOXSIZE_MAXY=$BOXSIZE_Y
BOXSIZE_MAXZ=$BOXSIZE_Z
elif [ "$A" == "-atomstyle" ] || [ "$A" == "-atom-style" ] || [ "$A" == "-atom_style" ]; then
if [ "$i" -eq "$ARGC" ]; then
echo "$SYNTAX_MSG" >&2
exit 7
fi
i=$((i+1))
eval A=\${ARGV${i}}
if [ -z "$A" ]; then
echo "$SYNTAX_MSG" >&2
echo "-----------------------" >&2
echo "" >&2
echo "Error: The \"-atomstyle\" argument should be followed by an atom style." >&2
echo " (See the \"atom_style\" command in the LAMMPS documentation.\n" >&2
echo " Note: hybrid atom styles are allowed but should be enclosed in quotes.)\n" >&2
exit 8
fi
#echo " (atom_style=\"$A\")" >&2
#echo "" >&2
ATOM_STYLE="-atomstyle \"$A\""
# (minor detail: $ATOM_STYLE should also be appended to TTREE_ARGS)
if [ -z "$TTREE_ARGS" ]; then
TTREE_ARGS="$ATOM_STYLE"
else
TTREE_ARGS="${TTREE_ARGS} $ATOM_STYLE"
fi
#else: If the arguments are not understood in this script, then
# pass them on to "lttree.py"
else
if [ -z "$TTREE_ARGS" ]; then
TTREE_ARGS="\"$A\""
else
TTREE_ARGS="${TTREE_ARGS} \"$A\""
fi
# Check to see if this string ($A) ends in .lt or .LT
# If so, then set the base name of the output files
# to equal the base name of the .LT file being read.
# (Being careful here.
# Sometimes the last argument is not the .lt or .LT file.
# Sometimes that file appears earlier in the argument list.
# I want to supply a default value.)
#
# Note, in bash you can use:
# if [ "${LAST_ARG/%.lt/}" -neq "$LAST_ARG" ]; then
# OUT_FILE_BASE="${LAST_ARG/%.lt/}"
# But in the original bourn shell (sh), this does not work.
# Instead we use a hack involving basename and dirname:
A_FIRSTCHAR="$(echo $A| cut -c 1)"
if [ "$A_FIRSTCHAR" != "-" ]; then
DN=`dirname "$A"`
if [ "$DN" == "." ]; then
DN=""
else
DN="${DN}/"
fi
BN=`basename "$A" .lt`
if [ "${DN}${BN}" != "$A" ]; then
OUT_FILE_BASE="$BN"
else
BN=`basename "$A" .LT`
if [ "${DN}${BN}" != "$A" ]; then
OUT_FILE_BASE="$BN"
fi
fi
fi
fi
done
OUT_FILE_INPUT_SCRIPT="${OUT_FILE_BASE}.in"
OUT_FILE_INIT="${OUT_FILE_BASE}.in.init"
OUT_FILE_SETTINGS="${OUT_FILE_BASE}.in.settings"
OUT_FILE_DATA="${OUT_FILE_BASE}.data"
OUT_FILE_COORDS="${OUT_FILE_BASE}.in.coords"
rm -f "$OUT_FILE_INPUT_SCRIPT" "$OUT_FILE_INIT" "$OUT_FILE_SETTINGS" "$OUT_FILE_DATA" "$OUT_FILE_COORDS"
# --------------------------------------------------------------------
# --- Now run ttree/lttree to generate the file fragments we need. ---
# ------ (Afterwards, we will paste these fragments together.) -----
# --------------------------------------------------------------------
# If checking is not disabled, then first check for common spelling errors.
if [ -n "$LTTREE_CHECK_COMMAND" ]; then
if ! eval $LTTREE_CHECK_COMMAND $TTREE_ARGS; then
exit 1
fi
fi
# --- Run ttree. ---
#
# 3, 2, 1, ...
if ! eval $LTTREE_COMMAND $TTREE_ARGS; then
exit 2
fi
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# > Traceback (most recent call last):
# > File "./lttree.py", line...
# .-.
# (0.0)
# '=.|m|.='
# .='`"``=.
#
# Hopefully this does not happen.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo "" >&2
if [ -s "${data_atoms}" ]; then
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicate_atoms.py" \
< "${data_atoms}" \
> "${data_atoms}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_atoms}.tmp" "${data_atoms}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicate_atoms.py" \
< "${data_atoms}.template" \
> "${data_atoms}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_atoms}.tmp" "${data_atoms}.template"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/renumber_DATA_first_column.py" \
< "${data_atoms}" \
> "${data_atoms}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_atoms}.tmp" "${data_atoms}"
else
echo "Error: There are no atoms in your system." >&2
echo "" >&2
echo " Make sure that the object(s) you created are indeed molecules." >&2
echo " (Molecule objects must contain at least one" >&2
echo " write(\"${data_atoms}\") command.)" >&2
echo "" >&2
echo " (This error often occurs if you instantiated an object" >&2
echo " which you thought was a molecule, but it is actually" >&2
echo " only a namespace, a force-field name or category" >&2
echo " containing the definitions of other molecules.)" >&2
echo "" >&2
exit 200
fi
# ---------------- Interactions By Type -----------------
# At the time of writing, bonded-interactions-by-atom-type were not
# understood by LAMMPS. These features require auxilliary python scripts.
# These data sections must be processed before everything else (because
# they effect the other data sections, and the ttree_assignments.txt file.)
# -------------------------------------------------------
if [ -s "${data_bond_list}.template" ]; then
if [ ! -s "$data_bonds_by_type" ]; then
echo "Error: You have a \"Data Bond List\", section somewhere\n"
echo " without a \"Data Bonds By Type\" section to support it.\n"
echo " (Did you mean to use \"Data Bonds\" instead?)\n"
echo "Details:"
echo " Unlike the \"Data Bonds\" section, the \"Data Bond List\" section\n"
echo " allows the user to omit the bond types. Instead moltemplate attempts\n"
echo " to infer the type of bond by considering the pair of atom types.\n"
echo " However you must define a \"Data Bonds By Type\" section\n"
echo " to make this feature work (or use \"Data Bonds\" instead).\n"
exit 15
fi
echo "Looking up bond types according to atom type" >&2
#-- Generate a file containing bondid bondtype atomid1 atomid2 --
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/bonds_by_type.py" \
-atoms "${data_atoms}.template" \
-bond-list "${data_bond_list}.template" \
-bondsbytype "${data_bonds_by_type}.template" \
-prefix '$/bond:bytype' > gen_Bonds.template.tmp; then
exit 4
#WARNING: DO NOT REPLACE THIS WITH
#if ! $NBODY_COMMAND ...<-this sometimes causes a shell quotes-related error
fi
# ---- cleanup: ----
# ---- Create or re-build the "${data_bonds}.template" file ----
# Instert these lines into the "${data_bonds}.template" file which includes
# the newly generated interactions. (Note: these are in .template format)
cp gen_Bonds.template.tmp new_Bonds.template.tmp
if [ -s "${data_bonds}.template" ]; then
# Then append existing "Bonds" to the end of the generated interactions
# (Hopefully this way they will override those interactions.)
cat "${data_bonds}.template" >> new_Bonds.template.tmp
fi
mv -f new_Bonds.template.tmp "${data_bonds}.template"
# ------ THE NEXT STEP IS NOT CURRENTLY NEEDED ------
# All of the $bond variables have already been created, they just lack types
# However we will need to do this if the user wants to omits the bond-ids.
# In case I plan to allow the user to omit bond-ids, I leave this code here.
#
#echo "(Repairing ttree_assignments.txt file after bonds added.)" >&2
#
## ---- Repair the ttree_assignments.txt file ----
## The next 2 lines extract the variable names from data_new.template.tmp
## and instert them into the appropriate place in ttree_assignments.txt
## (renumbering the relevant variable-assignments to avoid clashes).
#if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_fix_ttree_assignments.py" \
# '/bond' gen_Bonds.template.tmp \
# < ttree_assignments.txt \
# > ttree_assignments.tmp; then
# exit 5
#fi
#
#echo "(Rendering ttree_assignments.tmp file after bonds added.)" >&2
#mv -f ttree_assignments.tmp ttree_assignments.txt
# ----------------------------------------------------
# ---- Re-build (render) the "$data_bonds" file ----
# Now substitute these variable values (assignments) into the variable
# names present in the .template file. (We want to convert the file from
# a .template format into an ordinary (numeric) LAMMPS data-section format.)
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/ttree_render.py" \
ttree_assignments.txt \
< "${data_bonds}.template" \
> "$data_bonds"; then
exit 6
fi
echo "" >&2
rm -f gen_Bonds.template.tmp new_Bonds.template.tmp
fi
if [ -s "$data_angles_by_type" ]; then
echo "Generating 3-body angle interactions by atom/bond type" >&2
#-- Generate a file containing the list of interactions on separate lines --
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_by_type.py" \
-subgraph nbody_Angles.py \
-section "Angles" \
-sectionbytype "Angles By Type" \
-atoms "${data_atoms}.template" \
-bonds "${data_bonds}.template" \
-nbodybytype "${data_angles_by_type}.template" \
-prefix '$/angle:bytype' > gen_Angles.template.tmp; then
exit 4
#WARNING: DO NOT REPLACE THIS WITH
#if ! $NBODY_COMMAND ...<-this sometimes causes a shell quotes-related error
fi
# ---- cleanup: ----
# ---- Re-build the "${data_angles}.template" file ----
# Instert these lines into the "${data_angles}.template" file which includes
# the newly generated interactions. (Note: these are in .template format)
cp gen_Angles.template.tmp new_Angles.template.tmp
if [ -s "${data_angles}.template" ]; then
# Then append existing "Angles" to the end of the generated interactions
# (Hopefully this way they will override those interactions.)
cat "${data_angles}.template" >> new_Angles.template.tmp
fi
mv -f new_Angles.template.tmp "${data_angles}.template"
echo "(Repairing ttree_assignments.txt file after angles added.)" >&2
# ---- Repair the ttree_assignments.txt file ----
# The next 2 lines extract the variable names from data_new.template.tmp
# and instert them into the appropriate place in ttree_assignments.txt
# (renumbering the relevant variable-assignments to avoid clashes).
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_fix_ttree_assignments.py" \
'/angle' gen_Angles.template.tmp \
< ttree_assignments.txt \
> ttree_assignments.tmp; then
exit 5
fi
echo "(Rendering ttree_assignments.tmp file after angles added.)" >&2
# ---- Re-build (render) the "$data_angles" file ----
# Now substitute these variable values (assignments) into the variable
# names present in the .template file. (We want to convert the file from
# a .template format into an ordinary (numeric) LAMMPS data-section format.)
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/ttree_render.py" \
ttree_assignments.tmp \
< "${data_angles}.template" \
> "$data_angles"; then
exit 6
fi
echo "" >&2
mv -f ttree_assignments.tmp ttree_assignments.txt
rm -f gen_Angles.template.tmp new_Angles.template.tmp
fi
if [ -s "$data_dihedrals_by_type" ]; then
echo "Generating 4-body dihedral interactions by atom/bond type" >&2
#-- Generate a file containing the list of interactions on separate lines --
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_by_type.py" \
-subgraph nbody_Dihedrals.py \
-section "Dihedrals" \
-sectionbytype "Dihedrals By Type" \
-atoms "${data_atoms}.template" \
-bonds "${data_bonds}.template" \
-nbodybytype "${data_dihedrals_by_type}.template" \
-prefix '$/dihedral:bytype' > gen_Dihedrals.template.tmp; then
exit 4
#WARNING: DO NOT REPLACE THIS WITH
#if ! $NBODY_COMMAND ...<-this sometimes causes a shell quotes-related error
fi
# ---- cleanup: ----
# ---- Re-build the "${data_dihedrals}.template" file ----
# Instert these lines into the "${data_dihedrals}.template" file which includes
# the newly generated interactions. (Note: these are in .template format)
cp gen_Dihedrals.template.tmp new_Dihedrals.template.tmp
if [ -s "${data_dihedrals}.template" ]; then
# Then append existing "Dihedrals" to the end of the generated interactions
# (Hopefully this way they will override those interactions.)
cat "${data_dihedrals}.template" >> new_Dihedrals.template.tmp
fi
mv -f new_Dihedrals.template.tmp "${data_dihedrals}.template"
echo "(Repairing ttree_assignments.txt file after dihedrals added.)" >&2
# ---- Repair the ttree_assignments.txt file ----
# The next 2 lines extract the variable names from data_new.template.tmp
# and instert them into the appropriate place in ttree_assignments.txt
# (renumbering the relevant variable-assignments to avoid clashes).
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_fix_ttree_assignments.py" \
'/dihedral' gen_Dihedrals.template.tmp \
< ttree_assignments.txt \
> ttree_assignments.tmp; then
exit 5
fi
echo "(Rendering ttree_assignments.tmp file after dihedrals added.)" >&2
# ---- Re-build (render) the "$data_dihedrals" file ----
# Now substitute these variable values (assignments) into the variable
# names present in the .template file. (We want to convert the file from
# a .template format into an ordinary (numeric) LAMMPS data-section format.)
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/ttree_render.py" \
ttree_assignments.tmp \
< "${data_dihedrals}.template" \
> "$data_dihedrals"; then
exit 6
fi
echo "" >&2
mv -f ttree_assignments.tmp ttree_assignments.txt
rm -f gen_Dihedrals.template.tmp new_Dihedrals.template.tmp
fi
if [ -s "$data_impropers_by_type" ]; then
echo "Generating 4-body improper interactions by atom/bond type" >&2
#-- Generate a file containing the list of interactions on separate lines --
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_by_type.py" \
-subgraph nbody_Impropers.py \
-section "Impropers" \
-sectionbytype "Impropers By Type" \
-atoms "${data_atoms}.template" \
-bonds "${data_bonds}.template" \
-nbodybytype "${data_impropers_by_type}.template" \
-prefix '$/improper:bytype' > gen_Impropers.template.tmp; then
exit 4
#WARNING: DO NOT REPLACE THIS WITH
#if ! $NBODY_COMMAND ...<-this sometimes causes a shell quotes-related error
fi
# ---- cleanup: ----
# ---- Re-build the "${data_impropers}.template" file ----
# Instert these lines into the "${data_impropers}.template" file which includes
# the newly generated interactions. (Note: these are in .template format)
cp gen_Impropers.template.tmp new_Impropers.template.tmp
if [ -s "${data_impropers}.template" ]; then
# Then append existing "Impropers" to the end of the generated interactions
# (Hopefully this way they will override those interactions.)
cat "${data_impropers}.template" >> new_Impropers.template.tmp
fi
mv -f new_Impropers.template.tmp "${data_impropers}.template"
echo "(Repairing ttree_assignments.txt file after impropers added.)" >&2
# ---- Repair the ttree_assignments.txt file ----
# The next 2 lines extract the variable names from data_new.template.tmp
# and instert them into the appropriate place in ttree_assignments.txt
# (renumbering the relevant variable-assignments to avoid clashes).
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_fix_ttree_assignments.py" \
'/improper' gen_Impropers.template.tmp \
< ttree_assignments.txt \
> ttree_assignments.tmp; then
exit 5
fi
echo "(Rendering ttree_assignments.tmp file after impropers added.)" >&2
# ---- Re-build (render) the "$data_impropers" file ----
# Now substitute these variable values (assignments) into the variable
# names present in the .template file. (We want to convert the file from
# a .template format into an ordinary (numeric) LAMMPS data-section format.)
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/ttree_render.py" \
ttree_assignments.tmp \
< "${data_impropers}.template" \
> "$data_impropers"; then
exit 6
fi
echo "" >&2
mv -f ttree_assignments.tmp ttree_assignments.txt
rm -f gen_Impropers.template.tmp new_Impropers.template.tmp
fi
if [ -n "$LTTREE_POSTPROCESS_COMMAND" ]; then
echo "" >&2
if ! eval $LTTREE_POSTPROCESS_COMMAND $TTREE_ARGS; then
exit 3
fi
echo "" >&2
fi
# -------------------------------------------------------
# If present, then remove duplicate bonds, angles, dihedrals, and impropers
# (unless overridden by the user).
# -------------------------------------------------------
if [ -s "${data_masses}" ]; then
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicate_atoms.py" \
< "${data_masses}" \
> "${data_masses}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_masses}.tmp" "${data_masses}"
fi
if [ -s "${data_bonds}" ]; then
if [ ! -z $REMOVE_DUPLICATE_BONDS ]; then
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_reorder_atoms.py" \
Bonds \
< "${data_bonds}" \
> "${data_bonds}.tmp"; then
ERR_INTERNAL
fi
cp -f "${data_bonds}.tmp" "${data_bonds}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 2 \
< "${data_bonds}" \
> "${data_bonds}.tmp"; then
ERR_INTERNAL
fi
mv "${data_bonds}.tmp" "${data_bonds}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 2 \
< "${data_bonds}.template" \
> "${data_bonds}.tmp"; then
ERR_INTERNAL
fi
mv "${data_bonds}.tmp" "${data_bonds}.template"
fi
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/renumber_DATA_first_column.py" \
< "${data_bonds}" \
> "${data_bonds}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_bonds}.tmp" "${data_bonds}"
fi
if [ -s "${data_angles}" ]; then
if [ ! -z $REMOVE_DUPLICATE_ANGLES ]; then
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_reorder_atoms.py" \
Angles \
< "${data_angles}" \
> "${data_angles}.tmp"; then
ERR_INTERNAL
fi
cp -f "${data_angles}.tmp" "${data_angles}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 3 \
< "${data_angles}" \
> "${data_angles}.tmp"; then
ERR_INTERNAL
fi
mv "${data_angles}.tmp" "${data_angles}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 3 \
< "${data_angles}.template" \
> "${data_angles}.tmp"; then
ERR_INTERNAL
fi
mv "${data_angles}.tmp" "${data_angles}".template
fi
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/renumber_DATA_first_column.py" \
< "${data_angles}" \
> "${data_angles}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_angles}.tmp" "${data_angles}"
fi
if [ -s "${data_dihedrals}" ]; then
if [ ! -z $REMOVE_DUPLICATE_DIHEDRALS ]; then
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_reorder_atoms.py" \
Dihedrals \
< "${data_dihedrals}" \
> "${data_dihedrals}.tmp"; then
ERR_INTERNAL
fi
cp -f "${data_dihedrals}.tmp" "${data_dihedrals}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 4 \
< "${data_dihedrals}" \
> "${data_dihedrals}.tmp"; then
ERR_INTERNAL
fi
mv "${data_dihedrals}.tmp" "${data_dihedrals}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 4 \
< "${data_dihedrals}.template" \
> "${data_dihedrals}.tmp"; then
ERR_INTERNAL
fi
mv "${data_dihedrals}.tmp" "${data_dihedrals}.template"
fi
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/renumber_DATA_first_column.py" \
< "${data_dihedrals}" \
> "${data_dihedrals}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_dihedrals}.tmp" "${data_dihedrals}"
fi
if [ -s "${data_impropers}" ]; then
if [ ! -z $REMOVE_DUPLICATE_IMPROPERS ]; then
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/nbody_reorder_atoms.py" \
Impropers \
< "${data_impropers}" \
> "${data_impropers}.tmp"; then
ERR_INTERNAL
fi
cp -f "${data_impropers}.tmp" "${data_impropers}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 4 \
< "${data_impropers}" \
> "${data_impropers}.tmp"; then
ERR_INTERNAL
fi
mv "${data_impropers}.tmp" "${data_impropers}"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/remove_duplicates_nbody.py" 4 \
< "${data_impropers}.template" \
> "${data_impropers}.tmp"; then
ERR_INTERNAL
fi
mv "${data_impropers}.tmp" "${data_impropers}.template"
fi
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/renumber_DATA_first_column.py" \
< "${data_impropers}" \
> "${data_impropers}.tmp"; then
ERR_INTERNAL
fi
mv -f "${data_impropers}.tmp" "${data_impropers}"
fi
# -------------------------------------------------------
NATOMTYPES=`awk '/^@\/atom:/{n++}END{print n}' < ttree_assignments.txt`
NBONDTYPES=`awk '/^@\/bond:/{n++}END{print n}' < ttree_assignments.txt`
NANGLETYPES=`awk '/^@\/angle:/{n++}END{print n}' < ttree_assignments.txt`
NDIHEDRALTYPES=`awk '/^@\/dihedral:/{n++}END{print n}' < ttree_assignments.txt`
NIMPROPERTYPES=`awk '/^@\/improper:/{n++}END{print n}' < ttree_assignments.txt`
#NATOMS=`awk '/^\$\/atom:/{n++}END{print n}' < ttree_assignments.txt`
#NBONDS=`awk '/^\$\/bond:/{n++}END{print n}' < ttree_assignments.txt`
#NANGLES=`awk '/^\$\/angle:/{n++}END{print n}' < ttree_assignments.txt`
#NDIHEDRALS=`awk '/^\$\/dihedral:/{n++}END{print n}' < ttree_assignments.txt`
#NIMPROPERS=`awk '/^\$\/improper:/{n++}END{print n}' < ttree_assignments.txt`
NATOMS="0"
NBONDS="0"
NANGLES="0"
NDIHEDRALS="0"
NIMPROPERS="0"
if [ -s "${data_atoms}" ]; then
NATOMS=`awk 'END{print NR}' < "${data_atoms}"`
fi
if [ -s "${data_bonds}" ]; then
NBONDS=`awk 'END{print NR}' < "${data_bonds}"`
fi
if [ -s "${data_angles}" ]; then
NANGLES=`awk 'END{print NR}' < "${data_angles}"`
fi
if [ -s "${data_dihedrals}" ]; then
NDIHEDRALS=`awk 'END{print NR}' < "${data_dihedrals}"`
fi
if [ -s "${data_impropers}" ]; then
NIMPROPERS=`awk 'END{print NR}' < "${data_impropers}"`
fi
rm -f "$OUT_FILE_DATA"
echo "LAMMPS Description" > "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
echo " $NATOMS atoms" >> "$OUT_FILE_DATA"
if [ -n "$NBONDS" ]; then
echo " $NBONDS bonds" >> "$OUT_FILE_DATA"
fi
if [ -n "$NANGLES" ]; then
echo " $NANGLES angles" >> "$OUT_FILE_DATA"
fi
if [ -n "$NDIHEDRALS" ]; then
echo " $NDIHEDRALS dihedrals" >> "$OUT_FILE_DATA"
fi
if [ -n "$NIMPROPERS" ]; then
echo " $NIMPROPERS impropers" >> "$OUT_FILE_DATA"
fi
echo "" >> "$OUT_FILE_DATA"
echo " $NATOMTYPES atom types" >> "$OUT_FILE_DATA"
if [ -n "$NBONDTYPES" ]; then
echo " $NBONDTYPES bond types" >> "$OUT_FILE_DATA"
fi
if [ -n "$NANGLETYPES" ]; then
echo " $NANGLETYPES angle types" >> "$OUT_FILE_DATA"
fi
if [ -n "$NDIHEDRALTYPES" ]; then
echo " $NDIHEDRALTYPES dihedral types" >> "$OUT_FILE_DATA"
fi
if [ -n "$NIMPROPERTYPES" ]; then
echo " $NIMPROPERTYPES improper types" >> "$OUT_FILE_DATA"
fi
echo "" >> "$OUT_FILE_DATA"
# --- PERIODIC BOUNDARY CONDITIONS ---
# Note: If there is a "$data_boundary" file present, it overrides any settings
# which may have been stored in a pdb file or other external file.
if [ -s "$data_pbc" ] && [ ! -s "$data_boundary" ]; then
mv -f "$data_pbc" "$data_boundary"
echo "WARNING: write_once(\"$data_pbc\") is depreciated" >&2
echo " Use write_once(\"$data_boundary\") instead" >&2
fi
if [ -s "$data_boundary" ]; then
# Copy the boundary conditions from the "$data_boundary" file.
# Don't assume there is only one line containing "xlo xhi", for example.
# It's possible the user wrote the boundary conditions multiple times.
# As always, the most recent setting overrides the earlier settings.
BOXSIZE_MINX=`awk '{if ($3=="xlo") {xlo=$1}} END{print xlo}' < "$data_boundary"`
BOXSIZE_MAXX=`awk '{if ($4=="xhi") {xhi=$2}} END{print xhi}' < "$data_boundary"`
BOXSIZE_MINY=`awk '{if ($3=="ylo") {ylo=$1}} END{print ylo}' < "$data_boundary"`
BOXSIZE_MAXY=`awk '{if ($4=="yhi") {yhi=$2}} END{print yhi}' < "$data_boundary"`
BOXSIZE_MINZ=`awk '{if ($3=="zlo") {zlo=$1}} END{print zlo}' < "$data_boundary"`
BOXSIZE_MAXZ=`awk '{if ($4=="zhi") {zhi=$2}} END{print zhi}' < "$data_boundary"`
if [ -z "$BOXSIZE_MINX" ] || [ -z "$BOXSIZE_MAXX" ]; then
echo "Error: Problem with box boundary format (\"xlo xhi\") in \"$data_boundary\"" >&2
exit 12
fi
if [ -z "$BOXSIZE_MINY" ] || [ -z "$BOXSIZE_MAXY" ]; then
echo "Error: Problem with box boundary format (\"ylo yhi\") in \"$data_boundary\"" >&2
exit 12
fi
if [ -z "$BOXSIZE_MINZ" ] || [ -z "$BOXSIZE_MAXZ" ]; then
echo "Error: Problem with box boundary format (\"zlo zhi\") in \"$data_boundary\"" >&2
exit 12
fi
BOXSIZE_XY=`awk '{if ($4=="xy") {xy=$1}} END{print xy}' < "$data_boundary"`
BOXSIZE_XZ=`awk '{if ($5=="xz") {xz=$2}} END{print xz}' < "$data_boundary"`
BOXSIZE_YZ=`awk '{if ($6=="yz") {yz=$3}} END{print yz}' < "$data_boundary"`
if [ -n "$BOXSIZE_XY" ] || [ -n "$BOXSIZE_XZ" ] || [ -n "$BOXSIZE_YZ" ]; then
if [ -n "$BOXSIZE_XY" ] && [ -n "$BOXSIZE_XZ" ] && [ -n "$BOXSIZE_YZ" ]; then
#echo "triclinic_parameters: XY XZ YZ = $BOXSIZE_XY $BOXSIZE_XZ $BOXSIZE_YZ" >&2
TRICLINIC="True"
else
echo "Error: Problem with triclinic format (\"xy xz yz\") in \"$data_boundary\"" >&2
exit 13
fi
fi
fi
if [ -z "$BOXSIZE_MINX" ] || [ -z "$BOXSIZE_MAXX" ] || [ -z "$BOXSIZE_MINY" ] || [ -z "$BOXSIZE_MAXY" ] || [ -z "$BOXSIZE_MINZ" ] || [ -z "$BOXSIZE_MAXZ" ]; then
echo "Periodic boundary conditions unspecified. Attempting to generate automatically." >&2
# By default, disable triclinic
BOXSIZE_XY=""
BOXSIZE_XZ=""
BOXSIZE_YZ=""
TRICLINIC=""
if [ -s "$tmp_atom_coords" ]; then
# Estimate the minimimum, maximum x,y,z values
# from the coordinate data.
MINMAX_BOUNDS=`awk 'BEGIN{first=1}{if (NF>=3){x=$1; y=$2; z=$3; if (first) {first=0; xmin=x; xmax=x; ymin=y; ymax=y; zmin=z; zmax=z;} else {if (x<xmin) xmin=x; if (x>xmax) xmax=x; if (y<ymin) ymin=y; if (y>ymax) ymax=y; if (z<zmin) zmin=z; if (z>zmax) zmax=z;}}} END{print xmin" "xmax" "ymin" "ymax" "zmin" "zmax;}' < "$tmp_atom_coords"`
# ...and add a narrow margin (10%) around the boundaries:
BOXSIZE_MINX=`echo $MINMAX_BOUNDS | awk "{margin=0.1; width=$2-$1; print $1-0.5*margin*width}"`
BOXSIZE_MAXX=`echo $MINMAX_BOUNDS | awk "{margin=0.1; width=$2-$1; print $2+0.5*margin*width}"`
BOXSIZE_MINY=`echo $MINMAX_BOUNDS | awk "{margin=0.1; width=$4-$3; print $3-0.5*margin*width}"`
BOXSIZE_MAXY=`echo $MINMAX_BOUNDS | awk "{margin=0.1; width=$4-$3; print $4+0.5*margin*width}"`
BOXSIZE_MINZ=`echo $MINMAX_BOUNDS | awk "{margin=0.1; width=$6-$5; print $5-0.5*margin*width}"`
BOXSIZE_MAXZ=`echo $MINMAX_BOUNDS | awk "{margin=0.1; width=$6-$5; print $6+0.5*margin*width}"`
else
# By default, choose some reasonably large box:
BOXSIZE_MINX="-100.0"
BOXSIZE_MAXX="100.0"
BOXSIZE_MINY="-100.0"
BOXSIZE_MAXY="100.0"
BOXSIZE_MINZ="-100.0"
BOXSIZE_MAXZ="100.0"
# ...and print message scolding the user for being lazy
echo "----------------------------------------------------------------------" >&2
echo "---- WARNING: Unable to determine periodic boundary conditions. ----" >&2
echo "---- (A default cube of volume=(200.0)^3 was used. ----" >&2
echo "---- This is probably not what you want!) ----" >&2
echo "---- It is recommended that you specify your periodic boundary ----" >&2
echo "---- by adding a write_once(\"Boundary\") command to your .lt file. ----" >&2
echo "---- For example: ----" >&2
#echo "----------------------------------------------------------------------" >&2
echo "---- ----" >&2
echo "---- write_once(\"Boundary\") { ----" >&2
echo "---- 2.51 46.79 xlo xhi ----" >&2
echo "---- -4.38 35.824 ylo yhi ----" >&2
echo "---- 0.3601 42.95 zlo zhi ----" >&2
echo "---- } ----" >&2
echo "----------------------------------------------------------------------" >&2
fi
fi
if [ -z "$TRICLINIC" ]; then
echo " $BOXSIZE_MINX $BOXSIZE_MAXX xlo xhi" >> "$OUT_FILE_DATA"
echo " $BOXSIZE_MINY $BOXSIZE_MAXY ylo yhi" >> "$OUT_FILE_DATA"
echo " $BOXSIZE_MINZ $BOXSIZE_MAXZ zlo zhi" >> "$OUT_FILE_DATA"
else
echo "triclinic parameters: XY XZ YZ = $BOXSIZE_XY $BOXSIZE_XZ $BOXSIZE_YZ" >&2
echo "" >&2
# Otherwise, this is a triclinic (non orthoganal) crystal basis.
# LAMMPS represents triclinic symmetry using a different set of parameters
# (lx,ly,lz,xy,xz,yz) than the PDB file format (alpha,beta,gamma).
echo " $BOXSIZE_MINX $BOXSIZE_MAXX xlo xhi" >> "$OUT_FILE_DATA"
echo " $BOXSIZE_MINY $BOXSIZE_MAXY ylo yhi" >> "$OUT_FILE_DATA"
echo " $BOXSIZE_MINZ $BOXSIZE_MAXZ zlo zhi" >> "$OUT_FILE_DATA"
#echo " 0.000000 $BOXSIZE_X xlo xhi" >> "$OUT_FILE_DATA"
#echo " 0.000000 $BOXSIZE_Y ylo yhi" >> "$OUT_FILE_DATA"
#echo " 0.000000 $BOXSIZE_Z zlo zhi" >> "$OUT_FILE_DATA"
echo " $BOXSIZE_XY $BOXSIZE_XZ $BOXSIZE_YZ xy xz yz" >> "$OUT_FILE_DATA"
#echo "a,b,c,alpha,beta,gamma = $BOXSIZE_A,$BOXSIZE_B,$BOXSIZE_C,$ALPHA,$BETA,$GAMMA"
fi
echo "" >> "$OUT_FILE_DATA"
if [ -s "$data_header" ]; then
cat "$data_header" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_masses" ]; then
echo "Masses" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_masses" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
echo "WARNING: missing file \"$data_masses\"" >&2
fi
if [ -s "$data_pair_coeffs" ]; then
echo "Pair Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_pair_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
if [ ! -s "$in_settings" ] || (! grep -q pair_coeff "$in_settings"); then
echo "WARNING: no pair coeffs have been set!" >&2
fi
fi
if [ -s "$data_bond_coeffs" ]; then
echo "Bond Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_bond_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
if [ -n "$NBONDTYPES" ] && ( [ ! -s "$in_settings" ] || (! grep -q bond_coeff "$in_settings") ); then
echo "WARNING: no bond coeff have been set!" >&2
fi
fi
if [ -s "$data_angle_coeffs" ]; then
echo "Angle Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_angle_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
if [ -n "$NANGLETYPES" ] && ( [ ! -s "$in_settings" ] || (! grep -q angle_coeff "$in_settings") ); then
echo "WARNING: no angle coeffs have been set!" >&2
fi
fi
if [ -s "$data_dihedral_coeffs" ]; then
echo "Dihedral Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_dihedral_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
if [ -n "$NDIHEDRALTYPES" ] && ( [ ! -s "$in_settings" ] || (! grep -q dihedral_coeff "$in_settings") ); then
echo "WARNING: no dihedral coeffs have been set!" >&2
fi
fi
if [ -s "$data_improper_coeffs" ]; then
echo "Improper Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_improper_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
if [ -n "$NIMPROPERTYPES" ] && ( [ ! -s "$in_settings" ] || (! grep -q improper_coeff "$in_settings") ); then
echo "WARNING: no improper coeffs have been set!" >&2
fi
fi
# data file sections specific to class2 force-fields:
if [ -s "$data_bondbond_coeffs" ]; then
echo "BondBond Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_bondbond_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_bondangle_coeffs" ]; then
echo "BondAngle Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_bondangle_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_middlebondtorsion_coeffs" ]; then
echo "MiddleBondTorsion Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_middlebondtorsion_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_endbondtorsion_coeffs" ]; then
echo "EndBondTorsion Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_endbondtorsion_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_angletorsion_coeffs" ]; then
echo "AngleTorsion Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_angletorsion_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_angleangletorsion_coeffs" ]; then
echo "AngleAngleTorsion Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_angleangletorsion_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_bondbond13_coeffs" ]; then
echo "BondBond13 Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_bondbond13_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_angleangle_coeffs" ]; then
echo "AngleAngle Coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_angleangle_coeffs" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_atoms" ]; then
echo "Atoms" >> "$OUT_FILE_DATA"
if [ -s "$tmp_atom_coords" ]; then
echo "# (Note: x,y,z coordinates may overlap and can be modified later.)" >> "$OUT_FILE_DATA"
else
echo "" >> "$OUT_FILE_DATA"
fi
cat "$data_atoms" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
else
echo "WARNING: missing file \"$data_atoms\"" >&2
fi
if [ -s "$data_ellipsoids" ]; then
echo "Ellipsoids" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_ellipsoids" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_triangles" ]; then
echo "Triangles" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_triangles" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_lines" ]; then
echo "Lines" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_lines" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_velocities" ]; then
echo "Velocities" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_velocities" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
#else
# echo "Velocities" >> "$OUT_FILE_DATA"
# echo "" >> "$OUT_FILE_DATA"
# awk '{print $1 " 0.0 0.0 0.0"}' < "$data_atoms" >> "$OUT_FILE_DATA"
# echo "" >> "$OUT_FILE_DATA"
fi
if [ -s "$data_bonds" ]; then
echo "Bonds" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_bonds" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
#else
# echo "WARNING: missing file \"$data_bonds\"" >&2
fi
if [ -s "$data_angles" ]; then
echo "Angles" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_angles" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
#else
# echo "WARNING: missing file \"$data_angles\"" >&2
fi
if [ -s "$data_dihedrals" ]; then
echo "Dihedrals" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_dihedrals" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
#else
# echo "WARNING: missing file \"$data_dihedrals\"" >&2
fi
if [ -s "$data_impropers" ]; then
echo "Impropers" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$data_impropers" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
#else
# echo "WARNING: missing file \"$data_impropers\"" >&2
fi
rm -f $OUT_FILE_INPUT_SCRIPT
if [ -s "$in_init" ]; then
echo "" >> $OUT_FILE_INPUT_SCRIPT
cp -f "$in_init" $OUT_FILE_INIT
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "# ----------------- Init Section -----------------" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "include \"$OUT_FILE_INIT\"" >> $OUT_FILE_INPUT_SCRIPT
#echo "# \"$in_init\" typically contains various styles, dimensions, and units:" >> $OUT_FILE_INPUT_SCRIPT
#echo "include \"$in_init\"" >> $OUT_FILE_INPUT_SCRIPT
#cat "$in_init" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
fi
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "# ----------------- Atom Definition Section -----------------" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "read_data \"$OUT_FILE_DATA\"" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "# ----------------- Settings Section -----------------" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
if [ -s "$in_settings" ]; then
#echo "# \"$in_settings\" typically contains coeffs, fixes, groups & modify commands:" >> $OUT_FILE_INPUT_SCRIPT
#echo "include \"$in_settings\"" >> $OUT_FILE_INPUT_SCRIPT
#cat "$in_settings" >> $OUT_FILE_INPUT_SCRIPT
cp -f "$in_settings" $OUT_FILE_SETTINGS
echo "include \"$OUT_FILE_SETTINGS\"" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
fi
if [ -s "$tmp_atom_coords" ]; then
NATOMS=`awk '/^\\\$\/atom:/{n++}END{print n}' < ttree_assignments.txt`
NATOMCRDS=`awk '{if (NF>=3) natom+=1} END{print(natom)}' < "$tmp_atom_coords"`
if [ $NATOMS -ne $NATOMCRDS ]; then
echo "Error: Number of atoms in coordinate file provided by user ($NATOMCRDS)" >&2
echo "does not match the number of atoms generated in ttree file ($NATOMS)" >&2
exit 14
fi
# Copy the coordinates in $tmp_atom_coords into $OUT_FILE_DATA
rm -f "$OUT_FILE_COORDS"
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/raw2data.py" $ATOM_STYLE "$OUT_FILE_DATA" < "$tmp_atom_coords" > "$OUT_FILE_COORDS"; then
ERR_INTERNAL
fi
mv -f "$OUT_FILE_COORDS" "$OUT_FILE_DATA"
# Previously, in earlier versions of moltemplate, we used to
# create a new input script containing "set" commands which the
# user was supposed to tell LAMMPS to read using an "include" command.
# If for some reason, you want to go back to doing it that way, then
# uncomment the following 6 lines:
#
#rm -f "$OUT_FILE_COORDS"
#awk '{if (NF>=3) {natom++; print "set atom "natom" x "$1" y "$2" z "$3" image 0 0 0"}}' < "$tmp_atom_coords" >> "$OUT_FILE_COORDS"
#echo "# Load the atom coordinates:" >> $OUT_FILE_INPUT_SCRIPT
#echo "" >> $OUT_FILE_INPUT_SCRIPT
#echo "include \"$OUT_FILE_COORDS\"" >> $OUT_FILE_INPUT_SCRIPT
#echo "" >> $OUT_FILE_INPUT_SCRIPT
else
rm -f "$OUT_FILE_COORDS"
# echo "Warning: (moltemplate.sh)" >&2
# echo " Atomic coordinates were not supplied externally" >&2
# echo " (for example using the \"-pdb\" or \"-xyz\" arguments)." >&2
# echo " Hopefully you used rot(), trans() lttree commands to move" >&2
# echo " molecules to non-overlapping positions." >&2
fi
# ############## CLEAN UP ################
# A lot of files have been created along the way.
# However only a few of them are actually useful.
#
# Optional: clean up some non-essential temporary
# files created by running ttree
# We move the non-essential files into a different directory
# (but we don't delete them).
if [ ! -d output_ttree ]; then
mkdir output_ttree
fi
# Move temporary files into the "output_ttree/" directory:
OIFS=$IFS
#IFS=$'\n'
IFS="
"
for file in $MOLTEMPLATE_TEMP_FILES; do
#echo "file=\"$file\""
rm -f "output_ttree/$file" >/dev/null 2>&1 || true
if [ -e "$file" ]; then
#mv "$file" output_ttree/ >/dev/null 2>&1 || true
#dos2unix < "$file" > "output_ttree/$file"
tr -d '\r' < "$file" > "output_ttree/$file"
rm -f "$file" >/dev/null 2>&1 || true
fi
done
IFS=$OIFS
# ############## DEAL WITH CUSTOM NON-STANDARD SECTIONS ################
N_data_prefix=`expr length "$data_prefix"`
ls "${data_prefix}"* 2> /dev/null | while read file_name; do
#If using bash:
#section_name="${file_name:$N_data_prefix}"
#If using sh:
section_name=`expr substr "$file_name" $(($N_data_prefix+1)) 1000000`
# Create a new section in the data file
# matching the portion of the name of
# the file after the data_prefix.
echo "" >> "$OUT_FILE_DATA"
echo "$section_name" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
cat "$file_name" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
mv -f "$file_name" output_ttree/
done
if [ -e "$data_prefix_no_space" ]; then
echo "" >> "$OUT_FILE_DATA"
cat "$data_prefix_no_space" >> "$OUT_FILE_DATA"
echo "" >> "$OUT_FILE_DATA"
mv -f "$data_prefix_no_space" output_ttree/
fi
if [ -e "$OUT_FILE_DATA" ]; then
mv -f "$OUT_FILE_DATA" "$OUT_FILE_DATA.tmp" >/dev/null 2>&1 || true
#dos2unix < "$OUT_FILE_DATA.tmp" > "$OUT_FILE_DATA"
tr -d '\r' < "$OUT_FILE_DATA.tmp" > "$OUT_FILE_DATA"
rm -f "$OUT_FILE_DATA.tmp" >/dev/null 2>&1 || true
fi
N_in_prefix=`expr length "$in_prefix"`
ls "${in_prefix}"* 2> /dev/null | while read file_name; do
#If using bash:
#section_name="${file_name:$N_in_prefix}"
#If using sh:
SECTION_NAME=`expr substr "$file_name" $(($N_in_prefix+1)) 1000000`
FILE_SUFFIX=`echo "$SECTION_NAME" | awk '{print tolower($0)}'`
# Create a new section in the lammps input script
# matching the portion of the name of
# the file after the in_prefix.
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "# ----------------- $SECTION_NAME Section -----------------" >> $OUT_FILE_INPUT_SCRIPT
cp -f "$file_name" ${OUT_FILE_INPUT_SCRIPT}.${FILE_SUFFIX}
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "include \"${OUT_FILE_INPUT_SCRIPT}.${FILE_SUFFIX}\"" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
mv -f "$file_name" output_ttree/
done
if [ -e "$in_prefix_no_space" ]; then
echo "" >> $OUT_FILE_INPUT_SCRIPT
cat "$in_prefix_no_space" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
mv -f "$in_prefix_no_space" output_ttree/
fi
# Swap the order of atom types I, J in all "pair_coeff I J ..." commands
# whenever I > J. Do this for every input script file generated by moltemplate.
# (Perhaps later I'll check to make sure the user did not specify contradictory
# "pair_coeff I J ..." and "pair_coeff J I ..." commands, but I won't do it
# here, because at this point we've thrown away the original atom type names,
# so there's no easy way to explain the problem to the user if there is one.)
echo "" > input_scripts_so_far.tmp
for file_name in "$OUT_FILE_INIT" "$OUT_FILE_INPUT_SCRIPT" "$OUT_FILE_SETTINGS"; do
if [ -s "$file_name" ]; then
echo "postprocessing file \"$file_name\"" >&2
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/postprocess_input_script.py" input_scripts_so_far.tmp < "$file_name" > "$file_name".tmp; then
ERR_INTERNAL
fi
echo "" >&2
mv "$file_name".tmp "$file_name"
#cat "$file_name" >> input_scripts_so_far.tmp
#dos2unix < "$file_name" >> input_scripts_so_far.tmp
tr -d '\r' < "$file_name" >> input_scripts_so_far.tmp
fi
done
ls "${in_prefix}"* 2> /dev/null | while read file_name; do
echo "postprocessing file \"$file_name\"" >&2
if ! $PYTHON_COMMAND "${SCRIPT_DIR}/postprocess_input_script.py" input_scripts_so_far.tmp < "$file_name" > "$file_name".tmp; then
ERR_INTERNAL
fi
echo "" >&2
mv "$file_name".tmp "$file_name"
cat "$file_name" >> input_scripts_so_far.tmp
done
rm -f input_scripts_so_far.tmp
# ############ Optional: Add a fake run section as an example ############
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "# ----------------- Run Section -----------------" >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
echo "# The lines above define the system you want to simulate." >> $OUT_FILE_INPUT_SCRIPT
echo "# What you do next is up to you." >> $OUT_FILE_INPUT_SCRIPT
echo "# Typically a user would minimize and equilibrate" >> $OUT_FILE_INPUT_SCRIPT
echo "# the system using commands similar to the following:" >> $OUT_FILE_INPUT_SCRIPT
echo "# ---- examples ----" >> $OUT_FILE_INPUT_SCRIPT
echo "#" >> $OUT_FILE_INPUT_SCRIPT
echo "# -- minimize --" >> $OUT_FILE_INPUT_SCRIPT
echo "# minimize 1.0e-5 1.0e-7 1000 10000" >> $OUT_FILE_INPUT_SCRIPT
echo "# (Note: Some fixes, for example \"shake\", interfere with the minimize command," >> $OUT_FILE_INPUT_SCRIPT
echo "# You can use the \"unfix\" command to disable them before minimization.)" >> $OUT_FILE_INPUT_SCRIPT
echo "# -- declare time step for normal MD --" >> $OUT_FILE_INPUT_SCRIPT
echo "# timestep 1.0" >> $OUT_FILE_INPUT_SCRIPT
echo "# -- run at constant pressure (Nose-Hoover)--" >> $OUT_FILE_INPUT_SCRIPT
#echo "# timestep 1.0" >> $OUT_FILE_INPUT_SCRIPT
echo "# fix fxnpt all npt temp 300.0 300.0 100.0 iso 1.0 1.0 1000.0 drag 1.0">>$OUT_FILE_INPUT_SCRIPT
echo "# -- ALTERNATELY, run at constant volume (Nose-Hoover) --" >> $OUT_FILE_INPUT_SCRIPT
echo "# fix fxnvt all nvt temp 300.0 300.0 500.0 tchain 1" >> $OUT_FILE_INPUT_SCRIPT
echo "# -- ALTERNATELY, run at constant volume using Langevin dynamics. --" >> $OUT_FILE_INPUT_SCRIPT
echo "# -- (This is good for sparse CG polymers in implicit solvent.) --" >> $OUT_FILE_INPUT_SCRIPT
echo "fix fxlan all langevin 300.0 300.0 5000 48279" >> $OUT_FILE_INPUT_SCRIPT
echo "# -- Now, finally run the simulation --" >> $OUT_FILE_INPUT_SCRIPT
echo "# run 50000" >> $OUT_FILE_INPUT_SCRIPT
#echo "# write_restart system_after_nvt.rst" >> $OUT_FILE_INPUT_SCRIPT
#echo "# run 50000" >> $OUT_FILE_INPUT_SCRIPT
#echo "# write_restart system_after_npt.rst" >> $OUT_FILE_INPUT_SCRIPT
echo "# ---- (end of examples) ----">> $OUT_FILE_INPUT_SCRIPT
#echo "# It is the responsibility of the user to learn LAMMPS and specify these">>$OUT_FILE_INPUT_SCRIPT
#echo "# these commands." >> $OUT_FILE_INPUT_SCRIPT
echo "" >> $OUT_FILE_INPUT_SCRIPT
# Finally, if the -vmd argument was included, start up VMD and
# view the system (using topotools to convert the
if [ ! -z $RUN_VMD_AT_END ]; then
echo "topo readlammpsdata $OUT_FILE_DATA full" > vmd_viz_moltemplate.tcl.tmp
bn=`basename $OUT_FILE_DATA .data`
echo "animate write psf $bn.psf" >> vmd_viz_moltemplate.tcl.tmp
vmd -e vmd_viz_moltemplate.tcl.tmp
rm -rf vmd_viz_moltemplate.tcl.tmp
fi
diff --git a/tools/moltemplate/src/nbody_by_type.py b/tools/moltemplate/src/nbody_by_type.py
index 486844c23..1207742b4 100755
--- a/tools/moltemplate/src/nbody_by_type.py
+++ b/tools/moltemplate/src/nbody_by_type.py
@@ -1,639 +1,639 @@
#!/usr/bin/env python
# Author: Andrew Jewett (jewett.aij at g mail)
# http://www.chem.ucsb.edu/~sheagroup
# License: 3-clause BSD License (See LICENSE.TXT)
# Copyright (c) 2011, Regents of the University of California
# All rights reserved.
man_page_text = """
nbody_by_type.py reads a LAMMPS data file (or an excerpt of a LAMMPS)
data file containing bonded many-body interactions by atom type
(and bond type), and generates a list of additional interactions
in LAMMPS format consistent with those type (to the standard out).
Typical Usage:
nbody_by_type.py X < old.data > new.data
--or--
nbody_by_type.py X \\
-atoms atoms.data \\
-bonds bonds.data \\
-nbody X.data \\
-nbodybytype X_by_type.data \\
> new_X.data
In both cases "X" denotes the interaction type, which
is either "Angles", "Dihedrals", or "Impropers".
(Support for other interaction types can be added by the user. See below.)
-------- Example 1 -------
nbody_by_type.py X < old.data > new.data
In this example, nbody_by_type.py reads a LAMMPS data file
"orig.data", and extracts the relevant section ("Angles",
"Dihedrals", or "Impropers"). It also looks a section named "X By Type",
(eg. "Angles By type", "Impropers By type", "Impropers By type")
which contains a list of criteria for automatically defining additional
interactions of that type. For example, this file might contain:
Angle By Type
7 1 2 1 * *
8 2 2 * * *
9 3 4 3 * *
The first column is an interaction type ID.
The next 3 columns are atom type identifiers.
The final 2 columns are bond type identifiers.
The * is a wildcard symbol indicating there is no preference for bond types
in this example. (Optionally, regular expressions can also be used to
define a type match, by enclosing the atom or bond type in / slashes.)
The first line tells us to that there should be a 3-body "Angle"
interaction of type "7" whenever an atom of type 1 is bonded to an atom
of type "2", which is bonded to another atom of type "1" again.
The second line tells us that an angle is defined whenever three atoms
are bonded together and the first two are of type "2".
(Redundant angle interactions are filtered.)
New interactions are created for every group of bonded
atoms which match these criteria if they are bonded together
in the relevant way for that interaction type (as determined by
nbody_X.py), and printed to the standard output. For example,
suppose you are automatically generating 3-body "Angle" interactions using:
nbody_by_type Angles < old.data > new.data
The file "new.data" will be identical to "old.data", however the
"Angles By Type" section will be deleted, and the following lines of
text will be added to the "Angles" section:
394 7 5983 5894 5895
395 7 5984 5895 5896
396 7 5985 5896 5897
: : : : :
847 9 14827 14848 14849
The numbers in the first column are counters which assign a ID to
every interaction of that type, and start where the original "Angles"
data left off (New angle ID numbers do not overlap with old ID numbers).
The text in the second column ("7", "9", ...) matches the text from the
first column of the "Angle By Type" section of the input file.
-------- Example 2 -------
nbody_by_type.py X \\
-atoms atoms.data \\
-bonds bonds.data \\
-nbody X.data \\
-nbodybytype X_by_type.data \\
-prefix "SOMESTRING" -suffix "ANOTHERSTRING" \\
> new_X.data
In particular, for Angle interactions:
nbody_by_type.py Angles \\
-atoms atoms.data \\
-bonds bonds.data \\
-nbody angles.data \\
-nbodybytype angles_by_type.data \\
> new_Angles.data
When run this way, nbody_by_type.py behaves exactly the same way
as in Example 1, however only the lines of text corresponding to
the new generated interactions are printed, (not the entire data file).
Also note, that when run this way, nbody_by_type.py does not read the
LAMMPS data from the standard input. Instead, it reads each section of
the data file from a different file indicated by the arguments following
the "-atoms", "-bonds", "-nbody", and "-nbodybytype" flags.
"Angles" is a 3-body interaction style. So when run this way,
nbody_by_type.py will create a 5 (=3+2) column file (new_Angles.data).
Note: the atom, bond and other IDs/types in need not be integers.
Note: This program must be distributed with several python modules, including:
nbody_Angles.py, nbody_Dihedrals.py, and nbody_Impropers.py. These
contain bond definitions for angular, dihedral, and improper interactions.
(In case any new interaction types are ever added to LAMMPS, with only
a few lines of python it is easy to edit to define new bonded
interaction types by supplying new "nbody_X.py" python module.
Refer to the modules listed above for examples.)
Note: Optional "-prefix" and "-suffix" arguments can be included to decorate
the interaction IDs (first column). For example, -prefix "auto_" and
-suffix "_angle", causes "new_Angles.data" to contain the following text:
auto_394_angle 7 5983 5894 5895
auto_395_angle 7 5984 5895 5896
auto_396_angle 7 5985 5896 5897
: : : : :
auto_847_angle 9 14827 14848 14849
"""
import sys
from extract_lammps_data import *
from nbody_by_type_lib import GenInteractions_str
from ttree_lex import *
from lttree_styles import AtomStyle2ColNames, ColNames2AidAtypeMolid
if sys.version < '2.6':
raise InputError('Error: Using python '+sys.version+'\n'
' Alas, you must upgrade to a newer version of python (2.6 or later).')
elif sys.version < '2.7':
sys.stderr.write('--------------------------------------------------------\n'
'----------------- WARNING: OLD PYTHON VERSION ----------\n'
' This program is untested on your python version ('+sys.version+').\n'
' PLEASE LET ME KNOW IF THIS PROGRAM CRASHES (and upgrade python).\n'
' -Andrew 2013-10-25\n'
'--------------------------------------------------------\n'
'--------------------------------------------------------\n')
from ordereddict import OrderedDict
else:
from collections import OrderedDict
def GenInteractions_lines(lines_atoms,
lines_bonds,
lines_nbody,
lines_nbodybytype,
atom_style,
g_bond_pattern,
canonical_order, #function to sort atoms and bonds
prefix='',
suffix='',
report_progress = False):
column_names = AtomStyle2ColNames(atom_style)
i_atomid, i_atomtype, i_molid = ColNames2AidAtypeMolid(column_names)
atomids_str = []
atomtypes_str = []
for iv in range(0, len(lines_atoms)):
line = lines_atoms[iv].strip()
if '#' in line:
icomment = line.find('#')
line = (line[:icomment]).strip()
if len(line) > 0:
tokens = SplitQuotedString(line)
if ((len(tokens) <= i_atomid) or (len(tokens) <= i_atomtype)):
raise(InputError('Error not enough columns on line '+str(iv+1)+' of \"Atoms\" section.'))
tokens = SplitQuotedString(line)
atomids_str.append(EscCharStrToChar(tokens[i_atomid]))
atomtypes_str.append(EscCharStrToChar(tokens[i_atomtype]))
bondids_str = []
bondtypes_str = []
bond_pairs = []
for ie in range(0, len(lines_bonds)):
line = lines_bonds[ie].strip()
if '#' in line:
icomment = line.find('#')
line = (line[:icomment]).strip()
if len(line) > 0:
tokens = SplitQuotedString(line)
if len(tokens) < 4:
raise(InputError('Error not enough columns on line '+str(ie+1)+' of \"Bonds\" section.'))
bondids_str.append(EscCharStrToChar(tokens[0]))
bondtypes_str.append(EscCharStrToChar(tokens[1]))
bond_pairs.append( (EscCharStrToChar(tokens[2]),
EscCharStrToChar(tokens[3])) )
typepattern_to_coefftypes = []
for i in range(0, len(lines_nbodybytype)):
line = lines_nbodybytype[i].strip()
if '#' in line:
icomment = line.find('#')
line = (line[:icomment]).strip()
if len(line) > 0:
tokens = SplitQuotedString(line)
if ((len(tokens) != 1 + g_bond_pattern.GetNumVerts()) and
(len(tokens) != 1 + g_bond_pattern.GetNumVerts()
+ g_bond_pattern.GetNumEdges())):
raise(InputError('Error: Wrong number of columns in \"By Type\" section of data file.\n'
'Offending line:\n'+
'\"'+line+'\"\n'
'Expected either '+
str(1 + g_bond_pattern.GetNumVerts()) + ' or ' +
str(1 + g_bond_pattern.GetNumVerts() +
g_bond_pattern.GetNumEdges())
+ ' colunms.'))
coefftype = EscCharStrToChar(tokens[0])
typepattern = []
for typestr in tokens[1:]:
if ((len(typestr) >= 2) and
(typestr[0] == '/') and (typestr[-1] == '/')):
regex_str = typestr[1:-1]
typepattern.append( re.compile(regex_str) )
else:
typepattern.append(EscCharStrToChar(typestr))
# If the user neglected to specify the bond types, assume '*'
if len(tokens) == 1 + g_bond_pattern.GetNumVerts():
typepattern += ['*'] * g_bond_pattern.GetNumEdges()
typepattern_to_coefftypes.append([typepattern, coefftype])
coefftype_to_atomids_str = GenInteractions_str(bond_pairs,
g_bond_pattern,
typepattern_to_coefftypes,
canonical_order,
atomids_str,
atomtypes_str,
bondids_str,
bondtypes_str,
report_progress)
lines_nbody_new = []
for coefftype, atomids_list in coefftype_to_atomids_str.items():
for atomids_found in atomids_list:
n = len(lines_nbody) + len(lines_nbody_new) + 1
line = prefix+str(n)+suffix+' '+ \
coefftype+' '+(' '.join(atomids_found))+'\n'
lines_nbody_new.append(line)
return lines_nbody_new
def GenInteractions_files(lines_data,
src_bond_pattern,
fname_atoms,
fname_bonds,
fname_nbody,
fname_nbodybytype,
section_name,
section_name_bytype,
atom_style,
prefix='',
suffix='',
report_progress = False):
if fname_atoms == None:
lines_atoms = [line for line in ExtractDataSection(lines_data, 'Atoms')]
else:
try:
f = open(fname_atoms, 'r')
except:
sys.stderr.write('Error: Unable to open file \"'+fname_atoms+'\" for reading.\n')
sys.exit(-1)
lines_atoms = [line for line in f.readlines()
if ((len(line.strip())>0) and (line.strip()[0] != '#'))]
f.close()
if fname_bonds == None:
lines_bonds = [line for line in ExtractDataSection(lines_data, 'Bonds')]
else:
try:
f = open(fname_bonds, 'r')
except IOError:
sys.stderr.write('Error: Unable to open file \"'+fname_bonds+'\" for reading.\n')
sys.exit(-1)
lines_bonds = [line for line in f.readlines()
if ((len(line.strip())>0) and (line.strip()[0] != '#'))]
f.close()
if fname_nbody == None:
lines_nbody = [line for line in ExtractDataSection(lines_data, section_name)]
else:
try:
f = open(fname_nbody, 'r')
lines_nbody = [line for line in f.readlines()
if ((len(line.strip())>0) and (line.strip()[0] != '#'))]
f.close()
except IOError:
#sys.stderr.write(' (omitting optional file \"'+fname_nbody+'\")\n')
lines_nbody = []
if fname_nbodybytype == None:
lines_nbodybytype=[line for
line in ExtractDataSection(lines_data,
section_name_bytype)]
else:
try:
f = open(fname_nbodybytype, 'r')
except:
sys.stderr.write('Error: Unable to open file \"'+fname_nbodybytype+'\" for reading.\n')
sys.exit(-1)
lines_nbodybytype = [line for line in f.readlines()
if((len(line.strip())>0)and(line.strip()[0]!='#'))]
f.close()
g = __import__(src_bond_pattern) #defines g.bond_pattern, g.canonical_order
return GenInteractions_lines(lines_atoms,
lines_bonds,
lines_nbody,
lines_nbodybytype,
atom_style,
g.bond_pattern,
g.canonical_order,
prefix,
suffix,
report_progress)
if __name__ == "__main__":
g_program_name = __file__.split('/')[-1] # = 'nbody_by_type.py'
- g_date_str = '2013-8-06'
- g_version_str = '0.15'
+ g_date_str = '2014-4-07'
+ g_version_str = '0.16'
####### Main Code Below: #######
sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+' ')
if sys.version < '3':
sys.stderr.write(' (python version < 3)\n')
else:
sys.stderr.write('\n')
try:
fname_atoms = None
fname_bonds = None
fname_nbody = None
fname_nbodybytype = None
atom_style = 'full'
prefix=''
suffix=''
argv = [arg for arg in sys.argv]
if len(argv) == 1:
raise InputError('Error: Missing argument required.\n'
' The \"'+g_program_name+'\" program requires an argument containing the\n'
' name of a section from a LAMMPS data file storing bonded interactions.\n'
' (For example: "Angles", "Dihedrals", or "Impropers".)\n'
#' Note: The first letter of each section is usually capitalized.)\n'
'\n'
'--------------- general documentation -------------\n'
'\n' + man_page_text + '\n')
section_name = '' # (This will be replaced later.)
section_name_bytype = '' # (This will be replaced later.)
# Loop over the remaining arguments not processed yet.
# These arguments are specific to the lttree.py program
# and are not understood by ttree.py:
i = 1
while i < len(argv):
#sys.stderr.write('argv['+str(i)+'] = \"'+argv[i]+'\"\n')
if ((argv[i].lower() == '-?') or
(argv[i].lower() == '--?') or
(argv[i].lower() == '-help') or
(argv[i].lower() == '-help')):
if i+1 >= len(argv):
sys.stdout.write(man_page_text+'\n')
sys.exit(0)
elif argv[i].lower() == '-atoms':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a file name containing lines of\n'
' text which might appear in the "Atoms" section of a LAMMPS data file.\n')
fname_atoms = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-bonds':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a file name containing lines of\n'
' text which might appear in the "Bonds" section of a LAMMPS data file.\n')
fname_bonds = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-nbody':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a file name\n')
#raise InputError('Error: '+argv[i]+' flag should be followed by a file name containing lines of\n'
# ' text which might appear in the "'+section_name+' section of a LAMMPS data file.\n')
fname_nbody = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-nbodybytype':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a file name\n')
#raise InputError('Error: '+argv[i]+' flag should be followed by a file name containing\n'
# ' text which might appear in the "'+section_name+' By Type" section\n'
# ' of a LAMMPS data file.\n')
fname_nbodybytype = argv[i+1]
del(argv[i:i+2])
elif ((argv[i].lower() == '-atom-style') or
(argv[i].lower() == '-atom_style')):
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a an atom_style name.\n'
' (Or single quoted string which includes a space-separated\n'
' list of column names.)\n')
atom_style = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-prefix':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a prefix string\n'
' (a string you want to appear to the left of the integer\n'
' which counts the bonded interactions you have generated.)\n')
prefix = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-suffix':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by a suffix string\n'
' (a string you want to appear to the right of the integer\n'
' which counts the bonded interactions you have generated.)\n')
prefix = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-subgraph':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by the name of a python file\n'
' containing the definition of the subgraph you are searching for\n'
' and it\'s symmetry properties.\n'
' (See nbody_Dihedrals.py for example.)\n')
bond_pattern_module_name = argv[i+1]
# If the file name ends in ".py", then strip off this suffix.
bond_pattern_module_name=bond_pattern_module_name.rstrip('.py')
del(argv[i:i+2])
elif argv[i].lower() == '-section':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by the name of the LAMMPS\n'
' Data section describing the type of interaction being generated.\n'
' (For example: \"Angles\", \"Dihedrals\", \"Impropers\", etc...)\n')
section_name = argv[i+1]
del(argv[i:i+2])
elif argv[i].lower() == '-sectionbytype':
if i+1 >= len(argv):
raise InputError('Error: '+argv[i]+' flag should be followed by the name of the\n'
' write_once(\"???? By Type\") section describing how to create the\n'
' interactions. (For example: \"Angles By Type\", \"Dihedrals By Type\",\n'
' \"Impropers By Type\", etc... Note that this argument\n'
' will contain spaces, so surround it with quotes.)\n')
section_name_bytype = argv[i+1]
del(argv[i:i+2])
elif argv[i][0] == '-':
raise InputError('Error('+g_program_name+'):\n'
'Unrecogized command line argument \"'+argv[i]+'\"\n')
else:
i += 1
#if len(argv) == 1:
# raise InputError('Error: Missing argument required.\n'
# ' The \"'+g_program_name+'\" program requires an argument containing the\n'
# ' name of a section from a LAMMPS data file storing bonded interactions.\n'
# ' (For example: "Angles", "Dihedrals", or "Impropers".)\n')
# #' Note: The first letter of each section is usually capitalized.)\n'
if len(argv) == 1:
pass
elif len(argv) == 2:
section_name = argv[1]
section_name_bytype = section_name + ' By Type'
bond_pattern_module_name = 'nbody_'+section_name
del(argv[1:2])
else:
# if there are more than 2 remaining arguments,
problem_args = ['\"'+arg+'\"' for arg in argv[1:]]
raise InputError('Syntax Error('+g_program_name+'):\n\n'
' Problem with argument list.\n'
' The remaining arguments are:\n\n'
' '+(' '.join(problem_args))+'\n\n'
' (The actual problem may be earlier in the argument list.)\n')
if ((section_name == '') or
(section_name_bytype == '') or
(bond_pattern_module_name == '')):
raise InputError('Syntax Error('+g_program_name+'):\n\n'
' You have not defined the following arguments:\n'
' -section name\n'
' -sectionbytype namebytype\n'
' -subgraph pythonfile.py\n')
# ------------ Done parsing argument list ----------
if (fname_atoms or fname_bonds or fname_nbody or fname_nbodybytype):
output_full_DATA_file = False
lines_data = []
else:
output_full_DATA_file = True
lines_data = sys.stdin.readlines()
# Calculate the interactions and generate a list of lines of text
lines_new_interactions = \
GenInteractions_files(lines_data,
bond_pattern_module_name,
fname_atoms,
fname_bonds,
fname_nbody,
fname_nbodybytype,
section_name,
section_name_bytype,
atom_style,
prefix,
suffix,
report_progress=True)
# Print this text to the standard out.
# Question: Do we write out the entire DATA file,
# or just the portion that was generated by this program?
if not output_full_DATA_file:
# ...then only print out the interactions which were generated
# by this program, omitting any lines from the original data file:
# (This is the way I usually run this program.)
for line in lines_new_interactions:
sys.stdout.write(line)
else:
# ...then print out the entire data file, deleting the "By Type"
# section, and adding the generated lines of text to the corresponding
# If present, update the interaction counter at the beginning
# of the LAMMPS data file. (For example, if if 100 new "Angles"
# interactions were generated, replace "2 Angles" with "102 Angles")
#
for i in range(0, len(lines_data)):
line = lines_data[i].strip()
tokens = SplitQuotedString(line)
# updating the interaction counter
if ((len(tokens) == 2) and (tokens[1] == (section_name).lower())):
tokens[0] = str(int(tokens[0]) + len(lines_new_interactions))
lines_data[i] = ' '.join(tokens) + '\n'
# stop when you come to a section header
elif line in lammps_data_sections:
#"lammps_data_sections" is defined in "extract_lammps_data.py"
break
# locate the appropriate section of the data file
# (storing the type of interactions we just created)
i_nbody_a, i_nbody_b = \
FindDataSection(lines_data, section_name)
if i_nbody_a == -1:
if len(lines_new_interactions) > 0:
# If not found, create a new section at the end of the file,
# containing a section name followed by the list of lines
lines_data += ['\n', section_name+'\n', '\n'] + \
lines_new_interactions + ['\n']
else:
# Insert the new lines into the existing section
lines_data[i_nbody_b:i_nbody_b] = lines_new_interactions
# Figure out where the "By Type" section is located
# (so we skip over it)
i_bytype_a, i_bytype_b = \
FindDataSection(lines_data, section_name_bytype)
in_bytype_section = False
for i in range(0, len(lines_data)):
line = lines_data[i].strip()
# Omit all lines of text in the 'By Type' section (including the
# header and commments or blank lines which immediately follow it.)
if line == section_name_bytype:
in_bytype_section = True
elif i == i_bytype_b:
in_bytype_section = False
if not in_bytype_section:
sys.stdout.write(lines_data[i])
except (ValueError, InputError) as err:
sys.stderr.write('\n'+str(err)+'\n')
sys.exit(-1)
diff --git a/tools/moltemplate/src/nbody_by_type_lib.py b/tools/moltemplate/src/nbody_by_type_lib.py
index 2c6ede67c..eca4ff344 100644
--- a/tools/moltemplate/src/nbody_by_type_lib.py
+++ b/tools/moltemplate/src/nbody_by_type_lib.py
@@ -1,383 +1,394 @@
#!/usr/bin/env python
# Author: Andrew Jewett (jewett.aij at g mail)
# http://www.chem.ucsb.edu/~sheagroup
# License: 3-clause BSD License (See LICENSE.TXT)
# Copyright (c) 2012, Regents of the University of California
# All rights reserved.
import sys
from nbody_graph_search import *
#from collections import namedtuple
-from collections import defaultdict, OrderedDict
+if sys.version < '2.7':
+ sys.stderr.write('--------------------------------------------------------\n'
+ '----------------- WARNING: OLD PYTHON VERSION ----------\n'
+ ' This program is untested on your python version ('+sys.version+').\n'
+ ' PLEASE LET ME KNOW IF THIS PROGRAM CRASHES (and upgrade python).\n'
+ ' -Andrew 2013-10-25\n'
+ '--------------------------------------------------------\n'
+ '--------------------------------------------------------\n')
+ from ordereddict import OrderedDict
+else:
+ from collections import OrderedDict
+from collections import defaultdict
from ttree_lex import MatchesPattern, MatchesAll, InputError
#import gc
def GenInteractions_int(G_system,
g_bond_pattern,
typepattern_to_coefftypes,
canonical_order, #function to sort atoms and bonds
atomtypes_int2str,
bondtypes_int2str,
report_progress = False): #print messages to sys.stderr?
"""
GenInteractions() automatically determines a list of interactions
present in a system of bonded atoms (argument "G_system"),
which satisfy the bond topology present in "g_bond_pattern", and
satisfy the atom and bond type requirements in "typepattern_to_coefftypes".
Whenever a set of atoms in "G_system" are bonded together in a way which
matches "g_bond_pattern", and when the atom and bond types is consistent
with one of the entries in "typepattern_to_coefftypes", the corresponding
list of atoms from G_system is appended to the list of results.
These results (the list of lists of atoms participating in an interaction)
are organized according their corresponding "coefftype", a string
which identifies the type of interaction they obey as explained above.
results are returned as a dictionary using "coefftype" as the lookup key.
Arguments:
-- typepattern_to_coefftypes is a list of 2-tuples --
The first element of the 2-tuple is the "typepattern".
It contains a string describing a list of atom types and bond types.
The typepattern is associated with a "coefftype",
which is the second element of the 2-tuple. This is a string
which identifies the type of interaction between the atoms.
Later on, this string can be used to lookup the force field
parameters for this interaction elsewhere.)
-- Arguments: G_system, g_bond_pattern, atomtypes_int2str, bondtypes_int2str --
G_system stores a list of atoms and bonds, and their attributes in
"Ugraph" format. In this format:
Atom ID numbers are represented by indices into the G_system.verts[] list.
Bond ID numbers are represented by indices into the G_system.edges[] list.
Atom types are represented as integers in the G_system.verts[i].attr list.
Bond types are represented as integers in the G_system.edges[i].attr list.
They are converted into strings using
atomtypes_int2str, and bondtypes_int2str.
g_bond_pattern is a graph which specifies the type of bonding between
the atoms required for a match. It is in Ugraph format (however the
atom and bond types are left blank.)
Atom and bond types are supplied by the user in string format. (These
strings typically encode integers, but could be any string in principle.)
The string-version of the ith atom type is stored in
atomtypes_int2str[ G_system.verts[i].attr ]
The string-version of the ith bond type is stored in
bondtypes_int2str[ G_system.edges[i].attr ]
-- The "canonical_order" argument: --
The search for atoms with a given bond pattern often yields
redundant matches. There is no difference for example
between the angle formed between three consecutively
bonded atoms (named, 1, 2, 3, for example), and the
angle between the same atoms in reverse order (3, 2, 1).
However both triplets of atoms will be returned by the subgraph-
matching algorithm when searching for ALL 3-body interactions.)
To eliminate this redundancy, the caller must supply a "canonical_order"
argument. This is a function which sorts the atoms and bonds in a way
which is consistent with the type of N-body interaction being considered.
The atoms (and bonds) in a candidate match are rearranged by the
canonical_order(). Then the re-ordered list of atom and bond ids is
tested against the list of atom/bond ids in the matches-found-so-far,
before it is added.
"""
if report_progress:
startatomid = 0
sys.stderr.write(' searching for matching bond patterns:\n')
sys.stderr.write(' 0%')
# Figure out which atoms from "G_system" bond together in a way which
# matches the "g_bond_pattern" argument. Organize these matches by
# atom and bond types and store all of the non-redundant ones in
# the "interactions_by_type" variable.
gm = GraphMatcher(G_system, g_bond_pattern)
interactions_by_type = defaultdict(list)
for atombondids in gm.Matches():
# "atombondids" is a tuple.
# atombondids[0] has atomIDs from G_system corresponding to g_bond_pattern
# (These atomID numbers are indices into the G_system.verts[] list.)
# atombondids[1] has bondIDs from G_system corresponding to g_bond_pattern
# (These bondID numbers are indices into the G_system.edges[] list.)
# It's convenient to organize the list of interactions-between-
# atoms in a dictionary indexed by atomtypes and bondtypes.
# (Because many atoms and bonds typically share the same type,
# organizing the results this way makes it faster to check
# whether a given interaction matches a "typepattern" defined
# by the user. We only have to check once for the whole group.)
atombondtypes = \
(tuple([G_system.GetVert(Iv).attr for Iv in atombondids[0]]),
tuple([G_system.GetEdge(Ie).attr for Ie in atombondids[1]]))
interactions_by_type[atombondtypes].append(atombondids)
if report_progress:
# GraphMatcher.Matches() searches for matches in an order
# that selects a different atomid number from G_system,
# starting at 0, and continuing up to the number of atoms (-1)
# in the system (G_system.nv-1), and using this as the first
# atom in the match (ie match[0][0]). This number can be used
# to guess much progress has been made so far.
oldatomid = startatomid
startatomid = atombondids[0][0]
percent_complete = (100 * startatomid) // G_system.GetNumVerts()
# report less often as more progress made
if percent_complete <= 4:
old_pc = (100 * oldatomid) // G_system.GetNumVerts()
if percent_complete > old_pc:
sys.stderr.write(' '+str(percent_complete)+'%')
elif percent_complete <= 8:
pc_d2 = (100 * startatomid) // (2*G_system.GetNumVerts())
oldpc_d2 = (100 * oldatomid) // (2*G_system.GetNumVerts())
if pc_d2 > oldpc_d2:
sys.stderr.write(' '+str(percent_complete)+'%')
elif percent_complete <= 20:
pc_d4 = (100 * startatomid) // (4*G_system.GetNumVerts())
oldpc_d4 = (100 * oldatomid) // (4*G_system.GetNumVerts())
if pc_d4 > oldpc_d4:
sys.stderr.write(' '+str(percent_complete)+'%')
else:
pc_d10 = (100 * startatomid) // (10*G_system.GetNumVerts())
oldpc_d10 = (100 * oldatomid) // (10*G_system.GetNumVerts())
if pc_d10 > oldpc_d10:
sys.stderr.write(' '+str(percent_complete)+'%')
if report_progress:
sys.stderr.write(' 100%\n')
#sys.stderr.write(' ...done\n')
#sys.stderr.write(' Looking up available atom and bond types...')
#coefftype_to_atomids = defaultdict(list)
#abids_to_coefftypes = defaultdict(list)
coefftype_to_atomids = OrderedDict()
abids_to_coefftypes = OrderedDict()
# -------------------- reporting progress -----------------------
if report_progress:
# The next interval of code is not technically necessary, but it makes
# the printed output easier to read by excluding irrelevant interactions
# Now, test each match to see if the atoms and bonds involved match
# any of the type-patterns in the "typepattern_to_coefftypes" argument.
types_atoms_all_str = set([])
types_bonds_all_str = set([])
for typepattern, coefftype in typepattern_to_coefftypes:
for atombondtypes, abidslist in interactions_by_type.items():
for Iv in atombondtypes[0]:
types_atoms_all_str.add(atomtypes_int2str[Iv])
for Ie in atombondtypes[1]:
types_bonds_all_str.add(bondtypes_int2str[Ie])
# ------------------ reporting progress (end) -------------------
count = 0
for typepattern, coefftype in typepattern_to_coefftypes:
# ------------------ reporting progress -----------------------
# The next interval of code is not technically necessary, but it makes
# the printed output easier to read by excluding irrelevant interactions
if report_progress:
# Check to see if the atoms or bonds referred to in typepattern
# are (potentially) satisfied by any of the atoms present in the system.
# If any of the required atoms for this typepattern are not present
# in this system, then skip to the next typepattern.
atoms_available_Iv = [False for Iv in range(0, g_bond_pattern.GetNumVerts())]
for Iv in range(0, g_bond_pattern.GetNumVerts()):
for type_atom_str in types_atoms_all_str:
if MatchesPattern(type_atom_str, typepattern[Iv]):
atoms_available_Iv[Iv] = True
atoms_available = True
for Iv in range(0, g_bond_pattern.GetNumVerts()):
if not atoms_available_Iv[Iv]:
atoms_available = False
bonds_available_Ie = [False for Ie in range(0, g_bond_pattern.GetNumEdges())]
for Ie in range(0, g_bond_pattern.GetNumEdges()):
for type_bond_str in types_bonds_all_str:
if MatchesPattern(type_bond_str,
typepattern[g_bond_pattern.GetNumVerts()+Ie]):
bonds_available_Ie[Ie] = True
bonds_available = True
for Ie in range(0, g_bond_pattern.GetNumEdges()):
if not bonds_available_Ie[Ie]:
bonds_available = False
if atoms_available and bonds_available:
# Explanation:
# (Again) only if ALL of the atoms and bond requirements for
# this typepattern are satisfied by at least SOME of the atoms
# present in the this system, ...THEN print a status message.
# (Because for complex all-atom force-fields, the number of
# possible atom types, and typepatterns far exceeds the number
# of atom types typically present in the system. Otherwise
# hundreds of kB of irrelevant information can be printed.)
sys.stderr.write(' checking '+coefftype+' type requirements:'
#' (atom-types,bond-types) '
'\n '+str(typepattern)+'\n')
# ------------------ reporting progress (end) -------------------
for atombondtypes, abidslist in interactions_by_type.items():
# express atom & bond types in a tuple of the original string format
types_atoms = [atomtypes_int2str[Iv] for Iv in atombondtypes[0]]
types_bonds = [bondtypes_int2str[Ie] for Ie in atombondtypes[1]]
type_strings = types_atoms + types_bonds
# use string comparisons to check for a match with typepattern
if MatchesAll(type_strings, typepattern): #<-see "ttree_lex.py"
for abids in abidslist:
# Re-order the atoms (and bonds) in a "canonical" way.
# Only add new interactions to the list after re-ordering
# them and checking that they have not been added earlier.
# (...well not when using the same coefftype at least.
# This prevents the same triplet of atoms from
# being used to calculate the bond-angle twice:
# once for 1-2-3 and 3-2-1, for example.)
abids = canonical_order(abids)
redundant = False
if abids in abids_to_coefftypes:
coefftypes = abids_to_coefftypes[abids]
if coefftype in coefftypes:
redundant = True
if not redundant:
# (It's too bad python does not
# have an Ordered defaultdict)
if coefftype in coefftype_to_atomids:
coefftype_to_atomids[coefftype].append(abids[0])
else:
coefftype_to_atomids[coefftype]=[abids[0]]
if abids in abids_to_coefftypes:
abids_to_coefftypes[abids].append(coefftype)
else:
abids_to_coefftypes[abids] = [coefftype]
count += 1
if report_progress:
sys.stderr.write(' (found '+
str(count)+' non-redundant matches)\n')
return coefftype_to_atomids
def GenInteractions_str(bond_pairs,
g_bond_pattern,
typepattern_to_coefftypes,
canonical_order, #function to sort atoms and bonds
atomids_str,
atomtypes_str,
bondids_str,
bondtypes_str,
report_progress = False): #print messages to sys.stderr?
assert(len(atomids_str) == len(atomtypes_str))
assert(len(bondids_str) == len(bondtypes_str))
# The atomids and atomtypes and bondtypes are strings.
# First we assign a unique integer id to each string.
atomids_str2int = {}
atomtypes_str2int = {}
atomtypes_int2str = []
atomtype_int = 0
for i in range(0, len(atomids_str)):
if atomids_str[i] in atomids_str2int:
raise InputError('Error: multiple atoms have the same id ('+
str(atomids_str[i])+')')
atomids_str2int[atomids_str[i]] = i
#atomtypes_int = len(atomtypes_int)+1
if (not (atomtypes_str[i] in atomtypes_str2int)):
atomtypes_str2int[atomtypes_str[i]] = atomtype_int
atomtypes_int2str.append(atomtypes_str[i])
atomtype_int += 1
#atomtypes_int.append(atomtype_int)
bondids_str2int = {}
bondtypes_str2int = {}
bondtypes_int2str = []
bondtype_int = 0
for i in range(0, len(bondids_str)):
if bondids_str[i] in bondids_str2int:
raise InputError('Error: multiple bonds have the same id ('+
str(bondids_str[i])+')')
bondids_str2int[bondids_str[i]] = i
#bondtype_int = len(bondtypes_int)+1
if (not (bondtypes_str[i] in bondtypes_str2int)):
bondtypes_str2int[bondtypes_str[i]] = bondtype_int
bondtypes_int2str.append(bondtypes_str[i])
bondtype_int += 1
# Now convert "bond_pairs" into the UGraph format
G_system = Ugraph()
for iv in range(0, len(atomtypes_str)):
G_system.AddVertex(iv, atomtypes_str2int[atomtypes_str[iv]])
for ie in range(0, len(bond_pairs)):
atomid1_str = bond_pairs[ie][0]
atomid2_str = bond_pairs[ie][1]
if (atomid1_str not in atomids_str2int):
raise InputError('Error in Bonds Section:\n'
' '+atomid1_str+' is not defined in Atoms section\n')
if (atomid2_str not in atomids_str2int):
raise InputError('Error in Bonds Section:\n'
' '+atomid2_str+' is not defined in Atoms section\n')
G_system.AddEdge(atomids_str2int[atomid1_str],
atomids_str2int[atomid2_str],
bondtypes_str2int[bondtypes_str[ie]])
coefftype_to_atomids_int = GenInteractions_int(G_system,
g_bond_pattern,
typepattern_to_coefftypes,
canonical_order,
atomtypes_int2str,
bondtypes_int2str,
report_progress)
coefftype_to_atomids_str = OrderedDict()
for coefftype, atomidss_int in coefftype_to_atomids_int.items():
if report_progress:
sys.stderr.write(' processing coefftype: '+str(coefftype)+'\n')
for atomids_int in atomidss_int:
if coefftype in coefftype_to_atomids_str:
coefftype_to_atomids_str[coefftype].append(
[atomids_str[iv] for iv in atomids_int])
else:
coefftype_to_atomids_str[coefftype] = \
[[atomids_str[iv] for iv in atomids_int]]
#gc.collect()
return coefftype_to_atomids_str
diff --git a/tools/moltemplate/src/ttree_lex.py b/tools/moltemplate/src/ttree_lex.py
index fc02f58b7..dfcc1b0b6 100644
--- a/tools/moltemplate/src/ttree_lex.py
+++ b/tools/moltemplate/src/ttree_lex.py
@@ -1,2090 +1,2090 @@
# -*- coding: iso-8859-1 -*-
# Author: Andrew Jewett (jewett.aij at g mail)
# http://www.chem.ucsb.edu/~sheagroup
# License: 3-clause BSD License (See LICENSE.TXT)
# Copyright (c) 2012, Regents of the University of California
# All rights reserved.
"""A lexical analyzer class for simple shell-like syntaxes.
This version has been modified slightly to work better with unicode.
It was forked from the version of shlex that ships with python 3.2.2.
A few minor features and functions have been added. """
# Module and documentation by Eric S. Raymond, 21 Dec 1998
# Input stacking and error message cleanup added by ESR, March 2000
# push_source() and pop_source() made explicit by ESR, January 2001.
# Posix compliance, split(), string arguments, and
# iterator interface by Gustavo Niemeyer, April 2003.
# ("wordterminators" (unicode support) hack by Andrew Jewett September 2011)
import os.path
import sys
from collections import deque
import re, fnmatch
import string
#import gc
try:
from cStringIO import StringIO
except ImportError:
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
__all__ = ["TtreeShlex",
"split",
"LineLex",
"SplitQuotedString",
"EscCharStrToChar",
"SafelyEncodeString",
"RemoveOuterQuotes",
"MaxLenStr",
"HasWildCard",
#"IsRegex",
"InputError",
"ErrorLeader",
"SrcLoc",
"OSrcLoc",
"TextBlock",
"VarRef",
"VarNPtr",
"VarBinding",
"SplitTemplate",
"SplitTemplateMulti",
"TableFromTemplate",
"ExtractCatName",
#"_TableFromTemplate",
#"_DeleteLineFromTemplate",
"DeleteLinesWithBadVars",
"TemplateLexer"]
class TtreeShlex(object):
""" A lexical analyzer class for simple shell-like syntaxes.
TtreeShlex is a backwards-compatible version of python's standard shlex
module. It has the additional member: "self.wordterminators", which
overrides the "self.wordchars" member. This enables better handling of
unicode characters by allowing a much larger variety of characters to
appear in words or tokens parsed by TtreeShlex.
"""
custom_path = None
def __init__(self,
instream=None,
infile=None,
custom_include_path=None,
posix=False):
if isinstance(instream, str):
instream = StringIO(instream)
if instream is not None:
self.instream = instream
self.infile = infile
else:
self.instream = sys.stdin
self.infile = None
self.posix = posix
if posix:
self.eof = None
else:
self.eof = ''
self.commenters = '#'
self.wordchars = ('abcdfeghijklmnopqrstuvwxyz'
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
if self.posix:
self.wordchars += ('ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ'
'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ')
self.wordterminators = set([]) #WORDTERMINATORS
self.prev_space_terminator = '' #WORDTERMINATORS
self.whitespace = ' \t\r\f\n'
self.whitespace_split = False
self.quotes = '\'"'
self.escape = '\\'
self.escapedquotes = '"'
self.state = ' '
self.pushback = deque()
self.lineno = 1
self.debug = 0
self.token = ''
self.filestack = deque()
# self.source_triggers
# are tokens which allow the seamless insertion of other
# files into the file being read.
self.source_triggers=set(['source'])
self.source_triggers_x=set([])
#Note: self.source_triggers_x
# This is a subset of self.source_triggers.
# In this case file inclusion is exclusive.
# In other words, if one of these tokens
# is encountered, the file is only included
# if it has not been included already.
self.source_files_restricted = set([])
self.include_path = []
if TtreeShlex.custom_path:
include_path_list = TtreeShlex.custom_path.split(':')
self.include_path += [d for d in include_path_list if len(d)>0]
if 'TTREE_PATH' in os.environ:
include_path_list = os.environ['TTREE_PATH'].split(':')
self.include_path += [d for d in include_path_list if len(d)>0]
if self.debug:
print('TtreeShlex: reading from %s, line %d' \
% (self.instream, self.lineno))
self.end_encountered = False
@staticmethod #WORDTERMINATORS
def _belongs_to(char, include_chars, exclude_chars): #WORDTERMINATORS
if ((not exclude_chars) or (len(exclude_chars)==0)): #WORDTERMINATORS
return char in include_chars #WORDTERMINATORS
else: #WORDTERMINATORS
return char not in exclude_chars #WORDTERMINATORS
def push_raw_text(self, text):
"""Push a block of text onto the stack popped by the ReadLine() method.
(If multiple lines are present in the text, (which is determined by
self.line_terminators), then the text is split into multiple lines
and each one of them is pushed onto this stack individually.
The "self.lineno" counter is also adjusted, depending on the number
of newline characters in "line".
Do not strip off the newline, or other line terminators
at the end of the text block before using push_raw_text()!
"""
if self.debug >= 1:
print("TtreeShlex: pushing token " + repr(text))
for c in reversed(text): #WORDTERMINATORS
self.pushback.appendleft(c) #WORDTERMINATORS
if c == '\n': #WORDTERMINATORS
self.lineno -= 1 #WORDTERMINATORS
if len(text) > 0: #WORDTERMINATORS
self.end_encountered = False #WORDTERMINATORS
def push_token(self, text):
"Push a token onto the stack popped by the get_token method"
self.push_raw_text(text+self.prev_space_terminator)
def push_source(self, newstream, newfile=None):
"Push an input source onto the lexer's input source stack."
if isinstance(newstream, str):
newstream = StringIO(newstream)
self.filestack.appendleft((self.infile, self.instream, self.lineno))
self.infile = newfile
self.instream = newstream
self.lineno = 1
if self.debug:
if newfile is not None:
print('TtreeShlex: pushing to file %s' % (self.infile,))
else:
print('TtreeShlex: pushing to stream %s' % (self.instream,))
def pop_source(self):
"Pop the input source stack."
self.instream.close()
(self.infile, self.instream, self.lineno) = self.filestack.popleft()
if self.debug:
print('TtreeShlex: popping to %s, line %d' \
% (self.instream, self.lineno))
self.state = ' '
def get_token(self):
"Get a token from the input stream (or from stack if it's nonempty)"
#### #CHANGING: self.pushback is now a stack of characters, not tokens #WORDTERMINATORS
#### if self.pushback: #WORDTERMINATORS
#### tok = self.pushback.popleft() #WORDTERMINATORS
#### if self.debug >= 1: #WORDTERMINATORS
#### print("TtreeShlex: popping token " + repr(tok)) #WORDTERMINATORS
#### return tok #WORDTERMINATORS
#### No pushback. Get a token. #WORDTERMINATORS
raw = self.read_token()
# Handle inclusions
if self.source_triggers is not None:
while raw in self.source_triggers:
fname=self.read_token()
spec = self.sourcehook(fname)
if spec:
(newfile, newstream) = spec
if ((raw not in self.source_triggers_x) or
(newfile not in self.source_files_restricted)):
self.push_source(newstream, newfile)
if raw in self.source_triggers_x:
self.source_files_restricted.add(newfile)
else:
- if self.debug >= 0:
+ if self.debug >= 1:
sys.stderr.write('\ndebug warning: duplicate attempt to import file:\n \"'+newfile+'\"\n')
raw = self.get_token()
# Maybe we got EOF instead?
while raw == self.eof:
if not self.filestack:
return self.eof
else:
self.pop_source()
raw = self.get_token()
# Neither inclusion nor EOF
if self.debug >= 1:
if raw != self.eof:
print("TtreeShlex: token=" + repr(raw))
else:
print("TtreeShlex: token=EOF")
if raw == self.eof: #WORDTERMINATORS
self.end_encountered = True #WORDTERMINATORS
return raw
def read_char(self):
if self.pushback: #WORDTERMINATORS
nextchar = self.pushback.popleft() #WORDTERMINATORS
assert((type(nextchar) is str) and (len(nextchar)==1)) #WORDTERMINATORS
else: #WORDTERMINATORS
nextchar = self.instream.read(1) #WORDTERMINATORS
return nextchar
def read_token(self):
self.prev_space_terminator = '' #WORDTERMINATORS
quoted = False
escapedstate = ' '
while True:
#### self.pushback is now a stack of characters, not tokens #WORDTERMINATORS
nextchar = self.read_char()
if nextchar == '\n':
self.lineno = self.lineno + 1
if self.debug >= 3:
print("TtreeShlex: in state", repr(self.state), \
"I see character:", repr(nextchar))
if self.state is None:
self.token = '' # past end of file
break
elif self.state == ' ':
if not nextchar:
self.state = None # end of file
break
elif nextchar in self.whitespace:
if self.debug >= 2:
print("TtreeShlex: I see whitespace in whitespace state")
if self.token or (self.posix and quoted):
# Keep track of which whitespace
# character terminated the token.
self.prev_space_terminator = nextchar #WORDTERMINATORS
break # emit current token
else:
continue
elif nextchar in self.commenters:
self.instream.readline()
self.lineno = self.lineno + 1
elif self.posix and nextchar in self.escape:
escapedstate = 'a'
self.state = nextchar
elif TtreeShlex._belongs_to(nextchar, #WORDTERMINATORS
self.wordchars, #WORDTERMINATORS
self.wordterminators):#WORDTERMINATORS
self.token = nextchar
self.state = 'a'
elif nextchar in self.quotes:
if not self.posix:
self.token = nextchar
self.state = nextchar
elif self.whitespace_split:
self.token = nextchar
self.state = 'a'
else:
self.token = nextchar
if self.token or (self.posix and quoted):
break # emit current token
else:
continue
elif self.state in self.quotes:
quoted = True
if not nextchar: # end of file
if self.debug >= 2:
print("TtreeShlex: I see EOF in quotes state")
# XXX what error should be raised here?
raise ValueError("Error at or before "+self.error_leader()+"\n"
" No closing quotation.")
if nextchar == self.state:
if not self.posix:
self.token = self.token + nextchar
self.state = ' '
break
else:
self.state = 'a'
elif self.posix and nextchar in self.escape and \
self.state in self.escapedquotes:
escapedstate = self.state
self.state = nextchar
else:
self.token = self.token + nextchar
elif self.state in self.escape:
if not nextchar: # end of file
if self.debug >= 2:
print("TtreeShlex: I see EOF in escape state")
# XXX what error should be raised here?
raise ValueError("No escaped character")
# In posix shells, only the quote itself or the escape
# character may be escaped within quotes.
if escapedstate in self.quotes and \
nextchar != self.state and nextchar != escapedstate:
self.token = self.token + self.state
self.token = self.token + nextchar
self.state = escapedstate
elif self.state == 'a':
if not nextchar:
self.state = None # end of file
break
elif nextchar in self.whitespace:
if self.debug >= 2:
print("TtreeShlex: I see whitespace in word state")
self.state = ' '
if self.token or (self.posix and quoted):
# Keep track of which whitespace
# character terminated the token.
self.prev_space_terminator = nextchar #WORDTERMINATORS
break # emit current token
else:
continue
elif nextchar in self.commenters:
comment_contents = self.instream.readline()
self.lineno = self.lineno + 1
if self.posix:
self.state = ' '
if self.token or (self.posix and quoted):
# Keep track of which character(s) terminated
# the token (including whitespace and comments).
self.prev_space_terminator = nextchar + comment_contents #WORDTERMINATORS
break # emit current token
else:
continue
elif self.posix and nextchar in self.quotes:
self.state = nextchar
elif self.posix and nextchar in self.escape:
escapedstate = 'a'
self.state = nextchar
elif (TtreeShlex._belongs_to(nextchar, #WORDTERMINATORS
self.wordchars, #WORDTERMINATORS
self.wordterminators)#WORDTERMINATORS
or (nextchar in self.quotes) #WORDTERMINATORS
or (self.whitespace_split)): #WORDTERMINATORS
self.token = self.token + nextchar
else:
self.pushback.appendleft(nextchar)
if self.debug >= 2:
print("TtreeShlex: I see punctuation in word state")
self.state = ' '
if self.token:
break # emit current token
else:
continue
result = self.token
self.token = ''
if self.posix and not quoted and result == '':
result = None
if self.debug > 1:
if result:
print("TtreeShlex: raw token=" + repr(result))
else:
print("TtreeShlex: raw token=EOF")
return result
def sourcehook(self, newfile):
"Hook called on a filename to be sourced."
newfile = RemoveOuterQuotes(newfile)
# This implements cpp-like semantics for relative-path inclusion.
if isinstance(self.infile, str) and not os.path.isabs(newfile):
newfile_full = os.path.join(os.path.dirname(self.infile), newfile)
try:
f = open(newfile_full, "r")
except IOError:
# If not found,
err = True
# ...then check to see if the file is in one of the
# directories in the self.include_path list.
for d in self.include_path:
newfile_full = os.path.join(d, newfile)
try:
f = open(newfile_full, "r")
err = False
break
except IOError:
err=True
if err:
raise InputError('Error at '+self.error_leader()+'\n'
' unable to open file \"'+newfile+'\"\n'
' for reading.\n')
return (newfile, f)
def error_leader(self, infile=None, lineno=None):
"Emit a C-compiler-like, Emacs-friendly error-message leader."
if infile is None:
infile = self.infile
if lineno is None:
lineno = self.lineno
return "\"%s\", line %d: " % (infile, lineno)
def __iter__(self):
return self
def __next__(self):
token = self.get_token()
if token == self.eof:
raise StopIteration
return token
def __bool__(self):
return not self.end_encountered
# For compatibility with python 2.x, I must also define:
def __nonzero__(self):
return self.__bool__()
# The split() function was originally from shlex
# It is included for backwards compatibility.
def split(s, comments=False, posix=True):
lex = TtreeShlex(s, posix=posix)
lex.whitespace_split = True
if not comments:
lex.commenters = ''
return list(lex)
##################### NEW ADDITIONS (may be removed later) #################
#"""
# -- linelex.py --
#linelex.py defines the LineLex class, which inherits from, and further
#augments the capabilities of TtreeShlex by making it easier to parse
#individual lines one at a time. (The original shlex's "source" inclusion
#ability still works when reading entire lines, and lines are still counted.)
#
#"""
#import sys
class InputError(Exception):
""" A generic exception object containing a string for error reporting.
(Raising this exception implies that the caller has provided
a faulty input file or argument.)
"""
def __init__(self, err_msg):
self.err_msg = err_msg
def __str__(self):
return self.err_msg
def __repr__(self):
return str(self)
def ErrorLeader(infile, lineno):
return '\"'+infile+'\", line '+str(lineno)
class SrcLoc(object):
""" SrcLoc is essentially nothing more than a 2-tuple containing the name
of a file (str) and a particular line number inside that file (an integer).
"""
__slots__=["infile","lineno"]
def __init__(self, infile='', lineno=-1):
self.infile = infile
self.lineno = lineno
def SplitQuotedString(string,
quotes='\'\"',
delimiters=' \t\r\f\n',
escape='\\',
comment_char='#'):
tokens = []
token = ''
reading_token = True
escaped_state = False
quote_state = None
for c in string:
if (c in comment_char) and (not escaped_state) and (quote_state==None):
tokens.append(token)
return tokens
elif (c in delimiters) and (not escaped_state) and (quote_state==None):
if reading_token:
tokens.append(token)
token = ''
reading_token = False
elif c in escape:
if escaped_state:
token += c
reading_token = True
escaped_state = False
else:
escaped_state = True
# and leave c (the '\' character) out of token
elif (c in quotes) and (not escaped_state):
if (quote_state != None):
if (c == quote_state):
quote_state = None
else:
quote_state = c
token += c
reading_token = True
else:
if (c == 'n') and (escaped_state == True):
c = '\n'
elif (c == 't') and (escaped_state == True):
c = '\t'
elif (c == 'r') and (escaped_state == True):
c = '\r'
elif (c == 'f') and (escaped_state == True):
c = '\f'
token += c
reading_token = True
escaped_state = False
if len(string) > 0:
tokens.append(token)
return tokens
def EscCharStrToChar(s_in, escape='\\'):
"""
EscCharStrToChar() replaces any escape sequences
in a string with their 1-character equivalents.
"""
assert(len(escape) > 0)
out_lstr = []
escaped_state = False
for c in s_in:
if escaped_state:
if (c == 'n'):
out_lstr.append('\n')
elif (c == 't'):
out_lstr.append('\t')
elif (c == 'r'):
out_lstr.append('\r')
elif (c == 'f'):
out_lstr.append('\f')
elif (c == '\''):
out_lstr.append('\'')
elif (c == '\"'):
out_lstr.append('\"')
elif c in escape:
out_lstr.append(c)
else:
out_lstr.append(escape+c) # <- keep both characters
escaped_state = False
else:
if c in escape:
escaped_state = True
else:
out_lstr.append(c)
return ''.join(out_lstr)
def SafelyEncodeString(in_str,
quotes='\'\"',
delimiters=' \t\r\f\n',
escape='\\',
comment_char='#'):
"""
SafelyEncodeString(in_str) scans through the input string (in_str),
and returns a new string in which probletic characters
(like newlines, tabs, quotes, etc), are replaced by their two-character
backslashed equivalents (like '\n', '\t', '\'', '\"', etc).
The escape character is the backslash by default, but it too can be
overridden to create custom escape sequences
(but this does not effect the encoding for characters like '\n', '\t').
"""
assert(len(escape) > 0)
out_lstr = []
use_outer_quotes = False
for c in in_str:
if (c == '\n'):
c = '\\n'
elif (c == '\t'):
c = '\\t'
elif (c == '\r'):
c = '\\r'
elif (c == '\f'):
c = '\\f'
elif c in quotes:
c = escape[0]+c
elif c in escape:
c = c+c
elif c in delimiters:
use_outer_quotes = True
# hmm... that's all that comes to mind. Did I leave anything out?
out_lstr.append(c)
if use_outer_quotes:
out_lstr = ['\"'] + out_lstr + ['\"']
return ''.join(out_lstr)
def RemoveOuterQuotes(text, quotes='\"\''):
if ((len(text)>=2) and (text[0] in quotes) and (text[-1]==text[0])):
return text[1:-1]
else:
return text
def MaxLenStr(s1, s2):
if len(s2) > len(s1):
return s2
else:
return s1
#def IsRegex(pat):
# """
# Check to see if string (pat) is bracketed by slashes.
#
# """
# return (len(pat)>=2) and (pat[0]=='/') and (pat[-1] == '/')
def HasWildCard(pat):
"""
Returns true if a string (pat) contains a '*' or '?' character.
"""
return (pat.find('*') != -1) or (pat.find('?') != -1)
#def HasWildCard(pat):
# """
# Returns true if a string (pat) contains a non-backslash-protected
# * or ? character.
#
# """
# N=len(pat)
# i=0
# while i < N:
# i = pat.find('*', i, N)
# if i == -1:
# break
# elif (i==0) or (pat[i-1] != '\\'):
# return True
# i += 1
# i=0
# while i < N:
# i = pat.find('?', i, N)
# if i == -1:
# break
# elif (i==0) or (pat[i-1] != '\\'):
# return True
# i += 1
# return False
def MatchesPattern(s, pattern):
if type(pattern) is str:
#old code:
#if ((len(s) > 1) and (s[0] == '/') and (s[-1] == '/'):
# re_string = p[1:-1] # strip off the slashes '/' and '/'
# if not re.search(re_string, s):
# return False
#new code:
# uses precompiled regular expressions (See "pattern.search" below)
if HasWildCard(pattern):
if not fnmatch.fnmatchcase(s, pattern):
return False
elif s != pattern:
return False
else:
#assert(type(p) is _sre.SRE_Match)
# I assume pattern = re.compile(some_reg_expr)
if not pattern.search(s):
return False
return True
def MatchesAll(multi_string, pattern):
assert(len(multi_string) == len(pattern))
for i in range(0, len(pattern)):
if not MatchesPattern(multi_string[i], pattern[i]):
return False
return True
class LineLex(TtreeShlex):
""" This class extends the TtreeShlex module (a slightly modified
version of the python 3.2.2 version of shlex). LineLex has the
ability to read one line at a time (in addition to one token at a time).
(Many files and scripts must be parsed one line at a time instead of one
token at a time. In these cases, the whitespace position also matters.)
Arguably, this class might not be necessary.
I could get rid of this class completely. That would be nice. To do that
we would need to augment and generalize shlex's get_token() member function
to make it read lines, not just tokens. Of course, you can always
change the wordchars (or wordterminators). Even so, there are two other
difficulties using the current version of shlex.get_token() to read lines:
1) File inclusion happen whenever the beginning of a line/token matches one
of the "source_triggers" (not the whole line as required by get_token()).
2) Lines ending in a special character (by default the backslash character)
continue on to the next line.
This code seems to work on our test files, but I'm sure there are bugs.
Andrew 2012-3-25
"""
def __init__(self,
instream=None,
infile=None,
posix=False):
TtreeShlex.__init__(self, instream, infile, posix)
self.line_terminators = '\n'
self.line_extend_chars = '\\'
self.skip_comments_during_readline = True
def _StripComments(self, line):
if self.skip_comments_during_readline:
for i in range(0, len(line)):
if ((line[i] in self.commenters) and
((i==0) or (line[i-1] not in self.escape))):
return line[:i]
return line
def _ReadLine(self,
recur_level=0):
"""
This function retrieves a block of text, halting at a
terminal character. Escape sequences are respected.
The self.lineno (newline counter) is also maintained.
The main difference between Readline and get_token()
is the way they handle the "self.source_triggers" member.
Both Readline() and get_token() insert text from other files when they
encounter a string in "self.source_triggers" in the text they read.
However ReadLine() ONLY inserts text from other files if the token which
matches with self.source_triggers appears at the beginning of the line.
get_token() inserts text only if lex.source matches the entire token.
comment-to-self:
At some point, once I'm sure this code is working, I should replace
shlex.get_token() with the code from ReadLine() which is more general.
It would be nice to get rid of "class LineLex" entirely. ReadLine()
is the only new feature that LineLex which was lacking in shlex.
To do this I would need to add a couple optional arguments to
"get_token()", allowing it to mimic ReadLine(), such as:
"override_wordterms" argument (which we can pass a '\n'), and
"token_extender" argument (like '\' for extending lines)
"""
first_token=''
line = ''
escaped_state = False
found_space = False
while True:
nextchar = self.read_char()
#sys.stderr.write('nextchar=\"'+nextchar+'\"\n')
while nextchar == '':
if not self.filestack:
return self._StripComments(line), '', first_token, found_space
else:
self.pop_source()
nextchar = self.read_char()
if nextchar == '\n':
self.lineno += 1
if escaped_state:
escaped_state = False
else:
if nextchar in self.escape:
line += nextchar
escaped_state = True
else:
escaped_state = False
if not escaped_state:
if (nextchar in self.whitespace):
found_space = True
while first_token in self.source_triggers:
fname = RemoveOuterQuotes(self.get_token())
if (fname == '') or (fname in self.source_triggers):
raise InputError('Error: near '+self.error_leader()+'\n'
' Nonsensical file inclusion request.\n')
if self.debug >= 0:
sys.stderr.write( (' ' * recur_level) +
'reading file \"'+fname+'\"\n')
spec = self.sourcehook(fname)
if spec:
(fname, subfile) = spec
if ((first_token not in self.source_triggers_x) or
(fname not in self.source_files_restricted)):
self.push_source(subfile, fname)
if first_token in self.source_triggers_x:
self.source_files_restricted.add(fname)
else:
if self.debug >= 0:
sys.stderr.write('\nWarning at '+self.error_leader()+':\n'
' duplicate attempt to import file:\n \"'+fname+'\"\n')
line, nextchar, first_token, found_space = \
self._ReadLine(recur_level+1)
if nextchar in self.line_terminators:
line_nrw = line.rstrip(self.whitespace)
#sys.stderr.write('line_nrw=\"'+line_nrw+'\"\n')
if ((len(line_nrw) > 0) and
(line_nrw[-1] in self.line_extend_chars) and
((len(line_nrw) < 2) or (line_nrw[-2] not in self.escape))):
line = line_nrw[:-1] #delete the line_extend character
# from the end of that line and keep reading...
else:
return self._StripComments(line), nextchar, first_token, found_space
else:
line += nextchar
if not found_space:
first_token += nextchar
def ReadLine(self, recur_level=0):
line, nextchar, first_token, found_space = \
self._ReadLine(recur_level)
if nextchar == self.eof:
self.end_encountered = True
return line + nextchar
@staticmethod
def TextBlock2Lines(text, delimiters, keep_delim=True):
""" This splits a string into a list of sub-strings split by delimiter
characters. This function is different from the standard str.split()
function: The string is split at every character which belongs to the
"delimiters" argument (which can be a string or some other container).
This character is included at the end of every substring. Example:
TextBlock2Lines('\nabc\nde^fg\nhi j\n', '^\n')
returns:
['\n', 'abc\n', 'de^', 'fg\n', 'hi j\n']
"""
ls = []
i = 0
i_prev = 0
while i < len(text):
if text[i] in delimiters:
if keep_delim:
ls.append(text[i_prev:i+1])
else:
ls.append(text[i_prev:i])
i_prev = i+1
i += 1
if (i_prev < len(text)):
ls.append(text[i_prev:i+1])
return ls
def __iter__(self):
return self
def __next__(self):
line = self.ReadLine()
if line == self.eof:
raise StopIteration
return line
class OSrcLoc(object):
""" OSrcLoc is barely more than a 2-tuple containing the name of a file
(a string) and a particular line number inside that file (an integer).
These objects are passed around and stored in the nodes of
every tree, so that if a syntax error or broken link in that node
is discovered, an error message can be provided to the user.
"order"
Later on, during development, the "order" member was added. Why:
If you want to know whether block of text comes before or after a
different block of text, unfortunately you can not just compare the
corresponding line numbers of the files they come from because the
files may differ, and multiple short blocks of text may occupy the
same line. Consequently, "OSrcLoc" also maintains an internal
counter which keeps track of how many OSrcLoc() objects have been
created so far. (This can be useful if the user requests that
variables and commands be assigned in a non-standard order.)
The "order" member is assigned to this counter.
Most of the time, the "order" member can be ignored.
"""
__slots__=["infile","lineno","order"]
count = 0
def __init__(self, infile='', lineno=-1):
self.infile = infile
self.lineno = lineno
OSrcLoc.count += 1
self.order = OSrcLoc.count
def __lt__(self, x):
return self.order < x.order
#def __repr__(self):
# return repr((self.infile, self.lineno, self.order))
class TextBlock(object):
"""TextBlock is just a 3-tuple consisting of a string, and an OSrcLoc
to help locate it in the original file from which it was read."""
__slots__=["text","srcloc"]
def __init__(self, text, srcloc): #srcloc_end):
self.text = text
if srcloc == None:
self.srcloc = OSrcLoc()
else:
self.srcloc = srcloc
#if srcloc_end == None:
# self.srcloc_end = OSrcLoc()
#else:
# self.srcloc_end = srcloc_end
def __repr__(self):
return '\"'+self.text+'\"'
class VarRef(object):
"""VarRef stores variable names, and paths, and other attribute information,
as well as a "OSrcLoc" to keep track of the file it was defined in."""
__slots__=["prefix","descr_str","suffix","srcloc","binding","nptr"]
def __init__(self,
prefix = '', # '$' or '${'
descr_str = '', # <- descriptor string: "cpath/category:lpath"
suffix = '', # '}'
srcloc = None,# location in file where defined
binding = None,# a pointer to a tuple storing the value
nptr = None):# <- see class VarNPtr
self.prefix = prefix #Any text before the descriptor string goes here
self.suffix = suffix #Any text after the descriptor string goes here
self.descr_str = descr_str
if srcloc == None: # <- Location in text file where variable appears
self.srcloc = OSrcLoc()
else:
self.srcloc = srcloc
self.binding = binding
if nptr == None:
self.nptr = VarNPtr()
else:
self.nptr = nptr
def __lt__(self, x):
return self.order < x.order
#def __repr__(self):
# return repr((self.prefix + self.descr_str + self.suffix, srcloc))
class VarNPtr(object):
"""
Every time a variable appears in a template, it has has a "descritpor".
For example, consider the variable
"$atom:CA"
This is a string which encodes 3 pieces of information.
1) the category name: This is essentialy indicates the variable's type.
(ie "atom", in the example above)
2) the category node: Some TYPES have limited scope. Users can
specify the root node of the portion of the tree
in which this variable's type makes sense.
If this node is the root node, then that category
is relevant everywhere, and is not molecule or class
specific. All variables have a category node, which
is often not explicitly defined to by the user.
It must be inferred/determined.)
(Category node = the root "/", in the example above.)
3) the leaf node: This is a node whose ".name" member matches the name
of a variable. This node is created for this purpose
and it's position in the tree is a reflection of
that variable's intended scope.
In a molecule this "name" might be the name
of a type of atom, or an atom ID, or a bond type,
which is found in a particular molecule.
(Leaf node would be named "CA" in the example above.)
The VarNPtr class is simply a 3-tuple which
keeps these 3 pieces of data together.
"""
__slots__=["cat_name","cat_node","leaf_node"]
def __init__(self, cat_name='', cat_node=None, leaf_node=None):
self.cat_name = cat_name
self.cat_node = cat_node
self.leaf_node = leaf_node
#def __repr__(self):
# return repr((self.cat_name, self.cat_node.name, self.leaf_node.name))
class VarBinding(object):
""" VarBinding is essentially a tuple consistng of (full_name, binding, refs):
"self.full_name" is canonical name for this variable. This is a string
which specifies full path leading to the category node (beginning with '/'),
the category name (followed by a ':'),
as well as the leaf node (including the path leading up to it from cat_node)
This triplet identifies the variable uniquely.
"self.value" is the data that the variable refers to (usually a string).
"self.refs" stores a list of VarRefs which mention the same variable
from the various places inside various templates in the tree.
"""
__slots__=["full_name","nptr","value","refs","order","category"]
def __init__(self,
full_name = '',
nptr = None,
value = None,
refs = None,
order = None,
category = None):
self.full_name = full_name
self.nptr = nptr
self.value = value
self.refs = refs
self.order = order
self.category = category
def __lt__(self, x):
return self.order < x.order
def __repr__(self):
return repr((self.full_name, self.value, self.order))
def ExtractCatName(descr_str):
""" When applied to a VarRef's "descr_str" member,
this function will extract the "catname" of it's corresponding
"nptr" member. This can be useful for error reporting.
(I use it to insure that the user is using the correct counter
variable types at various locations in their input files.)
"""
ib = descr_str.find(':')
if ib == -1:
ib = len(descr_str)
ia = descr_str.rfind('/')
if ia == -1:
ia = 0
return descr_str[ia:ib]
else:
str_before_colon = descr_str[0:ib]
ia = str_before_colon.rfind('/')
if ia == -1:
return str_before_colon
else:
return str_before_colon[ia+1:]
def _DeleteLineFromTemplate(tmpl_list,
i_entry, # index into tmpl_list
newline_delimiter='\n'):
""" Delete a single line from tmpl_list.
tmpl_list is an alternating list of VarRefs and TextBlocks.
To identify the line, the index corresponding to one of the
entries in the tmpl_list is used. (Usually it is a VarRef)
The text after the preceeding newline, and the text up to the next newline
(starting from the beginning of the current entry, if a TextBlock)
is deleted, including any VarRef (variables) located in between.
It returns the index corresponding to the next
entry in the list (after deletion).
"""
i_prev_newline = i_entry
while i_prev_newline >= 0:
entry = tmpl_list[i_prev_newline]
if isinstance(entry, TextBlock):
i_char_newline = entry.text.rfind(newline_delimiter)
if i_char_newline != -1: # then newline found
# Delete the text after this newline
entry.text = entry.text[:i_char_newline+1]
break
i_prev_newline -= 1
first_var = True
#i_next_newline = i_entry
i_next_newline = i_prev_newline+1
while i_next_newline < len(tmpl_list):
entry = tmpl_list[i_next_newline]
if isinstance(entry, TextBlock):
i_char_newline = entry.text.find(newline_delimiter)
if i_char_newline != -1: # then newline found
# Delete the text before this newline (including the newline)
entry.text = entry.text[i_char_newline+1:]
break
# Invoke DeleteSelf() on the first variables on this line. This will
# insure that it is deleted from the ttree_assignments.txt file.
elif isinstance(entry, VarRef):
if first_var:
entry.nptr.leaf_node.DeleteSelf()
first_var = False
i_next_newline += 1
del tmpl_list[i_prev_newline + 1 : i_next_newline]
return i_prev_newline + 1
def DeleteLinesWithBadVars(tmpl_list,
delete_entire_template = False,
newline_delimiter = '\n'):
"""
Loop through the entries in a template,
an alternating list of TextBlocks and VarRefs (tmpl_list).
If a VarRef points to a leaf_node which no longer exists
(ie. no longer in the corresponding category's .bindings list).
Then delete the line it came from from the template (tmpl_list).
"""
out_str_list = []
i = 0
while i < len(tmpl_list):
entry = tmpl_list[i]
if isinstance(entry, VarRef):
var_ref = entry
var_bindings = var_ref.nptr.cat_node.categories[var_ref.nptr.cat_name].bindings
#if var_ref.nptr.leaf_node not in var_bindings:
if var_ref.nptr.leaf_node.IsDeleted():
if delete_entire_template:
del tmpl_list[:]
return 0
else:
i = _DeleteLineFromTemplate(tmpl_list,
i,
newline_delimiter)
else:
i += 1
else:
i += 1
def SplitTemplate(ltmpl, delim, delete_blanks = False):
"""
Split a template "ltmpl" into a list of "tokens" (sub-templates)
using a single delimiter string "delim".
INPUT arguments:
"ltmpl" should be an list of TextBlocks and VarRefs.
"delim" should be a simple string (type str)
"delete_blanks" should be a boolean True/False value.
When true, successive occurrences of the delimiter
should not create blank entries in the output list.
OUTPUT:
A list of tokens.
Each "token" is either a TextBlock, a VarRef,
or a (flat, 1-dimensional) list containing more than one of these objects.
The number of "tokens" returned equals the number of times the delimiter
is encountered in any of the TextBlocks in the "ltmpl" argument, plus one.
(... Unless "delete_blanks" is set to True.
Again, in that case, empty entries in this list are deleted.)
"""
assert(type(delim) is str)
if not hasattr(ltmpl, '__len__'):
ltmpl = [ltmpl]
tokens_lltmpl = []
token_ltmpl = []
i = 0
while i < len(ltmpl):
entry = ltmpl[i]
if isinstance(entry, TextBlock):
#if hasattr(entry, 'text'):
prev_src_loc = entry.srcloc
tokens_str = entry.text.split(delim)
lineno = entry.srcloc.lineno
j = 0
while j < len(tokens_str):
token_str = tokens_str[j]
delim_found = False
if (j < len(tokens_str)-1):
delim_found = True
if token_str == '':
if delete_blanks:
if delim == '\n':
lineno += 1
if len(token_ltmpl) > 0:
if len(token_ltmpl) == 1:
tokens_lltmpl.append(token_ltmpl[0])
else:
tokens_lltmpl.append(token_ltmpl)
del token_ltmpl
token_ltmpl = []
j += 1
continue
new_src_loc = OSrcLoc(prev_src_loc.infile, lineno)
new_src_loc.order = prev_src_loc.order
for c in token_str:
# Reminder to self: c != delim (so c!='\n' if delim='\n')
# (We keep track of '\n' characters in delimiters above.)
if c == '\n':
lineno +=1
new_src_loc.lineno = lineno
text_block = TextBlock(token_str,
new_src_loc)
prev_src_loc = new_src_loc
if len(token_ltmpl) == 0:
if delim_found:
tokens_lltmpl.append(text_block)
del token_ltmpl
token_ltmpl = []
else:
token_ltmpl.append(text_block)
else:
if delim_found:
if len(token_str) > 0:
token_ltmpl.append(text_block)
tokens_lltmpl.append(token_ltmpl)
del token_ltmpl
token_ltmpl = []
else:
assert(not delete_blanks)
if (isinstance(token_ltmpl[-1], VarRef)
and
((j>0)
or
((j == len(tokens_str)-1) and
(i == len(ltmpl)-1))
)):
# In that case, this empty token_str corresponds
# to a delimiter which was located immediately
# after the variable name,
# AND
# -there is more text to follow,
# OR
# -we are at the end of the template.
token_ltmpl.append(text_block)
if len(token_ltmpl) == 1:
tokens_lltmpl.append(token_ltmpl[0])
else:
tokens_lltmpl.append(token_ltmpl)
del token_ltmpl
token_ltmpl = []
else:
token_ltmpl.append(text_block)
if (delim_found and (delim == '\n')):
lineno += 1
j += 1
elif isinstance(entry, VarRef):
#elif hasattr(entry, 'descr_str'):
lineno = entry.srcloc.lineno
if ((len(token_ltmpl) == 1) and
isinstance(token_ltmpl[0], TextBlock) and
(len(token_ltmpl[0].text) == 0)):
# special case: if the previous entry was "", then it means
# the delimeter appeared at the end of the previous text block
# leading up to this variable. It separates the variable from
# the previous text block. It is not a text block of length 0.
token_ltmpl[0] = entry
else:
token_ltmpl.append(entry)
elif entry == None:
token_ltmpl.append(entry)
else:
assert(False)
i += 1
# Append left over remains of the last token
if len(token_ltmpl) == 1:
tokens_lltmpl.append(token_ltmpl[0])
elif len(token_ltmpl) > 1:
tokens_lltmpl.append(token_ltmpl)
del token_ltmpl
return tokens_lltmpl
def SplitTemplateMulti(ltmpl, delims, delete_blanks=False):
"""
Split a template "ltmpl" into a list of templates using a
single one or more delimiter strings "delim_list".
If multiple delimiter strings are provided, splitting
begins using the first delimiter string in the list.
Then each token in the resulting list of templates
is split using the next delimiter string
and so on until we run out of delimiter strings.
"ltmpl" should be an list of TextBlocks and VarRefs.
"delims" should be a simple string (type str) or a list of strings
"delete_blanks" is either True or False
If True, then any blank entries in the resulting list of
tokens (sub-templates) will be deleted.
"""
if hasattr(delims, '__len__'): # then it hopefully is a list of strings
delim_list = delims
else:
delim_list = [delims] # then it hopefully is a string
tokens = [ltmpl]
for delim in delim_list:
assert(type(delim) is str)
tokens_il = []
for t in tokens:
sub_tokens = SplitTemplate(t, delim, delete_blanks)
for st in sub_tokens:
if hasattr(st, '__len__'):
if (len(st) > 0) or (not delete_blanks):
tokens_il.append(st)
else:
tokens_il.append(st)
tokens = tokens_il
del tokens_il
return tokens
def _TableFromTemplate(d, ltmpl, delimiters, delete_blanks):
"""
See the docstring for the TableFromTemplate() function for an explanation.
(This _TableFromTemplate() and SplitTemplate() are the workhorse functions
for TableFromTemplate().)
"""
output = SplitTemplateMulti(ltmpl, delimiters[d], delete_blanks[d])
if d > 0:
i = 0
while i < len(output):
output[i] = _TableFromTemplate(d-1,
output[i],
delimiters,
delete_blanks)
# Delete empty LISTS?
if (delete_blanks[d] and
hasattr(output[i], '__len__') and
(len(output[i]) == 0)):
del output[i]
else:
i += 1
return output
def TableFromTemplate(ltmpl, delimiters, delete_blanks=True):
"""
This function can be used to split a template
(a list containing TextBlocks and VarRefs) into a table
into a multidimensional table, with an arbitrary number of dimensions.
Arguments:
ltmpl
An alternating list of TextBlocks and VarRefs containing
the contents of this text template.
delimiters
The user must supply a list or tuple of delimiters: one delimiter for
each dimension in the table, with low-priority delimiters
(such as spaces ' ') appearing first, and higher-priority delimiters
(sich as newlines '\n') appearing later on in the list.
This function will divide the entire "ltmpl" into an n-dimensional
table. Initially the text is split into a list of text using the
highest-priority delimiter. Then each entry in the resulting list is
split into another list according to the next highest-priority delimiter.
This continues until all of the delimiters are used up and an
n-dimensional list-of-lists is remaining.
delete_blanks
The optional "delete_blanks" argument can be used to indicate whether
or not to delete blank entries in the table (which occur as a result
of placing two delimiters next to each other). It should be either
None (default), or it should be an array of booleans matching the
size of the "delimiters" argument. This allows the caller to customize
the merge settings separately for each dimension (for example: to allow
merging of whitespace within a line, without ignoring blank lines).
---- Details: ----
1) Multi-character delimiters ARE allowed (like '\n\n').
2) If a delimiter in the "delimiters" argument is not a string
but is a tuple (or a list) of strings, then the text is split according
to any of the delimiters in that tuple/list (starting from the last entry).
This way, users can use this feature to split text according to multiple
different kinds of whitespace characters (such as ' ' and '\t'), for
example, buy setting delimiters[0] = (' ','\t'). If, additionally,
delete_blanks[0] == True, then this will cause this function to
divide text in without regard to whitespace on a given line (for example).
Detailed example:
table2D = TableFromTmplList(ltmpl,
delimiters = ((' ','\t'), '\n'),
delete_blanks = (True, False))
This divides text in a similar way that the "awk" program does by default,
ie, by ignoring various kinds of whitespace between text fields, but NOT
ignoring blank lines.
3) Any text contained in variable-names is ignored.
"""
# Make a copy of ltmpl
# (The workhorse function "_TableFromTemplate()" makes in-place changes to
# its "ltmpl" argument. I don't want to modify "ltmpl", so I make a copy
# of it before I invoke "_TableFromTemplate()" on it.)
output = [ltmpl[i] for i in range(0, len(ltmpl))]
d = len(delimiters) - 1
output = _TableFromTemplate(d, output, delimiters, delete_blanks)
return output
class TemplateLexer(TtreeShlex):
""" This class extends the standard python lexing module, shlex, adding a
new member function (ReadTemplate()), which can read in a block of raw text,
(halting at an (non-escaped) terminal character), and split the text into
alternating blocks of text and variables. (As far as this lexer is
concerned, "variables" are simply tokens preceeded by $ or @ characters,
and surrounded by optional curly-brackets {}.)
"""
def __init__(self,
instream=None,
infile=None,
posix=False):
TtreeShlex.__init__(self, instream, infile, posix)
self.var_delim = '$@' #characters which can begin a variable name
self.var_open_paren = '{' #optional parenthesis surround a variable
self.var_close_paren = '}' #optional parenthesis surround a variable
self.newline = '\n'
self.comment_skip_var = '#'
# Which characters belong in words?
#
# We want to allow these characters:
# ./$@&%^!*~`-_:;?<>[]()
# to appear inside the tokens that TtreeShlex.get_token()
# retrieves (TtreeShlex.get_token() is used to read class
# names, and instance names, and variable names)
#
# settings.lex.wordchars+='./$@&%^!*~`-_+:;?<>[]' #Allow these chars
#
# Ommisions:
# Note: I left out quotes, whitespace, comment chars ('#'), and escape
# characters ('\\') because they are also dealt with separately.
# Those characters should not overlap with settings.lex.wordchars.
#
# Enabling unicode support requires that we override this choice
# by specifying "lex.wordterminators" instead of "wordchars".
#
# lex.wordterminators should be the (printable) set inverse of lex.wordchars
# I'm not sure which ascii characters are NOT included in the string above
# (We need to figure that out, and put them in settings.lex.wordterminators)
# To figure that out, uncomment the 8 lines below:
#
#self.wordterminators=''
#for i in range(0,256):
# c = chr(i)
# if c not in self.wordchars:
# self.wordterminators += c
#sys.stderr.write('-------- wordterminators = --------\n')
#sys.stderr.write(self.wordterminators+'\n')
#sys.stderr.write('-----------------------------------\n')
#
# Here is the result:
self.wordterminators = '(),={|}' + \
self.whitespace + \
self.quotes + \
self.escape + \
self.commenters
# Note:
# self.whitespace = ' \t\r\f\n'
# self.quotes = '\'"'
# self.escape = '\\'
# self.commenters = '#'
self.source_triggers=set(['include','import'])
self.source_triggers_x=set(['import'])
def GetSrcLoc(self):
return OSrcLoc(self.infile, self.lineno)
def ReadTemplate(self,
simplify_output=False,
terminators='}',
other_esc_chars='{',
keep_terminal_char = True):
"""
ReadTemplate() reads a block of text (between terminators)
and divides it into variables (tokens following a '$' or '@' character)
and raw text. This is similar to pythons string.Template(),
however it reads from streams (files), not strings, and it allows use
of more complicated variable names with multiple variable delimiters
(eg '$' and '@').
This readline()-like member function terminates when reaching a
user-specified terminator character character (second argument),
or when variable (eg: "$var"$ is encountered). The result is
a list of variable-separated text-blocks (stored in the first
argument). For example, the string:
"string with $var1 and $var2 variables.}" contains:
"string with ",
$var1,
" and ",
$var2,
" variables.}"
This simplifies the final process of rendering
(substituting text into) the text blocks later on.
Output:
This function returns a list of (alternating) blocks of
text, and variable names. Each entry in the list is either:
1) a text block:
Raw text is copied from the source, verbatim, along with
some additional data (filename and line numbers), to
help retroactively identify where the text came from
(in case a syntax error in the text is discovered later).
In this case, the list entry is stored as a list
The format (TextBlock) is similar to:
[text_string, ((filenameA,lineBegin), (filenameB,lineEnd))],
where the tuples, (filenameA,lineBegin) and (filenameB,lineEnd)
denote the source file(s) from which the text was read, and
line number at the beginning and ending of the text block.
(This information is useful for generating helpful error
messages. Note that the "TtreeShlex" class allows users to
combine multiple files transparently into one stream using
the "source" (or "sourcehook()") member. For this reason, it
is possible, although unlikely, that the text-block
we are reading could span multiple different files.)
2) a variable (for example "$var" or "${var}"):
In this case, the list entry is stored in the "VarRef" format
which is essentialy shown below:
[[var_prefix, var_nptr, var_suffix], (filename,lineno)]
where var_prefix and var_suffix are strings containing brackets
and other text enclosing the variable name (and may be empty).
As an example, we consider a file named "datafile" which
contains the text containing 2 text blocks and 1 variable:
"some\n text\n before ${var}. Text after\n".
ReadTemplate() will read this and return a list with 3 entries:
[ ['some\n text\n before', (('datafile', 1), ('datafile', 3))],
[['${', 'var', '}'], ('datafile', 3, 3)],
['Text after\n', (('datafile', 3), ('datafile', 4))] ]
Note that while parsing the text, self.lineno counter is
incremented whenever a newline character is encountered.
(Also: Unlike shlex.get_token(), this function does not
delete commented text, or insert text from other files.)
Exceptional Cases:
Terminator characters are ignored if they are part of a variable
reference. (For example, the '}' in "${var}", is used to denote a
bracketed variable, and does not cause ReadTemplate() to stop reading)
OR if they are part of a two-character escape sequence
(for example, '}' in "\}" does not cause terminate parsing).
In that case, the text is considered normal text. (However the
'\' character is also stripped out. It is also stripped out if it
preceeds any characters in "other_esc_chars", which is
the second argument. Otherwise it is left in the text block.)
"""
#print(' ReadTemplate('+terminators+') invoked at '+self.error_leader())
# The main loop of the parser reads only one variable at time.
# The following variables keep track of where we are in the template.
reading_var=False # Are we currently reading in the name of a variable?
prev_char_delim=False #True iff we just read a var_delim character like '$'
escaped_state=False #True iff we just read a (non-escaped) esc character '\'
commented_state=False #True iff we are in a region of text where vars should be ignored
var_paren_depth=0 # This is non-zero iff we are inside a
# bracketed variable's name for example: "${var}"
var_terminators = self.whitespace + self.newline + self.var_delim + '{}'
tmpl_list = [] # List of alternating tuples of text_blocks and
# variable names (see format comment above)
# This list will be returned to the caller.
#sys.stderr.write('report_progress='+str(report_progress))
prev_filename = self.infile
prev_lineno = self.lineno
var_prefix = ''
var_descr_plist = []
var_suffix = ''
text_block_plist = []
done_reading = False
while not done_reading:
terminate_text = False
terminate_var = False
#delete_prior_escape = False
nextchar = self.read_char()
#print(' ReadTemplate() nextchar=\''+nextchar+'\' at '+self.error_leader()+' esc='+str(escaped_state)+', pvar='+str(prev_char_delim)+', paren='+str(var_paren_depth))
# Count newlines:
if nextchar in self.newline:
commented_state = False
self.lineno += 1
elif ((nextchar in self.comment_skip_var) and
(not escaped_state)):
commented_state = True
# Check for end-of-file:
if nextchar == '':
if escaped_state:
raise InputError('Error: in '+self.error_leader()+'\n\n'
'No escaped character.')
if reading_var:
terminate_var = True
else:
terminate_text = True
done_reading = True
# --- Now process the character: ---
# What we do next depends on which "mode" we are in.
# If we are reading a regular text block (reading_var == False),
# then we keep appending characters onto the end of "text_block",
# checking for terminal characters, or variable delimiters.
# If we are reading a variable name (reading_var == True),
# then we append characters to the end of "var_descr_plist[]",
# checking for variable terminator characters, as well as
# parenthesis (some variables are surrounded by parenthesis).
elif reading_var:
if nextchar in terminators:
#sys.stdout.write(' ReadTemplate() readmode found terminator.\n')
if escaped_state:
# In this case, the '\' char was only to prevent terminating
# string prematurely, so delete the '\' character.
#delete_prior_escape = True
if not (nextchar in self.var_close_paren):
del var_descr_plist[-1]
var_descr_plist.append(nextchar)
elif not ((var_paren_depth>0) and (nextchar in self.var_close_paren)):
terminate_var = True
done_reading = True
if nextchar in self.var_open_paren: # eg: nextchar == '{'
#sys.stdout.write(' ReadTemplate() readmode found {.\n')
if escaped_state:
# In this case, the '\' char was only to prevent
# interpreting '{' as a variable prefix
#delete_prior_escape=True # so delete the '\' character
del var_descr_plist[-1]
var_descr_plist.append(nextchar)
else:
# "${var}" is a valid way to refer to a variable
if prev_char_delim:
var_prefix += nextchar
var_paren_depth = 1
# "${{var}}" is also a valid way to refer to a variable,
# (although strange), but "$va{r}" is not.
# Parenthesis (in bracketed variable names) must
# immediately follow the '$' character (as in "${var}")
elif var_paren_depth > 0:
var_paren_depth += 1
elif nextchar in self.var_close_paren:
#sys.stdout.write(' ReadTemplate() readmode found }.\n')
if escaped_state:
# In this case, the '\' char was only to prevent
# interpreting '}' as a variable suffix,
#delete_prior_escape=True #so skip the '\' character
if (nextchar not in terminators):
del var_descr_plist[-1]
var_descr_plist.append(nextchar)
else:
if var_paren_depth > 0:
var_paren_depth -= 1
if var_paren_depth == 0:
var_suffix = nextchar
terminate_var = True
elif nextchar in var_terminators:
#sys.stdout.write(' ReadTemplate() readmode found var_terminator \"'+nextchar+'\"\n')
if (escaped_state or (var_paren_depth>0)):
# In this case, the '\' char was only to prevent
# interpreting nextchar as a variable terminator
#delete_prior_escape = True # so skip the '\' character
del var_descr_plist[-1]
var_descr_plist.append(nextchar)
else:
terminate_var = True
elif nextchar in self.var_delim: # such as '$'
#sys.stdout.write(' ReadTemplate() readmode found var_delim.\n')
if escaped_state:
# In this case, the '\' char was only to prevent
# interpreting '$' as a new variable name
#delete_prior_escape = True # so skip the '\' character
del var_descr_plist[-1]
var_descr_plist.append(nextchar)
else:
prev_var_delim = True
# Then we are processing a new variable name
terminate_var = True
else:
var_descr_plist.append(nextchar)
prev_char_delim = False
else: # begin else clause for "if reading_var:"
# Then we are reading a text_block
if nextchar in terminators:
if escaped_state:
# In this case, the '\' char was only to prevent terminating
# string prematurely, so delete the '\' character.
#delete_prior_escape = True
del text_block_plist[-1]
text_block_plist.append(nextchar)
elif commented_state:
text_block_plist.append(nextchar)
else:
terminate_text = True
done_reading = True
elif nextchar in self.var_delim: # such as '$'
if escaped_state:
# In this case, the '\' char was only to prevent
# interpreting '$' as a variable prefix.
#delete_prior_escape=True #so delete the '\' character
del text_block_plist[-1]
text_block_plist.append(nextchar)
elif commented_state:
text_block_plist.append(nextchar)
else:
prev_char_delim = True
reading_var = True
var_paren_depth = 0
terminate_text = True
else:
text_block_plist.append(nextchar)
#TO DO: use "list_of_chars.join()" instead of '+='
prev_char_delim = False # the previous character was not '$'
# Now deal with "other_esc_chars"
#if escaped_state and (nextchar in other_esc_chars):
if escaped_state and (nextchar in other_esc_chars):
if reading_var:
#sys.stdout.write(' ReadTemplate: var_descr_str=\''+''.join(var_descr_plist)+'\'\n')
assert(var_descr_plist[-2] in self.escape)
del var_descr_plist[-2]
else:
#sys.stdout.write(' ReadTemplate: text_block=\''+''.join(text_block_plist)+'\'\n')
assert(text_block_plist[-2] in self.escape)
del text_block_plist[-2]
if terminate_text:
#sys.stdout.write('ReadTemplate() appending: ')
#sys.stdout.write(text_block)
#tmpl_list.append( [text_block,
# ((prev_filename, prev_lineno),
# (self.infile, self.lineno))] )
if simplify_output:
tmpl_list.append(''.join(text_block_plist))
else:
tmpl_list.append(TextBlock(''.join(text_block_plist),
OSrcLoc(prev_filename, prev_lineno)))
#, OSrcLoc(self.infile, self.lineno)))
if not done_reading:
# The character that ended the text block
# was a variable delimiter (like '$'), in which case
# we should put it (nextchar) in the variable's prefix.
var_prefix = nextchar
else:
var_prefix = ''
var_descr_plist = []
var_suffix = ''
prev_filename = self.infile
prev_lineno = self.lineno
del text_block_plist
text_block_plist = []
#gc.collect()
elif terminate_var:
# Print an error if we terminated in the middle of
# an incomplete variable name:
if prev_char_delim:
raise InputError('Error: near '+self.error_leader()+'\n\n'
'Null variable name.')
if var_paren_depth > 0:
raise InputError('Error: near '+self.error_leader()+'\n\n'
'Incomplete bracketed variable name.')
var_descr_str = ''.join(var_descr_plist)
# Now check for variable format modifiers,
# like python's ".rjust()" and ".ljust()".
# If present, then put these in the variable suffix.
if ((len(var_descr_plist)>0) and (var_descr_plist[-1]==')')):
#i = len(var_descr_plist)-1
#while i >= 0:
# if var_descr_plist[i] == '(':
# break
# i -= 1
i = var_descr_str.rfind('(')
if (((i-6) >= 0) and
((var_descr_str[i-6:i] == '.rjust') or
(var_descr_str[i-6:i] == '.ljust'))):
var_suffix =''.join(var_descr_plist[i-6:])+var_suffix
#var_descr_plist = var_descr_plist[:i-6]
var_descr_str = var_descr_str[:i-6]
# Process any special characters in the variable name
var_descr_str = EscCharStrToChar(var_descr_str)
#tmpl_list.append( [[var_prefix, var_descr_str, var_suffix],
# (self.infile, self.lineno)] )
if simplify_output:
tmpl_list.append(var_prefix + var_descr_str + var_suffix)
else:
tmpl_list.append( VarRef(var_prefix, var_descr_str, var_suffix,
OSrcLoc(self.infile, self.lineno)) )
#if report_progress:
#sys.stderr.write(' parsed variable '+var_prefix+var_descr_str+var_suffix+'\n')
#sys.stdout.write('ReadTemplate() appending: ')
#print(var_prefix + var_descr_str + var_suffix)
del var_descr_plist
del var_descr_str
prev_filename = self.infile
prev_lineno = self.lineno
var_prefix = ''
var_descr_plist = []
var_suffix = ''
# Special case: Variable delimiters like '$'
# terminate the reading of variables,
# but they also signify that a new
# variable is being read.
if nextchar in self.var_delim:
# Then we are processing a new variable name
prev_var_delim = True
reading_var = True
var_paren_depth = 0
var_prefix = nextchar
elif nextchar in self.var_close_paren:
del text_block_plist
text_block_plist = []
#gc.collect()
prev_var_delim = False
reading_var = False
else:
# Generally, we don't want to initialize the next text block
# with the empty string. Consider that whatever character
# caused us to stop reading the previous variable and append
# it to the block of text that comes after.
del text_block_plist
text_block_plist = [nextchar]
#gc.collect()
prev_var_delim = False
reading_var = False
# If we reached the end of the template (and the user requests it),
# then the terminal character can be included in the list
# of text_blocks to be returned to the caller.
if done_reading and keep_terminal_char:
#sys.stdout.write('ReadTemplate() appending: \''+nextchar+'\'\n')
# Here we create a new text block which contains only the
# terminal character (nextchar).
#tmpl_list.append( [nextchar,
# ((self.infile, self.lineno),
# (self.infile, self.lineno))] )
if simplify_output:
tmpl_list.append(nextchar)
else:
tmpl_list.append(TextBlock(nextchar,
OSrcLoc(self.infile, self.lineno)))
#, OSrcLoc(self.infile, self.lineno)))
if escaped_state:
escaped_state = False
else:
if nextchar in self.escape:
escaped_state = True
#print("*** TMPL_LIST0 = ***", tmpl_list)
return tmpl_list # <- return value stored here
def GetParenExpr(self, prepend_str='', left_paren='(', right_paren=')'):
""" GetParenExpr() is useful for reading in strings
with nested parenthesis and spaces.
This function can read in the entire string:
.trans(0, 10.0*sin(30), 10.0*cos(30))
(Because I was too lazy to write this correctly...)
Spaces are currently stripped out of the expression.
(...unless surrounded by quotes) The string above becomes:
".trans(0,10.0*sin(30),10.0*cos(30))"
Sometimes the caller wants to prepend some text to the beginning
of the expression (which may contain parenthesis). For this
reason, an optional first argument ("prepend_str") can be
provided. By default it is empty.
"""
orig_wordterm = self.wordterminators
self.wordterminators = self.wordterminators.replace(left_paren,'').replace(right_paren,'')
token = self.get_token()
if ((token == '') or
(token == self.eof)):
return prepend_str
expr_str = prepend_str + token
#if (expr_str.find(left_paren) == -1):
# raise InputError('Error near or before '+self.error_leader()+'\n'
# 'Expected an open-paren (\"'+prepend_str+left_paren+'\") before this point.\n')
# return expr_str
paren_depth = expr_str.count(left_paren) - expr_str.count(right_paren)
while ((len(expr_str) == 0) or (paren_depth > 0)):
token = self.get_token()
if ((type(token) is not str) or
(token == '')):
raise InputError('Error near or before '+self.error_leader()+'\n'
'Invalid expression: \"'+expr_str+'\"')
expr_str += token
paren_depth = expr_str.count(left_paren) - expr_str.count(right_paren)
if (paren_depth != 0):
raise InputError('Error near or before '+self.error_leader()+'\n'
'Invalid expression: \"'+expr_str+'\"')
self.wordterminators = orig_wordterm
return expr_str
if __name__ == '__main__':
if len(sys.argv) == 1:
lexer = TtreeShlex()
else:
file = sys.argv[1]
lexer = TtreeShlex(open(file), file)
while 1:
tt = lexer.get_token()
if tt:
print("Token: " + repr(tt))
else:
break
diff --git a/tools/moltemplate/src/ttree_matrix_stack.py b/tools/moltemplate/src/ttree_matrix_stack.py
index 52d2a82f6..189be32c3 100644
--- a/tools/moltemplate/src/ttree_matrix_stack.py
+++ b/tools/moltemplate/src/ttree_matrix_stack.py
@@ -1,702 +1,710 @@
# Author: Andrew Jewett (jewett.aij@gmail.com)
# http://www.chem.ucsb.edu/~sheagroup
# License: 3-clause BSD License (See LICENSE.TXT)
# Copyright (c) 2012, Regents of the University of California
# All rights reserved.
from collections import deque
from array import array
from ttree_lex import *
#import sys
def MultMat(dest, A, B):
""" Multiply two matrices together. Store result in "dest".
"""
I = len(A)
J = len(B[0])
K = len(B) # or len(A[0])
for i in range(0,I):
for j in range(0,J):
dest[i][j] = 0.0
for k in range(0,K):
dest[i][j] += A[i][k] * B[k][j]
def MatToStr(M):
strs = []
for i in range(0, len(M)):
for j in range(0, len(M[i])):
strs.append(str(M[i][j])+' ')
strs.append('\n')
return(''.join(strs))
def LinTransform(dest, M, x):
""" Multiply matrix M by 1-dimensioal array (vector) "x" (from the right).
Store result in 1-dimensional array "dest".
In this function, wetreat "x" and "dest" as a column vectors.
(Not row vectors.)
"""
I = len(A)
J = len(x)
for i in range(0,I):
dest[i] = 0.0
for j in range(0,J):
dest[i] += M[i][j] * x[j]
def AffineTransform(dest, M, x):
""" This function performs an affine transformation on vector "x".
Multiply 3-dimensional vector "x" by first three columns of 3x4
matrix M. Add to this the final column of M. Store result in "dest":
dest[0] = M[0][0]*x[0] + M[0][1]*x[1] + M[0][2]*x[2] + M[0][3]
dest[1] = M[1][0]*x[0] + M[1][1]*x[1] + M[1][2]*x[2] + M[1][3]
dest[2] = M[2][0]*x[0] + M[2][1]*x[1] + M[2][2]*x[2] + M[2][3]
"""
D = len(M)
#assert(len(M[0]) == D+1)
for i in range(0,D):
dest[i] = 0.0
for j in range(0,D):
dest[i] += M[i][j] * x[j]
dest[i] += M[i][D] #(translation offset stored in final column)
def AffineCompose(dest, M2, M1):
"""
Multiplication for pairs of 3x4 matrices is technically undefined.
However what we want to do is compose two affine transformations: M1 and M2
3x4 matrices are used to define rotations/translations
x' = M[0][0]*x + M[0][1]*y + M[0][2]*z + M[0][3]
y' = M[1][0]*x + M[1][1]*y + M[1][2]*z + M[1][3]
z' = M[2][0]*x + M[2][1]*y + M[2][2]*z + M[2][3]
We want to create a new 3x4 matrix representing an affine transformation
(M2 M1), defined so that when (M2 M1) is applied to vector x, the result is
M2 (M1 x). In other words:
first, affine transformation M1 is applied to to x
then, affine transformation M2 is applied to (M1 x)
"""
D = len(M1)
#assert(len(M1[0]) == D+1)
#assert(len(M2[0]) == D+1)
for i in range(0, D):
dest[i][D] = 0.0
for j in range(0, D+1):
dest[i][j] = 0.0
for k in range(0, D):
dest[i][j] += M2[i][k] * M1[k][j]
dest[i][D] += M2[i][D]
def CopyMat(dest, source):
for i in range(0, len(source)):
for j in range(0, len(source[i])):
dest[i][j] = source[i][j]
class AffineStack(object):
"""
This class defines a matrix stack used to define compositions of affine
transformations of 3 dimensional coordinates (rotation and translation).
Affine transformations are represented using 3x4 matrices.
(Coordinates of atoms are thought of as column vectors: [[x],[y],[z]],
although they are represented internally in the more ordinary way [x,y,z].
To aplly an affine transformation to a vector, multiply the vector
by the matrix, from the left-hand side, as explained in the comments for:
AffineTransform(dest, M, x)
Note: The last column of the 3x4 matrix stores a translational offset.
This bears similarity with the original OpenGL matrix stack
http://content.gpwiki.org/index.php/OpenGL:Tutorials:Theory
(OpenGL uses 4x4 matrices. We don't need the final row of these matrices,
because in OpenGL, these rows are used for perspective transformations.)
http://en.wikipedia.org/wiki/Homogeneous_coordinates#Use_in_computer_graphics
"""
def __init__(self):
self.stack = None
self.M = None
self._tmp = None
self.Clear()
def Clear(self):
self.stack = deque([])
self.M = [[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0]] # (identity, initially)
self._tmp = [[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0]]
def PushRight(self, M):
#Push a copy of matrix self.M onto the stack
# We make no distinction between "right" and "left" here.
# All transformations are pushed onto the stack in the same way.
# (The "right" and "left" refer to whether the matrix is multiplied
# on the right of left hand side. Because not all matrices need be
# invertible, we require that matrices be popped from the stack
# in the reverse order they were pushed. This prevents the ability
# to push and pop matrices to either end of the stack in an arbitrary
# order (like append(), appendleft(), pop(), popleft()).)
self.stack.append([[self.M[i][j] for j in range(0,len(self.M[i]))]
for i in range(0,len(self.M))])
# The "Right" and "Left" refer to whether the new matrix is multiplied
# on the right or left side of the culmulatie matrix product.
AffineCompose(self._tmp, self.M, M) # Afterwards, self._tmp = self.M * M
#sys.stderr.write('DEBUG: PushLeft()\n' +
# MatToStr(self._tmp) + '\n = \n' +
# MatToStr(M) + '\n * \n' +
# MatToStr(self.M) + '\n')
CopyMat(self.M, self._tmp) # Copy self._tmp into self.M
def PushLeft(self, M):
#Push a copy of matrix self.M onto the stack
# We make no distinction between right and left here.
# All transformations are pushed onto the stack in the same way.
# (The "right" and "left" refer to whether the matrix is multiplied
# on the right of left hand side. Because not all matrices need be
# invertible, we require that matrices be popped from the stack
# in the reverse order they were pushed. This prevents the ability
# to push and pop matrices to either end of the stack in an arbitrary
# order (like append(), appendleft(), pop(), popleft()).)
self.stack.append([[self.M[i][j] for j in range(0,len(self.M[i]))]
for i in range(0,len(self.M))])
# The "Right" and "Left" refer to whether the new matrix is multiplied
# on the right or left side of the culmulatie matrix product.
AffineCompose(self._tmp, M, self.M) # Afterwards, self._tmp = M * self.M
#sys.stderr.write('DEBUG: PushLeft()\n' +
# MatToStr(self._tmp) + '\n = \n' +
# MatToStr(M) + '\n * \n' +
# MatToStr(self.M) + '\n')
CopyMat(self.M, self._tmp) # Copy self.tmp into self.M
def Pop(self):
CopyMat(self.M, self.stack.pop())
# (No need to return a matrix,"self.M",after popping.
# The caller can directly access self.M later.)
#return self.M
def PopRight(self):
self.Pop()
def PopLeft(self):
self.Pop()
def PushCommandsRight(self,
text, # text containing affine transformation commands
# The next two arguments are optional:
src_loc = OSrcLoc(), # for debugging
xcm = None): # position of center of object
"""Generate affine transformation matrices from simple text commands
(such as \"rotcm(90,0,0,1)\" and \"move(0,5.0,0)".
Chains of "rotcm", "movecm", "rot", and "move" commands
can also be strung together:
\"rotcm(90,0,0,1).move(0,5.0,0)\"
Commands ending in \"cm\" are carried out relative to center-of-mass
(average position) of the object, and consequently require
an additional argument (\"xcm\").
"""
self.PushRight(AffineStack.CommandsToMatrix(text, src_loc, xcm))
def PushCommandsLeft(self,
text, # text containing affine transformation commands
# The next two arguments are optional:
src_loc = OSrcLoc(), # for debugging
xcm = None): # position of center of object
self.PushLeft(AffineStack.CommandsToMatrix(text, src_loc, xcm))
def __len__(self):
return 1 + len(self.stack)
@staticmethod
def CommandsToMatrix(text, # text containing affine transformation commands
src_loc = OSrcLoc(), # for debugging
xcm = None): # position of center of object
Mdest=[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0]]
M =[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0]]
Mtmp =[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0]]
transform_commands = text.split(').')
for transform_str in transform_commands:
if transform_str.find('move(') == 0:
i_paren_close = transform_str.find(')')
if i_paren_close == -1:
i_paren_close = len(transform_str)
args = transform_str[5:i_paren_close].split(',')
if (len(args) != 3):
raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
' Invalid command: \"'+transform_str+'\"\n'
' This command requires 3 numerical arguments.')
M = [[1.0, 0.0, 0.0, float(args[0])],
[0.0, 1.0, 0.0, float(args[1])],
[0.0, 0.0, 1.0, float(args[2])]]
AffineCompose(Mtmp, M, Mdest)
CopyMat(Mdest, Mtmp)
#if transform_str.find('movecm(') == 0:
# # assert(xcm != None)
# i_paren_close = transform_str.find(')')
# if i_paren_close == -1:
# i_paren_close = len(transform_str)
# args = transform_str[8:i_paren_close].split(',')
# if (len(args) != 3):
# raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
# ' Invalid command: \"'+transform_str+'\"\n'
# ' This command requires 3 numerical arguments.')
# M = [[1.0, 0.0, 0.0, float(args[0])-(xcm[0])],
# [0.0, 1.0, 0.0, float(args[1])-(xcm[1])],
# [0.0, 0.0, 1.0, float(args[2])-(xcm[2])]]
# AffineCompose(Mtmp, M, Mdest)
# CopyMat(Mdest, Mtmp)
elif transform_str.find('rot(') == 0:
i_paren_close = transform_str.find(')')
if i_paren_close == -1:
i_paren_close = len(transform_str)
args = transform_str[4:i_paren_close].split(',')
center_v = None
if (len(args) == 7):
center_v = [float(args[4]), float(args[5]), float(args[6])]
elif (len(args) != 4):
raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
' Invalid command: \"'+transform_str+'\"\n'
' This command requires either 4 or 7 numerical arguments. Either:\n'
' rot(angle, axisX, axisY, axiZ) or \n'
' rot(angle, axisX, axisY, axiZ, centerX, centerY, centerZ)')
M[0][3] = 0.0 #RotMatAXYZ() only modifies 3x3 submatrix of M
M[1][3] = 0.0 #The remaining final column must be zeroed by hand
M[2][3] = 0.0
RotMatAXYZ(M,
float(args[0])*math.pi/180.0,
float(args[1]),
float(args[2]),
float(args[3]))
if (center_v == None):
AffineCompose(Mtmp, M, Mdest)
CopyMat(Mdest, Mtmp)
else:
# Move "center_v" to the origin
moveCentToOrig = [[1.0, 0.0, 0.0, -center_v[0]],
[0.0, 1.0, 0.0, -center_v[1]],
[0.0, 0.0, 1.0, -center_v[2]]]
AffineCompose(Mtmp, moveCentToOrig, Mdest)
CopyMat(Mdest, Mtmp)
# Rotate the coordinates (relative to the origin)
AffineCompose(Mtmp, M, Mdest) # M is the rotation matrix
CopyMat(Mdest, Mtmp)
# Move the origin back to center_v
moveCentBack = [[1.0, 0.0, 0.0, center_v[0]],
[0.0, 1.0, 0.0, center_v[1]],
[0.0, 0.0, 1.0, center_v[2]]]
AffineCompose(Mtmp, moveCentBack, Mdest)
CopyMat(Mdest, Mtmp)
# # elif transform_str.find('rotcm(') == 0:
# # assert(xcm != None)
# # i_paren_close = transform_str.find(')')
# # if i_paren_close == -1:
# # i_paren_close = len(transform_str)
# # args = transform_str[6:i_paren_close].split(',')
# # if (len(args) != 4):
# # raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
# # ' Invalid command: \"'+transform_str+'\"\n'
# # ' This command requires 4 numerical arguments.')
# #
# # moveCMtoOrig = [[1.0, 0.0, 0.0, -xcm[0]],
# # [0.0, 1.0, 0.0, -xcm[1]],
# # [0.0, 0.0, 1.0, -xcm[2]]]
# # AffineCompose(Mtmp, moveCMtoOrig, Mdest)
# # CopyMat(Mdest, Mtmp)
# # M[0][3] = 0.0#RotMatAXYZ() only modifies 3x3 submatrix of M
# # M[1][3] = 0.0#The remaining final column must be zeroed by hand
# # M[2][3] = 0.0
# # RotMatAXYZ(M,
# # float(args[0])*math.pi/180.0,
# # float(args[1]),
# # float(args[2]),
# # float(args[3]))
# # AffineCompose(Mtmp, M, Mdest)
# # CopyMat(Mdest, Mtmp)
# # moveCmBack = [[1.0, 0.0, 0.0, xcm[0]],
# # [0.0, 1.0, 0.0, xcm[1]],
# # [0.0, 0.0, 1.0, xcm[2]]]
# # AffineCompose(Mtmp, moveCmBack, Mdest)
# # CopyMat(Mdest, Mtmp)
elif transform_str.find('rotvv(') == 0:
i_paren_close = transform_str.find(')')
if i_paren_close == -1:
i_paren_close = len(transform_str)
args = transform_str[6:i_paren_close].split(',')
center_v = None
if (len(args) == 9):
center_v = [float(args[6]), float(args[7]), float(args[8])]
elif (len(args) != 6):
raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
' Invalid command: \"'+transform_str+'\"\n'
' This command requires either 6 or 9 numerical arguments. Either:\n'
' rotvv(Xold,Yold,Zold,Xnew,Ynew,Znew) or \n'
' rotvv(Xold,Yold,Zold,Xnew,Ynew,Znew,centerX,centerY,centerZ)')
M[0][3] = 0.0 #RotMatAXYZ() only modifies 3x3 submatrix of M
M[1][3] = 0.0 #The remaining final column must be zeroed by hand
M[2][3] = 0.0
RotMatXYZXYZ(M,
float(args[0]),
float(args[1]),
float(args[2]),
float(args[3]),
float(args[4]),
float(args[5]))
if (center_v == None):
AffineCompose(Mtmp, M, Mdest)
CopyMat(Mdest, Mtmp)
else:
# Move "center_v" to the origin
moveCentToOrig = [[1.0, 0.0, 0.0, -center_v[0]],
[0.0, 1.0, 0.0, -center_v[1]],
[0.0, 0.0, 1.0, -center_v[2]]]
AffineCompose(Mtmp, moveCentToOrig, Mdest)
CopyMat(Mdest, Mtmp)
# Rotate the coordinates (relative to the origin)
AffineCompose(Mtmp, M, Mdest) # M is the rotation matrix
CopyMat(Mdest, Mtmp)
# Move the origin back to center_v
moveCentBack = [[1.0, 0.0, 0.0, center_v[0]],
[0.0, 1.0, 0.0, center_v[1]],
[0.0, 0.0, 1.0, center_v[2]]]
AffineCompose(Mtmp, moveCentBack, Mdest)
CopyMat(Mdest, Mtmp)
elif transform_str.find('scale(') == 0:
i_paren_close = transform_str.find(')')
if i_paren_close == -1:
i_paren_close = len(transform_str)
args = transform_str[6:i_paren_close].split(',')
if (len(args) == 1):
scale_v = [float(args[0]), float(args[0]), float(args[0])]
center_v = [0.0, 0.0, 0.0]
elif (len(args) == 3):
scale_v = [float(args[0]), float(args[1]), float(args[2])]
center_v = [0.0, 0.0, 0.0]
elif (len(args) == 4):
scale_v = [float(args[0]), float(args[0]), float(args[0])]
center_v = [float(args[1]), float(args[2]), float(args[3])]
elif (len(args) == 6):
scale_v = [float(args[0]), float(args[1]), float(args[2])]
center_v = [float(args[3]), float(args[4]), float(args[5])]
else:
raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
' Invalid command: \"'+transform_str+'\"\n'
' This command requires either 1, 3, 4, or 6 numerical arguments. Either:\n'
' scale(ratio), or \n'
' scale(ratioX, ratioY, ratioZ),\n'
' scale(ratio, centerX, centerY, centerZ), or\n'
' scale(ratioX, ratioY, ratioZ, centerX, centerY, centerZ)')
ScaleMat(M, scale_v)
# Now worry about translation:
for d in range(0, 3):
M[d][3] = center_v[d] * (1.0 - scale_v[d])
AffineCompose(Mtmp, M, Mdest)
CopyMat(Mdest, Mtmp)
# # elif transform_str.find('scalecm(') == 0:
# # assert(xcm != None)
# # i_paren_close = transform_str.find(')')
# # if i_paren_close == -1:
# # i_paren_close = len(transform_str)
# # args = transform_str[8:i_paren_close].split(',')
# #
# # moveCMtoOrig = [[1.0, 0.0, 0.0, -xcm[0]],
# # [0.0, 1.0, 0.0, -xcm[1]],
# # [0.0, 0.0, 1.0, -xcm[2]]]
# # AffineCompose(Mtmp, moveCMtoOrig, Mdest)
# # CopyMat(Mdest, Mtmp)
# #
# # M[0][3] = 0.0 #ScaleMat() only modifies 3x3 submatrix of M
# # M[1][3] = 0.0 #The remaining final column must be zeroed by hand
# # M[2][3] = 0.0
# # if (len(args) == 1):
# # ScaleMat(M, args[0])
# # elif (len(args) == 3):
# # ScaleMat(M, args)
# # else:
# # raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
# # ' Invalid command: \"'+transform_str+'\"\n'
# # ' This command requires either 1 or 3 numerical arguments.')
# #
# # AffineCompose(Mtmp, M, Mdest)
# # CopyMat(Mdest, Mtmp)
# # moveCmBack = [[1.0, 0.0, 0.0, xcm[0]],
# # [0.0, 1.0, 0.0, xcm[1]],
# # [0.0, 0.0, 1.0, xcm[2]]]
# # AffineCompose(Mtmp, moveCmBack, Mdest)
# # CopyMat(Mdest, Mtmp)
else:
raise InputError('Error near '+ErrorLeader(src_loc.infile, src_loc.lineno)+':\n'
' Unknown transformation command: \"'+transform_str+'\"\n')
return Mdest
class MultiAffineStack(object):
def __init__(self, which_stack=None):
self.tot_stack = None
self.stack_lookup = None
self.stack_keys = None
self.stacks = None
self.M = None
self.error_if_substack_empty = False
self.Clear()
def Clear(self):
self.tot_stack = AffineStack()
self.stack_lookup = {}
self.stack_keys = deque([])
self.stacks = deque([])
self.M = self.tot_stack.M
self.error_if_substack_empty = False
def _Update(self):
self.tot_stack.Clear()
self.M = self.tot_stack.M
assert(len(self.stacks) > 0)
for stack in self.stacks:
self.tot_stack.PushRight(stack.M)
def PushStack(self, which_stack):
stack = AffineStack()
self.stack_keys.append(which_stack)
self.stack_lookup[which_stack] = stack
self.stacks.append(stack)
self.tot_stack.PushRight(stack.M)
def PopStack(self):
assert(len(self.stacks) > 0)
self.tot_stack.PopRight()
which_stack = self.stack_keys.pop()
del self.stack_lookup[which_stack]
self.stacks.pop()
def Push(self, M, which_stack=None, right_not_left = True):
if len(self.stacks) == 0:
self.PushStack(which_stack)
if which_stack == None:
stack = self.stacks[-1]
if right_not_left:
stack.PushRight(M) # This should copy the matrix M into stack.M
else:
stack.PushLeft(M)
else:
stack = self.stack_lookup[which_stack]
if right_not_left:
stack.PushRight(M)
else:
stack.PushLeft(M)
if stack == self.stacks[-1]:
self.tot_stack.PopRight() #Replace the last matrix on self.tot_stack
# Note: Always use tot_stack.PopRight (even if right_not_left=False)
self.tot_stack.PushRight(stack.M) # with the the updated version.
# Note: We could call self._Update(M) here, but that is slower.
else:
self._Update()
def PushRight(self, M, which_stack=None):
self.Push(M, which_stack, right_not_left=True)
def PushLeft(self, M, which_stack=None):
self.Push(M, which_stack, right_not_left=False)
def PushCommandsRight(self,
text, # text containing affine transformation commands
# The next two arguments are optional:
src_loc = OSrcLoc(), # for debugging
xcm = None,
which_stack=None): # position of center of object
"""Generate affine transformation matrices from simple text commands
(such as \"rotcm(90,0,0,1)\" and \"move(0,5.0,0)".
Chains of "rotcm", "movecm", "rot", and "move" commands
can also be strung together:
\"rotcm(90,0,0,1).move(0,5.0,0)\"
Commands ending in \"cm\" are carried out relative to center-of-mass
(average position) of the object, and consequently require
an additional argument (\"xcm\").
"""
self.PushRight(AffineStack.CommandsToMatrix(text, src_loc, xcm),
which_stack)
def PushCommandsLeft(self,
text, # text containing affine transformation commands
# The next two arguments are optional:
src_loc = OSrcLoc(), # for debugging
xcm = None, # position of center of object
which_stack = None):
self.PushLeft(AffineStack.CommandsToMatrix(text, src_loc, xcm),
which_stack)
def Pop(self, which_stack=None, right_not_left=True):
#empty_stack_error = False
if which_stack == None:
stack = self.stacks[-1]
if len(stack) >= 1:
if right_not_left:
stack.PopRight()
else:
stack.PopLeft()
# Note: We could call self._Update(M) here, but that is slower
self.tot_stack.PopRight() #Replace the last matrix on self.tot_stack
# Note: Always use tot_stack.PopRight (even if right_not_left=False)
self.tot_stack.PushRight(stack.M) # with the the updated version.
else:
assert(False)
# OPTIONAL CODE BELOW AUTOMATICALLY INVOKES self.PopStack() WHEN
# THE stacks[-1].stack IS EMPTY. PROBABLY DOES NOT WORK. IGNORE
# if (not self.error_if_substack_empty):
# if right_not_left:
# assert(len(self.stacks) > 0)
# self.PopStack()
# else:
# assert(False)
# else:
# empty_stack_error = True
else:
stack = self.stack_lookup[which_stack]
if len(stack) > 1:
if right_not_left:
stack.PopRight()
else:
stack.PopLeft()
self._Update()
else:
assert(False)
#empty_stack_error = True
def PopRight(self, which_stack=None):
self.Pop(which_stack, right_not_left=True)
def PopLeft(self, which_stack=None):
self.Pop(which_stack, right_not_left=True)
import math
def ScaleMat(dest, scale):
for i in range(0, len(dest)):
for j in range(0, len(dest[i])):
dest[i][j] = 0.0
if ((type(scale) is float) or (type(scale) is int)):
for i in range(0, len(dest)):
dest[i][i] = scale
else:
for i in range(0, len(dest)):
dest[i][i] = scale[i]
def RotMatAXYZ(dest, angle, axis_x, axis_y, axis_z):
+
r = math.sqrt(axis_x*axis_x + axis_y*axis_y + axis_z*axis_z)
- X = axis_x / r
- Y = axis_y / r
- Z = axis_z / r
+
+ X = 1.0
+ Y = 0.0
+ Z = 0.0
+ if r > 0.0: # check for non-sensical input
+ X = axis_x / r
+ Y = axis_y / r
+ Z = axis_z / r
+ else:
+ angle = 0.0
#angle *= math.pi/180.0 # "angle" is assumed to be in degrees
# on second thought, let the caller worry about angle units.
c = math.cos(angle)
s = math.sin(angle)
dest[0][0] = X*X*(1-c) + c
dest[1][1] = Y*Y*(1-c) + c
dest[2][2] = Z*Z*(1-c) + c
dest[0][1] = X*Y*(1-c) - Z*s
dest[0][2] = X*Z*(1-c) + Y*s
dest[1][0] = Y*X*(1-c) + Z*s
dest[2][0] = Z*X*(1-c) - Y*s
dest[1][2] = Y*Z*(1-c) - X*s
dest[2][1] = Z*Y*(1-c) + X*s
# formula from these sources:
# http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/
# also check
# http://www.manpagez.com/man/3/glRotate/
# some pdb test commands:
# from lttree_matrixstack import *
# r = [[1.0,0.0,0.0], [0.0,1.0,0.0], [0.0,0.0,1.0]]
# RotMatAXYZ(r, 90.0, 0.0, 0.0, 1.0)
def CrossProd(dest, A, B):
dest[0] = (A[1]*B[2] - B[1]*A[2])
dest[1] = (A[2]*B[0] - B[2]*A[0])
dest[2] = (A[0]*B[1] - B[0]*A[1])
def DotProd(A, B):
c = 0.0
for d in range(0, len(A)):
c += A[d]*B[d]
return c
def Length(A):
L = 0.0
for x in A:
L += x*x
return math.sqrt(L)
def Normalize(dest, source):
assert(len(dest) == len(source))
L = Length(source)
for d in range(0, len(source)):
dest[d] = source[d] / L
def RotMatXYZXYZ(dest,
xold, yold, zold,
xnew, ynew, znew):
A = [xold, yold, zold]
B = [xnew, ynew, znew]
axis = [0.0, 0.0, 0.0]
CrossProd(axis, A, B)
La = Length(A)
Lb = Length(B)
Lc = Length(axis)
sinAng = Lc / (La*Lb)
cosAng = DotProd(A,B) / (La*Lb)
- if Length > 0.0:
+ if Lc > 0.0:
Normalize(axis, axis)
angle = math.atan2(sinAng, cosAng)
else:
axis = [1.0, 0.0, 0.0]
angle = 0.0
RotMatAXYZ(dest, angle, axis[0], axis[1], axis[2])

Event Timeline