diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b3bae8fd4a8d5e8be4d0af9dd45821a093812888..6471fb73780bb8b05da980b23d4de943d60035ea 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -178,7 +178,7 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK - USER-QUIP USER-QMMM) + USER-QUIP USER-QMMM USER-YAFF) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) set(OTHER_PACKAGES CORESHELL QEQ) foreach(PKG ${DEFAULT_PACKAGES}) diff --git a/doc/src/Commands_bond.txt b/doc/src/Commands_bond.txt index fbf292aab2798dbeeb5623f3f43dc8a169e3f367..3b79612e766c5649b93b8138e889c37bb5afb73e 100644 --- a/doc/src/Commands_bond.txt +++ b/doc/src/Commands_bond.txt @@ -37,6 +37,7 @@ OPT. "harmonic (iko)"_bond_harmonic.html, "harmonic/shift (o)"_bond_harmonic_shift.html, "harmonic/shift/cut (o)"_bond_harmonic_shift_cut.html, +"mm3"_bond_mm3.html, "morse (o)"_bond_morse.html, "nonlinear (o)"_bond_nonlinear.html, "oxdna/fene"_bond_oxdna.html, @@ -67,10 +68,12 @@ OPT. "cosine/shift (o)"_angle_cosine_shift.html, "cosine/shift/exp (o)"_angle_cosine_shift_exp.html, "cosine/squared (o)"_angle_cosine_squared.html, +"cross"_angle_cross.html, "dipole (o)"_angle_dipole.html, "fourier (o)"_angle_fourier.html, "fourier/simple (o)"_angle_fourier_simple.html, "harmonic (iko)"_angle_harmonic.html, +"mm3"_angle_mm3.html, "quartic (o)"_angle_quartic.html, "sdk (o)"_angle_sdk.html, "table (o)"_angle_table.html :tb(c=4,ea=c) @@ -120,8 +123,10 @@ OPT. "cossq (o)"_improper_cossq.html, "cvff (io)"_improper_cvff.html, "distance"_improper_distance.html, +"distharm"_improper_distharm.html, "fourier (o)"_improper_fourier.html, "harmonic (iko)"_improper_harmonic.html, "inversion/harmonic"_improper_inversion_harmonic.html, "ring (o)"_improper_ring.html, +"sqdistharm"_improper_sqdistharm.html, "umbrella (o)"_improper_umbrella.html :tb(c=4,ea=c) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index 46f4950ad78fb60db7555b50810b318a56cd4147..b498e6bfdadc348034e849839c505d866af1639c 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -154,6 +154,7 @@ OPT. "lj/sf/dipole/sf (go)"_pair_dipole.html, "lj/smooth (o)"_pair_lj_smooth.html, "lj/smooth/linear (o)"_pair_lj_smooth_linear.html, +"lj/switch3/coulgauss/long"_pair_lj_switch3_coulgauss.html, "lj96/cut (go)"_pair_lj96.html, "lubricate (o)"_pair_lubricate.html, "lubricate/poly (o)"_pair_lubricate.html, diff --git a/doc/src/Eqs/angle_cross.jpg b/doc/src/Eqs/angle_cross.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0f3fcf83ac2621807c7ae58772bfbddd1d94824 Binary files /dev/null and b/doc/src/Eqs/angle_cross.jpg differ diff --git a/doc/src/Eqs/angle_cross.tex b/doc/src/Eqs/angle_cross.tex new file mode 100644 index 0000000000000000000000000000000000000000..9d1fdcb7f8e53e19e61b596e0e313d3050a46c4a --- /dev/null +++ b/doc/src/Eqs/angle_cross.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K_{SS} \left(r_{12}-r_{12,0}\right)\left(r_{32}-r_{32,0}\right) + K_{BS0}\left(r_{12}-r_{12,0}\right)\left(\theta-\theta_0\right) + K_{BS1}\left(r_{32}-r_{32,0}\right)\left(\theta-\theta_0\right) +$$ + +\end{document} diff --git a/doc/src/Eqs/angle_mm3.jpg b/doc/src/Eqs/angle_mm3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b9f3e34f091f5a2d439294e9c5a1802a2885fb4 Binary files /dev/null and b/doc/src/Eqs/angle_mm3.jpg differ diff --git a/doc/src/Eqs/angle_mm3.tex b/doc/src/Eqs/angle_mm3.tex new file mode 100644 index 0000000000000000000000000000000000000000..e2d96f2d6939db2c6eb3e0ad3cbdf6dd4e4c9321 --- /dev/null +++ b/doc/src/Eqs/angle_mm3.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (\theta - \theta_0)^2 \left[ 1 - 0.014(\theta - \theta_0) + 5.6(10)^{-5} (\theta - \theta_0)^2 - 7.0(10)^{-7} (\theta - \theta_0)^3 + 9(10)^{-10} (\theta - \theta_0)^4 \right] +$$ + +\end{document} diff --git a/doc/src/Eqs/bond_mm3.jpg b/doc/src/Eqs/bond_mm3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c17739db57e8d147166ab0a4cc768cf80f534af Binary files /dev/null and b/doc/src/Eqs/bond_mm3.jpg differ diff --git a/doc/src/Eqs/bond_mm3.tex b/doc/src/Eqs/bond_mm3.tex new file mode 100644 index 0000000000000000000000000000000000000000..549500ebacc714b7106a864d4ba0b3d0d3f6bf7e --- /dev/null +++ b/doc/src/Eqs/bond_mm3.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (r - r_0)^2 \left[ 1 - 2.55(r-r_0) + (7/12) 2.55^2(r-r_0)^2 \right] +$$ + +\end{document} diff --git a/doc/src/Eqs/improper_distharm.jpg b/doc/src/Eqs/improper_distharm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e55036b5bf092c1b35b8ba42427b78f562238947 Binary files /dev/null and b/doc/src/Eqs/improper_distharm.jpg differ diff --git a/doc/src/Eqs/improper_distharm.tex b/doc/src/Eqs/improper_distharm.tex new file mode 100644 index 0000000000000000000000000000000000000000..218de6a0ddc40ecd9021dd430647bc678c6e3fa0 --- /dev/null +++ b/doc/src/Eqs/improper_distharm.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (d - d_0)^2 +$$ + +\end{document} diff --git a/doc/src/Eqs/improper_sqdistharm.jpg b/doc/src/Eqs/improper_sqdistharm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1a84e995e655ca32d6529122fa971bc1ef1e574 Binary files /dev/null and b/doc/src/Eqs/improper_sqdistharm.jpg differ diff --git a/doc/src/Eqs/improper_sqdistharm.tex b/doc/src/Eqs/improper_sqdistharm.tex new file mode 100644 index 0000000000000000000000000000000000000000..1b50a309a046a0b4fe4a32ce6b728f5666dfda10 --- /dev/null +++ b/doc/src/Eqs/improper_sqdistharm.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} +$$ + E = K (d^2 - d_0^2)^2 +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_coulgauss.jpg b/doc/src/Eqs/pair_coulgauss.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf84d90c4a1b4a7774e3933bfef6e949c9603cf7 Binary files /dev/null and b/doc/src/Eqs/pair_coulgauss.jpg differ diff --git a/doc/src/Eqs/pair_coulgauss.tex b/doc/src/Eqs/pair_coulgauss.tex new file mode 100644 index 0000000000000000000000000000000000000000..216d3b3360a791efb8ac8f29fe9dc887e87a97b5 --- /dev/null +++ b/doc/src/Eqs/pair_coulgauss.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} + \thispagestyle{empty} +\begin{eqnarray*} + E &=& \frac{q_i q_j \mathrm{erf}\left( r/\sqrt{\gamma_1^2+\gamma_2^2} \right) }{\epsilon r_{ij}} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_lj_switch3.jpg b/doc/src/Eqs/pair_lj_switch3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1f98ea2c24bcac86871e1476901791edc83dc62 Binary files /dev/null and b/doc/src/Eqs/pair_lj_switch3.jpg differ diff --git a/doc/src/Eqs/pair_lj_switch3.tex b/doc/src/Eqs/pair_lj_switch3.tex new file mode 100644 index 0000000000000000000000000000000000000000..29161fb2ef679f9d2186dcf31335b5daacc5540b --- /dev/null +++ b/doc/src/Eqs/pair_lj_switch3.tex @@ -0,0 +1,11 @@ +\documentclass[12pt]{article} + +\begin{document} + \thispagestyle{empty} + +\begin{eqnarray*} + E = 4\epsilon \left[ \left(\frac{\sigma}{r}\right)^{12}-\left(\frac{\sigma}{r}\right)^{6} \right] +% \qquad r < r_c \\ +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_mm3_switch3.jpg b/doc/src/Eqs/pair_mm3_switch3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d662584a7d1fec8d273c87ce3bf0b16a904f6d4 Binary files /dev/null and b/doc/src/Eqs/pair_mm3_switch3.jpg differ diff --git a/doc/src/Eqs/pair_mm3_switch3.tex b/doc/src/Eqs/pair_mm3_switch3.tex new file mode 100644 index 0000000000000000000000000000000000000000..a80278cce2236c6f7ba4951cadb8fe781abc60d2 --- /dev/null +++ b/doc/src/Eqs/pair_mm3_switch3.tex @@ -0,0 +1,11 @@ +\documentclass[12pt]{article} + +\begin{document} + \thispagestyle{empty} +\begin{eqnarray*} + E &=& \epsilon_{ij} \left[ -2.25 \left(\frac{r_{v,ij}}{r_{ij}}\right)^6 + 1.84(10)^5 \exp\left[-12.0 r_{ij}/r_{v,ij}\right] \right] S_3(r_{ij}) \\ + r_{v,ij} &=& r_{v,i} + r_{v,j} \\ + \epsilon_{ij} &=& \sqrt{\epsilon_i \epsilon_j} +\end{eqnarray*} + +\end{document} diff --git a/doc/src/Eqs/pair_switch3.jpg b/doc/src/Eqs/pair_switch3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6327ee5ff1d2b6e586e4d0fdfc879a4b9977a56 Binary files /dev/null and b/doc/src/Eqs/pair_switch3.jpg differ diff --git a/doc/src/Eqs/pair_switch3.tex b/doc/src/Eqs/pair_switch3.tex new file mode 100644 index 0000000000000000000000000000000000000000..7ae67a5e6548ed1b342a596ec3fbfbbec023891c --- /dev/null +++ b/doc/src/Eqs/pair_switch3.tex @@ -0,0 +1,14 @@ +\documentclass[12pt]{article} + +\begin{document} +\thispagestyle{empty} + +\begin{eqnarray*} + S_3(r) = \left\lbrace \begin{array}{ll} + 1 & \quad\mathrm{if}\quad r < r_\mathrm{c} - w \\ + 3x^2 - 2x^3 & \quad\mathrm{if}\quad r < r_\mathrm{c} \quad\mathrm{with\quad} x=\frac{r_\mathrm{c} - r}{w} \\ + 0 & \quad\mathrm{if}\quad r >= r_\mathrm{c} + \end{array} \right. +\end{eqnarray*} + +\end{document} diff --git a/doc/src/PDF/USER-CGDNA.pdf b/doc/src/PDF/USER-CGDNA.pdf index 843bba00d5c5a707577d07dda1929ba4c8a07987..7fcf3660156a903ec1ea7ec984ef4f8b11c73bbe 100644 Binary files a/doc/src/PDF/USER-CGDNA.pdf and b/doc/src/PDF/USER-CGDNA.pdf differ diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 4768c50ca47d8ad2d9f8ec0634e4bf43f5ac2031..ebfe01d8a73a2cfbda9057cd761131313b3d0041 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -100,7 +100,8 @@ as contained in the file name. "USER-SPH"_#PKG-USER-SPH, "USER-TALLY"_#PKG-USER-TALLY, "USER-UEF"_#PKG-USER-UEF, -"USER-VTK"_#PKG-USER-VTK :tb(c=6,ea=c) +"USER-VTK"_#PKG-USER-VTK, +"USER-YAFF"_#PKG-USER-YAFF, :tb(c=6,ea=c) :line @@ -2067,3 +2068,39 @@ lib/vtk/README "dump vtk"_dump_vtk.html :ul +:line + +USER-YAFF package :link(PKG-USER-YAFF),h4 + +[Contents:] + +Some potentials that are also implemented in the Yet Another Force Field ("YAFF"_yaff) code. +The expressions and their use are discussed in the following papers + +Vanduyfhuys et al., J. Comput. Chem., 36 (13), 1015-1027 (2015) "link"_vanduyfhuys2015 +Vanduyfhuys et al., J. Comput. Chem., 39 (16), 999-1011 (2018) "link"_vanduyfhuys2018 :ul + +which discuss the "QuickFF"_quickff methodology. + + +:link(vanduyfhuys2015,http://dx.doi.org/10.1002/jcc.23877) +:link(vanduyfhuys2018,http://dx.doi.org/10.1002/jcc.25173) +:link(quickff,http://molmod.github.io/QuickFF) +:link(yaff,https://github.com/molmod/yaff) + + +[Author:] Steven Vandenbrande. + +[Supporting info:] + +src/USER-YAFF/README +"angle_style cross"_angle_cross.html +"angle_style mm3"_angle_mm3.html +"bond_style mm3"_bond_mm3.html +"improper_style distharm"_improper_distharm.html +"improper_style sqdistharm"_improper_sqdistharm.html +"pair_style mm3/switch3/coulgauss/long"_pair_mm3_switch3_coulgauss.html +"pair_style lj/switch3/coulgauss/long"_pair_lj_switch3_coulgauss.html +examples/USER/yaff :ul + + diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index cea3db4377411c05272bae170c09625678e46cf0..4a702e971fe526c00298996da98776d2f0224f28 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -75,7 +75,8 @@ Package, Description, Doc page, Example, Library "USER-SPH"_Packages_details.html#PKG-USER-SPH, smoothed particle hydrodynamics,"SPH User Guide"_PDF/SPH_LAMMPS_userguide.pdf, USER/sph, no "USER-TALLY"_Packages_details.html#PKG-USER-TALLY, pairwise tally computes,"compute XXX/tally"_compute_tally.html, USER/tally, no "USER-UEF"_Packages_details.html#PKG-USER-UEF, extensional flow,"fix nvt/uef"_fix_nh_uef.html, USER/uef, no -"USER-VTK"_Packages_details.html#PKG-USER-VTK, dump output via VTK, "compute vtk"_dump_vtk.html, n/a, ext :tb(ea=c,ca1=l) +"USER-VTK"_Packages_details.html#PKG-USER-VTK, dump output via VTK, "compute vtk"_dump_vtk.html, n/a, ext +"USER-YAFF"_Packages_details.html#PKG-USER-YAFF, additional styles implemented in YAFF, "angle_style cross"_angle_cross.html, USER/yaff, no :tb(ea=c,ca1=l) :link(MOFplus,https://www.mofplus.org/content/show/MOF-FF) :link(PLUMED,http://www.plumed.org) diff --git a/doc/src/angle_cross.txt b/doc/src/angle_cross.txt new file mode 100644 index 0000000000000000000000000000000000000000..d9d83ed4b69eef64c269f264382c1073259c0f5f --- /dev/null +++ b/doc/src/angle_cross.txt @@ -0,0 +1,62 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +angle_style cross command :h3 + +[Syntax:] + +angle_style cross :pre + +[Examples:] + +angle_style cross +angle_coeff 1 200.0 100.0 100.0 1.25 1.25 107.0 :pre + +[Description:] + +The {cross} angle style uses a potential that couples the bond stretches of +a bend with the angle stretch of that bend: + +:c,image(Eqs/angle_cross.jpg) + +where r12,0 is the rest value of the bond length between atom 1 and 2, +r32,0 is the rest value of the bond length between atom 2 and 2, +and theta0 is the rest value of the angle. KSS is the force constant of +the bond stretch-bond stretch term and KBS0 and KBS1 are the force constants +of the bond stretch-angle stretch terms. + +The following coefficients must be defined for each angle type via the +"angle_coeff"_angle_coeff.html command as in the example above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands: + +KSS (energy/distance^2) +KBS0 (energy/distance/rad) +KBS1 (energy/distance/rad) +r12,0 (distance) +r32,0 (distance) +theta0 (degrees) :ul + +Theta0 is specified in degrees, but LAMMPS converts it to radians +internally; hence the units of KBS0 and KBS1 are in energy/distance/radian. + +[Restrictions:] + +This angle style can only be used if LAMMPS was built with the +USER_YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"angle_coeff"_angle_coeff.html + +[Default:] none + +:line + + diff --git a/doc/src/angle_mm3.txt b/doc/src/angle_mm3.txt new file mode 100644 index 0000000000000000000000000000000000000000..9ae032c4ff5344f78267b50c1d4f81914c15d6f6 --- /dev/null +++ b/doc/src/angle_mm3.txt @@ -0,0 +1,55 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +angle_style mm3 command :h3 + +[Syntax:] + +angle_style mm3 :pre + +[Examples:] + +angle_style mm3 +angle_coeff 1 100.0 107.0 :pre + +[Description:] + +The {mm3} angle style uses the potential that is anharmonic in the angle +as defined in "(Allinger)"_#mm3-allinger1989 + +:c,image(Eqs/angle_mm3.jpg) + +where theta0 is the equilibrium value of the angle, and K is a +prefactor. The anharmonic prefactors have units deg^(-n), for example +-0.014 deg^(-1), 5.6(10)^(-5) deg^(-2), ... + +The following coefficients must be defined for each angle type via the +"angle_coeff"_angle_coeff.html command as in the example above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands: + +K (energy/radian^2) +theta0 (degrees) :ul + +Theta0 is specified in degrees, but LAMMPS converts it to radians +internally; hence the units of K are in energy/radian^2. + +[Restrictions:] + +This angle style can only be used if LAMMPS was built with the +USER_YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"angle_coeff"_angle_coeff.html + +[Default:] none + +:line + diff --git a/doc/src/angle_style.txt b/doc/src/angle_style.txt index 2c3c1f2bd1ff81aeb8a057b42148488cd096c6be..2f2da678d86ab7a2e254e318d0b713a87381add0 100644 --- a/doc/src/angle_style.txt +++ b/doc/src/angle_style.txt @@ -81,10 +81,12 @@ of (g,i,k,o,t) to indicate which accelerated styles exist. "cosine/shift"_angle_cosine_shift.html - angle cosine with a shift "cosine/shift/exp"_angle_cosine_shift_exp.html - cosine with shift and exponential term in spring constant "cosine/squared"_angle_cosine_squared.html - angle with cosine squared term +"cross"_angle_cross.html - cross term coupling angle and bond lengths "dipole"_angle_dipole.html - angle that controls orientation of a point dipole "fourier"_angle_fourier.html - angle with multiple cosine terms "fourier/simple"_angle_fourier_simple.html - angle with a single cosine term "harmonic"_angle_harmonic.html - harmonic angle +"mm3"_angle_mm3.html - anharmonic angle "quartic"_angle_quartic.html - angle with cubic and quartic terms "sdk"_angle_sdk.html - harmonic angle with repulsive SDK pair style between 1-3 atoms "table"_angle_table.html - tabulated by angle :ul diff --git a/doc/src/angles.txt b/doc/src/angles.txt index 3e91ba9917176bf02c5e06ba403aa18b2b2cd9d6..3d8a47b2ebceb834ca91aec44d81dd42f5b4c9e2 100644 --- a/doc/src/angles.txt +++ b/doc/src/angles.txt @@ -14,11 +14,13 @@ Angle Styles :h1 angle_cosine_shift angle_cosine_shift_exp angle_cosine_squared + angle_cross angle_dipole angle_fourier angle_fourier_simple angle_harmonic angle_hybrid + angle_mm3 angle_none angle_quartic angle_sdk diff --git a/doc/src/bond_mm3.txt b/doc/src/bond_mm3.txt new file mode 100644 index 0000000000000000000000000000000000000000..c3d0e39f52cf4885a7bd271cc00b8f60413b6163 --- /dev/null +++ b/doc/src/bond_mm3.txt @@ -0,0 +1,58 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +bond_style mm3 command :h3 + +[Syntax:] + +bond_style mm3 :pre + +[Examples:] + +bond_style mm3 +bond_coeff 1 100.0 107.0 :pre + +[Description:] + +The {mm3} bond style uses the potential that is anharmonic in the bond +as defined in "(Allinger)"_#mm3-allinger1989 + +:c,image(Eqs/bond_mm3.jpg) + +where r0 is the equilibrium value of the bond, and K is a +prefactor. The anharmonic prefactors have units angstrom^(-n): +-2.55 angstrom^(-1) and (7/12)2.55^2 angstrom^(-2). The code takes +care of the necessary unit conversion for these factors internally. +Note that the MM3 papers contains an error in Eq (1): +(7/12)2.55 should be replaced with (7/12)2.55^2 + +The following coefficients must be defined for each bond type via the +"bond_coeff"_bond_coeff.html command as in the example above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands: + +K (energy/distance^2) +r0 (distance) :ul + +[Restrictions:] + +This bond style can only be used if LAMMPS was built with the +USER_YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"bond_coeff"_bond_coeff.html + +[Default:] none + +:line + +:link(mm3-allinger1989) +[(Allinger)] Allinger, Yuh, Lii, JACS, 111(23), 8551-8566 +(1989), diff --git a/doc/src/bond_style.txt b/doc/src/bond_style.txt index ae19f2369d83c476ea9cad4740efbb5c55968d07..aba6d3a7781fe952c7977361536ae758983654ba 100644 --- a/doc/src/bond_style.txt +++ b/doc/src/bond_style.txt @@ -86,6 +86,7 @@ accelerated styles exist. "harmonic"_bond_harmonic.html - harmonic bond "harmonic/shift"_bond_harmonic_shift.html - shifted harmonic bond "harmonic/shift/cut"_bond_harmonic_shift_cut.html - shifted harmonic bond with a cutoff +"mm3"_bond_mm3.html - MM3 anharmonic bond "morse"_bond_morse.html - Morse bond "nonlinear"_bond_nonlinear.html - nonlinear bond "oxdna/fene"_bond_oxdna.html - modified FENE bond suitable for DNA modeling diff --git a/doc/src/bonds.txt b/doc/src/bonds.txt index d33515eb88e36c3aca1525e5426a6cc80cbdeae8..48896e711c3bcdc57dd637c00ec0d285a6914f61 100644 --- a/doc/src/bonds.txt +++ b/doc/src/bonds.txt @@ -13,6 +13,7 @@ Bond Styles :h1 bond_harmonic_shift bond_harmonic_shift_cut bond_hybrid + bond_mm3 bond_morse bond_none bond_nonlinear diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 8f71cd14ec7c4a405cd6f752db30ba7b37100e14..c5b07bb973310f3451bc9ae52a6853e4b8151e6e 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -36,10 +36,12 @@ react = mandatory argument indicating new reaction specification :l template-ID(post-reacted) = ID of a molecule template containing post-reaction topology :l map_file = name of file specifying corresponding atom-IDs in the pre- and post-reacted templates :l zero or more individual keyword/value pairs may be appended to each react argument :l - individual_keyword = {prob} or {stabilize_steps} or {update_edges} :l + individual_keyword = {prob} or {max_rxn} or {stabilize_steps} or {update_edges} :l {prob} values = fraction seed fraction = initiate reaction with this probability if otherwise eligible seed = random number seed (positive integer) + {max_rxn} value = N + N = maximum number of reactions allowed to occur {stabilize_steps} value = timesteps timesteps = number of timesteps to apply the internally-created "nve/limit"_fix_nve_limit.html fix to reacting atoms {update_edges} value = {none} or {charges} or {custom} @@ -142,7 +144,7 @@ modified to match the post-reaction template. A bonding atom pair will be identified if several conditions are met. First, a pair of atoms I,J within the specified react-group-ID of type -itype and jtype must separated by a distance between {Rmin} and +itype and jtype must be separated by a distance between {Rmin} and {Rmax}. It is possible that multiple bonding atom pairs are identified: if the bonding atoms in the pre-reacted template are not 1-2, 1-3, or 1-4 neighbors, the closest bonding atom partner is set as @@ -211,9 +213,10 @@ mandatory keyword is 'equivalences' and the optional keywords are N {equivalences} = # of atoms N in the reaction molecule templates N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template N {deleteIDs} = # of atoms N that are specified for deletion -N {customIDs} = # of atoms N that are specified for a custom update :pre +N {customIDs} = # of atoms N that are specified for a custom update +N {constraints} = # of specified reaction constraints N :pre -The body of the map file contains two mandatory sections and three +The body of the map file contains two mandatory sections and four optional sections. The first mandatory section begins with the keyword 'BondingIDs' and lists the atom IDs of the bonding atom pair in the pre-reacted molecule template. The second mandatory section begins @@ -230,7 +233,10 @@ Edges' and allows for forcing the update of a specific atom's atomic charge. The first column is the ID of an atom near the edge of the pre-reacted molecule template, and the value of the second column is either 'none' or 'charges.' Further details are provided in the -discussion of the 'update_edges' keyword. +discussion of the 'update_edges' keyword. The fourth optional section +begins with the keyword 'Constraints' and lists additional criteria +that must be satisfied in order for the reaction to occur. Currently, +there is one type of constraint available, as discussed below. A sample map file is given below: @@ -263,6 +269,18 @@ Equivalences :pre :line +Any number of additional constraints may be specified in the +Constraints section of the map file. Currently there is one type of +additional constraint, of type 'distance', whose syntax is as follows: + +distance {ID1} {ID2} {rmin} {rmax} :pre + +where 'distance' is the required keyword, {ID1} and {ID2} are +pre-reaction atom IDs, and these two atoms must be separated by a +distance between {rmin} and {rmax} for the reaction to occur. This +constraint can be used to enforce a certain orientation between +reacting molecules. + Once a reaction site has been successfully identified, data structures within LAMMPS that store bond topology are updated to reflect the post-reacted molecule template. All force fields with fixed bonds, @@ -285,7 +303,8 @@ The {prob} keyword can affect whether an eligible reaction actually occurs. 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 reaction only occurs if the random number is less than the -fraction. +fraction. Up to N reactions are permitted to occur, as optionally +specified by the {max_rxn} keyword. The {stabilize_steps} keyword allows for the specification of how many timesteps a reaction site is stabilized before being returned to the diff --git a/doc/src/improper_distharm.txt b/doc/src/improper_distharm.txt new file mode 100644 index 0000000000000000000000000000000000000000..52815e76aaaab5226076876c2bc118e3bf9e67f4 --- /dev/null +++ b/doc/src/improper_distharm.txt @@ -0,0 +1,53 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +improper_style distharm command :h3 + +[Syntax:] + +improper_style distharm + +[Examples:] + +improper_style distharm +improper_coeff 1 25.0 0.5 :pre + +[Description:] + +The {distharm} improper style uses the potential + +:c,image(Eqs/improper_distharm.jpg) + +where d is the oriented distance between the central atom and the plane formed +by the other three atoms. If the 4 atoms in an improper quadruplet +(listed in the data file read by the "read_data"_read_data.html +command) are ordered I,J,K,L then the L-atom is assumed to be the +central atom. Note that this is different from the convention used +in the improper_style distance. The distance d is oriented and can take +on negative values. This may lead to unwanted behavior if d0 is not equal to zero. + +The following coefficients must be defined for each improper type via +the improper_coeff command as in the example above, or in the data +file or restart files read by the read_data or read_restart commands: + +K (energy/distance^2) +d0 (distance) :ul + +:line + +[Restrictions:] + +This improper style can only be used if LAMMPS was built with the +USER-YAFF package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"improper_coeff"_improper_coeff.html + +[Default:] none diff --git a/doc/src/improper_sqdistharm.txt b/doc/src/improper_sqdistharm.txt new file mode 100644 index 0000000000000000000000000000000000000000..7473fd8c5d87ed15c26ecfe9fba0dec3d92c0642 --- /dev/null +++ b/doc/src/improper_sqdistharm.txt @@ -0,0 +1,54 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +improper_style sqdistharm command :h3 + +[Syntax:] + +improper_style sqdistharm + +[Examples:] + +improper_style sqdistharm +improper_coeff 1 50.0 0.1 :pre + +[Description:] + +The {sqdistharm} improper style uses the potential + +:c,image(Eqs/improper_sqdistharm.jpg) + +where d is the distance between the central atom and the plane formed +by the other three atoms. If the 4 atoms in an improper quadruplet +(listed in the data file read by the "read_data"_read_data.html +command) are ordered I,J,K,L then the L-atom is assumed to be the +central atom. Note that this is different from the convention used +in the improper_style distance. + +The following coefficients must be defined for each improper type via +the improper_coeff command as in the example above, or in the data +file or restart files read by the read_data or read_restart commands: + +K (energy/distance^4) +d0^2 (distance^2) :ul + +Note that d0^2 (in units distance^2) has be provided and not d0. + +:line + +[Restrictions:] + +This improper style can only be used if LAMMPS was built with the +USER-MISC package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"improper_coeff"_improper_coeff.html + +[Default:] none diff --git a/doc/src/improper_style.txt b/doc/src/improper_style.txt index c5e0be8a819aac165d61952af8abee28b908a22c..cd72da4d073d700aef9d310a1f2aa362334b651f 100644 --- a/doc/src/improper_style.txt +++ b/doc/src/improper_style.txt @@ -78,11 +78,13 @@ more of (g,i,k,o,t) to indicate which accelerated styles exist. "cossq"_improper_cossq.html - improper with a cosine squared term "cvff"_improper_cvff.html - CVFF improper "distance"_improper_distance.html - improper based on distance between atom planes +"distharm"_improper_distharm.html - improper that is harmonic in the out-of-plane distance "fourier"_improper_fourier.html - improper with multiple cosine terms "harmonic"_improper_harmonic.html - harmonic improper "inversion/harmonic"_improper_inversion_harmonic.html - harmonic improper with Wilson-Decius out-of-plane definition "ring"_improper_ring.html - improper which prevents planar conformations "umbrella"_improper_umbrella.html - DREIDING improper :ul +"sqdistharm"_improper_sqdistharm.html - improper that is harmonic in the square of the out-of-plane distance :line diff --git a/doc/src/impropers.txt b/doc/src/impropers.txt index ca6c839c95a03fc934d8811d8e4ab0284f4b2d94..ce829197fe8d5970a6c13752d116145db281ae03 100644 --- a/doc/src/impropers.txt +++ b/doc/src/impropers.txt @@ -9,6 +9,7 @@ Improper Styles :h1 improper_cossq improper_cvff improper_distance + improper_distharm improper_fourier improper_harmonic improper_hybrid @@ -16,6 +17,7 @@ Improper Styles :h1 improper_none improper_ring improper_umbrella + improper_sqdistharm improper_zero END_RST --> diff --git a/doc/src/lammps.book b/doc/src/lammps.book index a1bbaf896ed48258a7d75f6257acc8d941f82f4e..5ae3456ad4be214edce5fc66e0d55b4e6418db26 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -596,6 +596,7 @@ pair_lj_long.html pair_lj_smooth.html pair_lj_smooth_linear.html pair_lj_soft.html +pair_lj_switch3_coulgauss.html pair_lubricate.html pair_lubricateU.html pair_mdf.html @@ -605,6 +606,7 @@ pair_meam_sw_spline.html pair_meso.html pair_mgpt.html pair_mie.html +pair_mm3_switch3_coulgauss.html pair_momb.html pair_morse.html pair_multi_lucy.html @@ -668,6 +670,7 @@ bond_harmonic_shift.html bond_harmonic_shift_cut.html bond_hybrid.html bond_morse.html +bond_mm3.html bond_none.html bond_nonlinear.html bond_oxdna.html @@ -687,11 +690,13 @@ angle_cosine_periodic.html angle_cosine_shift.html angle_cosine_shift_exp.html angle_cosine_squared.html +angle_cross.html angle_dipole.html angle_fourier.html angle_fourier_simple.html angle_harmonic.html angle_hybrid.html +angle_mm3.html angle_none.html angle_quartic.html angle_sdk.html @@ -725,6 +730,7 @@ improper_class2.html improper_cossq.html improper_cvff.html improper_distance.html +improper_distharm.html improper_fourier.html improper_harmonic.html improper_hybrid.html @@ -732,6 +738,7 @@ improper_inversion_harmonic.html improper_none.html improper_ring.html improper_umbrella.html +improper_sqdistharm.html improper_zero.html lammps_commands_kspace.html diff --git a/doc/src/pair_lj_switch3_coulgauss.txt b/doc/src/pair_lj_switch3_coulgauss.txt new file mode 100644 index 0000000000000000000000000000000000000000..1277cff9aa995ed3663050dd966729ac42db6a17 --- /dev/null +++ b/doc/src/pair_lj_switch3_coulgauss.txt @@ -0,0 +1,86 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style lj/switch3/coulgauss/long command :h3 + +[Syntax:] + +pair_style style args :pre + +style = {lj/switch3/coulgauss/long} +args = list of arguments for a particular style :ul + {lj/switch3/coulgauss/long} args = cutoff (cutoff2) width + cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units) + cutoff2 = global cutoff for Coulombic (optional) (distance units) + width = width parameter of the smoothing function (distance units) :pre + +[Examples:] + +pair_style lj/switch3/coulgauss/long 12.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +pair_style lj/switch3/coulgauss/long 12.0 10.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +[Description:] + +The {lj/switch3/coulgauss} style evaluates the LJ +vdW potential + +:c,image(Eqs/pair_lj_switch3.jpg) + +, which goes smoothly to zero at the cutoff r_c as defined +by the switching function + +:c,image(Eqs/pair_switch3.jpg) + +where w is the width defined in the arguments. This potential +is combined with Coulomb interaction between Gaussian charge densities: + +:c,image(Eqs/pair_coulgauss.jpg) + +where qi and qj are the +charges on the 2 atoms, epsilon is the dielectric constant which +can be set by the "dielectric"_dielectric.html command, gamma_i and gamma_j +are the widths of the Gaussian charge distribution and erf() is the error-function. +This style has to be used in conjunction with the "kspace_style"_kspace_style.html command + +If one cutoff is specified it is used for both the vdW and Coulomb +terms. If two cutoffs are specified, the first is used as the cutoff +for the vdW terms, and the second is the cutoff for the Coulombic term. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html +commands: + +epsilon (energy) +sigma (distance) +gamma (distance) :ul + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +Shifting the potential energy is not necessary because the switching +function ensures that the potential is zero at the cut-off. + + +[Restrictions:] + +These styles are part of the USER-YAFF package. They are only +enabled if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + diff --git a/doc/src/pair_mm3_switch3_coulgauss.txt b/doc/src/pair_mm3_switch3_coulgauss.txt new file mode 100644 index 0000000000000000000000000000000000000000..3e0e24150e2c1e2a8f11ee8eb085599797ebfc1c --- /dev/null +++ b/doc/src/pair_mm3_switch3_coulgauss.txt @@ -0,0 +1,88 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style mm3/switch3/coulgauss/long command :h3 + +[Syntax:] + +pair_style style args :pre + +style = {mm3/switch3/coulgauss/long} +args = list of arguments for a particular style :ul + {mm3/switch3/coulgauss/long} args = cutoff (cutoff2) width + cutoff = global cutoff for MM3 (and Coulombic if only 1 arg) (distance units) + cutoff2 = global cutoff for Coulombic (optional) (distance units) + width = width parameter of the smoothing function (distance units) :pre + +[Examples:] + +pair_style mm3/switch3/coulgauss/long 12.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +pair_style mm3/switch3/coulgauss/long 12.0 10.0 3.0 +pair_coeff 1 0.2 2.5 1.2 :pre + +[Description:] + +The {mm3/switch3/coulgauss} style evaluates the MM3 +vdW potential "(Allinger)"_#mm3-allinger1989 + +:c,image(Eqs/pair_mm3_switch3.jpg) + +, which goes smoothly to zero at the cutoff r_c as defined +by the switching function + +:c,image(Eqs/pair_switch3.jpg) + +where w is the width defined in the arguments. This potential +is combined with Coulomb interaction between Gaussian charge densities: + +:c,image(Eqs/pair_coulgauss.jpg) + +where qi and qj are the +charges on the 2 atoms, epsilon is the dielectric constant which +can be set by the "dielectric"_dielectric.html command, gamma_i and gamma_j +are the widths of the Gaussian charge distribution and erf() is the error-function. +This style has to be used in conjunction with the "kspace_style"_kspace_style.html command + +If one cutoff is specified it is used for both the vdW and Coulomb +terms. If two cutoffs are specified, the first is used as the cutoff +for the vdW terms, and the second is the cutoff for the Coulombic term. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html +commands: + +epsilon (energy) +r_v (distance) +gamma (distance) :ul + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +Mixing rules are fixed for this style as defined above. + +Shifting the potential energy is not necessary because the switching +function ensures that the potential is zero at the cut-off. + + +[Restrictions:] + +These styles are part of the USER-YAFF package. They are only +enabled if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 714ec55d2e115a9affe382f2a6aca1e8b44b2a0b..978277245607446d9a1abb3214dfbc6949035276 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -220,6 +220,7 @@ accelerated styles exist. "lj/sf/dipole/sf"_pair_dipole.html - LJ with dipole interaction with shifted forces "lj/smooth"_pair_lj_smooth.html - smoothed Lennard-Jones potential "lj/smooth/linear"_pair_lj_smooth_linear.html - linear smoothed LJ potential +"lj/switch3/coulgauss"_pair_lj_switch3_coulgauss - smoothed LJ vdW potential with Gaussian electrostatics "lj96/cut"_pair_lj96.html - Lennard-Jones 9/6 potential "lubricate"_pair_lubricate.html - hydrodynamic lubrication forces "lubricate/poly"_pair_lubricate.html - hydrodynamic lubrication forces with polydispersity @@ -232,6 +233,7 @@ accelerated styles exist. "meam/sw/spline"_pair_meam_sw_spline.html - splined version of MEAM with a Stillinger-Weber term "mgpt"_pair_mgpt.html - simplified model generalized pseudopotential theory (MGPT) potential "mie/cut"_pair_mie.html - Mie potential +"mm3/switch3/coulgauss"_pair_mm3_switch3_coulgauss - smoothed MM3 vdW potential with Gaussian electrostatics "momb"_pair_momb.html - Many-Body Metal-Organic (MOMB) force field "morse"_pair_morse.html - Morse potential "morse/smooth/linear"_pair_morse.html - linear smoothed Morse potential diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index 281025240246728ab73f4f244dbefa5e63e1d1aa..62cbb7f56d018662c260feae935e7343994b1453 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -61,6 +61,7 @@ Pair Styles :h1 pair_lj_smooth pair_lj_smooth_linear pair_lj_soft + pair_lj_switch3_coulgauss pair_lubricate pair_lubricateU pair_mdf @@ -70,6 +71,7 @@ Pair Styles :h1 pair_meso pair_mgpt pair_mie + pair_mm3_switch3_coulgauss pair_momb pair_morse pair_multi_lucy diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 5c44bf8afacabf5f89be643111740ec4f2a7279f..8807b2d680766839db90849a37662f5f53d02b6d 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -60,6 +60,7 @@ Alejandre alessandro Alessandro aliceblue +Allinger allocaters allosws AlO @@ -410,6 +411,7 @@ cossq costheta Couette coul +coulgauss coulombic Coulombic Coulombics @@ -566,6 +568,7 @@ discretized disp dissipative Dissipative +distharm dl dlambda DLAMMPS @@ -2493,6 +2496,7 @@ Springer springgreen spx spz +sqdistharm sqrt src srd @@ -2801,6 +2805,8 @@ Valone valuev Valuev Vanden +Vandenbrande +Vanduyfhuys varavg Varshalovich Varshney @@ -2958,6 +2964,8 @@ xy xyz xz xzhou +YAFF +yaff Yamada Yazdani Ybar @@ -2976,6 +2984,7 @@ ys ysu yu Yu +Yuh yukawa Yukawa Yusof diff --git a/examples/USER/misc/entropy/log.entropy b/examples/USER/misc/entropy/log.entropy index c380c62a731b77c6c83d3a36fc822b52843f8c17..333214ada8839480c975a1fc57ca6b9a5758640f 100644 --- a/examples/USER/misc/entropy/log.entropy +++ b/examples/USER/misc/entropy/log.entropy @@ -1,4 +1,4 @@ -LAMMPS (30 Mar 2018) +LAMMPS (4 Jan 2019) units metal atom_style full @@ -45,10 +45,10 @@ fix 1 all nph x 1. 1. 10. fix 2 all temp/csvr 350. 350. 0.1 64582 run 1000 -WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:138) -WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:138) -WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:138) -WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:138) +WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:139) +WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:139) +WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:139) +WARNING: More than one compute entropy/atom (../compute_entropy_atom.cpp:139) Neighbor list info ... update every 1 steps, delay 10 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -56,27 +56,27 @@ Neighbor list info ... ghost atom cutoff = 13.2 binsize = 6.6, bins = 21 6 6 5 neighbor lists, perpetual/occasional/extra = 5 0 0 - (1) pair eam/fs, perpetual + (1) pair eam/fs, perpetual, half/full from (2) attributes: half, newton on - pair build: half/bin/newton/tri - stencil: half/bin/3d/newton/tri - bin: standard + pair build: halffull/newton + stencil: none + bin: none (2) compute entropy/atom, perpetual - attributes: full, newton on, ghost - pair build: full/bin/ghost - stencil: full/ghost/bin/3d + attributes: full, newton on + pair build: full/bin + stencil: full/bin/3d bin: standard (3) compute entropy/atom, perpetual, copy from (2) - attributes: full, newton on, ghost + attributes: full, newton on pair build: copy stencil: none bin: none - (4) compute entropy/atom, perpetual, copy from (2) + (4) compute entropy/atom, perpetual attributes: full, newton on, ghost - pair build: copy - stencil: none - bin: none - (5) compute entropy/atom, perpetual, copy from (2) + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard + (5) compute entropy/atom, perpetual, copy from (4) attributes: full, newton on, ghost pair build: copy stencil: none @@ -85,34 +85,34 @@ Setting up Verlet run ... Unit style : metal Current step : 0 Time step : 0.002 -Per MPI rank memory allocation (min/avg/max) = 25.68 | 25.69 | 25.69 Mbytes +Per MPI rank memory allocation (min/avg/max) = 19.6 | 19.6 | 19.6 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 346.29871 -4285.222 0 -4101.9191 594.65353 165399.75 - 500 359.33758 -4285.247 0 -4095.0423 471.98587 165847.18 - 1000 348.99659 -4276.2274 0 -4091.4964 149.27188 166966.18 -Loop time of 5.3437 on 4 procs for 1000 steps with 4096 atoms + 500 359.33769 -4285.2472 0 -4095.0424 472.02043 165847.09 + 1000 348.99683 -4276.2282 0 -4091.4971 149.38771 166965.86 +Loop time of 4.4394 on 4 procs for 1000 steps with 4096 atoms -Performance: 32.337 ns/day, 0.742 hours/ns, 187.136 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 38.924 ns/day, 0.617 hours/ns, 225.256 timesteps/s +99.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.2832 | 4.3257 | 4.3839 | 1.8 | 80.95 -Bond | 0.00018309 | 0.00019825 | 0.00021418 | 0.0 | 0.00 -Neigh | 0.42195 | 0.42512 | 0.42739 | 0.3 | 7.96 -Comm | 0.051679 | 0.1101 | 0.14916 | 10.8 | 2.06 -Output | 0.40909 | 0.4091 | 0.40911 | 0.0 | 7.66 -Modify | 0.060869 | 0.061921 | 0.06327 | 0.4 | 1.16 -Other | | 0.01161 | | | 0.22 +Pair | 3.5298 | 3.5931 | 3.6669 | 2.6 | 80.94 +Bond | 8.2099e-05 | 0.00011444 | 0.00014673 | 0.0 | 0.00 +Neigh | 0.43384 | 0.4445 | 0.45558 | 1.4 | 10.01 +Comm | 0.048904 | 0.11122 | 0.16728 | 12.7 | 2.51 +Output | 0.22595 | 0.22595 | 0.22596 | 0.0 | 5.09 +Modify | 0.053103 | 0.053795 | 0.054549 | 0.3 | 1.21 +Other | | 0.01068 | | | 0.24 Nlocal: 1024 ave 1040 max 1001 min Histogram: 1 0 0 0 0 0 2 0 0 1 Nghost: 4614.25 ave 4700 max 4540 min Histogram: 1 1 0 0 0 0 0 1 0 1 -Neighs: 121747 ave 126398 max 116931 min +Neighs: 121747 ave 126398 max 116930 min Histogram: 1 0 0 1 0 0 1 0 0 1 -FullNghs: 243494 ave 252523 max 233842 min +FullNghs: 243494 ave 252523 max 233841 min Histogram: 1 0 0 1 0 0 1 0 0 1 Total # of neighbors = 973974 @@ -121,4 +121,4 @@ Ave special neighs/atom = 0 Neighbor list builds = 13 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:04 diff --git a/examples/USER/yaff/README b/examples/USER/yaff/README new file mode 100644 index 0000000000000000000000000000000000000000..af43a61e0842c6e80369daab2d997ad1f54677dc --- /dev/null +++ b/examples/USER/yaff/README @@ -0,0 +1,7 @@ +mof5: + NPT simulation of MOF5 using a QuickFF force field + +mil53al: + NPT simulation of MIL-53(Al) using a QuickFF force field. + If the pressure is high enough (for instance 2000 atm), + a phase transition from large pore to narrow pore is observed diff --git a/examples/USER/yaff/mil53al/lammps.data b/examples/USER/yaff/mil53al/lammps.data new file mode 100644 index 0000000000000000000000000000000000000000..7b73c99357e3caa3472acc08ebf4d33a324e935b --- /dev/null +++ b/examples/USER/yaff/mil53al/lammps.data @@ -0,0 +1,1545 @@ +Generated by yaff2lammps + + 152 atoms + 184 bonds + 736 angles + 288 dihedrals + 64 impropers + + 8 atom types + 8 bond types + 34 angle types + 9 dihedral types + 3 improper types + + 0.0000000000000000000000000000000000 13.3259954452999984653160936431959271 xlo xhi + 0.0000000000000000000000000000000000 17.0769005354000000806991010904312134 ylo yhi + 0.0000000000000000000000000000000000 12.5451650575000002163505996577441692 zlo zhi + 0.2406519637999999794431005284423009 -0.0003290864999999999263892436207612 0.0000597691999999999968857904153463 xy xz yz + +Masses + + 1 15.99940000 # O_HY + 2 15.99940000 # O_CA + 3 1.00794000 # H_HY + 4 1.00794000 # H_PH + 5 26.98153860 # AL + 6 12.01070000 # C_PH + 7 12.01070000 # C_PC + 8 12.01070000 # C_CA + +Bond Coeffs + + 1 567.89714613 0.99006574 + 2 149.93642745 1.86984652 + 3 111.04240192 1.91161348 + 4 389.90538840 1.09141352 + 5 491.67603879 1.38895490 + 6 451.37211172 1.40304450 + 7 668.04674737 1.27972749 + 8 320.55756064 1.49110450 + +Angle Coeffs + + 1 cosine/periodic 2.83639133 1 4 + 2 cross 6.00819953 13.51503788 20.21646410 1.85789452 0.98840688 111.64709450 + 3 cross 6.00819953 20.21646410 13.51503788 0.98840688 1.85789452 111.64709450 + 4 cross 44.73850113 10.65965583 10.65965583 1.85789452 1.85789452 128.05371526 + 5 cross 79.26686011 18.67531488 42.84377495 1.90495331 1.27905582 132.82471928 + 6 cross 79.26686011 42.84377495 18.67531488 1.27905582 1.90495331 132.82471928 + 7 cross -6.85938357 0.00000000 0.00000000 1.85789452 1.85789452 0.00000000 + 8 cross 20.15880651 47.33122583 34.90884408 1.90495331 1.85789452 89.96038503 + 9 cross 20.15880651 34.90884408 47.33122583 1.85789452 1.90495331 89.96038503 + 10 cross 26.34746514 0.00000000 0.00000000 1.90495331 1.90495331 0.00000000 + 11 cross 29.49811022 32.88373608 17.10597622 1.09150478 1.40308083 119.48992692 + 12 cross 29.49811022 17.10597622 32.88373608 1.40308083 1.09150478 119.48992692 + 13 cross 130.12394367 9.80817840 18.96121618 1.40308083 1.38855980 120.04435536 + 14 cross 130.12394367 18.96121618 9.80817840 1.38855980 1.40308083 120.04435536 + 15 cross 26.93982909 21.36148219 26.91818347 1.38855980 1.09150478 120.51713090 + 16 cross 26.93982909 26.91818347 21.36148219 1.09150478 1.38855980 120.51713090 + 17 cross 69.39565871 31.02625485 12.91121121 1.49380304 1.40308083 120.04236743 + 18 cross 69.39565871 12.91121121 31.02625485 1.40308083 1.49380304 120.04236743 + 19 cross 132.39591455 8.36520076 8.36520076 1.40308083 1.40308083 119.90683966 + 20 cross 101.87765421 105.70691653 47.75221042 1.27905582 1.49380304 117.59476167 + 21 cross 101.87765421 47.75221042 105.70691653 1.49380304 1.27905582 117.59476167 + 22 cross 183.45287073 91.94550669 91.94550669 1.27905582 1.27905582 124.82435184 + 23 harmonic 16.58040240 109.62517017 + 24 harmonic 17.35339453 114.44875517 + 25 harmonic 17.77569321 132.30806010 + 26 harmonic 31.05808424 89.91290461 + 27 harmonic 35.90327756 119.61990442 + 28 harmonic 65.78425626 120.00645318 + 29 harmonic 31.59874504 120.45871258 + 30 harmonic 43.33676649 120.04493381 + 31 harmonic 62.87326877 119.94842490 + 32 harmonic 75.47920221 117.59298491 + 33 harmonic 76.76979213 124.86144100 + 34 cosine/squared 1689.15160421 180.00000000 + +Dihedral Coeffs + + 1 1 3.73165017 2 -180.00000000 + 2 1 2.24530337 2 -180.00000000 + 3 1 4.66917332 2 -180.00000000 + 4 1 3.98899930 2 -180.00000000 + 5 1 3.29635668 2 -180.00000000 + 6 1 1.54619053 2 -180.00000000 + 7 1 3.86252462 2 -180.00000000 + 8 1 2.05124797 2 -180.00000000 + 9 1 2.35456853 2 -180.00000000 + +Improper Coeffs + + 1 9.10278571 0.00000000 + 2 167.11786187 0.00000000 + 3 18.17859622 0.00000000 + +Pair Coeffs + + 1 0.059000000000 1.820000000000 1.132500000000 # O_HY + 2 0.059000000000 1.820000000000 1.132500000000 # O_CA + 3 0.016000000000 1.600000000000 0.730800000000 # H_HY + 4 0.020000000000 1.620000000000 0.730800000000 # H_PH + 5 0.116000000000 2.360000000000 1.674200000000 # AL + 6 0.056000000000 1.940000000000 1.170300000000 # C_PH + 7 0.056000000000 1.940000000000 1.170300000000 # C_PC + 8 0.056000000000 1.940000000000 1.170300000000 # C_CA + +Atoms + + 1 1 1 -1.2098756939999999460155777342151850 6.7153870720493431534237060986924917 4.2828041318282634719594170746859163 8.5866133816897338704166031675413251 + 2 1 1 -1.2098756939999999460155777342151850 13.3783843949194771738575582276098430 4.2828041318282634719594170746859163 8.5866133816897338704166031675413251 + 3 1 1 -1.2098756939999999460155777342151850 3.5035237129981489090368995675817132 12.8223120918310673488349493709392846 2.3141018836642901490563417610246688 + 4 1 1 -1.2098756939999999460155777342151850 10.1665216355380785273609944852069020 12.8223120918310673488349493709392846 2.3141018836642901490563417610246688 + 5 1 1 -1.2098756939999999460155777342151850 6.8349996196255871083735655702184886 12.8213427865959719298416530364193022 3.9586200971404887916094139654887840 + 6 1 1 -1.2098756939999999460155777342151850 13.4979977420554568823263252852484584 12.8213427865959701534848136361688375 3.9586200971404887916094139654887840 + 7 1 1 -1.2098756939999999460155777342151850 3.3839079367670850118088310409802943 4.2840038831740319125174210057593882 10.2311117738051464698401105124503374 + 8 1 1 -1.2098756939999999460155777342151850 10.0469052596372208085995225701481104 4.2840038831740310243390013056341559 10.2311117738051464698401105124503374 + 9 1 2 -0.7445643530000000120949721349461470 1.2589905770693332609511116970679723 14.0689460511913626561408818815834820 1.8089686548556627165851296012988314 + 10 1 2 -0.7445643530000000120949721349461470 7.9219883930013077488752060162369162 14.0689460511913626561408818815834820 1.8089686548556627165851296012988314 + 11 1 2 -0.7445643530000000120949721349461470 4.4707674159202488439746048243250698 5.5288543253806796684557411936111748 8.0795827217564895050827544764615595 + 12 1 2 -0.7445643530000000120949721349461470 11.1337651385702471884542319457978010 5.5288543253806796684557411936111748 8.0795827217564895050827544764615595 + 13 1 2 -0.7445643530000000120949721349461470 1.2229986327132931211991717646014877 2.7734064633669284205552685307338834 10.4955229434339933902720076730474830 + 14 1 2 -0.7445643530000000120949721349461470 7.8859965552532269583707602578215301 2.7734064633669279764660586806712672 10.4955229434339933902720076730474830 + 15 1 2 -0.7445643530000000120949721349461470 4.6742044121247552368458855198696256 11.3101997821180297876253462163731456 4.2205434978126090683758775412570685 + 16 1 2 -0.7445643530000000120949721349461470 11.3372021347747544695039323414675891 11.3101997821180297876253462163731456 4.2205434978126090683758775412570685 + 17 1 2 -0.7445643530000000120949721349461470 5.5525225224355230224659862869884819 5.7375722500320405217166808142792434 10.5597464481615510578649264061823487 + 18 1 2 -0.7445643530000000120949721349461470 12.2155206315393947136271890485659242 5.7375722500320396335382611141540110 10.5597464481615510578649264061823487 + 19 1 2 -0.7445643530000000120949721349461470 2.3407580474861306996103849087376148 14.2746180205582611222325795097276568 4.2891813575851065465371902973856777 + 20 1 2 -0.7445643530000000120949721349461470 9.0037557701361325968036908307112753 14.2746180205582593458757401094771922 4.2891813575851065465371902973856777 + 21 1 2 -0.7445643530000000120949721349461470 5.7700538186296190801272132375743240 11.5405550825335865283705061301589012 1.8195962287082991792885877657681704 + 22 1 2 -0.7445643530000000120949721349461470 12.4330511414997584296315835672430694 11.5405550825335865283705061301589012 1.8195962287082991792885877657681704 + 23 1 2 -0.7445643530000000120949721349461470 2.3187182063798501552298603201052174 3.0004106930250986629005183203844354 8.0941017932647998378570264321751893 + 24 1 2 -0.7445643530000000120949721349461470 8.9817157424659139763889470486901700 3.0004106930250982188113084703218192 8.0941017932647998378570264321751893 + 25 1 2 -0.7445643530000000120949721349461470 5.6502316143841939677372465666849166 3.0020828644755410685718288732459769 10.7252833635608215701040535350330174 + 26 1 2 -0.7445643530000000120949721349461470 12.3132293370342029703579100896604359 3.0020828644755406244826190231833607 10.7252833635608215701040535350330174 + 27 1 2 -0.7445643530000000120949721349461470 2.4385834497316842828240623930469155 11.5390906922377300958260093466378748 4.4515765998441914064187585609033704 + 28 1 2 -0.7445643530000000120949721349461470 9.1015815721615513922415630077011883 11.5390906922377300958260093466378748 4.4515765998441914064187585609033704 + 29 1 2 -0.7445643530000000120949721349461470 5.6722249356407399289992099511437118 14.2759679355859336880030241445638239 1.9851114660623476737555392901413143 + 30 1 2 -0.7445643530000000120949721349461470 12.3352230580706052620598711655475199 14.2759679355859336880030241445638239 1.9851114660623476737555392901413143 + 31 1 2 -0.7445643530000000120949721349461470 2.2210375988136932257077660324284807 5.7360095476548309534337022341787815 8.2560278212604032432864187285304070 + 32 1 2 -0.7445643530000000120949721349461470 8.8840349216838294665876674116589129 5.7360095476548309534337022341787815 8.2560278212604032432864187285304070 + 33 1 2 -0.7445643530000000120949721349461470 1.3426929459297589630750735523179173 11.3116032563078015016344579635187984 2.0503536005570812683629355888115242 + 34 1 2 -0.7445643530000000120949721349461470 8.0056903754078607704514070064760745 11.3116032563078015016344579635187984 2.0503536005570812683629355888115242 + 35 1 2 -0.7445643530000000120949721349461470 4.5544349664199854643698017753195018 2.7717800127098115581247839145362377 8.3243804039794877525082483771257102 + 36 1 2 -0.7445643530000000120949721349461470 11.2174326890699891379199470975436270 2.7717800127098111140355740644736215 8.3243804039794877525082483771257102 + 37 1 2 -0.7445643530000000120949721349461470 1.1392762498379640501156018217443489 5.5307225590439976770085195312276483 10.7363410985781104756142667611129582 + 38 1 2 -0.7445643530000000120949721349461470 7.8022735727081062861998361768200994 5.5307225590439967888300998311024159 10.7363410985781104756142667611129582 + 39 1 2 -0.7445643530000000120949721349461470 4.5904838756409240829725604271516204 14.0673016329479629860088607529178262 4.4653546409977158404558394977357239 + 40 1 2 -0.7445643530000000120949721349461470 11.2534815982909286447011254495009780 14.0673016329479629860088607529178262 4.4653546409977158404558394977357239 + 41 1 3 0.5185263799999999534406924794893712 6.7033022636923433879019285086542368 4.6749920341423978342731970769818872 7.7032864563136307367585686733946204 + 42 1 3 0.5185263799999999534406924794893712 13.3662995865624836255847185384482145 4.6749920341423969460947773768566549 7.7032864563136307367585686733946204 + 43 1 3 0.5185263799999999534406924794893712 3.4911946343224471434041333850473166 13.2152028467359965446803471422754228 1.4310936932968010282252180331852287 + 44 1 3 0.5185263799999999534406924794893712 10.1541925435363875607208683504723012 13.2152028467359947683235077420249581 1.4310936932968010282252180331852287 + 45 1 3 0.5185263799999999534406924794893712 6.8226445109087379137235984671860933 13.2137951050594022461837084847502410 4.8418266265675384829592076130211353 + 46 1 3 0.5185263799999999534406924794893712 13.4856422335587406990953240892849863 13.2137951050594004698268690844997764 4.8418266265675384829592076130211353 + 47 1 3 0.5185263799999999534406924794893712 3.3718390257973132051461107039358467 4.6776567735304457329448268865235150 11.1137888972667671083627283223904669 + 48 1 3 0.5185263799999999534406924794893712 10.0348367484473133259825772256590426 4.6776567735304457329448268865235150 11.1137888972667671083627283223904669 + 49 1 4 0.1519691589999999925542084611151950 2.3150111389406484718733736372087151 15.7561391408537811997803146368823946 0.3851155792041089376276374878216302 + 50 1 4 0.1519691589999999925542084611151950 8.9780090614805825310895670554600656 15.7561391408537811997803146368823946 0.3851155792041089376276374878216302 + 51 1 4 0.1519691589999999925542084611151950 5.5251997890205615249215043149888515 7.2122227707358952386584860505536199 6.6487285031154712555689911823719740 + 52 1 4 0.1519691589999999925542084611151950 12.1881975116705607575795511365868151 7.2122227707358943504800663504283875 6.6487285031154712555689911823719740 + 53 1 4 0.1519691589999999925542084611151950 2.1513768927132632668985934287775308 0.7793385220131339163884831577888690 11.5512885193109173798120536957867444 + 54 1 4 0.1519691589999999925542084611151950 8.8143748152531955497579474467784166 0.7793385220131333612769708452105988 11.5512885193109173798120536957867444 + 55 1 4 0.1519691589999999925542084611151950 5.6018395825408164867553750809747726 9.3122840258958383685694570885971189 5.2698941286277101170298919896595180 + 56 1 4 0.1519691589999999925542084611151950 12.2648377049706844843512953957542777 9.3122840258958365922126176883466542 5.2698941286277101170298919896595180 + 57 1 4 0.1519691589999999925542084611151950 4.6402743945654769675002171425148845 7.7570678771031307263683629571460187 11.5742489313024528030382498400285840 + 58 1 4 0.1519691589999999925542084611151950 11.3032725036693442177693214034661651 7.7570678771031298381899432570207864 11.5742489313024528030382498400285840 + 59 1 4 0.1519691589999999925542084611151950 1.4289916763510370767420454285456799 16.2937782613533990172527410322800279 5.3045340265619520536688469292130321 + 60 1 4 0.1519691589999999925542084611151950 8.0919889992211722073989221826195717 16.2937782613533954645390622317790985 5.3045340265619520536688469292130321 + 61 1 4 0.1519691589999999925542084611151950 4.7188867445007129930445444188080728 9.8576336883462030158398192725144327 0.4106092614660375450519325113418745 + 62 1 4 0.1519691589999999925542084611151950 11.3818848669305765497483662329614162 9.8576336883462012394829798722639680 0.4106092614660375450519325113418745 + 63 1 4 0.1519691589999999925542084611151950 1.2672446555857233008168805099558085 1.3174924965356069606059463694691658 6.6860210385656291265377149102278054 + 64 1 4 0.1519691589999999925542084611151950 7.9302420850638259963716336642391980 1.3174924965356062944721315943752415 6.6860210385656291265377149102278054 + 65 1 4 0.1519691589999999925542084611151950 4.5976454677133533621713468164671212 1.3167699335050779829714429070008919 12.1295236794261001023187418468296528 + 66 1 4 0.1519691589999999925542084611151950 11.2606431903633534830078133381903172 1.3167699335050770947930232068756595 12.1295236794261001023187418468296528 + 67 1 4 0.1519691589999999925542084611151950 1.3874618992261169569957246494595893 9.8559985125562405983146163634955883 5.8599964503548598315774142974987626 + 68 1 4 0.1519691589999999925542084611151950 8.0504595152681570624508822220377624 9.8559985125562370456009375629946589 5.8599964503548598315774142974987626 + 69 1 4 0.1519691589999999925542084611151950 4.7594768289705067232375768071506172 16.2928537268444415531121194362640381 0.9657755315474335633396663070016075 + 70 1 4 0.1519691589999999925542084611151950 11.4224745516205032913603645283728838 16.2928537268444380003984406357631087 0.9657755315474335633396663070016075 + 71 1 4 0.1519691589999999925542084611151950 1.3090438015508472080483670652029105 7.7552807308893543236649747996125370 7.2413518635770861564537881349679083 + 72 1 4 0.1519691589999999925542084611151950 7.9720419239807123190644233545754105 7.7552807308893543236649747996125370 7.2413518635770861564537881349679083 + 73 1 4 0.1519691589999999925542084611151950 2.2705998288829158937573993171099573 9.3150495706767486581156845204532146 0.9992716491478911278178998145449441 + 74 1 4 0.1519691589999999925542084611151950 8.9335973516429838525709783425554633 9.3150495706767468817588451202027500 0.9992716491478911278178998145449441 + 75 1 4 0.1519691589999999925542084611151950 5.4818417666741723337509029079228640 0.7738074986951422040704073879169300 7.2745362714613577281852485612034798 + 76 1 4 0.1519691589999999925542084611151950 12.1448398891040394431684035225771368 0.7738074986951416489588950753386598 7.2745362714613577281852485612034798 + 77 1 4 0.1519691589999999925542084611151950 2.1937673007028561933395849337102845 7.2151514782616867904607715900056064 12.1654336247804373272174416342750192 + 78 1 4 0.1519691589999999925542084611151950 8.8567648234629228198855344089679420 7.2151514782616867904607715900056064 12.1654336247804373272174416342750192 + 79 1 4 0.1519691589999999925542084611151950 5.6453609802319695276651145832147449 15.7507340863305405065375452977605164 5.8955942218219092865183483809232712 + 80 1 4 0.1519691589999999925542084611151950 12.3083583031021088771694849128834903 15.7507340863305387301807058975100517 5.8955942218219092865183483809232712 + 81 1 5 2.0909989460000000249806362262461334 1.7220884276321977157664377955370583 4.2577041896622827010787659673951566 9.3989182512193298890679216128773987 + 82 1 5 2.0909989460000000249806362262461334 8.3850859503922716697843497968278825 4.2577041896622818129003462672699243 9.3989182512193298890679216128773987 + 83 1 5 2.0909989460000000249806362262461334 5.1732895332567778723387164063751698 12.7961141377704930022218832164071500 3.1261246626124026271043021552031860 + 84 1 5 2.0909989460000000249806362262461334 11.8362872559067771049967632279731333 12.7961141377704930022218832164071500 3.1261246626124026271043021552031860 + 85 1 5 2.0909989460000000249806362262461334 1.8417926657907308651829225709661841 12.7961386721601790839031309587880969 3.1465567471285815770443150540813804 + 86 1 5 2.0909989460000000249806362262461334 8.5047905883306658125775356893427670 12.7961386721601773075462915585376322 3.1465567471285815770443150540813804 + 87 1 5 2.0909989460000000249806362262461334 5.0535778772553525683974839921575040 4.2576796083468551046280481386929750 9.4188173794883720546522454242222011 + 88 1 5 2.0909989460000000249806362262461334 11.7165752001254901415450149215757847 4.2576796083468533282712087384425104 9.4188173794883720546522454242222011 + 89 1 6 -0.1065741179999999954652878386696102 1.4141707527268658761698816306306981 16.3400809537558444617388886399567127 0.2022529879698692911738078237249283 + 90 1 6 -0.1065741179999999954652878386696102 8.0771686752667974928954208735376596 16.3400809537558444617388886399567127 0.2022529879698692911738078237249283 + 91 1 6 -0.1065741179999999954652878386696102 4.6246955781035241628273979586083442 7.7975351373134911270312841224949807 6.4685670866407551926613450632430613 + 92 1 6 -0.1065741179999999954652878386696102 11.2876933007535207309501856798306108 7.7975351373134911270312841224949807 6.4685670866407551926613450632430613 + 93 1 6 -0.1065741179999999954652878386696102 1.2180418815135878318756113003473729 0.4262156085319599996275030662218342 11.9882078772904936414533949573524296 + 94 1 6 -0.1065741179999999954652878386696102 7.8810392976656951091740666015539318 0.4262156085319593334936882911279099 11.9882078772904936414533949573524296 + 95 1 6 -0.1065741179999999954652878386696102 4.6691704987195228326868345902767032 8.9605484349032789026523460051976144 5.7093670549547432813142222585156560 + 96 1 6 -0.1065741179999999954652878386696102 11.3321682213695300589506587130017579 8.9605484349032771262955066049471498 5.7093670549547432813142222585156560 + 97 1 6 -0.1065741179999999954652878386696102 5.5731262922007358540099630772601813 8.1037524473176567596510722069069743 12.0169282136407069572214822983369231 + 98 1 6 -0.1065741179999999954652878386696102 12.2361240148507377512032689992338419 8.1037524473176549832942328066565096 12.0169282136407069572214822983369231 + 99 1 6 -0.1065741179999999954652878386696102 2.3619457998798174536148053448414430 16.6401915820548325086747354362159967 5.7472080650212156172074173809960485 + 100 1 6 -0.1065741179999999954652878386696102 9.0249439223096850071215158095583320 16.6401915820548325086747354362159967 5.7472080650212156172074173809960485 + 101 1 6 -0.1065741179999999954652878386696102 5.6164918446169611598861592938192189 9.2670862695492175475919793825596571 0.2304860073834236744438896948850015 + 102 1 6 -0.1065741179999999954652878386696102 12.2794899670468264929468205082230270 9.2670862695492157712351399823091924 0.2304860073834236744438896948850015 + 103 1 6 -0.1065741179999999954652878386696102 2.1646735340058396168672061321558431 0.7266775681237089834496600815327838 6.5059044961463232681353474617935717 + 104 1 6 -0.1065741179999999954652878386696102 8.8276710567659080197699950076639652 0.7266775681237084283381477689545136 6.5059044961463232681353474617935717 + 105 1 6 -0.1065741179999999954652878386696102 5.4954840105190072563345893286168575 0.7272885255903810408639742490777280 12.3119305800847929077690423582680523 + 106 1 6 -0.1065741179999999954652878386696102 12.1584817331690135944199937512166798 0.7272885255903803747301594739838038 12.3119305800847929077690423582680523 + 107 1 6 -0.1065741179999999954652878386696102 2.2849532575684836643858943716622889 9.2651606566280424459591813501901925 6.0397320212017060470088836154900491 + 108 1 6 -0.1065741179999999954652878386696102 8.9479509802184900024712987942621112 9.2651606566280424459591813501901925 6.0397320212017060470088836154900491 + 109 1 6 -0.1065741179999999954652878386696102 5.6929776458884013834449433488771319 16.6407061629956416481945780105888844 0.5254053499251585268581266063847579 + 110 1 6 -0.1065741179999999954652878386696102 12.3559757549922686337140476098284125 16.6407061629956380954808992100879550 0.5254053499251585268581266063847579 + 111 1 6 -0.1065741179999999954652878386696102 2.2418392805257347788483457406982780 8.1017188456549362740588549058884382 6.7983615238712307160540149197913706 + 112 1 6 -0.1065741179999999954652878386696102 8.9048370031757357878632319625467062 8.1017188456549362740588549058884382 6.7983615238712307160540149197913706 + 113 1 6 -0.1065741179999999954652878386696102 1.3378988445639905524586765750427730 8.9631021552237744032254340709187090 0.5600409072322938275334536228911020 + 114 1 6 -0.1065741179999999954652878386696102 8.0008963673240636182981688762083650 8.9631021552237744032254340709187090 0.5600409072322938275334536228911020 + 115 1 6 -0.1065741179999999954652878386696102 4.5490129888977781646985931729432195 0.4220911682453661883940299048845191 6.8353863705893926905332591559272259 + 116 1 6 -0.1065741179999999954652878386696102 11.2120103117679210669166423031128943 0.4220911682453655777713663610484218 6.8353863705893926905332591559272259 + 117 1 6 -0.1065741179999999954652878386696102 1.2931697223744265112799212147365324 7.8002126371303779350796503422316164 12.3459248034638537916407585726119578 + 118 1 6 -0.1065741179999999954652878386696102 7.9561673517424651436158455908298492 7.8002126371303779350796503422316164 12.3459248034638537916407585726119578 + 119 1 6 -0.1065741179999999954652878386696102 4.7449200366800932116007061267737299 16.3360242466580523057473328663036227 6.0761321312451688214650857844389975 + 120 1 6 -0.1065741179999999954652878386696102 11.4079181457839649027619088883511722 16.3360242466580523057473328663036227 6.0761321312451688214650857844389975 + 121 1 7 -0.1475182609999999838734652257699054 6.8625612135502791488761431537568569 15.8993490470899345723410078790038824 0.7462376897096898442640622306498699 + 122 1 7 -0.1475182609999999838734652257699054 13.5255589362002837106047081761062145 15.8993490470899345723410078790038824 0.7462376897096898442640622306498699 + 123 1 7 -0.1475182609999999838734652257699054 3.4109618177191207699650021822890267 7.3586684715520229715934874548111111 7.0160031640105362527037868858315051 + 124 1 7 -0.1475182609999999838734652257699054 10.0739595403691204467122588539496064 7.3586684715520220834150677546858788 7.0160031640105362527037868858315051 + 125 1 7 -0.1475182609999999838734652257699054 0.0473415571287404482458960330859554 1.1642431334386127428359714031103067 11.7662756401595451904995570657774806 + 126 1 7 -0.1475182609999999838734652257699054 6.7103393197567315908713680983055383 1.1642431334386122987467615530476905 11.7662756401595451904995570657774806 + 127 1 7 -0.1475182609999999838734652257699054 3.4989796446374041849480818200390786 9.7004408763167386808845549239777029 5.4908995164190423921013461949769408 + 128 1 7 -0.1475182609999999838734652257699054 10.1619773672874043057845483417622745 9.7004408763167351281708761234767735 5.4908995164190423921013461949769408 + 129 1 7 -0.1475182609999999838734652257699054 6.7423569930703077801581457606516778 7.3609697445742119370493128371890634 11.7989650409209776427132965181954205 + 130 1 7 -0.1475182609999999838734652257699054 13.4053547157203087891730319825001061 7.3609697445742101606924734369385988 11.7989650409209776427132965181954205 + 131 1 7 -0.1475182609999999838734652257699054 3.5309961971541143910258142568636686 15.8971691701905903926217433763667941 5.5291046875368072832657162507530302 + 132 1 7 -0.1475182609999999838734652257699054 10.1939941196940502265988470753654838 15.8971691701905903926217433763667941 5.5291046875368072832657162507530302 + 133 1 7 -0.1475182609999999838734652257699054 0.1675527733465424773395824331601034 9.7025773236021279899432556703686714 0.7790777077228052682755787827773020 + 134 1 7 -0.1475182609999999838734652257699054 6.8305507092124733148352788703050464 9.7025773236021279899432556703686714 0.7790777077228052682755787827773020 + 135 1 7 -0.1475182609999999838734652257699054 3.3788922890951527122638253786135465 1.1619455116749999312730778910918161 7.0543290948871408829745632829144597 + 136 1 7 -0.1475182609999999838734652257699054 10.0418900117451528331002919003367424 1.1619455116749990430946581909665838 7.0543290948871408829745632829144597 + 137 1 8 0.8460320690000000531938439962686971 6.8158435147629843342542699247132987 14.6566180822766263247558526927605271 1.5740911748083665777642181637929752 + 138 1 8 0.8460320690000000531938439962686971 13.4788412374129844550907364464364946 14.6566180822766263247558526927605271 1.5740911748083665777642181637929752 + 139 1 8 0.8460320690000000531938439962686971 3.3645677309728028170354718895396218 6.1163711265005069606104370905086398 7.8445080317144935122541937744244933 + 140 1 8 0.8460320690000000531938439962686971 10.0275656535127346558056160574778914 6.1163711265005060724320173903834075 7.8445080317144935122541937744244933 + 141 1 8 0.8460320690000000531938439962686971 0.0895185086047598360670107808800822 2.4034399294411441516672311990987509 10.9344634655011496704446471994742751 + 142 1 8 0.8460320690000000531938439962686971 6.7525164044927041828714209259487689 2.4034399294411437075780213490361348 10.9344634655011496704446471994742751 + 143 1 8 0.8460320690000000531938439962686971 3.5408813332418129782297455676598474 10.9401060095762083790305041475221515 4.6597715425177188564020980265922844 + 144 1 8 0.8460320690000000531938439962686971 10.2038790558918126549770022393204272 10.9401060095762083790305041475221515 4.6597715425177188564020980265922844 + 145 1 8 0.8460320690000000531938439962686971 6.6960210710517644727701735973823816 6.1182853663466376659130219195503742 10.9710262110644158894956490257754922 + 146 1 8 0.8460320690000000531938439962686971 13.3590187937017663699634795193560421 6.1182853663466376659130219195503742 10.9710262110644158894956490257754922 + 147 1 8 0.8460320690000000531938439962686971 3.4843639165565232218568780808709562 14.6549005775032945564362307777628303 4.7005710286790414187407805002294481 + 148 1 8 0.8460320690000000531938439962686971 10.1473614393165885161351980059407651 14.6549005775032945564362307777628303 4.7005710286790414187407805002294481 + 149 1 8 0.8460320690000000531938439962686971 0.2093718873377909683863862255748245 10.9417709628228116969239636091515422 1.6109077843317383127441644319333136 + 150 1 8 0.8460320690000000531938439962686971 6.8723694634018412941145470540504903 10.9417709628228116969239636091515422 1.6109077843317383127441644319333136 + 151 1 8 0.8460320690000000531938439962686971 3.4210085616731804591950094618368894 2.4015655238668487392317274498054758 7.8855124055115330961029940226580948 + 152 1 8 0.8460320690000000531938439962686971 10.0840062843231805800314759835600853 2.4015655238668482951425175997428596 7.8855124055115330961029940226580948 + +Bonds + + 1 1 41 1 + 2 1 42 2 + 3 1 43 3 + 4 1 44 4 + 5 1 45 5 + 6 1 46 6 + 7 1 47 7 + 8 1 48 8 + 9 2 81 2 + 10 2 81 7 + 11 3 81 13 + 12 3 81 23 + 13 3 81 31 + 14 3 81 37 + 15 2 82 1 + 16 2 82 8 + 17 3 82 14 + 18 3 82 24 + 19 3 82 32 + 20 3 82 38 + 21 2 83 3 + 22 2 83 5 + 23 3 83 15 + 24 3 83 21 + 25 3 83 29 + 26 3 83 39 + 27 2 84 4 + 28 2 84 6 + 29 3 84 16 + 30 3 84 22 + 31 3 84 30 + 32 3 84 40 + 33 2 85 3 + 34 2 85 6 + 35 3 85 9 + 36 3 85 19 + 37 3 85 27 + 38 3 85 33 + 39 2 86 4 + 40 2 86 5 + 41 3 86 10 + 42 3 86 20 + 43 3 86 28 + 44 3 86 34 + 45 2 87 1 + 46 2 87 7 + 47 3 87 11 + 48 3 87 17 + 49 3 87 25 + 50 3 87 35 + 51 2 88 2 + 52 2 88 8 + 53 3 88 12 + 54 3 88 18 + 55 3 88 26 + 56 3 88 36 + 57 4 89 49 + 58 4 90 50 + 59 4 91 51 + 60 4 92 52 + 61 4 93 53 + 62 5 93 89 + 63 4 94 54 + 64 5 94 90 + 65 4 95 55 + 66 5 95 91 + 67 4 96 56 + 68 5 96 92 + 69 4 97 57 + 70 4 98 58 + 71 4 99 59 + 72 4 100 60 + 73 4 101 61 + 74 5 101 97 + 75 4 102 62 + 76 5 102 98 + 77 4 103 63 + 78 5 103 99 + 79 4 104 64 + 80 5 104 100 + 81 4 105 65 + 82 4 106 66 + 83 4 107 67 + 84 4 108 68 + 85 4 109 69 + 86 5 109 105 + 87 4 110 70 + 88 5 110 106 + 89 4 111 71 + 90 5 111 107 + 91 4 112 72 + 92 5 112 108 + 93 4 113 73 + 94 4 114 74 + 95 4 115 75 + 96 4 116 76 + 97 4 117 77 + 98 5 117 113 + 99 4 118 78 + 100 5 118 114 + 101 4 119 79 + 102 5 119 115 + 103 4 120 80 + 104 5 120 116 + 105 6 121 90 + 106 6 121 109 + 107 6 122 89 + 108 6 122 110 + 109 6 123 91 + 110 6 123 111 + 111 6 124 92 + 112 6 124 112 + 113 6 125 93 + 114 6 125 106 + 115 6 126 94 + 116 6 126 105 + 117 6 127 95 + 118 6 127 107 + 119 6 128 96 + 120 6 128 108 + 121 6 129 97 + 122 6 129 118 + 123 6 130 98 + 124 6 130 117 + 125 6 131 99 + 126 6 131 119 + 127 6 132 100 + 128 6 132 120 + 129 6 133 102 + 130 6 133 113 + 131 6 134 101 + 132 6 134 114 + 133 6 135 103 + 134 6 135 115 + 135 6 136 104 + 136 6 136 116 + 137 7 137 10 + 138 7 137 29 + 139 8 137 121 + 140 7 138 9 + 141 7 138 30 + 142 8 138 122 + 143 7 139 11 + 144 7 139 31 + 145 8 139 123 + 146 7 140 12 + 147 7 140 32 + 148 8 140 124 + 149 7 141 13 + 150 7 141 26 + 151 8 141 125 + 152 7 142 14 + 153 7 142 25 + 154 8 142 126 + 155 7 143 15 + 156 7 143 27 + 157 8 143 127 + 158 7 144 16 + 159 7 144 28 + 160 8 144 128 + 161 7 145 17 + 162 7 145 38 + 163 8 145 129 + 164 7 146 18 + 165 7 146 37 + 166 8 146 130 + 167 7 147 19 + 168 7 147 39 + 169 8 147 131 + 170 7 148 20 + 171 7 148 40 + 172 8 148 132 + 173 7 149 22 + 174 7 149 33 + 175 8 149 133 + 176 7 150 21 + 177 7 150 34 + 178 8 150 134 + 179 7 151 23 + 180 7 151 35 + 181 8 151 135 + 182 7 152 24 + 183 7 152 36 + 184 8 152 136 + +Angles + + 1 1 37 81 13 + 2 1 37 81 23 + 3 1 37 81 31 + 4 1 23 81 13 + 5 1 31 81 13 + 6 1 31 81 23 + 7 1 38 82 14 + 8 1 38 82 24 + 9 1 38 82 32 + 10 1 24 82 14 + 11 1 32 82 14 + 12 1 32 82 24 + 13 1 39 83 15 + 14 1 39 83 21 + 15 1 39 83 29 + 16 1 21 83 15 + 17 1 29 83 15 + 18 1 29 83 21 + 19 1 40 84 16 + 20 1 40 84 22 + 21 1 40 84 30 + 22 1 22 84 16 + 23 1 30 84 16 + 24 1 30 84 22 + 25 1 33 85 9 + 26 1 33 85 19 + 27 1 33 85 27 + 28 1 19 85 9 + 29 1 27 85 9 + 30 1 27 85 19 + 31 1 34 86 10 + 32 1 34 86 20 + 33 1 34 86 28 + 34 1 20 86 10 + 35 1 28 86 10 + 36 1 28 86 20 + 37 1 35 87 11 + 38 1 35 87 17 + 39 1 35 87 25 + 40 1 17 87 11 + 41 1 25 87 11 + 42 1 25 87 17 + 43 1 36 88 12 + 44 1 36 88 18 + 45 1 36 88 26 + 46 1 18 88 12 + 47 1 26 88 12 + 48 1 26 88 18 + 49 2 82 1 41 + 50 2 87 1 41 + 51 4 87 1 82 + 52 2 81 2 42 + 53 4 88 2 81 + 54 2 88 2 42 + 55 2 85 3 43 + 56 4 85 3 83 + 57 2 83 3 43 + 58 2 84 4 44 + 59 4 86 4 84 + 60 2 86 4 44 + 61 2 83 5 45 + 62 4 86 5 83 + 63 2 86 5 45 + 64 2 84 6 46 + 65 4 85 6 84 + 66 2 85 6 46 + 67 2 81 7 47 + 68 4 87 7 81 + 69 2 87 7 47 + 70 2 82 8 48 + 71 4 88 8 82 + 72 2 88 8 48 + 73 6 138 9 85 + 74 6 137 10 86 + 75 6 139 11 87 + 76 6 140 12 88 + 77 6 141 13 81 + 78 6 142 14 82 + 79 6 143 15 83 + 80 6 144 16 84 + 81 6 145 17 87 + 82 6 146 18 88 + 83 6 147 19 85 + 84 6 148 20 86 + 85 6 150 21 83 + 86 6 149 22 84 + 87 6 151 23 81 + 88 6 152 24 82 + 89 6 142 25 87 + 90 6 141 26 88 + 91 6 143 27 85 + 92 6 144 28 86 + 93 6 137 29 83 + 94 6 138 30 84 + 95 6 139 31 81 + 96 6 140 32 82 + 97 6 149 33 85 + 98 6 150 34 86 + 99 6 151 35 87 + 100 6 152 36 88 + 101 6 146 37 81 + 102 6 145 38 82 + 103 6 147 39 83 + 104 6 148 40 84 + 105 8 37 81 2 + 106 8 37 81 7 + 107 10 37 81 13 + 108 10 37 81 23 + 109 10 37 81 31 + 110 7 7 81 2 + 111 8 13 81 2 + 112 8 13 81 7 + 113 8 23 81 2 + 114 8 23 81 7 + 115 10 23 81 13 + 116 8 31 81 2 + 117 8 31 81 7 + 118 10 31 81 13 + 119 10 31 81 23 + 120 8 38 82 1 + 121 8 38 82 8 + 122 10 38 82 14 + 123 10 38 82 24 + 124 10 38 82 32 + 125 7 8 82 1 + 126 8 14 82 1 + 127 8 14 82 8 + 128 8 24 82 1 + 129 8 24 82 8 + 130 10 24 82 14 + 131 8 32 82 1 + 132 8 32 82 8 + 133 10 32 82 14 + 134 10 32 82 24 + 135 7 5 83 3 + 136 8 39 83 3 + 137 8 39 83 5 + 138 10 39 83 15 + 139 10 39 83 21 + 140 10 39 83 29 + 141 8 15 83 3 + 142 8 15 83 5 + 143 8 21 83 3 + 144 8 21 83 5 + 145 10 21 83 15 + 146 8 29 83 3 + 147 8 29 83 5 + 148 10 29 83 15 + 149 10 29 83 21 + 150 7 6 84 4 + 151 8 40 84 4 + 152 8 40 84 6 + 153 10 40 84 16 + 154 10 40 84 22 + 155 10 40 84 30 + 156 8 16 84 4 + 157 8 16 84 6 + 158 8 22 84 4 + 159 8 22 84 6 + 160 10 22 84 16 + 161 8 30 84 4 + 162 8 30 84 6 + 163 10 30 84 16 + 164 10 30 84 22 + 165 8 33 85 3 + 166 8 33 85 6 + 167 10 33 85 9 + 168 10 33 85 19 + 169 10 33 85 27 + 170 7 6 85 3 + 171 8 9 85 3 + 172 8 9 85 6 + 173 8 19 85 3 + 174 8 19 85 6 + 175 10 19 85 9 + 176 8 27 85 3 + 177 8 27 85 6 + 178 10 27 85 9 + 179 10 27 85 19 + 180 8 34 86 4 + 181 8 34 86 5 + 182 10 34 86 10 + 183 10 34 86 20 + 184 10 34 86 28 + 185 7 5 86 4 + 186 8 10 86 4 + 187 8 10 86 5 + 188 8 20 86 4 + 189 8 20 86 5 + 190 10 20 86 10 + 191 8 28 86 4 + 192 8 28 86 5 + 193 10 28 86 10 + 194 10 28 86 20 + 195 8 35 87 1 + 196 8 35 87 7 + 197 10 35 87 11 + 198 10 35 87 17 + 199 10 35 87 25 + 200 7 7 87 1 + 201 8 11 87 1 + 202 8 11 87 7 + 203 8 17 87 1 + 204 8 17 87 7 + 205 10 17 87 11 + 206 8 25 87 1 + 207 8 25 87 7 + 208 10 25 87 11 + 209 10 25 87 17 + 210 8 36 88 2 + 211 8 36 88 8 + 212 10 36 88 12 + 213 10 36 88 18 + 214 10 36 88 26 + 215 7 8 88 2 + 216 8 12 88 2 + 217 8 12 88 8 + 218 8 18 88 2 + 219 8 18 88 8 + 220 10 18 88 12 + 221 8 26 88 2 + 222 8 26 88 8 + 223 10 26 88 12 + 224 10 26 88 18 + 225 12 122 89 49 + 226 13 122 89 93 + 227 15 93 89 49 + 228 12 121 90 50 + 229 13 121 90 94 + 230 15 94 90 50 + 231 12 123 91 51 + 232 13 123 91 95 + 233 15 95 91 51 + 234 12 124 92 52 + 235 13 124 92 96 + 236 15 96 92 52 + 237 15 89 93 53 + 238 13 125 93 89 + 239 12 125 93 53 + 240 15 90 94 54 + 241 13 126 94 90 + 242 12 126 94 54 + 243 15 91 95 55 + 244 13 127 95 91 + 245 12 127 95 55 + 246 13 128 96 92 + 247 12 128 96 56 + 248 15 92 96 56 + 249 12 129 97 57 + 250 13 129 97 101 + 251 15 101 97 57 + 252 15 102 98 58 + 253 12 130 98 58 + 254 13 130 98 102 + 255 12 131 99 59 + 256 13 131 99 103 + 257 15 103 99 59 + 258 12 132 100 60 + 259 13 132 100 104 + 260 15 104 100 60 + 261 15 97 101 61 + 262 13 134 101 97 + 263 12 134 101 61 + 264 15 98 102 62 + 265 13 133 102 98 + 266 12 133 102 62 + 267 15 99 103 63 + 268 13 135 103 99 + 269 12 135 103 63 + 270 15 100 104 64 + 271 13 136 104 100 + 272 12 136 104 64 + 273 15 109 105 65 + 274 12 126 105 65 + 275 13 126 105 109 + 276 12 125 106 66 + 277 13 125 106 110 + 278 15 110 106 66 + 279 12 127 107 67 + 280 13 127 107 111 + 281 15 111 107 67 + 282 12 128 108 68 + 283 13 128 108 112 + 284 15 112 108 68 + 285 15 105 109 69 + 286 13 121 109 105 + 287 12 121 109 69 + 288 15 106 110 70 + 289 13 122 110 106 + 290 12 122 110 70 + 291 15 107 111 71 + 292 13 123 111 107 + 293 12 123 111 71 + 294 13 124 112 108 + 295 12 124 112 72 + 296 15 108 112 72 + 297 12 133 113 73 + 298 13 133 113 117 + 299 15 117 113 73 + 300 15 118 114 74 + 301 12 134 114 74 + 302 13 134 114 118 + 303 12 135 115 75 + 304 13 135 115 119 + 305 15 119 115 75 + 306 12 136 116 76 + 307 13 136 116 120 + 308 15 120 116 76 + 309 15 113 117 77 + 310 13 130 117 113 + 311 12 130 117 77 + 312 13 129 118 114 + 313 12 129 118 78 + 314 15 114 118 78 + 315 15 115 119 79 + 316 13 131 119 115 + 317 12 131 119 79 + 318 15 116 120 80 + 319 13 132 120 116 + 320 12 132 120 80 + 321 17 137 121 90 + 322 17 137 121 109 + 323 19 109 121 90 + 324 17 138 122 89 + 325 17 138 122 110 + 326 19 110 122 89 + 327 17 139 123 91 + 328 17 139 123 111 + 329 19 111 123 91 + 330 17 140 124 92 + 331 17 140 124 112 + 332 19 112 124 92 + 333 19 106 125 93 + 334 17 141 125 106 + 335 17 141 125 93 + 336 19 105 126 94 + 337 17 142 126 105 + 338 17 142 126 94 + 339 19 107 127 95 + 340 17 143 127 107 + 341 17 143 127 95 + 342 19 108 128 96 + 343 17 144 128 108 + 344 17 144 128 96 + 345 17 145 129 97 + 346 17 145 129 118 + 347 19 118 129 97 + 348 19 117 130 98 + 349 17 146 130 98 + 350 17 146 130 117 + 351 17 147 131 99 + 352 17 147 131 119 + 353 19 119 131 99 + 354 17 148 132 100 + 355 17 148 132 120 + 356 19 120 132 100 + 357 19 113 133 102 + 358 17 149 133 113 + 359 17 149 133 102 + 360 19 114 134 101 + 361 17 150 134 114 + 362 17 150 134 101 + 363 19 115 135 103 + 364 17 151 135 115 + 365 17 151 135 103 + 366 19 116 136 104 + 367 17 152 136 116 + 368 17 152 136 104 + 369 21 121 137 10 + 370 21 121 137 29 + 371 22 29 137 10 + 372 21 122 138 9 + 373 21 122 138 30 + 374 22 30 138 9 + 375 21 123 139 11 + 376 21 123 139 31 + 377 22 31 139 11 + 378 21 124 140 12 + 379 21 124 140 32 + 380 22 32 140 12 + 381 22 26 141 13 + 382 21 125 141 26 + 383 21 125 141 13 + 384 22 25 142 14 + 385 21 126 142 25 + 386 21 126 142 14 + 387 22 27 143 15 + 388 21 127 143 27 + 389 21 127 143 15 + 390 21 128 144 28 + 391 21 128 144 16 + 392 22 28 144 16 + 393 21 129 145 17 + 394 21 129 145 38 + 395 22 38 145 17 + 396 22 37 146 18 + 397 21 130 146 18 + 398 21 130 146 37 + 399 21 131 147 19 + 400 21 131 147 39 + 401 22 39 147 19 + 402 21 132 148 20 + 403 21 132 148 40 + 404 22 40 148 20 + 405 22 33 149 22 + 406 21 133 149 33 + 407 21 133 149 22 + 408 22 34 150 21 + 409 21 134 150 34 + 410 21 134 150 21 + 411 22 35 151 23 + 412 21 135 151 35 + 413 21 135 151 23 + 414 22 36 152 24 + 415 21 136 152 36 + 416 21 136 152 24 + 417 23 82 1 41 + 418 23 87 1 41 + 419 24 87 1 82 + 420 23 81 2 42 + 421 24 88 2 81 + 422 23 88 2 42 + 423 23 85 3 43 + 424 24 85 3 83 + 425 23 83 3 43 + 426 23 84 4 44 + 427 24 86 4 84 + 428 23 86 4 44 + 429 23 83 5 45 + 430 24 86 5 83 + 431 23 86 5 45 + 432 23 84 6 46 + 433 24 85 6 84 + 434 23 85 6 46 + 435 23 81 7 47 + 436 24 87 7 81 + 437 23 87 7 47 + 438 23 82 8 48 + 439 24 88 8 82 + 440 23 88 8 48 + 441 25 138 9 85 + 442 25 137 10 86 + 443 25 139 11 87 + 444 25 140 12 88 + 445 25 141 13 81 + 446 25 142 14 82 + 447 25 143 15 83 + 448 25 144 16 84 + 449 25 145 17 87 + 450 25 146 18 88 + 451 25 147 19 85 + 452 25 148 20 86 + 453 25 150 21 83 + 454 25 149 22 84 + 455 25 151 23 81 + 456 25 152 24 82 + 457 25 142 25 87 + 458 25 141 26 88 + 459 25 143 27 85 + 460 25 144 28 86 + 461 25 137 29 83 + 462 25 138 30 84 + 463 25 139 31 81 + 464 25 140 32 82 + 465 25 149 33 85 + 466 25 150 34 86 + 467 25 151 35 87 + 468 25 152 36 88 + 469 25 146 37 81 + 470 25 145 38 82 + 471 25 147 39 83 + 472 25 148 40 84 + 473 26 37 81 2 + 474 26 37 81 7 + 475 26 13 81 2 + 476 26 13 81 7 + 477 26 23 81 2 + 478 26 23 81 7 + 479 26 31 81 2 + 480 26 31 81 7 + 481 26 38 82 1 + 482 26 38 82 8 + 483 26 14 82 1 + 484 26 14 82 8 + 485 26 24 82 1 + 486 26 24 82 8 + 487 26 32 82 1 + 488 26 32 82 8 + 489 26 39 83 3 + 490 26 39 83 5 + 491 26 15 83 3 + 492 26 15 83 5 + 493 26 21 83 3 + 494 26 21 83 5 + 495 26 29 83 3 + 496 26 29 83 5 + 497 26 40 84 4 + 498 26 40 84 6 + 499 26 16 84 4 + 500 26 16 84 6 + 501 26 22 84 4 + 502 26 22 84 6 + 503 26 30 84 4 + 504 26 30 84 6 + 505 26 33 85 3 + 506 26 33 85 6 + 507 26 9 85 3 + 508 26 9 85 6 + 509 26 19 85 3 + 510 26 19 85 6 + 511 26 27 85 3 + 512 26 27 85 6 + 513 26 34 86 4 + 514 26 34 86 5 + 515 26 10 86 4 + 516 26 10 86 5 + 517 26 20 86 4 + 518 26 20 86 5 + 519 26 28 86 4 + 520 26 28 86 5 + 521 26 35 87 1 + 522 26 35 87 7 + 523 26 11 87 1 + 524 26 11 87 7 + 525 26 17 87 1 + 526 26 17 87 7 + 527 26 25 87 1 + 528 26 25 87 7 + 529 26 36 88 2 + 530 26 36 88 8 + 531 26 12 88 2 + 532 26 12 88 8 + 533 26 18 88 2 + 534 26 18 88 8 + 535 26 26 88 2 + 536 26 26 88 8 + 537 27 122 89 49 + 538 28 122 89 93 + 539 29 93 89 49 + 540 27 121 90 50 + 541 28 121 90 94 + 542 29 94 90 50 + 543 27 123 91 51 + 544 28 123 91 95 + 545 29 95 91 51 + 546 27 124 92 52 + 547 28 124 92 96 + 548 29 96 92 52 + 549 29 89 93 53 + 550 28 125 93 89 + 551 27 125 93 53 + 552 29 90 94 54 + 553 28 126 94 90 + 554 27 126 94 54 + 555 29 91 95 55 + 556 28 127 95 91 + 557 27 127 95 55 + 558 28 128 96 92 + 559 27 128 96 56 + 560 29 92 96 56 + 561 27 129 97 57 + 562 28 129 97 101 + 563 29 101 97 57 + 564 29 102 98 58 + 565 27 130 98 58 + 566 28 130 98 102 + 567 27 131 99 59 + 568 28 131 99 103 + 569 29 103 99 59 + 570 27 132 100 60 + 571 28 132 100 104 + 572 29 104 100 60 + 573 29 97 101 61 + 574 28 134 101 97 + 575 27 134 101 61 + 576 29 98 102 62 + 577 28 133 102 98 + 578 27 133 102 62 + 579 29 99 103 63 + 580 28 135 103 99 + 581 27 135 103 63 + 582 29 100 104 64 + 583 28 136 104 100 + 584 27 136 104 64 + 585 29 109 105 65 + 586 27 126 105 65 + 587 28 126 105 109 + 588 27 125 106 66 + 589 28 125 106 110 + 590 29 110 106 66 + 591 27 127 107 67 + 592 28 127 107 111 + 593 29 111 107 67 + 594 27 128 108 68 + 595 28 128 108 112 + 596 29 112 108 68 + 597 29 105 109 69 + 598 28 121 109 105 + 599 27 121 109 69 + 600 29 106 110 70 + 601 28 122 110 106 + 602 27 122 110 70 + 603 29 107 111 71 + 604 28 123 111 107 + 605 27 123 111 71 + 606 28 124 112 108 + 607 27 124 112 72 + 608 29 108 112 72 + 609 27 133 113 73 + 610 28 133 113 117 + 611 29 117 113 73 + 612 29 118 114 74 + 613 27 134 114 74 + 614 28 134 114 118 + 615 27 135 115 75 + 616 28 135 115 119 + 617 29 119 115 75 + 618 27 136 116 76 + 619 28 136 116 120 + 620 29 120 116 76 + 621 29 113 117 77 + 622 28 130 117 113 + 623 27 130 117 77 + 624 28 129 118 114 + 625 27 129 118 78 + 626 29 114 118 78 + 627 29 115 119 79 + 628 28 131 119 115 + 629 27 131 119 79 + 630 29 116 120 80 + 631 28 132 120 116 + 632 27 132 120 80 + 633 30 137 121 90 + 634 30 137 121 109 + 635 31 109 121 90 + 636 30 138 122 89 + 637 30 138 122 110 + 638 31 110 122 89 + 639 30 139 123 91 + 640 30 139 123 111 + 641 31 111 123 91 + 642 30 140 124 92 + 643 30 140 124 112 + 644 31 112 124 92 + 645 31 106 125 93 + 646 30 141 125 106 + 647 30 141 125 93 + 648 31 105 126 94 + 649 30 142 126 105 + 650 30 142 126 94 + 651 31 107 127 95 + 652 30 143 127 107 + 653 30 143 127 95 + 654 31 108 128 96 + 655 30 144 128 108 + 656 30 144 128 96 + 657 30 145 129 97 + 658 30 145 129 118 + 659 31 118 129 97 + 660 31 117 130 98 + 661 30 146 130 98 + 662 30 146 130 117 + 663 30 147 131 99 + 664 30 147 131 119 + 665 31 119 131 99 + 666 30 148 132 100 + 667 30 148 132 120 + 668 31 120 132 100 + 669 31 113 133 102 + 670 30 149 133 113 + 671 30 149 133 102 + 672 31 114 134 101 + 673 30 150 134 114 + 674 30 150 134 101 + 675 31 115 135 103 + 676 30 151 135 115 + 677 30 151 135 103 + 678 31 116 136 104 + 679 30 152 136 116 + 680 30 152 136 104 + 681 32 121 137 10 + 682 32 121 137 29 + 683 33 29 137 10 + 684 32 122 138 9 + 685 32 122 138 30 + 686 33 30 138 9 + 687 32 123 139 11 + 688 32 123 139 31 + 689 33 31 139 11 + 690 32 124 140 12 + 691 32 124 140 32 + 692 33 32 140 12 + 693 33 26 141 13 + 694 32 125 141 26 + 695 32 125 141 13 + 696 33 25 142 14 + 697 32 126 142 25 + 698 32 126 142 14 + 699 33 27 143 15 + 700 32 127 143 27 + 701 32 127 143 15 + 702 32 128 144 28 + 703 32 128 144 16 + 704 33 28 144 16 + 705 32 129 145 17 + 706 32 129 145 38 + 707 33 38 145 17 + 708 33 37 146 18 + 709 32 130 146 18 + 710 32 130 146 37 + 711 32 131 147 19 + 712 32 131 147 39 + 713 33 39 147 19 + 714 32 132 148 20 + 715 32 132 148 40 + 716 33 40 148 20 + 717 33 33 149 22 + 718 32 133 149 33 + 719 32 133 149 22 + 720 33 34 150 21 + 721 32 134 150 34 + 722 32 134 150 21 + 723 33 35 151 23 + 724 32 135 151 35 + 725 32 135 151 23 + 726 33 36 152 24 + 727 32 136 152 36 + 728 32 136 152 24 + 729 34 7 81 2 + 730 34 8 82 1 + 731 34 5 83 3 + 732 34 6 84 4 + 733 34 6 85 3 + 734 34 5 86 4 + 735 34 7 87 1 + 736 34 8 88 2 + +Dihedrals + + 1 4 125 93 89 49 + 2 7 125 93 89 122 + 3 8 53 93 89 49 + 4 4 53 93 89 122 + 5 4 54 94 90 121 + 6 8 54 94 90 50 + 7 7 126 94 90 121 + 8 4 126 94 90 50 + 9 4 127 95 91 51 + 10 7 127 95 91 123 + 11 8 55 95 91 51 + 12 4 55 95 91 123 + 13 7 128 96 92 124 + 14 4 128 96 92 52 + 15 4 56 96 92 124 + 16 8 56 96 92 52 + 17 8 61 101 97 57 + 18 4 61 101 97 129 + 19 4 134 101 97 57 + 20 7 134 101 97 129 + 21 4 133 102 98 58 + 22 7 133 102 98 130 + 23 8 62 102 98 58 + 24 4 62 102 98 130 + 25 4 135 103 99 59 + 26 7 135 103 99 131 + 27 8 63 103 99 59 + 28 4 63 103 99 131 + 29 4 136 104 100 60 + 30 7 136 104 100 132 + 31 8 64 104 100 60 + 32 4 64 104 100 132 + 33 4 121 109 105 65 + 34 7 121 109 105 126 + 35 8 69 109 105 65 + 36 4 69 109 105 126 + 37 8 70 110 106 66 + 38 4 70 110 106 125 + 39 4 122 110 106 66 + 40 7 122 110 106 125 + 41 4 123 111 107 67 + 42 7 123 111 107 127 + 43 8 71 111 107 67 + 44 4 71 111 107 127 + 45 7 124 112 108 128 + 46 4 124 112 108 68 + 47 4 72 112 108 128 + 48 8 72 112 108 68 + 49 4 130 117 113 73 + 50 7 130 117 113 133 + 51 8 77 117 113 73 + 52 4 77 117 113 133 + 53 4 129 118 114 74 + 54 7 129 118 114 134 + 55 8 78 118 114 74 + 56 4 78 118 114 134 + 57 4 131 119 115 75 + 58 7 131 119 115 135 + 59 8 79 119 115 75 + 60 4 79 119 115 135 + 61 4 132 120 116 76 + 62 7 132 120 116 136 + 63 8 80 120 116 76 + 64 4 80 120 116 136 + 65 2 137 121 90 50 + 66 3 137 121 90 94 + 67 5 109 121 90 50 + 68 1 109 121 90 94 + 69 3 137 121 109 105 + 70 2 137 121 109 69 + 71 1 90 121 109 105 + 72 5 90 121 109 69 + 73 2 138 122 89 49 + 74 3 138 122 89 93 + 75 5 110 122 89 49 + 76 1 110 122 89 93 + 77 1 89 122 110 106 + 78 5 89 122 110 70 + 79 3 138 122 110 106 + 80 2 138 122 110 70 + 81 2 139 123 91 51 + 82 3 139 123 91 95 + 83 5 111 123 91 51 + 84 1 111 123 91 95 + 85 1 91 123 111 107 + 86 5 91 123 111 71 + 87 3 139 123 111 107 + 88 2 139 123 111 71 + 89 2 140 124 92 52 + 90 3 140 124 92 96 + 91 5 112 124 92 52 + 92 1 112 124 92 96 + 93 1 92 124 112 108 + 94 5 92 124 112 72 + 95 3 140 124 112 108 + 96 2 140 124 112 72 + 97 1 106 125 93 89 + 98 5 106 125 93 53 + 99 3 141 125 93 89 + 100 2 141 125 93 53 + 101 2 141 125 106 66 + 102 3 141 125 106 110 + 103 5 93 125 106 66 + 104 1 93 125 106 110 + 105 1 105 126 94 90 + 106 5 105 126 94 54 + 107 3 142 126 94 90 + 108 2 142 126 94 54 + 109 5 94 126 105 65 + 110 1 94 126 105 109 + 111 2 142 126 105 65 + 112 3 142 126 105 109 + 113 1 107 127 95 91 + 114 5 107 127 95 55 + 115 3 143 127 95 91 + 116 2 143 127 95 55 + 117 2 143 127 107 67 + 118 3 143 127 107 111 + 119 5 95 127 107 67 + 120 1 95 127 107 111 + 121 1 108 128 96 92 + 122 5 108 128 96 56 + 123 3 144 128 96 92 + 124 2 144 128 96 56 + 125 2 144 128 108 68 + 126 3 144 128 108 112 + 127 5 96 128 108 68 + 128 1 96 128 108 112 + 129 2 145 129 97 57 + 130 3 145 129 97 101 + 131 5 118 129 97 57 + 132 1 118 129 97 101 + 133 1 97 129 118 114 + 134 5 97 129 118 78 + 135 3 145 129 118 114 + 136 2 145 129 118 78 + 137 5 117 130 98 58 + 138 1 117 130 98 102 + 139 2 146 130 98 58 + 140 3 146 130 98 102 + 141 1 98 130 117 113 + 142 5 98 130 117 77 + 143 3 146 130 117 113 + 144 2 146 130 117 77 + 145 2 147 131 99 59 + 146 3 147 131 99 103 + 147 5 119 131 99 59 + 148 1 119 131 99 103 + 149 1 99 131 119 115 + 150 5 99 131 119 79 + 151 3 147 131 119 115 + 152 2 147 131 119 79 + 153 2 148 132 100 60 + 154 3 148 132 100 104 + 155 5 120 132 100 60 + 156 1 120 132 100 104 + 157 1 100 132 120 116 + 158 5 100 132 120 80 + 159 3 148 132 120 116 + 160 2 148 132 120 80 + 161 1 113 133 102 98 + 162 5 113 133 102 62 + 163 3 149 133 102 98 + 164 2 149 133 102 62 + 165 2 149 133 113 73 + 166 3 149 133 113 117 + 167 5 102 133 113 73 + 168 1 102 133 113 117 + 169 1 114 134 101 97 + 170 5 114 134 101 61 + 171 3 150 134 101 97 + 172 2 150 134 101 61 + 173 5 101 134 114 74 + 174 1 101 134 114 118 + 175 2 150 134 114 74 + 176 3 150 134 114 118 + 177 1 115 135 103 99 + 178 5 115 135 103 63 + 179 3 151 135 103 99 + 180 2 151 135 103 63 + 181 2 151 135 115 75 + 182 3 151 135 115 119 + 183 5 103 135 115 75 + 184 1 103 135 115 119 + 185 1 116 136 104 100 + 186 5 116 136 104 64 + 187 3 152 136 104 100 + 188 2 152 136 104 64 + 189 2 152 136 116 76 + 190 3 152 136 116 120 + 191 5 104 136 116 76 + 192 1 104 136 116 120 + 193 9 121 137 10 86 + 194 9 121 137 29 83 + 195 6 10 137 121 90 + 196 6 10 137 121 109 + 197 6 29 137 121 90 + 198 6 29 137 121 109 + 199 9 122 138 9 85 + 200 9 122 138 30 84 + 201 6 9 138 122 89 + 202 6 9 138 122 110 + 203 6 30 138 122 89 + 204 6 30 138 122 110 + 205 9 123 139 11 87 + 206 9 123 139 31 81 + 207 6 11 139 123 91 + 208 6 11 139 123 111 + 209 6 31 139 123 91 + 210 6 31 139 123 111 + 211 9 124 140 12 88 + 212 9 124 140 32 82 + 213 6 12 140 124 92 + 214 6 12 140 124 112 + 215 6 32 140 124 92 + 216 6 32 140 124 112 + 217 9 125 141 13 81 + 218 9 125 141 26 88 + 219 6 26 141 125 106 + 220 6 26 141 125 93 + 221 6 13 141 125 106 + 222 6 13 141 125 93 + 223 9 126 142 14 82 + 224 9 126 142 25 87 + 225 6 25 142 126 105 + 226 6 25 142 126 94 + 227 6 14 142 126 105 + 228 6 14 142 126 94 + 229 9 127 143 15 83 + 230 9 127 143 27 85 + 231 6 27 143 127 107 + 232 6 27 143 127 95 + 233 6 15 143 127 107 + 234 6 15 143 127 95 + 235 9 128 144 16 84 + 236 9 128 144 28 86 + 237 6 28 144 128 108 + 238 6 28 144 128 96 + 239 6 16 144 128 108 + 240 6 16 144 128 96 + 241 9 129 145 17 87 + 242 9 129 145 38 82 + 243 6 17 145 129 97 + 244 6 17 145 129 118 + 245 6 38 145 129 97 + 246 6 38 145 129 118 + 247 9 130 146 18 88 + 248 9 130 146 37 81 + 249 6 18 146 130 98 + 250 6 18 146 130 117 + 251 6 37 146 130 98 + 252 6 37 146 130 117 + 253 9 131 147 19 85 + 254 9 131 147 39 83 + 255 6 19 147 131 99 + 256 6 19 147 131 119 + 257 6 39 147 131 99 + 258 6 39 147 131 119 + 259 9 132 148 20 86 + 260 9 132 148 40 84 + 261 6 20 148 132 100 + 262 6 20 148 132 120 + 263 6 40 148 132 100 + 264 6 40 148 132 120 + 265 9 133 149 22 84 + 266 9 133 149 33 85 + 267 6 33 149 133 113 + 268 6 33 149 133 102 + 269 6 22 149 133 113 + 270 6 22 149 133 102 + 271 9 134 150 21 83 + 272 9 134 150 34 86 + 273 6 34 150 134 114 + 274 6 34 150 134 101 + 275 6 21 150 134 114 + 276 6 21 150 134 101 + 277 9 135 151 23 81 + 278 9 135 151 35 87 + 279 6 35 151 135 115 + 280 6 35 151 135 103 + 281 6 23 151 135 115 + 282 6 23 151 135 103 + 283 9 136 152 24 82 + 284 9 136 152 36 88 + 285 6 36 152 136 116 + 286 6 36 152 136 104 + 287 6 24 152 136 116 + 288 6 24 152 136 104 + +Impropers + + 1 3 89 49 122 93 + 2 3 90 121 50 94 + 3 3 91 51 123 95 + 4 3 92 124 52 96 + 5 3 93 89 125 53 + 6 3 94 90 54 126 + 7 3 95 91 127 55 + 8 3 96 128 92 56 + 9 3 97 57 129 101 + 10 3 98 58 102 130 + 11 3 99 59 131 103 + 12 3 100 60 132 104 + 13 3 101 97 61 134 + 14 3 102 98 133 62 + 15 3 103 99 135 63 + 16 3 104 100 136 64 + 17 3 105 65 109 126 + 18 3 106 66 125 110 + 19 3 107 67 127 111 + 20 3 108 128 68 112 + 21 3 109 105 121 69 + 22 3 110 106 70 122 + 23 3 111 107 123 71 + 24 3 112 124 108 72 + 25 3 113 73 133 117 + 26 3 114 74 118 134 + 27 3 115 75 135 119 + 28 3 116 76 136 120 + 29 3 117 113 130 77 + 30 3 118 129 114 78 + 31 3 119 115 131 79 + 32 3 120 116 132 80 + 33 1 121 137 90 109 + 34 1 122 89 138 110 + 35 1 123 91 139 111 + 36 1 124 92 140 112 + 37 1 125 106 141 93 + 38 1 126 105 94 142 + 39 1 127 107 143 95 + 40 1 128 108 144 96 + 41 1 129 97 145 118 + 42 1 130 98 117 146 + 43 1 131 99 147 119 + 44 1 132 100 148 120 + 45 1 133 113 149 102 + 46 1 134 114 101 150 + 47 1 135 115 151 103 + 48 1 136 116 152 104 + 49 2 137 121 10 29 + 50 2 138 9 122 30 + 51 2 139 11 123 31 + 52 2 140 124 12 32 + 53 2 141 26 13 125 + 54 2 142 25 14 126 + 55 2 143 27 127 15 + 56 2 144 128 28 16 + 57 2 145 17 129 38 + 58 2 146 18 37 130 + 59 2 147 19 131 39 + 60 2 148 20 132 40 + 61 2 149 33 133 22 + 62 2 150 34 21 134 + 63 2 151 35 135 23 + 64 2 152 36 136 24 diff --git a/examples/USER/yaff/mil53al/lammps.in b/examples/USER/yaff/mil53al/lammps.in new file mode 100644 index 0000000000000000000000000000000000000000..a2b6329bbdfe433d858a1e29591e1f8f4d45447e --- /dev/null +++ b/examples/USER/yaff/mil53al/lammps.in @@ -0,0 +1,42 @@ +######################################### +#General settings +######################################### +units real +atom_style full +boundary p p p +dielectric 1 + +######################################### +#Force field and system specification +######################################### +special_bonds lj 0.000000 0.000000 1.000000 coul 1.000000 1.000000 1.000000 +pair_style mm3/switch3/coulgauss/long 12.0000 4.0000 +pair_modify table 16 # Accuracy of the table used for real space electrostatics +pair_modify mix arithmetic +pair_modify tail no +bond_style harmonic +angle_style hybrid cosine/periodic cross harmonic cosine/squared +dihedral_style fourier +improper_style distharm +box tilt large + +read_data lammps.data # Data file location +kspace_style pppm 0.0000001 # Ewald accuracy +neighbor 2.0 multi +neigh_modify every 2 delay 4 check yes + +######################################### +#Output settings +######################################### +thermo 100 # Provide output every n steps +thermo_style custom step time etotal ke temp pe emol evdwl ecoul elong etail vol press +thermo_modify line multi format float %20.12f + +######################################### +#Sampling options +######################################### +timestep 0.5 # in femtosecond +velocity all create 0.0 5 # initial temperature in Kelvin and random seed +fix 1 all npt temp 300.0 300.0 100.0 tri 2000.0 2000.0 1000.0 tchain 3 mtk yes nreset 1000 +fix_modify 1 energy yes # Add thermo/barostat contributions to energy +run 10000 diff --git a/examples/USER/yaff/mof5/lammps.data b/examples/USER/yaff/mof5/lammps.data new file mode 100644 index 0000000000000000000000000000000000000000..acc6f7d3d22392d1a958101adb3f65dd2811888f --- /dev/null +++ b/examples/USER/yaff/mof5/lammps.data @@ -0,0 +1,4315 @@ +Generated by yaff2lammps + + 424 atoms + 512 bonds + 1824 angles + 1248 dihedrals + 192 impropers + + 7 atom types + 7 bond types + 29 angle types + 11 dihedral types + 3 improper types + + 0.0000000000000000000000000000000000 26.4070248643267468935391661943867803 xlo xhi + 0.0000000000000000000000000000000000 26.4070252891212220447414438240230083 ylo yhi + 0.0000000000000000000000000000000000 26.4070257154843517355402582325041294 zlo zhi + -0.0000000007111492372846892652846758 -0.0000000000659408828932501509572980 -0.0000000000464737531820980317620204 xy xz yz + +Masses + + 1 65.40900000 # Zn + 2 15.99940000 # O_CE + 3 15.99940000 # O_CA + 4 12.01070000 # C_CA + 5 12.01070000 # C_PH + 6 12.01070000 # C_PC + 7 1.00794000 # H_PH + +Bond Coeffs + + 1 682.36094515 1.27102391 + 2 499.48089314 1.38650552 + 3 328.64606795 1.49449724 + 4 465.15110963 1.39880394 + 5 406.68075027 1.08330871 + 6 107.02127303 2.03268653 + 7 113.67644184 1.98848069 + +Angle Coeffs + + 1 cross 193.48062339 101.27328163 101.27328163 1.27218805 1.27218805 123.91120600 + 2 cross 90.86010618 104.60333096 43.56504880 1.27186911 1.49086906 118.21448172 + 3 cross 90.86010618 43.56504880 104.60333096 1.49086906 1.27186911 118.21448172 + 4 cross 130.81104940 12.67739461 16.17645862 1.39837427 1.38759779 120.07946149 + 5 cross 130.81104940 16.17645862 12.67739461 1.38759779 1.39837427 120.07946149 + 6 cross 11.41676921 30.63883886 25.17734414 1.08331485 1.39837427 119.52155527 + 7 cross 11.41676921 25.17734414 30.63883886 1.39837427 1.08331485 119.52155527 + 8 cross 12.44667401 28.35704887 28.27577085 1.38759779 1.08331485 120.41324047 + 9 cross 12.44667401 28.27577085 28.35704887 1.08331485 1.38759779 120.41324047 + 10 cross 75.95522848 37.17414513 10.05189907 1.49086906 1.39837427 119.94754556 + 11 cross 75.95522848 10.05189907 37.17414513 1.39837427 1.49086906 119.94754556 + 12 cross 144.65705708 -7.34407121 -7.34407121 1.39837427 1.39837427 119.90241395 + 13 cross 20.17000841 2.28355442 -7.92322284 1.98727825 2.03828701 109.42277782 + 14 cross 20.17000841 -7.92322284 2.28355442 2.03828701 1.98727825 109.42277782 + 15 cross 22.09014578 27.25520258 27.25520258 1.98727825 1.98727825 108.41474547 + 16 cross 35.09855972 13.51120456 13.51120456 2.03828701 2.03828701 110.23699695 + 17 cross 60.09401332 6.52883112 6.33031133 1.27250698 1.98727825 133.24307044 + 18 cross 60.09401332 6.33031133 6.52883112 1.98727825 1.27250698 133.24307044 + 19 mm3 89.55892156 124.04066786 + 20 mm3 66.99975548 120.08429731 + 21 mm3 36.80738383 120.34964823 + 22 mm3 78.98317285 118.11635047 + 23 mm3 45.56202376 120.27481067 + 24 mm3 38.05295940 119.66571944 + 25 mm3 69.51816469 119.99726194 + 26 mm3 10.37923783 135.02173615 + 27 mm3 7.08946285 108.92035063 + 28 mm3 9.10447143 107.51166462 + 29 mm3 29.71892770 109.45766072 + +Dihedral Coeffs + + 1 1 3.64767899 2 -180.00000000 + 2 1 2.35495004 2 -180.00000000 + 3 1 0.77392291 2 -180.00000000 + 4 1 4.23729765 2 -180.00000000 + 5 1 3.96491674 2 -180.00000000 + 6 1 3.27183804 2 -180.00000000 + 7 1 2.21748040 2 -180.00000000 + 8 1 5.15273943 2 -180.00000000 + 9 1 0.07197799 2 -180.00000000 + 10 1 1.18073306 2 -180.00000000 + 11 1 0.13801067 3 -180.00000000 + +Improper Coeffs + + 1 27.54315214 0.30000000 + 2 196.72513766 0.20000000 + 3 21.31242806 0.10000000 + +Pair Coeffs + + 1 0.276000000000 2.290000000000 2.073000000000 # Zn + 2 0.059000000000 1.820000000000 1.132500000000 # O_CE + 3 0.059000000000 1.820000000000 1.132500000000 # O_CA + 4 0.056000000000 1.940000000000 1.164600000000 # C_CA + 5 0.056000000000 1.960000000000 1.164600000000 # C_PH + 6 0.056000000000 1.960000000000 1.164600000000 # C_PC + 7 0.020000000000 1.620000000000 0.730900000000 # H_PH + +Atoms + + 1 1 1 1.1385908011000001049950469678151421 7.7681655356393379818769062694627792 5.4353470464458997213341717724688351 5.4353481400207055429518732125870883 + 2 1 1 1.1385908011000001049950469678151421 18.6388604818900276427484641317278147 20.9716793824397242929080675821751356 20.9716786980636094028795923804864287 + 3 1 1 1.1385908011000001049950469678151421 18.6388604828091395404499053256586194 20.9716793882223804246223153313621879 5.4353481469762670030831941403448582 + 4 1 1 1.1385908011000001049950469678151421 7.7681655364778690042726339015644044 5.4353470521724522868112217111047357 20.9716787050184301222088834038004279 + 5 1 1 1.1385908011000001049950469678151421 18.6388604820358487756948306923732162 5.4353470549395410671422723680734634 20.9716787022728006206762074725702405 + 6 1 1 1.1385908011000001049950469678151421 7.7681655348670091143503668718039989 20.9716793909088075054114597151055932 5.4353481442725533057114262192044407 + 7 1 1 1.1385908011000001049950469678151421 7.7681655357115895199626720568630844 20.9716793851271745552367065101861954 20.9716787007712568424722121562808752 + 8 1 1 1.1385908011000001049950469678151421 18.6388604829732216217053064610809088 5.4353470492259390312028699554502964 5.4353481427881851217875919246580452 + 9 1 1 1.1385908011000001049950469678151421 5.4353480335349191321370199148077518 7.7681659778904474933369783684611320 5.4353473910968492788242656388320029 + 10 1 1 1.1385908011000001049950469678151421 20.9716779882094357390087679959833622 18.6388604499221948174181306967511773 20.9716794503401686711185902822762728 + 11 1 1 1.1385908011000001049950469678151421 5.4353480418414452657316360273398459 18.6388604476287227385000733193010092 20.9716794526507896989642176777124405 + 12 1 1 1.1385908011000001049950469678151421 20.9716779971001834326216339832171798 7.7681659755144787382619142590556294 5.4353473934498337527543299074750394 + 13 1 1 1.1385908011000001049950469678151421 20.9716779939941133648062532301992178 18.6388604508393349590278376126661897 5.4353473947126449417055482626892626 + 14 1 1 1.1385908011000001049950469678151421 5.4353480392393134223993911291472614 7.7681659787512575832124639418907464 20.9716794539569519884025794453918934 + 15 1 1 1.1385908011000001049950469678151421 20.9716779912964526033647416625171900 7.7681659763617938452284761297050864 20.9716794515814761723504489054903388 + 16 1 1 1.1385908011000001049950469678151421 5.4353480361288601940827902581077069 18.6388604485427613610681873979046941 5.4353473923970669900995744683314115 + 17 1 1 1.1385908011000001049950469678151421 5.4353473615433571808353008236736059 5.4353484119468289392784754454623908 7.7681665390863825493283911782782525 + 18 1 1 1.1385908011000001049950469678151421 20.9716786635264433868997002718970180 20.9716780214450366770506661850959063 18.6388602999156418604798091109842062 + 19 1 1 1.1385908011000001049950469678151421 20.9716786678593969384110096143558621 5.4353484156213465183782318490557373 18.6388602987394449428393272683024406 + 20 1 1 1.1385908011000001049950469678151421 5.4353473649551853341677087882999331 20.9716780252386136851328046759590507 7.7681665379556230632829283422324806 + 21 1 1 1.1385908011000001049950469678151421 5.4353473663194220577565829444210976 20.9716780238284776771706674480810761 18.6388602975496908698005427140742540 + 22 1 1 1.1385908011000001049950469678151421 20.9716786692716929962898575467988849 5.4353484142481827134929517342243344 7.7681665367625623019876002217642963 + 23 1 1 1.1385908011000001049950469678151421 20.9716786649501152339780674083158374 20.9716780228583630218963662628084421 7.7681665355948394946494772739242762 + 24 1 1 1.1385908011000001049950469678151421 5.4353473629214468232362378330435604 5.4353484133301899206003326980862767 18.6388602964345366785892110783606768 + 25 1 1 1.1385908011000001049950469678151421 7.7681661448906043077045069367159158 18.6388603674339208282617619261145592 18.6388609743165929444330686237663031 + 26 1 1 1.1385908011000001049950469678151421 18.6388598649385599514971545431762934 7.7681660573387638635267649078741670 7.7681658552096362058136946870945394 + 27 1 1 1.1385908011000001049950469678151421 18.6388598693962634911258646752685308 7.7681660528421563327583498903550208 18.6388609736337329536581819411367178 + 28 1 1 1.1385908011000001049950469678151421 7.7681661493951921215739275794476271 18.6388603629757554358548077289015055 7.7681658545225156231595065037254244 + 29 1 1 1.1385908011000001049950469678151421 18.6388598684865343102501356042921543 18.6388603657511033873106498504057527 7.7681658517638823013840010389685631 + 30 1 1 1.1385908011000001049950469678151421 7.7681661489359852268421491316985339 7.7681660555329976602934038965031505 18.6388609709207209164105734089389443 + 31 1 1 1.1385908011000001049950469678151421 7.7681661534287194115222519030794501 7.7681660600201682953525050834286958 7.7681658579038215250989196647424251 + 32 1 1 1.1385908011000001049950469678151421 18.6388598729334624692910438170656562 18.6388603702083806012979039223864675 18.6388609770715056868084502639248967 + 33 1 2 -1.1996262903999999060999925859505311 6.6017567794254068402892698941286653 6.6017568805824877742338685493450612 6.6017569851852506701561651425436139 + 34 1 2 -1.1996262903999999060999925859505311 19.8052692450136689217288221698254347 19.8052695509050984412624529795721173 19.8052698542058642772190069081261754 + 35 1 2 -1.1996262903999999060999925859505311 19.8052692451266771911377873038873076 19.8052695509947689345153776230290532 6.6017569850626030003581945493351668 + 36 1 2 -1.1996262903999999060999925859505311 6.6017567794610032549940115131903440 6.6017568806120694446804009203333408 19.8052698540833276297234988305717707 + 37 1 2 -1.1996262903999999060999925859505311 19.8052692455747880728722520871087909 6.6017568806341531129078248341102153 19.8052698541859548697630089009180665 + 38 1 2 -1.1996262903999999060999925859505311 6.6017567792593823128299845848232508 19.8052695509999701073411415563896298 6.6017569849619262001283459539990872 + 39 1 2 -1.1996262903999999060999925859505311 6.6017567793064513281819927215110511 19.8052695509013538810449972515925765 19.8052698543089888971735490486025810 + 40 1 2 -1.1996262903999999060999925859505311 19.8052692456725587533128418726846576 6.6017568805577271362494684581179172 6.6017569850833739408813016780186445 + 41 1 3 -0.6614125480999999417974777315976098 7.3942181733283014466451277257874608 5.8092937865263580832220213778782636 3.5019658020624895300443313317373395 + 42 1 3 -0.6614125480999999417974777315976098 19.0128078425525721684152813395485282 20.5977326425952682598108367528766394 22.9050610423764169354399200528860092 + 43 1 3 -0.6614125480999999417974777315976098 19.0128078411376932876919454429298639 20.5977326418579700373356899945065379 3.5019658064874317204839826445095241 + 44 1 3 -0.6614125480999999417974777315976098 7.3942181718381911892379321216139942 5.8092937857008299928907035791780800 22.9050610467861481822637870209291577 + 45 1 3 -0.6614125480999999417974777315976098 19.0128078564215385881652764510363340 5.8092937813638991784159770759288222 22.9050610450410161433865141589194536 + 46 1 3 -0.6614125480999999417974777315976098 7.3942181862512610379667421511840075 20.5977326373507381163108220789581537 3.5019658046746764412660013476852328 + 47 1 3 -0.6614125480999999417974777315976098 7.3942181846366104025491949869319797 20.5977326379863434624439832987263799 22.9050610442565165669748239452019334 + 48 1 3 -0.6614125480999999417974777315976098 19.0128078545243539565490209497511387 5.8092937816891616620296190376393497 3.5019658041565966399844000989105552 + 49 1 3 -0.6614125480999999417974777315976098 3.5019657909495807146527113218326122 7.3942187212764647341600721119903028 5.8092944677925419938446793821640313 + 50 1 3 -0.6614125480999999417974777315976098 22.9050602369784179757061792770400643 19.0128076948782052113529061898589134 20.5977323618679157846145244548097253 + 51 1 3 -0.6614125480999999417974777315976098 3.5019657972852078486880600394215435 19.0128076933941407844486093381419778 20.5977323633455640106149076018482447 + 52 1 3 -0.6614125480999999417974777315976098 22.9050602427862557419757649768143892 7.3942187215476389283708158473018557 5.8092944675320916658733949589077383 + 53 1 3 -0.6614125480999999417974777315976098 22.9050602407389938264259399147704244 19.0128077137566151577630080282688141 5.8092944665556016659024862747173756 + 54 1 3 -0.6614125480999999417974777315976098 3.5019657945506681429037598718423396 7.3942187399778358525281873880885541 20.5977323605050735011445794953033328 + 55 1 3 -0.6614125480999999417974777315976098 22.9050602387797610504094336647540331 7.3942187407221728889794576389249414 20.5977323612425990972951694857329130 + 56 1 3 -0.6614125480999999417974777315976098 3.5019657935145551697075916308676824 19.0128077123963770134196238359436393 5.8092944652027505014757480239495635 + 57 1 3 -0.6614125480999999417974777315976098 5.8092942248463375065625768911559135 3.5019659445057245150678681966383010 7.3942200042889165700898956856690347 + 58 1 3 -0.6614125480999999417974777315976098 20.5977317920127909189886850072070956 22.9050604931258803276250546332448721 19.0128068387566280250666750362142920 + 59 1 3 -0.6614125480999999417974777315976098 20.5977317911533504002363770268857479 3.5019659473096780288869922515004873 19.0128068375803138678747927770018578 + 60 1 3 -0.6614125480999999417974777315976098 5.8092942247353196449921597377397120 22.9050604972263194269999075913801789 7.3942200013357615162590263935271651 + 61 1 3 -0.6614125480999999417974777315976098 5.8092942250240371393488203466404229 22.9050604954516501265970873646438122 19.0128068461052670556910015875473619 + 62 1 3 -0.6614125480999999417974777315976098 20.5977317913448167985279724234715104 3.5019659454737896986387113429373130 7.3942200097043766504611994605511427 + 63 1 3 -0.6614125480999999417974777315976098 20.5977317923231417751139815663918853 22.9050604949299945189977734116837382 7.3942200086482570142720760486554354 + 64 1 3 -0.6614125480999999417974777315976098 5.8092942249925405562294145056512207 3.5019659463469063886975618515862152 19.0128068430089136597871402045711875 + 65 1 3 -0.6614125480999999417974777315976098 5.8092960785327898420860037731472403 7.3942182075750313430262394831515849 22.9050614002890959852720698108896613 + 66 1 3 -0.6614125480999999417974777315976098 20.5977299401312841098388162208721042 19.0128082239953606347171444213017821 3.5019654517842653262960084248334169 + 67 1 3 -0.6614125480999999417974777315976098 20.5977299405712770408172218594700098 19.0128082257082873240960907423868775 22.9050613972744407931259047472849488 + 68 1 3 -0.6614125480999999417974777315976098 5.8092960790514895919045557093340904 7.3942182093726591673998882470186800 3.5019654487820419674903860141057521 + 69 1 3 -0.6614125480999999417974777315976098 5.8092960762463938806376972934231162 19.0128082304078702691185753792524338 3.5019654501479484665082964056637138 + 70 1 3 -0.6614125480999999417974777315976098 20.5977299386054824026359710842370987 7.3942182142183732196372147882357240 22.9050613984380468934887176146730781 + 71 1 3 -0.6614125480999999417974777315976098 20.5977299376820504051011084811761975 7.3942182155180562475038641423452646 3.5019654502855197542032783530885354 + 72 1 3 -0.6614125480999999417974777315976098 5.8092960756012583800611537299118936 19.0128082320136755356543289963155985 22.9050613988376525753665191587060690 + 73 1 3 -0.6614125480999999417974777315976098 7.3942172056483563835627137450501323 3.5019653161967823074007810646435246 20.5977303905757622715100296773016453 + 74 1 3 -0.6614125480999999417974777315976098 19.0128088409146194237564486684277654 22.9050611265415646755627676611766219 5.8092964336224230947891555842943490 + 75 1 3 -0.6614125480999999417974777315976098 19.0128088404674606692879024194553494 3.5019653150334657532027904380811378 5.8092964323469908904939984495285898 + 76 1 3 -0.6614125480999999417974777315976098 7.3942172062134545740264002233743668 22.9050611238859431750825024209916592 20.5977303913429352633102098479866982 + 77 1 3 -0.6614125480999999417974777315976098 19.0128088218691964073059352813288569 22.9050611226776190676446276484057307 20.5977303949553345319145591929554939 + 78 1 3 -0.6614125480999999417974777315976098 7.3942171867826607112306191993411630 3.5019653124559817491956437152111903 5.8092964378953917403691775689367205 + 79 1 3 -0.6614125480999999417974777315976098 7.3942171872283024569583176344167441 22.9050611277551752209546975791454315 5.8092964372482214230331010185182095 + 80 1 3 -0.6614125480999999417974777315976098 19.0128088215761614776511123636737466 3.5019653187266461813464957231190056 20.5977303960754589695625327294692397 + 81 1 3 -0.6614125480999999417974777315976098 3.5019654779337230365854338742792606 5.8092967237013635184439408476464450 19.0128078412212566661310120252892375 + 82 1 3 -0.6614125480999999417974777315976098 22.9050605550011709965474437922239304 20.5977296963806075780212268000468612 7.3942190175944446650646568741649389 + 83 1 3 -0.6614125480999999417974777315976098 3.5019654778984468102009941503638402 20.5977296959421032340742385713383555 7.3942190171633228601422160863876343 + 84 1 3 -0.6614125480999999417974777315976098 22.9050605571640275570644007530063391 5.8092967253534926186375741963274777 19.0128078428666391630486032227054238 + 85 1 3 -0.6614125480999999417974777315976098 22.9050605588242035537405172362923622 5.8092967248778739630665768345352262 7.3942190047566755950469996605534106 + 86 1 3 -0.6614125480999999417974777315976098 3.5019654796467700741402495623333380 20.5977296956396678240253095282241702 19.0128078302438510149841022212058306 + 87 1 3 -0.6614125480999999417974777315976098 22.9050605531062210218351538060232997 20.5977296962075158148763875942677259 19.0128078296824511994600470643490553 + 88 1 3 -0.6614125480999999417974777315976098 3.5019654760072134180859393381979316 5.8092967236924213381143999868072569 7.3942190059313750438718670920934528 + 89 1 3 -0.6614125480999999417974777315976098 7.3942189816897174736709530407097191 19.0128074720672763930906512541696429 16.7054786480276398208388854982331395 + 90 1 3 -0.6614125480999999417974777315976098 19.0128070348148447976655006641522050 7.3942189561113034201866867078933865 9.7015481798496168153178587090224028 + 91 1 3 -0.6614125480999999417974777315976098 19.0128070398263808726824208861216903 7.3942189510663363094522537721786648 16.7054786479772090501683123875409365 + 92 1 3 -0.6614125480999999417974777315976098 7.3942189868229606375393814232666045 19.0128074669634301585574576165527105 9.7015481797389462315095443045720458 + 93 1 3 -0.6614125480999999417974777315976098 19.0128070404677238514068449148908257 19.0128074623046927627001423388719559 9.7015481777709826616273858235217631 + 94 1 3 -0.6614125480999999417974777315976098 7.3942189879737281188454289804212749 7.3942189463278769068210749537684023 16.7054786460043480644799274159595370 + 95 1 3 -0.6614125480999999417974777315976098 7.3942189934460786915337848768103868 7.3942189517942757959190203109756112 9.7015481815281976452070011873729527 + 96 1 3 -0.6614125480999999417974777315976098 19.0128070456709394875360885635018349 19.0128074675123386327868502121418715 16.7054786499265404131620016414672136 + 97 1 3 -0.6614125480999999417974777315976098 5.8092958879240672587229710188694298 16.7054783005063463008355029160156846 20.5977324335008376010591746307909489 + 98 1 3 -0.6614125480999999417974777315976098 20.5977301425774470544638461433351040 9.7015481188062686612738616531714797 5.8092944042885532596187658782582730 + 99 1 3 -0.6614125480999999417974777315976098 20.5977301400728656233241053996607661 16.7054783015092667142198479268699884 5.8092943997067569839032330492045730 + 100 1 3 -0.6614125480999999417974777315976098 5.8092958876427820413823610579129308 9.7015481210446257165358474594540894 20.5977324270892765412099834065884352 + 101 1 3 -0.6614125480999999417974777315976098 5.8092958752098597940971558273304254 9.7015481211045688780814089113846421 5.8092944116117468666971035418100655 + 102 1 3 -0.6614125480999999417974777315976098 20.5977301274566038102875609183683991 16.7054783014434455878927110461518168 20.5977324388839591051691968459635973 + 103 1 3 -0.6614125480999999417974777315976098 20.5977301301355062435050058411434293 9.7015481186871035390595352509990335 20.5977324344775460929213295457884669 + 104 1 3 -0.6614125480999999417974777315976098 5.8092958754208696703358327795285732 16.7054783005406477514043217524886131 5.8092944051289316931274697708431631 + 105 1 3 -0.6614125480999999417974777315976098 5.8092949017410688838936039246618748 20.5977298991426849283925548661500216 9.7015485084123813663836699561215937 + 106 1 3 -0.6614125480999999417974777315976098 20.5977311254701582754478295100852847 5.8092965212149643150496558519080281 16.7054783203509877864689769921824336 + 107 1 3 -0.6614125480999999417974777315976098 20.5977311213527762845387769630178809 5.8092965253640072020857587631326169 9.7015485077352501264158490812405944 + 108 1 3 -0.6614125480999999417974777315976098 5.8092948975013145584966878232080489 20.5977299033513006065732042770832777 16.7054783197338672096066147787496448 + 109 1 3 -0.6614125480999999417974777315976098 5.8092948913148871881162449426483363 5.8092965273910293078074573713820428 16.7054783188796989179536467418074608 + 110 1 3 -0.6614125480999999417974777315976098 20.5977311144287682509457226842641830 20.5977299054634386266116052865982056 9.7015485067859241752330490271560848 + 111 1 3 -0.6614125480999999417974777315976098 20.5977311187387677193783019902184606 20.5977299097761239465853577712550759 16.7054783214311690642261964967474341 + 112 1 3 -0.6614125480999999417974777315976098 5.8092948958969143902208998042624444 5.8092965319653133704491665412206203 9.7015485095041622543021730962209404 + 113 1 3 -0.6614125480999999417974777315976098 7.3942187611208280983987606305163354 16.7054782673867414644064410822466016 7.3942180412462903404957614839076996 + 114 1 3 -0.6614125480999999417974777315976098 19.0128072665808041108448378508910537 9.7015481487976540364570610108785331 19.0128087749036005504876811755821109 + 115 1 3 -0.6614125480999999417974777315976098 19.0128072637524319077328982530161738 16.7054782725891541872442758176475763 19.0128087808776520262199483113363385 + 116 1 3 -0.6614125480999999417974777315976098 7.3942187607602267718220900860615075 9.7015481525794484696234576404094696 7.3942180492968132554665317002218217 + 117 1 3 -0.6614125480999999417974777315976098 19.0128072681088831075157941086217761 9.7015481513881791642006646725349128 7.3942180528998298072451689222361892 + 118 1 3 -0.6614125480999999417974777315976098 7.3942187627146598316585368593223393 16.7054782700166448705658694962039590 19.0128087864319539335156150627881289 + 119 1 3 -0.6614125480999999417974777315976098 7.3942187622570276772648867336101830 9.7015481499845694912664839648641646 19.0128087784795489767475373810157180 + 120 1 3 -0.6614125480999999417974777315976098 19.0128072654169599786655453499406576 16.7054782699551758184952632291242480 7.3942180467881630789861446828581393 + 121 1 3 -0.6614125480999999417974777315976098 16.7054779462080809082635823870077729 7.3942181373565327717756190395448357 19.0128089291277326822182658361271024 + 122 1 3 -0.6614125480999999417974777315976098 9.7015480683850832122061547124758363 19.0128083000016694370515324408188462 7.3942179110456356383451748115476221 + 123 1 3 -0.6614125480999999417974777315976098 16.7054779464473988070949417306110263 19.0128082993325300265041732927784324 7.3942179117071376026615325827151537 + 124 1 3 -0.6614125480999999417974777315976098 9.7015480679456729262710723560303450 7.3942181384685099487796833273023367 19.0128089280246150849507102975621819 + 125 1 3 -0.6614125480999999417974777315976098 9.7015480657450723356305388733744621 19.0128082984084976203575934050604701 19.0128089166837881407445820514112711 + 126 1 3 -0.6614125480999999417974777315976098 16.7054779434552109762535110348835588 7.3942181355549658761106002202723175 7.3942178983506563483274476311635226 + 127 1 3 -0.6614125480999999417974777315976098 9.7015480704414240875621544546447694 7.3942181371201511907997883099596947 7.3942178999110481640855141449719667 + 128 1 3 -0.6614125480999999417974777315976098 16.7054779489779363643719989340752363 19.0128082978158339244600938400253654 19.0128089161001945228690601652488112 + 129 1 3 -0.6614125480999999417974777315976098 16.7054782227603837441165524069219828 5.8092939274234378643768650363199413 5.8092955786821107722062151879072189 + 130 1 3 -0.6614125480999999417974777315976098 9.7015477910991965160292238579131663 20.5977324837256219325354322791099548 20.5977312604598665757293929345905781 + 131 1 3 -0.6614125480999999417974777315976098 16.7054782222166835481402813456952572 20.5977324824371059719396725995466113 20.5977312591786052564657438779249787 + 132 1 3 -0.6614125480999999417974777315976098 9.7015477929291300540626252768561244 5.8092939282851405735641492356080562 5.8092955795372036575940910552162677 + 133 1 3 -0.6614125480999999417974777315976098 9.7015477927467053120835771551355720 5.8092939405732488822309278475586325 20.5977312593216446146016096463426948 + 134 1 3 -0.6614125480999999417974777315976098 16.7054782221912674344821425620466471 20.5977324948995530462525493931025267 5.8092955795570091481749841477721930 + 135 1 3 -0.6614125480999999417974777315976098 9.7015477911436871494288425310514867 20.5977324962684740228269220096990466 5.8092955781939252801748807542026043 + 136 1 3 -0.6614125480999999417974777315976098 16.7054782225499032222160167293623090 5.8092939401670777854747029778081924 20.5977312597170971741888934047892690 + 137 1 4 0.8023877470999999372835986832797062 6.6017571969835175949015138030517846 6.6017559437386283960336186282802373 2.9116401488184662227354237984400243 + 138 1 4 0.8023877470999999372835986832797062 19.8052688195818298311223770724609494 19.8052704863584274619370262371376157 23.4953866980199528313733026152476668 + 139 1 4 0.8023877470999999372835986832797062 19.8052688183239204988694837084040046 19.8052704856782035847118095261976123 2.9116401520553725212892004492459819 + 140 1 4 0.8023877470999999372835986832797062 6.6017571955836666930395040253642946 6.6017559430250853935717714193742722 23.4953867012559136639993084827437997 + 141 1 4 0.8023877470999999372835986832797062 19.8052688258025213485780113842338324 6.6017559439238882035283495497424155 23.4953866997633120661248540272936225 + 142 1 4 0.8023877470999999372835986832797062 6.6017572028717568244360336393583566 19.8052704869948463795026327716186643 2.9116401505074249733695523900678381 + 143 1 4 0.8023877470999999372835986832797062 6.6017572017339434253813124087173492 19.8052704878974275004566152347251773 23.4953866995706448506098240613937378 + 144 1 4 0.8023877470999999372835986832797062 19.8052688255519200311027816496789455 6.6017559456832000108761349110864103 2.9116401503125768357449487666599452 + 145 1 4 0.8023877470999999372835986832797062 2.9116401612969129431007786479312927 6.6017578088235699951269452867563814 6.6017567029365027408971400291193277 + 146 1 4 0.8023877470999999372835986832797062 23.4953858693740684771000815089792013 19.8052686062430218782992596970871091 19.8052701278573941578997619217261672 + 147 1 4 0.8023877470999999372835986832797062 2.9116401653847452379864080285187811 19.8052686083734208466466952813789248 19.8052701257283985114554525353014469 + 148 1 4 0.8023877470999999372835986832797062 23.4953858742513190804857003968209028 6.6017578073222944468056994082871825 6.6017567044375065066219576692674309 + 149 1 4 0.8023877470999999372835986832797062 23.4953858717166710334822710137814283 19.8052686176479504354119853815063834 6.6017567090324922318700373580213636 + 150 1 4 0.8023877470999999372835986832797062 2.9116401635720716711830391432158649 6.6017578204409961273313456331379712 19.8052701342124066741234855726361275 + 151 1 4 0.8023877470999999372835986832797062 23.4953858719134451860099943587556481 6.6017578179544464944683568319305778 19.8052701317253472268475888995453715 + 152 1 4 0.8023877470999999372835986832797062 2.9116401631070232269848929718136787 19.8052686195107732203268824378028512 6.6017567108934578357093414524570107 + 153 1 4 0.8023877470999999372835986832797062 6.6017556091303815080095773737411946 2.9116401529908246814670746971387416 6.6017583561851527207409162656404078 + 154 1 4 0.8023877470999999372835986832797062 19.8052704016008718213015526998788118 23.4953862854585153741027170326560736 19.8052684797876885625100840115919709 + 155 1 4 0.8023877470999999372835986832797062 19.8052704036894162697990395827218890 2.9116401567873730904523199569666758 19.8052684772410430014133453369140625 + 156 1 4 0.8023877470999999372835986832797062 6.6017556064066349463814731279853731 23.4953862892921669924817251740023494 6.6017583573405733687877727788873017 + 157 1 4 0.8023877470999999372835986832797062 6.6017556174052440809418840217404068 23.4953862869670899726770585402846336 19.8052684791960373900110425893217325 + 158 1 4 0.8023877470999999372835986832797062 19.8052704150917406877852044999599457 2.9116401544995409444993583747418597 6.6017583596334485918077916721813381 + 159 1 4 0.8023877470999999372835986832797062 19.8052704127173413439777505118399858 23.4953862877626882266213215189054608 6.6017583568007758287876640679314733 + 160 1 4 0.8023877470999999372835986832797062 6.6017556204024048227552157186437398 2.9116401552464652446872150903800502 19.8052684806248606719236704520881176 + 161 1 4 0.8023877470999999372835986832797062 6.6017569871427506100758364482317120 19.8052686155319364047500130254775286 16.1151530027094409547316899988800287 + 162 1 4 0.8023877470999999372835986832797062 19.8052690279446146348618640331551433 6.6017578126316776021553778264205903 10.2918738240178040399541714577935636 + 163 1 4 0.8023877470999999372835986832797062 19.8052690337015597776826325571164489 6.6017578068506432842355025059077889 16.1151530029257905596296041039749980 + 164 1 4 0.8023877470999999372835986832797062 6.6017569927509436311652279982808977 19.8052686099487900150961650069802999 10.2918738242353455802913231309503317 + 165 1 4 0.8023877470999999372835986832797062 19.8052690286696808641409006668254733 19.8052686115258715915388165740296245 10.2918738227387400741008605109527707 + 166 1 4 0.8023877470999999372835986832797062 6.6017569886354863228916656225919724 6.6017578086619037591731284919660538 16.1151530013772017468909325543791056 + 167 1 4 0.8023877470999999372835986832797062 6.6017569935325024488292910973541439 6.6017578135548173889901590882800519 10.2918738255669737213793268892914057 + 168 1 4 0.8023877470999999372835986832797062 19.8052690340270665103616920532658696 19.8052686168877833949863997986540198 16.1151530042017192556613736087456346 + 169 1 4 0.8023877470999999372835986832797062 6.6017573607993993434206458914559335 16.1151528052077495090088632423430681 19.8052706494171779638691077707335353 + 170 1 4 0.8023877470999999372835986832797062 19.8052686681010499114563572220504284 10.2918736136625295074509267578832805 6.6017561876353383354398829396814108 + 171 1 4 0.8023877470999999372835986832797062 19.8052686692267663204347627470269799 16.1151528056969297608702618163079023 6.6017561797337460660628494224511087 + 172 1 4 0.8023877470999999372835986832797062 6.6017573584041384648912753618787974 10.2918736141181028642677119933068752 19.8052706453486599968982773134484887 + 173 1 4 0.8023877470999999372835986832797062 6.6017573516964329627398910815827549 10.2918736152040821707487339153885841 6.6017561870587400107979192398488522 + 174 1 4 0.8023877470999999372835986832797062 19.8052686626823195581437175860628486 16.1151528067376936803611897630617023 19.8052706529029336479652556590735912 + 175 1 4 0.8023877470999999372835986832797062 19.8052686612313095793069805949926376 10.2918736126082421833416447043418884 19.8052706446759039238258992554619908 + 176 1 4 0.8023877470999999372835986832797062 6.6017573542667236097258864901959896 16.1151528041889378073392435908317566 6.6017561831653850390466686803847551 + 177 1 4 0.8023877470999999372835986832797062 16.1151526067618817705806577578186989 6.6017559759992918699822439521085471 19.8052701376361355301014555152505636 + 178 1 4 0.8023877470999999372835986832797062 10.2918734059065446473368865554220974 19.8052704597004378683777758851647377 6.6017567011958844247487832035403699 + 179 1 4 0.8023877470999999372835986832797062 16.1151526067073120884742820635437965 19.8052704618172157324806903488934040 6.6017566990795506498557188024278730 + 180 1 4 0.8023877470999999372835986832797062 10.2918734065027450697016320191323757 6.6017559744341305361103877658024430 19.8052701392002177271933760493993759 + 181 1 4 0.8023877470999999372835986832797062 10.2918734048056492724754207301884890 19.8052704530323850917739036958664656 19.8052701313082444301016948884353042 + 182 1 4 0.8023877470999999372835986832797062 16.1151526057216081255774042801931500 6.6017559699027463793186143448110670 6.6017566953932256268444689339958131 + 183 1 4 0.8023877470999999372835986832797062 10.2918734076050899517440484487451613 6.6017559673846424317389391944743693 6.6017566928753890209691235213540494 + 184 1 4 0.8023877470999999372835986832797062 16.1151526077415532256509322905912995 19.8052704549817875090411689598113298 19.8052701332566059022610716056078672 + 185 1 5 -0.1059498145999999973998484392723185 7.4580708971362907888646986975800246 5.7454397499282556793787080096080899 0.6950441809839732476561380281054880 + 186 1 5 -0.1059498145999999973998484392723185 18.9489551150479549335159390466287732 20.6615866757037238699012959841638803 25.7119826716055186466292070690542459 + 187 1 5 -0.1059498145999999973998484392723185 18.9489551141377923215713963145390153 20.6615866760237167909508571028709412 0.6950441813029240023524835123680532 + 188 1 5 -0.1059498145999999973998484392723185 7.4580708960956281217136165651027113 5.7454397501657616942338790977373719 25.7119826719217101640424516517668962 + 189 1 5 -0.1059498145999999973998484392723185 18.9489552061429051832419645506888628 5.7454396712088087184611140401102602 25.7119826717282329298086551716551185 + 190 1 5 -0.1059498145999999973998484392723185 7.4580709874804735903808250441215932 20.6615865971249483834526472492143512 0.6950441811858094620646397743257694 + 191 1 5 -0.1059498145999999973998484392723185 7.4580709864703598199753287190105766 20.6615865968299345922787324525415897 25.7119826717274975180771434679627419 + 192 1 5 -0.1059498145999999973998484392723185 18.9489552053725631708402943331748247 5.7454396711167001754461125528905541 0.6950441811556488103107653842016589 + 193 1 5 -0.1059498145999999973998484392723185 0.6950442013570656829557492528692819 7.4580714055883348123643372673541307 5.7454404384383632731214675004594028 + 194 1 5 -0.1059498145999999973998484392723185 25.7119818361682952456703787902370095 18.9489550041569643212824303191155195 20.6615863853566459340527217136695981 + 195 1 5 -0.1059498145999999973998484392723185 0.6950442013678133079679355432745069 18.9489550038616485494458174798637629 20.6615863856523027664024994010105729 + 196 1 5 -0.1059498145999999973998484392723185 25.7119818370475208268999267602339387 7.4580714047603722249846214253921062 5.7454404392666607037654102896340191 + 197 1 5 -0.1059498145999999973998484392723185 25.7119818364503593954850657610222697 18.9489551023581306310461513930931687 5.7454403654191388284289132570847869 + 198 1 5 -0.1059498145999999973998484392723185 0.6950442015629493264228244697733317 7.4580715037794869104459394293371588 20.6615863123799385903112124651670456 + 199 1 5 -0.1059498145999999973998484392723185 25.7119818367882828624715330079197884 7.4580715028148123479923015111126006 20.6615863114149362900207052007317543 + 200 1 5 -0.1059498145999999973998484392723185 0.6950442011640962647334163193590939 18.9489551020285560412048653233796358 5.7454403650892471588917942426633090 + 201 1 5 -0.1059498145999999973998484392723185 5.7454408619173022998438682407140732 0.6950441931181976507048148050671443 7.4580736949951553782511837198399007 + 202 1 5 -0.1059498145999999973998484392723185 20.6615851428490451269226468866690993 25.7119822508355113654943124856799841 18.9489531389739340738742612302303314 + 203 1 5 -0.1059498145999999973998484392723185 20.6615851440200444244510435964912176 0.6950441935380002878019922718522139 18.9489531381121594222349813207983971 + 204 1 5 -0.1059498145999999973998484392723185 5.7454408611923186711578637186903507 25.7119822511307773993394221179187298 7.4580736946819214949755405541509390 + 205 1 5 -0.1059498145999999973998484392723185 5.7454407944009684428010586998425424 25.7119822508835156327222648542374372 18.9489532224887504696653195424005389 + 206 1 5 -0.1059498145999999973998484392723185 20.6615850773308729060318000847473741 0.6950441933570803421105210873065516 7.4580737791033016037545166909694672 + 207 1 5 -0.1059498145999999973998484392723185 20.6615850761211738984002295183017850 25.7119822510679902904939808649942279 7.4580737782028174720494462235365063 + 208 1 5 -0.1059498145999999973998484392723185 5.7454407951667132437023610691539943 0.6950441933110265146922301937593147 18.9489532222162786467833939241245389 + 209 1 5 -0.1059498145999999973998484392723185 5.7454437639006101790073444135487080 7.4580719652853399992409322294406593 25.7119826765996606354747200384736061 + 210 1 5 -0.1059498145999999973998484392723185 20.6615822465654090933639963623136282 18.9489544609573954403458628803491592 0.6950441766027186663023940127459355 + 211 1 5 -0.1059498145999999973998484392723185 20.6615822463033431688472774112597108 18.9489544618096878991764242528006434 25.7119826763005541181428270647302270 + 212 1 5 -0.1059498145999999973998484392723185 5.7454437637728386079061237978748977 7.4580719662163321714842822984792292 0.6950441762923532662554748640104663 + 213 1 5 -0.1059498145999999973998484392723185 5.7454436914262831948008170002140105 18.9489545447594629479226568946614861 0.6950441764820020074111539543082472 + 214 1 5 -0.1059498145999999973998484392723185 20.6615821745183616542362869950011373 7.4580720490207008666061483381781727 25.7119826764425347676024102838709950 + 215 1 5 -0.1059498145999999973998484392723185 20.6615821749186423517130606342107058 7.4580720500992896404568455182015896 0.6950441764837008706834353688464034 + 216 1 5 -0.1059498145999999973998484392723185 5.7454436915829996124216449970845133 18.9489545456313450699781242292374372 25.7119826764082297643199126468971372 + 217 1 5 -0.1059498145999999973998484392723185 7.4580701279839782813496640301309526 0.6950441826629887298594212552416138 20.6615832383025335161619295831769705 + 218 1 5 -0.1059498145999999973998484392723185 18.9489560729071442324311647098511457 25.7119822631230405818314466159790754 5.7454434339951694354908795503433794 + 219 1 5 -0.1059498145999999973998484392723185 18.9489560731493433820560312597081065 0.6950441825116903116210664848040324 5.7454434338960593819933819759171456 + 220 1 5 -0.1059498145999999973998484392723185 7.4580701262156781083945134014356881 25.7119822631029819604009389877319336 20.6615832375403520870804641162976623 + 221 1 5 -0.1059498145999999973998484392723185 18.9489559747363998098990123253315687 25.7119822628628753591328859329223633 20.6615833167373317280635092174634337 + 222 1 5 -0.1059498145999999973998484392723185 7.4580700298500319789241075341124088 0.6950441824498451159897172146884259 5.7454435124676823676281856023706496 + 223 1 5 -0.1059498145999999973998484392723185 7.4580700281226466330508628743700683 25.7119822633614525386747118318453431 5.7454435131889471932709057000465691 + 224 1 5 -0.1059498145999999973998484392723185 18.9489559749332450167003116803243756 0.6950441827270334993471578854951076 20.6615833168818028298119315877556801 + 225 1 5 -0.1059498145999999973998484392723185 0.6950441927525650154251479762024246 5.7454444429621238654704029613640159 18.9489540248361194585413613822311163 + 226 1 5 -0.1059498145999999973998484392723185 25.7119818452198529712404706515371799 20.6615818308195287045236909762024879 7.4580729829961649457459316181484610 + 227 1 5 -0.1059498145999999973998484392723185 0.6950441924748893551821993241901509 20.6615818317253463476390606956556439 7.4580729839017072535511942987795919 + 228 1 5 -0.1059498145999999973998484392723185 25.7119818454976538646405970212072134 5.7454444431846685148457254399545491 18.9489540250583878844281571218743920 + 229 1 5 -0.1059498145999999973998484392723185 25.7119818457634998765115597052499652 5.7454445100197322204849115223623812 7.4580728920647079149830460664816201 + 230 1 5 -0.1059498145999999973998484392723185 0.6950441926439864248621347542211879 20.6615818984543473391113366233184934 18.9489539332869867394038010388612747 + 231 1 5 -0.1059498145999999973998484392723185 25.7119818449816754935000062687322497 20.6615818975234937227014597738161683 18.9489539342175454805783374467864633 + 232 1 5 -0.1059498145999999973998484392723185 0.6950441925743315874086647454532795 5.7454445096577941853865922894328833 7.4580728924263581802733824588358402 + 233 1 5 -0.1059498145999999973998484392723185 7.4580729302309380912561209697742015 18.9489547151559953874766506487503648 13.8985570305491759057758827111683786 + 234 1 5 -0.1059498145999999973998484392723185 18.9489532010598011879665136802941561 7.4580718211063397049542800232302397 12.5084697972563194667827701778151095 + 235 1 5 -0.1059498145999999973998484392723185 18.9489532033959946488721470814198256 7.4580718187641892313877178821712732 13.8985570305666872314986903802491724 + 236 1 5 -0.1059498145999999973998484392723185 7.4580729325472310264899533649440855 18.9489547128455839697380724828690290 12.5084697972855973802097651059739292 + 237 1 5 -0.1059498145999999973998484392723185 18.9489531691363914944759017089381814 18.9489546339782002348783862544223666 12.5084697971020268880693038227036595 + 238 1 5 -0.1059498145999999973998484392723185 7.4580728989384033056353473511990160 7.4580717399356037944357922242488712 13.8985570304538210706368772662244737 + 239 1 5 -0.1059498145999999973998484392723185 7.4580729011568465125492366496473551 7.4580717421530522415196173824369907 12.5084697974000942366501476499252021 + 240 1 5 -0.1059498145999999973998484392723185 18.9489531714208681023592362180352211 18.9489546362637106824422517092898488 13.8985570307178303295359000912867486 + 241 1 5 -0.1059498145999999973998484392723185 5.7454428646167983174564142245799303 13.8985568174475098146558593725785613 20.6615858710343189841296407394111156 + 242 1 5 -0.1059498145999999973998484392723185 20.6615830426312960810264485189691186 12.5084695981625877436727023450657725 5.7454408383688111428000411251559854 + 243 1 5 -0.1059498145999999973998484392723185 20.6615830429396645229189743986353278 13.8985568176175284804685361450538039 5.7454408362793127906797963078133762 + 244 1 5 -0.1059498145999999973998484392723185 5.7454428644178960894350893795490265 12.5084695981115139318262663437053561 20.6615858695269452027787338010966778 + 245 1 5 -0.1059498145999999973998484392723185 5.7454428953876659491584177885670215 12.5084695982135318814698621281422675 5.7454409218753008659064107632730156 + 246 1 5 -0.1059498145999999973998484392723185 20.6615830738697674462400755146518350 13.8985568176802480877540801884606481 20.6615859551577614183770492672920227 + 247 1 5 -0.1059498145999999973998484392723185 20.6615830735143930496633402071893215 12.5084695980550915095363961881957948 20.6615859530212446770747192203998566 + 248 1 5 -0.1059498145999999973998484392723185 5.7454428956132863604011618008371443 13.8985568173849394213448249502107501 5.7454409203946585904532184940762818 + 249 1 5 -0.1059498145999999973998484392723185 5.7454411757135526173101425229106098 20.6615822998266018828417145414277911 12.5084698058763432726436803932301700 + 250 1 5 -0.1059498145999999973998484392723185 20.6615847275626762780120770912617445 5.7454440012910703572401871497277170 13.8985570156510167549868128844536841 + 251 1 5 -0.1059498145999999973998484392723185 20.6615847262415677221270016161724925 5.7454440026181039513630821602419019 12.5084698058594128156073566060513258 + 252 1 5 -0.1059498145999999973998484392723185 5.7454411744114439741792921267915517 20.6615823011227952576973621034994721 13.8985570156290538790244681877084076 + 253 1 5 -0.1059498145999999973998484392723185 5.7454412111429027376630074286367744 5.7454440851618375774023661506362259 13.8985570155367987865702161798253655 + 254 1 5 -0.1059498145999999973998484392723185 20.6615847621490651420117501402273774 20.6615823836508631927699752850458026 12.5084698056968157686696940800175071 + 255 1 5 -0.1059498145999999973998484392723185 20.6615847634246385666756395949050784 20.6615823849274420354049652814865112 13.8985570158108124871887412155047059 + 256 1 5 -0.1059498145999999973998484392723185 5.7454412123454199345928827824536711 5.7454440863633191582948711584322155 12.5084698059560448513138908310793340 + 257 1 5 -0.1059498145999999973998484392723185 7.4580719115339624281091346347238868 13.8985568228728926243320529465563595 7.4580712427149853382957189751323313 + 258 1 5 -0.1059498145999999973998484392723185 18.9489541459341523932380368933081627 12.5084695956380489434422997874207795 18.9489555442818513597558194305747747 + 259 1 5 -0.1059498145999999973998484392723185 18.9489541462100135049695381894707680 13.8985568230439433534684212645515800 18.9489555463615104713426262605935335 + 260 1 5 -0.1059498145999999973998484392723185 7.4580719112295534856116319133434445 12.5084695960381839796582426060922444 7.4580712441395098366569982317741960 + 261 1 5 -0.1059498145999999973998484392723185 18.9489541905043772374028776539489627 12.5084695958021132611293069203384221 7.4580713233278546070437187154311687 + 262 1 5 -0.1059498145999999973998484392723185 7.4580719560075552365674411703366786 13.8985568229809732798685217858292162 18.9489556249339727855840465053915977 + 263 1 5 -0.1059498145999999973998484392723185 7.4580719557308325917688307526987046 12.5084695958879006383313026162795722 18.9489556234817513313828385435044765 + 264 1 5 -0.1059498145999999973998484392723185 18.9489541907326355385521310381591320 13.8985568229323952493814431363716722 7.4580713212957965296823203971143812 + 265 1 5 -0.1059498145999999973998484392723185 13.8985566159234270600109084625728428 7.4580718594840762492026442487258464 18.9489565485389412913264095550402999 + 266 1 5 -0.1059498145999999973998484392723185 12.5084693947678626813058144762180746 18.9489546986920451843161572469398379 7.4580704108624340520350415317807347 + 267 1 5 -0.1059498145999999973998484392723185 13.8985566155832493961952422978356481 18.9489546989794241937943297671154141 7.4580704105749866528185521019622684 + 268 1 5 -0.1059498145999999973998484392723185 12.5084693951526784161387695348821580 7.4580718592240327069475824828259647 18.9489565487989040093452786095440388 + 269 1 5 -0.1059498145999999973998484392723185 12.5084693945937761583309111301787198 18.9489546541589071182443149155005813 18.9489564567750505830190377309918404 + 270 1 5 -0.1059498145999999973998484392723185 13.8985566158405600134528867783956230 7.4580718150593412474336219020187855 7.4580703191665032036894444900099188 + 271 1 5 -0.1059498145999999973998484392723185 12.5084693953141758981928433058783412 7.4580718146667299706109588441904634 7.4580703187739700865677150432020426 + 272 1 5 -0.1059498145999999973998484392723185 13.8985566156998032738556503318250179 18.9489546544273181893913715612143278 18.9489564570435646828627795912325382 + 273 1 5 -0.1059498145999999973998484392723185 13.8985566194613703316917963093146682 5.7454398949302953880646782636176795 5.7454429050832018788241839502006769 + 274 1 5 -0.1059498145999999973998484392723185 12.5084693910432065422355663031339645 20.6615864785719303142741409828886390 20.6615839648224124402986490167677402 + 275 1 5 -0.1059498145999999973998484392723185 13.8985566193143501578788345796056092 20.6615864788959946451996074756607413 20.6615839651465549309250491205602884 + 276 1 5 -0.1059498145999999973998484392723185 12.5084693915699141086861345684155822 5.7454398945650346774982608621940017 5.7454429047180015643903061572927982 + 277 1 5 -0.1059498145999999973998484392723185 12.5084693914548790161234137485735118 5.7454398636567773905881040263921022 20.6615838866345065127916313940659165 + 278 1 5 -0.1059498145999999973998484392723185 13.8985566192695042531113358563743532 20.6615864479913255991050391457974911 5.7454428262548882244686865305993706 + 279 1 5 -0.1059498145999999973998484392723185 12.5084693911513404884772171499207616 20.6615864476536295057940151309594512 5.7454428265926145158459803496953100 + 280 1 5 -0.1059498145999999973998484392723185 13.8985566195294705238438837113790214 5.7454398638876575944323121802881360 20.6615838864036760469389264471828938 + 281 1 6 -0.1322994435000000024160726752597839 6.6017573175543917685104133852291852 6.6017558544204808512745330517645925 1.4058275047511632482866161808487959 + 282 1 6 -0.1322994435000000024160726752597839 19.8052686946648925925273942993953824 19.8052705736806338165933993877843022 25.0011993450795593219027068698778749 + 283 1 6 -0.1322994435000000024160726752597839 19.8052686940967994644324789987877011 19.8052705729717573035486566368490458 1.4058275063938752147407740267226472 + 284 1 6 -0.1322994435000000024160726752597839 6.6017573168733187927159633545670658 6.6017558536237483934883130132220685 25.0011993467347437558601086493581533 + 285 1 6 -0.1322994435000000024160726752597839 19.8052687039226142928782792296260595 6.6017558559186682032304815948009491 25.0011993459617194446309440536424518 + 286 1 6 -0.1322994435000000024160726752597839 6.6017573260327626627486097277142107 19.8052705751936350964115263195708394 1.4058275055949498444363143789814785 + 287 1 6 -0.1322994435000000024160726752597839 6.6017573252913637205097074911464006 19.8052705758471532249131996650248766 25.0011993458844692383991059614345431 + 288 1 6 -0.1322994435000000024160726752597839 19.8052687031588767752054991433396935 6.6017558565150649130259807861875743 1.4058275055127387176412412372883409 + 289 1 6 -0.1322994435000000024160726752597839 1.4058275221485234673934883176116273 6.6017579463754652024931601772550493 6.6017566583158551196675034589134157 + 290 1 6 -0.1322994435000000024160726752597839 25.0011985121456312697318935533985496 19.8052684635848095240362454205751419 19.8052701681534024658049020217731595 + 291 1 6 -0.1322994435000000024160726752597839 1.4058275241037234692953461490105838 19.8052684632012230281361553352326155 19.8052701685373335749318357557058334 + 292 1 6 -0.1322994435000000024160726752597839 25.0011985148417004154453024966642261 6.6017579466357920736641062831040472 6.6017566580564679412646000855602324 + 293 1 6 -0.1322994435000000024160726752597839 25.0011985133830023642076412215828896 19.8052684784341188617418083595111966 6.6017566665979003914799250196665525 + 294 1 6 -0.1322994435000000024160726752597839 1.4058275233275152604761615293682553 6.6017579611291949959195335395634174 19.8052701763863190365100308554247022 + 295 1 6 -0.1322994435000000024160726752597839 25.0011985136042547139823000179603696 6.6017579615792678637831158994231373 19.8052701768356378408952878089621663 + 296 1 6 -0.1322994435000000024160726752597839 1.4058275229200425382458661260898225 19.8052684781102321665002818917855620 6.6017566662737454663556491141207516 + 297 1 6 -0.1322994435000000024160726752597839 6.6017554472336872350979319890029728 1.4058275131037145655454878578893840 6.6017585859901428690932334575336426 + 298 1 6 -0.1322994435000000024160726752597839 19.8052705590306814542600477579981089 25.0011989284290727653115027351304889 19.8052682465632727826232439838349819 + 299 1 6 -0.1322994435000000024160726752597839 19.8052705586119621727902995189651847 1.4058275150752024273970164358615875 19.8052682469281648991454858332872391 + 300 1 6 -0.1322994435000000024160726752597839 6.6017554461989043090852646855637431 25.0011989304518777998964651487767696 6.6017585857008196370543373632244766 + 301 1 6 -0.1322994435000000024160726752597839 6.6017554610600033271339270868338645 25.0011989292222516212405025726184249 19.8052682491153184685117594199255109 + 302 1 6 -0.1322994435000000024160726752597839 19.8052705734770455592297366820275784 1.4058275138837339479636057149036787 6.6017585878259819054392210091464221 + 303 1 6 -0.1322994435000000024160726752597839 19.8052705739498335901771497447043657 25.0011989296662200388254859717562795 6.6017585882449978385011490900069475 + 304 1 6 -0.1322994435000000024160726752597839 6.6017554620446778912423724250402302 1.4058275142965284132401393435429782 19.8052682487758815454981231596320868 + 305 1 6 -0.1322994435000000024160726752597839 6.6017570540865415651410330610815436 19.8052685071528102866977860685437918 14.6093403541877062679077425855211914 + 306 1 6 -0.1322994435000000024160726752597839 19.8052689611235734901129035279154778 6.6017579152870942138520149455871433 11.7976864712139608570851123658940196 + 307 1 6 -0.1322994435000000024160726752597839 19.8052689645113488836614124011248350 6.6017579118871658749867492588236928 14.6093403543113797837804668233729899 + 308 1 6 -0.1322994435000000024160726752597839 6.6017570575187463077782012987881899 19.8052685037325524319840042153373361 11.7976864713313140953232505125924945 + 309 1 6 -0.1322994435000000024160726752597839 19.8052689624988467187449714401736856 19.8052685058938955364737921627238393 11.7976864705712731762332623475231230 + 310 1 6 -0.1322994435000000024160726752597839 6.6017570561619747238069066952448338 6.6017579140072291110641344857867807 14.6093403535029207063189460313878953 + 311 1 6 -0.1322994435000000024160726752597839 6.6017570597341110882894099631812423 6.6017579175772374000530362536665052 11.7976864720094543059758507297374308 + 312 1 6 -0.1322994435000000024160726752597839 19.8052689659718019754564011236652732 19.8052685093688829454094957327470183 14.6093403549617697478879563277587295 + 313 1 6 -0.1322994435000000024160726752597839 6.6017574053606518091896759869996458 14.6093401542632186362880020169541240 19.8052707352231784909690759377554059 + 314 1 6 -0.1322994435000000024160726752597839 19.8052686221762392904111038660630584 11.7976862640312685215349119971506298 6.6017560960608232534241324174217880 + 315 1 6 -0.1322994435000000024160726752597839 19.8052686217338376195584714878350496 14.6093401544842080852504295762628317 6.6017560928600182990066969068720937 + 316 1 6 -0.1322994435000000024160726752597839 6.6017574057480166160871704050805420 11.7976862641974857837112722336314619 19.8052707313446134662626718636602163 + 317 1 6 -0.1322994435000000024160726752597839 6.6017573986869475533012519008480012 11.7976862648172424741233044187538326 6.6017560986098740016814190312288702 + 318 1 6 -0.1322994435000000024160726752597839 19.8052686145630616465496132150292397 14.6093401550498427354796149302273989 19.8052707370506801964893384138122201 + 319 1 6 -0.1322994435000000024160726752597839 19.8052686150676784393453999655321240 11.7976862634185888367710504098795354 19.8052707339121276675086846807971597 + 320 1 6 -0.1322994435000000024160726752597839 6.6017573982674679911042403546161950 14.6093401536980831423306881333701313 6.6017560946991507009329325228463858 + 321 1 6 -0.1322994435000000024160726752597839 14.6093399536505863522961590206250548 6.6017558691514413027334740036167204 19.8052702109229663562928180908784270 + 322 1 6 -0.1322994435000000024160726752597839 11.7976860582093170393136460916139185 19.8052705662532773089878901373594999 6.6017566256458914963900497241411358 + 323 1 6 -0.1322994435000000024160726752597839 14.6093399534383561189088140963576734 19.8052705658612886452374368673190475 6.6017566260375746267641261511016637 + 324 1 6 -0.1322994435000000024160726752597839 11.7976860586379057593831021222285926 6.6017558694113231965161503467243165 19.8052702106633340406460774829611182 + 325 1 6 -0.1322994435000000024160726752597839 11.7976860575862900759602780453860760 19.8052705591102977678019669838249683 19.8052702042829906758925062604248524 + 326 1 6 -0.1322994435000000024160726752597839 14.6093399530987824164185440167784691 6.6017558619617942028412471699994057 6.6017566189127236953027022536844015 + 327 1 6 -0.1322994435000000024160726752597839 11.7976860592617303069573608809150755 6.6017558624057777194593654712662101 6.6017566193566379340040839451830834 + 328 1 6 -0.1322994435000000024160726752597839 14.6093399539863870728595429682172835 19.8052705587580994972540793241932988 19.8052702039311974147040018578991294 + 329 1 7 0.1527568014000000029550818680945667 8.1234662164874187340046773897483945 5.0800424375191806092288970830850303 1.2305547890469650251787925299140625 + 330 1 7 0.1527568014000000029550818680945667 18.2835597943903565010259626433253288 21.3269839897042778886770975077524781 25.1764720648117439338875556131824851 + 331 1 7 0.1527568014000000029550818680945667 18.2835597944790855251540051540359855 21.3269839884136942487202759366482496 1.2305547891325354648017764702672139 + 332 1 7 0.1527568014000000029550818680945667 8.1234662164589153121596609707921743 5.0800424361419915797455360007006675 25.1764720648963944427123351488262415 + 333 1 7 0.1527568014000000029550818680945667 18.2835599509758424119354458525776863 5.0800422920921723957121685089077801 25.1764720649007145425457565579563379 + 334 1 7 0.1527568014000000029550818680945667 8.1234663721610136377648814232088625 21.3269838443247117254486511228606105 1.2305547891069947841202747440547682 + 335 1 7 0.1527568014000000029550818680945667 8.1234663721306521466658523422665894 21.3269838456157394546153227565810084 25.1764720648352771092959301313385367 + 336 1 7 0.1527568014000000029550818680945667 18.2835599510212958307420194614678621 5.0800422934237152716718810552265495 1.2305547890707619895778179852641188 + 337 1 7 0.1527568014000000029550818680945667 1.2305548093251283958693420572672039 8.1234666201886813752253146958537400 5.0800430232485380699358756828587502 + 338 1 7 0.1527568014000000029550818680945667 25.1764712297716108935219381237402558 18.2835597877724005400068563176319003 21.3269838016725756801861280109733343 + 339 1 7 0.1527568014000000029550818680945667 1.2305548091296751866963177235447802 18.2835597883457232626369659556075931 21.3269838010998995514455600641667843 + 340 1 7 0.1527568014000000029550818680945667 25.1764712300543322953672031871974468 8.1234666209768970901450302335433662 5.0800430224609334217689138313289732 + 341 1 7 0.1527568014000000029550818680945667 25.1764712298965704917463881429284811 18.2835599523264420440682442858815193 5.0800428829041432976509895524941385 + 342 1 7 0.1527568014000000029550818680945667 1.2305548093595208847261801565764472 8.1234667846695103321508213412016630 21.3269836613121519519609137205407023 + 343 1 7 0.1527568014000000029550818680945667 25.1764712299123694094760139705613256 8.1234667855004651926265069050714374 21.3269836621424495604060211917385459 + 344 1 7 0.1527568014000000029550818680945667 1.2305548090829721008532260384527035 18.2835599529054704248665075283497572 5.0800428834825011037423792004119605 + 345 1 7 0.1527568014000000029550818680945667 5.0800447501318544141213351394981146 1.2305548158821781878913270702469163 8.1234702051540548239927375107072294 + 346 1 7 0.1527568014000000029550818680945667 21.3269812561375502468763443175703287 25.1764716303616218340266641462221742 18.2835566289172781750949070556089282 + 347 1 7 0.1527568014000000029550818680945667 21.3269812561999891897812631214037538 1.2305548156421328709342333240783773 18.2835566288200723761292465496808290 + 348 1 7 0.1527568014000000029550818680945667 5.0800447491239753006198043294716626 25.1764716303083702086951234377920628 8.1234702048374369809380368678830564 + 349 1 7 0.1527568014000000029550818680945667 5.0800446164042396546278723690193146 25.1764716304291695792016980703920126 18.2835567781084975536032288800925016 + 350 1 7 0.1527568014000000029550818680945667 21.3269811235125388293454307131469250 1.2305548157849168777744353064917959 8.1234703541073915999959353939630091 + 351 1 7 0.1527568014000000029550818680945667 21.3269811234640300767750886734575033 25.1764716302444888640366116305813193 8.1234703540241088859374940511770546 + 352 1 7 0.1527568014000000029550818680945667 5.0800446173962248153088694380130619 1.2305548157365484573944058865890838 18.2835567777759742114085383946076035 + 353 1 7 0.1527568014000000029550818680945667 5.0800484434481720796838999376632273 8.1234693038446419421916289138607681 25.1764721038813696907254779944196343 + 354 1 7 0.1527568014000000029550818680945667 21.3269775654580087120848475024104118 18.2835571230022146949067973764613271 1.2305547499882476536470221617491916 + 355 1 7 0.1527568014000000029550818680945667 21.3269775667131327168135612737387419 18.2835571229490980726950510870665312 25.1764721039650112288654781877994537 + 356 1 7 0.1527568014000000029550818680945667 5.0800484448162794848258272395469248 8.1234693038824037358835994382388890 1.2305547500776741198791341957985424 + 357 1 7 0.1527568014000000029550818680945667 5.0800483074245814663072451367042959 18.2835572720775658694947196636348963 1.2305547499989717419310863988357596 + 358 1 7 0.1527568014000000029550818680945667 21.3269774298730361294929025461897254 8.1234694529309372512670961441472173 25.1764721038875443070992332650348544 + 359 1 7 0.1527568014000000029550818680945667 21.3269774285756028575633536092936993 8.1234694529197408741083563654683530 1.2305547500393503312920984171796590 + 360 1 7 0.1527568014000000029550818680945667 5.0800483060541701263446157099679112 18.2835572720287125036975339753553271 25.1764721039599486118731874739751220 + 361 1 7 0.1527568014000000029550818680945667 8.1234663260082982105814153328537941 1.2305547460118095859371578626451083 21.3269797029151391143386717885732651 + 362 1 7 0.1527568014000000029550818680945667 18.2835600047053787875483976677060127 25.1764717001975633081656269496306777 5.0800468361130022287852625595405698 + 363 1 7 0.1527568014000000029550818680945667 18.2835600060640111053089640336111188 1.2305547460594801201239079091465101 5.0800468374513076952325718593783677 + 364 1 7 0.1527568014000000029550818680945667 8.1234663263394395471550524234771729 25.1764717000100652910532517125830054 21.3269797045156757064887642627581954 + 365 1 7 0.1527568014000000029550818680945667 18.2835598401287739989129477180540562 25.1764717000774496113990608137100935 21.3269798484736092802904749987646937 + 366 1 7 0.1527568014000000029550818680945667 8.1234661615275598478547181002795696 1.2305547459579990743350208504125476 5.0800469816567543901442149945069104 + 367 1 7 0.1527568014000000029550818680945667 8.1234661618438899211014359025284648 25.1764717001308504507051111431792378 5.0800469800710317258563009090721607 + 368 1 7 0.1527568014000000029550818680945667 18.2835598415031270747022063005715609 1.2305547461128862885004764393670484 21.3269798471195883848849916830658913 + 369 1 7 0.1527568014000000029550818680945667 1.2305547746802600883597733627539128 5.0800491445769422327316533483099192 18.2835566718044582046331925084814429 + 370 1 7 0.1527568014000000029550818680945667 25.1764712643219716881048952927812934 21.3269769983760397735750302672386169 8.1234704693002210973418186767958105 + 371 1 7 0.1527568014000000029550818680945667 1.2305547743122786652492095527122729 21.3269769975588978638825210509821773 8.1234704684825231879585771821439266 + 372 1 7 0.1527568014000000029550818680945667 25.1764712649626147822345956228673458 5.0800491440310393542745259765069932 18.2835566712580224191242450615391135 + 373 1 7 0.1527568014000000029550818680945667 25.1764712648394421989905822556465864 5.0800492767299694207849825033918023 8.1234703117067788014082907466217875 + 374 1 7 0.1527568014000000029550818680945667 1.2305547741593705346474507678067312 21.3269771302500146248348755761981010 18.2835565144543181759217986837029457 + 375 1 7 0.1527568014000000029550818680945667 25.1764712644278390030194714199751616 21.3269771310660516405732778366655111 18.2835565136377447004178975475952029 + 376 1 7 0.1527568014000000029550818680945667 1.2305547748244056727173756371485069 5.0800492773214962483052659081295133 8.1234703111147688048276904737576842 + 377 1 7 0.1527568014000000029550818680945667 8.1234700791120957319435547105967999 18.2835592280439982459938619285821915 14.4340676331327095738288335269317031 + 378 1 7 0.1527568014000000029550818680945667 18.2835561449390553434568573720753193 8.1234674003718154722264443989843130 11.9729591969889987979058787459507585 + 379 1 7 0.1527568014000000029550818680945667 18.2835561469672960299703845521435142 8.1234673983330001334479675278998911 14.4340676330866450882695062318816781 + 380 1 7 0.1527568014000000029550818680945667 8.1234700811642444051585698616690934 18.2835592260022181676504260394722223 11.9729591969345126045709548634476960 + 381 1 7 0.1527568014000000029550818680945667 18.2835560856033865206882182974368334 18.2835590819295070730277075199410319 11.9729591969257391781411570264026523 + 382 1 7 0.1527568014000000029550818680945667 8.1234700203008607388710515806451440 8.1234672542258863359165843576192856 14.4340676330501924695681736920960248 + 383 1 7 0.1527568014000000029550818680945667 8.1234700223832394527789801941253245 8.1234672563065881689681191346608102 11.9729591969975377452328757499344647 + 384 1 7 0.1527568014000000029550818680945667 18.2835560876409388697538815904408693 18.2835590839690240727577474899590015 14.4340676331463075854344424442388117 + 385 1 7 0.1527568014000000029550818680945667 5.0800467587774100763908791122958064 14.4340674105820863104554518940858543 21.3269824103176013352367590414360166 + 386 1 7 0.1527568014000000029550818680945667 21.3269790526968279209540924057364464 11.9729590021614349382161890389397740 5.0800442046448948119063970807474107 + 387 1 7 0.1527568014000000029550818680945667 21.3269790526054734414174163248389959 14.4340674106636779328027841984294355 5.0800442015968716447105180122889578 + 388 1 7 0.1527568014000000029550818680945667 5.0800467590507274451283592497929931 11.9729590023444210089564876398071647 21.3269824070374340863054385408759117 + 389 1 7 0.1527568014000000029550818680945667 5.0800468206247586522295023314654827 11.9729590022308638452841478283517063 5.0800443538371116147800421458669007 + 390 1 7 0.1527568014000000029550818680945667 21.3269791140840681009649415500462055 14.4340674104829957968831877224147320 21.3269825592633637256767542567104101 + 391 1 7 0.1527568014000000029550818680945667 21.3269791141909195175685454159975052 11.9729590022756013922844431363046169 21.3269825562308312782988650724291801 + 392 1 7 0.1527568014000000029550818680945667 5.0800468203397723954140019486658275 14.4340674107620561272824488696642220 5.0800443505452790304843802005052567 + 393 1 7 0.1527568014000000029550818680945667 5.0800440305369587434825007221661508 21.3269778095012050300738337682560086 11.9729592262242476863320916891098022 + 394 1 7 0.1527568014000000029550818680945667 21.3269817817583877683773607714101672 5.0800483969396159622533559740986675 14.4340675911214173510188629734329879 + 395 1 7 0.1527568014000000029550818680945667 21.3269817786478057541899033822119236 5.0800484000606571655112020380329341 11.9729592261769060002052356139756739 + 396 1 7 0.1527568014000000029550818680945667 5.0800440274041411825578506977763027 21.3269778126235358683970844140276313 14.4340675910804172588086657924577594 + 397 1 7 0.1527568014000000029550818680945667 5.0800440917554050557214395666960627 5.0800485460013824479119648458436131 14.4340675911393816477357177063822746 + 398 1 7 0.1527568014000000029550818680945667 21.3269818421154617738011438632383943 21.3269779585643668440297915367409587 11.9729592262467061658526290557347238 + 399 1 7 0.1527568014000000029550818680945667 21.3269818452339769976333627710118890 21.3269779616847436898297019070014358 14.4340675910554825378540044766850770 + 400 1 7 0.1527568014000000029550818680945667 5.0800440949178700122956797713413835 5.0800485491620497313647319970186800 11.9729592261832049615577489021234214 + 401 1 7 0.1527568014000000029550818680945667 8.1234679678826786641820945078507066 14.4340674098193613161811299505643547 8.1234678319500961407584327389486134 + 402 1 7 0.1527568014000000029550818680945667 18.2835581248168743684345827205106616 11.9729590092902942188857196015305817 18.2835589194050704975325061241164804 + 403 1 7 0.1527568014000000029550818680945667 18.2835581239965421218585106544196606 14.4340674100557286863022454781457782 18.2835589217760912106314208358526230 + 404 1 7 0.1527568014000000029550818680945667 8.1234679674536902638237734208814800 11.9729590093856668175931190489791334 8.1234678345799178345032487413845956 + 405 1 7 0.1527568014000000029550818680945667 18.2835581997841885026900854427367449 11.9729590094502089669958877493627369 8.1234679785396597395674689323641360 + 406 1 7 0.1527568014000000029550818680945667 8.1234680428147196806776264565996826 14.4340674099542010111463241628371179 18.2835590659791691336977237369865179 + 407 1 7 0.1527568014000000029550818680945667 8.1234680423760341483330194023437798 11.9729590092205189222340777632780373 18.2835590633590214793002814985811710 + 408 1 7 0.1527568014000000029550818680945667 18.2835581989807067770925641525536776 14.4340674099197290303209229023195803 8.1234679761517902818468428449705243 + 409 1 7 0.1527568014000000029550818680945667 14.4340671937266300517421768745407462 8.1234691122903122106890805298462510 18.2835611475922235058533260598778725 + 410 1 7 0.1527568014000000029550818680945667 11.9729588157896067457386379828676581 18.2835575448122682473695022054016590 8.1234659099391173242565855616703629 + 411 1 7 0.1527568014000000029550818680945667 14.4340671935036741757585332379676402 18.2835575443324422906243853503838181 8.1234659104187514344630471896380186 + 412 1 7 0.1527568014000000029550818680945667 11.9729588159131683511304800049401820 8.1234691120287649823694664519280195 18.2835611478535540186385333072394133 + 413 1 7 0.1527568014000000029550818680945667 11.9729588156179893587705009849742055 18.2835574698449541131139994831755757 18.2835609879965765856013604206964374 + 414 1 7 0.1527568014000000029550818680945667 14.4340671935872855158322636270895600 8.1234690373326721157809515716508031 8.1234657503173810511043484439142048 + 415 1 7 0.1527568014000000029550818680945667 11.9729588160773694482941209571436048 8.1234690371126259123002455453388393 8.1234657500975000488097066408954561 + 416 1 7 0.1527568014000000029550818680945667 14.4340671936249371754001913359388709 18.2835574693658848843824671348556876 18.2835609875176743344127316959202290 + 417 1 7 0.1527568014000000029550818680945667 14.4340672248044246117615330149419606 5.0800426926251791570621207938529551 5.0800474724727893161002612032461911 + 418 1 7 0.1527568014000000029550818680945667 11.9729587849237368857302499236539006 21.3269836429592629656326607801020145 21.3269794346884857816348812775686383 + 419 1 7 0.1527568014000000029550818680945667 14.4340672239817529032279708189889789 21.3269836432067130260747944703325629 21.3269794349360530816284153843298554 + 420 1 7 0.1527568014000000029550818680945667 11.9729587852454653074119050870649517 5.0800426931468978253292334557045251 5.0800474729946198948482560808770359 + 421 1 7 0.1527568014000000029550818680945667 11.9729587853397987373682553879916668 5.0800426315729367843232466839253902 21.3269792878931276902676472673192620 + 422 1 7 0.1527568014000000029550818680945667 14.4340672241701959421789069892838597 21.3269835817097721530899434583261609 5.0800473259318437158071901649236679 + 423 1 7 0.1527568014000000029550818680945667 11.9729587848212428724536948720924556 21.3269835814587374045459000626578927 5.0800473261830250137904840812552720 + 424 1 7 0.1527568014000000029550818680945667 14.4340672246009731338745041284710169 5.0800426310946580343852474470622838 21.3269792883715645359643531264737248 + +Bonds + + 1 2 229 232 + 2 1 145 49 + 3 1 145 88 + 4 3 289 145 + 5 4 289 193 + 6 4 289 232 + 7 7 49 9 + 8 7 17 88 + 9 3 183 327 + 10 2 270 271 + 11 2 273 276 + 12 4 326 270 + 13 4 273 326 + 14 4 271 327 + 15 4 276 327 + 16 5 414 270 + 17 5 271 415 + 18 3 326 182 + 19 5 339 195 + 20 5 216 360 + 21 6 5 37 + 22 6 37 15 + 23 6 19 37 + 24 6 27 37 + 25 7 91 27 + 26 7 15 103 + 27 7 106 19 + 28 7 114 27 + 29 7 121 27 + 30 7 5 136 + 31 1 163 91 + 32 1 106 163 + 33 1 103 175 + 34 1 114 175 + 35 1 177 121 + 36 1 177 136 + 37 7 7 47 + 38 7 11 72 + 39 2 190 191 + 40 2 213 216 + 41 1 47 143 + 42 1 143 72 + 43 3 143 287 + 44 4 191 287 + 45 4 287 216 + 46 7 50 10 + 47 7 18 87 + 48 1 146 50 + 49 1 146 87 + 50 3 290 146 + 51 4 290 194 + 52 4 290 231 + 53 2 230 231 + 54 5 422 278 + 55 5 279 423 + 56 1 153 57 + 57 1 153 78 + 58 3 297 153 + 59 4 297 201 + 60 4 297 222 + 61 7 57 17 + 62 7 1 78 + 63 3 324 180 + 64 2 265 268 + 65 2 277 280 + 66 4 321 265 + 67 4 321 280 + 68 4 268 324 + 69 4 324 277 + 70 5 409 265 + 71 5 268 412 + 72 3 321 177 + 73 5 398 254 + 74 5 255 399 + 75 5 366 222 + 76 5 329 185 + 77 7 42 2 + 78 7 10 67 + 79 2 210 211 + 80 1 138 42 + 81 1 138 67 + 82 3 282 138 + 83 4 282 186 + 84 4 282 211 + 85 7 5 45 + 86 7 70 15 + 87 1 45 141 + 88 1 141 70 + 89 3 141 285 + 90 4 189 285 + 91 4 285 214 + 92 3 181 325 + 93 2 269 272 + 94 2 274 275 + 95 4 269 325 + 96 4 274 325 + 97 4 272 328 + 98 4 275 328 + 99 5 269 413 + 100 5 272 416 + 101 3 184 328 + 102 3 175 319 + 103 2 246 247 + 104 2 258 259 + 105 4 318 246 + 106 4 259 318 + 107 4 247 319 + 108 4 258 319 + 109 5 402 258 + 110 5 403 259 + 111 3 318 174 + 112 3 167 311 + 113 3 310 166 + 114 2 238 239 + 115 2 253 256 + 116 4 310 238 + 117 4 253 310 + 118 4 239 311 + 119 4 311 256 + 120 5 382 238 + 121 5 239 383 + 122 5 245 389 + 123 5 248 392 + 124 5 354 210 + 125 5 197 341 + 126 6 4 36 + 127 6 36 14 + 128 6 36 24 + 129 6 36 30 + 130 7 94 30 + 131 7 100 14 + 132 7 109 24 + 133 7 30 119 + 134 7 124 30 + 135 7 4 133 + 136 1 166 94 + 137 1 109 166 + 138 1 100 172 + 139 1 172 119 + 140 1 124 180 + 141 1 180 133 + 142 5 191 335 + 143 5 364 220 + 144 5 369 225 + 145 5 208 352 + 146 5 390 246 + 147 5 247 391 + 148 5 394 250 + 149 5 395 251 + 150 5 350 206 + 151 5 229 373 + 152 7 15 55 + 153 7 19 84 + 154 1 55 151 + 155 1 84 151 + 156 3 151 295 + 157 4 199 295 + 158 4 228 295 + 159 2 198 199 + 160 2 225 228 + 161 2 194 195 + 162 1 147 51 + 163 1 147 86 + 164 3 291 147 + 165 4 291 195 + 166 4 291 230 + 167 7 51 11 + 168 7 21 86 + 169 5 417 273 + 170 5 276 420 + 171 6 7 39 + 172 6 11 39 + 173 6 21 39 + 174 6 25 39 + 175 7 89 25 + 176 7 97 11 + 177 7 108 21 + 178 7 25 118 + 179 7 25 125 + 180 7 130 7 + 181 1 161 89 + 182 1 161 108 + 183 1 169 97 + 184 1 169 118 + 185 1 125 181 + 186 1 130 181 + 187 2 218 219 + 188 1 158 62 + 189 1 75 158 + 190 3 302 158 + 191 4 302 206 + 192 4 219 302 + 193 7 62 22 + 194 7 75 8 + 195 5 371 227 + 196 5 348 204 + 197 5 393 249 + 198 5 396 252 + 199 5 342 198 + 200 5 353 209 + 201 5 363 219 + 202 5 192 336 + 203 5 347 203 + 204 5 372 228 + 205 3 316 172 + 206 2 241 244 + 207 2 262 263 + 208 4 313 241 + 209 4 313 262 + 210 4 316 244 + 211 4 316 263 + 212 5 406 262 + 213 5 263 407 + 214 3 313 169 + 215 7 23 63 + 216 7 74 3 + 217 1 63 159 + 218 1 74 159 + 219 3 159 303 + 220 4 207 303 + 221 4 218 303 + 222 2 206 207 + 223 5 207 351 + 224 5 370 226 + 225 7 20 60 + 226 7 6 79 + 227 1 60 156 + 228 1 156 79 + 229 3 300 156 + 230 4 300 204 + 231 4 300 223 + 232 2 201 204 + 233 2 222 223 + 234 5 346 202 + 235 5 231 375 + 236 3 173 317 + 237 2 245 248 + 238 2 257 260 + 239 4 245 317 + 240 4 260 317 + 241 4 248 320 + 242 4 257 320 + 243 5 401 257 + 244 5 260 404 + 245 3 176 320 + 246 7 21 61 + 247 7 76 7 + 248 1 61 157 + 249 1 76 157 + 250 3 157 301 + 251 4 205 301 + 252 4 220 301 + 253 2 217 220 + 254 5 224 368 + 255 5 189 333 + 256 5 355 211 + 257 5 338 194 + 258 5 253 397 + 259 5 256 400 + 260 3 165 309 + 261 3 168 312 + 262 2 237 240 + 263 2 254 255 + 264 4 237 309 + 265 4 309 254 + 266 4 240 312 + 267 4 255 312 + 268 5 237 381 + 269 5 240 384 + 270 5 361 217 + 271 5 332 188 + 272 2 202 203 + 273 2 221 224 + 274 1 155 59 + 275 1 155 80 + 276 3 299 155 + 277 4 299 203 + 278 4 299 224 + 279 7 59 19 + 280 7 5 80 + 281 5 232 376 + 282 5 345 201 + 283 2 197 200 + 284 2 226 227 + 285 1 56 152 + 286 1 83 152 + 287 3 152 296 + 288 4 200 296 + 289 4 227 296 + 290 7 16 56 + 291 7 83 20 + 292 3 306 162 + 293 3 307 163 + 294 2 234 235 + 295 2 250 251 + 296 4 306 234 + 297 4 306 251 + 298 4 307 235 + 299 4 250 307 + 300 5 378 234 + 301 5 379 235 + 302 7 4 44 + 303 7 65 14 + 304 2 185 188 + 305 1 44 140 + 306 1 65 140 + 307 3 284 140 + 308 4 284 188 + 309 4 209 284 + 310 5 200 344 + 311 5 213 357 + 312 5 331 187 + 313 5 362 218 + 314 3 322 178 + 315 2 266 267 + 316 2 278 279 + 317 4 322 266 + 318 4 322 279 + 319 4 323 267 + 320 4 323 278 + 321 5 410 266 + 322 5 411 267 + 323 3 323 179 + 324 6 33 1 + 325 6 33 9 + 326 6 33 17 + 327 6 33 31 + 328 7 31 95 + 329 7 9 101 + 330 7 17 112 + 331 7 116 31 + 332 7 31 127 + 333 7 1 132 + 334 1 95 167 + 335 1 167 112 + 336 1 101 173 + 337 1 116 173 + 338 1 127 183 + 339 1 132 183 + 340 5 418 274 + 341 5 419 275 + 342 5 277 421 + 343 5 280 424 + 344 5 374 230 + 345 5 205 349 + 346 2 189 192 + 347 2 214 215 + 348 7 8 48 + 349 7 12 71 + 350 1 48 144 + 351 1 71 144 + 352 3 144 288 + 353 4 192 288 + 354 4 215 288 + 355 2 209 212 + 356 7 41 1 + 357 7 9 68 + 358 1 137 41 + 359 1 137 68 + 360 3 281 137 + 361 4 281 185 + 362 4 281 212 + 363 5 358 214 + 364 5 199 343 + 365 5 385 241 + 366 5 388 244 + 367 3 314 170 + 368 2 242 243 + 369 2 261 264 + 370 4 314 242 + 371 4 314 261 + 372 4 315 243 + 373 4 315 264 + 374 5 261 405 + 375 5 264 408 + 376 3 315 171 + 377 6 8 40 + 378 6 12 40 + 379 6 22 40 + 380 6 26 40 + 381 7 90 26 + 382 7 98 12 + 383 7 107 22 + 384 7 26 117 + 385 7 26 126 + 386 7 129 8 + 387 1 162 90 + 388 1 162 107 + 389 1 170 98 + 390 1 170 117 + 391 1 182 126 + 392 1 129 182 + 393 6 35 3 + 394 6 35 13 + 395 6 35 23 + 396 6 35 29 + 397 7 29 93 + 398 7 99 13 + 399 7 110 23 + 400 7 29 120 + 401 7 123 29 + 402 7 3 134 + 403 1 93 165 + 404 1 165 110 + 405 1 171 99 + 406 1 171 120 + 407 1 179 123 + 408 1 179 134 + 409 3 308 164 + 410 3 305 161 + 411 2 233 236 + 412 2 249 252 + 413 4 305 233 + 414 4 305 252 + 415 4 308 236 + 416 4 249 308 + 417 5 377 233 + 418 5 380 236 + 419 7 12 52 + 420 7 85 22 + 421 1 52 148 + 422 1 148 85 + 423 3 292 148 + 424 4 292 196 + 425 4 292 229 + 426 2 193 196 + 427 2 205 208 + 428 1 64 160 + 429 1 73 160 + 430 3 160 304 + 431 4 208 304 + 432 4 217 304 + 433 7 24 64 + 434 7 73 4 + 435 7 46 6 + 436 7 69 16 + 437 1 142 46 + 438 1 69 142 + 439 3 286 142 + 440 4 286 190 + 441 4 213 286 + 442 2 186 187 + 443 7 43 3 + 444 7 66 13 + 445 1 139 43 + 446 1 66 139 + 447 3 283 139 + 448 4 283 187 + 449 4 210 283 + 450 5 330 186 + 451 5 221 365 + 452 7 13 53 + 453 7 82 23 + 454 1 53 149 + 455 1 82 149 + 456 3 149 293 + 457 4 197 293 + 458 4 226 293 + 459 6 38 6 + 460 6 38 16 + 461 6 20 38 + 462 6 28 38 + 463 7 28 92 + 464 7 16 104 + 465 7 105 20 + 466 7 113 28 + 467 7 122 28 + 468 7 6 135 + 469 1 92 164 + 470 1 105 164 + 471 1 104 176 + 472 1 113 176 + 473 1 178 122 + 474 1 178 135 + 475 5 215 359 + 476 5 340 196 + 477 5 334 190 + 478 5 223 367 + 479 5 337 193 + 480 5 356 212 + 481 5 386 242 + 482 5 387 243 + 483 1 150 54 + 484 1 81 150 + 485 3 294 150 + 486 4 294 198 + 487 4 225 294 + 488 7 54 14 + 489 7 81 24 + 490 7 58 18 + 491 7 2 77 + 492 1 154 58 + 493 1 154 77 + 494 3 298 154 + 495 4 298 202 + 496 4 298 221 + 497 6 34 2 + 498 6 34 10 + 499 6 34 18 + 500 6 34 32 + 501 7 32 96 + 502 7 10 102 + 503 7 18 111 + 504 7 115 32 + 505 7 32 128 + 506 7 2 131 + 507 1 96 168 + 508 1 111 168 + 509 1 174 102 + 510 1 115 174 + 511 1 128 184 + 512 1 131 184 + +Angles + + 1 13 41 1 33 + 2 13 132 1 33 + 3 15 132 1 41 + 4 15 132 1 78 + 5 13 78 1 33 + 6 15 78 1 41 + 7 13 42 2 34 + 8 15 131 2 42 + 9 15 131 2 77 + 10 13 131 2 34 + 11 15 77 2 42 + 12 13 77 2 34 + 13 13 74 3 35 + 14 15 74 3 43 + 15 13 43 3 35 + 16 15 134 3 74 + 17 13 134 3 35 + 18 15 134 3 43 + 19 15 73 4 44 + 20 13 73 4 36 + 21 13 44 4 36 + 22 15 133 4 73 + 23 15 133 4 44 + 24 13 133 4 36 + 25 13 45 5 37 + 26 15 80 5 45 + 27 13 80 5 37 + 28 15 136 5 45 + 29 15 136 5 80 + 30 13 136 5 37 + 31 15 135 6 46 + 32 15 135 6 79 + 33 13 135 6 38 + 34 13 46 6 38 + 35 15 79 6 46 + 36 13 79 6 38 + 37 15 130 7 76 + 38 13 130 7 39 + 39 15 130 7 47 + 40 13 76 7 39 + 41 15 76 7 47 + 42 13 47 7 39 + 43 15 129 8 75 + 44 13 129 8 40 + 45 15 129 8 48 + 46 13 75 8 40 + 47 15 75 8 48 + 48 13 48 8 40 + 49 13 49 9 33 + 50 15 68 9 49 + 51 13 68 9 33 + 52 15 101 9 49 + 53 13 101 9 33 + 54 15 101 9 68 + 55 13 50 10 34 + 56 15 67 10 50 + 57 13 67 10 34 + 58 15 102 10 50 + 59 15 102 10 67 + 60 13 102 10 34 + 61 15 97 11 51 + 62 13 97 11 39 + 63 15 97 11 72 + 64 13 51 11 39 + 65 15 72 11 51 + 66 13 72 11 39 + 67 15 98 12 52 + 68 15 98 12 71 + 69 13 98 12 40 + 70 13 52 12 40 + 71 15 71 12 52 + 72 13 71 12 40 + 73 13 66 13 35 + 74 15 66 13 53 + 75 13 53 13 35 + 76 15 99 13 66 + 77 13 99 13 35 + 78 15 99 13 53 + 79 15 100 14 65 + 80 13 100 14 36 + 81 15 100 14 54 + 82 13 65 14 36 + 83 15 65 14 54 + 84 13 54 14 36 + 85 13 55 15 37 + 86 15 70 15 55 + 87 13 70 15 37 + 88 15 103 15 55 + 89 13 103 15 37 + 90 15 103 15 70 + 91 15 104 16 69 + 92 13 104 16 38 + 93 15 104 16 56 + 94 13 69 16 38 + 95 15 69 16 56 + 96 13 56 16 38 + 97 13 57 17 33 + 98 15 112 17 57 + 99 13 112 17 33 + 100 15 112 17 88 + 101 15 88 17 57 + 102 13 88 17 33 + 103 13 58 18 34 + 104 15 111 18 58 + 105 15 111 18 87 + 106 13 111 18 34 + 107 15 87 18 58 + 108 13 87 18 34 + 109 15 106 19 59 + 110 15 106 19 84 + 111 13 106 19 37 + 112 13 59 19 37 + 113 15 84 19 59 + 114 13 84 19 37 + 115 15 105 20 83 + 116 15 105 20 60 + 117 13 105 20 38 + 118 15 83 20 60 + 119 13 83 20 38 + 120 13 60 20 38 + 121 15 108 21 61 + 122 15 108 21 86 + 123 13 108 21 39 + 124 13 61 21 39 + 125 15 86 21 61 + 126 13 86 21 39 + 127 15 107 22 85 + 128 15 107 22 62 + 129 13 107 22 40 + 130 15 85 22 62 + 131 13 85 22 40 + 132 13 62 22 40 + 133 13 82 23 35 + 134 15 82 23 63 + 135 15 110 23 82 + 136 13 110 23 35 + 137 15 110 23 63 + 138 13 63 23 35 + 139 13 81 24 36 + 140 15 81 24 64 + 141 15 109 24 81 + 142 13 109 24 36 + 143 15 109 24 64 + 144 13 64 24 36 + 145 13 89 25 39 + 146 15 125 25 89 + 147 15 125 25 118 + 148 13 125 25 39 + 149 15 118 25 89 + 150 13 118 25 39 + 151 13 90 26 40 + 152 15 117 26 90 + 153 13 117 26 40 + 154 15 126 26 90 + 155 15 126 26 117 + 156 13 126 26 40 + 157 15 121 27 114 + 158 15 121 27 91 + 159 13 121 27 37 + 160 15 114 27 91 + 161 13 114 27 37 + 162 13 91 27 37 + 163 15 113 28 92 + 164 13 113 28 38 + 165 15 122 28 113 + 166 15 122 28 92 + 167 13 122 28 38 + 168 13 92 28 38 + 169 13 93 29 35 + 170 13 123 29 35 + 171 15 123 29 93 + 172 15 123 29 120 + 173 13 120 29 35 + 174 15 120 29 93 + 175 13 124 30 36 + 176 15 124 30 94 + 177 15 124 30 119 + 178 13 94 30 36 + 179 13 119 30 36 + 180 15 119 30 94 + 181 13 116 31 33 + 182 15 116 31 95 + 183 13 127 31 33 + 184 15 127 31 116 + 185 15 127 31 95 + 186 13 95 31 33 + 187 13 115 32 34 + 188 15 115 32 96 + 189 13 128 32 34 + 190 15 128 32 115 + 191 15 128 32 96 + 192 13 96 32 34 + 193 16 9 33 1 + 194 16 31 33 1 + 195 16 31 33 9 + 196 16 31 33 17 + 197 16 17 33 1 + 198 16 17 33 9 + 199 16 32 34 2 + 200 16 32 34 18 + 201 16 32 34 10 + 202 16 18 34 2 + 203 16 18 34 10 + 204 16 10 34 2 + 205 16 29 35 3 + 206 16 29 35 13 + 207 16 29 35 23 + 208 16 13 35 3 + 209 16 23 35 3 + 210 16 23 35 13 + 211 16 30 36 4 + 212 16 30 36 14 + 213 16 30 36 24 + 214 16 14 36 4 + 215 16 24 36 4 + 216 16 24 36 14 + 217 16 19 37 5 + 218 16 19 37 15 + 219 16 27 37 19 + 220 16 27 37 5 + 221 16 27 37 15 + 222 16 15 37 5 + 223 16 28 38 20 + 224 16 28 38 6 + 225 16 28 38 16 + 226 16 20 38 6 + 227 16 20 38 16 + 228 16 16 38 6 + 229 16 25 39 11 + 230 16 25 39 21 + 231 16 25 39 7 + 232 16 11 39 7 + 233 16 21 39 11 + 234 16 21 39 7 + 235 16 26 40 12 + 236 16 26 40 22 + 237 16 26 40 8 + 238 16 12 40 8 + 239 16 22 40 12 + 240 16 22 40 8 + 241 17 137 41 1 + 242 17 138 42 2 + 243 17 139 43 3 + 244 17 140 44 4 + 245 17 141 45 5 + 246 17 142 46 6 + 247 17 143 47 7 + 248 17 144 48 8 + 249 17 145 49 9 + 250 17 146 50 10 + 251 17 147 51 11 + 252 17 148 52 12 + 253 17 149 53 13 + 254 17 150 54 14 + 255 17 151 55 15 + 256 17 152 56 16 + 257 17 153 57 17 + 258 17 154 58 18 + 259 17 155 59 19 + 260 17 156 60 20 + 261 17 157 61 21 + 262 17 158 62 22 + 263 17 159 63 23 + 264 17 160 64 24 + 265 17 140 65 14 + 266 17 139 66 13 + 267 17 138 67 10 + 268 17 137 68 9 + 269 17 142 69 16 + 270 17 141 70 15 + 271 17 144 71 12 + 272 17 143 72 11 + 273 17 160 73 4 + 274 17 159 74 3 + 275 17 158 75 8 + 276 17 157 76 7 + 277 17 154 77 2 + 278 17 153 78 1 + 279 17 156 79 6 + 280 17 155 80 5 + 281 17 150 81 24 + 282 17 149 82 23 + 283 17 152 83 20 + 284 17 151 84 19 + 285 17 148 85 22 + 286 17 147 86 21 + 287 17 146 87 18 + 288 17 145 88 17 + 289 17 161 89 25 + 290 17 162 90 26 + 291 17 163 91 27 + 292 17 164 92 28 + 293 17 165 93 29 + 294 17 166 94 30 + 295 17 167 95 31 + 296 17 168 96 32 + 297 17 169 97 11 + 298 17 170 98 12 + 299 17 171 99 13 + 300 17 172 100 14 + 301 17 173 101 9 + 302 17 174 102 10 + 303 17 175 103 15 + 304 17 176 104 16 + 305 17 164 105 20 + 306 17 163 106 19 + 307 17 162 107 22 + 308 17 161 108 21 + 309 17 166 109 24 + 310 17 165 110 23 + 311 17 168 111 18 + 312 17 167 112 17 + 313 17 176 113 28 + 314 17 175 114 27 + 315 17 174 115 32 + 316 17 173 116 31 + 317 17 170 117 26 + 318 17 169 118 25 + 319 17 172 119 30 + 320 17 171 120 29 + 321 17 177 121 27 + 322 17 178 122 28 + 323 17 179 123 29 + 324 17 180 124 30 + 325 17 181 125 25 + 326 17 182 126 26 + 327 17 183 127 31 + 328 17 184 128 32 + 329 17 182 129 8 + 330 17 181 130 7 + 331 17 184 131 2 + 332 17 183 132 1 + 333 17 180 133 4 + 334 17 179 134 3 + 335 17 178 135 6 + 336 17 177 136 5 + 337 3 281 137 41 + 338 3 281 137 68 + 339 1 68 137 41 + 340 1 67 138 42 + 341 3 282 138 42 + 342 3 282 138 67 + 343 1 66 139 43 + 344 3 283 139 66 + 345 3 283 139 43 + 346 1 65 140 44 + 347 3 284 140 65 + 348 3 284 140 44 + 349 3 285 141 45 + 350 3 285 141 70 + 351 1 70 141 45 + 352 1 69 142 46 + 353 3 286 142 69 + 354 3 286 142 46 + 355 3 287 143 47 + 356 3 287 143 72 + 357 1 72 143 47 + 358 3 288 144 71 + 359 3 288 144 48 + 360 1 71 144 48 + 361 3 289 145 49 + 362 3 289 145 88 + 363 1 88 145 49 + 364 1 87 146 50 + 365 3 290 146 50 + 366 3 290 146 87 + 367 3 291 147 51 + 368 3 291 147 86 + 369 1 86 147 51 + 370 3 292 148 52 + 371 3 292 148 85 + 372 1 85 148 52 + 373 1 82 149 53 + 374 3 293 149 82 + 375 3 293 149 53 + 376 1 81 150 54 + 377 3 294 150 81 + 378 3 294 150 54 + 379 1 84 151 55 + 380 3 295 151 84 + 381 3 295 151 55 + 382 1 83 152 56 + 383 3 296 152 83 + 384 3 296 152 56 + 385 3 297 153 57 + 386 3 297 153 78 + 387 1 78 153 57 + 388 1 77 154 58 + 389 3 298 154 58 + 390 3 298 154 77 + 391 3 299 155 59 + 392 3 299 155 80 + 393 1 80 155 59 + 394 3 300 156 60 + 395 3 300 156 79 + 396 1 79 156 60 + 397 3 301 157 76 + 398 3 301 157 61 + 399 1 76 157 61 + 400 1 75 158 62 + 401 3 302 158 75 + 402 3 302 158 62 + 403 1 74 159 63 + 404 3 303 159 74 + 405 3 303 159 63 + 406 1 73 160 64 + 407 3 304 160 73 + 408 3 304 160 64 + 409 3 305 161 89 + 410 3 305 161 108 + 411 1 108 161 89 + 412 3 306 162 107 + 413 3 306 162 90 + 414 1 107 162 90 + 415 1 106 163 91 + 416 3 307 163 106 + 417 3 307 163 91 + 418 1 105 164 92 + 419 3 308 164 105 + 420 3 308 164 92 + 421 3 309 165 93 + 422 3 309 165 110 + 423 1 110 165 93 + 424 1 109 166 94 + 425 3 310 166 109 + 426 3 310 166 94 + 427 3 311 167 95 + 428 3 311 167 112 + 429 1 112 167 95 + 430 1 111 168 96 + 431 3 312 168 96 + 432 3 312 168 111 + 433 3 313 169 97 + 434 3 313 169 118 + 435 1 118 169 97 + 436 3 314 170 117 + 437 3 314 170 98 + 438 1 117 170 98 + 439 3 315 171 99 + 440 3 315 171 120 + 441 1 120 171 99 + 442 3 316 172 100 + 443 3 316 172 119 + 444 1 119 172 100 + 445 1 116 173 101 + 446 3 317 173 101 + 447 3 317 173 116 + 448 1 115 174 102 + 449 3 318 174 115 + 450 3 318 174 102 + 451 1 114 175 103 + 452 3 319 175 114 + 453 3 319 175 103 + 454 1 113 176 104 + 455 3 320 176 113 + 456 3 320 176 104 + 457 3 321 177 121 + 458 3 321 177 136 + 459 1 136 177 121 + 460 3 322 178 135 + 461 3 322 178 122 + 462 1 135 178 122 + 463 3 323 179 123 + 464 3 323 179 134 + 465 1 134 179 123 + 466 3 324 180 124 + 467 3 324 180 133 + 468 1 133 180 124 + 469 3 325 181 125 + 470 3 325 181 130 + 471 1 130 181 125 + 472 1 129 182 126 + 473 3 326 182 129 + 474 3 326 182 126 + 475 1 132 183 127 + 476 3 327 183 132 + 477 3 327 183 127 + 478 1 131 184 128 + 479 3 328 184 131 + 480 3 328 184 128 + 481 6 329 185 281 + 482 9 329 185 188 + 483 4 281 185 188 + 484 4 282 186 187 + 485 6 330 186 282 + 486 9 330 186 187 + 487 9 331 187 186 + 488 6 331 187 283 + 489 4 283 187 186 + 490 4 284 188 185 + 491 9 332 188 185 + 492 6 332 188 284 + 493 6 333 189 285 + 494 9 333 189 192 + 495 4 285 189 192 + 496 4 286 190 191 + 497 6 334 190 286 + 498 9 334 190 191 + 499 9 335 191 190 + 500 6 335 191 287 + 501 4 287 191 190 + 502 4 288 192 189 + 503 6 336 192 288 + 504 9 336 192 189 + 505 4 289 193 196 + 506 6 337 193 289 + 507 9 337 193 196 + 508 4 290 194 195 + 509 6 338 194 290 + 510 9 338 194 195 + 511 9 339 195 194 + 512 6 339 195 291 + 513 4 291 195 194 + 514 9 340 196 193 + 515 6 340 196 292 + 516 4 292 196 193 + 517 4 293 197 200 + 518 6 341 197 293 + 519 9 341 197 200 + 520 9 342 198 199 + 521 6 342 198 294 + 522 4 294 198 199 + 523 9 343 199 198 + 524 6 343 199 295 + 525 4 295 199 198 + 526 9 344 200 197 + 527 6 344 200 296 + 528 4 296 200 197 + 529 4 297 201 204 + 530 6 345 201 297 + 531 9 345 201 204 + 532 9 346 202 203 + 533 6 346 202 298 + 534 4 298 202 203 + 535 9 347 203 202 + 536 6 347 203 299 + 537 4 299 203 202 + 538 4 300 204 201 + 539 9 348 204 201 + 540 6 348 204 300 + 541 6 349 205 301 + 542 9 349 205 208 + 543 4 301 205 208 + 544 9 350 206 207 + 545 6 350 206 302 + 546 4 302 206 207 + 547 9 351 207 206 + 548 6 351 207 303 + 549 4 303 207 206 + 550 4 304 208 205 + 551 6 352 208 304 + 552 9 352 208 205 + 553 6 353 209 284 + 554 9 353 209 212 + 555 4 284 209 212 + 556 9 354 210 211 + 557 6 354 210 283 + 558 4 283 210 211 + 559 9 355 211 210 + 560 6 355 211 282 + 561 4 282 211 210 + 562 4 281 212 209 + 563 9 356 212 209 + 564 6 356 212 281 + 565 6 357 213 286 + 566 9 357 213 216 + 567 4 286 213 216 + 568 4 285 214 215 + 569 6 358 214 285 + 570 9 358 214 215 + 571 9 359 215 214 + 572 6 359 215 288 + 573 4 288 215 214 + 574 4 287 216 213 + 575 9 360 216 213 + 576 6 360 216 287 + 577 9 361 217 220 + 578 6 361 217 304 + 579 4 304 217 220 + 580 9 362 218 219 + 581 6 362 218 303 + 582 4 303 218 219 + 583 9 363 219 218 + 584 6 363 219 302 + 585 4 302 219 218 + 586 9 364 220 217 + 587 6 364 220 301 + 588 4 301 220 217 + 589 4 298 221 224 + 590 6 365 221 298 + 591 9 365 221 224 + 592 4 297 222 223 + 593 6 366 222 297 + 594 9 366 222 223 + 595 4 300 223 222 + 596 6 367 223 300 + 597 9 367 223 222 + 598 4 299 224 221 + 599 6 368 224 299 + 600 9 368 224 221 + 601 9 369 225 228 + 602 6 369 225 294 + 603 4 294 225 228 + 604 9 370 226 227 + 605 6 370 226 293 + 606 4 293 226 227 + 607 9 371 227 226 + 608 6 371 227 296 + 609 4 296 227 226 + 610 9 372 228 225 + 611 6 372 228 295 + 612 4 295 228 225 + 613 4 292 229 232 + 614 6 373 229 292 + 615 9 373 229 232 + 616 4 291 230 231 + 617 6 374 230 291 + 618 9 374 230 231 + 619 4 290 231 230 + 620 6 375 231 290 + 621 9 375 231 230 + 622 4 289 232 229 + 623 6 376 232 289 + 624 9 376 232 229 + 625 4 305 233 236 + 626 6 377 233 305 + 627 9 377 233 236 + 628 4 306 234 235 + 629 6 378 234 306 + 630 9 378 234 235 + 631 4 307 235 234 + 632 9 379 235 234 + 633 6 379 235 307 + 634 9 380 236 233 + 635 6 380 236 308 + 636 4 308 236 233 + 637 6 381 237 309 + 638 9 381 237 240 + 639 4 309 237 240 + 640 4 310 238 239 + 641 6 382 238 310 + 642 9 382 238 239 + 643 9 383 239 238 + 644 6 383 239 311 + 645 4 311 239 238 + 646 9 384 240 237 + 647 6 384 240 312 + 648 4 312 240 237 + 649 4 313 241 244 + 650 6 385 241 313 + 651 9 385 241 244 + 652 4 314 242 243 + 653 6 386 242 314 + 654 9 386 242 243 + 655 4 315 243 242 + 656 9 387 243 242 + 657 6 387 243 315 + 658 4 316 244 241 + 659 9 388 244 241 + 660 6 388 244 316 + 661 4 317 245 248 + 662 6 389 245 317 + 663 9 389 245 248 + 664 4 318 246 247 + 665 6 390 246 318 + 666 9 390 246 247 + 667 4 319 247 246 + 668 9 391 247 246 + 669 6 391 247 319 + 670 4 320 248 245 + 671 6 392 248 320 + 672 9 392 248 245 + 673 6 393 249 308 + 674 9 393 249 252 + 675 4 308 249 252 + 676 9 394 250 251 + 677 6 394 250 307 + 678 4 307 250 251 + 679 9 395 251 250 + 680 6 395 251 306 + 681 4 306 251 250 + 682 4 305 252 249 + 683 9 396 252 249 + 684 6 396 252 305 + 685 6 397 253 310 + 686 9 397 253 256 + 687 4 310 253 256 + 688 4 309 254 255 + 689 6 398 254 309 + 690 9 398 254 255 + 691 9 399 255 254 + 692 6 399 255 312 + 693 4 312 255 254 + 694 4 311 256 253 + 695 9 400 256 253 + 696 6 400 256 311 + 697 9 401 257 260 + 698 6 401 257 320 + 699 4 320 257 260 + 700 9 402 258 259 + 701 6 402 258 319 + 702 4 319 258 259 + 703 9 403 259 258 + 704 6 403 259 318 + 705 4 318 259 258 + 706 9 404 260 257 + 707 6 404 260 317 + 708 4 317 260 257 + 709 4 314 261 264 + 710 6 405 261 314 + 711 9 405 261 264 + 712 4 313 262 263 + 713 6 406 262 313 + 714 9 406 262 263 + 715 4 316 263 262 + 716 6 407 263 316 + 717 9 407 263 262 + 718 4 315 264 261 + 719 6 408 264 315 + 720 9 408 264 261 + 721 4 321 265 268 + 722 6 409 265 321 + 723 9 409 265 268 + 724 4 322 266 267 + 725 6 410 266 322 + 726 9 410 266 267 + 727 4 323 267 266 + 728 9 411 267 266 + 729 6 411 267 323 + 730 4 324 268 265 + 731 9 412 268 265 + 732 6 412 268 324 + 733 6 413 269 325 + 734 9 413 269 272 + 735 4 325 269 272 + 736 4 326 270 271 + 737 6 414 270 326 + 738 9 414 270 271 + 739 4 327 271 270 + 740 9 415 271 270 + 741 6 415 271 327 + 742 9 416 272 269 + 743 6 416 272 328 + 744 4 328 272 269 + 745 9 417 273 276 + 746 6 417 273 326 + 747 4 326 273 276 + 748 9 418 274 275 + 749 6 418 274 325 + 750 4 325 274 275 + 751 9 419 275 274 + 752 6 419 275 328 + 753 4 328 275 274 + 754 9 420 276 273 + 755 6 420 276 327 + 756 4 327 276 273 + 757 4 324 277 280 + 758 6 421 277 324 + 759 9 421 277 280 + 760 4 323 278 279 + 761 6 422 278 323 + 762 9 422 278 279 + 763 4 322 279 278 + 764 6 423 279 322 + 765 9 423 279 278 + 766 4 321 280 277 + 767 6 424 280 321 + 768 9 424 280 277 + 769 11 185 281 137 + 770 11 212 281 137 + 771 12 212 281 185 + 772 11 211 282 138 + 773 12 211 282 186 + 774 11 186 282 138 + 775 11 210 283 139 + 776 12 210 283 187 + 777 11 187 283 139 + 778 11 209 284 140 + 779 12 209 284 188 + 780 11 188 284 140 + 781 11 189 285 141 + 782 12 214 285 189 + 783 11 214 285 141 + 784 11 213 286 142 + 785 12 213 286 190 + 786 11 190 286 142 + 787 11 191 287 143 + 788 12 216 287 191 + 789 11 216 287 143 + 790 11 192 288 144 + 791 12 215 288 192 + 792 11 215 288 144 + 793 11 193 289 145 + 794 11 232 289 145 + 795 12 232 289 193 + 796 11 231 290 146 + 797 12 231 290 194 + 798 11 194 290 146 + 799 11 195 291 147 + 800 11 230 291 147 + 801 12 230 291 195 + 802 11 229 292 148 + 803 12 229 292 196 + 804 11 196 292 148 + 805 11 197 293 149 + 806 12 226 293 197 + 807 11 226 293 149 + 808 11 225 294 150 + 809 12 225 294 198 + 810 11 198 294 150 + 811 12 228 295 199 + 812 11 228 295 151 + 813 11 199 295 151 + 814 12 227 296 200 + 815 11 227 296 152 + 816 11 200 296 152 + 817 11 201 297 153 + 818 11 222 297 153 + 819 12 222 297 201 + 820 11 221 298 154 + 821 12 221 298 202 + 822 11 202 298 154 + 823 11 203 299 155 + 824 11 224 299 155 + 825 12 224 299 203 + 826 11 223 300 156 + 827 12 223 300 204 + 828 11 204 300 156 + 829 11 205 301 157 + 830 12 220 301 205 + 831 11 220 301 157 + 832 11 219 302 158 + 833 12 219 302 206 + 834 11 206 302 158 + 835 12 218 303 207 + 836 11 218 303 159 + 837 11 207 303 159 + 838 12 217 304 208 + 839 11 217 304 160 + 840 11 208 304 160 + 841 11 233 305 161 + 842 11 252 305 161 + 843 12 252 305 233 + 844 11 251 306 162 + 845 12 251 306 234 + 846 11 234 306 162 + 847 11 250 307 163 + 848 12 250 307 235 + 849 11 235 307 163 + 850 11 249 308 164 + 851 12 249 308 236 + 852 11 236 308 164 + 853 11 237 309 165 + 854 12 254 309 237 + 855 11 254 309 165 + 856 11 253 310 166 + 857 12 253 310 238 + 858 11 238 310 166 + 859 11 239 311 167 + 860 12 256 311 239 + 861 11 256 311 167 + 862 11 240 312 168 + 863 12 255 312 240 + 864 11 255 312 168 + 865 11 241 313 169 + 866 12 262 313 241 + 867 11 262 313 169 + 868 11 261 314 170 + 869 12 261 314 242 + 870 11 242 314 170 + 871 11 243 315 171 + 872 12 264 315 243 + 873 11 264 315 171 + 874 11 263 316 172 + 875 12 263 316 244 + 876 11 244 316 172 + 877 11 245 317 173 + 878 12 260 317 245 + 879 11 260 317 173 + 880 12 259 318 246 + 881 11 259 318 174 + 882 11 246 318 174 + 883 12 258 319 247 + 884 11 258 319 175 + 885 11 247 319 175 + 886 11 257 320 176 + 887 12 257 320 248 + 888 11 248 320 176 + 889 11 265 321 177 + 890 12 280 321 265 + 891 11 280 321 177 + 892 11 279 322 178 + 893 12 279 322 266 + 894 11 266 322 178 + 895 11 267 323 179 + 896 12 278 323 267 + 897 11 278 323 179 + 898 11 268 324 180 + 899 12 277 324 268 + 900 11 277 324 180 + 901 11 269 325 181 + 902 12 274 325 269 + 903 11 274 325 181 + 904 12 273 326 270 + 905 11 273 326 182 + 906 11 270 326 182 + 907 12 276 327 271 + 908 11 276 327 183 + 909 11 271 327 183 + 910 11 275 328 184 + 911 12 275 328 272 + 912 11 272 328 184 + 913 27 41 1 33 + 914 27 132 1 33 + 915 28 132 1 41 + 916 28 132 1 78 + 917 27 78 1 33 + 918 28 78 1 41 + 919 27 42 2 34 + 920 28 131 2 42 + 921 28 131 2 77 + 922 27 131 2 34 + 923 28 77 2 42 + 924 27 77 2 34 + 925 27 74 3 35 + 926 28 74 3 43 + 927 27 43 3 35 + 928 28 134 3 74 + 929 27 134 3 35 + 930 28 134 3 43 + 931 28 73 4 44 + 932 27 73 4 36 + 933 27 44 4 36 + 934 28 133 4 73 + 935 28 133 4 44 + 936 27 133 4 36 + 937 27 45 5 37 + 938 28 80 5 45 + 939 27 80 5 37 + 940 28 136 5 45 + 941 28 136 5 80 + 942 27 136 5 37 + 943 28 135 6 46 + 944 28 135 6 79 + 945 27 135 6 38 + 946 27 46 6 38 + 947 28 79 6 46 + 948 27 79 6 38 + 949 28 130 7 76 + 950 27 130 7 39 + 951 28 130 7 47 + 952 27 76 7 39 + 953 28 76 7 47 + 954 27 47 7 39 + 955 28 129 8 75 + 956 27 129 8 40 + 957 28 129 8 48 + 958 27 75 8 40 + 959 28 75 8 48 + 960 27 48 8 40 + 961 27 49 9 33 + 962 28 68 9 49 + 963 27 68 9 33 + 964 28 101 9 49 + 965 27 101 9 33 + 966 28 101 9 68 + 967 27 50 10 34 + 968 28 67 10 50 + 969 27 67 10 34 + 970 28 102 10 50 + 971 28 102 10 67 + 972 27 102 10 34 + 973 28 97 11 51 + 974 27 97 11 39 + 975 28 97 11 72 + 976 27 51 11 39 + 977 28 72 11 51 + 978 27 72 11 39 + 979 28 98 12 52 + 980 28 98 12 71 + 981 27 98 12 40 + 982 27 52 12 40 + 983 28 71 12 52 + 984 27 71 12 40 + 985 27 66 13 35 + 986 28 66 13 53 + 987 27 53 13 35 + 988 28 99 13 66 + 989 27 99 13 35 + 990 28 99 13 53 + 991 28 100 14 65 + 992 27 100 14 36 + 993 28 100 14 54 + 994 27 65 14 36 + 995 28 65 14 54 + 996 27 54 14 36 + 997 27 55 15 37 + 998 28 70 15 55 + 999 27 70 15 37 + 1000 28 103 15 55 + 1001 27 103 15 37 + 1002 28 103 15 70 + 1003 28 104 16 69 + 1004 27 104 16 38 + 1005 28 104 16 56 + 1006 27 69 16 38 + 1007 28 69 16 56 + 1008 27 56 16 38 + 1009 27 57 17 33 + 1010 28 112 17 57 + 1011 27 112 17 33 + 1012 28 112 17 88 + 1013 28 88 17 57 + 1014 27 88 17 33 + 1015 27 58 18 34 + 1016 28 111 18 58 + 1017 28 111 18 87 + 1018 27 111 18 34 + 1019 28 87 18 58 + 1020 27 87 18 34 + 1021 28 106 19 59 + 1022 28 106 19 84 + 1023 27 106 19 37 + 1024 27 59 19 37 + 1025 28 84 19 59 + 1026 27 84 19 37 + 1027 28 105 20 83 + 1028 28 105 20 60 + 1029 27 105 20 38 + 1030 28 83 20 60 + 1031 27 83 20 38 + 1032 27 60 20 38 + 1033 28 108 21 61 + 1034 28 108 21 86 + 1035 27 108 21 39 + 1036 27 61 21 39 + 1037 28 86 21 61 + 1038 27 86 21 39 + 1039 28 107 22 85 + 1040 28 107 22 62 + 1041 27 107 22 40 + 1042 28 85 22 62 + 1043 27 85 22 40 + 1044 27 62 22 40 + 1045 27 82 23 35 + 1046 28 82 23 63 + 1047 28 110 23 82 + 1048 27 110 23 35 + 1049 28 110 23 63 + 1050 27 63 23 35 + 1051 27 81 24 36 + 1052 28 81 24 64 + 1053 28 109 24 81 + 1054 27 109 24 36 + 1055 28 109 24 64 + 1056 27 64 24 36 + 1057 27 89 25 39 + 1058 28 125 25 89 + 1059 28 125 25 118 + 1060 27 125 25 39 + 1061 28 118 25 89 + 1062 27 118 25 39 + 1063 27 90 26 40 + 1064 28 117 26 90 + 1065 27 117 26 40 + 1066 28 126 26 90 + 1067 28 126 26 117 + 1068 27 126 26 40 + 1069 28 121 27 114 + 1070 28 121 27 91 + 1071 27 121 27 37 + 1072 28 114 27 91 + 1073 27 114 27 37 + 1074 27 91 27 37 + 1075 28 113 28 92 + 1076 27 113 28 38 + 1077 28 122 28 113 + 1078 28 122 28 92 + 1079 27 122 28 38 + 1080 27 92 28 38 + 1081 27 93 29 35 + 1082 27 123 29 35 + 1083 28 123 29 93 + 1084 28 123 29 120 + 1085 27 120 29 35 + 1086 28 120 29 93 + 1087 27 124 30 36 + 1088 28 124 30 94 + 1089 28 124 30 119 + 1090 27 94 30 36 + 1091 27 119 30 36 + 1092 28 119 30 94 + 1093 27 116 31 33 + 1094 28 116 31 95 + 1095 27 127 31 33 + 1096 28 127 31 116 + 1097 28 127 31 95 + 1098 27 95 31 33 + 1099 27 115 32 34 + 1100 28 115 32 96 + 1101 27 128 32 34 + 1102 28 128 32 115 + 1103 28 128 32 96 + 1104 27 96 32 34 + 1105 29 9 33 1 + 1106 29 31 33 1 + 1107 29 31 33 9 + 1108 29 31 33 17 + 1109 29 17 33 1 + 1110 29 17 33 9 + 1111 29 32 34 2 + 1112 29 32 34 18 + 1113 29 32 34 10 + 1114 29 18 34 2 + 1115 29 18 34 10 + 1116 29 10 34 2 + 1117 29 29 35 3 + 1118 29 29 35 13 + 1119 29 29 35 23 + 1120 29 13 35 3 + 1121 29 23 35 3 + 1122 29 23 35 13 + 1123 29 30 36 4 + 1124 29 30 36 14 + 1125 29 30 36 24 + 1126 29 14 36 4 + 1127 29 24 36 4 + 1128 29 24 36 14 + 1129 29 19 37 5 + 1130 29 19 37 15 + 1131 29 27 37 19 + 1132 29 27 37 5 + 1133 29 27 37 15 + 1134 29 15 37 5 + 1135 29 28 38 20 + 1136 29 28 38 6 + 1137 29 28 38 16 + 1138 29 20 38 6 + 1139 29 20 38 16 + 1140 29 16 38 6 + 1141 29 25 39 11 + 1142 29 25 39 21 + 1143 29 25 39 7 + 1144 29 11 39 7 + 1145 29 21 39 11 + 1146 29 21 39 7 + 1147 29 26 40 12 + 1148 29 26 40 22 + 1149 29 26 40 8 + 1150 29 12 40 8 + 1151 29 22 40 12 + 1152 29 22 40 8 + 1153 26 137 41 1 + 1154 26 138 42 2 + 1155 26 139 43 3 + 1156 26 140 44 4 + 1157 26 141 45 5 + 1158 26 142 46 6 + 1159 26 143 47 7 + 1160 26 144 48 8 + 1161 26 145 49 9 + 1162 26 146 50 10 + 1163 26 147 51 11 + 1164 26 148 52 12 + 1165 26 149 53 13 + 1166 26 150 54 14 + 1167 26 151 55 15 + 1168 26 152 56 16 + 1169 26 153 57 17 + 1170 26 154 58 18 + 1171 26 155 59 19 + 1172 26 156 60 20 + 1173 26 157 61 21 + 1174 26 158 62 22 + 1175 26 159 63 23 + 1176 26 160 64 24 + 1177 26 140 65 14 + 1178 26 139 66 13 + 1179 26 138 67 10 + 1180 26 137 68 9 + 1181 26 142 69 16 + 1182 26 141 70 15 + 1183 26 144 71 12 + 1184 26 143 72 11 + 1185 26 160 73 4 + 1186 26 159 74 3 + 1187 26 158 75 8 + 1188 26 157 76 7 + 1189 26 154 77 2 + 1190 26 153 78 1 + 1191 26 156 79 6 + 1192 26 155 80 5 + 1193 26 150 81 24 + 1194 26 149 82 23 + 1195 26 152 83 20 + 1196 26 151 84 19 + 1197 26 148 85 22 + 1198 26 147 86 21 + 1199 26 146 87 18 + 1200 26 145 88 17 + 1201 26 161 89 25 + 1202 26 162 90 26 + 1203 26 163 91 27 + 1204 26 164 92 28 + 1205 26 165 93 29 + 1206 26 166 94 30 + 1207 26 167 95 31 + 1208 26 168 96 32 + 1209 26 169 97 11 + 1210 26 170 98 12 + 1211 26 171 99 13 + 1212 26 172 100 14 + 1213 26 173 101 9 + 1214 26 174 102 10 + 1215 26 175 103 15 + 1216 26 176 104 16 + 1217 26 164 105 20 + 1218 26 163 106 19 + 1219 26 162 107 22 + 1220 26 161 108 21 + 1221 26 166 109 24 + 1222 26 165 110 23 + 1223 26 168 111 18 + 1224 26 167 112 17 + 1225 26 176 113 28 + 1226 26 175 114 27 + 1227 26 174 115 32 + 1228 26 173 116 31 + 1229 26 170 117 26 + 1230 26 169 118 25 + 1231 26 172 119 30 + 1232 26 171 120 29 + 1233 26 177 121 27 + 1234 26 178 122 28 + 1235 26 179 123 29 + 1236 26 180 124 30 + 1237 26 181 125 25 + 1238 26 182 126 26 + 1239 26 183 127 31 + 1240 26 184 128 32 + 1241 26 182 129 8 + 1242 26 181 130 7 + 1243 26 184 131 2 + 1244 26 183 132 1 + 1245 26 180 133 4 + 1246 26 179 134 3 + 1247 26 178 135 6 + 1248 26 177 136 5 + 1249 22 281 137 41 + 1250 22 281 137 68 + 1251 19 68 137 41 + 1252 19 67 138 42 + 1253 22 282 138 42 + 1254 22 282 138 67 + 1255 19 66 139 43 + 1256 22 283 139 66 + 1257 22 283 139 43 + 1258 19 65 140 44 + 1259 22 284 140 65 + 1260 22 284 140 44 + 1261 22 285 141 45 + 1262 22 285 141 70 + 1263 19 70 141 45 + 1264 19 69 142 46 + 1265 22 286 142 69 + 1266 22 286 142 46 + 1267 22 287 143 47 + 1268 22 287 143 72 + 1269 19 72 143 47 + 1270 22 288 144 71 + 1271 22 288 144 48 + 1272 19 71 144 48 + 1273 22 289 145 49 + 1274 22 289 145 88 + 1275 19 88 145 49 + 1276 19 87 146 50 + 1277 22 290 146 50 + 1278 22 290 146 87 + 1279 22 291 147 51 + 1280 22 291 147 86 + 1281 19 86 147 51 + 1282 22 292 148 52 + 1283 22 292 148 85 + 1284 19 85 148 52 + 1285 19 82 149 53 + 1286 22 293 149 82 + 1287 22 293 149 53 + 1288 19 81 150 54 + 1289 22 294 150 81 + 1290 22 294 150 54 + 1291 19 84 151 55 + 1292 22 295 151 84 + 1293 22 295 151 55 + 1294 19 83 152 56 + 1295 22 296 152 83 + 1296 22 296 152 56 + 1297 22 297 153 57 + 1298 22 297 153 78 + 1299 19 78 153 57 + 1300 19 77 154 58 + 1301 22 298 154 58 + 1302 22 298 154 77 + 1303 22 299 155 59 + 1304 22 299 155 80 + 1305 19 80 155 59 + 1306 22 300 156 60 + 1307 22 300 156 79 + 1308 19 79 156 60 + 1309 22 301 157 76 + 1310 22 301 157 61 + 1311 19 76 157 61 + 1312 19 75 158 62 + 1313 22 302 158 75 + 1314 22 302 158 62 + 1315 19 74 159 63 + 1316 22 303 159 74 + 1317 22 303 159 63 + 1318 19 73 160 64 + 1319 22 304 160 73 + 1320 22 304 160 64 + 1321 22 305 161 89 + 1322 22 305 161 108 + 1323 19 108 161 89 + 1324 22 306 162 107 + 1325 22 306 162 90 + 1326 19 107 162 90 + 1327 19 106 163 91 + 1328 22 307 163 106 + 1329 22 307 163 91 + 1330 19 105 164 92 + 1331 22 308 164 105 + 1332 22 308 164 92 + 1333 22 309 165 93 + 1334 22 309 165 110 + 1335 19 110 165 93 + 1336 19 109 166 94 + 1337 22 310 166 109 + 1338 22 310 166 94 + 1339 22 311 167 95 + 1340 22 311 167 112 + 1341 19 112 167 95 + 1342 19 111 168 96 + 1343 22 312 168 96 + 1344 22 312 168 111 + 1345 22 313 169 97 + 1346 22 313 169 118 + 1347 19 118 169 97 + 1348 22 314 170 117 + 1349 22 314 170 98 + 1350 19 117 170 98 + 1351 22 315 171 99 + 1352 22 315 171 120 + 1353 19 120 171 99 + 1354 22 316 172 100 + 1355 22 316 172 119 + 1356 19 119 172 100 + 1357 19 116 173 101 + 1358 22 317 173 101 + 1359 22 317 173 116 + 1360 19 115 174 102 + 1361 22 318 174 115 + 1362 22 318 174 102 + 1363 19 114 175 103 + 1364 22 319 175 114 + 1365 22 319 175 103 + 1366 19 113 176 104 + 1367 22 320 176 113 + 1368 22 320 176 104 + 1369 22 321 177 121 + 1370 22 321 177 136 + 1371 19 136 177 121 + 1372 22 322 178 135 + 1373 22 322 178 122 + 1374 19 135 178 122 + 1375 22 323 179 123 + 1376 22 323 179 134 + 1377 19 134 179 123 + 1378 22 324 180 124 + 1379 22 324 180 133 + 1380 19 133 180 124 + 1381 22 325 181 125 + 1382 22 325 181 130 + 1383 19 130 181 125 + 1384 19 129 182 126 + 1385 22 326 182 129 + 1386 22 326 182 126 + 1387 19 132 183 127 + 1388 22 327 183 132 + 1389 22 327 183 127 + 1390 19 131 184 128 + 1391 22 328 184 131 + 1392 22 328 184 128 + 1393 24 329 185 281 + 1394 21 329 185 188 + 1395 25 281 185 188 + 1396 25 282 186 187 + 1397 24 330 186 282 + 1398 21 330 186 187 + 1399 21 331 187 186 + 1400 24 331 187 283 + 1401 25 283 187 186 + 1402 25 284 188 185 + 1403 21 332 188 185 + 1404 24 332 188 284 + 1405 24 333 189 285 + 1406 21 333 189 192 + 1407 25 285 189 192 + 1408 25 286 190 191 + 1409 24 334 190 286 + 1410 21 334 190 191 + 1411 21 335 191 190 + 1412 24 335 191 287 + 1413 25 287 191 190 + 1414 25 288 192 189 + 1415 24 336 192 288 + 1416 21 336 192 189 + 1417 25 289 193 196 + 1418 24 337 193 289 + 1419 21 337 193 196 + 1420 25 290 194 195 + 1421 24 338 194 290 + 1422 21 338 194 195 + 1423 21 339 195 194 + 1424 24 339 195 291 + 1425 25 291 195 194 + 1426 21 340 196 193 + 1427 24 340 196 292 + 1428 25 292 196 193 + 1429 25 293 197 200 + 1430 24 341 197 293 + 1431 21 341 197 200 + 1432 21 342 198 199 + 1433 24 342 198 294 + 1434 25 294 198 199 + 1435 21 343 199 198 + 1436 24 343 199 295 + 1437 25 295 199 198 + 1438 21 344 200 197 + 1439 24 344 200 296 + 1440 25 296 200 197 + 1441 25 297 201 204 + 1442 24 345 201 297 + 1443 21 345 201 204 + 1444 21 346 202 203 + 1445 24 346 202 298 + 1446 25 298 202 203 + 1447 21 347 203 202 + 1448 24 347 203 299 + 1449 25 299 203 202 + 1450 25 300 204 201 + 1451 21 348 204 201 + 1452 24 348 204 300 + 1453 24 349 205 301 + 1454 21 349 205 208 + 1455 25 301 205 208 + 1456 21 350 206 207 + 1457 24 350 206 302 + 1458 25 302 206 207 + 1459 21 351 207 206 + 1460 24 351 207 303 + 1461 25 303 207 206 + 1462 25 304 208 205 + 1463 24 352 208 304 + 1464 21 352 208 205 + 1465 24 353 209 284 + 1466 21 353 209 212 + 1467 25 284 209 212 + 1468 21 354 210 211 + 1469 24 354 210 283 + 1470 25 283 210 211 + 1471 21 355 211 210 + 1472 24 355 211 282 + 1473 25 282 211 210 + 1474 25 281 212 209 + 1475 21 356 212 209 + 1476 24 356 212 281 + 1477 24 357 213 286 + 1478 21 357 213 216 + 1479 25 286 213 216 + 1480 25 285 214 215 + 1481 24 358 214 285 + 1482 21 358 214 215 + 1483 21 359 215 214 + 1484 24 359 215 288 + 1485 25 288 215 214 + 1486 25 287 216 213 + 1487 21 360 216 213 + 1488 24 360 216 287 + 1489 21 361 217 220 + 1490 24 361 217 304 + 1491 25 304 217 220 + 1492 21 362 218 219 + 1493 24 362 218 303 + 1494 25 303 218 219 + 1495 21 363 219 218 + 1496 24 363 219 302 + 1497 25 302 219 218 + 1498 21 364 220 217 + 1499 24 364 220 301 + 1500 25 301 220 217 + 1501 25 298 221 224 + 1502 24 365 221 298 + 1503 21 365 221 224 + 1504 25 297 222 223 + 1505 24 366 222 297 + 1506 21 366 222 223 + 1507 25 300 223 222 + 1508 24 367 223 300 + 1509 21 367 223 222 + 1510 25 299 224 221 + 1511 24 368 224 299 + 1512 21 368 224 221 + 1513 21 369 225 228 + 1514 24 369 225 294 + 1515 25 294 225 228 + 1516 21 370 226 227 + 1517 24 370 226 293 + 1518 25 293 226 227 + 1519 21 371 227 226 + 1520 24 371 227 296 + 1521 25 296 227 226 + 1522 21 372 228 225 + 1523 24 372 228 295 + 1524 25 295 228 225 + 1525 25 292 229 232 + 1526 24 373 229 292 + 1527 21 373 229 232 + 1528 25 291 230 231 + 1529 24 374 230 291 + 1530 21 374 230 231 + 1531 25 290 231 230 + 1532 24 375 231 290 + 1533 21 375 231 230 + 1534 25 289 232 229 + 1535 24 376 232 289 + 1536 21 376 232 229 + 1537 25 305 233 236 + 1538 24 377 233 305 + 1539 21 377 233 236 + 1540 25 306 234 235 + 1541 24 378 234 306 + 1542 21 378 234 235 + 1543 25 307 235 234 + 1544 21 379 235 234 + 1545 24 379 235 307 + 1546 21 380 236 233 + 1547 24 380 236 308 + 1548 25 308 236 233 + 1549 24 381 237 309 + 1550 21 381 237 240 + 1551 25 309 237 240 + 1552 25 310 238 239 + 1553 24 382 238 310 + 1554 21 382 238 239 + 1555 21 383 239 238 + 1556 24 383 239 311 + 1557 25 311 239 238 + 1558 21 384 240 237 + 1559 24 384 240 312 + 1560 25 312 240 237 + 1561 25 313 241 244 + 1562 24 385 241 313 + 1563 21 385 241 244 + 1564 25 314 242 243 + 1565 24 386 242 314 + 1566 21 386 242 243 + 1567 25 315 243 242 + 1568 21 387 243 242 + 1569 24 387 243 315 + 1570 25 316 244 241 + 1571 21 388 244 241 + 1572 24 388 244 316 + 1573 25 317 245 248 + 1574 24 389 245 317 + 1575 21 389 245 248 + 1576 25 318 246 247 + 1577 24 390 246 318 + 1578 21 390 246 247 + 1579 25 319 247 246 + 1580 21 391 247 246 + 1581 24 391 247 319 + 1582 25 320 248 245 + 1583 24 392 248 320 + 1584 21 392 248 245 + 1585 24 393 249 308 + 1586 21 393 249 252 + 1587 25 308 249 252 + 1588 21 394 250 251 + 1589 24 394 250 307 + 1590 25 307 250 251 + 1591 21 395 251 250 + 1592 24 395 251 306 + 1593 25 306 251 250 + 1594 25 305 252 249 + 1595 21 396 252 249 + 1596 24 396 252 305 + 1597 24 397 253 310 + 1598 21 397 253 256 + 1599 25 310 253 256 + 1600 25 309 254 255 + 1601 24 398 254 309 + 1602 21 398 254 255 + 1603 21 399 255 254 + 1604 24 399 255 312 + 1605 25 312 255 254 + 1606 25 311 256 253 + 1607 21 400 256 253 + 1608 24 400 256 311 + 1609 21 401 257 260 + 1610 24 401 257 320 + 1611 25 320 257 260 + 1612 21 402 258 259 + 1613 24 402 258 319 + 1614 25 319 258 259 + 1615 21 403 259 258 + 1616 24 403 259 318 + 1617 25 318 259 258 + 1618 21 404 260 257 + 1619 24 404 260 317 + 1620 25 317 260 257 + 1621 25 314 261 264 + 1622 24 405 261 314 + 1623 21 405 261 264 + 1624 25 313 262 263 + 1625 24 406 262 313 + 1626 21 406 262 263 + 1627 25 316 263 262 + 1628 24 407 263 316 + 1629 21 407 263 262 + 1630 25 315 264 261 + 1631 24 408 264 315 + 1632 21 408 264 261 + 1633 25 321 265 268 + 1634 24 409 265 321 + 1635 21 409 265 268 + 1636 25 322 266 267 + 1637 24 410 266 322 + 1638 21 410 266 267 + 1639 25 323 267 266 + 1640 21 411 267 266 + 1641 24 411 267 323 + 1642 25 324 268 265 + 1643 21 412 268 265 + 1644 24 412 268 324 + 1645 24 413 269 325 + 1646 21 413 269 272 + 1647 25 325 269 272 + 1648 25 326 270 271 + 1649 24 414 270 326 + 1650 21 414 270 271 + 1651 25 327 271 270 + 1652 21 415 271 270 + 1653 24 415 271 327 + 1654 21 416 272 269 + 1655 24 416 272 328 + 1656 25 328 272 269 + 1657 21 417 273 276 + 1658 24 417 273 326 + 1659 25 326 273 276 + 1660 21 418 274 275 + 1661 24 418 274 325 + 1662 25 325 274 275 + 1663 21 419 275 274 + 1664 24 419 275 328 + 1665 25 328 275 274 + 1666 21 420 276 273 + 1667 24 420 276 327 + 1668 25 327 276 273 + 1669 25 324 277 280 + 1670 24 421 277 324 + 1671 21 421 277 280 + 1672 25 323 278 279 + 1673 24 422 278 323 + 1674 21 422 278 279 + 1675 25 322 279 278 + 1676 24 423 279 322 + 1677 21 423 279 278 + 1678 25 321 280 277 + 1679 24 424 280 321 + 1680 21 424 280 277 + 1681 23 185 281 137 + 1682 23 212 281 137 + 1683 20 212 281 185 + 1684 23 211 282 138 + 1685 20 211 282 186 + 1686 23 186 282 138 + 1687 23 210 283 139 + 1688 20 210 283 187 + 1689 23 187 283 139 + 1690 23 209 284 140 + 1691 20 209 284 188 + 1692 23 188 284 140 + 1693 23 189 285 141 + 1694 20 214 285 189 + 1695 23 214 285 141 + 1696 23 213 286 142 + 1697 20 213 286 190 + 1698 23 190 286 142 + 1699 23 191 287 143 + 1700 20 216 287 191 + 1701 23 216 287 143 + 1702 23 192 288 144 + 1703 20 215 288 192 + 1704 23 215 288 144 + 1705 23 193 289 145 + 1706 23 232 289 145 + 1707 20 232 289 193 + 1708 23 231 290 146 + 1709 20 231 290 194 + 1710 23 194 290 146 + 1711 23 195 291 147 + 1712 23 230 291 147 + 1713 20 230 291 195 + 1714 23 229 292 148 + 1715 20 229 292 196 + 1716 23 196 292 148 + 1717 23 197 293 149 + 1718 20 226 293 197 + 1719 23 226 293 149 + 1720 23 225 294 150 + 1721 20 225 294 198 + 1722 23 198 294 150 + 1723 20 228 295 199 + 1724 23 228 295 151 + 1725 23 199 295 151 + 1726 20 227 296 200 + 1727 23 227 296 152 + 1728 23 200 296 152 + 1729 23 201 297 153 + 1730 23 222 297 153 + 1731 20 222 297 201 + 1732 23 221 298 154 + 1733 20 221 298 202 + 1734 23 202 298 154 + 1735 23 203 299 155 + 1736 23 224 299 155 + 1737 20 224 299 203 + 1738 23 223 300 156 + 1739 20 223 300 204 + 1740 23 204 300 156 + 1741 23 205 301 157 + 1742 20 220 301 205 + 1743 23 220 301 157 + 1744 23 219 302 158 + 1745 20 219 302 206 + 1746 23 206 302 158 + 1747 20 218 303 207 + 1748 23 218 303 159 + 1749 23 207 303 159 + 1750 20 217 304 208 + 1751 23 217 304 160 + 1752 23 208 304 160 + 1753 23 233 305 161 + 1754 23 252 305 161 + 1755 20 252 305 233 + 1756 23 251 306 162 + 1757 20 251 306 234 + 1758 23 234 306 162 + 1759 23 250 307 163 + 1760 20 250 307 235 + 1761 23 235 307 163 + 1762 23 249 308 164 + 1763 20 249 308 236 + 1764 23 236 308 164 + 1765 23 237 309 165 + 1766 20 254 309 237 + 1767 23 254 309 165 + 1768 23 253 310 166 + 1769 20 253 310 238 + 1770 23 238 310 166 + 1771 23 239 311 167 + 1772 20 256 311 239 + 1773 23 256 311 167 + 1774 23 240 312 168 + 1775 20 255 312 240 + 1776 23 255 312 168 + 1777 23 241 313 169 + 1778 20 262 313 241 + 1779 23 262 313 169 + 1780 23 261 314 170 + 1781 20 261 314 242 + 1782 23 242 314 170 + 1783 23 243 315 171 + 1784 20 264 315 243 + 1785 23 264 315 171 + 1786 23 263 316 172 + 1787 20 263 316 244 + 1788 23 244 316 172 + 1789 23 245 317 173 + 1790 20 260 317 245 + 1791 23 260 317 173 + 1792 20 259 318 246 + 1793 23 259 318 174 + 1794 23 246 318 174 + 1795 20 258 319 247 + 1796 23 258 319 175 + 1797 23 247 319 175 + 1798 23 257 320 176 + 1799 20 257 320 248 + 1800 23 248 320 176 + 1801 23 265 321 177 + 1802 20 280 321 265 + 1803 23 280 321 177 + 1804 23 279 322 178 + 1805 20 279 322 266 + 1806 23 266 322 178 + 1807 23 267 323 179 + 1808 20 278 323 267 + 1809 23 278 323 179 + 1810 23 268 324 180 + 1811 20 277 324 268 + 1812 23 277 324 180 + 1813 23 269 325 181 + 1814 20 274 325 269 + 1815 23 274 325 181 + 1816 20 273 326 270 + 1817 23 273 326 182 + 1818 23 270 326 182 + 1819 20 276 327 271 + 1820 23 276 327 183 + 1821 23 271 327 183 + 1822 23 275 328 184 + 1823 20 275 328 272 + 1824 23 272 328 184 + +Dihedrals + + 1 4 292 229 232 289 + 2 5 292 229 232 376 + 3 5 373 229 232 289 + 4 7 373 229 232 376 + 5 10 289 145 49 9 + 6 9 88 145 49 9 + 7 9 49 145 88 17 + 8 10 289 145 88 17 + 9 3 193 289 145 49 + 10 3 193 289 145 88 + 11 3 232 289 145 49 + 12 3 232 289 145 88 + 13 2 145 289 193 337 + 14 8 145 289 193 196 + 15 6 232 289 193 337 + 16 1 232 289 193 196 + 17 8 145 289 232 229 + 18 2 145 289 232 376 + 19 1 193 289 232 229 + 20 6 193 289 232 376 + 21 3 132 183 327 276 + 22 3 132 183 327 271 + 23 3 127 183 327 276 + 24 3 127 183 327 271 + 25 4 326 270 271 327 + 26 5 326 270 271 415 + 27 5 414 270 271 327 + 28 7 414 270 271 415 + 29 7 417 273 276 420 + 30 5 417 273 276 327 + 31 5 326 273 276 420 + 32 4 326 273 276 327 + 33 1 273 326 270 271 + 34 6 273 326 270 414 + 35 8 182 326 270 271 + 36 2 182 326 270 414 + 37 6 417 273 326 270 + 38 2 417 273 326 182 + 39 1 276 273 326 270 + 40 8 276 273 326 182 + 41 1 270 271 327 276 + 42 8 270 271 327 183 + 43 6 415 271 327 276 + 44 2 415 271 327 183 + 45 1 273 276 327 271 + 46 8 273 276 327 183 + 47 6 420 276 327 271 + 48 2 420 276 327 183 + 49 3 273 326 182 129 + 50 3 273 326 182 126 + 51 3 270 326 182 129 + 52 3 270 326 182 126 + 53 11 45 5 37 19 + 54 11 45 5 37 27 + 55 11 45 5 37 15 + 56 11 80 5 37 19 + 57 11 80 5 37 27 + 58 11 80 5 37 15 + 59 11 136 5 37 19 + 60 11 136 5 37 27 + 61 11 136 5 37 15 + 62 11 19 37 15 55 + 63 11 19 37 15 70 + 64 11 19 37 15 103 + 65 11 5 37 15 55 + 66 11 5 37 15 70 + 67 11 5 37 15 103 + 68 11 27 37 15 55 + 69 11 27 37 15 70 + 70 11 27 37 15 103 + 71 11 106 19 37 5 + 72 11 106 19 37 27 + 73 11 106 19 37 15 + 74 11 59 19 37 5 + 75 11 59 19 37 27 + 76 11 59 19 37 15 + 77 11 84 19 37 5 + 78 11 84 19 37 27 + 79 11 84 19 37 15 + 80 11 121 27 37 19 + 81 11 121 27 37 5 + 82 11 121 27 37 15 + 83 11 114 27 37 19 + 84 11 114 27 37 5 + 85 11 114 27 37 15 + 86 11 91 27 37 19 + 87 11 91 27 37 5 + 88 11 91 27 37 15 + 89 9 106 163 91 27 + 90 10 307 163 91 27 + 91 9 19 106 163 91 + 92 10 19 106 163 307 + 93 9 15 103 175 114 + 94 10 15 103 175 319 + 95 10 27 114 175 319 + 96 9 27 114 175 103 + 97 10 321 177 121 27 + 98 9 136 177 121 27 + 99 9 121 177 136 5 + 100 10 321 177 136 5 + 101 5 286 190 191 335 + 102 4 286 190 191 287 + 103 7 334 190 191 335 + 104 5 334 190 191 287 + 105 5 357 213 216 287 + 106 7 357 213 216 360 + 107 4 286 213 216 287 + 108 5 286 213 216 360 + 109 10 7 47 143 287 + 110 9 7 47 143 72 + 111 10 287 143 72 11 + 112 9 47 143 72 11 + 113 3 47 143 287 191 + 114 3 47 143 287 216 + 115 3 72 143 287 191 + 116 3 72 143 287 216 + 117 2 335 191 287 143 + 118 6 335 191 287 216 + 119 8 190 191 287 143 + 120 1 190 191 287 216 + 121 1 191 287 216 213 + 122 6 191 287 216 360 + 123 8 143 287 216 213 + 124 2 143 287 216 360 + 125 9 87 146 50 10 + 126 10 290 146 50 10 + 127 9 50 146 87 18 + 128 10 290 146 87 18 + 129 3 231 290 146 50 + 130 3 231 290 146 87 + 131 3 194 290 146 50 + 132 3 194 290 146 87 + 133 8 146 290 194 195 + 134 2 146 290 194 338 + 135 1 231 290 194 195 + 136 6 231 290 194 338 + 137 8 146 290 231 230 + 138 2 146 290 231 375 + 139 1 194 290 231 230 + 140 6 194 290 231 375 + 141 4 291 230 231 290 + 142 5 291 230 231 375 + 143 5 374 230 231 290 + 144 7 374 230 231 375 + 145 10 297 153 57 17 + 146 9 78 153 57 17 + 147 9 57 153 78 1 + 148 10 297 153 78 1 + 149 3 201 297 153 57 + 150 3 201 297 153 78 + 151 3 222 297 153 57 + 152 3 222 297 153 78 + 153 2 153 297 201 345 + 154 8 153 297 201 204 + 155 6 222 297 201 345 + 156 1 222 297 201 204 + 157 2 153 297 222 366 + 158 8 153 297 222 223 + 159 6 201 297 222 366 + 160 1 201 297 222 223 + 161 3 268 324 180 124 + 162 3 268 324 180 133 + 163 3 277 324 180 124 + 164 3 277 324 180 133 + 165 4 321 265 268 324 + 166 5 321 265 268 412 + 167 5 409 265 268 324 + 168 7 409 265 268 412 + 169 4 324 277 280 321 + 170 5 324 277 280 424 + 171 5 421 277 280 321 + 172 7 421 277 280 424 + 173 2 177 321 265 409 + 174 8 177 321 265 268 + 175 6 280 321 265 409 + 176 1 280 321 265 268 + 177 1 265 321 280 277 + 178 6 265 321 280 424 + 179 8 177 321 280 277 + 180 2 177 321 280 424 + 181 8 265 268 324 180 + 182 1 265 268 324 277 + 183 2 412 268 324 180 + 184 6 412 268 324 277 + 185 6 268 324 277 421 + 186 1 268 324 277 280 + 187 2 180 324 277 421 + 188 8 180 324 277 280 + 189 3 265 321 177 121 + 190 3 265 321 177 136 + 191 3 280 321 177 121 + 192 3 280 321 177 136 + 193 7 354 210 211 355 + 194 5 354 210 211 282 + 195 5 283 210 211 355 + 196 4 283 210 211 282 + 197 9 67 138 42 2 + 198 10 282 138 42 2 + 199 9 42 138 67 10 + 200 10 282 138 67 10 + 201 3 211 282 138 42 + 202 3 211 282 138 67 + 203 3 186 282 138 42 + 204 3 186 282 138 67 + 205 8 138 282 186 187 + 206 2 138 282 186 330 + 207 1 211 282 186 187 + 208 6 211 282 186 330 + 209 8 138 282 211 210 + 210 2 138 282 211 355 + 211 1 186 282 211 210 + 212 6 186 282 211 355 + 213 10 5 45 141 285 + 214 9 5 45 141 70 + 215 10 285 141 70 15 + 216 9 45 141 70 15 + 217 3 45 141 285 189 + 218 3 45 141 285 214 + 219 3 70 141 285 189 + 220 3 70 141 285 214 + 221 2 333 189 285 141 + 222 6 333 189 285 214 + 223 8 192 189 285 141 + 224 1 192 189 285 214 + 225 6 189 285 214 358 + 226 1 189 285 214 215 + 227 2 141 285 214 358 + 228 8 141 285 214 215 + 229 3 125 181 325 269 + 230 3 125 181 325 274 + 231 3 130 181 325 269 + 232 3 130 181 325 274 + 233 7 413 269 272 416 + 234 5 413 269 272 328 + 235 5 325 269 272 416 + 236 4 325 269 272 328 + 237 7 418 274 275 419 + 238 5 418 274 275 328 + 239 5 325 274 275 419 + 240 4 325 274 275 328 + 241 2 413 269 325 181 + 242 6 413 269 325 274 + 243 8 272 269 325 181 + 244 1 272 269 325 274 + 245 6 418 274 325 269 + 246 2 418 274 325 181 + 247 1 275 274 325 269 + 248 8 275 274 325 181 + 249 6 416 272 328 275 + 250 2 416 272 328 184 + 251 1 269 272 328 275 + 252 8 269 272 328 184 + 253 8 274 275 328 184 + 254 1 274 275 328 272 + 255 2 419 275 328 184 + 256 6 419 275 328 272 + 257 3 131 184 328 275 + 258 3 131 184 328 272 + 259 3 128 184 328 275 + 260 3 128 184 328 272 + 261 3 114 175 319 258 + 262 3 114 175 319 247 + 263 3 103 175 319 258 + 264 3 103 175 319 247 + 265 4 318 246 247 319 + 266 5 318 246 247 391 + 267 5 390 246 247 319 + 268 7 390 246 247 391 + 269 7 402 258 259 403 + 270 5 402 258 259 318 + 271 5 319 258 259 403 + 272 4 319 258 259 318 + 273 1 259 318 246 247 + 274 6 259 318 246 390 + 275 8 174 318 246 247 + 276 2 174 318 246 390 + 277 1 258 259 318 246 + 278 8 258 259 318 174 + 279 6 403 259 318 246 + 280 2 403 259 318 174 + 281 1 246 247 319 258 + 282 8 246 247 319 175 + 283 6 391 247 319 258 + 284 2 391 247 319 175 + 285 6 402 258 319 247 + 286 2 402 258 319 175 + 287 1 259 258 319 247 + 288 8 259 258 319 175 + 289 3 259 318 174 115 + 290 3 259 318 174 102 + 291 3 246 318 174 115 + 292 3 246 318 174 102 + 293 3 95 167 311 239 + 294 3 95 167 311 256 + 295 3 112 167 311 239 + 296 3 112 167 311 256 + 297 3 253 310 166 109 + 298 3 253 310 166 94 + 299 3 238 310 166 109 + 300 3 238 310 166 94 + 301 5 310 238 239 383 + 302 4 310 238 239 311 + 303 7 382 238 239 383 + 304 5 382 238 239 311 + 305 5 397 253 256 311 + 306 7 397 253 256 400 + 307 4 310 253 256 311 + 308 5 310 253 256 400 + 309 1 253 310 238 239 + 310 6 253 310 238 382 + 311 8 166 310 238 239 + 312 2 166 310 238 382 + 313 2 397 253 310 166 + 314 6 397 253 310 238 + 315 8 256 253 310 166 + 316 1 256 253 310 238 + 317 2 383 239 311 167 + 318 6 383 239 311 256 + 319 8 238 239 311 167 + 320 1 238 239 311 256 + 321 1 239 311 256 253 + 322 6 239 311 256 400 + 323 8 167 311 256 253 + 324 2 167 311 256 400 + 325 11 73 4 36 30 + 326 11 73 4 36 14 + 327 11 73 4 36 24 + 328 11 44 4 36 30 + 329 11 44 4 36 14 + 330 11 44 4 36 24 + 331 11 133 4 36 30 + 332 11 133 4 36 14 + 333 11 133 4 36 24 + 334 11 4 36 14 100 + 335 11 4 36 14 65 + 336 11 4 36 14 54 + 337 11 30 36 14 100 + 338 11 30 36 14 65 + 339 11 30 36 14 54 + 340 11 24 36 14 100 + 341 11 24 36 14 65 + 342 11 24 36 14 54 + 343 11 4 36 24 81 + 344 11 4 36 24 109 + 345 11 4 36 24 64 + 346 11 30 36 24 81 + 347 11 30 36 24 109 + 348 11 30 36 24 64 + 349 11 14 36 24 81 + 350 11 14 36 24 109 + 351 11 14 36 24 64 + 352 11 4 36 30 124 + 353 11 4 36 30 94 + 354 11 4 36 30 119 + 355 11 14 36 30 124 + 356 11 14 36 30 94 + 357 11 14 36 30 119 + 358 11 24 36 30 124 + 359 11 24 36 30 94 + 360 11 24 36 30 119 + 361 9 109 166 94 30 + 362 10 310 166 94 30 + 363 10 24 109 166 310 + 364 9 24 109 166 94 + 365 10 14 100 172 316 + 366 9 14 100 172 119 + 367 10 316 172 119 30 + 368 9 100 172 119 30 + 369 10 30 124 180 324 + 370 9 30 124 180 133 + 371 9 124 180 133 4 + 372 10 324 180 133 4 + 373 9 15 55 151 84 + 374 10 15 55 151 295 + 375 10 19 84 151 295 + 376 9 19 84 151 55 + 377 3 84 151 295 228 + 378 3 84 151 295 199 + 379 3 55 151 295 228 + 380 3 55 151 295 199 + 381 6 343 199 295 228 + 382 2 343 199 295 151 + 383 1 198 199 295 228 + 384 8 198 199 295 151 + 385 1 225 228 295 199 + 386 8 225 228 295 151 + 387 6 372 228 295 199 + 388 2 372 228 295 151 + 389 7 342 198 199 343 + 390 5 342 198 199 295 + 391 5 294 198 199 343 + 392 4 294 198 199 295 + 393 7 369 225 228 372 + 394 5 369 225 228 295 + 395 5 294 225 228 372 + 396 4 294 225 228 295 + 397 5 290 194 195 339 + 398 4 290 194 195 291 + 399 7 338 194 195 339 + 400 5 338 194 195 291 + 401 10 291 147 51 11 + 402 9 86 147 51 11 + 403 9 51 147 86 21 + 404 10 291 147 86 21 + 405 3 195 291 147 51 + 406 3 195 291 147 86 + 407 3 230 291 147 51 + 408 3 230 291 147 86 + 409 8 147 291 195 194 + 410 2 147 291 195 339 + 411 1 230 291 195 194 + 412 6 230 291 195 339 + 413 2 147 291 230 374 + 414 8 147 291 230 231 + 415 6 195 291 230 374 + 416 1 195 291 230 231 + 417 11 130 7 39 25 + 418 11 130 7 39 11 + 419 11 130 7 39 21 + 420 11 76 7 39 25 + 421 11 76 7 39 11 + 422 11 76 7 39 21 + 423 11 47 7 39 25 + 424 11 47 7 39 11 + 425 11 47 7 39 21 + 426 11 97 11 39 25 + 427 11 97 11 39 21 + 428 11 97 11 39 7 + 429 11 51 11 39 25 + 430 11 51 11 39 21 + 431 11 51 11 39 7 + 432 11 72 11 39 25 + 433 11 72 11 39 21 + 434 11 72 11 39 7 + 435 11 108 21 39 25 + 436 11 108 21 39 11 + 437 11 108 21 39 7 + 438 11 61 21 39 25 + 439 11 61 21 39 11 + 440 11 61 21 39 7 + 441 11 86 21 39 25 + 442 11 86 21 39 11 + 443 11 86 21 39 7 + 444 11 89 25 39 11 + 445 11 89 25 39 21 + 446 11 89 25 39 7 + 447 11 125 25 39 11 + 448 11 125 25 39 21 + 449 11 125 25 39 7 + 450 11 118 25 39 11 + 451 11 118 25 39 21 + 452 11 118 25 39 7 + 453 10 305 161 89 25 + 454 9 108 161 89 25 + 455 9 89 161 108 21 + 456 10 305 161 108 21 + 457 10 313 169 97 11 + 458 9 118 169 97 11 + 459 9 97 169 118 25 + 460 10 313 169 118 25 + 461 10 25 125 181 325 + 462 9 25 125 181 130 + 463 9 7 130 181 125 + 464 10 7 130 181 325 + 465 7 362 218 219 363 + 466 5 362 218 219 302 + 467 5 303 218 219 363 + 468 4 303 218 219 302 + 469 9 75 158 62 22 + 470 10 302 158 62 22 + 471 9 8 75 158 62 + 472 10 8 75 158 302 + 473 3 219 302 158 75 + 474 3 219 302 158 62 + 475 3 206 302 158 75 + 476 3 206 302 158 62 + 477 6 219 302 206 350 + 478 1 219 302 206 207 + 479 2 158 302 206 350 + 480 8 158 302 206 207 + 481 8 218 219 302 158 + 482 1 218 219 302 206 + 483 2 363 219 302 158 + 484 6 363 219 302 206 + 485 3 263 316 172 100 + 486 3 263 316 172 119 + 487 3 244 316 172 100 + 488 3 244 316 172 119 + 489 4 313 241 244 316 + 490 5 313 241 244 388 + 491 5 385 241 244 316 + 492 7 385 241 244 388 + 493 4 313 262 263 316 + 494 5 313 262 263 407 + 495 5 406 262 263 316 + 496 7 406 262 263 407 + 497 2 169 313 241 385 + 498 8 169 313 241 244 + 499 6 262 313 241 385 + 500 1 262 313 241 244 + 501 6 241 313 262 406 + 502 1 241 313 262 263 + 503 2 169 313 262 406 + 504 8 169 313 262 263 + 505 8 172 316 244 241 + 506 2 172 316 244 388 + 507 1 263 316 244 241 + 508 6 263 316 244 388 + 509 8 172 316 263 262 + 510 2 172 316 263 407 + 511 1 244 316 263 262 + 512 6 244 316 263 407 + 513 3 241 313 169 97 + 514 3 241 313 169 118 + 515 3 262 313 169 97 + 516 3 262 313 169 118 + 517 9 23 63 159 74 + 518 10 23 63 159 303 + 519 10 3 74 159 303 + 520 9 3 74 159 63 + 521 3 74 159 303 218 + 522 3 74 159 303 207 + 523 3 63 159 303 218 + 524 3 63 159 303 207 + 525 6 351 207 303 218 + 526 2 351 207 303 159 + 527 1 206 207 303 218 + 528 8 206 207 303 159 + 529 6 362 218 303 207 + 530 2 362 218 303 159 + 531 1 219 218 303 207 + 532 8 219 218 303 159 + 533 7 350 206 207 351 + 534 5 350 206 207 303 + 535 5 302 206 207 351 + 536 4 302 206 207 303 + 537 10 20 60 156 300 + 538 9 20 60 156 79 + 539 10 300 156 79 6 + 540 9 60 156 79 6 + 541 3 223 300 156 60 + 542 3 223 300 156 79 + 543 3 204 300 156 60 + 544 3 204 300 156 79 + 545 8 156 300 204 201 + 546 2 156 300 204 348 + 547 1 223 300 204 201 + 548 6 223 300 204 348 + 549 8 156 300 223 222 + 550 2 156 300 223 367 + 551 1 204 300 223 222 + 552 6 204 300 223 367 + 553 4 297 201 204 300 + 554 5 297 201 204 348 + 555 5 345 201 204 300 + 556 7 345 201 204 348 + 557 4 297 222 223 300 + 558 5 297 222 223 367 + 559 5 366 222 223 300 + 560 7 366 222 223 367 + 561 3 101 173 317 245 + 562 3 101 173 317 260 + 563 3 116 173 317 245 + 564 3 116 173 317 260 + 565 4 317 245 248 320 + 566 5 317 245 248 392 + 567 5 389 245 248 320 + 568 7 389 245 248 392 + 569 7 401 257 260 404 + 570 5 401 257 260 317 + 571 5 320 257 260 404 + 572 4 320 257 260 317 + 573 6 389 245 317 260 + 574 2 389 245 317 173 + 575 1 248 245 317 260 + 576 8 248 245 317 173 + 577 1 257 260 317 245 + 578 8 257 260 317 173 + 579 6 404 260 317 245 + 580 2 404 260 317 173 + 581 1 245 248 320 257 + 582 8 245 248 320 176 + 583 6 392 248 320 257 + 584 2 392 248 320 176 + 585 2 401 257 320 176 + 586 6 401 257 320 248 + 587 8 260 257 320 176 + 588 1 260 257 320 248 + 589 3 113 176 320 257 + 590 3 113 176 320 248 + 591 3 104 176 320 257 + 592 3 104 176 320 248 + 593 10 21 61 157 301 + 594 9 21 61 157 76 + 595 10 7 76 157 301 + 596 9 7 76 157 61 + 597 3 76 157 301 205 + 598 3 76 157 301 220 + 599 3 61 157 301 205 + 600 3 61 157 301 220 + 601 6 349 205 301 220 + 602 2 349 205 301 157 + 603 1 208 205 301 220 + 604 8 208 205 301 157 + 605 1 217 220 301 205 + 606 8 217 220 301 157 + 607 6 364 220 301 205 + 608 2 364 220 301 157 + 609 7 361 217 220 364 + 610 5 361 217 220 301 + 611 5 304 217 220 364 + 612 4 304 217 220 301 + 613 3 93 165 309 237 + 614 3 93 165 309 254 + 615 3 110 165 309 237 + 616 3 110 165 309 254 + 617 3 96 168 312 240 + 618 3 96 168 312 255 + 619 3 111 168 312 240 + 620 3 111 168 312 255 + 621 7 381 237 240 384 + 622 5 381 237 240 312 + 623 5 309 237 240 384 + 624 4 309 237 240 312 + 625 5 309 254 255 399 + 626 4 309 254 255 312 + 627 7 398 254 255 399 + 628 5 398 254 255 312 + 629 2 381 237 309 165 + 630 6 381 237 309 254 + 631 8 240 237 309 165 + 632 1 240 237 309 254 + 633 6 237 309 254 398 + 634 1 237 309 254 255 + 635 2 165 309 254 398 + 636 8 165 309 254 255 + 637 6 384 240 312 255 + 638 2 384 240 312 168 + 639 1 237 240 312 255 + 640 8 237 240 312 168 + 641 1 254 255 312 240 + 642 8 254 255 312 168 + 643 6 399 255 312 240 + 644 2 399 255 312 168 + 645 7 346 202 203 347 + 646 5 346 202 203 299 + 647 5 298 202 203 347 + 648 4 298 202 203 299 + 649 4 298 221 224 299 + 650 5 298 221 224 368 + 651 5 365 221 224 299 + 652 7 365 221 224 368 + 653 10 299 155 59 19 + 654 9 80 155 59 19 + 655 9 59 155 80 5 + 656 10 299 155 80 5 + 657 3 203 299 155 59 + 658 3 203 299 155 80 + 659 3 224 299 155 59 + 660 3 224 299 155 80 + 661 8 155 299 203 202 + 662 2 155 299 203 347 + 663 1 224 299 203 202 + 664 6 224 299 203 347 + 665 8 155 299 224 221 + 666 2 155 299 224 368 + 667 1 203 299 224 221 + 668 6 203 299 224 368 + 669 5 293 197 200 344 + 670 4 293 197 200 296 + 671 7 341 197 200 344 + 672 5 341 197 200 296 + 673 7 370 226 227 371 + 674 5 370 226 227 296 + 675 5 293 226 227 371 + 676 4 293 226 227 296 + 677 9 16 56 152 83 + 678 10 16 56 152 296 + 679 10 20 83 152 296 + 680 9 20 83 152 56 + 681 3 83 152 296 227 + 682 3 83 152 296 200 + 683 3 56 152 296 227 + 684 3 56 152 296 200 + 685 6 344 200 296 227 + 686 2 344 200 296 152 + 687 1 197 200 296 227 + 688 8 197 200 296 152 + 689 1 226 227 296 200 + 690 8 226 227 296 152 + 691 6 371 227 296 200 + 692 2 371 227 296 152 + 693 3 251 306 162 107 + 694 3 251 306 162 90 + 695 3 234 306 162 107 + 696 3 234 306 162 90 + 697 3 250 307 163 106 + 698 3 250 307 163 91 + 699 3 235 307 163 106 + 700 3 235 307 163 91 + 701 4 306 234 235 307 + 702 5 306 234 235 379 + 703 5 378 234 235 307 + 704 7 378 234 235 379 + 705 7 394 250 251 395 + 706 5 394 250 251 306 + 707 5 307 250 251 395 + 708 4 307 250 251 306 + 709 8 162 306 234 235 + 710 2 162 306 234 378 + 711 1 251 306 234 235 + 712 6 251 306 234 378 + 713 8 162 306 251 250 + 714 2 162 306 251 395 + 715 1 234 306 251 250 + 716 6 234 306 251 395 + 717 1 250 307 235 234 + 718 6 250 307 235 379 + 719 8 163 307 235 234 + 720 2 163 307 235 379 + 721 2 394 250 307 163 + 722 6 394 250 307 235 + 723 8 251 250 307 163 + 724 1 251 250 307 235 + 725 5 329 185 188 284 + 726 7 329 185 188 332 + 727 4 281 185 188 284 + 728 5 281 185 188 332 + 729 9 4 44 140 65 + 730 10 4 44 140 284 + 731 10 14 65 140 284 + 732 9 14 65 140 44 + 733 3 209 284 140 65 + 734 3 209 284 140 44 + 735 3 188 284 140 65 + 736 3 188 284 140 44 + 737 1 209 284 188 185 + 738 6 209 284 188 332 + 739 8 140 284 188 185 + 740 2 140 284 188 332 + 741 2 353 209 284 140 + 742 6 353 209 284 188 + 743 8 212 209 284 140 + 744 1 212 209 284 188 + 745 3 279 322 178 135 + 746 3 279 322 178 122 + 747 3 266 322 178 135 + 748 3 266 322 178 122 + 749 4 322 266 267 323 + 750 5 322 266 267 411 + 751 5 410 266 267 323 + 752 7 410 266 267 411 + 753 4 323 278 279 322 + 754 5 323 278 279 423 + 755 5 422 278 279 322 + 756 7 422 278 279 423 + 757 8 178 322 266 267 + 758 2 178 322 266 410 + 759 1 279 322 266 267 + 760 6 279 322 266 410 + 761 8 178 322 279 278 + 762 2 178 322 279 423 + 763 1 266 322 279 278 + 764 6 266 322 279 423 + 765 1 278 323 267 266 + 766 6 278 323 267 411 + 767 8 179 323 267 266 + 768 2 179 323 267 411 + 769 6 267 323 278 422 + 770 1 267 323 278 279 + 771 2 179 323 278 422 + 772 8 179 323 278 279 + 773 3 267 323 179 123 + 774 3 267 323 179 134 + 775 3 278 323 179 123 + 776 3 278 323 179 134 + 777 11 9 33 1 41 + 778 11 9 33 1 132 + 779 11 9 33 1 78 + 780 11 31 33 1 41 + 781 11 31 33 1 132 + 782 11 31 33 1 78 + 783 11 17 33 1 41 + 784 11 17 33 1 132 + 785 11 17 33 1 78 + 786 11 1 33 9 49 + 787 11 1 33 9 68 + 788 11 1 33 9 101 + 789 11 31 33 9 49 + 790 11 31 33 9 68 + 791 11 31 33 9 101 + 792 11 17 33 9 49 + 793 11 17 33 9 68 + 794 11 17 33 9 101 + 795 11 1 33 17 57 + 796 11 1 33 17 112 + 797 11 1 33 17 88 + 798 11 9 33 17 57 + 799 11 9 33 17 112 + 800 11 9 33 17 88 + 801 11 31 33 17 57 + 802 11 31 33 17 112 + 803 11 31 33 17 88 + 804 11 1 33 31 116 + 805 11 1 33 31 127 + 806 11 1 33 31 95 + 807 11 9 33 31 116 + 808 11 9 33 31 127 + 809 11 9 33 31 95 + 810 11 17 33 31 116 + 811 11 17 33 31 127 + 812 11 17 33 31 95 + 813 10 31 95 167 311 + 814 9 31 95 167 112 + 815 9 95 167 112 17 + 816 10 311 167 112 17 + 817 9 9 101 173 116 + 818 10 9 101 173 317 + 819 9 31 116 173 101 + 820 10 31 116 173 317 + 821 9 31 127 183 132 + 822 10 31 127 183 327 + 823 9 1 132 183 127 + 824 10 1 132 183 327 + 825 5 333 189 192 288 + 826 7 333 189 192 336 + 827 4 285 189 192 288 + 828 5 285 189 192 336 + 829 5 285 214 215 359 + 830 4 285 214 215 288 + 831 7 358 214 215 359 + 832 5 358 214 215 288 + 833 10 8 48 144 288 + 834 9 8 48 144 71 + 835 10 12 71 144 288 + 836 9 12 71 144 48 + 837 3 71 144 288 192 + 838 3 71 144 288 215 + 839 3 48 144 288 192 + 840 3 48 144 288 215 + 841 1 189 192 288 215 + 842 8 189 192 288 144 + 843 6 336 192 288 215 + 844 2 336 192 288 144 + 845 1 214 215 288 192 + 846 8 214 215 288 144 + 847 6 359 215 288 192 + 848 2 359 215 288 144 + 849 5 353 209 212 281 + 850 7 353 209 212 356 + 851 4 284 209 212 281 + 852 5 284 209 212 356 + 853 10 281 137 41 1 + 854 9 68 137 41 1 + 855 9 41 137 68 9 + 856 10 281 137 68 9 + 857 3 185 281 137 41 + 858 3 185 281 137 68 + 859 3 212 281 137 41 + 860 3 212 281 137 68 + 861 2 137 281 185 329 + 862 8 137 281 185 188 + 863 6 212 281 185 329 + 864 1 212 281 185 188 + 865 8 137 281 212 209 + 866 2 137 281 212 356 + 867 1 185 281 212 209 + 868 6 185 281 212 356 + 869 3 261 314 170 117 + 870 3 261 314 170 98 + 871 3 242 314 170 117 + 872 3 242 314 170 98 + 873 4 314 242 243 315 + 874 5 314 242 243 387 + 875 5 386 242 243 315 + 876 7 386 242 243 387 + 877 4 314 261 264 315 + 878 5 314 261 264 408 + 879 5 405 261 264 315 + 880 7 405 261 264 408 + 881 8 170 314 242 243 + 882 2 170 314 242 386 + 883 1 261 314 242 243 + 884 6 261 314 242 386 + 885 2 170 314 261 405 + 886 8 170 314 261 264 + 887 6 242 314 261 405 + 888 1 242 314 261 264 + 889 8 171 315 243 242 + 890 2 171 315 243 387 + 891 1 264 315 243 242 + 892 6 264 315 243 387 + 893 1 243 315 264 261 + 894 6 243 315 264 408 + 895 8 171 315 264 261 + 896 2 171 315 264 408 + 897 3 243 315 171 99 + 898 3 243 315 171 120 + 899 3 264 315 171 99 + 900 3 264 315 171 120 + 901 11 129 8 40 26 + 902 11 129 8 40 12 + 903 11 129 8 40 22 + 904 11 75 8 40 26 + 905 11 75 8 40 12 + 906 11 75 8 40 22 + 907 11 48 8 40 26 + 908 11 48 8 40 12 + 909 11 48 8 40 22 + 910 11 98 12 40 26 + 911 11 98 12 40 22 + 912 11 98 12 40 8 + 913 11 52 12 40 26 + 914 11 52 12 40 22 + 915 11 52 12 40 8 + 916 11 71 12 40 26 + 917 11 71 12 40 22 + 918 11 71 12 40 8 + 919 11 107 22 40 26 + 920 11 107 22 40 12 + 921 11 107 22 40 8 + 922 11 85 22 40 26 + 923 11 85 22 40 12 + 924 11 85 22 40 8 + 925 11 62 22 40 26 + 926 11 62 22 40 12 + 927 11 62 22 40 8 + 928 11 90 26 40 12 + 929 11 90 26 40 22 + 930 11 90 26 40 8 + 931 11 117 26 40 12 + 932 11 117 26 40 22 + 933 11 117 26 40 8 + 934 11 126 26 40 12 + 935 11 126 26 40 22 + 936 11 126 26 40 8 + 937 10 306 162 90 26 + 938 9 107 162 90 26 + 939 10 306 162 107 22 + 940 9 90 162 107 22 + 941 10 314 170 98 12 + 942 9 117 170 98 12 + 943 10 314 170 117 26 + 944 9 98 170 117 26 + 945 9 129 182 126 26 + 946 10 326 182 126 26 + 947 10 8 129 182 326 + 948 9 8 129 182 126 + 949 11 29 35 3 74 + 950 11 29 35 3 43 + 951 11 29 35 3 134 + 952 11 13 35 3 74 + 953 11 13 35 3 43 + 954 11 13 35 3 134 + 955 11 23 35 3 74 + 956 11 23 35 3 43 + 957 11 23 35 3 134 + 958 11 29 35 13 66 + 959 11 29 35 13 53 + 960 11 29 35 13 99 + 961 11 3 35 13 66 + 962 11 3 35 13 53 + 963 11 3 35 13 99 + 964 11 23 35 13 66 + 965 11 23 35 13 53 + 966 11 23 35 13 99 + 967 11 29 35 23 82 + 968 11 29 35 23 110 + 969 11 29 35 23 63 + 970 11 3 35 23 82 + 971 11 3 35 23 110 + 972 11 3 35 23 63 + 973 11 13 35 23 82 + 974 11 13 35 23 110 + 975 11 13 35 23 63 + 976 11 3 35 29 93 + 977 11 3 35 29 123 + 978 11 3 35 29 120 + 979 11 13 35 29 93 + 980 11 13 35 29 123 + 981 11 13 35 29 120 + 982 11 23 35 29 93 + 983 11 23 35 29 123 + 984 11 23 35 29 120 + 985 10 29 93 165 309 + 986 9 29 93 165 110 + 987 9 93 165 110 23 + 988 10 309 165 110 23 + 989 10 315 171 99 13 + 990 9 120 171 99 13 + 991 10 315 171 120 29 + 992 9 99 171 120 29 + 993 10 323 179 123 29 + 994 9 134 179 123 29 + 995 10 323 179 134 3 + 996 9 123 179 134 3 + 997 3 249 308 164 105 + 998 3 249 308 164 92 + 999 3 236 308 164 105 + 1000 3 236 308 164 92 + 1001 3 233 305 161 89 + 1002 3 233 305 161 108 + 1003 3 252 305 161 89 + 1004 3 252 305 161 108 + 1005 5 305 233 236 380 + 1006 4 305 233 236 308 + 1007 7 377 233 236 380 + 1008 5 377 233 236 308 + 1009 5 393 249 252 305 + 1010 7 393 249 252 396 + 1011 4 308 249 252 305 + 1012 5 308 249 252 396 + 1013 2 161 305 233 377 + 1014 8 161 305 233 236 + 1015 6 252 305 233 377 + 1016 1 252 305 233 236 + 1017 8 161 305 252 249 + 1018 2 161 305 252 396 + 1019 1 233 305 252 249 + 1020 6 233 305 252 396 + 1021 1 249 308 236 233 + 1022 6 249 308 236 380 + 1023 8 164 308 236 233 + 1024 2 164 308 236 380 + 1025 2 393 249 308 164 + 1026 6 393 249 308 236 + 1027 8 252 249 308 164 + 1028 1 252 249 308 236 + 1029 10 12 52 148 292 + 1030 9 12 52 148 85 + 1031 10 292 148 85 22 + 1032 9 52 148 85 22 + 1033 3 229 292 148 52 + 1034 3 229 292 148 85 + 1035 3 196 292 148 52 + 1036 3 196 292 148 85 + 1037 8 148 292 196 193 + 1038 2 148 292 196 340 + 1039 1 229 292 196 193 + 1040 6 229 292 196 340 + 1041 2 148 292 229 373 + 1042 8 148 292 229 232 + 1043 6 196 292 229 373 + 1044 1 196 292 229 232 + 1045 5 289 193 196 340 + 1046 4 289 193 196 292 + 1047 7 337 193 196 340 + 1048 5 337 193 196 292 + 1049 5 349 205 208 304 + 1050 7 349 205 208 352 + 1051 4 301 205 208 304 + 1052 5 301 205 208 352 + 1053 9 24 64 160 73 + 1054 10 24 64 160 304 + 1055 10 4 73 160 304 + 1056 9 4 73 160 64 + 1057 3 73 160 304 217 + 1058 3 73 160 304 208 + 1059 3 64 160 304 217 + 1060 3 64 160 304 208 + 1061 1 205 208 304 217 + 1062 8 205 208 304 160 + 1063 6 352 208 304 217 + 1064 2 352 208 304 160 + 1065 6 361 217 304 208 + 1066 2 361 217 304 160 + 1067 1 220 217 304 208 + 1068 8 220 217 304 160 + 1069 9 69 142 46 6 + 1070 10 286 142 46 6 + 1071 9 16 69 142 46 + 1072 10 16 69 142 286 + 1073 3 213 286 142 69 + 1074 3 213 286 142 46 + 1075 3 190 286 142 69 + 1076 3 190 286 142 46 + 1077 1 213 286 190 191 + 1078 6 213 286 190 334 + 1079 8 142 286 190 191 + 1080 2 142 286 190 334 + 1081 2 357 213 286 142 + 1082 6 357 213 286 190 + 1083 8 216 213 286 142 + 1084 1 216 213 286 190 + 1085 5 282 186 187 331 + 1086 4 282 186 187 283 + 1087 7 330 186 187 331 + 1088 5 330 186 187 283 + 1089 9 66 139 43 3 + 1090 10 283 139 43 3 + 1091 9 13 66 139 43 + 1092 10 13 66 139 283 + 1093 3 210 283 139 66 + 1094 3 210 283 139 43 + 1095 3 187 283 139 66 + 1096 3 187 283 139 43 + 1097 1 210 283 187 186 + 1098 6 210 283 187 331 + 1099 8 139 283 187 186 + 1100 2 139 283 187 331 + 1101 2 354 210 283 139 + 1102 6 354 210 283 187 + 1103 8 211 210 283 139 + 1104 1 211 210 283 187 + 1105 9 13 53 149 82 + 1106 10 13 53 149 293 + 1107 9 23 82 149 53 + 1108 10 23 82 149 293 + 1109 3 82 149 293 197 + 1110 3 82 149 293 226 + 1111 3 53 149 293 197 + 1112 3 53 149 293 226 + 1113 2 341 197 293 149 + 1114 6 341 197 293 226 + 1115 8 200 197 293 149 + 1116 1 200 197 293 226 + 1117 6 370 226 293 197 + 1118 2 370 226 293 149 + 1119 1 227 226 293 197 + 1120 8 227 226 293 149 + 1121 11 28 38 6 135 + 1122 11 28 38 6 46 + 1123 11 28 38 6 79 + 1124 11 20 38 6 135 + 1125 11 20 38 6 46 + 1126 11 20 38 6 79 + 1127 11 16 38 6 135 + 1128 11 16 38 6 46 + 1129 11 16 38 6 79 + 1130 11 28 38 16 104 + 1131 11 28 38 16 69 + 1132 11 28 38 16 56 + 1133 11 20 38 16 104 + 1134 11 20 38 16 69 + 1135 11 20 38 16 56 + 1136 11 6 38 16 104 + 1137 11 6 38 16 69 + 1138 11 6 38 16 56 + 1139 11 105 20 38 28 + 1140 11 105 20 38 6 + 1141 11 105 20 38 16 + 1142 11 83 20 38 28 + 1143 11 83 20 38 6 + 1144 11 83 20 38 16 + 1145 11 60 20 38 28 + 1146 11 60 20 38 6 + 1147 11 60 20 38 16 + 1148 11 113 28 38 20 + 1149 11 113 28 38 6 + 1150 11 113 28 38 16 + 1151 11 122 28 38 20 + 1152 11 122 28 38 6 + 1153 11 122 28 38 16 + 1154 11 92 28 38 20 + 1155 11 92 28 38 6 + 1156 11 92 28 38 16 + 1157 9 28 92 164 105 + 1158 10 28 92 164 308 + 1159 9 20 105 164 92 + 1160 10 20 105 164 308 + 1161 9 16 104 176 113 + 1162 10 16 104 176 320 + 1163 9 28 113 176 104 + 1164 10 28 113 176 320 + 1165 10 322 178 122 28 + 1166 9 135 178 122 28 + 1167 10 322 178 135 6 + 1168 9 122 178 135 6 + 1169 9 81 150 54 14 + 1170 10 294 150 54 14 + 1171 9 24 81 150 54 + 1172 10 24 81 150 294 + 1173 3 225 294 150 81 + 1174 3 225 294 150 54 + 1175 3 198 294 150 81 + 1176 3 198 294 150 54 + 1177 6 225 294 198 342 + 1178 1 225 294 198 199 + 1179 2 150 294 198 342 + 1180 8 150 294 198 199 + 1181 2 369 225 294 150 + 1182 6 369 225 294 198 + 1183 8 228 225 294 150 + 1184 1 228 225 294 198 + 1185 9 77 154 58 18 + 1186 10 298 154 58 18 + 1187 9 58 154 77 2 + 1188 10 298 154 77 2 + 1189 3 221 298 154 58 + 1190 3 221 298 154 77 + 1191 3 202 298 154 58 + 1192 3 202 298 154 77 + 1193 2 154 298 202 346 + 1194 8 154 298 202 203 + 1195 6 221 298 202 346 + 1196 1 221 298 202 203 + 1197 2 154 298 221 365 + 1198 8 154 298 221 224 + 1199 6 202 298 221 365 + 1200 1 202 298 221 224 + 1201 11 32 34 2 42 + 1202 11 32 34 2 131 + 1203 11 32 34 2 77 + 1204 11 18 34 2 42 + 1205 11 18 34 2 131 + 1206 11 18 34 2 77 + 1207 11 10 34 2 42 + 1208 11 10 34 2 131 + 1209 11 10 34 2 77 + 1210 11 2 34 10 50 + 1211 11 2 34 10 67 + 1212 11 2 34 10 102 + 1213 11 32 34 10 50 + 1214 11 32 34 10 67 + 1215 11 32 34 10 102 + 1216 11 18 34 10 50 + 1217 11 18 34 10 67 + 1218 11 18 34 10 102 + 1219 11 2 34 18 58 + 1220 11 2 34 18 111 + 1221 11 2 34 18 87 + 1222 11 32 34 18 58 + 1223 11 32 34 18 111 + 1224 11 32 34 18 87 + 1225 11 10 34 18 58 + 1226 11 10 34 18 111 + 1227 11 10 34 18 87 + 1228 11 2 34 32 115 + 1229 11 2 34 32 128 + 1230 11 2 34 32 96 + 1231 11 18 34 32 115 + 1232 11 18 34 32 128 + 1233 11 18 34 32 96 + 1234 11 10 34 32 115 + 1235 11 10 34 32 128 + 1236 11 10 34 32 96 + 1237 9 32 96 168 111 + 1238 10 32 96 168 312 + 1239 9 18 111 168 96 + 1240 10 18 111 168 312 + 1241 9 115 174 102 10 + 1242 10 318 174 102 10 + 1243 10 32 115 174 318 + 1244 9 32 115 174 102 + 1245 9 32 128 184 131 + 1246 10 32 128 184 328 + 1247 9 2 131 184 128 + 1248 10 2 131 184 328 + +Impropers + + 1 2 137 41 281 68 + 2 2 138 42 67 282 + 3 2 139 66 43 283 + 4 2 140 65 284 44 + 5 2 141 285 45 70 + 6 2 142 69 46 286 + 7 2 143 287 47 72 + 8 2 144 288 71 48 + 9 2 145 49 289 88 + 10 2 146 50 87 290 + 11 2 147 51 291 86 + 12 2 148 292 52 85 + 13 2 149 82 53 293 + 14 2 150 81 54 294 + 15 2 151 84 295 55 + 16 2 152 83 296 56 + 17 2 153 57 297 78 + 18 2 154 58 77 298 + 19 2 155 59 299 80 + 20 2 156 300 60 79 + 21 2 157 301 76 61 + 22 2 158 75 62 302 + 23 2 159 74 303 63 + 24 2 160 73 304 64 + 25 2 161 89 305 108 + 26 2 162 306 107 90 + 27 2 163 106 91 307 + 28 2 164 105 92 308 + 29 2 165 93 309 110 + 30 2 166 109 310 94 + 31 2 167 95 311 112 + 32 2 168 96 111 312 + 33 2 169 97 313 118 + 34 2 170 314 117 98 + 35 2 171 315 99 120 + 36 2 172 316 100 119 + 37 2 173 101 116 317 + 38 2 174 115 318 102 + 39 2 175 114 319 103 + 40 2 176 113 104 320 + 41 2 177 121 321 136 + 42 2 178 322 135 122 + 43 2 179 323 123 134 + 44 2 180 124 324 133 + 45 2 181 125 325 130 + 46 2 182 129 326 126 + 47 2 183 132 127 327 + 48 2 184 131 128 328 + 49 3 185 329 281 188 + 50 3 186 282 187 330 + 51 3 187 186 331 283 + 52 3 188 185 284 332 + 53 3 189 333 285 192 + 54 3 190 286 191 334 + 55 3 191 335 190 287 + 56 3 192 288 189 336 + 57 3 193 289 337 196 + 58 3 194 290 195 338 + 59 3 195 194 339 291 + 60 3 196 193 340 292 + 61 3 197 293 341 200 + 62 3 198 342 199 294 + 63 3 199 343 198 295 + 64 3 200 344 197 296 + 65 3 201 297 345 204 + 66 3 202 346 203 298 + 67 3 203 202 347 299 + 68 3 204 201 300 348 + 69 3 205 349 301 208 + 70 3 206 350 207 302 + 71 3 207 351 206 303 + 72 3 208 304 205 352 + 73 3 209 353 284 212 + 74 3 210 354 211 283 + 75 3 211 210 355 282 + 76 3 212 209 281 356 + 77 3 213 357 286 216 + 78 3 214 285 358 215 + 79 3 215 214 359 288 + 80 3 216 213 287 360 + 81 3 217 361 220 304 + 82 3 218 362 219 303 + 83 3 219 218 363 302 + 84 3 220 217 364 301 + 85 3 221 298 365 224 + 86 3 222 297 366 223 + 87 3 223 300 222 367 + 88 3 224 299 221 368 + 89 3 225 369 228 294 + 90 3 226 370 227 293 + 91 3 227 226 371 296 + 92 3 228 225 372 295 + 93 3 229 292 373 232 + 94 3 230 291 374 231 + 95 3 231 290 230 375 + 96 3 232 289 229 376 + 97 3 233 305 377 236 + 98 3 234 306 235 378 + 99 3 235 234 307 379 + 100 3 236 233 380 308 + 101 3 237 381 309 240 + 102 3 238 310 239 382 + 103 3 239 383 238 311 + 104 3 240 384 237 312 + 105 3 241 313 385 244 + 106 3 242 314 243 386 + 107 3 243 242 315 387 + 108 3 244 241 316 388 + 109 3 245 317 389 248 + 110 3 246 318 247 390 + 111 3 247 246 319 391 + 112 3 248 320 245 392 + 113 3 249 393 308 252 + 114 3 250 394 251 307 + 115 3 251 250 395 306 + 116 3 252 249 305 396 + 117 3 253 397 310 256 + 118 3 254 309 398 255 + 119 3 255 254 399 312 + 120 3 256 253 311 400 + 121 3 257 401 260 320 + 122 3 258 402 259 319 + 123 3 259 258 403 318 + 124 3 260 257 404 317 + 125 3 261 314 405 264 + 126 3 262 313 406 263 + 127 3 263 316 262 407 + 128 3 264 315 261 408 + 129 3 265 321 409 268 + 130 3 266 322 267 410 + 131 3 267 266 323 411 + 132 3 268 265 324 412 + 133 3 269 413 325 272 + 134 3 270 326 271 414 + 135 3 271 270 327 415 + 136 3 272 416 269 328 + 137 3 273 417 276 326 + 138 3 274 418 275 325 + 139 3 275 274 419 328 + 140 3 276 273 420 327 + 141 3 277 324 421 280 + 142 3 278 323 422 279 + 143 3 279 322 278 423 + 144 3 280 321 277 424 + 145 1 281 137 185 212 + 146 1 282 138 211 186 + 147 1 283 210 139 187 + 148 1 284 209 140 188 + 149 1 285 189 141 214 + 150 1 286 213 142 190 + 151 1 287 191 143 216 + 152 1 288 192 215 144 + 153 1 289 145 193 232 + 154 1 290 146 231 194 + 155 1 291 147 195 230 + 156 1 292 148 229 196 + 157 1 293 197 149 226 + 158 1 294 225 150 198 + 159 1 295 228 199 151 + 160 1 296 227 200 152 + 161 1 297 153 201 222 + 162 1 298 154 221 202 + 163 1 299 155 203 224 + 164 1 300 156 223 204 + 165 1 301 205 220 157 + 166 1 302 219 158 206 + 167 1 303 218 207 159 + 168 1 304 217 208 160 + 169 1 305 161 233 252 + 170 1 306 162 251 234 + 171 1 307 250 163 235 + 172 1 308 249 164 236 + 173 1 309 237 165 254 + 174 1 310 253 166 238 + 175 1 311 239 167 256 + 176 1 312 240 255 168 + 177 1 313 241 169 262 + 178 1 314 170 261 242 + 179 1 315 243 171 264 + 180 1 316 172 263 244 + 181 1 317 245 260 173 + 182 1 318 259 246 174 + 183 1 319 258 247 175 + 184 1 320 257 176 248 + 185 1 321 265 177 280 + 186 1 322 178 279 266 + 187 1 323 267 278 179 + 188 1 324 268 180 277 + 189 1 325 269 181 274 + 190 1 326 273 270 182 + 191 1 327 276 271 183 + 192 1 328 275 184 272 diff --git a/examples/USER/yaff/mof5/lammps.in b/examples/USER/yaff/mof5/lammps.in new file mode 100644 index 0000000000000000000000000000000000000000..1decfd77e4d67fea6a4b3ff9019ecf0a8641425e --- /dev/null +++ b/examples/USER/yaff/mof5/lammps.in @@ -0,0 +1,42 @@ +######################################### +#General settings +######################################### +units real +atom_style full +boundary p p p +dielectric 1 + +######################################### +#Force field and system specification +######################################### +special_bonds lj 0.000000 0.000000 1.000000 coul 1.000000 1.000000 1.000000 +pair_style mm3/switch3/coulgauss/long 12.0000 4.0000 +pair_modify table 16 # Accuracy of the table used for real space electrostatics +pair_modify mix arithmetic +pair_modify tail no +bond_style mm3 +angle_style hybrid cross mm3 +dihedral_style fourier +improper_style distharm +box tilt large + +read_data lammps.data # Data file location +kspace_style pppm 0.0000001 # Ewald accuracy +neighbor 2.0 multi +neigh_modify every 2 delay 4 check yes + +######################################### +#Output settings +######################################### +thermo 10 # Provide output every n steps +thermo_style custom step time etotal ke temp pe emol evdwl ecoul elong etail vol press +thermo_modify line multi format float %20.12f + +######################################### +#Sampling options +######################################### +timestep 0.5 # in femtosecond +velocity all create 0.0 5 # initial temperature in Kelvin and random seed +fix 1 all npt temp 300.0 300.0 100.0 tri 1.0 1.0 1000.0 tchain 3 mtk yes nreset 1000 +fix_modify 1 energy yes # Add thermo/barostat contributions to energy +run 100 diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index c452042cfecbd5730a2a35cfda2c5fc64e5eaecf..998e75fabe80ffa69b54c655ee42917ff47b0fc4 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -256,7 +256,6 @@ void PairSNAPKokkos<DeviceType>::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify<DeviceType>(); k_eatom.template sync<LMPHostType>(); @@ -275,8 +274,8 @@ void PairSNAPKokkos<DeviceType>::compute(int eflag_in, int vflag_in) // free duplicated memory if (need_dup) { - dup_f = decltype(dup_f)(); - dup_vatom = decltype(dup_vatom)(); + dup_f = decltype(dup_f)(); + dup_vatom = decltype(dup_vatom)(); } } @@ -453,6 +452,13 @@ void PairSNAPKokkos<DeviceType>::operator() (TagPairSNAP<NEIGHFLAG,EVFLAG>,const //t4 += timer.seconds(); timer.reset(); team.team_barrier(); + if (quadraticflag) { + my_sna.compute_bi(team); + team.team_barrier(); + my_sna.copy_bi2bvec(team); + team.team_barrier(); + } + // for neighbors of I within cutoff: // compute dUi/drj and dBi/drj // Fij = dEi/dRj = -dEi/dRi => add to Fi, subtract from Fj @@ -472,10 +478,6 @@ void PairSNAPKokkos<DeviceType>::operator() (TagPairSNAP<NEIGHFLAG,EVFLAG>,const my_sna.compute_dbidrj(team); //t7 += timer2.seconds(); timer2.reset(); my_sna.copy_dbi2dbvec(team); - if (quadraticflag) { - my_sna.compute_bi(team); - my_sna.copy_bi2bvec(team); - } Kokkos::single(Kokkos::PerThread(team), [&] (){ F_FLOAT fij[3]; @@ -536,10 +538,10 @@ void PairSNAPKokkos<DeviceType>::operator() (TagPairSNAP<NEIGHFLAG,EVFLAG>,const a_f(j,1) -= fij[1]; a_f(j,2) -= fij[2]; - // tally per-atom virial contribution + // tally global and per-atom virial contribution if (EVFLAG) { - if (vflag) { + if (vflag_either) { v_tally_xyz<NEIGHFLAG>(ev,i,j, fij[0],fij[1],fij[2], -my_sna.rij(jj,0),-my_sna.rij(jj,1), @@ -554,11 +556,13 @@ void PairSNAPKokkos<DeviceType>::operator() (TagPairSNAP<NEIGHFLAG,EVFLAG>,const // tally energy contribution if (EVFLAG) { - if (eflag) { + if (eflag_either) { if (!quadraticflag) { my_sna.compute_bi(team); + team.team_barrier(); my_sna.copy_bi2bvec(team); + team.team_barrier(); } // E = beta.B + 0.5*B^t.alpha.B @@ -566,14 +570,15 @@ void PairSNAPKokkos<DeviceType>::operator() (TagPairSNAP<NEIGHFLAG,EVFLAG>,const // coeff[k] = alpha_ii or // coeff[k] = alpha_ij = alpha_ji, j != i - if (team.team_rank() == 0) - Kokkos::single(Kokkos::PerThread(team), [&] () { + Kokkos::single(Kokkos::PerTeam(team), [&] () { + + // evdwl = energy of atom I, sum over coeffs_k * Bi_k - // evdwl = energy of atom I, sum over coeffs_k * Bi_k + double evdwl = d_coeffi[0]; - double evdwl = d_coeffi[0]; + // linear contributions + // could use thread vector range on this loop - // linear contributions for (int k = 1; k <= ncoeff; k++) evdwl += d_coeffi[k]*my_sna.bvec[k-1]; @@ -589,11 +594,10 @@ void PairSNAPKokkos<DeviceType>::operator() (TagPairSNAP<NEIGHFLAG,EVFLAG>,const } } } -// ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); - if (eflag_either) { - if (eflag_global) ev.evdwl += evdwl; - if (eflag_atom) d_eatom[i] += evdwl; - } + + //ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); + if (eflag_global) ev.evdwl += evdwl; + if (eflag_atom) d_eatom[i] += evdwl; }); } } diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 25561fef5d0decf60f4ab6d74d3e8cf20693c9ff..6a19c578293665060cc38a8eec41a10a7747b3c0 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -327,29 +327,40 @@ void SNAKokkos<DeviceType>::compute_bi(const typename Kokkos::TeamPolicy<DeviceT clock_gettime(CLOCK_REALTIME, &starttime); #endif - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,idxj_max), + Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxj_full_max), [&] (const int& idx) { - const int j1 = idxj(idx).j1; - const int j2 = idxj(idx).j2; - const int j = idxj(idx).j; - double b_j1_j2_j = 0.0; + const int j1 = idxj_full(idx).j1; + const int j2 = idxj_full(idx).j2; + const int j = idxj_full(idx).j; - for(int mb = 0; 2*mb < j; mb++) - for(int ma = 0; ma <= j; ma++) { - b_j1_j2_j += + const int bound = (j+2)/2; + double b_j1_j2_j = 0.0; + double b_j1_j2_j_temp = 0.0; + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,(j+1)*bound), + [&] (const int mbma, double& sum) { + //for(int mb = 0; 2*mb <= j; mb++) + //for(int ma = 0; ma <= j; ma++) { + const int ma = mbma%(j+1); + const int mb = mbma/(j+1); + if (2*mb == j) return; + sum += uarraytot_r(j,ma,mb) * zarray_r(j1,j2,j,mb,ma) + uarraytot_i(j,ma,mb) * zarray_i(j1,j2,j,mb,ma); - } // end loop over ma, mb + },b_j1_j2_j_temp); // end loop over ma, mb + b_j1_j2_j += b_j1_j2_j_temp; // For j even, special treatment for middle column if (j%2 == 0) { const int mb = j/2; - for(int ma = 0; ma < mb; ma++) { - b_j1_j2_j += + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team, mb), + [&] (const int ma, double& sum) { + //for(int ma = 0; ma < mb; ma++) { + sum += uarraytot_r(j,ma,mb) * zarray_r(j1,j2,j,mb,ma) + uarraytot_i(j,ma,mb) * zarray_i(j1,j2,j,mb,ma); - } + },b_j1_j2_j_temp); // end loop over ma + b_j1_j2_j += b_j1_j2_j_temp; const int ma = mb; b_j1_j2_j += @@ -357,11 +368,13 @@ void SNAKokkos<DeviceType>::compute_bi(const typename Kokkos::TeamPolicy<DeviceT uarraytot_i(j,ma,mb) * zarray_i(j1,j2,j,mb,ma))*0.5; } - b_j1_j2_j *= 2.0; - if (bzero_flag) - b_j1_j2_j -= bzero[j]; + Kokkos::single(Kokkos::PerThread(team), [&] () { + b_j1_j2_j *= 2.0; + if (bzero_flag) + b_j1_j2_j -= bzero[j]; - barray(j1,j2,j) = b_j1_j2_j; + barray(j1,j2,j) = b_j1_j2_j; + }); }); //} // end loop over j //} // end loop over j1, j2 @@ -1028,6 +1041,8 @@ void SNAKokkos<DeviceType>::create_team_scratch_arrays(const typename Kokkos::Te uarraytot_i_a = uarraytot_i = t_sna_3d(team.team_scratch(1),jdim,jdim,jdim); zarray_r = t_sna_5d(team.team_scratch(1),jdim,jdim,jdim,jdim,jdim); zarray_i = t_sna_5d(team.team_scratch(1),jdim,jdim,jdim,jdim,jdim); + bvec = Kokkos::View<double*, Kokkos::LayoutRight, DeviceType>(team.team_scratch(1),ncoeff); + barray = t_sna_3d(team.team_scratch(1),jdim,jdim,jdim); rij = t_sna_2d(team.team_scratch(1),nmax,3); rcutij = t_sna_1d(team.team_scratch(1),nmax); @@ -1046,6 +1061,8 @@ T_INT SNAKokkos<DeviceType>::size_team_scratch_arrays() { size += t_sna_3d::shmem_size(jdim,jdim,jdim); // uarraytot_i_a size += t_sna_5d::shmem_size(jdim,jdim,jdim,jdim,jdim); // zarray_r size += t_sna_5d::shmem_size(jdim,jdim,jdim,jdim,jdim); // zarray_i + size += Kokkos::View<double*, Kokkos::LayoutRight, DeviceType>::shmem_size(ncoeff); // bvec + size += t_sna_3d::shmem_size(jdim,jdim,jdim); // barray size += t_sna_2d::shmem_size(nmax,3); // rij size += t_sna_1d::shmem_size(nmax); // rcutij @@ -1062,8 +1079,6 @@ KOKKOS_INLINE_FUNCTION void SNAKokkos<DeviceType>::create_thread_scratch_arrays(const typename Kokkos::TeamPolicy<DeviceType>::member_type& team) { int jdim = twojmax + 1; - bvec = Kokkos::View<double*, Kokkos::LayoutRight, DeviceType>(team.thread_scratch(1),ncoeff); - barray = t_sna_3d(team.thread_scratch(1),jdim,jdim,jdim); dbvec = Kokkos::View<double*[3], Kokkos::LayoutRight, DeviceType>(team.thread_scratch(1),ncoeff); dbarray = t_sna_4d(team.thread_scratch(1),jdim,jdim,jdim); @@ -1079,8 +1094,6 @@ inline T_INT SNAKokkos<DeviceType>::size_thread_scratch_arrays() { T_INT size = 0; int jdim = twojmax + 1; - size += Kokkos::View<double*, Kokkos::LayoutRight, DeviceType>::shmem_size(ncoeff); // bvec - size += t_sna_3d::shmem_size(jdim,jdim,jdim); // barray size += Kokkos::View<double*[3], Kokkos::LayoutRight, DeviceType>::shmem_size(ncoeff); // dbvec size += t_sna_4d::shmem_size(jdim,jdim,jdim); // dbarray diff --git a/src/MOLECULE/improper_umbrella.cpp b/src/MOLECULE/improper_umbrella.cpp index 31d7cba54dca313ae2016fe477b9882e0787f515..8ed3d3a84cd6437a6c0894f9d7140c231234aa75 100644 --- a/src/MOLECULE/improper_umbrella.cpp +++ b/src/MOLECULE/improper_umbrella.cpp @@ -189,17 +189,17 @@ void ImproperUmbrella::compute(int eflag, int vflag) dahy = ary-c*hry; dahz = arz-c*hrz; - f2[0] = (dhay*vb1z - dhaz*vb1y)*rar; - f2[1] = (dhaz*vb1x - dhax*vb1z)*rar; - f2[2] = (dhax*vb1y - dhay*vb1x)*rar; + f2[0] = (dhay*vb1z - dhaz*vb1y)*rar*a; + f2[1] = (dhaz*vb1x - dhax*vb1z)*rar*a; + f2[2] = (dhax*vb1y - dhay*vb1x)*rar*a; - f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar; - f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar; - f3[2] = (-dhax*vb2y + dhay*vb2x)*rar; + f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar*a; + f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar*a; + f3[2] = (-dhax*vb2y + dhay*vb2x)*rar*a; - f4[0] = dahx*rhr; - f4[1] = dahy*rhr; - f4[2] = dahz*rhr; + f4[0] = dahx*rhr*a; + f4[1] = dahy*rhr*a; + f4[2] = dahz*rhr*a; f1[0] = -(f2[0] + f3[0] + f4[0]); f1[1] = -(f2[1] + f3[1] + f4[1]); @@ -208,27 +208,27 @@ void ImproperUmbrella::compute(int eflag, int vflag) // apply force to each of 4 atoms if (newton_bond || i1 < nlocal) { - f[i1][0] += f1[0]*a; - f[i1][1] += f1[1]*a; - f[i1][2] += f1[2]*a; + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; } if (newton_bond || i2 < nlocal) { - f[i2][0] += f3[0]*a; - f[i2][1] += f3[1]*a; - f[i2][2] += f3[2]*a; + f[i2][0] += f3[0]; + f[i2][1] += f3[1]; + f[i2][2] += f3[2]; } if (newton_bond || i3 < nlocal) { - f[i3][0] += f2[0]*a; - f[i3][1] += f2[1]*a; - f[i3][2] += f2[2]*a; + f[i3][0] += f2[0]; + f[i3][1] += f2[1]; + f[i3][2] += f2[2]; } if (newton_bond || i4 < nlocal) { - f[i4][0] += f4[0]*a; - f[i4][1] += f4[1]*a; - f[i4][2] += f4[2]*a; + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; } if (evflag) { @@ -247,7 +247,7 @@ void ImproperUmbrella::compute(int eflag, int vflag) vb3y = x[i4][1] - x[i3][1]; vb3z = x[i4][2] - x[i3][2]; - ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f3,f4, + ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f2,f4, vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z); } } diff --git a/src/Makefile b/src/Makefile index d7b5a9e702d439f9e591364c9561fd9da10fa917..1f0a294e8a71ecb494d885583270db0f8359e5e5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -64,7 +64,7 @@ PACKUSER = user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ user-mgpt user-misc user-mofff user-molfile \ user-netcdf user-omp user-phonon user-plumed user-ptm user-qmmm \ user-qtb user-quip user-reaxc user-scafacos user-smd user-smtbq \ - user-sdpd user-sph user-tally user-uef user-vtk + user-sdpd user-sph user-tally user-uef user-vtk user-yaff PACKLIB = compress gpu kim kokkos latte message mpiio mscg poems \ python voronoi \ diff --git a/src/USER-CGDNA/README b/src/USER-CGDNA/README index d71f3b7a43acc9df6f7c56f1077a991ce7e762e0..8e3f16372c99321c631aa98d8efca39c778f6d2e 100644 --- a/src/USER-CGDNA/README +++ b/src/USER-CGDNA/README @@ -74,10 +74,10 @@ pair_oxdna_coaxstk.cpp: coaxial stacking interaction between nucleotides pair_oxdna2_excv.cpp, pair_oxdna2_stk.cpp, pair_oxdna2_coaxstk.cpp: - corresponding pair styles in oxDNA2 (see [3]) + corresponding pair styles in oxDNA2 (see [3]) pair_oxdna2_dh.cpp: Debye-Hueckel electrostatic interaction between backbone - sites + sites ** Fixes provided by this package: diff --git a/src/USER-DRUDE/pair_lj_cut_thole_long.cpp b/src/USER-DRUDE/pair_lj_cut_thole_long.cpp index ce5d3a92a9002af04c1e3cbae013bc0c605424a9..f9da40dfb9888e6ccfd12768f202d040a61b5445 100644 --- a/src/USER-DRUDE/pair_lj_cut_thole_long.cpp +++ b/src/USER-DRUDE/pair_lj_cut_thole_long.cpp @@ -683,7 +683,7 @@ void *PairLJCutTholeLong::extract(const char *str, int &dim) { dim = 0; if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; - dim = 6; + dim = 2; if (strcmp(str,"epsilon") == 0) return (void *) epsilon; if (strcmp(str,"sigma") == 0) return (void *) sigma; if (strcmp(str,"scale") == 0) return (void *) scale; diff --git a/src/USER-DRUDE/pair_thole.cpp b/src/USER-DRUDE/pair_thole.cpp index 6901ad1f2d6e64ae3686c4eb381730f099d6347d..5a518d819bb9248eebe284a1decd4a1f1678dcdd 100644 --- a/src/USER-DRUDE/pair_thole.cpp +++ b/src/USER-DRUDE/pair_thole.cpp @@ -414,7 +414,7 @@ double PairThole::single(int i, int j, int itype, int jtype, void *PairThole::extract(const char *str, int &dim) { - dim = 4; + dim = 2; if (strcmp(str,"scale") == 0) return (void *) scale; if (strcmp(str,"polar") == 0) return (void *) polar; if (strcmp(str,"thole") == 0) return (void *) thole; diff --git a/src/USER-MISC/compute_entropy_atom.cpp b/src/USER-MISC/compute_entropy_atom.cpp index 4946bc437e7960bba7e9f054d298d191c69f2711..0367d7fe6d9e7605186e79fe0cdac4c05352f2c6 100644 --- a/src/USER-MISC/compute_entropy_atom.cpp +++ b/src/USER-MISC/compute_entropy_atom.cpp @@ -65,6 +65,7 @@ ComputeEntropyAtom(LAMMPS *lmp, int narg, char **arg) : if (cutoff <= 0.0) error->all(FLERR,"Illegal compute entropy/atom" " command; cutoff must be positive"); + cutoff2 = 0.; avg_flag = 0; local_flag = 0; @@ -137,15 +138,20 @@ void ComputeEntropyAtom::init() if (count > 1 && comm->me == 0) error->warning(FLERR,"More than one compute entropy/atom"); - // need a full neighbor list with neighbors of the ghost atoms - + // Request neighbor list int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; neighbor->requests[irequest]->compute = 1; neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; neighbor->requests[irequest]->occasional = 0; - neighbor->requests[irequest]->ghost = 1; + if (avg_flag) { + // need a full neighbor list with neighbors of the ghost atoms + neighbor->requests[irequest]->ghost = 1; + } else { + // need a full neighbor list + neighbor->requests[irequest]->ghost = 0; + } } diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index d705cba1cabbe3bb1a4b0d39bd724e6d1b629265..b9c357f3635abe9bf81bfcacb64491acb440e6fe 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -58,7 +58,8 @@ static const char cite_fix_bond_react[] = #define BIG 1.0e20 #define DELTA 16 #define MAXLINE 256 -#define MAXGUESS 20 +#define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm +#define MAXCONARGS 5 // max # of arguments for any type of constraint // various statuses of superimpose algorithm: // ACCEPT: site successfully matched to pre-reacted template @@ -161,10 +162,15 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : memory->create(unreacted_mol,nreacts,"bond/react:unreacted_mol"); memory->create(reacted_mol,nreacts,"bond/react:reacted_mol"); memory->create(fraction,nreacts,"bond/react:fraction"); + memory->create(max_rxn,nreacts,"bond/react:max_rxn"); + memory->create(nlocalskips,nreacts,"bond/react:nlocalskips"); + memory->create(nghostlyskips,nreacts,"bond/react:nghostlyskips"); memory->create(seed,nreacts,"bond/react:seed"); memory->create(limit_duration,nreacts,"bond/react:limit_duration"); memory->create(stabilize_steps_flag,nreacts,"bond/react:stabilize_steps_flag"); memory->create(update_edges_flag,nreacts,"bond/react:update_edges_flag"); + memory->create(nconstraints,nreacts,"bond/react:nconstraints"); + memory->create(constraints,nreacts,MAXCONARGS,"bond/react:constraints"); memory->create(iatomtype,nreacts,"bond/react:iatomtype"); memory->create(jatomtype,nreacts,"bond/react:jatomtype"); memory->create(ibonding,nreacts,"bond/react:ibonding"); @@ -179,8 +185,10 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nreacts; i++) { fraction[i] = 1; seed[i] = 12345; + max_rxn[i] = INT_MAX; stabilize_steps_flag[i] = 0; update_edges_flag[i] = 0; + nconstraints[i] = 0; // set default limit duration to 60 timesteps limit_duration[i] = 60; reaction_count[i] = 0; @@ -244,6 +252,13 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (seed[rxn] <= 0) error->all(FLERR,"Illegal fix bond/react command: " "probability seed must be positive"); iarg += 3; + } else if (strcmp(arg[iarg],"max_rxn") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/react command: " + "'max_rxn' has too few arguments"); + max_rxn[rxn] = force->inumeric(FLERR,arg[iarg+1]); + if (max_rxn[rxn] < 0) error->all(FLERR,"Illegal fix bond/react command: " + "'max_rxn' cannot be negative"); + iarg += 2; } else if (strcmp(arg[iarg],"stabilize_steps") == 0) { if (stabilization_flag == 0) error->all(FLERR,"Stabilize_steps keyword " "used without stabilization keyword"); @@ -403,6 +418,9 @@ FixBondReact::~FixBondReact() memory->destroy(reacted_mol); memory->destroy(fraction); memory->destroy(seed); + memory->destroy(max_rxn); + memory->destroy(nlocalskips); + memory->destroy(nghostlyskips); memory->destroy(limit_duration); memory->destroy(stabilize_steps_flag); memory->destroy(update_edges_flag); @@ -674,6 +692,8 @@ void FixBondReact::post_integrate() reaction_count[i] = 0; local_rxn_count[i] = 0; ghostly_rxn_count[i] = 0; + nlocalskips[i] = 0; + nghostlyskips[i] = 0; } if (nevery_check) { @@ -745,6 +765,7 @@ void FixBondReact::post_integrate() int j; for (rxnID = 0; rxnID < nreacts; rxnID++) { + if (max_rxn[rxnID] <= reaction_count_total[rxnID]) continue; for (int ii = 0; ii < nall; ii++) { partner[ii] = 0; finalpartner[ii] = 0; @@ -941,6 +962,7 @@ void FixBondReact::far_partner() delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; + domain->minimum_image(delx,dely,delz); // ghost location fix rsq = delx*delx + dely*dely + delz*delz; if (rsq >= cutsq[rxnID][1] || rsq <= cutsq[rxnID][0]) { @@ -1122,7 +1144,7 @@ void FixBondReact::superimpose_algorithm() } } - if (status == ACCEPT) { // reaction site found successfully! + if (status == ACCEPT && check_constraints()) { // reaction site found successfully! glove_ghostcheck(); } hang_catch++; @@ -1142,14 +1164,43 @@ void FixBondReact::superimpose_algorithm() MPI_Allreduce(&local_rxn_count[0],&reaction_count[0],nreacts,MPI_INT,MPI_SUM,world); - for (int i = 0; i < nreacts; i++) - reaction_count_total[i] += reaction_count[i]; - - // this assumes compute_vector is called from process 0 - // ...so doesn't bother to bcast ghostly_rxn_count if (me == 0) for (int i = 0; i < nreacts; i++) - reaction_count_total[i] += ghostly_rxn_count[i]; + reaction_count_total[i] += reaction_count[i] + ghostly_rxn_count[i]; + + MPI_Bcast(&reaction_count_total[0], nreacts, MPI_INT, 0, world); + + // check if we overstepped our reaction limit + for (int i = 0; i < nreacts; i++) { + if (reaction_count_total[i] > max_rxn[i]) { + // let's randomly choose rxns to skip, unbiasedly from local and ghostly + int local_rxncounts[nprocs]; + int all_localskips[nprocs]; + MPI_Gather(&local_rxn_count[i],1,MPI_INT,local_rxncounts,1,MPI_INT,0,world); + if (me == 0) { + int overstep = reaction_count_total[i] - max_rxn[i]; + int delta_rxn = reaction_count[i] + ghostly_rxn_count[i]; + int rxn_by_proc[delta_rxn]; + for (int j = 0; j < delta_rxn; j++) + rxn_by_proc[j] = -1; // corresponds to ghostly + int itemp = 0; + for (int j = 0; j < nprocs; j++) + for (int k = 0; k < local_rxn_count[j]; k++) + rxn_by_proc[itemp++] = j; + std::random_shuffle(&rxn_by_proc[0],&rxn_by_proc[delta_rxn]); + for (int j = 0; j < nprocs; j++) + all_localskips[j] = 0; + nghostlyskips[i] = 0; + for (int j = 0; j < overstep; j++) { + if (rxn_by_proc[j] == -1) nghostlyskips[i]++; + else all_localskips[rxn_by_proc[j]]++; + } + } + reaction_count_total[i] = max_rxn[i]; + MPI_Scatter(&all_localskips[0],1,MPI_INT,&nlocalskips[i],1,MPI_INT,0,world); + MPI_Bcast(&nghostlyskips[i],1,MPI_INT,0,world); + } + } // this updates topology next step next_reneighbor = update->ntimestep; @@ -1526,6 +1577,32 @@ void FixBondReact::ring_check() } } +/* ---------------------------------------------------------------------- +evaluate constraints: return 0 if any aren't satisfied +------------------------------------------------------------------------- */ + +int FixBondReact::check_constraints() +{ + tagint atom1,atom2; + double delx,dely,delz,rsq; + + double **x = atom->x; + + for (int i = 0; i < nconstraints[rxnID]; i++) { + if (constraints[rxnID][0] == 0) { // 'distance' type + atom1 = atom->map(glove[(int) constraints[rxnID][1]-1][1]); + atom2 = atom->map(glove[(int) constraints[rxnID][2]-1][1]); + delx = x[atom1][0] - x[atom2][0]; + dely = x[atom1][1] - x[atom2][1]; + delz = x[atom1][2] - x[atom2][2]; + domain->minimum_image(delx,dely,delz); // ghost location fix + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < constraints[rxnID][3] || rsq > constraints[rxnID][4]) return 0; + } + } + return 1; +} + /* ---------------------------------------------------------------------- Get xspecials for current molecule templates ------------------------------------------------------------------------- */ @@ -1945,19 +2022,19 @@ void FixBondReact::glove_ghostcheck() // 'ghosts of another' indication taken from comm->sendlist int ghostly = 0; - if (comm->style == 0) { - for (int i = 0; i < onemol->natoms; i++) { - int ilocal = atom->map(glove[i][1]); - if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) { - ghostly = 1; - break; + #if !defined(MPI_STUBS) + if (comm->style == 0) { + for (int i = 0; i < onemol->natoms; i++) { + int ilocal = atom->map(glove[i][1]); + if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) { + ghostly = 1; + break; + } } - } - } else { - #if !defined(MPI_STUBS) + } else { ghostly = 1; - #endif - } + } + #endif if (ghostly == 1) { ghostly_mega_glove[0][ghostly_num_mega] = rxnID; @@ -2092,18 +2169,26 @@ void FixBondReact::update_everything() memory->create(update_mega_glove,max_natoms+1,MAX(local_num_mega,global_megasize),"bond/react:update_mega_glove"); for (int pass = 0; pass < 2; pass++) { - + update_num_mega = 0; + int iskip[nreacts]; + for (int i = 0; i < nreacts; i++) iskip[i] = 0; if (pass == 0) { - update_num_mega = local_num_mega; - for (int i = 0; i < update_num_mega; i++) { + for (int i = 0; i < local_num_mega; i++) { + rxnID = local_mega_glove[0][i]; + // reactions already shuffled from dedup procedure, so can skip first N + if (iskip[rxnID]++ < nlocalskips[rxnID]) continue; for (int j = 0; j < max_natoms+1; j++) - update_mega_glove[j][i] = local_mega_glove[j][i]; + update_mega_glove[j][update_num_mega] = local_mega_glove[j][i]; + update_num_mega++; } } else if (pass == 1) { - update_num_mega = global_megasize; for (int i = 0; i < global_megasize; i++) { + rxnID = global_mega_glove[0][i]; + // reactions already shuffled from dedup procedure, so can skip first N + if (iskip[rxnID]++ < nghostlyskips[rxnID]) continue; for (int j = 0; j < max_natoms+1; j++) - update_mega_glove[j][i] = global_mega_glove[j][i]; + update_mega_glove[j][update_num_mega] = global_mega_glove[j][i]; + update_num_mega++; } } @@ -2623,6 +2708,7 @@ void FixBondReact::read(int myrxn) else if (strstr(line,"equivalences")) sscanf(line,"%d",&nequivalent); else if (strstr(line,"customIDs")) sscanf(line,"%d",&ncustom); else if (strstr(line,"deleteIDs")) sscanf(line,"%d",&ndelete); + else if (strstr(line,"constraints")) sscanf(line,"%d",&nconstraints[myrxn]); else break; } @@ -2654,6 +2740,8 @@ void FixBondReact::read(int myrxn) CustomEdges(line, myrxn); } else if (strcmp(keyword,"DeleteIDs") == 0) { DeleteAtoms(line, myrxn); + } else if (strcmp(keyword,"Constraints") == 0) { + Constraints(line, myrxn); } else error->one(FLERR,"Unknown section in superimpose file"); parse_keyword(1,line,keyword); @@ -2729,6 +2817,27 @@ void FixBondReact::DeleteAtoms(char *line, int myrxn) } } +void FixBondReact::Constraints(char *line, int myrxn) +{ + double tmp[MAXCONARGS]; + int n = strlen("distance") + 1; + char *constraint_type = new char[n]; + for (int i = 0; i < nconstraints[myrxn]; i++) { + readline(line); + sscanf(line,"%s",constraint_type); + if (strcmp(constraint_type,"distance") == 0) { + constraints[myrxn][0] = 0; // 0 = 'distance' ...maybe use another enum eventually + sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]); + constraints[myrxn][1] = tmp[0]; + constraints[myrxn][2] = tmp[1]; + constraints[myrxn][3] = tmp[2]*tmp[2]; // using square of distance + constraints[myrxn][4] = tmp[3]*tmp[3]; + } else + error->one(FLERR,"Illegal constraint type in 'Constraints' section of map file"); + } + delete [] constraint_type; +} + void FixBondReact::open(char *file) { fp = fopen(file,"r"); diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index d6e7b785e7f8662d8d4eca52d5171d3a7a77be3c..74d53b8f21265ff7726ee3971001a64e6de49a11 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -55,11 +55,14 @@ class FixBondReact : public Fix { int *iatomtype,*jatomtype; int *seed; double **cutsq,*fraction; + int *max_rxn,*nlocalskips,*nghostlyskips; tagint lastcheck; int stabilization_flag; int custom_exclude_flag; int *stabilize_steps_flag; int *update_edges_flag; + int *nconstraints; + double **constraints; int status; int *groupbits; @@ -140,6 +143,7 @@ class FixBondReact : public Fix { void Equivalences(char *,int); void CustomEdges(char *,int); void DeleteAtoms(char *,int); + void Constraints(char *,int); void make_a_guess (); void neighbor_loop(); @@ -147,6 +151,7 @@ class FixBondReact : public Fix { void crosscheck_the_neighbor(); void inner_crosscheck_loop(); void ring_check(); + int check_constraints(); void open(char *); void readline(char *); diff --git a/src/USER-MISC/improper_fourier.cpp b/src/USER-MISC/improper_fourier.cpp index 11478d08eab135f70baa9ab6d69a762b4a302672..927478fa1a9245f640e40562d84033001bd2afba 100644 --- a/src/USER-MISC/improper_fourier.cpp +++ b/src/USER-MISC/improper_fourier.cpp @@ -206,17 +206,17 @@ void ImproperFourier::addone(const int &i1,const int &i2,const int &i3,const int dahy = ary-c*hry; dahz = arz-c*hrz; - f2[0] = (dhay*vb1z - dhaz*vb1y)*rar; - f2[1] = (dhaz*vb1x - dhax*vb1z)*rar; - f2[2] = (dhax*vb1y - dhay*vb1x)*rar; + f2[0] = (dhay*vb1z - dhaz*vb1y)*rar*a; + f2[1] = (dhaz*vb1x - dhax*vb1z)*rar*a; + f2[2] = (dhax*vb1y - dhay*vb1x)*rar*a; - f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar; - f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar; - f3[2] = (-dhax*vb2y + dhay*vb2x)*rar; + f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar*a; + f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar*a; + f3[2] = (-dhax*vb2y + dhay*vb2x)*rar*a; - f4[0] = dahx*rhr; - f4[1] = dahy*rhr; - f4[2] = dahz*rhr; + f4[0] = dahx*rhr*a; + f4[1] = dahy*rhr*a; + f4[2] = dahz*rhr*a; f1[0] = -(f2[0] + f3[0] + f4[0]); f1[1] = -(f2[1] + f3[1] + f4[1]); @@ -225,32 +225,32 @@ void ImproperFourier::addone(const int &i1,const int &i2,const int &i3,const int // apply force to each of 4 atoms if (newton_bond || i1 < nlocal) { - f[i1][0] += f1[0]*a; - f[i1][1] += f1[1]*a; - f[i1][2] += f1[2]*a; + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; } if (newton_bond || i2 < nlocal) { - f[i2][0] += f3[0]*a; - f[i2][1] += f3[1]*a; - f[i2][2] += f3[2]*a; + f[i2][0] += f3[0]; + f[i2][1] += f3[1]; + f[i2][2] += f3[2]; } if (newton_bond || i3 < nlocal) { - f[i3][0] += f2[0]*a; - f[i3][1] += f2[1]*a; - f[i3][2] += f2[2]*a; + f[i3][0] += f2[0]; + f[i3][1] += f2[1]; + f[i3][2] += f2[2]; } if (newton_bond || i4 < nlocal) { - f[i4][0] += f4[0]*a; - f[i4][1] += f4[1]*a; - f[i4][2] += f4[2]*a; + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; } if (evflag) - ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f3,f4, - vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z); + ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f1,f2,f4, + -vb1x,-vb1y,-vb1z,vb2x-vb1x,vb2y-vb1y,vb2z-vb1z,vb3x-vb2x,vb3y-vb2y,vb3z-vb2z); } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-NETCDF/dump_netcdf.cpp b/src/USER-NETCDF/dump_netcdf.cpp index e4c0115793482efc11e54bd784f664bea89293d9..f297ef45eb8a175084d8d31dac499958a078603a 100644 --- a/src/USER-NETCDF/dump_netcdf.cpp +++ b/src/USER-NETCDF/dump_netcdf.cpp @@ -281,6 +281,9 @@ void DumpNetCDF::openfile() // get total number of atoms ntotalgr = group->count(igroup); + for (int i = 0; i < DUMP_NC_MAX_DIMS; i++) { + vector_dim[i] = -1; + } if (filewriter) { if (append_flag && !multifile && access(filecurrent, F_OK) != -1) { @@ -294,9 +297,6 @@ void DumpNetCDF::openfile() // dimensions NCERRX( nc_inq_dimid(ncid, NC_FRAME_STR, &frame_dim), NC_FRAME_STR ); - NCERRX( nc_inq_dimid(ncid, NC_SPATIAL_STR, &spatial_dim), - NC_SPATIAL_STR ); - NCERRX( nc_inq_dimid(ncid, NC_VOIGT_STR, &Voigt_dim), NC_VOIGT_STR ); NCERRX( nc_inq_dimid(ncid, NC_ATOM_STR, &atom_dim), NC_ATOM_STR ); NCERRX( nc_inq_dimid(ncid, NC_CELL_SPATIAL_STR, &cell_spatial_dim), NC_CELL_SPATIAL_STR ); @@ -304,6 +304,26 @@ void DumpNetCDF::openfile() NC_CELL_ANGULAR_STR ); NCERRX( nc_inq_dimid(ncid, NC_LABEL_STR, &label_dim), NC_LABEL_STR ); + for (int i = 0; i < n_perat; i++) { + int dims = perat[i].dims; + if (vector_dim[dims] < 0) { + char dimstr[1024]; + if (dims == 3) { + strcpy(dimstr, NC_SPATIAL_STR); + } + else if (dims == 6) { + strcpy(dimstr, NC_VOIGT_STR); + } + else { + sprintf(dimstr, "vec%i", dims); + } + if (dims != 1) { + NCERRX( nc_inq_dimid(ncid, dimstr, &vector_dim[dims]), + dimstr ); + } + } + } + // default variables NCERRX( nc_inq_varid(ncid, NC_SPATIAL_STR, &spatial_var), NC_SPATIAL_STR ); @@ -320,7 +340,6 @@ void DumpNetCDF::openfile() NCERRX( nc_inq_varid(ncid, NC_CELL_ANGLES_STR, &cell_angles_var), NC_CELL_ANGLES_STR); - // variables specified in the input file for (int i = 0; i < n_perat; i++) { NCERRX( nc_inq_varid(ncid, perat[i].name, &perat[i].var), perat[i].name ); @@ -359,10 +378,6 @@ void DumpNetCDF::openfile() // dimensions NCERRX( nc_def_dim(ncid, NC_FRAME_STR, NC_UNLIMITED, &frame_dim), NC_FRAME_STR ); - NCERRX( nc_def_dim(ncid, NC_SPATIAL_STR, 3, &spatial_dim), - NC_SPATIAL_STR ); - NCERRX( nc_def_dim(ncid, NC_VOIGT_STR, 6, &Voigt_dim), - NC_VOIGT_STR ); NCERRX( nc_def_dim(ncid, NC_ATOM_STR, ntotalgr, &atom_dim), NC_ATOM_STR ); NCERRX( nc_def_dim(ncid, NC_CELL_SPATIAL_STR, 3, &cell_spatial_dim), @@ -372,13 +387,33 @@ void DumpNetCDF::openfile() NCERRX( nc_def_dim(ncid, NC_LABEL_STR, 10, &label_dim), NC_LABEL_STR ); + for (int i = 0; i < n_perat; i++) { + int dims = perat[i].dims; + if (vector_dim[dims] < 0) { + char dimstr[1024]; + if (dims == 3) { + strcpy(dimstr, NC_SPATIAL_STR); + } + else if (dims == 6) { + strcpy(dimstr, NC_VOIGT_STR); + } + else { + sprintf(dimstr, "vec%i", dims); + } + if (dims != 1) { + NCERRX( nc_def_dim(ncid, dimstr, dims, &vector_dim[dims]), + dimstr ); + } + } + } + // default variables - dims[0] = spatial_dim; + dims[0] = vector_dim[3]; NCERRX( nc_def_var(ncid, NC_SPATIAL_STR, NC_CHAR, 1, dims, &spatial_var), NC_SPATIAL_STR ); NCERRX( nc_def_var(ncid, NC_CELL_SPATIAL_STR, NC_CHAR, 1, dims, &cell_spatial_var), NC_CELL_SPATIAL_STR ); - dims[0] = spatial_dim; + dims[0] = vector_dim[3]; dims[1] = label_dim; NCERRX( nc_def_var(ncid, NC_CELL_ANGULAR_STR, NC_CHAR, 2, dims, &cell_angular_var), NC_CELL_ANGULAR_STR ); @@ -400,7 +435,7 @@ void DumpNetCDF::openfile() // variables specified in the input file dims[0] = frame_dim; dims[1] = atom_dim; - dims[2] = spatial_dim; + dims[2] = vector_dim[3]; for (int i = 0; i < n_perat; i++) { nc_type xtype; @@ -419,53 +454,27 @@ void DumpNetCDF::openfile() if (perat[i].constant) { // this quantity will only be written once - if (perat[i].dims == 6) { - // this is a tensor in Voigt notation - dims[2] = Voigt_dim; - NCERRX( nc_def_var(ncid, perat[i].name, xtype, 2, dims+1, - &perat[i].var), perat[i].name ); - } - else if (perat[i].dims == 3) { - // this is a vector, we need to store x-, y- and z-coordinates - dims[2] = spatial_dim; - NCERRX( nc_def_var(ncid, perat[i].name, xtype, 2, dims+1, - &perat[i].var), perat[i].name ); - } - else if (perat[i].dims == 1) { + if (perat[i].dims == 1) { NCERRX( nc_def_var(ncid, perat[i].name, xtype, 1, dims+1, - &perat[i].var), perat[i].name ); + &perat[i].var), perat[i].name ); } else { - char errstr[1024]; - sprintf(errstr, "%i dimensions for '%s'. Not sure how to write " - "this to the NetCDF trajectory file.", perat[i].dims, - perat[i].name); - error->all(FLERR,errstr); + // this is a vector + dims[1] = vector_dim[perat[i].dims]; + NCERRX( nc_def_var(ncid, perat[i].name, xtype, 2, dims+1, + &perat[i].var), perat[i].name ); } } else { - if (perat[i].dims == 6) { - // this is a tensor in Voigt notation - dims[2] = Voigt_dim; - NCERRX( nc_def_var(ncid, perat[i].name, xtype, 3, dims, - &perat[i].var), perat[i].name ); - } - else if (perat[i].dims == 3) { - // this is a vector, we need to store x-, y- and z-coordinates - dims[2] = spatial_dim; - NCERRX( nc_def_var(ncid, perat[i].name, xtype, 3, dims, - &perat[i].var), perat[i].name ); - } - else if (perat[i].dims == 1) { + if (perat[i].dims == 1) { NCERRX( nc_def_var(ncid, perat[i].name, xtype, 2, dims, &perat[i].var), perat[i].name ); } else { - char errstr[1024]; - sprintf(errstr, "%i dimensions for '%s'. Not sure how to write " - "this to the NetCDF trajectory file.", perat[i].dims, - perat[i].name); - error->all(FLERR,errstr); + // this is a vector + dims[2] = vector_dim[perat[i].dims]; + NCERRX( nc_def_var(ncid, perat[i].name, xtype, 3, dims, + &perat[i].var), perat[i].name ); } } } diff --git a/src/USER-NETCDF/dump_netcdf.h b/src/USER-NETCDF/dump_netcdf.h index f97fd58409fa952ebe44e0bcb97ccd776227d619..f74e95be386fef261c2ad1ad1cce4a615c634446 100644 --- a/src/USER-NETCDF/dump_netcdf.h +++ b/src/USER-NETCDF/dump_netcdf.h @@ -72,8 +72,7 @@ class DumpNetCDF : public DumpCustom { int ncid; int frame_dim; - int spatial_dim; - int Voigt_dim; + int vector_dim[DUMP_NC_MAX_DIMS]; int atom_dim; int cell_spatial_dim; int cell_angular_dim; diff --git a/src/USER-NETCDF/dump_netcdf_mpiio.cpp b/src/USER-NETCDF/dump_netcdf_mpiio.cpp index 733fae10f33d1c536d7ea79e451bb4d856785434..026a6eaa3aadc7c41db1f3b4e70c917e4fa70f8e 100644 --- a/src/USER-NETCDF/dump_netcdf_mpiio.cpp +++ b/src/USER-NETCDF/dump_netcdf_mpiio.cpp @@ -278,6 +278,9 @@ void DumpNetCDFMPIIO::openfile() // get total number of atoms ntotalgr = group->count(igroup); + for (int i = 0; i < DUMP_NC_MPIIO_MAX_DIMS; i++) { + vector_dim[i] = -1; + } if (append_flag && !multifile && access(filecurrent, F_OK) != -1) { // Fixme! Perform checks if dimensions and variables conform with @@ -294,9 +297,6 @@ void DumpNetCDFMPIIO::openfile() // dimensions NCERRX( ncmpi_inq_dimid(ncid, NC_FRAME_STR, &frame_dim), NC_FRAME_STR ); - NCERRX( ncmpi_inq_dimid(ncid, NC_SPATIAL_STR, &spatial_dim), - NC_SPATIAL_STR ); - NCERRX( ncmpi_inq_dimid(ncid, NC_VOIGT_STR, &Voigt_dim), NC_VOIGT_STR ); NCERRX( ncmpi_inq_dimid(ncid, NC_ATOM_STR, &atom_dim), NC_ATOM_STR ); NCERRX( ncmpi_inq_dimid(ncid, NC_CELL_SPATIAL_STR, &cell_spatial_dim), NC_CELL_SPATIAL_STR ); @@ -304,6 +304,26 @@ void DumpNetCDFMPIIO::openfile() NC_CELL_ANGULAR_STR ); NCERRX( ncmpi_inq_dimid(ncid, NC_LABEL_STR, &label_dim), NC_LABEL_STR ); + for (int i = 0; i < n_perat; i++) { + int dims = perat[i].dims; + if (vector_dim[dims] < 0) { + char dimstr[1024]; + if (dims == 3) { + strcpy(dimstr, NC_SPATIAL_STR); + } + else if (dims == 6) { + strcpy(dimstr, NC_VOIGT_STR); + } + else { + sprintf(dimstr, "vec%i", dims); + } + if (dims != 1) { + NCERRX( ncmpi_inq_dimid(ncid, dimstr, &vector_dim[dims]), + dimstr ); + } + } + } + // default variables NCERRX( ncmpi_inq_varid(ncid, NC_SPATIAL_STR, &spatial_var), NC_SPATIAL_STR ); @@ -358,10 +378,6 @@ void DumpNetCDFMPIIO::openfile() // dimensions NCERRX( ncmpi_def_dim(ncid, NC_FRAME_STR, NC_UNLIMITED, &frame_dim), NC_FRAME_STR ); - NCERRX( ncmpi_def_dim(ncid, NC_SPATIAL_STR, 3, &spatial_dim), - NC_SPATIAL_STR ); - NCERRX( ncmpi_def_dim(ncid, NC_VOIGT_STR, 6, &Voigt_dim), - NC_VOIGT_STR ); NCERRX( ncmpi_def_dim(ncid, NC_ATOM_STR, ntotalgr, &atom_dim), NC_ATOM_STR ); NCERRX( ncmpi_def_dim(ncid, NC_CELL_SPATIAL_STR, 3, &cell_spatial_dim), @@ -371,13 +387,33 @@ void DumpNetCDFMPIIO::openfile() NCERRX( ncmpi_def_dim(ncid, NC_LABEL_STR, 10, &label_dim), NC_LABEL_STR ); + for (int i = 0; i < n_perat; i++) { + int dims = perat[i].dims; + if (vector_dim[dims] < 0) { + char dimstr[1024]; + if (dims == 3) { + strcpy(dimstr, NC_SPATIAL_STR); + } + else if (dims == 6) { + strcpy(dimstr, NC_VOIGT_STR); + } + else { + sprintf(dimstr, "vec%i", dims); + } + if (dims != 1) { + NCERRX( ncmpi_def_dim(ncid, dimstr, dims, &vector_dim[dims]), + dimstr ); + } + } + } + // default variables - dims[0] = spatial_dim; + dims[0] = vector_dim[3]; NCERRX( ncmpi_def_var(ncid, NC_SPATIAL_STR, NC_CHAR, 1, dims, &spatial_var), NC_SPATIAL_STR ); NCERRX( ncmpi_def_var(ncid, NC_CELL_SPATIAL_STR, NC_CHAR, 1, dims, &cell_spatial_var), NC_CELL_SPATIAL_STR ); - dims[0] = spatial_dim; + dims[0] = vector_dim[3]; dims[1] = label_dim; NCERRX( ncmpi_def_var(ncid, NC_CELL_ANGULAR_STR, NC_CHAR, 2, dims, &cell_angular_var), NC_CELL_ANGULAR_STR ); @@ -399,7 +435,7 @@ void DumpNetCDFMPIIO::openfile() // variables specified in the input file dims[0] = frame_dim; dims[1] = atom_dim; - dims[2] = spatial_dim; + dims[2] = vector_dim[3]; for (int i = 0; i < n_perat; i++) { nc_type xtype; @@ -416,28 +452,15 @@ void DumpNetCDFMPIIO::openfile() xtype = NC_FLOAT; } - if (perat[i].dims == 6) { - // this is a tensor in Voigt notation - dims[2] = Voigt_dim; - NCERRX( ncmpi_def_var(ncid, perat[i].name, xtype, 3, dims, - &perat[i].var), perat[i].name ); - } - else if (perat[i].dims == 3) { - // this is a vector, we need to store x-, y- and z-coordinates - dims[2] = spatial_dim; - NCERRX( ncmpi_def_var(ncid, perat[i].name, xtype, 3, dims, - &perat[i].var), perat[i].name ); - } - else if (perat[i].dims == 1) { + if (perat[i].dims == 1) { NCERRX( ncmpi_def_var(ncid, perat[i].name, xtype, 2, dims, &perat[i].var), perat[i].name ); } else { - char errstr[1024]; - sprintf(errstr, "%i dimensions for '%s'. Not sure how to write " - "this to the NetCDF trajectory file.", perat[i].dims, - perat[i].name); - error->all(FLERR,errstr); + // this is a vector + dims[2] = vector_dim[perat[i].dims]; + NCERRX( ncmpi_def_var(ncid, perat[i].name, xtype, 3, dims, + &perat[i].var), perat[i].name ); } } diff --git a/src/USER-NETCDF/dump_netcdf_mpiio.h b/src/USER-NETCDF/dump_netcdf_mpiio.h index 330fa46c045b8eee761dce3958422f9db41bed1a..98ccb87927605182b4d1ffbbb1f99abe23c0e54e 100644 --- a/src/USER-NETCDF/dump_netcdf_mpiio.h +++ b/src/USER-NETCDF/dump_netcdf_mpiio.h @@ -71,8 +71,7 @@ class DumpNetCDFMPIIO : public DumpCustom { int ncid; int frame_dim; - int spatial_dim; - int Voigt_dim; + int vector_dim[DUMP_NC_MPIIO_MAX_DIMS]; int atom_dim; int cell_spatial_dim; int cell_angular_dim; diff --git a/src/USER-OMP/improper_fourier_omp.cpp b/src/USER-OMP/improper_fourier_omp.cpp index aed04003a5eff70550f4d98830145a7557cc22b5..77dd36b64f62d014bf3335178585bed290794b37 100644 --- a/src/USER-OMP/improper_fourier_omp.cpp +++ b/src/USER-OMP/improper_fourier_omp.cpp @@ -239,17 +239,17 @@ void ImproperFourierOMP::add1_thr(const int i1,const int i2, dahy = ary-c*hry; dahz = arz-c*hrz; - f2[0] = (dhay*vb1z - dhaz*vb1y)*rar; - f2[1] = (dhaz*vb1x - dhax*vb1z)*rar; - f2[2] = (dhax*vb1y - dhay*vb1x)*rar; + f2[0] = (dhay*vb1z - dhaz*vb1y)*rar*a; + f2[1] = (dhaz*vb1x - dhax*vb1z)*rar*a; + f2[2] = (dhax*vb1y - dhay*vb1x)*rar*a; - f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar; - f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar; - f3[2] = (-dhax*vb2y + dhay*vb2x)*rar; + f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar*a; + f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar*a; + f3[2] = (-dhax*vb2y + dhay*vb2x)*rar*a; - f4[0] = dahx*rhr; - f4[1] = dahy*rhr; - f4[2] = dahz*rhr; + f4[0] = dahx*rhr*a; + f4[1] = dahy*rhr*a; + f4[2] = dahz*rhr*a; f1[0] = -(f2[0] + f3[0] + f4[0]); f1[1] = -(f2[1] + f3[1] + f4[1]); @@ -258,30 +258,31 @@ void ImproperFourierOMP::add1_thr(const int i1,const int i2, // apply force to each of 4 atoms if (NEWTON_BOND || i1 < nlocal) { - f[i1][0] += f1[0]*a; - f[i1][1] += f1[1]*a; - f[i1][2] += f1[2]*a; + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; } if (NEWTON_BOND || i2 < nlocal) { - f[i2][0] += f3[0]*a; - f[i2][1] += f3[1]*a; - f[i2][2] += f3[2]*a; + f[i2][0] += f3[0]; + f[i2][1] += f3[1]; + f[i2][2] += f3[2]; } if (NEWTON_BOND || i3 < nlocal) { - f[i3][0] += f2[0]*a; - f[i3][1] += f2[1]*a; - f[i3][2] += f2[2]*a; + f[i3][0] += f2[0]; + f[i3][1] += f2[1]; + f[i3][2] += f2[2]; } if (NEWTON_BOND || i4 < nlocal) { - f[i4][0] += f4[0]*a; - f[i4][1] += f4[1]*a; - f[i4][2] += f4[2]*a; + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; } if (EVFLAG) - ev_tally_thr(this,i1,i2,i3,i4,nlocal,NEWTON_BOND,eimproper,f1,f3,f4, - vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,thr); + ev_tally_thr(this,i1,i2,i3,i4,nlocal,NEWTON_BOND,eimproper,f1,f2,f4, + -vb1x,-vb1y,-vb1z,vb2x-vb1x,vb2y-vb1y,vb2z-vb1z,vb3x-vb2x,vb3y-vb2y,vb3z-vb2z,thr); + } diff --git a/src/USER-OMP/improper_umbrella_omp.cpp b/src/USER-OMP/improper_umbrella_omp.cpp index dc11f24a4de084b07b666c08b76271d135218115..69d41176c64287c55a3663f4db259df03bd5b319 100644 --- a/src/USER-OMP/improper_umbrella_omp.cpp +++ b/src/USER-OMP/improper_umbrella_omp.cpp @@ -212,17 +212,17 @@ void ImproperUmbrellaOMP::eval(int nfrom, int nto, ThrData * const thr) dahy = ary-c*hry; dahz = arz-c*hrz; - f2[0] = (dhay*vb1z - dhaz*vb1y)*rar; - f2[1] = (dhaz*vb1x - dhax*vb1z)*rar; - f2[2] = (dhax*vb1y - dhay*vb1x)*rar; + f2[0] = (dhay*vb1z - dhaz*vb1y)*rar*a; + f2[1] = (dhaz*vb1x - dhax*vb1z)*rar*a; + f2[2] = (dhax*vb1y - dhay*vb1x)*rar*a; - f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar; - f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar; - f3[2] = (-dhax*vb2y + dhay*vb2x)*rar; + f3[0] = (-dhay*vb2z + dhaz*vb2y)*rar*a; + f3[1] = (-dhaz*vb2x + dhax*vb2z)*rar*a; + f3[2] = (-dhax*vb2y + dhay*vb2x)*rar*a; - f4[0] = dahx*rhr; - f4[1] = dahy*rhr; - f4[2] = dahz*rhr; + f4[0] = dahx*rhr*a; + f4[1] = dahy*rhr*a; + f4[2] = dahz*rhr*a; f1[0] = -(f2[0] + f3[0] + f4[0]); f1[1] = -(f2[1] + f3[1] + f4[1]); @@ -231,27 +231,27 @@ void ImproperUmbrellaOMP::eval(int nfrom, int nto, ThrData * const thr) // apply force to each of 4 atoms if (NEWTON_BOND || i1 < nlocal) { - f[i1].x += f1[0]*a; - f[i1].y += f1[1]*a; - f[i1].z += f1[2]*a; + f[i1].x += f1[0]; + f[i1].y += f1[1]; + f[i1].z += f1[2]; } if (NEWTON_BOND || i2 < nlocal) { - f[i2].x += f3[0]*a; - f[i2].y += f3[1]*a; - f[i2].z += f3[2]*a; + f[i2].x += f3[0]; + f[i2].y += f3[1]; + f[i2].z += f3[2]; } if (NEWTON_BOND || i3 < nlocal) { - f[i3].x += f2[0]*a; - f[i3].y += f2[1]*a; - f[i3].z += f2[2]*a; + f[i3].x += f2[0]; + f[i3].y += f2[1]; + f[i3].z += f2[2]; } if (NEWTON_BOND || i4 < nlocal) { - f[i4].x += f4[0]*a; - f[i4].y += f4[1]*a; - f[i4].z += f4[2]*a; + f[i4].x += f4[0]; + f[i4].y += f4[1]; + f[i4].z += f4[2]; } if (EVFLAG) { @@ -270,7 +270,7 @@ void ImproperUmbrellaOMP::eval(int nfrom, int nto, ThrData * const thr) vb3y = x[i4].y - x[i3].y; vb3z = x[i4].z - x[i3].z; - ev_tally_thr(this,i1,i2,i3,i4,nlocal,NEWTON_BOND,eimproper,f1,f3,f4, + ev_tally_thr(this,i1,i2,i3,i4,nlocal,NEWTON_BOND,eimproper,f1,f2,f4, vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,thr); } } diff --git a/src/USER-YAFF/README b/src/USER-YAFF/README new file mode 100644 index 0000000000000000000000000000000000000000..4fabe6739066591b0cbc1de0cf0bfbed9afd16f8 --- /dev/null +++ b/src/USER-YAFF/README @@ -0,0 +1,8 @@ +This package implements the styles that are needed to use typical force fields +generated by QuickFF for the simulation of metal-organic frameworks. The +QuickFF methodology is detailed in following papers: + Vanduyfhuys et al., J. Comput. Chem., 36 (13), 1015-1027 (2015) http://dx.doi.org/10.1002/jcc.23877 + Vanduyfhuys et al., J. Comput. Chem., 39 (16), 999-1011 (2018) http://dx.doi.org/10.1002/jcc.25173 +The corresponding software package can be found on http://molmod.github.io/QuickFF + + diff --git a/src/USER-YAFF/angle_cross.cpp b/src/USER-YAFF/angle_cross.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a31931a23b429078628b01ba4c9af3d0a0875667 --- /dev/null +++ b/src/USER-YAFF/angle_cross.cpp @@ -0,0 +1,344 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include <math.h> +#include <string.h> +#include <stdlib.h> +#include "angle_cross.h" +#include "atom.h" +#include "neighbor.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 SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +AngleCross::AngleCross(LAMMPS *lmp) : Angle(lmp) {} + +/* ---------------------------------------------------------------------- */ + +AngleCross::~AngleCross() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(kss); + memory->destroy(kbs0); + memory->destroy(kbs1); + memory->destroy(r00); + memory->destroy(r01); + memory->destroy(theta0); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleCross::compute(int eflag, int vflag) +{ + int i1,i2,i3,n,type; + double delx1,dely1,delz1,delx2,dely2,delz2; + double eangle,f1[3],f3[3]; + double dtheta,dtheta2,dtheta3,dtheta4,de_angle; + double dr1,dr2,tk1,tk2,aa1,aa2,aa11,aa12,aa21,aa22; + double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22,b1,b2; + double vx11,vx12,vy11,vy12,vz11,vz12,vx21,vx22,vy21,vy22,vz21,vz22; + + eangle = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **anglelist = neighbor->anglelist; + int nanglelist = neighbor->nanglelist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nanglelist; n++) { + i1 = anglelist[n][0]; + i2 = anglelist[n][1]; + i3 = anglelist[n][2]; + type = anglelist[n][3]; + + // 1st bond + + delx1 = x[i1][0] - x[i2][0]; + dely1 = x[i1][1] - x[i2][1]; + delz1 = x[i1][2] - x[i2][2]; + + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + // 2nd bond + + delx2 = x[i3][0] - x[i2][0]; + dely2 = x[i3][1] - x[i2][1]; + delz2 = x[i3][2] - x[i2][2]; + + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); + + // angle (cos and sin) + + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + // force & energy for bond-bond term + dr1 = r1 - r00[type]; + dr2 = r2 - r01[type]; + tk1 = kss[type] * dr1; + tk2 = kss[type] * dr2; + + f1[0] = -delx1*tk2/r1; + f1[1] = -dely1*tk2/r1; + f1[2] = -delz1*tk2/r1; + + f3[0] = -delx2*tk1/r2; + f3[1] = -dely2*tk1/r2; + f3[2] = -delz2*tk1/r2; + + if (eflag) eangle = kss[type]*dr1*dr2; + + // force & energy for bond-angle term + dtheta = acos(c) - theta0[type]; + + aa1 = s * dr1 * kbs0[type]; + aa2 = s * dr2 * kbs1[type]; + + aa11 = aa1 * c / rsq1; + aa12 = -aa1 / (r1 * r2); + aa21 = aa2 * c / rsq1; + aa22 = -aa2 / (r1 * r2); + + vx11 = (aa11 * delx1) + (aa12 * delx2); + vx12 = (aa21 * delx1) + (aa22 * delx2); + vy11 = (aa11 * dely1) + (aa12 * dely2); + vy12 = (aa21 * dely1) + (aa22 * dely2); + vz11 = (aa11 * delz1) + (aa12 * delz2); + vz12 = (aa21 * delz1) + (aa22 * delz2); + + aa11 = aa1 * c / rsq2; + aa21 = aa2 * c / rsq2; + + vx21 = (aa11 * delx2) + (aa12 * delx1); + vx22 = (aa21 * delx2) + (aa22 * delx1); + vy21 = (aa11 * dely2) + (aa12 * dely1); + vy22 = (aa21 * dely2) + (aa22 * dely1); + vz21 = (aa11 * delz2) + (aa12 * delz1); + vz22 = (aa21 * delz2) + (aa22 * delz1); + + b1 = kbs0[type] * dtheta / r1; + b2 = kbs1[type] * dtheta / r2; + + f1[0] -= vx11 + b1*delx1 + vx12; + f1[1] -= vy11 + b1*dely1 + vy12; + f1[2] -= vz11 + b1*delz1 + vz12; + + f3[0] -= vx21 + b2*delx2 + vx22; + f3[1] -= vy21 + b2*dely2 + vy22; + f3[2] -= vz21 + b2*delz2 + vz22; + + if (eflag) eangle += kbs0[type]*dr1*dtheta + kbs1[type]*dr2*dtheta; + + // apply force to each of 3 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= f1[0] + f3[0]; + f[i2][1] -= f1[1] + f3[1]; + f[i2][2] -= f1[2] + f3[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (evflag) ev_tally(i1,i2,i3,nlocal,newton_bond,eangle,f1,f3, + delx1,dely1,delz1,delx2,dely2,delz2); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleCross::allocate() +{ + allocated = 1; + int n = atom->nangletypes; + + memory->create(kss,n+1,"angle:kss"); + memory->create(kbs0,n+1,"angle:kbs0"); + memory->create(kbs1,n+1,"angle:kbs1"); + memory->create(r00,n+1,"angle:r00"); + memory->create(r01,n+1,"angle:r01"); + memory->create(theta0,n+1,"angle:theta0"); + memory->create(setflag,n+1,"angle:setflag"); + + for (int i = 1; i <= n; i++) + setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs +------------------------------------------------------------------------- */ + +void AngleCross::coeff(int narg, char **arg) +{ + if (narg != 7) error->all(FLERR,"Incorrect args for angle coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nangletypes,ilo,ihi); + + int count = 0; + + double kss_one = force->numeric(FLERR,arg[1]); + double kbs0_one = force->numeric(FLERR,arg[2]); + double kbs1_one = force->numeric(FLERR,arg[3]); + double r0_one = force->numeric(FLERR,arg[4]); + double r1_one = force->numeric(FLERR,arg[5]); + double theta0_one = force->numeric(FLERR,arg[6]); + + for (int i = ilo; i <= ihi; i++) { + kss[i] = kss_one; + kbs0[i] = kbs0_one; + kbs1[i] = kbs1_one; + r00[i] = r0_one; + r01[i] = r1_one; + // Convert theta0 from degrees to radians + theta0[i] = theta0_one*MY_PI/180.0; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for angle coefficients"); +} + +/* ---------------------------------------------------------------------- */ + +double AngleCross::equilibrium_angle(int i) +{ + return theta0[i]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void AngleCross::write_restart(FILE *fp) +{ + fwrite(&kss[1],sizeof(double),atom->nangletypes,fp); + fwrite(&kbs0[1],sizeof(double),atom->nangletypes,fp); + fwrite(&kbs1[1],sizeof(double),atom->nangletypes,fp); + fwrite(&r00[1],sizeof(double),atom->nangletypes,fp); + fwrite(&r01[1],sizeof(double),atom->nangletypes,fp); + fwrite(&theta0[1],sizeof(double),atom->nangletypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void AngleCross::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&kss[1],sizeof(double),atom->nangletypes,fp); + fread(&kbs0[1],sizeof(double),atom->nangletypes,fp); + fread(&kbs1[1],sizeof(double),atom->nangletypes,fp); + fread(&r00[1],sizeof(double),atom->nangletypes,fp); + fread(&r01[1],sizeof(double),atom->nangletypes,fp); + fread(&theta0[1],sizeof(double),atom->nangletypes,fp); + } + + MPI_Bcast(&kss[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&kbs0[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&kbs1[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&r00[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&r01[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&theta0[1],atom->nangletypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nangletypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void AngleCross::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nangletypes; i++) + fprintf(fp,"%d %g %g %g %g\n", + i,kss[i],kbs0[i],kbs1[i],r00[i],r01[i],theta0[i]/MY_PI*180.0); +} + +/* ---------------------------------------------------------------------- */ + +double AngleCross::single(int type, int i1, int i2, int i3) +{ + double **x = atom->x; + + double delx1 = x[i1][0] - x[i2][0]; + double dely1 = x[i1][1] - x[i2][1]; + double delz1 = x[i1][2] - x[i2][2]; + domain->minimum_image(delx1,dely1,delz1); + double r1 = sqrt(delx1*delx1 + dely1*dely1 + delz1*delz1); + + double delx2 = x[i3][0] - x[i2][0]; + double dely2 = x[i3][1] - x[i2][1]; + double delz2 = x[i3][2] - x[i2][2]; + domain->minimum_image(delx2,dely2,delz2); + double r2 = sqrt(delx2*delx2 + dely2*dely2 + delz2*delz2); + + double c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + double s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + double dtheta = acos(c) - theta0[type]; + double dr1 = r1 - r00[type]; + double dr2 = r2 - r01[type]; + double energy = kss[type]*dr1*dr2+kbs0[type]*dr1*dtheta + kbs1[type]*dr2*dtheta; + return energy; +} diff --git a/src/USER-YAFF/angle_cross.h b/src/USER-YAFF/angle_cross.h new file mode 100644 index 0000000000000000000000000000000000000000..7709c104145a4ebad853814dcadf792e9e0f5c3e --- /dev/null +++ b/src/USER-YAFF/angle_cross.h @@ -0,0 +1,57 @@ +/* -*- 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 ANGLE_CLASS + +AngleStyle(cross,AngleCross) + +#else + +#ifndef LMP_ANGLE_CROSS_H +#define LMP_ANGLE_CROSS_H + +#include <stdio.h> +#include "angle.h" + +namespace LAMMPS_NS { + +class AngleCross : public Angle { + public: + AngleCross(class LAMMPS *); + virtual ~AngleCross(); + virtual void compute(int, int); + void coeff(int, char **); + double equilibrium_angle(int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, int, int, int); + + protected: + double *kss,*kbs0,*kbs1,*r00,*r01,*theta0; + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args for angle coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-YAFF/angle_mm3.cpp b/src/USER-YAFF/angle_mm3.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ccd9b2e20ead2ec13815f3a06270805d6b316013 --- /dev/null +++ b/src/USER-YAFF/angle_mm3.cpp @@ -0,0 +1,288 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include <math.h> +#include <string.h> +#include <stdlib.h> +#include "angle_mm3.h" +#include "atom.h" +#include "neighbor.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 SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +AngleMM3::AngleMM3(LAMMPS *lmp) : Angle(lmp) {} + +/* ---------------------------------------------------------------------- */ + +AngleMM3::~AngleMM3() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(theta0); + memory->destroy(k2); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleMM3::compute(int eflag, int vflag) +{ + int i1,i2,i3,n,type; + double delx1,dely1,delz1,delx2,dely2,delz2; + double eangle,f1[3],f3[3]; + double dtheta,dtheta2,dtheta3,dtheta4,de_angle; + double dr1,dr2,tk1,tk2,aa1,aa2,aa11,aa12,aa21,aa22; + double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22,b1,b2; + double vx11,vx12,vy11,vy12,vz11,vz12,vx21,vx22,vy21,vy22,vz21,vz22; + + eangle = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **anglelist = neighbor->anglelist; + int nanglelist = neighbor->nanglelist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nanglelist; n++) { + i1 = anglelist[n][0]; + i2 = anglelist[n][1]; + i3 = anglelist[n][2]; + type = anglelist[n][3]; + + // 1st bond + + delx1 = x[i1][0] - x[i2][0]; + dely1 = x[i1][1] - x[i2][1]; + delz1 = x[i1][2] - x[i2][2]; + + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + // 2nd bond + + delx2 = x[i3][0] - x[i2][0]; + dely2 = x[i3][1] - x[i2][1]; + delz2 = x[i3][2] - x[i2][2]; + + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); + + // angle (cos and sin) + + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + // force & energy for angle term + + dtheta = acos(c) - theta0[type]; + dtheta2 = dtheta*dtheta; + dtheta3 = dtheta2*dtheta; + dtheta4 = dtheta3*dtheta; + // MM3 angle term, taking into account that dtheta is expressed in rad + de_angle = 2.0*k2[type]*dtheta*(1.0-1.203211*dtheta+0.367674*dtheta2-0.3239159*dtheta3+0.711270*dtheta4); + + a = -de_angle*s; + a11 = a*c / rsq1; + a12 = -a / (r1*r2); + a22 = a*c / rsq2; + + f1[0] = a11*delx1 + a12*delx2; + f1[1] = a11*dely1 + a12*dely2; + f1[2] = a11*delz1 + a12*delz2; + + f3[0] = a22*delx2 + a12*delx1; + f3[1] = a22*dely2 + a12*dely1; + f3[2] = a22*delz2 + a12*delz1; + // MM3 angle term, taking into account that dtheta is expressed in rad + if (eflag) eangle = k2[type]*dtheta2*(1.0-0.802141*dtheta+0.183837*dtheta2-0.131664*dtheta3+0.237090*dtheta4); + + // apply force to each of 3 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= f1[0] + f3[0]; + f[i2][1] -= f1[1] + f3[1]; + f[i2][2] -= f1[2] + f3[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (evflag) ev_tally(i1,i2,i3,nlocal,newton_bond,eangle,f1,f3, + delx1,dely1,delz1,delx2,dely2,delz2); + } +} + +/* ---------------------------------------------------------------------- */ + +void AngleMM3::allocate() +{ + allocated = 1; + int n = atom->nangletypes; + + memory->create(setflag,n+1,"angle:setflag"); + memory->create(k2,n+1,"angle:k2"); + memory->create(theta0,n+1,"angle:theta0"); + for (int i = 1; i <= n; i++) + setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs + else -> Angle coeffs +------------------------------------------------------------------------- */ + +void AngleMM3::coeff(int narg, char **arg) +{ + if (narg != 3) error->all(FLERR,"Incorrect args for angle coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nangletypes,ilo,ihi); + + int count = 0; + + double k2_one = force->numeric(FLERR,arg[1]); + double theta0_one = force->numeric(FLERR,arg[2]); + + // convert theta0 from degrees to radians + + for (int i = ilo; i <= ihi; i++) { + k2[i] = k2_one; + theta0[i] = theta0_one/180.0 * MY_PI; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for angle coefficients"); + +} + +/* ---------------------------------------------------------------------- */ + +double AngleMM3::equilibrium_angle(int i) +{ + return theta0[i]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void AngleMM3::write_restart(FILE *fp) +{ + fwrite(&k2[1],sizeof(double),atom->nangletypes,fp); + fwrite(&theta0[1],sizeof(double),atom->nangletypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void AngleMM3::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k2[1],sizeof(double),atom->nangletypes,fp); + fread(&theta0[1],sizeof(double),atom->nangletypes,fp); + } + + MPI_Bcast(&k2[1],atom->nangletypes,MPI_DOUBLE,0,world); + MPI_Bcast(&theta0[1],atom->nangletypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nangletypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void AngleMM3::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nangletypes; i++) + fprintf(fp,"%d %g %g\n", + i,k2[i],theta0[i]/MY_PI*180.0); +} + +/* ---------------------------------------------------------------------- */ + +double AngleMM3::single(int type, int i1, int i2, int i3) +{ + double **x = atom->x; + + double delx1 = x[i1][0] - x[i2][0]; + double dely1 = x[i1][1] - x[i2][1]; + double delz1 = x[i1][2] - x[i2][2]; + domain->minimum_image(delx1,dely1,delz1); + double r1 = sqrt(delx1*delx1 + dely1*dely1 + delz1*delz1); + + double delx2 = x[i3][0] - x[i2][0]; + double dely2 = x[i3][1] - x[i2][1]; + double delz2 = x[i3][2] - x[i2][2]; + domain->minimum_image(delx2,dely2,delz2); + double r2 = sqrt(delx2*delx2 + dely2*dely2 + delz2*delz2); + + double c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + double s = sqrt(1.0 - c*c); + if (s < SMALL) s = SMALL; + s = 1.0/s; + + double dtheta = acos(c) - theta0[type]; + double dtheta2 = dtheta*dtheta; + double dtheta3 = dtheta2*dtheta; + double dtheta4 = dtheta3*dtheta; + + double energy = k2[type]*dtheta2*(1.0-0.802141*dtheta+0.183837*dtheta2-0.131664*dtheta3+0.237090*dtheta4); + + return energy; +} diff --git a/src/USER-YAFF/angle_mm3.h b/src/USER-YAFF/angle_mm3.h new file mode 100644 index 0000000000000000000000000000000000000000..2d19b4d1b464e6e534dcfa9e0a0acafc0b563581 --- /dev/null +++ b/src/USER-YAFF/angle_mm3.h @@ -0,0 +1,57 @@ +/* -*- 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 ANGLE_CLASS + +AngleStyle(mm3,AngleMM3) + +#else + +#ifndef LMP_ANGLE_MM3_H +#define LMP_ANGLE_MM3_H + +#include <stdio.h> +#include "angle.h" + +namespace LAMMPS_NS { + +class AngleMM3 : public Angle { + public: + AngleMM3(class LAMMPS *); + virtual ~AngleMM3(); + virtual void compute(int, int); + void coeff(int, char **); + double equilibrium_angle(int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, int, int, int); + + protected: + double *theta0,*k2; + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args for angle coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-YAFF/bond_mm3.cpp b/src/USER-YAFF/bond_mm3.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f0e4197c6bd6029c12d2e1c63b61412b60956333 --- /dev/null +++ b/src/USER-YAFF/bond_mm3.cpp @@ -0,0 +1,220 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include <math.h> +#include <stdlib.h> +#include "bond_mm3.h" +#include "atom.h" +#include "neighbor.h" +#include "domain.h" +#include "comm.h" +#include "force.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +BondMM3::BondMM3(LAMMPS *lmp) : Bond(lmp) {} + +/* ---------------------------------------------------------------------- */ + +BondMM3::~BondMM3() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(r0); + memory->destroy(k2); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondMM3::compute(int eflag, int vflag) +{ + int i1,i2,n,type; + double delx,dely,delz,ebond,fbond; + double rsq,r,dr,dr2,de_bond,K3,K4; + + ebond = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **bondlist = neighbor->bondlist; + int nbondlist = neighbor->nbondlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + /* + E = K(r-r0)^2 [1-2.55*(r-r0)+(7/12)*2.55^(2)*(r-r0)^2] + with -2.55 in angstrom^(-1) and (7/12)*2.55^(2) in angstrom^(-2) + These prefactors are converted here to the correct units + */ + K3 = -2.55/force->angstrom; + K4 = 7.0/12.0*2.55*2.55/force->angstrom/force->angstrom; + + for (n = 0; n < nbondlist; n++) { + i1 = bondlist[n][0]; + i2 = bondlist[n][1]; + type = bondlist[n][2]; + + delx = x[i1][0] - x[i2][0]; + dely = x[i1][1] - x[i2][1]; + delz = x[i1][2] - x[i2][2]; + + rsq = delx*delx + dely*dely + delz*delz; + r = sqrt(rsq); + dr = r - r0[type]; + dr2 = dr*dr; + + // force & energy + + de_bond = 2.0*k2[type]*dr*(1.0 + 1.5*K3*dr + 2.0*K4*dr2); + if (r > 0.0) fbond = -de_bond/r; + else fbond = 0.0; + + if (eflag) ebond = k2[type]*dr2*(1.0+K3*dr+K4*dr2); + + // apply force to each of 2 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += delx*fbond; + f[i1][1] += dely*fbond; + f[i1][2] += delz*fbond; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= delx*fbond; + f[i2][1] -= dely*fbond; + f[i2][2] -= delz*fbond; + } + + if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,fbond,delx,dely,delz); + } +} + +/* ---------------------------------------------------------------------- */ + +void BondMM3::allocate() +{ + allocated = 1; + int n = atom->nbondtypes; + + memory->create(r0,n+1,"bond:r0"); + memory->create(k2,n+1,"bond:k2"); + + memory->create(setflag,n+1,"bond:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs from one line in input script or data file +------------------------------------------------------------------------- */ + +void BondMM3::coeff(int narg, char **arg) +{ + if (narg != 3) error->all(FLERR,"Incorrect args for bond coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nbondtypes,ilo,ihi); + + double k2_one = force->numeric(FLERR,arg[1]); + double r0_one = force->numeric(FLERR,arg[2]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k2[i] = k2_one; + r0[i] = r0_one; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for bond coefficients"); +} + +/* ---------------------------------------------------------------------- + return an equilbrium bond length +------------------------------------------------------------------------- */ + +double BondMM3::equilibrium_distance(int i) +{ + return r0[i]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void BondMM3::write_restart(FILE *fp) +{ + fwrite(&k2[1],sizeof(double),atom->nbondtypes,fp); + fwrite(&r0[1],sizeof(double),atom->nbondtypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void BondMM3::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k2[1],sizeof(double),atom->nbondtypes,fp); + fread(&r0[1],sizeof(double),atom->nbondtypes,fp); + } + MPI_Bcast(&k2[1],atom->nbondtypes,MPI_DOUBLE,0,world); + MPI_Bcast(&r0[1],atom->nbondtypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nbondtypes; i++) setflag[i] = 1; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void BondMM3::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->nbondtypes; i++) + fprintf(fp,"%d %g %g\n",i,k2[i],r0[i]); +} + +/* ---------------------------------------------------------------------- */ + +double BondMM3::single(int type, double rsq, int i, int j, double &fforce) +{ + /* + E = K(r-r0)^2 [1-2.55*(r-r0)+(7/12)*2.55^(2)*(r-r0)^2] + with -2.55 in angstrom^(-1) and (7/12)*2.55^(2) in angstrom^(-2) + These prefactors are converted here to the correct units + */ + double K3 = -2.55/force->angstrom; + double K4 = 7.0/12.0*2.55*2.55/force->angstrom/force->angstrom; + double r = sqrt(rsq); + double dr = r - r0[type]; + double dr2 = dr*dr; + double de_bond = 2.0*k2[type]*dr*(1.0 + 1.5*K3*dr + 2.0*K4*dr2); + if (r > 0.0) fforce = -de_bond/r; + else fforce = 0.0; + return k2[type]*dr2*(1.0+K3*dr+K4*dr2); +} diff --git a/src/USER-YAFF/bond_mm3.h b/src/USER-YAFF/bond_mm3.h new file mode 100644 index 0000000000000000000000000000000000000000..9711d895290e18aa40a4cfb6e35695673e176f44 --- /dev/null +++ b/src/USER-YAFF/bond_mm3.h @@ -0,0 +1,57 @@ +/* -*- 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 BOND_CLASS + +BondStyle(mm3,BondMM3) + +#else + +#ifndef LMP_BOND_MM3_H +#define LMP_BOND_MM3_H + +#include <stdio.h> +#include "bond.h" + +namespace LAMMPS_NS { + +class BondMM3 : public Bond { + public: + BondMM3(class LAMMPS *); + virtual ~BondMM3(); + virtual void compute(int, int); + void coeff(int, char **); + double equilibrium_distance(int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_data(FILE *); + double single(int, double, int, int, double &); + + protected: + double *r0,*k2; + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args for bond coefficients + +Self-explanatory. Check the input script or data file. + +*/ diff --git a/src/USER-YAFF/improper_distharm.cpp b/src/USER-YAFF/improper_distharm.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9a54afed9a473c0740693bb13cbe311b846215af --- /dev/null +++ b/src/USER-YAFF/improper_distharm.cpp @@ -0,0 +1,269 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande, heavily based on the + improper_distance code by Paolo Raiteri (Curtin University) +------------------------------------------------------------------------- */ + +#include <mpi.h> +#include <math.h> +#include <stdlib.h> +#include "improper_distharm.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "domain.h" +#include "force.h" +#include "update.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define TOLERANCE 0.05 +#define SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +ImproperDistHarm::ImproperDistHarm(LAMMPS *lmp) : Improper(lmp) {} + +/* ---------------------------------------------------------------------- */ + +ImproperDistHarm::~ImproperDistHarm() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(k); + memory->destroy(chi); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperDistHarm::compute(int eflag, int vflag) +{ + int i1,i2,i3,i4,n,type; + double xab, yab, zab; // bond 1-2 + double xac, yac, zac; // bond 1-3 + double xad, yad, zad; // bond 1-4 + double xbc, ybc, zbc; // bond 2-3 + double xbd, ybd, zbd; // bond 2-4 + double xcd, ycd, zcd; // bond 3-4 + double xna, yna, zna, rna; // normal + double da; + + double eimproper,f1[3],f2[3],f3[3],f4[3]; + double domega,a; + + eimproper = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **improperlist = neighbor->improperlist; + int nimproperlist = neighbor->nimproperlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nimproperlist; n++) { + i1 = improperlist[n][0]; + i2 = improperlist[n][1]; + i3 = improperlist[n][2]; + i4 = improperlist[n][3]; + type = improperlist[n][4]; + + // geometry of 4-body + // 4 is the central atom + // 1-2-3 are ment to be equivalent + // I need the bonds between 2-3 and 3-4 to get the plane normal + // Then I need the bond 1-4 to project it onto the normal to the plane + + // bond 1->2 + xab = x[i2][0] - x[i1][0]; + yab = x[i2][1] - x[i1][1]; + zab = x[i2][2] - x[i1][2]; + domain->minimum_image(xab,yab,zab); + + // bond 1->3 + xac = x[i3][0] - x[i1][0]; + yac = x[i3][1] - x[i1][1]; + zac = x[i3][2] - x[i1][2]; + domain->minimum_image(xac,yac,zac); + + // bond 1->4 + xad = x[i4][0] - x[i1][0]; + yad = x[i4][1] - x[i1][1]; + zad = x[i4][2] - x[i1][2]; + domain->minimum_image(xad,yad,zad); + + // bond 2-3 + xbc = x[i3][0] - x[i2][0]; + ybc = x[i3][1] - x[i2][1]; + zbc = x[i3][2] - x[i2][2]; + domain->minimum_image(xbc,ybc,zbc); + + // bond 2-4 + xbd = x[i4][0] - x[i2][0]; + ybd = x[i4][1] - x[i2][1]; + zbd = x[i4][2] - x[i2][2]; + domain->minimum_image(xbd,ybd,zbd); + + // bond 3-4 + xcd = x[i4][0] - x[i3][0]; + ycd = x[i4][1] - x[i3][1]; + zcd = x[i4][2] - x[i3][2]; + domain->minimum_image(xcd,ycd,zcd); + + xna = ybc*zcd - zbc*ycd; + yna = -(xbc*zcd - zbc*xcd); + zna = xbc*ycd - ybc*xcd; + rna = 1.0 / sqrt(xna*xna+yna*yna+zna*zna); + xna *= rna; + yna *= rna; + zna *= rna; + + da = -(xna*xad + yna*yad + zna*zad); + + + domega = k[type]*(da - chi[type])*(da - chi[type]); + a = 2.0* k[type]*(da - chi[type]); + + if (eflag) eimproper = domega; + + f1[0] = a*( -xna); + f1[1] = a*( -yna); + f1[2] = a*( -zna); + f4[0] = a*( xna); + f4[1] = a*( yna); + f4[2] = a*( zna); + + f2[0] = a*( yad*zcd - zad*ycd )*rna + a*da*rna*( yna*zcd - zna*ycd); + f2[1] = a*( zad*xcd - xad*zcd )*rna + a*da*rna*( zna*xcd - xna*zcd); + f2[2] = a*( xad*ycd - yad*xcd )*rna + a*da*rna*( xna*ycd - yna*xcd); + + f3[0] = - a*( yad*zcd - zad*ycd )*rna - a*da*rna*( yna*zcd - zna*ycd); + f3[1] = - a*( zad*xcd - xad*zcd )*rna - a*da*rna*( zna*xcd - xna*zcd); + f3[2] = - a*( xad*ycd - yad*xcd )*rna - a*da*rna*( xna*ycd - yna*xcd); + + f3[0] += -a*( yad*zbc - zad*ybc )*rna - a*da*rna*( yna*zbc - zna*ybc); + f3[1] += -a*( zad*xbc - xad*zbc )*rna - a*da*rna*( zna*xbc - xna*zbc); + f3[2] += -a*( xad*ybc - yad*xbc )*rna - a*da*rna*( xna*ybc - yna*xbc); + f4[0] += a*( yad*zbc - zad*ybc )*rna + a*da*rna*( yna*zbc - zna*ybc); + f4[1] += a*( zad*xbc - xad*zbc )*rna + a*da*rna*( zna*xbc - xna*zbc); + f4[2] += a*( xad*ybc - yad*xbc )*rna + a*da*rna*( xna*ybc - yna*xbc); + + // apply force to each of 4 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] += f2[0]; + f[i2][1] += f2[1]; + f[i2][2] += f2[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (newton_bond || i4 < nlocal) { + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; + } + + if (evflag) + ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f2,f3,f4, + xab,yab,zab,xac,yac,zac,xad-xac,yad-yac,zad-zac); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperDistHarm::allocate() +{ + allocated = 1; + int n = atom->nimpropertypes; + + memory->create(k,n+1,"improper:k"); + memory->create(chi,n+1,"improper:chi"); + + memory->create(setflag,n+1,"improper:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one type +------------------------------------------------------------------------- */ + +void ImproperDistHarm::coeff(int narg, char **arg) +{ +// if (which > 0) return; + if (narg != 3) error->all(FLERR,"Incorrect args for improper coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nimpropertypes,ilo,ihi); + + double k_one = force->numeric(FLERR,arg[1]); + double chi_one = force->numeric(FLERR,arg[2]); + + // convert chi from degrees to radians + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k[i] = k_one; + //chi[i] = chi_one/180.0 * PI; + chi[i] = chi_one; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for improper coefficients"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void ImproperDistHarm::write_restart(FILE *fp) +{ + fwrite(&k[1],sizeof(double),atom->nimpropertypes,fp); + fwrite(&chi[1],sizeof(double),atom->nimpropertypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void ImproperDistHarm::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k[1],sizeof(double),atom->nimpropertypes,fp); + fread(&chi[1],sizeof(double),atom->nimpropertypes,fp); + } + MPI_Bcast(&k[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + MPI_Bcast(&chi[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nimpropertypes; i++) setflag[i] = 1; +} diff --git a/src/USER-YAFF/improper_distharm.h b/src/USER-YAFF/improper_distharm.h new file mode 100644 index 0000000000000000000000000000000000000000..b8b9ae780e06d592f10a0e7b27926b4ce916a5b6 --- /dev/null +++ b/src/USER-YAFF/improper_distharm.h @@ -0,0 +1,47 @@ +/* -*- 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 IMPROPER_CLASS + +ImproperStyle(distharm,ImproperDistHarm) + +#else + +#ifndef LMP_IMPROPER_DISTHARM_H +#define LMP_IMPROPER_DISTHARM_H + +#include <stdio.h> +#include "improper.h" + +namespace LAMMPS_NS { + +class ImproperDistHarm : public Improper { + public: + ImproperDistHarm(class LAMMPS *); + ~ImproperDistHarm(); + void compute(int, int); + void coeff(int, char **); + void write_restart(FILE *); + void read_restart(FILE *); + + private: + double *k,*chi; + + void allocate(); +}; + +} + +#endif +#endif + diff --git a/src/USER-YAFF/improper_sqdistharm.cpp b/src/USER-YAFF/improper_sqdistharm.cpp new file mode 100644 index 0000000000000000000000000000000000000000..763d82f1c55faa5f84f50b4cf4755ab5eb2bb08f --- /dev/null +++ b/src/USER-YAFF/improper_sqdistharm.cpp @@ -0,0 +1,269 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande, heavily based on the + improper_distance code by Paolo Raiteri (Curtin University) +------------------------------------------------------------------------- */ + +#include <mpi.h> +#include <math.h> +#include <stdlib.h> +#include "improper_sqdistharm.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "domain.h" +#include "force.h" +#include "update.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define TOLERANCE 0.05 +#define SMALL 0.001 + +/* ---------------------------------------------------------------------- */ + +ImproperSQDistHarm::ImproperSQDistHarm(LAMMPS *lmp) : Improper(lmp) {} + +/* ---------------------------------------------------------------------- */ + +ImproperSQDistHarm::~ImproperSQDistHarm() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(k); + memory->destroy(chi); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperSQDistHarm::compute(int eflag, int vflag) +{ + int i1,i2,i3,i4,n,type; + double xab, yab, zab; // bond 1-2 + double xac, yac, zac; // bond 1-3 + double xad, yad, zad; // bond 1-4 + double xbc, ybc, zbc; // bond 2-3 + double xbd, ybd, zbd; // bond 2-4 + double xcd, ycd, zcd; // bond 3-4 + double xna, yna, zna, rna; // normal + double da; + + double eimproper,f1[3],f2[3],f3[3],f4[3]; + double domega,a; + + eimproper = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = 0; + + double **x = atom->x; + double **f = atom->f; + int **improperlist = neighbor->improperlist; + int nimproperlist = neighbor->nimproperlist; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + for (n = 0; n < nimproperlist; n++) { + i1 = improperlist[n][0]; + i2 = improperlist[n][1]; + i3 = improperlist[n][2]; + i4 = improperlist[n][3]; + type = improperlist[n][4]; + + // geometry of 4-body + // 4 is the central atom + // 1-2-3 are ment to be equivalent + // I need the bonds between 2-3 and 3-4 to get the plane normal + // Then I need the bond 1-4 to project it onto the normal to the plane + + // bond 1->2 + xab = x[i2][0] - x[i1][0]; + yab = x[i2][1] - x[i1][1]; + zab = x[i2][2] - x[i1][2]; + domain->minimum_image(xab,yab,zab); + + // bond 1->3 + xac = x[i3][0] - x[i1][0]; + yac = x[i3][1] - x[i1][1]; + zac = x[i3][2] - x[i1][2]; + domain->minimum_image(xac,yac,zac); + + // bond 1->4 + xad = x[i4][0] - x[i1][0]; + yad = x[i4][1] - x[i1][1]; + zad = x[i4][2] - x[i1][2]; + domain->minimum_image(xad,yad,zad); + + // bond 2-3 + xbc = x[i3][0] - x[i2][0]; + ybc = x[i3][1] - x[i2][1]; + zbc = x[i3][2] - x[i2][2]; + domain->minimum_image(xbc,ybc,zbc); + + // bond 2-4 + xbd = x[i4][0] - x[i2][0]; + ybd = x[i4][1] - x[i2][1]; + zbd = x[i4][2] - x[i2][2]; + domain->minimum_image(xbd,ybd,zbd); + + // bond 3-4 + xcd = x[i4][0] - x[i3][0]; + ycd = x[i4][1] - x[i3][1]; + zcd = x[i4][2] - x[i3][2]; + domain->minimum_image(xcd,ycd,zcd); + + xna = ybc*zcd - zbc*ycd; + yna = -(xbc*zcd - zbc*xcd); + zna = xbc*ycd - ybc*xcd; + rna = 1.0 / sqrt(xna*xna+yna*yna+zna*zna); + xna *= rna; + yna *= rna; + zna *= rna; + + da = -(xna*xad + yna*yad + zna*zad); + + domega = k[type]*(da*da - chi[type])*(da*da - chi[type]); + a = 4.0 * da* k[type]*(da*da - chi[type]); + + if (eflag) eimproper = domega; + + f1[0] = a*( -xna); + f1[1] = a*( -yna); + f1[2] = a*( -zna); + f4[0] = a*( xna); + f4[1] = a*( yna); + f4[2] = a*( zna); + + f2[0] = a*( yad*zcd - zad*ycd )*rna + a*da*rna*( yna*zcd - zna*ycd); + f2[1] = a*( zad*xcd - xad*zcd )*rna + a*da*rna*( zna*xcd - xna*zcd); + f2[2] = a*( xad*ycd - yad*xcd )*rna + a*da*rna*( xna*ycd - yna*xcd); + + f3[0] = - a*( yad*zcd - zad*ycd )*rna - a*da*rna*( yna*zcd - zna*ycd); + f3[1] = - a*( zad*xcd - xad*zcd )*rna - a*da*rna*( zna*xcd - xna*zcd); + f3[2] = - a*( xad*ycd - yad*xcd )*rna - a*da*rna*( xna*ycd - yna*xcd); + + f3[0] += -a*( yad*zbc - zad*ybc )*rna - a*da*rna*( yna*zbc - zna*ybc); + f3[1] += -a*( zad*xbc - xad*zbc )*rna - a*da*rna*( zna*xbc - xna*zbc); + f3[2] += -a*( xad*ybc - yad*xbc )*rna - a*da*rna*( xna*ybc - yna*xbc); + f4[0] += a*( yad*zbc - zad*ybc )*rna + a*da*rna*( yna*zbc - zna*ybc); + f4[1] += a*( zad*xbc - xad*zbc )*rna + a*da*rna*( zna*xbc - xna*zbc); + f4[2] += a*( xad*ybc - yad*xbc )*rna + a*da*rna*( xna*ybc - yna*xbc); + + + // apply force to each of 4 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += f1[0]; + f[i1][1] += f1[1]; + f[i1][2] += f1[2]; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] += f2[0]; + f[i2][1] += f2[1]; + f[i2][2] += f2[2]; + } + + if (newton_bond || i3 < nlocal) { + f[i3][0] += f3[0]; + f[i3][1] += f3[1]; + f[i3][2] += f3[2]; + } + + if (newton_bond || i4 < nlocal) { + f[i4][0] += f4[0]; + f[i4][1] += f4[1]; + f[i4][2] += f4[2]; + } + + if (evflag) + ev_tally(i1,i2,i3,i4,nlocal,newton_bond,eimproper,f2,f3,f4, + xab,yab,zab,xac,yac,zac,xad-xac,yad-yac,zad-zac); + } +} + +/* ---------------------------------------------------------------------- */ + +void ImproperSQDistHarm::allocate() +{ + allocated = 1; + int n = atom->nimpropertypes; + + memory->create(k,n+1,"improper:k"); + memory->create(chi,n+1,"improper:chi"); + + memory->create(setflag,n+1,"improper:setflag"); + for (int i = 1; i <= n; i++) setflag[i] = 0; +} + +/* ---------------------------------------------------------------------- + set coeffs for one type +------------------------------------------------------------------------- */ + +void ImproperSQDistHarm::coeff(int narg, char **arg) +{ +// if (which > 0) return; + if (narg != 3) error->all(FLERR,"Incorrect args for improper coefficients"); + if (!allocated) allocate(); + + int ilo,ihi; + force->bounds(FLERR,arg[0],atom->nimpropertypes,ilo,ihi); + + double k_one = force->numeric(FLERR,arg[1]); + double chi_one = force->numeric(FLERR,arg[2]); + + // convert chi from degrees to radians + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + k[i] = k_one; + //chi[i] = chi_one/180.0 * PI; + chi[i] = chi_one; + setflag[i] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for improper coefficients"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes out coeffs to restart file +------------------------------------------------------------------------- */ + +void ImproperSQDistHarm::write_restart(FILE *fp) +{ + fwrite(&k[1],sizeof(double),atom->nimpropertypes,fp); + fwrite(&chi[1],sizeof(double),atom->nimpropertypes,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads coeffs from restart file, bcasts them +------------------------------------------------------------------------- */ + +void ImproperSQDistHarm::read_restart(FILE *fp) +{ + allocate(); + + if (comm->me == 0) { + fread(&k[1],sizeof(double),atom->nimpropertypes,fp); + fread(&chi[1],sizeof(double),atom->nimpropertypes,fp); + } + MPI_Bcast(&k[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + MPI_Bcast(&chi[1],atom->nimpropertypes,MPI_DOUBLE,0,world); + + for (int i = 1; i <= atom->nimpropertypes; i++) setflag[i] = 1; +} diff --git a/src/USER-YAFF/improper_sqdistharm.h b/src/USER-YAFF/improper_sqdistharm.h new file mode 100644 index 0000000000000000000000000000000000000000..301b5066cbabc4d8a877dd0b56caf603634ac450 --- /dev/null +++ b/src/USER-YAFF/improper_sqdistharm.h @@ -0,0 +1,47 @@ +/* -*- 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 IMPROPER_CLASS + +ImproperStyle(sqdistharm,ImproperSQDistHarm) + +#else + +#ifndef LMP_IMPROPER_SQDISTHARM_H +#define LMP_IMPROPER_SQDISTHARM_H + +#include <stdio.h> +#include "improper.h" + +namespace LAMMPS_NS { + +class ImproperSQDistHarm : public Improper { + public: + ImproperSQDistHarm(class LAMMPS *); + ~ImproperSQDistHarm(); + void compute(int, int); + void coeff(int, char **); + void write_restart(FILE *); + void read_restart(FILE *); + + private: + double *k,*chi; + + void allocate(); +}; + +} + +#endif +#endif + diff --git a/src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b3a267807dbc9c1465ce3ebd726377ce62fc18c0 --- /dev/null +++ b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.cpp @@ -0,0 +1,714 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "pair_lj_switch3_coulgauss_long.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "kspace.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairLJSwitch3CoulGaussLong::PairLJSwitch3CoulGaussLong(LAMMPS *lmp) : Pair(lmp) +{ + ewaldflag = pppmflag = 1; + respa_enable = 1; + writedata = 1; + ftable = NULL; + qdist = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +PairLJSwitch3CoulGaussLong::~PairLJSwitch3CoulGaussLong() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut_lj); + memory->destroy(cut_ljsq); + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(gamma); + memory->destroy(lj1); + memory->destroy(lj2); + memory->destroy(lj3); + memory->destroy(lj4); + memory->destroy(offset); + } + if (ftable) free_tables(); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::compute(int eflag, int vflag) +{ + int i,ii,j,jj,inum,jnum,itype,jtype,itable,jtable,ktable; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,ecoul2,fpair; + double fraction,fraction2,table; + double r,r2inv,r6inv,forcecoul,forcecoul2,forcelj,factor_coul,factor_lj,tr,ftr,trx; + double grij,expm2,prefactor,prefactor2,t,erfc1,erfc2,rrij,expn2,expb,g_ewald2i,g_ewaldi; + int *ilist,*jlist,*numneigh,**firstneigh; + double rsq, lookup_corr; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + union_int_float_t rsq_lookup; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + g_ewaldi = 1.0/g_ewald; + g_ewald2i = g_ewaldi*g_ewaldi; + lookup_corr = 0.0; + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + 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; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + // Lennard-Jones potential + r = sqrt(rsq); + r6inv = r2inv*r2inv*r2inv; + forcelj = r6inv*(12.0*lj3[itype][jtype]*r6inv - 6.0*lj4[itype][jtype]); + // Correction for Gaussian radii + if (lj2[itype][jtype]==0.0) { + // This means a point charge is considerd, so the correction is zero + expn2 = 0.0; + erfc2 = 0.0; + forcecoul2 = 0.0; + } + else { + rrij = lj2[itype][jtype]*r; + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + prefactor2 = -qqrd2e*qtmp*q[j]/r; + forcecoul2 = prefactor2*(erfc2+EWALD_F*rrij*expn2); + } + } else forcelj = 0.0; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + } + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) - + offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch33 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + + fpair = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + evdwl *= factor_lj; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut_lj,n+1,n+1,"pair:cut_lj"); + memory->create(cut_ljsq,n+1,n+1,"pair:cut_ljsq"); + memory->create(epsilon,n+1,n+1,"pair:epsilon"); + memory->create(sigma,n+1,n+1,"pair:sigma"); + memory->create(gamma,n+1,n+1,"pair:gamma"); + memory->create(lj1,n+1,n+1,"pair:lj1"); + memory->create(lj2,n+1,n+1,"pair:lj2"); + memory->create(lj3,n+1,n+1,"pair:lj3"); + memory->create(lj4,n+1,n+1,"pair:lj4"); + memory->create(offset,n+1,n+1,"pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::settings(int narg, char **arg) +{ + if (narg < 2 || narg > 3) error->all(FLERR,"Illegal pair_style command"); + + cut_lj_global = force->numeric(FLERR,arg[0]); + if (narg == 2) { + cut_coul = cut_lj_global; + truncw = force->numeric(FLERR,arg[1]); + } + else { + cut_coul = force->numeric(FLERR,arg[1]); + truncw = force->numeric(FLERR,arg[2]); + } + if (truncw>0.0) truncwi = 1.0/truncw; + else truncwi = 0.0; + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut_lj[i][j] = cut_lj_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::coeff(int narg, char **arg) +{ + if (narg < 5 || narg > 6) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double epsilon_one = force->numeric(FLERR,arg[2]); + double sigma_one = force->numeric(FLERR,arg[3]); + double gamma_one = force->numeric(FLERR,arg[4]); + + double cut_lj_one = cut_lj_global; + if (narg == 6) cut_lj_one = force->numeric(FLERR,arg[5]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + epsilon[i][j] = epsilon_one; + sigma[i][j] = sigma_one; + gamma[i][j] = gamma_one; + cut_lj[i][j] = cut_lj_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::init_style() +{ + if (!atom->q_flag) + error->all(FLERR,"Pair style lj/switch3/coulgauss/long requires atom attribute q"); + + // request regular or rRESPA neighbor list + + int irequest; + int respa = 0; + + if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { + if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; + if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } + + irequest = neighbor->request(this,instance_me); + + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; + + cut_coulsq = cut_coul * cut_coul; + + // set rRESPA cutoffs + + if (strstr(update->integrate_style,"respa") && + ((Respa *) update->integrate)->level_inner >= 0) + cut_respa = ((Respa *) update->integrate)->cutoff; + else cut_respa = NULL; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul,cut_respa); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairLJSwitch3CoulGaussLong::init_one(int i, int j) +{ + if (setflag[i][j] == 0) { + epsilon[i][j] = mix_energy(epsilon[i][i],epsilon[j][j], + sigma[i][i],sigma[j][j]); + sigma[i][j] = mix_distance(sigma[i][i],sigma[j][j]); + gamma[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + cut_lj[i][j] = mix_distance(cut_lj[i][i],cut_lj[j][j]); + } + + double cut = MAX(cut_lj[i][j],cut_coul+2.0*qdist); + cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; + lj1[i][j] = 48.0 * epsilon[i][j] * pow(sigma[i][j],12.0); + if (gamma[i][i]==0.0 && gamma[j][j]==0.0) lj2[i][j] = 0.0; + else lj2[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + lj3[i][j] = 4.0 * epsilon[i][j] * pow(sigma[i][j],12.0); + lj4[i][j] = 4.0 * epsilon[i][j] * pow(sigma[i][j],6.0); + + if (offset_flag && (cut_lj[i][j] > 0.0)) { + // Truncation is active, so offset is zero, except if truncw==0.0 + if (truncw==0.0) { + double r = cut_lj[i][j]; + double r2inv = 1.0/(r*r); + double r6inv = r2inv*r2inv*r2inv; + double r12inv = r6inv*r6inv; + offset[i][j] = lj3[i][j]*r12inv-lj4[i][j]*r6inv; + } + else {offset[i][j] = 0.0;} + } else offset[i][j] = 0.0; + + cut_ljsq[j][i] = cut_ljsq[i][j]; + cut_lj[j][i] = cut_lj[i][j]; + lj1[j][i] = lj1[i][j]; + lj2[j][i] = lj2[i][j]; + lj3[j][i] = lj3[i][j]; + lj4[j][i] = lj4[i][j]; + offset[j][i] = offset[i][j]; + + // check interior rRESPA cutoff + + if (cut_respa && MIN(cut_lj[i][j],cut_coul) < cut_respa[3]) + error->all(FLERR,"Pair cutoff < Respa interior cutoff"); + + // compute I,J contribution to long-range tail correction + // count total # of atoms of type I and J via Allreduce + + if (tail_flag) { + int *type = atom->type; + int nlocal = atom->nlocal; + + double count[2],all[2]; + count[0] = count[1] = 0.0; + for (int k = 0; k < nlocal; k++) { + if (type[k] == i) count[0] += 1.0; + if (type[k] == j) count[1] += 1.0; + } + MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); + + double cg = epsilon[i][j]; + double cg1 = cut_lj[i][j]; + double cg3 = sigma[i][j]; + if (truncw > 0.0) { + double cg5 = truncw; + double t1 = pow(cg1, 0.2e1); + double t2 = t1 * cg1; + double t3 = t1 * t1; + double t4 = t3 * t2; + double t5 = -cg1 + cg5; + double t6 = t5 * t5; + double t8 = t6 * t6; + double t9 = t8 * t6 * t5; + double t10 = t4 * t9; + double t11 = log(-t5); + double t14 = log(cg1); + double t19 = pow(cg5, 0.2e1); + double t20 = t19 * t19; + double t21 = t20 * t19; + double t24 = pow(cg3, 0.2e1); + double t25 = t24 * t24; + double t26 = t25 * t24; + double t29 = t20 * cg5; + double t35 = t3 * t3; + double t41 = t19 * cg5; + double t58 = t21 * t3 * t1 - t21 * t26 / 0.84e2 - 0.6e1 * t29 * t4 + t29 * cg1 * t26 / 0.18e2 + 0.15e2 * t20 * t35 - t20 * t1 * t26 / 0.9e1 - 0.20e2 * t41 * t35 * cg1 + t41 * t2 * t26 / 0.9e1 + 0.15e2 * t19 * t35 * t1 - t19 * t3 * t26 / 0.18e2 - 0.6e1 * t35 * t2 * cg5 + t35 * t3; + double t71 = -0.4e1 * cg * (0.2e1 * t10 * t11 - 0.2e1 * t10 * t14 + (cg5 - 0.2e1 * cg1) * t58 * cg5) * t26 / t4 / t41 / t9; + etail_ij = 2.0*MY_PI*all[0]*all[1]*t71; + ptail_ij = 2.0*MY_PI*all[0]*all[1]*t71; + } + else { + double t1 = pow(cg3, 0.2e1); + double t2 = t1 * t1; + double t3 = t2 * t1; + double t5 = pow(cg1, 0.2e1); + double t6 = t5 * t5; + double t10 = t6 * t6; + double t16 = -0.4e1 / 0.9e1 * t3 * cg * (0.3e1 * t6 * t5 - t3) / t10 / cg1; + t1 = pow(cg3, 0.2e1); + t2 = t1 * t1; + t3 = t2 * t1; + t5 = pow(cg1, 0.2e1); + t6 = t5 * t5; + double t11 = t6 * t6; + double t17 = 0.8e1 / 0.3e1 * t3 * cg * (0.3e1 * t6 * t5 - 0.2e1 * t3) / t11 / cg1; + etail_ij = 2.0*MY_PI*all[0]*all[1]*t16; + ptail_ij = -2.0/3.0*MY_PI*all[0]*all[1]*t17; + } + } + + return cut; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + fwrite(&epsilon[i][j],sizeof(double),1,fp); + fwrite(&sigma[i][j],sizeof(double),1,fp); + fwrite(&gamma[i][j],sizeof(double),1,fp); + fwrite(&cut_lj[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::read_restart(FILE *fp) +{ + read_restart_settings(fp); + + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&epsilon[i][j],sizeof(double),1,fp); + fread(&sigma[i][j],sizeof(double),1,fp); + fread(&gamma[i][j],sizeof(double),1,fp); + fread(&cut_lj[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_lj[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_restart_settings(FILE *fp) +{ + fwrite(&cut_lj_global,sizeof(double),1,fp); + fwrite(&cut_coul,sizeof(double),1,fp); + fwrite(&truncw,sizeof(double),1,fp); + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&ncoultablebits,sizeof(int),1,fp); + fwrite(&tabinner,sizeof(double),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_lj_global,sizeof(double),1,fp); + fread(&cut_coul,sizeof(double),1,fp); + fread(&truncw,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + fread(&ncoultablebits,sizeof(int),1,fp); + fread(&tabinner,sizeof(double),1,fp); + } + MPI_Bcast(&cut_lj_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_coul,1,MPI_DOUBLE,0,world); + MPI_Bcast(&truncw,1,MPI_DOUBLE,0,world); + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&ncoultablebits,1,MPI_INT,0,world); + MPI_Bcast(&tabinner,1,MPI_DOUBLE,0,world); +} + + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g %g\n",i,epsilon[i][i],sigma[i][i],gamma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairLJSwitch3CoulGaussLong::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp,"%d %d %g %g %g %g\n",i,j,epsilon[i][j],sigma[i][j],gamma[i][j],cut_lj[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairLJSwitch3CoulGaussLong::single(int i, int j, int itype, int jtype, + double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double r2inv,r6inv,r,grij,expm2,t,erfc1,prefactor,prefactor2,rrij,expn2,erfc2; + double fraction,table,forcecoul,forcecoul2,forcelj,phicoul,phicoul2,philj; + double expb, ecoul, evdwl, trx, tr, ftr; + + int itable; + + r2inv = 1.0/rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + union_int_float_t rsq_lookup_single; + rsq_lookup_single.f = rsq; + itable = rsq_lookup_single.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup_single.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = atom->q[i]*atom->q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = atom->q[i]*atom->q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r = sqrt(rsq); + r6inv = r2inv*r2inv*r2inv; + rrij = lj2[itype][jtype] * r; + if (rrij==0.0) { + expn2 = 0.0; + erfc2 = 0.0; + } + else { + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + } + prefactor2 = -force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul2 = prefactor2 * (erfc2 + EWALD_F*rrij*expn2); + forcelj = expb*lj1[itype][jtype]*r-6.0*lj4[itype][jtype]*r6inv; + } else forcelj = 0.0; + + double eng = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + phicoul = atom->q[i]*atom->q[j] * table; + } + if (factor_coul < 1.0) phicoul -= (1.0-factor_coul)*prefactor; + eng += phicoul; + } + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) - + offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch3 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + eng += evdwl*factor_lj; + fforce = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + + return eng; +} + +/* ---------------------------------------------------------------------- */ + +void *PairLJSwitch3CoulGaussLong::extract(const char *str, int &dim) +{ + dim = 0; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + if (strcmp(str,"gamma") == 0) return (void *) gamma; + return NULL; +} diff --git a/src/USER-YAFF/pair_lj_switch3_coulgauss_long.h b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.h new file mode 100644 index 0000000000000000000000000000000000000000..75686d55a2cb1932874eb65014ff4d2af4ff2287 --- /dev/null +++ b/src/USER-YAFF/pair_lj_switch3_coulgauss_long.h @@ -0,0 +1,91 @@ +/* -*- 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 PAIR_CLASS + +PairStyle(lj/switch3/coulgauss/long,PairLJSwitch3CoulGaussLong) + +#else + +#ifndef LMP_PAIR_LJ_SWITCH3_COULGAUSS_LONG_H +#define LMP_PAIR_LJ_SWITCH3_COULGAUSS_LONG_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairLJSwitch3CoulGaussLong : public Pair { + + public: + PairLJSwitch3CoulGaussLong(class LAMMPS *); + virtual ~PairLJSwitch3CoulGaussLong(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + virtual void write_restart_settings(FILE *); + virtual void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + virtual double single(int, int, int, int, double, double, double, double &); + + virtual void *extract(const char *, int &); + + protected: + double cut_lj_global; + double truncw, truncwi; + double **cut_lj,**cut_ljsq; + double cut_coul,cut_coulsq; + double **epsilon,**sigma,**gamma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double *cut_respa; + double qdist; // TIP4P distance from O site to negative charge + double g_ewald; + + virtual void allocate(); +}; + +} + +#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: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/switch3/coulgauss/long requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/ diff --git a/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f8346f1e33094e38ee11b16b82e89d0f69cc7892 --- /dev/null +++ b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.cpp @@ -0,0 +1,715 @@ +/* ---------------------------------------------------------------------- + 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: Steven Vandenbrande +------------------------------------------------------------------------- */ + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "pair_mm3_switch3_coulgauss_long.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "kspace.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairMM3Switch3CoulGaussLong::PairMM3Switch3CoulGaussLong(LAMMPS *lmp) : Pair(lmp) +{ + ewaldflag = pppmflag = 1; + respa_enable = 1; + writedata = 1; + ftable = NULL; + qdist = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +PairMM3Switch3CoulGaussLong::~PairMM3Switch3CoulGaussLong() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut_lj); + memory->destroy(cut_ljsq); + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(gamma); + memory->destroy(lj1); + memory->destroy(lj2); + memory->destroy(lj3); + memory->destroy(lj4); + memory->destroy(offset); + } + if (ftable) free_tables(); +} + +/* ---------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::compute(int eflag, int vflag) +{ + int i,ii,j,jj,inum,jnum,itype,jtype,itable,jtable,ktable; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,ecoul2,fpair; + double fraction,fraction2,table; + double r,r2inv,r6inv,forcecoul,forcecoul2,forcelj,factor_coul,factor_lj,tr,ftr,trx; + double grij,expm2,prefactor,prefactor2,t,erfc1,erfc2,rrij,expn2,expb,g_ewald2i,g_ewaldi; + int *ilist,*jlist,*numneigh,**firstneigh; + double rsq, lookup_corr; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + union_int_float_t rsq_lookup; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + g_ewaldi = 1.0/g_ewald; + g_ewald2i = g_ewaldi*g_ewaldi; + lookup_corr = 0.0; + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + 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; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + // Repulsive exponential part + r = sqrt(rsq); + expb = lj3[itype][jtype]*exp(-lj1[itype][jtype]*r); + forcelj = expb*lj1[itype][jtype]*r; + // Attractive r^-6 part + r6inv = r2inv*r2inv*r2inv; + forcelj -= 6.0*lj4[itype][jtype]*r6inv; + // Correction for Gaussian radii + if (lj2[itype][jtype]==0.0) { + // This means a point charge is considered, so the correction is zero + expn2 = 0.0; + erfc2 = 0.0; + forcecoul2 = 0.0; + } + else { + rrij = lj2[itype][jtype]*r; + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + prefactor2 = -qqrd2e*qtmp*q[j]/r; + forcecoul2 = prefactor2*(erfc2+EWALD_F*rrij*expn2); + } + } else forcelj = 0.0; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + } + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = expb-lj4[itype][jtype]*r6inv-offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch3 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + + fpair = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + evdwl *= factor_lj; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut_lj,n+1,n+1,"pair:cut_lj"); + memory->create(cut_ljsq,n+1,n+1,"pair:cut_ljsq"); + memory->create(epsilon,n+1,n+1,"pair:epsilon"); + memory->create(sigma,n+1,n+1,"pair:sigma"); + memory->create(gamma,n+1,n+1,"pair:gamma"); + memory->create(lj1,n+1,n+1,"pair:lj1"); + memory->create(lj2,n+1,n+1,"pair:lj2"); + memory->create(lj3,n+1,n+1,"pair:lj3"); + memory->create(lj4,n+1,n+1,"pair:lj4"); + memory->create(offset,n+1,n+1,"pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::settings(int narg, char **arg) +{ + if (narg < 2 || narg > 3) error->all(FLERR,"Illegal pair_style command"); + + cut_lj_global = force->numeric(FLERR,arg[0]); + if (narg == 2) { + cut_coul = cut_lj_global; + truncw = force->numeric(FLERR,arg[1]); + } + else { + cut_coul = force->numeric(FLERR,arg[1]); + truncw = force->numeric(FLERR,arg[2]); + } + if (truncw>0.0) truncwi = 1.0/truncw; + else truncwi = 0.0; + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut_lj[i][j] = cut_lj_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::coeff(int narg, char **arg) +{ + if (narg < 5 || narg > 6) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double epsilon_one = force->numeric(FLERR,arg[2]); + double sigma_one = force->numeric(FLERR,arg[3]); + double gamma_one = force->numeric(FLERR,arg[4]); + + double cut_lj_one = cut_lj_global; + if (narg == 6) cut_lj_one = force->numeric(FLERR,arg[5]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + epsilon[i][j] = epsilon_one; + sigma[i][j] = sigma_one; + gamma[i][j] = gamma_one; + cut_lj[i][j] = cut_lj_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::init_style() +{ + if (!atom->q_flag) + error->all(FLERR,"Pair style mm3/switch3/coulgauss/long requires atom attribute q"); + + // request regular or rRESPA neighbor list + + int irequest; + int respa = 0; + + if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { + if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; + if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } + + irequest = neighbor->request(this,instance_me); + + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; + + cut_coulsq = cut_coul * cut_coul; + + // set rRESPA cutoffs + + if (strstr(update->integrate_style,"respa") && + ((Respa *) update->integrate)->level_inner >= 0) + cut_respa = ((Respa *) update->integrate)->cutoff; + else cut_respa = NULL; + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; + + // setup force tables + + if (ncoultablebits) init_tables(cut_coul,cut_respa); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairMM3Switch3CoulGaussLong::init_one(int i, int j) +{ + if (setflag[i][j] == 0) { + epsilon[i][j] = sqrt(epsilon[i][i]*epsilon[j][j]); + sigma[i][j] = 0.5*(sigma[i][i] + sigma[j][j]); + gamma[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + cut_lj[i][j] = mix_distance(cut_lj[i][i],cut_lj[j][j]); + } + + double cut = MAX(cut_lj[i][j],cut_coul+2.0*qdist); + cut_ljsq[i][j] = cut_lj[i][j] * cut_lj[i][j]; + lj1[i][j] = 12.0 / (2.0*sigma[i][j]); + if (gamma[i][i]==0.0 && gamma[j][j]==0.0) lj2[i][j] = 0.0; + else lj2[i][j] = 1.0/sqrt(gamma[i][i]*gamma[i][i]+gamma[j][j]*gamma[j][j]); + lj3[i][j] = 1.84e5 * epsilon[i][j]; + lj4[i][j] = 2.25 * epsilon[i][j] * pow(2.0*sigma[i][j],6.0); + + if (offset_flag && (cut_lj[i][j] > 0.0)) { + // Truncation is active, so offset is zero, except if truncw==0.0 + if (truncw==0.0) { + double r = cut_lj[i][j]; + double r2inv = 1.0/(r*r); + double r6inv = r2inv*r2inv*r2inv; + double expb = lj3[i][j]*exp(-lj1[i][j]*r); + offset[i][j] = expb-lj4[i][j]*r6inv; + } + else {offset[i][j] = 0.0;} + } else offset[i][j] = 0.0; + + cut_ljsq[j][i] = cut_ljsq[i][j]; + cut_lj[j][i] = cut_lj[i][j]; + lj1[j][i] = lj1[i][j]; + lj2[j][i] = lj2[i][j]; + lj3[j][i] = lj3[i][j]; + lj4[j][i] = lj4[i][j]; + offset[j][i] = offset[i][j]; + + // check interior rRESPA cutoff + + if (cut_respa && MIN(cut_lj[i][j],cut_coul) < cut_respa[3]) + error->all(FLERR,"Pair cutoff < Respa interior cutoff"); + + // compute I,J contribution to long-range tail correction + // count total # of atoms of type I and J via Allreduce + + if (tail_flag) { + int *type = atom->type; + int nlocal = atom->nlocal; + + double count[2],all[2]; + count[0] = count[1] = 0.0; + for (int k = 0; k < nlocal; k++) { + if (type[k] == i) count[0] += 1.0; + if (type[k] == j) count[1] += 1.0; + } + MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); + + double cg = epsilon[i][j]; + double cg1 = cut_lj[i][j]; + double cg3 = 2.0*sigma[i][j];//Mind the factor 2 here!!! + if (truncw > 0.0) { + double cg5 = truncw; + double t1 = pow(cg3, 0.2e1); + double t2 = t1 * cg3; + double t3 = 0.5e1 / 0.216e3 * t2; + double t5 = cg1 / 0.9e1; + double t8 = -cg1 + cg5; + double t14 = t8 * t8; + double t17 = 0.1e1 / cg3; + double t20 = exp(0.12e2 * t17 * cg5); + double t30 = pow(cg1, 0.2e1); + double t36 = exp(-0.12e2 * t17 * cg1); + double t37 = pow(cg5, 0.2e1); + double t39 = 0.1e1 / t37 / cg5; + double t43 = cg1 * t8; + double t44 = log(-t8); + double t47 = log(cg1); + double t54 = t1 * t1; + double t64 = cg * (0.6388888889e3 * ((-t3 + (0.7e1 / 0.36e2 * cg5 - t5) * t1 - 0.2e1 / 0.3e1 * t8 * (cg5 - cg1 / 0.4e1) * cg3 + cg5 * t14) * t20 + t3 + (cg5 / 0.12e2 + t5) * t1 + (cg5 + cg1 / 0.3e1) * cg1 * cg3 / 0.2e1 + t30 * cg5) * t2 * t36 * t39 - 0.225e1 * (0.2e1 * t43 * t44 - 0.2e1 * t43 * t47 + cg5 * (cg5 - 0.2e1 * cg1)) * t54 * t1 / cg1 / t8 * t39); + etail_ij = 2.0*MY_PI*all[0]*all[1]*t64; + ptail_ij = 2.0*MY_PI*all[0]*all[1]*t64; + } + else { + double t2 = pow(cg3, 0.2e1); + double t3 = t2 * t2; + double t7 = 0.12e2 / cg3 * cg1; + double t8 = exp(t7); + double t11 = pow(cg1, 0.2e1); + double t12 = t11 * t11; + double t17 = t11 * cg1; + double t21 = exp(-t7); + double t27 = -0.9259259259e-2 * cg3 * cg * (0.81e2 * t3 * cg3 * t8 - 0.1656000e7 * t12 * cg1 - 0.276000e6 * cg3 * t12 - 0.23000e5 * t2 * t17) * t21 / t17; + double t1 = pow(cg3, 0.2e1); + t2 = t1 * t1; + double t6 = 0.12e2 / cg3 * cg1; + t7 = exp(t6); + double t10 = pow(cg1, 0.2e1); + t11 = t10 * t10; + double t19 = t10 * cg1; + double t25 = exp(-t6); + double t29 = 0.5555555556e-1 * cg * (0.81e2 * t2 * t1 * t7 - 0.3312000e7 * t11 * t10 - 0.828000e6 * cg3 * t11 * cg1 - 0.138000e6 * t1 * t11 - 0.11500e5 * t19 * t1 * cg3) * t25 / t19; + etail_ij = 2.0*MY_PI*all[0]*all[1]*t27; + ptail_ij = -2.0/3.0*MY_PI*all[0]*all[1]*t29; + } + } + + return cut; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) { + fwrite(&epsilon[i][j],sizeof(double),1,fp); + fwrite(&sigma[i][j],sizeof(double),1,fp); + fwrite(&gamma[i][j],sizeof(double),1,fp); + fwrite(&cut_lj[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::read_restart(FILE *fp) +{ + read_restart_settings(fp); + + allocate(); + + int i,j; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&epsilon[i][j],sizeof(double),1,fp); + fread(&sigma[i][j],sizeof(double),1,fp); + fread(&gamma[i][j],sizeof(double),1,fp); + fread(&cut_lj[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_lj[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_restart_settings(FILE *fp) +{ + fwrite(&cut_lj_global,sizeof(double),1,fp); + fwrite(&cut_coul,sizeof(double),1,fp); + fwrite(&truncw,sizeof(double),1,fp); + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); + fwrite(&tail_flag,sizeof(int),1,fp); + fwrite(&ncoultablebits,sizeof(int),1,fp); + fwrite(&tabinner,sizeof(double),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_lj_global,sizeof(double),1,fp); + fread(&cut_coul,sizeof(double),1,fp); + fread(&truncw,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + fread(&ncoultablebits,sizeof(int),1,fp); + fread(&tabinner,sizeof(double),1,fp); + } + printf("Reading from restart, trunc = %f\n",truncw); + MPI_Bcast(&cut_lj_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_coul,1,MPI_DOUBLE,0,world); + MPI_Bcast(&truncw,1,MPI_DOUBLE,0,world); + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); + MPI_Bcast(&ncoultablebits,1,MPI_INT,0,world); + MPI_Bcast(&tabinner,1,MPI_DOUBLE,0,world); +} + + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g %g\n",i,epsilon[i][i],sigma[i][i],gamma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairMM3Switch3CoulGaussLong::write_data_all(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + for (int j = i; j <= atom->ntypes; j++) + fprintf(fp,"%d %d %g %g %g %g\n",i,j,epsilon[i][j],sigma[i][j],gamma[i][j],cut_lj[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairMM3Switch3CoulGaussLong::single(int i, int j, int itype, int jtype, + double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double r2inv,r6inv,r,grij,expm2,t,erfc1,prefactor,prefactor2,rrij,expn2,erfc2; + double fraction,table,forcecoul,forcecoul2,forcelj,phicoul,phicoul2,philj; + double expb, ecoul, evdwl, trx, tr, ftr; + + int itable; + + r2inv = 1.0/rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc1 = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul = prefactor * (erfc1 + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + union_int_float_t rsq_lookup_single; + rsq_lookup_single.f = rsq; + itable = rsq_lookup_single.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup_single.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = atom->q[i]*atom->q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = atom->q[i]*atom->q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + r = sqrt(rsq); + r6inv = r2inv*r2inv*r2inv; + expb = lj3[itype][jtype]*exp(-lj1[itype][jtype]*r); + rrij = lj2[itype][jtype] * r; + if (rrij==0.0) { + expn2 = 0.0; + erfc2 = 0.0; + } + else { + expn2 = exp(-rrij*rrij); + erfc2 = erfc(rrij); + } + prefactor2 = -force->qqrd2e * atom->q[i]*atom->q[j]/r; + forcecoul2 = prefactor2 * (erfc2 + EWALD_F*rrij*expn2); + forcelj = expb*lj1[itype][jtype]*r-6.0*lj4[itype][jtype]*r6inv; + } else forcelj = 0.0; + + double eng = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor*erfc1; + else { + table = etable[itable] + fraction*detable[itable]; + phicoul = atom->q[i]*atom->q[j] * table; + } + if (factor_coul < 1.0) phicoul -= (1.0-factor_coul)*prefactor; + eng += phicoul; + } + + if (rsq < cut_ljsq[itype][jtype]) { + ecoul += prefactor2*erfc2*factor_coul; + evdwl = expb-lj4[itype][jtype]*r6inv-offset[itype][jtype]; + } else evdwl = 0.0; + + // Truncation, see Yaff Switch3 + if (truncw>0) { + if (rsq < cut_ljsq[itype][jtype]) { + if (r>cut_lj[itype][jtype]-truncw) { + trx = (cut_lj[itype][jtype]-r)*truncwi; + tr = trx*trx*(3.0-2.0*trx); + ftr = 6.0*trx*(1.0-trx)*r*truncwi; + forcelj = forcelj*tr + evdwl*ftr; + evdwl *= tr; + } + } + } + eng += evdwl*factor_lj; + fforce = (forcecoul + factor_coul*forcecoul2 + factor_lj*forcelj) * r2inv; + + return eng; +} + +/* ---------------------------------------------------------------------- */ + +void *PairMM3Switch3CoulGaussLong::extract(const char *str, int &dim) +{ + dim = 0; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + if (strcmp(str,"gamma") == 0) return (void *) gamma; + return NULL; +} diff --git a/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h new file mode 100644 index 0000000000000000000000000000000000000000..35ae6c7995c927a4dd540efb063f5af0ebb3e053 --- /dev/null +++ b/src/USER-YAFF/pair_mm3_switch3_coulgauss_long.h @@ -0,0 +1,91 @@ +/* -*- 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 PAIR_CLASS + +PairStyle(mm3/switch3/coulgauss/long,PairMM3Switch3CoulGaussLong) + +#else + +#ifndef LMP_PAIR_MM3_SWITCH3_COULGAUSS_LONG_H +#define LMP_PAIR_MM3_SWITCH3_COULGAUSS_LONG_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairMM3Switch3CoulGaussLong : public Pair { + + public: + PairMM3Switch3CoulGaussLong(class LAMMPS *); + virtual ~PairMM3Switch3CoulGaussLong(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + virtual void write_restart_settings(FILE *); + virtual void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + virtual double single(int, int, int, int, double, double, double, double &); + + virtual void *extract(const char *, int &); + + protected: + double cut_lj_global; + double truncw, truncwi; + double **cut_lj,**cut_ljsq; + double cut_coul,cut_coulsq; + double **epsilon,**sigma,**gamma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double *cut_respa; + double qdist; // TIP4P distance from O site to negative charge + double g_ewald; + + virtual void allocate(); +}; + +} + +#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: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style mm3/switch3/coulgauss/long requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/ diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 9c536dcbc6610478c57bf05a5e4e913130b73db3..c3d55d76a41c8b0e53dc0e45598f2a611eab65c4 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -725,6 +725,24 @@ void CreateAtoms::add_lattice() domain->lattice->bbox(1,bboxhi[0],bboxhi[1],bboxhi[2], xmin,ymin,zmin,xmax,ymax,zmax); + // narrow down min/max further by extent of the region, if possible + + if (domain->regions[nregion]->bboxflag) { + const double rxmin = domain->regions[nregion]->extent_xlo; + const double rxmax = domain->regions[nregion]->extent_xhi; + const double rymin = domain->regions[nregion]->extent_ylo; + const double rymax = domain->regions[nregion]->extent_yhi; + const double rzmin = domain->regions[nregion]->extent_zlo; + const double rzmax = domain->regions[nregion]->extent_zhi; + + if (rxmin > xmin) xmin = (rxmin > xmax) ? xmax : rxmin; + if (rxmax < xmax) xmax = (rxmax < xmin) ? xmin : rxmax; + if (rymin > ymin) ymin = (rymin > ymax) ? ymax : rymin; + if (rymax < ymax) ymax = (rymax < ymin) ? ymin : rymax; + if (rzmin > zmin) zmin = (rzmin > zmax) ? zmax : rzmin; + if (rzmax < zmax) zmax = (rzmax < zmin) ? zmin : rzmax; + } + // 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 @@ -751,15 +769,32 @@ void CreateAtoms::add_lattice() // 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; + const double * const * const basis = domain->lattice->basis; + + // rough estimate of total time used for create atoms. + // one inner loop takes about 25ns on a typical desktop CPU core in 2019 + double testimate = 2.5e-8/3600.0; // convert seconds to hours + testimate *= static_cast<double>(khi-klo+1); + testimate *= static_cast<double>(jhi-jlo+1); + testimate *= static_cast<double>(ihi-ilo+1); + testimate *= static_cast<double>(nbasis); + double maxestimate = 0.0; + MPI_Reduce(&testimate,&maxestimate,1,MPI_DOUBLE,MPI_MAX,0,world); + + if ((comm->me == 0) && (maxestimate > 0.01)) { + if (screen) fprintf(screen,"WARNING: create_atoms will take " + "approx. %.2f hours to complete\n",maxestimate); + if (logfile) fprintf(logfile,"WARNING: create_atoms will take " + "approx. %.2f hours to complete\n",maxestimate); + } int i,j,k,m; - for (k = klo; k <= khi; k++) - for (j = jlo; j <= jhi; j++) - for (i = ilo; i <= ihi; i++) + for (k = klo; k <= khi; k++) { + for (j = jlo; j <= jhi; j++) { + for (i = ilo; i <= ihi; i++) { for (m = 0; m < nbasis; m++) { + double *coord; + double x[3],lamda[3]; x[0] = i + basis[m][0]; x[1] = j + basis[m][1]; @@ -794,8 +829,12 @@ void CreateAtoms::add_lattice() if (mode == ATOM) atom->avec->create_atom(basistype[m],x); else add_molecule(x); } + } + } + } } + /* ---------------------------------------------------------------------- add a randomly rotated molecule with its center at center if quat_user set, perform requested rotation